gsd-pi 2.76.0-dev.82e249f7b → 2.76.0-dev.97807402
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/claude-cli-check.js +32 -3
- package/dist/mcp-server.d.ts +7 -0
- package/dist/mcp-server.js +35 -1
- package/dist/resource-loader.d.ts +1 -1
- package/dist/resource-loader.js +2 -8
- package/dist/resources/extensions/claude-code-cli/readiness.js +4 -3
- package/dist/resources/extensions/claude-code-cli/stream-adapter.js +77 -17
- package/dist/resources/extensions/gsd/auto/phases.js +14 -0
- package/dist/resources/extensions/gsd/auto/run-unit.js +27 -0
- package/dist/resources/extensions/gsd/auto-model-selection.js +1 -1
- package/dist/resources/extensions/gsd/auto-post-unit.js +1 -1
- package/dist/resources/extensions/gsd/auto-recovery.js +13 -0
- package/dist/resources/extensions/gsd/auto-start.js +27 -18
- package/dist/resources/extensions/gsd/auto-worktree.js +30 -48
- package/dist/resources/extensions/gsd/auto.js +13 -17
- package/dist/resources/extensions/gsd/bootstrap/agent-end-recovery.js +17 -1
- package/dist/resources/extensions/gsd/bootstrap/db-tools.js +39 -9
- package/dist/resources/extensions/gsd/bootstrap/exec-tools.js +93 -0
- package/dist/resources/extensions/gsd/bootstrap/register-extension.js +2 -0
- package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +40 -4
- package/dist/resources/extensions/gsd/bootstrap/write-gate.js +12 -1
- package/dist/resources/extensions/gsd/commands-prefs-wizard.js +968 -23
- package/dist/resources/extensions/gsd/compaction-snapshot.js +121 -0
- package/dist/resources/extensions/gsd/error-classifier.js +10 -3
- package/dist/resources/extensions/gsd/exec-history.js +120 -0
- package/dist/resources/extensions/gsd/exec-sandbox.js +258 -0
- package/dist/resources/extensions/gsd/gsd-db.js +115 -7
- package/dist/resources/extensions/gsd/guided-flow.js +189 -0
- package/dist/resources/extensions/gsd/health-widget.js +4 -1
- package/dist/resources/extensions/gsd/init-wizard.js +15 -1
- package/dist/resources/extensions/gsd/key-manager.js +6 -0
- package/dist/resources/extensions/gsd/model-router.js +36 -3
- package/dist/resources/extensions/gsd/pre-execution-checks.js +35 -9
- package/dist/resources/extensions/gsd/preferences-types.js +9 -0
- package/dist/resources/extensions/gsd/preferences-validation.js +83 -0
- package/dist/resources/extensions/gsd/preferences.js +17 -17
- package/dist/resources/extensions/gsd/prompts/discuss-headless.md +8 -0
- package/dist/resources/extensions/gsd/prompts/discuss.md +29 -2
- package/dist/resources/extensions/gsd/prompts/parallel-research-slices.md +5 -2
- package/dist/resources/extensions/gsd/safety/file-change-validator.js +10 -4
- package/dist/resources/extensions/gsd/safety/safety-harness.js +4 -0
- package/dist/resources/extensions/gsd/token-counter.js +22 -5
- package/dist/resources/extensions/gsd/tools/exec-search-tool.js +59 -0
- package/dist/resources/extensions/gsd/tools/exec-tool.js +126 -0
- package/dist/resources/extensions/gsd/tools/resume-tool.js +23 -0
- package/dist/resources/extensions/gsd/workflow-mcp.js +3 -0
- package/dist/resources/skills/verify-before-complete/SKILL.md +2 -1
- package/dist/resources/skills/write-docs/SKILL.md +2 -1
- package/dist/tsconfig.extensions.tsbuildinfo +1 -1
- package/dist/web/standalone/.next/BUILD_ID +1 -1
- package/dist/web/standalone/.next/app-path-routes-manifest.json +7 -7
- package/dist/web/standalone/.next/build-manifest.json +2 -2
- package/dist/web/standalone/.next/prerender-manifest.json +3 -3
- package/dist/web/standalone/.next/required-server-files.json +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.html +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.html +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.html +1 -1
- package/dist/web/standalone/.next/server/app/index.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.segments/_index.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app-paths-manifest.json +7 -7
- package/dist/web/standalone/.next/server/middleware-build-manifest.js +1 -1
- package/dist/web/standalone/.next/server/middleware-manifest.json +5 -5
- package/dist/web/standalone/.next/server/pages/404.html +1 -1
- package/dist/web/standalone/.next/server/pages/500.html +1 -1
- package/dist/web/standalone/.next/server/server-reference-manifest.json +1 -1
- package/dist/web/standalone/server.js +1 -1
- package/package.json +1 -1
- package/packages/mcp-server/dist/remote-questions.d.ts +45 -0
- package/packages/mcp-server/dist/remote-questions.d.ts.map +1 -0
- package/packages/mcp-server/dist/remote-questions.js +732 -0
- package/packages/mcp-server/dist/remote-questions.js.map +1 -0
- package/packages/mcp-server/dist/server.d.ts.map +1 -1
- package/packages/mcp-server/dist/server.js +18 -1
- package/packages/mcp-server/dist/server.js.map +1 -1
- package/packages/mcp-server/dist/workflow-tools.d.ts.map +1 -1
- package/packages/mcp-server/dist/workflow-tools.js +64 -25
- package/packages/mcp-server/dist/workflow-tools.js.map +1 -1
- package/packages/mcp-server/package.json +2 -1
- package/packages/mcp-server/src/remote-questions.test.ts +294 -0
- package/packages/mcp-server/src/remote-questions.ts +916 -0
- package/packages/mcp-server/src/server.ts +19 -1
- package/packages/mcp-server/src/workflow-tools.test.ts +146 -1
- package/packages/mcp-server/src/workflow-tools.ts +84 -43
- package/packages/mcp-server/tsconfig.test.json +19 -0
- package/packages/mcp-server/tsconfig.tsbuildinfo +1 -1
- package/packages/pi-ai/dist/providers/anthropic-shared.d.ts.map +1 -1
- package/packages/pi-ai/dist/providers/anthropic-shared.js +2 -0
- package/packages/pi-ai/dist/providers/anthropic-shared.js.map +1 -1
- package/packages/pi-ai/dist/providers/simple-options.d.ts +10 -0
- package/packages/pi-ai/dist/providers/simple-options.d.ts.map +1 -1
- package/packages/pi-ai/dist/providers/simple-options.js +16 -1
- package/packages/pi-ai/dist/providers/simple-options.js.map +1 -1
- package/packages/pi-ai/src/providers/anthropic-shared.ts +3 -1
- package/packages/pi-ai/src/providers/simple-options.ts +17 -1
- package/packages/pi-ai/tsconfig.tsbuildinfo +1 -1
- package/packages/pi-coding-agent/dist/core/model-registry-custom-caps.test.d.ts +2 -0
- package/packages/pi-coding-agent/dist/core/model-registry-custom-caps.test.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/model-registry-custom-caps.test.js +203 -0
- package/packages/pi-coding-agent/dist/core/model-registry-custom-caps.test.js.map +1 -0
- package/packages/pi-coding-agent/dist/core/model-registry.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/model-registry.js +14 -0
- package/packages/pi-coding-agent/dist/core/model-registry.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/redact-secrets.d.ts +2 -0
- package/packages/pi-coding-agent/dist/core/redact-secrets.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/redact-secrets.js +49 -0
- package/packages/pi-coding-agent/dist/core/redact-secrets.js.map +1 -0
- package/packages/pi-coding-agent/dist/core/redact-secrets.test.d.ts +2 -0
- package/packages/pi-coding-agent/dist/core/redact-secrets.test.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/redact-secrets.test.js +67 -0
- package/packages/pi-coding-agent/dist/core/redact-secrets.test.js.map +1 -0
- package/packages/pi-coding-agent/dist/core/session-manager.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/session-manager.js +9 -5
- package/packages/pi-coding-agent/dist/core/session-manager.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/session-manager.test.js +25 -1
- package/packages/pi-coding-agent/dist/core/session-manager.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/chat-frame.d.ts +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/chat-frame.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/chat-frame.js +5 -4
- package/packages/pi-coding-agent/dist/modes/interactive/components/chat-frame.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/skill-invocation-message.d.ts +7 -6
- package/packages/pi-coding-agent/dist/modes/interactive/components/skill-invocation-message.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/skill-invocation-message.js +29 -21
- package/packages/pi-coding-agent/dist/modes/interactive/components/skill-invocation-message.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js +13 -1
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/packages/pi-coding-agent/src/core/model-registry-custom-caps.test.ts +245 -0
- package/packages/pi-coding-agent/src/core/model-registry.ts +16 -0
- package/packages/pi-coding-agent/src/core/redact-secrets.test.ts +86 -0
- package/packages/pi-coding-agent/src/core/redact-secrets.ts +58 -0
- package/packages/pi-coding-agent/src/core/session-manager.test.ts +36 -1
- package/packages/pi-coding-agent/src/core/session-manager.ts +9 -5
- package/packages/pi-coding-agent/src/modes/interactive/components/chat-frame.ts +6 -6
- package/packages/pi-coding-agent/src/modes/interactive/components/skill-invocation-message.ts +36 -22
- package/packages/pi-coding-agent/src/modes/interactive/interactive-mode.ts +13 -1
- package/packages/pi-coding-agent/tsconfig.tsbuildinfo +1 -1
- package/src/resources/extensions/claude-code-cli/readiness.ts +4 -3
- package/src/resources/extensions/claude-code-cli/stream-adapter.ts +78 -17
- package/src/resources/extensions/claude-code-cli/tests/stream-adapter.test.ts +149 -5
- package/src/resources/extensions/gsd/auto/phases.ts +14 -0
- package/src/resources/extensions/gsd/auto/run-unit.ts +29 -0
- package/src/resources/extensions/gsd/auto-model-selection.ts +1 -1
- package/src/resources/extensions/gsd/auto-post-unit.ts +1 -2
- package/src/resources/extensions/gsd/auto-recovery.ts +15 -0
- package/src/resources/extensions/gsd/auto-start.ts +29 -19
- package/src/resources/extensions/gsd/auto-worktree.ts +34 -52
- package/src/resources/extensions/gsd/auto.ts +12 -17
- package/src/resources/extensions/gsd/bootstrap/agent-end-recovery.ts +23 -1
- package/src/resources/extensions/gsd/bootstrap/db-tools.ts +40 -9
- package/src/resources/extensions/gsd/bootstrap/exec-tools.ts +109 -0
- package/src/resources/extensions/gsd/bootstrap/register-extension.ts +2 -0
- package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +42 -4
- package/src/resources/extensions/gsd/bootstrap/write-gate.ts +13 -1
- package/src/resources/extensions/gsd/commands-prefs-wizard.ts +898 -32
- package/src/resources/extensions/gsd/compaction-snapshot.ts +165 -0
- package/src/resources/extensions/gsd/error-classifier.ts +10 -3
- package/src/resources/extensions/gsd/exec-history.ts +153 -0
- package/src/resources/extensions/gsd/exec-sandbox.ts +326 -0
- package/src/resources/extensions/gsd/gsd-db.ts +122 -7
- package/src/resources/extensions/gsd/guided-flow.ts +221 -0
- package/src/resources/extensions/gsd/health-widget.ts +3 -1
- package/src/resources/extensions/gsd/init-wizard.ts +15 -1
- package/src/resources/extensions/gsd/journal.ts +2 -1
- package/src/resources/extensions/gsd/key-manager.ts +6 -0
- package/src/resources/extensions/gsd/model-router.ts +42 -1
- package/src/resources/extensions/gsd/pre-execution-checks.ts +36 -10
- package/src/resources/extensions/gsd/preferences-types.ts +46 -0
- package/src/resources/extensions/gsd/preferences-validation.ts +79 -0
- package/src/resources/extensions/gsd/preferences.ts +17 -17
- package/src/resources/extensions/gsd/prompts/discuss-headless.md +8 -0
- package/src/resources/extensions/gsd/prompts/discuss.md +29 -2
- package/src/resources/extensions/gsd/prompts/parallel-research-slices.md +5 -2
- package/src/resources/extensions/gsd/safety/file-change-validator.ts +14 -3
- package/src/resources/extensions/gsd/safety/safety-harness.ts +6 -0
- package/src/resources/extensions/gsd/tests/auto-loop.test.ts +116 -0
- package/src/resources/extensions/gsd/tests/auto-recovery.test.ts +49 -0
- package/src/resources/extensions/gsd/tests/compaction-snapshot.test.ts +123 -0
- package/src/resources/extensions/gsd/tests/complete-slice.test.ts +2 -2
- package/src/resources/extensions/gsd/tests/complete-task.test.ts +2 -2
- package/src/resources/extensions/gsd/tests/doctor-providers.test.ts +31 -0
- package/src/resources/extensions/gsd/tests/ensure-db-open.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/escalation.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/exec-history.test.ts +124 -0
- package/src/resources/extensions/gsd/tests/exec-sandbox.test.ts +210 -0
- package/src/resources/extensions/gsd/tests/file-change-validator.test.ts +58 -0
- package/src/resources/extensions/gsd/tests/gsd-db.test.ts +152 -1
- package/src/resources/extensions/gsd/tests/init-wizard.test.ts +27 -0
- package/src/resources/extensions/gsd/tests/isolation-none-branch-guard.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/issue-4540-regressions.test.ts +288 -0
- package/src/resources/extensions/gsd/tests/key-manager.test.ts +7 -0
- package/src/resources/extensions/gsd/tests/md-importer.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/memory-store.test.ts +2 -2
- package/src/resources/extensions/gsd/tests/parallel-research-dispatch.test.ts +19 -0
- package/src/resources/extensions/gsd/tests/pre-exec-backtick-strip.test.ts +14 -0
- package/src/resources/extensions/gsd/tests/pre-execution-checks.test.ts +234 -0
- package/src/resources/extensions/gsd/tests/preferences.test.ts +110 -0
- package/src/resources/extensions/gsd/tests/prefs-wizard-coverage.test.ts +44 -0
- package/src/resources/extensions/gsd/tests/provider-errors.test.ts +48 -0
- package/src/resources/extensions/gsd/tests/ready-phrase-no-files-4573.test.ts +388 -0
- package/src/resources/extensions/gsd/tests/restore-tools-after-discuss.test.ts +9 -3
- package/src/resources/extensions/gsd/tests/save-gate-result-render.test.ts +95 -0
- package/src/resources/extensions/gsd/tests/session-start-footer.test.ts +32 -40
- package/src/resources/extensions/gsd/tests/stash-queued-context-files.test.ts +56 -0
- package/src/resources/extensions/gsd/tests/token-counter.test.ts +105 -1
- package/src/resources/extensions/gsd/tests/tool-compatibility.test.ts +107 -0
- package/src/resources/extensions/gsd/tests/workflow-tool-executors.test.ts +65 -2
- package/src/resources/extensions/gsd/tests/write-gate.test.ts +64 -0
- package/src/resources/extensions/gsd/tests/zombie-gsd-state.test.ts +3 -1
- package/src/resources/extensions/gsd/token-counter.ts +22 -5
- package/src/resources/extensions/gsd/tools/exec-search-tool.ts +81 -0
- package/src/resources/extensions/gsd/tools/exec-tool.ts +183 -0
- package/src/resources/extensions/gsd/tools/resume-tool.ts +40 -0
- package/src/resources/extensions/gsd/workflow-logger.ts +2 -1
- package/src/resources/extensions/gsd/workflow-mcp.ts +3 -0
- package/src/resources/skills/verify-before-complete/SKILL.md +2 -1
- package/src/resources/skills/write-docs/SKILL.md +2 -1
- /package/dist/web/standalone/.next/static/{ecSsu49rxxcpbNmVP4mLD → pI48IF3dgfs0CBrYi2bh_}/_buildManifest.js +0 -0
- /package/dist/web/standalone/.next/static/{ecSsu49rxxcpbNmVP4mLD → pI48IF3dgfs0CBrYi2bh_}/_ssgManifest.js +0 -0
|
@@ -313,6 +313,53 @@ function getWorkflowOpTimeoutMs(env = process.env) {
|
|
|
313
313
|
return DEFAULT_WORKFLOW_OP_TIMEOUT_MS;
|
|
314
314
|
return parsed; // 0 disables the timeout
|
|
315
315
|
}
|
|
316
|
+
/**
|
|
317
|
+
* Adapt an executor `ToolExecutionResult` ({ content, details?, isError? }) to
|
|
318
|
+
* the MCP `CallToolResult` shape ({ content, structuredContent?, isError? }).
|
|
319
|
+
*
|
|
320
|
+
* MCP transports (including stdio) only serialize fields declared in the
|
|
321
|
+
* protocol, so a non-standard `details` field is silently dropped over the
|
|
322
|
+
* wire. Mirroring it into `structuredContent` — the protocol's supported
|
|
323
|
+
* channel for structured tool payloads — preserves the data for clients that
|
|
324
|
+
* render from it (e.g. the save_gate_result renderer that reads gateId /
|
|
325
|
+
* verdict). See #4472.
|
|
326
|
+
*
|
|
327
|
+
* Discard policy for non-plain-object `details`: the `isPlainObject` guard
|
|
328
|
+
* accepts the canonical case (a record literal) and intentionally drops bare
|
|
329
|
+
* primitives (string, number, boolean), bare arrays, and class instances /
|
|
330
|
+
* Date objects. This is deliberate — MCP `structuredContent` is specified as
|
|
331
|
+
* a JSON object; non-object payloads can't round-trip cleanly. No current
|
|
332
|
+
* executor returns a non-object `details`, so this never fires in practice.
|
|
333
|
+
* Future executors needing to return a primitive should wrap it
|
|
334
|
+
* (`details: { value: 42 }`) rather than relying on the discard.
|
|
335
|
+
*/
|
|
336
|
+
function adaptExecutorResult(result) {
|
|
337
|
+
if (!result || typeof result !== "object")
|
|
338
|
+
return result;
|
|
339
|
+
const r = result;
|
|
340
|
+
if (!("details" in r))
|
|
341
|
+
return result;
|
|
342
|
+
const { details, ...rest } = r;
|
|
343
|
+
return isPlainObject(details) ? { ...rest, structuredContent: details } : rest;
|
|
344
|
+
}
|
|
345
|
+
/**
|
|
346
|
+
* Strict plain-object guard. True only for object literals and
|
|
347
|
+
* `Object.create(null)` — not for `Date`, `URL`, `Map`, `Set`, class instances,
|
|
348
|
+
* or arrays. Used to gate `structuredContent` forwarding so the MCP transport
|
|
349
|
+
* receives only true JSON objects (the protocol contract).
|
|
350
|
+
*
|
|
351
|
+
* Mirrored in `src/mcp-server.ts` for the agent-tool registry path's
|
|
352
|
+
* structured-content gate. Keep both copies in sync if the contract definition
|
|
353
|
+
* needs to evolve. See #4477 review.
|
|
354
|
+
*/
|
|
355
|
+
function isPlainObject(value) {
|
|
356
|
+
if (value === null || typeof value !== "object")
|
|
357
|
+
return false;
|
|
358
|
+
if (Array.isArray(value))
|
|
359
|
+
return false;
|
|
360
|
+
const proto = Object.getPrototypeOf(value);
|
|
361
|
+
return proto === null || proto === Object.prototype;
|
|
362
|
+
}
|
|
316
363
|
async function runSerializedWorkflowOperation(fn) {
|
|
317
364
|
// The shared DB adapter and workflow log base path are process-global, so
|
|
318
365
|
// workflow MCP mutations must not overlap within a single server process.
|
|
@@ -381,58 +428,50 @@ async function enforceWorkflowWriteGate(toolName, projectDir, milestoneId = null
|
|
|
381
428
|
}
|
|
382
429
|
async function handleTaskComplete(projectDir, args) {
|
|
383
430
|
await enforceWorkflowWriteGate("gsd_task_complete", projectDir, args.milestoneId);
|
|
384
|
-
const { taskId, sliceId, milestoneId, oneLiner, narrative, verification, deviations, knownIssues, keyFiles, keyDecisions, blockerDiscovered, verificationEvidence, } = args;
|
|
385
431
|
const { executeTaskComplete } = await getWorkflowToolExecutors();
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
deviations,
|
|
394
|
-
knownIssues,
|
|
395
|
-
keyFiles,
|
|
396
|
-
keyDecisions,
|
|
397
|
-
blockerDiscovered,
|
|
398
|
-
verificationEvidence,
|
|
399
|
-
}, projectDir));
|
|
432
|
+
// Pass `args` through directly rather than destructure-then-rebuild. The
|
|
433
|
+
// previous implementation re-listed each field, which silently dropped
|
|
434
|
+
// schema fields that weren't in the rebuild list (e.g., ADR-011's
|
|
435
|
+
// `escalation` payload). The destructure-then-rebuild pattern is the bug
|
|
436
|
+
// class; matching the spread shape used by sibling handlers (handleSliceComplete,
|
|
437
|
+
// handleReplanSlice) eliminates the recurrence risk by construction.
|
|
438
|
+
return adaptExecutorResult(await runSerializedWorkflowOperation(() => executeTaskComplete(args, projectDir)));
|
|
400
439
|
}
|
|
401
440
|
async function handleSliceComplete(projectDir, args) {
|
|
402
441
|
await enforceWorkflowWriteGate("gsd_slice_complete", projectDir, args.milestoneId);
|
|
403
442
|
const { executeSliceComplete } = await getWorkflowToolExecutors();
|
|
404
443
|
const { projectDir: _projectDir, ...params } = args;
|
|
405
|
-
return runSerializedWorkflowOperation(() => executeSliceComplete(params, projectDir));
|
|
444
|
+
return adaptExecutorResult(await runSerializedWorkflowOperation(() => executeSliceComplete(params, projectDir)));
|
|
406
445
|
}
|
|
407
446
|
async function handleReplanSlice(projectDir, args) {
|
|
408
447
|
await enforceWorkflowWriteGate("gsd_replan_slice", projectDir, args.milestoneId);
|
|
409
448
|
const { executeReplanSlice } = await getWorkflowToolExecutors();
|
|
410
449
|
const { projectDir: _projectDir, ...params } = args;
|
|
411
|
-
return runSerializedWorkflowOperation(() => executeReplanSlice(params, projectDir));
|
|
450
|
+
return adaptExecutorResult(await runSerializedWorkflowOperation(() => executeReplanSlice(params, projectDir)));
|
|
412
451
|
}
|
|
413
452
|
async function handleCompleteMilestone(projectDir, args) {
|
|
414
453
|
await enforceWorkflowWriteGate("gsd_complete_milestone", projectDir, args.milestoneId);
|
|
415
454
|
const { executeCompleteMilestone } = await getWorkflowToolExecutors();
|
|
416
455
|
const { projectDir: _projectDir, ...params } = args;
|
|
417
|
-
return runSerializedWorkflowOperation(() => executeCompleteMilestone(params, projectDir));
|
|
456
|
+
return adaptExecutorResult(await runSerializedWorkflowOperation(() => executeCompleteMilestone(params, projectDir)));
|
|
418
457
|
}
|
|
419
458
|
async function handleValidateMilestone(projectDir, args) {
|
|
420
459
|
await enforceWorkflowWriteGate("gsd_validate_milestone", projectDir, args.milestoneId);
|
|
421
460
|
const { executeValidateMilestone } = await getWorkflowToolExecutors();
|
|
422
461
|
const { projectDir: _projectDir, ...params } = args;
|
|
423
|
-
return runSerializedWorkflowOperation(() => executeValidateMilestone(params, projectDir));
|
|
462
|
+
return adaptExecutorResult(await runSerializedWorkflowOperation(() => executeValidateMilestone(params, projectDir)));
|
|
424
463
|
}
|
|
425
464
|
async function handleReassessRoadmap(projectDir, args) {
|
|
426
465
|
await enforceWorkflowWriteGate("gsd_reassess_roadmap", projectDir, args.milestoneId);
|
|
427
466
|
const { executeReassessRoadmap } = await getWorkflowToolExecutors();
|
|
428
467
|
const { projectDir: _projectDir, ...params } = args;
|
|
429
|
-
return runSerializedWorkflowOperation(() => executeReassessRoadmap(params, projectDir));
|
|
468
|
+
return adaptExecutorResult(await runSerializedWorkflowOperation(() => executeReassessRoadmap(params, projectDir)));
|
|
430
469
|
}
|
|
431
470
|
async function handleSaveGateResult(projectDir, args) {
|
|
432
471
|
await enforceWorkflowWriteGate("gsd_save_gate_result", projectDir, args.milestoneId);
|
|
433
472
|
const { executeSaveGateResult } = await getWorkflowToolExecutors();
|
|
434
473
|
const { projectDir: _projectDir, ...params } = args;
|
|
435
|
-
return runSerializedWorkflowOperation(() => executeSaveGateResult(params, projectDir));
|
|
474
|
+
return adaptExecutorResult(await runSerializedWorkflowOperation(() => executeSaveGateResult(params, projectDir)));
|
|
436
475
|
}
|
|
437
476
|
async function ensureMilestoneDbRow(milestoneId) {
|
|
438
477
|
try {
|
|
@@ -921,14 +960,14 @@ export function registerWorkflowTools(server) {
|
|
|
921
960
|
const { projectDir, ...params } = parsed;
|
|
922
961
|
await enforceWorkflowWriteGate("gsd_plan_milestone", projectDir, params.milestoneId);
|
|
923
962
|
const { executePlanMilestone } = await getWorkflowToolExecutors();
|
|
924
|
-
return runSerializedWorkflowOperation(() => executePlanMilestone(params, projectDir));
|
|
963
|
+
return adaptExecutorResult(await runSerializedWorkflowOperation(() => executePlanMilestone(params, projectDir)));
|
|
925
964
|
});
|
|
926
965
|
server.tool("gsd_plan_slice", "Write slice/task planning state to the GSD database and render plan artifacts from DB.", planSliceParams, async (args) => {
|
|
927
966
|
const parsed = parseWorkflowArgs(planSliceSchema, args);
|
|
928
967
|
const { projectDir, ...params } = parsed;
|
|
929
968
|
await enforceWorkflowWriteGate("gsd_plan_slice", projectDir, params.milestoneId);
|
|
930
969
|
const { executePlanSlice } = await getWorkflowToolExecutors();
|
|
931
|
-
return runSerializedWorkflowOperation(() => executePlanSlice(params, projectDir));
|
|
970
|
+
return adaptExecutorResult(await runSerializedWorkflowOperation(() => executePlanSlice(params, projectDir)));
|
|
932
971
|
});
|
|
933
972
|
server.tool("gsd_plan_task", "Write task planning state to the GSD database and render tasks/T##-PLAN.md from DB.", planTaskParams, async (args) => {
|
|
934
973
|
const parsed = parseWorkflowArgs(planTaskSchema, args);
|
|
@@ -1037,7 +1076,7 @@ export function registerWorkflowTools(server) {
|
|
|
1037
1076
|
if (!supportedArtifactTypes.includes(artifact_type)) {
|
|
1038
1077
|
throw new Error(`artifact_type must be one of: ${supportedArtifactTypes.join(", ")}`);
|
|
1039
1078
|
}
|
|
1040
|
-
return runSerializedWorkflowOperation(() => executors.executeSummarySave({ milestone_id, slice_id, task_id, artifact_type, content }, projectDir));
|
|
1079
|
+
return adaptExecutorResult(await runSerializedWorkflowOperation(() => executors.executeSummarySave({ milestone_id, slice_id, task_id, artifact_type, content }, projectDir)));
|
|
1041
1080
|
});
|
|
1042
1081
|
server.tool("gsd_task_complete", "Record a completed task to the GSD database and render its SUMMARY.md.", taskCompleteParams, async (args) => {
|
|
1043
1082
|
const parsed = parseWorkflowArgs(taskCompleteSchema, args);
|
|
@@ -1055,7 +1094,7 @@ export function registerWorkflowTools(server) {
|
|
|
1055
1094
|
// during pending-gate or queue-mode states.
|
|
1056
1095
|
const { projectDir, milestoneId } = parseWorkflowArgs(milestoneStatusSchema, args);
|
|
1057
1096
|
const { executeMilestoneStatus } = await getWorkflowToolExecutors();
|
|
1058
|
-
return runSerializedWorkflowOperation(() => executeMilestoneStatus({ milestoneId }, projectDir));
|
|
1097
|
+
return adaptExecutorResult(await runSerializedWorkflowOperation(() => executeMilestoneStatus({ milestoneId }, projectDir)));
|
|
1059
1098
|
});
|
|
1060
1099
|
server.tool("gsd_journal_query", "Query the structured event journal for auto-mode iterations.", journalQueryParams, async (args) => {
|
|
1061
1100
|
const { projectDir, limit, ...filters } = parseWorkflowArgs(journalQuerySchema, args);
|