Skip to content

DAP v0.3.0 — multi-user release

Latest

Choose a tag to compare

@rafeekpro rafeekpro released this 13 May 07:26
3121895

What's Changed

  • feat: pivot stack from TypeScript/Node to Python + uv by @rafeekpro in #2
  • feat(ci): gate PRs with ruff + pytest by @rafeekpro in #4
  • chore(ci): enforce "main merges only from develop" by @rafeekpro in #6
  • chore: type cleanup + add mypy to CI by @rafeekpro in #8
  • feat(cli): F1 — process management by @rafeekpro in #10
  • feat(engine): F2 — REST CRUD for agents, pipelines, runs (read-only) by @rafeekpro in #12
  • feat(prompt-dsl): F4 — Jinja2 → XML compiler + render-preview endpoint by @rafeekpro in #14
  • feat(runtimes): F3 — api-call adapter (Anthropic SDK) by @rafeekpro in #16
  • feat(engine): F5 — LangGraph pipeline execution + POST /runs by @rafeekpro in #18
  • feat(dashboard): F6 — Dashboard MVP (Next.js 15 + React Flow) by @rafeekpro in #20
  • feat(engine): DAG validation endpoint (POST /pipelines/validate) by @rafeekpro in #22
  • feat(dashboard): F7 — Pipeline Designer (visual DAG editor) by @rafeekpro in #24
  • feat(engine): background runs + abort + graceful shutdown by @rafeekpro in #26
  • feat(engine): pause/resume runs via LangGraph SqliteSaver by @rafeekpro in #28
  • feat(dashboard): pause/resume/abort buttons on run detail page by @rafeekpro in #30
  • feat(dashboard): trigger runs from the dashboard by @rafeekpro in #39
  • feat(runtimes): bash adapter — shell command execution by @rafeekpro in #40
  • feat(engine): retry-node + skip-node endpoints by @rafeekpro in #41
  • chore(dashboard): ESLint flat config + lint gate in CI by @rafeekpro in #42
  • docs: README quickstart + architecture + runtimes guide by @rafeekpro in #43
  • feat(engine): per-role output parsing for structured node results by @rafeekpro in #44
  • feat(dashboard): F8 — agent detail / edit / archive + version history by @rafeekpro in #45
  • fix: CORS for dashboard :3000 + designer surface server errors inline by @rafeekpro in #70
  • feat(runtimes): api-call → multi-provider (Anthropic + OpenAI + OpenAI-compat + Gemini) by @rafeekpro in #71
  • feat(dashboard): AgentForm — runtime-specific config fields by @rafeekpro in #72
  • feat(runtimes): claude-code adapter — Anthropic CLI subprocess by @rafeekpro in #73
  • feat(runtimes): gemini-cli adapter — Google CLI subprocess by @rafeekpro in #74
  • feat(runtimes): http adapter — generic POST for Ollama, custom servers by @rafeekpro in #75
  • feat(dashboard): /settings page — provider catalog + runtime healthchecks by @rafeekpro in #76
  • docs: providers.md — recipes for each LLM through API + CLI by @rafeekpro in #77
  • feat(runtimes): codex adapter — OpenAI Codex CLI subprocess (#53) by @rafeekpro in #78
  • feat(engine): typed input/output schemas per agent (#58) by @rafeekpro in #79
  • feat(prompt-dsl): scope Jinja to declared input_schema fields (#60) by @rafeekpro in #80
  • feat(engine): pipeline cohesion validation against agent contracts (#59) by @rafeekpro in #81
  • feat(dashboard): AgentForm — input/output field pickers (#61) by @rafeekpro in #82
  • feat(dashboard): designer + run viewer — annotate edges with state field flow (#62) by @rafeekpro in #83
  • feat(engine): Project model + CRUD endpoints (#63) by @rafeekpro in #84
  • feat(engine): Run.project_id + project-scoped runs filter (#64) by @rafeekpro in #85
  • feat(engine,runtimes): project context plumbing — working_directory + env overlay (#65) by @rafeekpro in #86
  • feat(engine): POST /projects/{id}/run/{kind} convenience trigger (#66) by @rafeekpro in #87
  • feat(dashboard): /projects CRUD pages + workflow trigger UI (#67) by @rafeekpro in #88
  • feat(dashboard): sidebar project picker + scope list pages (#68) by @rafeekpro in #89
  • docs: docs/projects.md — workspace layer + workflow recipes (#69) by @rafeekpro in #90
  • chore(dashboard): inline configuration help on /settings by @rafeekpro in #91
  • feat(dashboard): Clone agent button — pre-fill /agents/new from existing (#92) by @rafeekpro in #95
  • feat(dashboard): built-in agent templates — quick-start library on /agents/new (#93) by @rafeekpro in #96
  • chore(dashboard): always show install commands on Settings, including aider by @rafeekpro in #97
  • feat(engine,dashboard): agent import/export JSON — agents-as-code workflow (#94) by @rafeekpro in #98
  • fix(runtimes): probe claude-code/gemini-cli only by binary, not API key by @rafeekpro in #100
  • fix(dashboard): hide INSTALL COMMAND for available runtimes by @rafeekpro in #102
  • feat(engine): POST /agents/dry-run — execute one agent without persistence by @rafeekpro in #106
  • feat(dashboard): Test panel on agent New/Edit pages — wires up POST /agents/dry-run by @rafeekpro in #107
  • feat(dashboard): A/B compare in the agent Test panel — Variant B + Promote by @rafeekpro in #108
  • feat(engine): in-code schema migrations — backfill runs.project_id by @rafeekpro in #110
  • feat(dashboard): per-role hints + 'Use role defaults' on agent form schema pickers by @rafeekpro in #112
  • fix(engine): auto-inject agent role into prompt render context by @rafeekpro in #114
  • feat: register GLM as first-class provider + Quick setup docs + .env.example by @rafeekpro in #116
  • feat(dashboard): Clone + Export JSON buttons on the agent Edit header by @rafeekpro in #118
  • fix(dashboard): point developer-jr-glm template at the registered glm provider by @rafeekpro in #119
  • fix(engine): enforce DAG validation on POST/PUT pipelines by @rafeekpro in #121
  • feat(dashboard): clearer Inputs/Outputs picker — kill 'Final output' collision, add example values by @rafeekpro in #123
  • feat: pipeline export / import / clone — JSON portability mirroring agent flow by @rafeekpro in #125
  • feat: pipeline bundle export/import — pipeline + its agents in one envelope by @rafeekpro in #127
  • feat(dashboard): pipeline templates — code-driven library + picker on /pipelines/new by @rafeekpro in #129
  • feat: GitHub Issue Triage as importable example bundle by @rafeekpro in #131
  • feat(dashboard): Designer Inspector — agent details + state view (#132) by @rafeekpro in #133
  • chore: scripts/dev — one-shot launcher for engine + dashboard (#136) by @rafeekpro in #137
  • feat: agent + pipeline lifecycle — usage count, archive guard, pipeline delete (#134) by @rafeekpro in #135
  • chore: scripts/setup — first-run installer with version pre-flight (#138) by @rafeekpro in #139
  • docs: rewrite README — install + first-pipeline + day-to-day use (#140) by @rafeekpro in #141
  • feat: PipelineState.extensions — open dict for per-pipeline extra state (#144) by @Dixter999 in #147
  • feat: extra_data column in node_execution_logs (#145) by @Dixter999 in #148
  • feat: python-func runtime adapter (#143) by @Dixter999 in #149
  • feat: PostgreSQL backend — dual-dialect engine via DAP_DATABASE_URL (#142) by @Dixter999 in #150
  • fix: test_postgresql_tables_created_on_startup uses paginated response (#152) by @Dixter999 in #153
  • feat: add description field to PipelineState for human-readable labels by @Dixter999 in #155
  • feat: python-func __pause sentinel for engine-level pause (#161) by @Dixter999 in #163
  • fix(#164): interrupt_before gate support + POST /runs/{id}/nodes/{id}/approve by @Dixter999 in #165
  • refactor: revert __pause sentinel — superseded by interrupt_before (#161 followup) by @Dixter999 in #166
  • feat(#167): Phase 2 smoke tests + dot-notation condition traversal by @Dixter999 in #176
  • fix(#173): call checkpointer.setup() in lifespan + restore dot-notation conditions by @Dixter999 in #177
  • test(#168): add Phase 3 smoke tests — tester/pr-creator/reviewer/gate/pr-merger by @Dixter999 in #179
  • feat(#181): add GET /runs/{id}/summary endpoint stub by @Dixter999 in #182
  • ci: Copilot Review Gate — required check_run for develop & main by @rafeekpro in #193
  • chore(engine): drop unused asyncpg dependency (#189) by @rafeekpro in #194
  • fix(engine): detect_dialect accepts postgres:// (heroku-style) URLs (#188) by @rafeekpro in #195
  • fix(runtimes/python-func): ImportError returns _failed instead of raising (#191) by @rafeekpro in #196
  • fix(runtimes/python-func): require explicit 'module:attr' separator (#192) by @rafeekpro in #197
  • fix(engine): /approve validates node_id is an approval gate (#184, #190) by @rafeekpro in #198
  • perf(engine): pool psycopg connections for AsyncPostgresSaver (#187) by @rafeekpro in #199
  • fix(engine): atomic claim on /resume, /approve, /retry, /skip (#185) by @rafeekpro in #200
  • test(engine): coverage suite for #165 family (#186) by @rafeekpro in #201
  • docs(ci): note workflow_dispatch escape hatch for cron-lag by @rafeekpro in #202
  • fix(engine/api): align archived-project status code to 422 (#205) by @rafeekpro in #206
  • fix(engine/validator): skip unused-output warning for terminal nodes (#204) by @rafeekpro in #207
  • chore: clean up 4 low-severity findings from retro-audit round 1 by @rafeekpro in #208
  • docs(ci): clearer waiting-for-Copilot diagnostic message in gate workflow by @rafeekpro in #209
  • fix(runtimes): aider stub + api_call broaden catch (#210, #211) by @rafeekpro in #215
  • fix(runtimes): gemini extra_args + _first_int robust on varied shapes (#213, #214) by @rafeekpro in #216
  • security(runtimes/http): redact header secrets from error preview (#212) by @rafeekpro in #217
  • test: add smoke-run fixtures at repo root (#171, #174) by @rafeekpro in #218
  • feat(#170): dap project run/approve/reject/state cortex by @rafeekpro in #221
  • feat(#219): packages/cortex/ — migrate Cortex nodes to DAP monorepo by @rafeekpro in #220
  • feat(#225,#227): dagre auto-layout + conditional edge colours in run graph by @rafeekpro in #230
  • feat(#226,#228,#229): persist node positions + fix inspector for bundled agents by @rafeekpro in #231
  • feat(#340): add --format json to dap project state cortex by @rafeekpro in #232
  • fix(#233): populate node_statuses from execution logs in GET /runs/{id} by @rafeekpro in #235
  • fix(#222): tester port-parsing artifact + pr_merger infra-failure bypass by @rafeekpro in #236
  • fix(#223): remove shell=/bin/bash from git-branch node bundles by @rafeekpro in #240
  • fix(#224): correct workspace slug separator and refresh project on reuse by @rafeekpro in #244
  • fix(#243): sync base branch before coder checkout to prevent stale-diff PRs by @rafeekpro in #245
  • feat(#237): add tabbed NodeDetailPanel with state diff view by @rafeekpro in #242
  • fix(#238): set max_idle=3600s and min_size=4 on checkpointer pool by @rafeekpro in #246
  • fix(#241): sync workspace to default branch before starting a run by @rafeekpro in #247
  • refactor(tests): extract _build_subprocess_mock to conftest (audit #7) by @rafeekpro in #248
  • refactor(#249): bash adapter uses shared merge_subprocess_env (audit #2) by @rafeekpro in #261
  • perf(#250): batch version lookups in list_agents/list_pipelines (audit #3) by @rafeekpro in #262
  • perf(#251): index hot-path columns on runs and node_execution_logs (audit #4) by @rafeekpro in #263
  • refactor(#252): extract cross-layer request contracts to dap_engine.contracts (audit #5) by @rafeekpro in #264
  • refactor(#253): split repository.py per entity with shim (audit #6) by @rafeekpro in #265
  • refactor(#254): lift run orchestration coroutines into execution/ (audit #7) by @rafeekpro in #266
  • refactor(#255): extract _BaseCliAdapter for CLI runtime adapters (audit #8) by @rafeekpro in #267
  • fix(#256): drop dead final_state arg from finalize_run (audit B1) by @rafeekpro in #268
  • fix(#257): make finalize_run / pause_run idempotent (audit B2) by @rafeekpro in #269
  • fix(#258): serialise RunRegistry mutations under threading.Lock (audit B3) by @rafeekpro in #270
  • fix(#259): make CORS allow-list configurable (audit B4) by @rafeekpro in #271
  • fix(#260): replace synthetic shutdown snapshot with runs.failure_reason column (audit B5) by @rafeekpro in #272
  • chore(repo): ignore .claude/ local agent config dir by @rafeekpro in #278
  • chore(#273): include tests/ in ruff lint + format scope by @rafeekpro in #279
  • chore(#274): tighten mypy + pytest config; align requires-python with 3.13 by @rafeekpro in #280
  • chore(#276): add pip-audit CVE scan + dependabot weekly bumps by @rafeekpro in #281
  • chore(#277): repo hygiene — .editorconfig, stray files, version + readme by @rafeekpro in #282
  • chore(#275): add pre-commit framework with ruff + mypy hooks by @rafeekpro in #296
  • chore(ci): bump actions/github-script from 7 to 9 by @dependabot[bot] in #283
  • chore(ci): bump actions/setup-node from 4 to 6 by @dependabot[bot] in #284
  • chore(ci): bump pnpm/action-setup from 4 to 6 by @dependabot[bot] in #285
  • chore(ci): bump actions/checkout from 4 to 6 by @dependabot[bot] in #286
  • chore(ci): bump astral-sh/setup-uv from 3 to 7 by @dependabot[bot] in #287
  • chore(deps)(deps): bump google-genai from 1.73.1 to 2.0.1 by @dependabot[bot] in #288
  • chore(deps,dashboard): bump typescript from 5.7.3 to 5.9.3 in /apps/dashboard by @dependabot[bot] in #289
  • chore(deps)(deps): bump pydantic-settings from 2.14.0 to 2.14.1 by @dependabot[bot] in #290
  • chore(deps,dashboard): bump @radix-ui/react-dialog from 1.1.4 to 1.1.15 in /apps/dashboard by @dependabot[bot] in #291
  • chore(deps)(deps): update psycopg[binary] requirement from >=3.2 to >=3.3.4 by @dependabot[bot] in #292
  • chore(deps)(deps): bump openai from 2.32.0 to 2.36.0 by @dependabot[bot] in #293
  • chore(deps,dashboard): bump @types/node from 22.10.5 to 25.6.2 in /apps/dashboard by @dependabot[bot] in #294
  • chore(deps): bump pydantic from 2.13.3 to 2.13.4 by @dependabot[bot] in #295
  • chore(ci): skip copilot-review gate for bot-authored PRs by @rafeekpro in #297
  • feat(#299): wire fastapi-users password auth + users table by @rafeekpro in #304
  • feat(#299): wire OAuth (GitHub + Google) — sub-A2 by @rafeekpro in #305
  • feat(#299): add API tokens for CLI / scripts — sub-A3 by @rafeekpro in #306
  • chore(repo): run pre-commit on every push by @rafeekpro in #307
  • feat(#299): ownership schema + audit log table — sub-A4a by @rafeekpro in #308
  • feat(#299): audit foundation + auth event entries — sub-A4b1 by @rafeekpro in #309
  • feat(#299): enforce ownership on /agents — sub-A4b2a by @rafeekpro in #310
  • feat(#299): enforce ownership on /pipelines — sub-A4b2b by @rafeekpro in #311
  • feat(#299): enforce ownership on /projects — sub-A4b2c by @rafeekpro in #312
  • feat(#299): enforce ownership on /runs — sub-A4b2d (closes Phase A) by @rafeekpro in #313
  • feat(#300): dashboard auth skeleton — sub-B1 by @rafeekpro in #314
  • chore(deps): bump typer from 0.24.2 to 0.25.1 by @dependabot[bot] in #315
  • chore(dashboard): bump @tanstack/react-query from 5.62.11 to 5.100.9 in /apps/dashboard by @dependabot[bot] in #316
  • chore(deps): update psycopg[binary] requirement from >=3.2 to >=3.3.4 by @dependabot[bot] in #317
  • chore(dashboard): bump @hookform/resolvers from 3.10.0 to 4.1.3 in /apps/dashboard by @dependabot[bot] in #318
  • chore(deps): bump langgraph from 1.1.9 to 1.1.10 by @dependabot[bot] in #319
  • chore(deps): bump anthropic from 0.97.0 to 0.100.0 by @dependabot[bot] in #320
  • chore(dashboard): bump @radix-ui/react-slot from 1.1.1 to 1.2.4 in /apps/dashboard by @dependabot[bot] in #321
  • chore(deps): update uvicorn[standard] requirement from >=0.32.0 to >=0.46.0 by @dependabot[bot] in #322
  • feat(#300): /login + /signup pages — sub-B2 by @rafeekpro in #323
  • feat(#300): /forgot-password + /reset-password — sub-B3 by @rafeekpro in #324
  • feat(#300): UserMenu in sidebar — sub-B4 by @rafeekpro in #325
  • feat(#300): OAuth buttons (GitHub + Google) — sub-B5 (closes Phase B) by @rafeekpro in #326
  • feat(#301): admin route foundation — sub-C1 by @rafeekpro in #327
  • feat(#301): /admin/users page + admin GET /users endpoint — sub-C2 by @rafeekpro in #328
  • feat(#301): /admin/audit-log + GET /audit/events — sub-C3 by @rafeekpro in #329
  • feat(#301): /admin/api-tokens admin-wide view — sub-C4 by @rafeekpro in #330
  • feat(#301): /admin/settings + GET /settings/admin — sub-C5 (closes Phase C) by @rafeekpro in #332
  • feat(#302): multi-stage Dockerfile + compose example — sub-D1 (closes #333) by @rafeekpro in #338
  • feat(#302): bundle dashboard into dap-cli wheel — sub-D2 (closes #334) by @rafeekpro in #339
  • feat(#302): release pipeline (PyPI + GHCR on v*..) — sub-D3 (closes #335) by @rafeekpro in #340
  • feat(#302): dap init admin bootstrap + status section — sub-D4 (closes #336) by @rafeekpro in #341
  • docs(#302): self-hosting guide + .env.example rewrite — sub-D5 (closes #337, closes #302) by @rafeekpro in #342
  • feat(#303): legacy-admin upgrade migration + smoke test — sub-E1 (closes #343) by @rafeekpro in #348
  • docs(#303): auth setup guide (docs/auth.md) — sub-E2 (closes #344) by @rafeekpro in #349
  • docs(#303): admin operator guide (docs/admin-guide.md) — sub-E3 (closes #345) by @rafeekpro in #352
  • docs(#303): security posture + threat model (docs/security.md) — sub-E4 (closes #346) by @rafeekpro in #355
  • release: v0.3.0 cutover — sub-E5 (closes #347, closes #303, closes #298) by @rafeekpro in #356
  • chore: post-v0.3.0 docs cleanup by @rafeekpro in #358
  • feat(#351): pipeline binding editor in project creation/edit forms by @Dixter999 in #354
  • fix: rename cortex → dap-cortex, dap-types → dap-schemas on PyPI by @rafeekpro in #359
  • fix: bootstrap PyPI publish via account API token for v0.3.0 by @rafeekpro in #360

New Contributors

Full Changelog: https://github.com/rafeekpro/dap/commits/v0.3.0