Repository navigation
feat(workflow): expose dynamic workflows through MCP - #98
Conversation
Always include bundled skills root when subagents enabled so seeding subagent-delegation no longer hides later skills. Seed dynamic-workflows alongside subagent-delegation on init. Co-Authored-By: Claude <noreply@anthropic.com>
Load ordered enable-list from config/env, probe available providers on init and doctor, and filter workflow CLI providers by enabled∩live. Co-Authored-By: Claude <noreply@anthropic.com>
Gate on config.subagents. run_workflow spawns the same detached worker as CLI; status long-polls journal events; cancel requests cooperative stop. Co-Authored-By: Claude <noreply@anthropic.com>
|
Important Review skippedAuto reviews are disabled on base/target branches other than the default branch. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: Repository UI Review profile: CHILL Plan: Pro Plus Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
| title: "Workflow status", | ||
| description: "Drain events for a workflow run; optional long-poll yield.", | ||
| inputSchema: { | ||
| runId: z.string(), |
There was a problem hiding this comment.
[P1] Status is authorized only by a global runId and is not scoped back to the open workspace. Please include workspaceId (or enforce equivalent ownership) and verify the run's workspaceId/root before returning events. The same check is needed for cancel and resume.
There was a problem hiding this comment.
Intentionally not adopting mandatory workspace-scoped status/cancel authorization. DevSpace workflows are also a portable dynamic-workflow layer for Cursor, Pi, OpenCode, and other harnesses that may invoke CLI/MCP without owning a DevSpace workspaceId. runId remains the durable cross-harness handle by product decision. Filesystem confinement is handled separately through project-local workflow resolution rather than making workspace IDs mandatory.
| const run = store.requestCancel(runId); | ||
| if (run.pid && (run.status === "running" || run.status === "starting")) { | ||
| try { | ||
| process.kill(run.pid, "SIGTERM"); |
There was a problem hiding this comment.
[P0] MCP cancellation has no grace-period supervision or hard-kill/terminal fallback. It sends one SIGTERM and can leave the database row running forever if the worker dies before journaling. Please reuse the same shared cancellation supervisor as the CLI and guarantee run_cancelled plus terminal status.
There was a problem hiding this comment.
Addressed by follow-up PR #115. MCP and CLI now call the same cancelWorkflowRun() supervisor, including cooperative grace, cross-platform process-tree termination, hard-kill escalation, and an atomic run_cancelled terminal fallback. MCP cancellation no longer returns after a single best-effort SIGTERM.
|
This PR also needs integration coverage for MCP disconnect survival, cancellation reaching a terminal state, paginated terminal event draining, and provider-config filtering. |
Wire LocalAgentRunInput.schema through CodexSdkLocalAgentRuntime to thread.run turn options, and surface parsed structured output.
Pass JSON Schema via outputFormat on query options and prefer structured_output from result messages. OpenCode stays prompt-path only.
Hardcode NATIVE_SCHEMA_PROVIDERS; attempt 0 uses adapter schema without prompt bloat, then prompt-repair retries with Ajv. Wire schema through runProvider / CLI worker. Document in skill.
refactor(agents): unify provider resolution and subagent guidance
feat(workflow): support agent profiles and project workflows
fix(workflow): replay deterministic call prefixes
fix(workflow): supervise cancellation and terminal lifecycle
feat(workflow): isolate workflow script execution
feat(ui): live workspace and workflow dashboards
feat(workflow): read-only project workflow TUI
feat(workflow): script iteration, replay provenance, and call inspection
refactor(workflow): model operational failures with better-result
refactor(workflow): strengthen contracts and zod boundaries
feat(agents): native schema for codex/claude agent({ schema })
…veable in Docker / script mode (Waishnav#100) (Waishnav#102) * fix(frontend): survive browser page translation instead of crashing the whole tree (Waishnav#100) Chrome / Edge 'Translate this page' replaces text nodes with <font> wrappers; React's next removeChild / insertBefore on those nodes throws NotFoundError and the ErrorBoundary unmounts everything. Guard both DOM methods before mount (per react/react#11538) so displaced nodes are skipped rather than fatal. ErrorBoundary now detects the translation case and tells the user (zh/en) to turn translation off; its fallback page is redone per DESIGN.md (no purple gradient / AntD Result, single-tone card + Btn primitives) and 'back home' actually navigates under HashRouter. Co-authored-by: Kris K <zhouxiaoka@users.noreply.github.com> * feat(settings): make the settings page work in Docker / script mode (Waishnav#100) GET/PUT /settings, /test-api, /current-provider, /compatible-models, /available-models, /validation, /reset and DELETE / no longer require desktop mode. settings.json lands in get_data_directory() (./data in Docker) and the API process + Celery worker already hot-reload on mtime, so the same code path works for every deployment shape. Desktop-only endpoints (data-dir migration, backup/restore, import/export, config sync) keep the guard. When no settings.json exists yet, GET /settings reflects the provider / model / base_url the LLM manager actually resolved from env (LLM_PROVIDER etc.) instead of always showing dashscope. Frontend SettingsPage drops the web-mode read-only short-circuit; also removes the unused eslint-disable directive that has kept CI red on main (Waishnav#99). Adds backend/tests/test_settings_web_mode.py (6 cases). Co-authored-by: Kris K <zhouxiaoka@users.noreply.github.com> * docs: record Waishnav#100 fix, 2026-09-20 issue/PR triage and schedule feature requests into v1.3 / v1.4 HANDOFF: root-cause note for Waishnav#100, per-issue disposition table, external PR decisions (Waishnav#97 Waishnav#98 Waishnav#99 merge, Waishnav#101 hold for i18n scaffold), and new v1.3 items (fail-like-failure, i18n scaffold, dashscope intl, DESIGN.md debt list) plus v1.4 items (pluggable ASR / scoring backends, Sentry). DOCKER.md: settings can now be saved from the web UI; env vars are defaults only. Co-authored-by: Kris K <zhouxiaoka@users.noreply.github.com> --------- Co-authored-by: Cursor Agent <cursoragent@cursor.com> Co-authored-by: Kris K <zhouxiaoka@users.noreply.github.com>
Dynamic Workflows were reachable only from the local CLI, so an MCP client could not start or follow durable runs without dropping down to shell commands. The model also lacked focused guidance for choosing workflows and available local-agent providers.
Expose run, status, and cancellation through MCP while keeping execution in the detached worker, so workflows continue after an MCP request disconnects. Add the Dynamic Workflows skill, seed the bundled agent skills consistently, and introduce runtime provider availability to guide workflow execution.
Stack
Based on #97 and merged into #94 before provider-native structured output in #99.