gsd-pi 2.75.0 → 2.76.0
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/README.md +186 -149
- package/dist/claude-cli-check.d.ts +10 -0
- package/dist/claude-cli-check.js +13 -3
- package/dist/headless-events.d.ts +1 -1
- package/dist/headless-events.js +5 -2
- package/dist/headless.js +5 -6
- package/dist/onboarding.d.ts +20 -1
- package/dist/onboarding.js +99 -39
- package/dist/resources/extensions/ask-user-questions.js +17 -5
- package/dist/resources/extensions/claude-code-cli/models.js +9 -0
- package/dist/resources/extensions/claude-code-cli/readiness.js +12 -2
- package/dist/resources/extensions/claude-code-cli/stream-adapter.js +76 -4
- package/dist/resources/extensions/gsd/auto/detect-stuck.js +9 -0
- package/dist/resources/extensions/gsd/auto/loop.js +67 -4
- package/dist/resources/extensions/gsd/auto/phases.js +72 -47
- package/dist/resources/extensions/gsd/auto/resolve.js +1 -1
- package/dist/resources/extensions/gsd/auto/run-unit.js +10 -1
- package/dist/resources/extensions/gsd/auto/session.js +5 -0
- package/dist/resources/extensions/gsd/auto-artifact-paths.js +20 -0
- package/dist/resources/extensions/gsd/auto-dashboard.js +37 -8
- package/dist/resources/extensions/gsd/auto-direct-dispatch.js +8 -2
- package/dist/resources/extensions/gsd/auto-dispatch.js +120 -14
- package/dist/resources/extensions/gsd/auto-loop.js +1 -1
- package/dist/resources/extensions/gsd/auto-model-selection.js +14 -4
- package/dist/resources/extensions/gsd/auto-post-unit.js +10 -8
- package/dist/resources/extensions/gsd/auto-prompts.js +190 -46
- package/dist/resources/extensions/gsd/auto-recovery.js +57 -0
- package/dist/resources/extensions/gsd/auto-start.js +5 -3
- package/dist/resources/extensions/gsd/auto-verification.js +3 -3
- package/dist/resources/extensions/gsd/auto-worktree.js +71 -2
- package/dist/resources/extensions/gsd/auto.js +57 -25
- package/dist/resources/extensions/gsd/bootstrap/agent-end-recovery.js +8 -21
- package/dist/resources/extensions/gsd/bootstrap/db-tools.js +45 -23
- package/dist/resources/extensions/gsd/bootstrap/memory-tools.js +128 -0
- package/dist/resources/extensions/gsd/bootstrap/query-tools.js +29 -0
- package/dist/resources/extensions/gsd/bootstrap/register-extension.js +2 -0
- package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +22 -0
- package/dist/resources/extensions/gsd/bootstrap/system-context.js +17 -4
- package/dist/resources/extensions/gsd/commands/catalog.js +81 -9
- package/dist/resources/extensions/gsd/commands/handlers/core.js +64 -24
- package/dist/resources/extensions/gsd/commands/handlers/escalate.js +171 -0
- package/dist/resources/extensions/gsd/commands/handlers/onboarding.js +159 -0
- package/dist/resources/extensions/gsd/commands/handlers/ops.js +21 -0
- package/dist/resources/extensions/gsd/commands/handlers/workflow.js +228 -29
- package/dist/resources/extensions/gsd/commands-cmux.js +5 -2
- package/dist/resources/extensions/gsd/commands-config.js +5 -0
- package/dist/resources/extensions/gsd/commands-debug.js +388 -0
- package/dist/resources/extensions/gsd/commands-do.js +1 -0
- package/dist/resources/extensions/gsd/commands-extract-learnings.js +233 -75
- package/dist/resources/extensions/gsd/commands-handlers.js +21 -2
- package/dist/resources/extensions/gsd/commands-memory.js +462 -0
- package/dist/resources/extensions/gsd/commands-prefs-wizard.js +40 -12
- package/dist/resources/extensions/gsd/commands-scan.js +94 -0
- package/dist/resources/extensions/gsd/commands-workflow-templates.js +101 -2
- package/dist/resources/extensions/gsd/custom-workflow-engine.js +74 -54
- package/dist/resources/extensions/gsd/db-writer.js +1 -0
- package/dist/resources/extensions/gsd/debug-session-store.js +238 -0
- package/dist/resources/extensions/gsd/definition-loader.js +7 -0
- package/dist/resources/extensions/gsd/docs/preferences-reference.md +9 -9
- package/dist/resources/extensions/gsd/doctor-environment.js +2 -1
- package/dist/resources/extensions/gsd/doctor-git-checks.js +27 -3
- package/dist/resources/extensions/gsd/doctor-proactive.js +4 -1
- package/dist/resources/extensions/gsd/doctor-providers.js +48 -20
- package/dist/resources/extensions/gsd/doctor-runtime-checks.js +22 -4
- package/dist/resources/extensions/gsd/doctor.js +7 -1
- package/dist/resources/extensions/gsd/error-classifier.js +6 -3
- package/dist/resources/extensions/gsd/escalation.js +321 -0
- package/dist/resources/extensions/gsd/forensics.js +26 -29
- package/dist/resources/extensions/gsd/git-service.js +0 -1
- package/dist/resources/extensions/gsd/graph.js +26 -2
- package/dist/resources/extensions/gsd/gsd-db.js +490 -32
- package/dist/resources/extensions/gsd/health-widget-core.js +42 -14
- package/dist/resources/extensions/gsd/health-widget.js +7 -4
- package/dist/resources/extensions/gsd/init-wizard.js +86 -45
- package/dist/resources/extensions/gsd/markdown-renderer.js +5 -5
- package/dist/resources/extensions/gsd/memory-embeddings.js +219 -0
- package/dist/resources/extensions/gsd/memory-extractor.js +78 -27
- package/dist/resources/extensions/gsd/memory-ingest.js +218 -0
- package/dist/resources/extensions/gsd/memory-relations.js +189 -0
- package/dist/resources/extensions/gsd/memory-source-store.js +113 -0
- package/dist/resources/extensions/gsd/memory-store.js +299 -6
- package/dist/resources/extensions/gsd/metrics.js +1 -0
- package/dist/resources/extensions/gsd/model-cost-table.js +3 -1
- package/dist/resources/extensions/gsd/model-router.js +16 -6
- package/dist/resources/extensions/gsd/native-git-bridge.js +137 -5
- package/dist/resources/extensions/gsd/notification-overlay.js +7 -22
- package/dist/resources/extensions/gsd/notification-widget.js +24 -39
- package/dist/resources/extensions/gsd/notifications.js +4 -0
- package/dist/resources/extensions/gsd/onboarding-state.js +133 -0
- package/dist/resources/extensions/gsd/post-execution-checks.js +27 -11
- package/dist/resources/extensions/gsd/pre-execution-checks.js +105 -8
- package/dist/resources/extensions/gsd/preferences-models.js +1 -0
- package/dist/resources/extensions/gsd/preferences-types.js +2 -1
- package/dist/resources/extensions/gsd/preferences-validation.js +42 -8
- package/dist/resources/extensions/gsd/preferences.js +10 -10
- package/dist/resources/extensions/gsd/prompts/add-tests.md +1 -0
- package/dist/resources/extensions/gsd/prompts/complete-milestone.md +4 -1
- package/dist/resources/extensions/gsd/prompts/debug-diagnose.md +25 -0
- package/dist/resources/extensions/gsd/prompts/debug-session-manager.md +80 -0
- package/dist/resources/extensions/gsd/prompts/execute-task.md +13 -1
- package/dist/resources/extensions/gsd/prompts/plan-milestone.md +12 -0
- package/dist/resources/extensions/gsd/prompts/plan-slice.md +1 -0
- package/dist/resources/extensions/gsd/prompts/refine-slice.md +69 -0
- package/dist/resources/extensions/gsd/prompts/scan.md +79 -0
- package/dist/resources/extensions/gsd/prompts/workflow-oneshot.md +26 -0
- package/dist/resources/extensions/gsd/python-resolver.js +70 -0
- package/dist/resources/extensions/gsd/run-manager.js +37 -17
- package/dist/resources/extensions/gsd/setup-catalog.js +75 -0
- package/dist/resources/extensions/gsd/state.js +47 -3
- package/dist/resources/extensions/gsd/templates/PREFERENCES.md +7 -7
- package/dist/resources/extensions/gsd/tools/complete-task.js +80 -0
- package/dist/resources/extensions/gsd/tools/memory-tools.js +306 -0
- package/dist/resources/extensions/gsd/tools/plan-milestone.js +37 -12
- package/dist/resources/extensions/gsd/tools/plan-slice.js +5 -2
- package/dist/resources/extensions/gsd/tools/skip-slice.js +78 -0
- package/dist/resources/extensions/gsd/tools/workflow-tool-executors.js +14 -0
- package/dist/resources/extensions/gsd/uok/flags.js +7 -7
- package/dist/resources/extensions/gsd/uok/kernel.js +8 -3
- package/dist/resources/extensions/gsd/verification-gate.js +2 -1
- package/dist/resources/extensions/gsd/workflow-dispatch.js +64 -0
- package/dist/resources/extensions/gsd/workflow-install.js +327 -0
- package/dist/resources/extensions/gsd/workflow-manifest.js +8 -0
- package/dist/resources/extensions/gsd/workflow-mcp.js +1 -6
- package/dist/resources/extensions/gsd/workflow-plugins.js +346 -0
- package/dist/resources/extensions/gsd/workflow-projections.js +17 -15
- package/dist/resources/extensions/gsd/workflow-templates/accessibility-audit.md +88 -0
- package/dist/resources/extensions/gsd/workflow-templates/api-breaking-change.md +117 -0
- package/dist/resources/extensions/gsd/workflow-templates/bugfix.md +1 -0
- package/dist/resources/extensions/gsd/workflow-templates/changelog-gen.md +82 -0
- package/dist/resources/extensions/gsd/workflow-templates/ci-bootstrap.md +144 -0
- package/dist/resources/extensions/gsd/workflow-templates/dead-code.md +81 -0
- package/dist/resources/extensions/gsd/workflow-templates/dep-upgrade.md +1 -0
- package/dist/resources/extensions/gsd/workflow-templates/docs-sync.yaml +76 -0
- package/dist/resources/extensions/gsd/workflow-templates/env-audit.yaml +88 -0
- package/dist/resources/extensions/gsd/workflow-templates/full-project.md +1 -0
- package/dist/resources/extensions/gsd/workflow-templates/hotfix.md +1 -0
- package/dist/resources/extensions/gsd/workflow-templates/issue-triage.md +84 -0
- package/dist/resources/extensions/gsd/workflow-templates/observability-setup.md +133 -0
- package/dist/resources/extensions/gsd/workflow-templates/onboarding-check.md +74 -0
- package/dist/resources/extensions/gsd/workflow-templates/performance-audit.md +125 -0
- package/dist/resources/extensions/gsd/workflow-templates/pr-review.md +67 -0
- package/dist/resources/extensions/gsd/workflow-templates/pr-triage.md +83 -0
- package/dist/resources/extensions/gsd/workflow-templates/refactor.md +1 -0
- package/dist/resources/extensions/gsd/workflow-templates/registry.json +184 -0
- package/dist/resources/extensions/gsd/workflow-templates/release.md +118 -0
- package/dist/resources/extensions/gsd/workflow-templates/rename-symbol.yaml +99 -0
- package/dist/resources/extensions/gsd/workflow-templates/security-audit.md +1 -0
- package/dist/resources/extensions/gsd/workflow-templates/small-feature.md +1 -0
- package/dist/resources/extensions/gsd/workflow-templates/spike.md +1 -0
- package/dist/resources/extensions/gsd/workflow-templates/test-backfill.yaml +73 -0
- package/dist/resources/extensions/gsd/worktree-resolver.js +42 -1
- package/dist/resources/extensions/remote-questions/commands.js +380 -0
- package/dist/resources/extensions/remote-questions/manager.js +39 -5
- package/dist/resources/extensions/remote-questions/telegram-adapter.js +79 -4
- package/dist/resources/extensions/search-the-web/command-search-provider.js +4 -1
- package/dist/resources/extensions/search-the-web/native-search.js +13 -2
- package/dist/resources/extensions/shared/interview-ui.js +189 -1
- package/dist/resources/extensions/shared/layout-utils.js +17 -0
- package/dist/resources/extensions/shared/rtk-shared.js +47 -0
- package/dist/resources/extensions/shared/rtk.js +3 -46
- package/dist/resources/skills/create-workflow/SKILL.md +33 -6
- package/dist/rtk-shared.d.ts +10 -0
- package/dist/rtk-shared.js +47 -0
- package/dist/rtk.d.ts +2 -6
- package/dist/rtk.js +3 -48
- package/dist/shared/workspace-types.d.ts +52 -0
- package/dist/shared/workspace-types.js +1 -0
- package/dist/tsconfig.extensions.tsbuildinfo +1 -1
- package/dist/update-check.d.ts +10 -0
- package/dist/update-check.js +24 -3
- package/dist/web/standalone/.next/BUILD_ID +1 -1
- package/dist/web/standalone/.next/app-path-routes-manifest.json +13 -13
- package/dist/web/standalone/.next/build-manifest.json +3 -3
- package/dist/web/standalone/.next/react-loadable-manifest.json +2 -2
- package/dist/web/standalone/.next/required-server-files.json +1 -1
- package/dist/web/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +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/page_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.html +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.rsc +2 -2
- package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
- 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 +2 -2
- 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 +2 -2
- package/dist/web/standalone/.next/server/app/api/boot/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/boot/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route.js +2 -2
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/captures/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/captures/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/cleanup/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/cleanup/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/doctor/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/doctor/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/export-data/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/export-data/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/files/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/files/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/forensics/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/forensics/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/git/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/git/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/history/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/history/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/hooks/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/hooks/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/inspect/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/inspect/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/knowledge/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/knowledge/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/live-state/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/live-state/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/notifications/route.js +2 -2
- package/dist/web/standalone/.next/server/app/api/notifications/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/onboarding/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/onboarding/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/projects/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/projects/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/recovery/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/recovery/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/session/browser/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/session/browser/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/session/command/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/session/command/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/session/events/route.js +2 -2
- package/dist/web/standalone/.next/server/app/api/session/events/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/session/manage/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/session/manage/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/settings-data/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/settings-data/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/skill-health/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/skill-health/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/steer/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/steer/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/switch-root/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/switch-root/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/sessions/route.js +2 -2
- package/dist/web/standalone/.next/server/app/api/terminal/sessions/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/stream/route.js +2 -2
- package/dist/web/standalone/.next/server/app/api/terminal/stream/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/undo/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/undo/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/update/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/visualizer/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/visualizer/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/index.html +1 -1
- package/dist/web/standalone/.next/server/app/index.rsc +3 -3
- package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
- package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +3 -3
- 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 +2 -2
- package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +2 -2
- package/dist/web/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app-paths-manifest.json +13 -13
- package/dist/web/standalone/.next/server/chunks/6897.js +2 -2
- package/dist/web/standalone/.next/server/chunks/7461.js +1 -0
- package/dist/web/standalone/.next/server/middleware-build-manifest.js +1 -1
- package/dist/web/standalone/.next/server/middleware-manifest.json +1 -1
- package/dist/web/standalone/.next/server/middleware-react-loadable-manifest.js +1 -1
- 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/static/chunks/2826.e59e8578e2e28639.js +9 -0
- package/dist/web/standalone/.next/static/chunks/{2008.71ee9230ad78df21.js → 3621.fc7480022c972438.js} +2 -2
- package/dist/web/standalone/.next/static/chunks/app/{page-7115e62689b5fd84.js → page-151349214571e2b6.js} +1 -1
- package/dist/web/standalone/.next/static/chunks/{webpack-b868033a5834586d.js → webpack-5fc74f13a25fa1bb.js} +1 -1
- package/dist/web/standalone/.next/static/css/632cd626b1731d88.css +1 -0
- package/dist/web/standalone/server.js +1 -1
- package/dist/welcome-screen.js +48 -24
- package/dist/wizard.js +2 -2
- package/dist/worktree-cli.d.ts +6 -5
- package/dist/worktree-cli.js +23 -7
- package/package.json +3 -3
- package/packages/daemon/package.json +2 -2
- package/packages/mcp-server/dist/server.d.ts.map +1 -1
- package/packages/mcp-server/dist/server.js +12 -10
- package/packages/mcp-server/dist/server.js.map +1 -1
- package/packages/mcp-server/dist/session-manager.d.ts.map +1 -1
- package/packages/mcp-server/dist/session-manager.js +8 -1
- package/packages/mcp-server/dist/session-manager.js.map +1 -1
- package/packages/mcp-server/dist/workflow-tools.d.ts +1 -0
- package/packages/mcp-server/dist/workflow-tools.d.ts.map +1 -1
- package/packages/mcp-server/dist/workflow-tools.js +207 -71
- package/packages/mcp-server/dist/workflow-tools.js.map +1 -1
- package/packages/mcp-server/package.json +2 -2
- package/packages/mcp-server/src/mcp-server.test.ts +40 -4
- package/packages/mcp-server/src/server.ts +12 -10
- package/packages/mcp-server/src/session-manager.ts +10 -3
- package/packages/mcp-server/src/workflow-tools.test.ts +346 -1
- package/packages/mcp-server/src/workflow-tools.ts +228 -75
- package/packages/mcp-server/tsconfig.tsbuildinfo +1 -1
- package/packages/native/package.json +1 -1
- package/packages/native/tsconfig.tsbuildinfo +1 -1
- package/packages/pi-agent-core/package.json +1 -1
- package/packages/pi-agent-core/tsconfig.tsbuildinfo +1 -1
- package/packages/pi-ai/dist/index.d.ts +1 -0
- package/packages/pi-ai/dist/index.d.ts.map +1 -1
- package/packages/pi-ai/dist/index.js +1 -0
- package/packages/pi-ai/dist/index.js.map +1 -1
- package/packages/pi-ai/dist/models/capability-patches.d.ts.map +1 -1
- package/packages/pi-ai/dist/models/capability-patches.js +3 -2
- package/packages/pi-ai/dist/models/capability-patches.js.map +1 -1
- package/packages/pi-ai/dist/models/generated/amazon-bedrock.d.ts +68 -0
- package/packages/pi-ai/dist/models/generated/amazon-bedrock.d.ts.map +1 -1
- package/packages/pi-ai/dist/models/generated/amazon-bedrock.js +68 -0
- package/packages/pi-ai/dist/models/generated/amazon-bedrock.js.map +1 -1
- package/packages/pi-ai/dist/models/generated/anthropic.d.ts +17 -0
- package/packages/pi-ai/dist/models/generated/anthropic.d.ts.map +1 -1
- package/packages/pi-ai/dist/models/generated/anthropic.js +17 -0
- package/packages/pi-ai/dist/models/generated/anthropic.js.map +1 -1
- package/packages/pi-ai/dist/models/generated/google-antigravity.d.ts +17 -0
- package/packages/pi-ai/dist/models/generated/google-antigravity.d.ts.map +1 -1
- package/packages/pi-ai/dist/models/generated/google-antigravity.js +17 -0
- package/packages/pi-ai/dist/models/generated/google-antigravity.js.map +1 -1
- package/packages/pi-ai/dist/models/generated/groq.d.ts +0 -153
- package/packages/pi-ai/dist/models/generated/groq.d.ts.map +1 -1
- package/packages/pi-ai/dist/models/generated/groq.js +0 -153
- package/packages/pi-ai/dist/models/generated/groq.js.map +1 -1
- package/packages/pi-ai/dist/models/generated/index.d.ts +136 -153
- package/packages/pi-ai/dist/models/generated/index.d.ts.map +1 -1
- package/packages/pi-ai/dist/models/generated/openai-codex.d.ts +17 -0
- package/packages/pi-ai/dist/models/generated/openai-codex.d.ts.map +1 -1
- package/packages/pi-ai/dist/models/generated/openai-codex.js +17 -0
- package/packages/pi-ai/dist/models/generated/openai-codex.js.map +1 -1
- package/packages/pi-ai/dist/models/generated/openrouter.d.ts +17 -0
- package/packages/pi-ai/dist/models/generated/openrouter.d.ts.map +1 -1
- package/packages/pi-ai/dist/models/generated/openrouter.js +17 -0
- package/packages/pi-ai/dist/models/generated/openrouter.js.map +1 -1
- package/packages/pi-ai/dist/models.generated.test.js +17 -0
- package/packages/pi-ai/dist/models.generated.test.js.map +1 -1
- package/packages/pi-ai/dist/providers/amazon-bedrock.d.ts +22 -1
- package/packages/pi-ai/dist/providers/amazon-bedrock.d.ts.map +1 -1
- package/packages/pi-ai/dist/providers/amazon-bedrock.js +40 -6
- package/packages/pi-ai/dist/providers/amazon-bedrock.js.map +1 -1
- package/packages/pi-ai/dist/providers/amazon-bedrock.test.d.ts +2 -0
- package/packages/pi-ai/dist/providers/amazon-bedrock.test.d.ts.map +1 -0
- package/packages/pi-ai/dist/providers/amazon-bedrock.test.js +106 -0
- package/packages/pi-ai/dist/providers/amazon-bedrock.test.js.map +1 -0
- package/packages/pi-ai/dist/providers/anthropic-auth.test.js +42 -1
- package/packages/pi-ai/dist/providers/anthropic-auth.test.js.map +1 -1
- package/packages/pi-ai/dist/providers/anthropic-shared.d.ts +20 -1
- package/packages/pi-ai/dist/providers/anthropic-shared.d.ts.map +1 -1
- package/packages/pi-ai/dist/providers/anthropic-shared.js +32 -2
- package/packages/pi-ai/dist/providers/anthropic-shared.js.map +1 -1
- package/packages/pi-ai/dist/providers/anthropic-shared.test.js +12 -1
- package/packages/pi-ai/dist/providers/anthropic-shared.test.js.map +1 -1
- package/packages/pi-ai/dist/providers/anthropic.d.ts +11 -0
- package/packages/pi-ai/dist/providers/anthropic.d.ts.map +1 -1
- package/packages/pi-ai/dist/providers/anthropic.js +18 -1
- package/packages/pi-ai/dist/providers/anthropic.js.map +1 -1
- package/packages/pi-ai/dist/providers/api-family.d.ts +27 -0
- package/packages/pi-ai/dist/providers/api-family.d.ts.map +1 -0
- package/packages/pi-ai/dist/providers/api-family.js +47 -0
- package/packages/pi-ai/dist/providers/api-family.js.map +1 -0
- package/packages/pi-ai/dist/providers/api-family.test.d.ts +2 -0
- package/packages/pi-ai/dist/providers/api-family.test.d.ts.map +1 -0
- package/packages/pi-ai/dist/providers/api-family.test.js +101 -0
- package/packages/pi-ai/dist/providers/api-family.test.js.map +1 -0
- package/packages/pi-ai/dist/utils/oauth/openai-codex.d.ts.map +1 -1
- package/packages/pi-ai/dist/utils/oauth/openai-codex.js +12 -0
- package/packages/pi-ai/dist/utils/oauth/openai-codex.js.map +1 -1
- package/packages/pi-ai/package.json +2 -2
- package/packages/pi-ai/scripts/generate-models.ts +50 -0
- package/packages/pi-ai/src/index.ts +1 -0
- package/packages/pi-ai/src/models/capability-patches.ts +5 -2
- package/packages/pi-ai/src/models/generated/amazon-bedrock.ts +68 -0
- package/packages/pi-ai/src/models/generated/anthropic.ts +17 -0
- package/packages/pi-ai/src/models/generated/google-antigravity.ts +17 -0
- package/packages/pi-ai/src/models/generated/groq.ts +0 -153
- package/packages/pi-ai/src/models/generated/openai-codex.ts +17 -0
- package/packages/pi-ai/src/models/generated/openrouter.ts +17 -0
- package/packages/pi-ai/src/models.generated.test.ts +17 -0
- package/packages/pi-ai/src/providers/amazon-bedrock.test.ts +164 -0
- package/packages/pi-ai/src/providers/amazon-bedrock.ts +41 -7
- package/packages/pi-ai/src/providers/anthropic-auth.test.ts +47 -1
- package/packages/pi-ai/src/providers/anthropic-shared.test.ts +15 -1
- package/packages/pi-ai/src/providers/anthropic-shared.ts +36 -3
- package/packages/pi-ai/src/providers/anthropic.ts +19 -1
- package/packages/pi-ai/src/providers/api-family.test.ts +129 -0
- package/packages/pi-ai/src/providers/api-family.ts +57 -0
- package/packages/pi-ai/src/utils/oauth/openai-codex.ts +15 -0
- package/packages/pi-ai/tsconfig.tsbuildinfo +1 -1
- package/packages/pi-coding-agent/dist/cli/args.d.ts +6 -0
- package/packages/pi-coding-agent/dist/cli/args.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/cli/args.js +14 -4
- package/packages/pi-coding-agent/dist/cli/args.js.map +1 -1
- package/packages/pi-coding-agent/dist/cli/args.test.d.ts +2 -0
- package/packages/pi-coding-agent/dist/cli/args.test.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/cli/args.test.js +38 -0
- package/packages/pi-coding-agent/dist/cli/args.test.js.map +1 -0
- package/packages/pi-coding-agent/dist/core/agent-session-abort-order.test.d.ts +2 -0
- package/packages/pi-coding-agent/dist/core/agent-session-abort-order.test.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/agent-session-abort-order.test.js +38 -0
- package/packages/pi-coding-agent/dist/core/agent-session-abort-order.test.js.map +1 -0
- package/packages/pi-coding-agent/dist/core/auth-storage.d.ts +14 -0
- package/packages/pi-coding-agent/dist/core/auth-storage.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/auth-storage.js +34 -0
- package/packages/pi-coding-agent/dist/core/auth-storage.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/auth-storage.test.js +74 -0
- package/packages/pi-coding-agent/dist/core/auth-storage.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/chat-controller-ordering.test.js +4 -1
- package/packages/pi-coding-agent/dist/core/chat-controller-ordering.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/runner.d.ts +1 -0
- package/packages/pi-coding-agent/dist/core/extensions/runner.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/runner.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/types.d.ts +2 -1
- package/packages/pi-coding-agent/dist/core/extensions/types.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/types.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/model-registry-auth-mode.test.js +32 -0
- package/packages/pi-coding-agent/dist/core/model-registry-auth-mode.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/retry-handler.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/retry-handler.js +4 -1
- package/packages/pi-coding-agent/dist/core/retry-handler.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/sdk.d.ts +10 -0
- package/packages/pi-coding-agent/dist/core/sdk.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/sdk.js +39 -1
- package/packages/pi-coding-agent/dist/core/sdk.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/skill-tool.test.js +2 -2
- package/packages/pi-coding-agent/dist/core/skill-tool.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/main.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/main.js +3 -0
- package/packages/pi-coding-agent/dist/main.js.map +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 +17 -7
- package/packages/pi-coding-agent/dist/modes/interactive/components/chat-frame.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/footer.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/footer.js +48 -34
- package/packages/pi-coding-agent/dist/modes/interactive/components/footer.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.d.ts +4 -0
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.js +83 -33
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/theme/theme-schema.d.ts +70 -0
- package/packages/pi-coding-agent/dist/modes/interactive/theme/theme-schema.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/theme/theme-schema.js +77 -0
- package/packages/pi-coding-agent/dist/modes/interactive/theme/theme-schema.js.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.d.ts +1 -66
- package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.js +1 -75
- package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.d.ts +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.js +192 -24
- package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.js.map +1 -1
- package/packages/pi-coding-agent/package.json +1 -1
- package/packages/pi-coding-agent/src/cli/args.test.ts +44 -0
- package/packages/pi-coding-agent/src/cli/args.ts +21 -6
- package/packages/pi-coding-agent/src/core/agent-session-abort-order.test.ts +56 -0
- package/packages/pi-coding-agent/src/core/auth-storage.test.ts +83 -0
- package/packages/pi-coding-agent/src/core/auth-storage.ts +35 -0
- package/packages/pi-coding-agent/src/core/chat-controller-ordering.test.ts +4 -1
- package/packages/pi-coding-agent/src/core/extensions/runner.ts +4 -1
- package/packages/pi-coding-agent/src/core/extensions/types.ts +2 -2
- package/packages/pi-coding-agent/src/core/model-registry-auth-mode.test.ts +37 -1
- package/packages/pi-coding-agent/src/core/retry-handler.ts +4 -1
- package/packages/pi-coding-agent/src/core/sdk.ts +58 -1
- package/packages/pi-coding-agent/src/core/skill-tool.test.ts +2 -2
- package/packages/pi-coding-agent/src/main.ts +4 -0
- package/packages/pi-coding-agent/src/modes/interactive/components/chat-frame.ts +19 -7
- package/packages/pi-coding-agent/src/modes/interactive/components/footer.ts +53 -31
- package/packages/pi-coding-agent/src/modes/interactive/controllers/chat-controller.ts +88 -36
- package/packages/pi-coding-agent/src/modes/interactive/theme/theme-schema.ts +83 -0
- package/packages/pi-coding-agent/src/modes/interactive/theme/theme.ts +2 -83
- package/packages/pi-coding-agent/src/modes/interactive/theme/themes.ts +208 -27
- package/packages/pi-coding-agent/tsconfig.tsbuildinfo +1 -1
- package/packages/pi-tui/package.json +1 -1
- package/packages/pi-tui/tsconfig.tsbuildinfo +1 -1
- package/packages/rpc-client/package.json +1 -1
- package/packages/rpc-client/tsconfig.tsbuildinfo +1 -1
- package/pkg/dist/modes/interactive/theme/theme-schema.d.ts +70 -0
- package/pkg/dist/modes/interactive/theme/theme-schema.d.ts.map +1 -0
- package/pkg/dist/modes/interactive/theme/theme-schema.js +77 -0
- package/pkg/dist/modes/interactive/theme/theme-schema.js.map +1 -0
- package/pkg/dist/modes/interactive/theme/theme.d.ts +1 -66
- package/pkg/dist/modes/interactive/theme/theme.d.ts.map +1 -1
- package/pkg/dist/modes/interactive/theme/theme.js +1 -75
- package/pkg/dist/modes/interactive/theme/theme.js.map +1 -1
- package/pkg/dist/modes/interactive/theme/themes.d.ts +1 -1
- package/pkg/dist/modes/interactive/theme/themes.d.ts.map +1 -1
- package/pkg/dist/modes/interactive/theme/themes.js +192 -24
- package/pkg/dist/modes/interactive/theme/themes.js.map +1 -1
- package/pkg/package.json +1 -1
- package/src/resources/extensions/ask-user-questions.ts +24 -6
- package/src/resources/extensions/claude-code-cli/models.ts +9 -0
- package/src/resources/extensions/claude-code-cli/readiness.ts +13 -2
- package/src/resources/extensions/claude-code-cli/stream-adapter.ts +94 -4
- package/src/resources/extensions/claude-code-cli/tests/stream-adapter.test.ts +84 -0
- package/src/resources/extensions/gsd/auto/detect-stuck.ts +10 -0
- package/src/resources/extensions/gsd/auto/loop-deps.ts +2 -9
- package/src/resources/extensions/gsd/auto/loop.ts +109 -3
- package/src/resources/extensions/gsd/auto/phases.ts +97 -60
- package/src/resources/extensions/gsd/auto/resolve.ts +1 -1
- package/src/resources/extensions/gsd/auto/run-unit.ts +11 -1
- package/src/resources/extensions/gsd/auto/session.ts +7 -0
- package/src/resources/extensions/gsd/auto-artifact-paths.ts +20 -0
- package/src/resources/extensions/gsd/auto-dashboard.ts +46 -5
- package/src/resources/extensions/gsd/auto-direct-dispatch.ts +15 -2
- package/src/resources/extensions/gsd/auto-dispatch.ts +141 -9
- package/src/resources/extensions/gsd/auto-loop.ts +1 -1
- package/src/resources/extensions/gsd/auto-model-selection.ts +17 -4
- package/src/resources/extensions/gsd/auto-post-unit.ts +10 -8
- package/src/resources/extensions/gsd/auto-prompts.ts +232 -47
- package/src/resources/extensions/gsd/auto-recovery.ts +63 -1
- package/src/resources/extensions/gsd/auto-start.ts +8 -6
- package/src/resources/extensions/gsd/auto-verification.ts +3 -3
- package/src/resources/extensions/gsd/auto-worktree.ts +81 -1
- package/src/resources/extensions/gsd/auto.ts +61 -28
- package/src/resources/extensions/gsd/bootstrap/agent-end-recovery.ts +8 -21
- package/src/resources/extensions/gsd/bootstrap/db-tools.ts +46 -24
- package/src/resources/extensions/gsd/bootstrap/memory-tools.ts +158 -0
- package/src/resources/extensions/gsd/bootstrap/query-tools.ts +31 -0
- package/src/resources/extensions/gsd/bootstrap/register-extension.ts +2 -0
- package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +22 -0
- package/src/resources/extensions/gsd/bootstrap/system-context.ts +20 -4
- package/src/resources/extensions/gsd/commands/catalog.ts +74 -9
- package/src/resources/extensions/gsd/commands/handlers/core.ts +69 -27
- package/src/resources/extensions/gsd/commands/handlers/escalate.ts +216 -0
- package/src/resources/extensions/gsd/commands/handlers/onboarding.ts +196 -0
- package/src/resources/extensions/gsd/commands/handlers/ops.ts +21 -0
- package/src/resources/extensions/gsd/commands/handlers/workflow.ts +279 -29
- package/src/resources/extensions/gsd/commands-cmux.ts +6 -2
- package/src/resources/extensions/gsd/commands-config.ts +10 -0
- package/src/resources/extensions/gsd/commands-debug.ts +484 -0
- package/src/resources/extensions/gsd/commands-do.ts +1 -0
- package/src/resources/extensions/gsd/commands-extract-learnings.ts +295 -76
- package/src/resources/extensions/gsd/commands-handlers.ts +19 -2
- package/src/resources/extensions/gsd/commands-memory.ts +551 -0
- package/src/resources/extensions/gsd/commands-prefs-wizard.ts +49 -12
- package/src/resources/extensions/gsd/commands-scan.ts +125 -0
- package/src/resources/extensions/gsd/commands-workflow-templates.ts +129 -2
- package/src/resources/extensions/gsd/custom-workflow-engine.ts +85 -60
- package/src/resources/extensions/gsd/db-writer.ts +3 -0
- package/src/resources/extensions/gsd/debug-session-store.ts +377 -0
- package/src/resources/extensions/gsd/definition-loader.ts +7 -0
- package/src/resources/extensions/gsd/docs/preferences-reference.md +9 -9
- package/src/resources/extensions/gsd/doctor-environment.ts +2 -1
- package/src/resources/extensions/gsd/doctor-git-checks.ts +28 -3
- package/src/resources/extensions/gsd/doctor-proactive.ts +4 -1
- package/src/resources/extensions/gsd/doctor-providers.ts +52 -22
- package/src/resources/extensions/gsd/doctor-runtime-checks.ts +23 -4
- package/src/resources/extensions/gsd/doctor-types.ts +1 -0
- package/src/resources/extensions/gsd/doctor.ts +7 -1
- package/src/resources/extensions/gsd/error-classifier.ts +6 -3
- package/src/resources/extensions/gsd/escalation.ts +367 -0
- package/src/resources/extensions/gsd/forensics.ts +25 -29
- package/src/resources/extensions/gsd/git-service.ts +0 -1
- package/src/resources/extensions/gsd/graph.ts +33 -3
- package/src/resources/extensions/gsd/gsd-db.ts +578 -32
- package/src/resources/extensions/gsd/health-widget-core.ts +43 -14
- package/src/resources/extensions/gsd/health-widget.ts +7 -3
- package/src/resources/extensions/gsd/init-wizard.ts +87 -54
- package/src/resources/extensions/gsd/markdown-renderer.ts +5 -5
- package/src/resources/extensions/gsd/memory-embeddings.ts +235 -0
- package/src/resources/extensions/gsd/memory-extractor.ts +100 -34
- package/src/resources/extensions/gsd/memory-ingest.ts +286 -0
- package/src/resources/extensions/gsd/memory-relations.ts +240 -0
- package/src/resources/extensions/gsd/memory-source-store.ts +138 -0
- package/src/resources/extensions/gsd/memory-store.ts +351 -7
- package/src/resources/extensions/gsd/metrics.ts +1 -0
- package/src/resources/extensions/gsd/model-cost-table.ts +3 -1
- package/src/resources/extensions/gsd/model-router.ts +25 -6
- package/src/resources/extensions/gsd/native-git-bridge.ts +134 -6
- package/src/resources/extensions/gsd/notification-overlay.ts +9 -19
- package/src/resources/extensions/gsd/notification-widget.ts +25 -43
- package/src/resources/extensions/gsd/notifications.ts +6 -0
- package/src/resources/extensions/gsd/onboarding-state.ts +146 -0
- package/src/resources/extensions/gsd/post-execution-checks.ts +37 -14
- package/src/resources/extensions/gsd/pre-execution-checks.ts +106 -12
- package/src/resources/extensions/gsd/preferences-models.ts +1 -0
- package/src/resources/extensions/gsd/preferences-types.ts +10 -2
- package/src/resources/extensions/gsd/preferences-validation.ts +33 -7
- package/src/resources/extensions/gsd/preferences.ts +10 -10
- package/src/resources/extensions/gsd/prompts/add-tests.md +1 -0
- package/src/resources/extensions/gsd/prompts/complete-milestone.md +4 -1
- package/src/resources/extensions/gsd/prompts/debug-diagnose.md +25 -0
- package/src/resources/extensions/gsd/prompts/debug-session-manager.md +80 -0
- package/src/resources/extensions/gsd/prompts/execute-task.md +13 -1
- package/src/resources/extensions/gsd/prompts/plan-milestone.md +12 -0
- package/src/resources/extensions/gsd/prompts/plan-slice.md +1 -0
- package/src/resources/extensions/gsd/prompts/refine-slice.md +69 -0
- package/src/resources/extensions/gsd/prompts/scan.md +79 -0
- package/src/resources/extensions/gsd/prompts/workflow-oneshot.md +26 -0
- package/src/resources/extensions/gsd/python-resolver.ts +76 -0
- package/src/resources/extensions/gsd/run-manager.ts +53 -19
- package/src/resources/extensions/gsd/setup-catalog.ts +105 -0
- package/src/resources/extensions/gsd/state.ts +50 -2
- package/src/resources/extensions/gsd/templates/PREFERENCES.md +7 -7
- package/src/resources/extensions/gsd/tests/agent-end-retry.test.ts +1 -34
- package/src/resources/extensions/gsd/tests/artifact-corruption-2630.test.ts +7 -0
- package/src/resources/extensions/gsd/tests/auto-dashboard.test.ts +49 -0
- package/src/resources/extensions/gsd/tests/auto-loop.test.ts +45 -31
- package/src/resources/extensions/gsd/tests/auto-migrating-recovery.test.ts +63 -0
- package/src/resources/extensions/gsd/tests/auto-model-selection.test.ts +12 -0
- package/src/resources/extensions/gsd/tests/auto-prompts-fallback.test.ts +35 -0
- package/src/resources/extensions/gsd/tests/auto-recovery.test.ts +123 -1
- package/src/resources/extensions/gsd/tests/auto-wrapup-inflight-guard.test.ts +39 -0
- package/src/resources/extensions/gsd/tests/autocomplete-regressions-1675.test.ts +39 -0
- package/src/resources/extensions/gsd/tests/commands-do.test.ts +48 -0
- package/src/resources/extensions/gsd/tests/commands-extract-learnings.test.ts +333 -21
- package/src/resources/extensions/gsd/tests/commands-scan.test.ts +351 -0
- package/src/resources/extensions/gsd/tests/commands-workflow-custom.test.ts +8 -6
- package/src/resources/extensions/gsd/tests/complete-slice.test.ts +6 -8
- package/src/resources/extensions/gsd/tests/complete-task.test.ts +2 -2
- package/src/resources/extensions/gsd/tests/custom-workflow-engine.test.ts +63 -0
- package/src/resources/extensions/gsd/tests/debug-command-handler.test.ts +905 -0
- package/src/resources/extensions/gsd/tests/debug-command-lifecycle.integration.test.ts +1229 -0
- package/src/resources/extensions/gsd/tests/debug-session-store.test.ts +565 -0
- package/src/resources/extensions/gsd/tests/discuss-milestone-structured-questions.test.ts +64 -0
- package/src/resources/extensions/gsd/tests/dispatch-complete-milestone-guard.test.ts +67 -0
- package/src/resources/extensions/gsd/tests/doctor-providers.test.ts +62 -18
- package/src/resources/extensions/gsd/tests/enhanced-verification-integration.test.ts +5 -0
- package/src/resources/extensions/gsd/tests/escalation.test.ts +818 -0
- package/src/resources/extensions/gsd/tests/finalize-timeout-guard.test.ts +29 -12
- package/src/resources/extensions/gsd/tests/flat-rate-routing-guard.test.ts +106 -0
- package/src/resources/extensions/gsd/tests/forensics-hook-key-parse.test.ts +74 -0
- package/src/resources/extensions/gsd/tests/graph-operations.test.ts +0 -4
- package/src/resources/extensions/gsd/tests/gsd-db.test.ts +44 -1
- package/src/resources/extensions/gsd/tests/health-widget.test.ts +8 -2
- package/src/resources/extensions/gsd/tests/init-prefs-routing.test.ts +190 -0
- package/src/resources/extensions/gsd/tests/integration/doctor-git-symlink-cwd.test.ts +79 -0
- package/src/resources/extensions/gsd/tests/integration/doctor-git.test.ts +39 -0
- package/src/resources/extensions/gsd/tests/integration/doctor-proactive.test.ts +44 -0
- package/src/resources/extensions/gsd/tests/integration/doctor-runtime.test.ts +68 -1
- package/src/resources/extensions/gsd/tests/integration/git-service.test.ts +109 -11
- package/src/resources/extensions/gsd/tests/integration/idle-recovery.test.ts +51 -0
- package/src/resources/extensions/gsd/tests/integration/integration-proof.test.ts +2 -2
- package/src/resources/extensions/gsd/tests/integration/test-isolation.ts +53 -0
- package/src/resources/extensions/gsd/tests/journal-integration.test.ts +171 -1
- package/src/resources/extensions/gsd/tests/md-importer.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/memory-embeddings.test.ts +213 -0
- package/src/resources/extensions/gsd/tests/memory-ingest.test.ts +153 -0
- package/src/resources/extensions/gsd/tests/memory-maintenance.test.ts +107 -0
- package/src/resources/extensions/gsd/tests/memory-relations.test.ts +175 -0
- package/src/resources/extensions/gsd/tests/memory-store.test.ts +2 -2
- package/src/resources/extensions/gsd/tests/memory-tools.test.ts +295 -0
- package/src/resources/extensions/gsd/tests/milestone-status-tool.test.ts +3 -2
- package/src/resources/extensions/gsd/tests/model-cost-table.test.ts +2 -2
- package/src/resources/extensions/gsd/tests/model-router.test.ts +51 -1
- package/src/resources/extensions/gsd/tests/model-unittype-mapping.test.ts +59 -0
- package/src/resources/extensions/gsd/tests/notification-overlay.test.ts +56 -37
- package/src/resources/extensions/gsd/tests/notification-widget.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/onboarding-state.test.ts +105 -0
- package/src/resources/extensions/gsd/tests/plan-milestone-boundary-map-preservation.test.ts +114 -0
- package/src/resources/extensions/gsd/tests/plan-milestone.test.ts +4 -5
- package/src/resources/extensions/gsd/tests/plan-slice.test.ts +17 -0
- package/src/resources/extensions/gsd/tests/post-execution-checks.test.ts +105 -1
- package/src/resources/extensions/gsd/tests/pre-execution-checks.test.ts +341 -6
- package/src/resources/extensions/gsd/tests/preferences.test.ts +69 -1
- package/src/resources/extensions/gsd/tests/progressive-planning.test.ts +539 -0
- package/src/resources/extensions/gsd/tests/projection-no-plan-overwrite.test.ts +11 -2
- package/src/resources/extensions/gsd/tests/projection-regression.test.ts +7 -0
- package/src/resources/extensions/gsd/tests/prompt-budget-enforcement.test.ts +159 -8
- package/src/resources/extensions/gsd/tests/prompt-contracts.test.ts +24 -0
- package/src/resources/extensions/gsd/tests/prompt-db.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/prompts-no-gitignored-test-refs.test.ts +56 -0
- package/src/resources/extensions/gsd/tests/provider-errors.test.ts +33 -0
- package/src/resources/extensions/gsd/tests/python-resolver.test.ts +131 -0
- package/src/resources/extensions/gsd/tests/register-hooks-depth-verification.test.ts +67 -0
- package/src/resources/extensions/gsd/tests/remote-notification-from-desktop.test.ts +107 -0
- package/src/resources/extensions/gsd/tests/requirements.test.ts +9 -0
- package/src/resources/extensions/gsd/tests/session-start-footer.test.ts +153 -0
- package/src/resources/extensions/gsd/tests/skip-slice-cascades-tasks.test.ts +125 -0
- package/src/resources/extensions/gsd/tests/slice-context-injection.test.ts +16 -4
- package/src/resources/extensions/gsd/tests/stash-queued-context-files.test.ts +54 -0
- package/src/resources/extensions/gsd/tests/state-corruption-2945.test.ts +3 -0
- package/src/resources/extensions/gsd/tests/stuck-detection-coverage.test.ts +15 -0
- package/src/resources/extensions/gsd/tests/summary-render-parity.test.ts +5 -0
- package/src/resources/extensions/gsd/tests/uok-contracts.test.ts +2 -1
- package/src/resources/extensions/gsd/tests/uok-flags.test.ts +31 -1
- package/src/resources/extensions/gsd/tests/uok-kernel-path.test.ts +166 -0
- package/src/resources/extensions/gsd/tests/verification-gate.test.ts +35 -0
- package/src/resources/extensions/gsd/tests/workflow-install.test.ts +113 -0
- package/src/resources/extensions/gsd/tests/workflow-logger-wiring.test.ts +15 -6
- package/src/resources/extensions/gsd/tests/workflow-mcp.test.ts +2 -2
- package/src/resources/extensions/gsd/tests/workflow-plugins.test.ts +310 -0
- package/src/resources/extensions/gsd/tests/workflow-projections.test.ts +7 -0
- package/src/resources/extensions/gsd/tests/workflow-templates.test.ts +8 -2
- package/src/resources/extensions/gsd/tests/workflow-tool-executors.test.ts +97 -0
- package/src/resources/extensions/gsd/tests/worktree-journal-events.test.ts +2 -1
- package/src/resources/extensions/gsd/tests/worktree-resolver.test.ts +77 -2
- package/src/resources/extensions/gsd/tools/complete-task.ts +87 -0
- package/src/resources/extensions/gsd/tools/memory-tools.ts +380 -0
- package/src/resources/extensions/gsd/tools/plan-milestone.ts +42 -8
- package/src/resources/extensions/gsd/tools/plan-slice.ts +6 -1
- package/src/resources/extensions/gsd/tools/skip-slice.ts +133 -0
- package/src/resources/extensions/gsd/tools/workflow-tool-executors.ts +14 -0
- package/src/resources/extensions/gsd/types.ts +62 -0
- package/src/resources/extensions/gsd/unit-runtime.ts +1 -0
- package/src/resources/extensions/gsd/uok/contracts.ts +2 -1
- package/src/resources/extensions/gsd/uok/flags.ts +7 -7
- package/src/resources/extensions/gsd/uok/kernel.ts +16 -4
- package/src/resources/extensions/gsd/verification-gate.ts +2 -1
- package/src/resources/extensions/gsd/workflow-dispatch.ts +106 -0
- package/src/resources/extensions/gsd/workflow-install.ts +423 -0
- package/src/resources/extensions/gsd/workflow-logger.ts +3 -1
- package/src/resources/extensions/gsd/workflow-manifest.ts +8 -0
- package/src/resources/extensions/gsd/workflow-mcp.ts +1 -6
- package/src/resources/extensions/gsd/workflow-plugins.ts +403 -0
- package/src/resources/extensions/gsd/workflow-projections.ts +18 -16
- package/src/resources/extensions/gsd/workflow-templates/accessibility-audit.md +88 -0
- package/src/resources/extensions/gsd/workflow-templates/api-breaking-change.md +117 -0
- package/src/resources/extensions/gsd/workflow-templates/bugfix.md +1 -0
- package/src/resources/extensions/gsd/workflow-templates/changelog-gen.md +82 -0
- package/src/resources/extensions/gsd/workflow-templates/ci-bootstrap.md +144 -0
- package/src/resources/extensions/gsd/workflow-templates/dead-code.md +81 -0
- package/src/resources/extensions/gsd/workflow-templates/dep-upgrade.md +1 -0
- package/src/resources/extensions/gsd/workflow-templates/docs-sync.yaml +76 -0
- package/src/resources/extensions/gsd/workflow-templates/env-audit.yaml +88 -0
- package/src/resources/extensions/gsd/workflow-templates/full-project.md +1 -0
- package/src/resources/extensions/gsd/workflow-templates/hotfix.md +1 -0
- package/src/resources/extensions/gsd/workflow-templates/issue-triage.md +84 -0
- package/src/resources/extensions/gsd/workflow-templates/observability-setup.md +133 -0
- package/src/resources/extensions/gsd/workflow-templates/onboarding-check.md +74 -0
- package/src/resources/extensions/gsd/workflow-templates/performance-audit.md +125 -0
- package/src/resources/extensions/gsd/workflow-templates/pr-review.md +67 -0
- package/src/resources/extensions/gsd/workflow-templates/pr-triage.md +83 -0
- package/src/resources/extensions/gsd/workflow-templates/refactor.md +1 -0
- package/src/resources/extensions/gsd/workflow-templates/registry.json +184 -0
- package/src/resources/extensions/gsd/workflow-templates/release.md +118 -0
- package/src/resources/extensions/gsd/workflow-templates/rename-symbol.yaml +99 -0
- package/src/resources/extensions/gsd/workflow-templates/security-audit.md +1 -0
- package/src/resources/extensions/gsd/workflow-templates/small-feature.md +1 -0
- package/src/resources/extensions/gsd/workflow-templates/spike.md +1 -0
- package/src/resources/extensions/gsd/workflow-templates/test-backfill.yaml +73 -0
- package/src/resources/extensions/gsd/workflow-templates.ts +7 -0
- package/src/resources/extensions/gsd/workspace-index.ts +9 -4
- package/src/resources/extensions/gsd/worktree-resolver.ts +47 -1
- package/src/resources/extensions/remote-questions/commands.ts +480 -0
- package/src/resources/extensions/remote-questions/manager.ts +49 -4
- package/src/resources/extensions/remote-questions/telegram-adapter.ts +86 -4
- package/src/resources/extensions/remote-questions/tests/command-polling.test.ts +246 -0
- package/src/resources/extensions/remote-questions/tests/remote-answer-normalization.test.ts +92 -0
- package/src/resources/extensions/remote-questions/tests/telegram-commands.test.ts +267 -0
- package/src/resources/extensions/search-the-web/command-search-provider.ts +4 -1
- package/src/resources/extensions/search-the-web/native-search.ts +13 -3
- package/src/resources/extensions/shared/interview-ui.ts +195 -1
- package/src/resources/extensions/shared/layout-utils.ts +26 -0
- package/src/resources/extensions/shared/rtk-shared.ts +58 -0
- package/src/resources/extensions/shared/rtk.ts +12 -52
- package/src/resources/extensions/shared/tests/interview-preview.test.ts +177 -0
- package/src/resources/extensions/shared/tests/preview-layout.test.ts +120 -0
- package/src/resources/skills/create-workflow/SKILL.md +33 -6
- package/dist/web/standalone/.next/static/chunks/2826.dd3dc8bbd3025fa5.js +0 -9
- package/dist/web/standalone/.next/static/css/f6e8833d46e738d8.css +0 -1
- package/packages/native/dist/ps/types.d.ts +0 -5
- package/packages/native/dist/ps/types.js +0 -2
- package/packages/native/src/ps/types.ts +0 -5
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/LICENSE +0 -201
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/README.md +0 -9
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-cjs/index.js +0 -762
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/build-abort-error.js +0 -19
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/constants.js +0 -1
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/get-transformed-headers.js +0 -9
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/index.js +0 -3
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/node-http-handler.js +0 -230
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/node-http2-connection-manager.js +0 -87
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/node-http2-connection-pool.js +0 -32
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/node-http2-handler.js +0 -169
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/readable.mock.js +0 -21
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/server.mock.js +0 -88
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/set-connection-timeout.js +0 -36
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/set-request-timeout.js +0 -21
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/set-socket-keep-alive.js +0 -22
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/set-socket-timeout.js +0 -23
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/stream-collector/collector.js +0 -8
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/stream-collector/index.js +0 -41
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/stream-collector/readable.mock.js +0 -21
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/timing.js +0 -4
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/write-request-body.js +0 -63
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/build-abort-error.d.ts +0 -10
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/constants.d.ts +0 -5
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/get-transformed-headers.d.ts +0 -4
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/index.d.ts +0 -3
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/node-http-handler.d.ts +0 -46
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/node-http2-connection-manager.d.ts +0 -24
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/node-http2-connection-pool.d.ts +0 -12
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/node-http2-handler.d.ts +0 -63
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/readable.mock.d.ts +0 -13
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/server.mock.d.ts +0 -12
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/set-connection-timeout.d.ts +0 -2
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/set-request-timeout.d.ts +0 -6
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/set-socket-keep-alive.d.ts +0 -6
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/set-socket-timeout.d.ts +0 -2
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/stream-collector/collector.d.ts +0 -5
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/stream-collector/index.d.ts +0 -6
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/stream-collector/readable.mock.d.ts +0 -13
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/timing.d.ts +0 -8
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/build-abort-error.d.ts +0 -10
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/constants.d.ts +0 -5
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/get-transformed-headers.d.ts +0 -4
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/index.d.ts +0 -3
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/node-http-handler.d.ts +0 -46
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/node-http2-connection-manager.d.ts +0 -24
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/node-http2-connection-pool.d.ts +0 -12
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/node-http2-handler.d.ts +0 -63
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/readable.mock.d.ts +0 -13
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/server.mock.d.ts +0 -12
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/set-connection-timeout.d.ts +0 -2
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/set-request-timeout.d.ts +0 -6
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/set-socket-keep-alive.d.ts +0 -6
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/set-socket-timeout.d.ts +0 -2
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/stream-collector/collector.d.ts +0 -5
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/stream-collector/index.d.ts +0 -6
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/stream-collector/readable.mock.d.ts +0 -13
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/timing.d.ts +0 -8
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/write-request-body.d.ts +0 -12
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/write-request-body.d.ts +0 -12
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/package.json +0 -68
- package/packages/pi-ai/oauth.d.ts +0 -1
- package/packages/pi-ai/oauth.js +0 -1
- /package/dist/web/standalone/.next/static/{prkokVQFxWtUVIku57_0z → ssX7BLv3Dw9Fb4CtrCGeR}/_buildManifest.js +0 -0
- /package/dist/web/standalone/.next/static/{prkokVQFxWtUVIku57_0z → ssX7BLv3Dw9Fb4CtrCGeR}/_ssgManifest.js +0 -0
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
You are performing a focused codebase scan.
|
|
2
|
+
|
|
3
|
+
## Scan Parameters
|
|
4
|
+
|
|
5
|
+
- **Focus:** {{focus}}
|
|
6
|
+
- **Documents to produce:** {{documents}}
|
|
7
|
+
- **Output directory:** `{{outputDir}}`
|
|
8
|
+
|
|
9
|
+
## Working Directory
|
|
10
|
+
|
|
11
|
+
`{{workingDirectory}}`
|
|
12
|
+
|
|
13
|
+
## Instructions
|
|
14
|
+
|
|
15
|
+
1. Explore the codebase to understand its structure, technology choices, and patterns
|
|
16
|
+
2. For each document listed above, produce a well-structured Markdown file in `{{outputDir}}/`
|
|
17
|
+
3. Use the document schemas below as a guide for each output file
|
|
18
|
+
|
|
19
|
+
For this scan, only these documents are relevant: **{{documents}}**. Refer only to those schemas below and ignore the rest.
|
|
20
|
+
|
|
21
|
+
### Document Schemas
|
|
22
|
+
|
|
23
|
+
**STACK.md** — Technology stack overview
|
|
24
|
+
- Languages, runtimes, and versions
|
|
25
|
+
- Key frameworks and libraries (with versions where visible)
|
|
26
|
+
- Build tools and bundlers
|
|
27
|
+
- Package manager
|
|
28
|
+
|
|
29
|
+
**INTEGRATIONS.md** — External dependencies and integrations
|
|
30
|
+
- Third-party APIs and services
|
|
31
|
+
- Database systems
|
|
32
|
+
- Authentication providers
|
|
33
|
+
- Infrastructure and deployment platforms
|
|
34
|
+
- Communication services (email, messaging, etc.)
|
|
35
|
+
|
|
36
|
+
**ARCHITECTURE.md** — Architectural patterns and design decisions
|
|
37
|
+
- Overall architecture style (monolith, microservices, monorepo, etc.)
|
|
38
|
+
- Core data flow
|
|
39
|
+
- Key design patterns in use
|
|
40
|
+
- Module/package boundaries
|
|
41
|
+
|
|
42
|
+
**STRUCTURE.md** — Directory and code organization
|
|
43
|
+
- Top-level directory layout with purpose
|
|
44
|
+
- Source code organization
|
|
45
|
+
- Test organization
|
|
46
|
+
- Configuration file locations
|
|
47
|
+
|
|
48
|
+
**CONVENTIONS.md** — Coding conventions and standards
|
|
49
|
+
- Naming conventions (files, functions, variables)
|
|
50
|
+
- Code style and formatting rules
|
|
51
|
+
- Import/export patterns
|
|
52
|
+
- Error handling patterns
|
|
53
|
+
- TypeScript/language-specific conventions
|
|
54
|
+
|
|
55
|
+
**TESTING.md** — Testing patterns and practices
|
|
56
|
+
- Test framework(s) in use
|
|
57
|
+
- Test file naming and location conventions
|
|
58
|
+
- Test helper and fixture patterns
|
|
59
|
+
- Coverage requirements (if any)
|
|
60
|
+
- How to run tests
|
|
61
|
+
|
|
62
|
+
**CONCERNS.md** — Technical debt and risks
|
|
63
|
+
- Known areas of technical debt
|
|
64
|
+
- Fragile or high-risk code areas
|
|
65
|
+
- Missing test coverage
|
|
66
|
+
- Outdated dependencies
|
|
67
|
+
- Performance bottlenecks
|
|
68
|
+
- Security considerations
|
|
69
|
+
|
|
70
|
+
## Rules
|
|
71
|
+
|
|
72
|
+
- Write only the documents listed in **Documents to produce** — do not generate extra files
|
|
73
|
+
- Each document must be a clean, standalone Markdown file starting with a `# Heading`
|
|
74
|
+
- Be factual: report what you observe in the code, not what might be ideal
|
|
75
|
+
- Keep each document focused and scannable — use headers, bullet points, and code snippets
|
|
76
|
+
- Do NOT modify any source files
|
|
77
|
+
- After writing all documents, summarize what was produced (file names and line counts)
|
|
78
|
+
|
|
79
|
+
{{skillActivation}}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# Oneshot Workflow: {{displayName}}
|
|
2
|
+
|
|
3
|
+
You are running a **oneshot** workflow called `{{name}}`. Oneshot workflows are
|
|
4
|
+
prompt-only — there is no STATE.json, no phase tracking, no artifact directory,
|
|
5
|
+
and no resume mechanism. Just execute the instructions below and return.
|
|
6
|
+
|
|
7
|
+
## User Arguments
|
|
8
|
+
|
|
9
|
+
`{{userArgs}}`
|
|
10
|
+
|
|
11
|
+
(If empty, use sensible defaults from the workflow body.)
|
|
12
|
+
|
|
13
|
+
## Workflow Instructions
|
|
14
|
+
|
|
15
|
+
{{body}}
|
|
16
|
+
|
|
17
|
+
## Execution Rules
|
|
18
|
+
|
|
19
|
+
1. **No scaffolding.** Do not create `.gsd/workflows/` directories, STATE.json
|
|
20
|
+
files, or run directories unless the instructions explicitly tell you to
|
|
21
|
+
write a specific artifact.
|
|
22
|
+
2. **No branch switching.** Work on the current branch.
|
|
23
|
+
3. **Be concise.** Oneshot workflows produce a single focused output (a report,
|
|
24
|
+
a summary, a code change, a PR comment) — finish in this turn.
|
|
25
|
+
4. **Ask only when blocked.** If the instructions need information you can't
|
|
26
|
+
discover, ask one clear question. Otherwise proceed.
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cross-platform Python interpreter resolver.
|
|
3
|
+
*
|
|
4
|
+
* Provides utilities to detect the available Python interpreter on the current
|
|
5
|
+
* system and to normalize shell commands that reference `python`/`python3` so
|
|
6
|
+
* that they use whichever interpreter is actually installed.
|
|
7
|
+
*
|
|
8
|
+
* On Windows the canonical names differ (`py -3`, `python`, `python3`), so
|
|
9
|
+
* hard-coded `python3` invocations fail with exit 127. This module detects the
|
|
10
|
+
* working interpreter once (cached for the process lifetime) and rewrites
|
|
11
|
+
* commands accordingly.
|
|
12
|
+
*
|
|
13
|
+
* @module python-resolver
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
import { spawnSync } from "node:child_process";
|
|
17
|
+
|
|
18
|
+
/** Cached result of `detectPythonExecutable`. `undefined` means not yet probed. */
|
|
19
|
+
let cached: string | null | undefined;
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Returns the first working Python invocation on this system, or `null` if no
|
|
23
|
+
* Python interpreter is found.
|
|
24
|
+
*
|
|
25
|
+
* Probe order:
|
|
26
|
+
* - Windows: `py -3` → `python` → `python3`
|
|
27
|
+
* - All other platforms: `python3` → `python`
|
|
28
|
+
*
|
|
29
|
+
* The result is cached for the lifetime of the process to avoid repeated
|
|
30
|
+
* `spawnSync` calls.
|
|
31
|
+
*/
|
|
32
|
+
export function detectPythonExecutable(): string | null {
|
|
33
|
+
if (cached !== undefined) return cached;
|
|
34
|
+
const candidates: string[] = process.platform === "win32"
|
|
35
|
+
? ["py -3", "python", "python3"]
|
|
36
|
+
: ["python3", "python"];
|
|
37
|
+
for (const candidate of candidates) {
|
|
38
|
+
const [bin, ...args] = candidate.split(" ");
|
|
39
|
+
const r = spawnSync(bin, [...args, "--version"], { stdio: "ignore" });
|
|
40
|
+
if (!r.error && r.status === 0) {
|
|
41
|
+
cached = candidate;
|
|
42
|
+
return candidate;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
cached = null;
|
|
46
|
+
return null;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Rewrites a shell command string so that leading `python`/`python3`/`py`
|
|
51
|
+
* tokens at command boundaries are replaced with the interpreter returned by
|
|
52
|
+
* `detectPythonExecutable`.
|
|
53
|
+
*
|
|
54
|
+
* Only tokens at command boundaries (start of string, or after `&&`, `||`,
|
|
55
|
+
* `;`) are rewritten — mid-string occurrences (e.g. file paths containing
|
|
56
|
+
* "python") are left intact.
|
|
57
|
+
*
|
|
58
|
+
* When no Python interpreter is detected, the command is returned unchanged so
|
|
59
|
+
* that the caller receives a meaningful "command not found" error rather than a
|
|
60
|
+
* silent no-op.
|
|
61
|
+
*
|
|
62
|
+
* @param command - The shell command string to normalize.
|
|
63
|
+
* @returns The command with Python interpreter tokens rewritten, or the
|
|
64
|
+
* original command if no rewrite is needed.
|
|
65
|
+
*/
|
|
66
|
+
export function normalizePythonCommand(command: string): string {
|
|
67
|
+
const executable = detectPythonExecutable();
|
|
68
|
+
if (!executable) return command;
|
|
69
|
+
|
|
70
|
+
// Split on common shell separators to handle compound commands.
|
|
71
|
+
// We reconstruct the string preserving the original separators.
|
|
72
|
+
return command.replace(
|
|
73
|
+
/(^\s*|(?:&&|\|\||;)\s*)(?:python3?|py(?:\s+-\d+)?)(?=\s|$)/g,
|
|
74
|
+
(_match, pre: string) => `${pre}${executable}`,
|
|
75
|
+
);
|
|
76
|
+
}
|
|
@@ -16,8 +16,9 @@
|
|
|
16
16
|
import { mkdirSync, writeFileSync, existsSync, readdirSync, statSync } from "node:fs";
|
|
17
17
|
import { join } from "node:path";
|
|
18
18
|
import { stringify } from "yaml";
|
|
19
|
-
import { loadDefinition, substituteParams } from "./definition-loader.js";
|
|
19
|
+
import { loadDefinition, loadDefinitionFromFile, substituteParams } from "./definition-loader.js";
|
|
20
20
|
import { initializeGraph, writeGraph, readGraph } from "./graph.js";
|
|
21
|
+
import { resolvePlugin } from "./workflow-plugins.js";
|
|
21
22
|
import type { WorkflowDefinition } from "./definition-loader.js";
|
|
22
23
|
import type { WorkflowGraph } from "./graph.js";
|
|
23
24
|
|
|
@@ -67,48 +68,81 @@ function deriveStatus(graph: WorkflowGraph): "pending" | "running" | "complete"
|
|
|
67
68
|
|
|
68
69
|
// ─── Public API ──────────────────────────────────────────────────────────
|
|
69
70
|
|
|
71
|
+
/**
|
|
72
|
+
* Create a run directory from an explicit definition file path.
|
|
73
|
+
* Preferred over `createRun` when the caller has already resolved the file
|
|
74
|
+
* (e.g. via the plugin resolver).
|
|
75
|
+
*/
|
|
76
|
+
export function createRunFromDefinition(
|
|
77
|
+
basePath: string,
|
|
78
|
+
defName: string,
|
|
79
|
+
definitionFile: string,
|
|
80
|
+
overrides?: Record<string, string>,
|
|
81
|
+
): string {
|
|
82
|
+
const rawDef = loadDefinitionFromFile(definitionFile);
|
|
83
|
+
const def: WorkflowDefinition = overrides
|
|
84
|
+
? substituteParams(rawDef, overrides)
|
|
85
|
+
: substituteParams(rawDef);
|
|
86
|
+
|
|
87
|
+
const timestamp = makeTimestamp();
|
|
88
|
+
const runDir = join(basePath, ".gsd", RUNS_DIR, defName, timestamp);
|
|
89
|
+
mkdirSync(runDir, { recursive: true });
|
|
90
|
+
|
|
91
|
+
writeFileSync(join(runDir, "DEFINITION.yaml"), stringify(def), "utf-8");
|
|
92
|
+
|
|
93
|
+
const graph = initializeGraph(def);
|
|
94
|
+
writeGraph(runDir, graph);
|
|
95
|
+
|
|
96
|
+
if (overrides && Object.keys(overrides).length > 0) {
|
|
97
|
+
writeFileSync(
|
|
98
|
+
join(runDir, "PARAMS.json"),
|
|
99
|
+
JSON.stringify(overrides, null, 2),
|
|
100
|
+
"utf-8",
|
|
101
|
+
);
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
return runDir;
|
|
105
|
+
}
|
|
106
|
+
|
|
70
107
|
/**
|
|
71
108
|
* Create a new isolated run directory for a workflow definition.
|
|
72
109
|
*
|
|
73
|
-
*
|
|
74
|
-
*
|
|
75
|
-
*
|
|
76
|
-
* 4. Writes frozen DEFINITION.yaml, initialized GRAPH.yaml, and optional PARAMS.json
|
|
110
|
+
* Resolution order:
|
|
111
|
+
* 1. Plugin resolver (project → global → bundled), YAML format only.
|
|
112
|
+
* 2. Legacy `.gsd/workflow-defs/<defName>.yaml`.
|
|
77
113
|
*
|
|
78
|
-
*
|
|
79
|
-
*
|
|
80
|
-
*
|
|
81
|
-
* @
|
|
82
|
-
* @throws Error if the definition file doesn't exist or is invalid
|
|
114
|
+
* Creates `<basePath>/.gsd/workflow-runs/<defName>/<timestamp>/` containing
|
|
115
|
+
* DEFINITION.yaml (frozen), GRAPH.yaml (initialized), and optional PARAMS.json.
|
|
116
|
+
*
|
|
117
|
+
* @throws Error if no matching definition is found anywhere.
|
|
83
118
|
*/
|
|
84
119
|
export function createRun(
|
|
85
120
|
basePath: string,
|
|
86
121
|
defName: string,
|
|
87
122
|
overrides?: Record<string, string>,
|
|
88
123
|
): string {
|
|
89
|
-
|
|
124
|
+
// Try the unified plugin resolver first — honors project/global overrides.
|
|
125
|
+
const plugin = resolvePlugin(basePath, defName);
|
|
126
|
+
if (plugin && plugin.format === "yaml") {
|
|
127
|
+
return createRunFromDefinition(basePath, defName, plugin.path, overrides);
|
|
128
|
+
}
|
|
90
129
|
|
|
91
|
-
//
|
|
130
|
+
// Fall back to legacy `.gsd/workflow-defs/<defName>.yaml`.
|
|
131
|
+
const defsDir = join(basePath, ".gsd", DEFS_DIR);
|
|
92
132
|
const rawDef = loadDefinition(defsDir, defName);
|
|
93
|
-
|
|
94
|
-
// Apply parameter substitution if overrides provided
|
|
95
133
|
const def: WorkflowDefinition = overrides
|
|
96
134
|
? substituteParams(rawDef, overrides)
|
|
97
|
-
: substituteParams(rawDef);
|
|
135
|
+
: substituteParams(rawDef);
|
|
98
136
|
|
|
99
|
-
// Create the run directory
|
|
100
137
|
const timestamp = makeTimestamp();
|
|
101
138
|
const runDir = join(basePath, ".gsd", RUNS_DIR, defName, timestamp);
|
|
102
139
|
mkdirSync(runDir, { recursive: true });
|
|
103
140
|
|
|
104
|
-
// Freeze the definition as DEFINITION.yaml
|
|
105
141
|
writeFileSync(join(runDir, "DEFINITION.yaml"), stringify(def), "utf-8");
|
|
106
142
|
|
|
107
|
-
// Initialize and write GRAPH.yaml
|
|
108
143
|
const graph = initializeGraph(def);
|
|
109
144
|
writeGraph(runDir, graph);
|
|
110
145
|
|
|
111
|
-
// Write PARAMS.json if overrides were provided
|
|
112
146
|
if (overrides && Object.keys(overrides).length > 0) {
|
|
113
147
|
writeFileSync(
|
|
114
148
|
join(runDir, "PARAMS.json"),
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
// GSD — Setup catalog (single source of truth for onboarding steps + provider sub-views)
|
|
2
|
+
//
|
|
3
|
+
// Re-exports filtered views over PROVIDER_REGISTRY (key-manager.ts) and owns the
|
|
4
|
+
// canonical ONBOARDING_STEPS list. Consumers (CLI wizard, /gsd setup hub,
|
|
5
|
+
// onboarding handler, web alignment) all read from here so adding a step or
|
|
6
|
+
// provider lands in one place. Keep this module thin: no behavior beyond
|
|
7
|
+
// filters + lookup helpers, so it stays cycle-safe even though it depends on
|
|
8
|
+
// key-manager for the provider catalog.
|
|
9
|
+
|
|
10
|
+
import { PROVIDER_REGISTRY, type ProviderInfo } from "./key-manager.js"
|
|
11
|
+
|
|
12
|
+
export type OnboardingStepId =
|
|
13
|
+
| "llm"
|
|
14
|
+
| "model"
|
|
15
|
+
| "search"
|
|
16
|
+
| "remote"
|
|
17
|
+
| "tool-keys"
|
|
18
|
+
| "prefs"
|
|
19
|
+
| "skills"
|
|
20
|
+
| "doctor"
|
|
21
|
+
| "project"
|
|
22
|
+
|
|
23
|
+
export interface OnboardingStepDef {
|
|
24
|
+
id: OnboardingStepId
|
|
25
|
+
label: string
|
|
26
|
+
/** Required steps gate the "complete" flag. Skipped required steps mark the wizard incomplete. */
|
|
27
|
+
required: boolean
|
|
28
|
+
/** Short description shown in /gsd setup status hub. */
|
|
29
|
+
hint: string
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Canonical ordered list of onboarding steps.
|
|
34
|
+
*
|
|
35
|
+
* To add a new step:
|
|
36
|
+
* 1. Append here (or insert at the right position).
|
|
37
|
+
* 2. Bump FLOW_VERSION in onboarding-state.ts so existing users get re-prompted.
|
|
38
|
+
* 3. Wire its CLI runner in src/onboarding.ts (and handlers/onboarding.ts for --step).
|
|
39
|
+
*/
|
|
40
|
+
export const ONBOARDING_STEPS: readonly OnboardingStepDef[] = [
|
|
41
|
+
{ id: "llm", label: "LLM provider & auth", required: true, hint: "Sign in or paste an API key" },
|
|
42
|
+
{ id: "model", label: "Default model", required: false, hint: "Pick a default model for the chosen provider" },
|
|
43
|
+
{ id: "search", label: "Web search provider", required: false, hint: "Brave, Tavily, or Anthropic built-in" },
|
|
44
|
+
{ id: "remote", label: "Remote questions", required: false, hint: "Discord / Slack / Telegram notifications" },
|
|
45
|
+
{ id: "tool-keys", label: "Tool API keys", required: false, hint: "Context7, Jina, Groq voice, etc." },
|
|
46
|
+
{ id: "prefs", label: "Global preferences", required: false, hint: "Mode, profile, notifications" },
|
|
47
|
+
{ id: "skills", label: "Skills install", required: false, hint: "Browse and install skill plugins" },
|
|
48
|
+
{ id: "doctor", label: "Validate setup", required: false, hint: "Run provider doctor checks" },
|
|
49
|
+
{ id: "project", label: "Project init", required: false, hint: "Bootstrap .gsd/ in this repo" },
|
|
50
|
+
]
|
|
51
|
+
|
|
52
|
+
const STEP_INDEX = new Map(ONBOARDING_STEPS.map((s, i) => [s.id, i]))
|
|
53
|
+
|
|
54
|
+
export function getStep(id: string): OnboardingStepDef | undefined {
|
|
55
|
+
const idx = STEP_INDEX.get(id as OnboardingStepId)
|
|
56
|
+
return idx === undefined ? undefined : ONBOARDING_STEPS[idx]
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
export function isValidStepId(id: string): id is OnboardingStepId {
|
|
60
|
+
return STEP_INDEX.has(id as OnboardingStepId)
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* Given a possibly-stale resume point, return the nearest next step that is
|
|
65
|
+
* still defined in the catalog. Falls back to the first step.
|
|
66
|
+
*/
|
|
67
|
+
export function nearestResumeStep(lastResumePoint: string | null, completedSteps: string[]): OnboardingStepId {
|
|
68
|
+
const completed = new Set(completedSteps)
|
|
69
|
+
// First incomplete step at or after the lastResumePoint
|
|
70
|
+
let startIdx = 0
|
|
71
|
+
if (lastResumePoint && STEP_INDEX.has(lastResumePoint as OnboardingStepId)) {
|
|
72
|
+
startIdx = STEP_INDEX.get(lastResumePoint as OnboardingStepId) ?? 0
|
|
73
|
+
}
|
|
74
|
+
for (let i = startIdx; i < ONBOARDING_STEPS.length; i++) {
|
|
75
|
+
if (!completed.has(ONBOARDING_STEPS[i].id)) return ONBOARDING_STEPS[i].id
|
|
76
|
+
}
|
|
77
|
+
// Everything from the resume point is complete — try from the start
|
|
78
|
+
for (const step of ONBOARDING_STEPS) {
|
|
79
|
+
if (!completed.has(step.id)) return step.id
|
|
80
|
+
}
|
|
81
|
+
return ONBOARDING_STEPS[0].id
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
// ─── Provider catalog views ───────────────────────────────────────────────────
|
|
85
|
+
|
|
86
|
+
export function getLlmProviders(): ProviderInfo[] {
|
|
87
|
+
return PROVIDER_REGISTRY.filter(p => p.category === "llm")
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
export function getToolProviders(): ProviderInfo[] {
|
|
91
|
+
return PROVIDER_REGISTRY.filter(p => p.category === "tool")
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
export function getSearchProviders(): ProviderInfo[] {
|
|
95
|
+
return PROVIDER_REGISTRY.filter(p => p.category === "search")
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
export function getRemoteProviders(): ProviderInfo[] {
|
|
99
|
+
return PROVIDER_REGISTRY.filter(p => p.category === "remote")
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/** Provider IDs that count as "the user has an LLM configured" for shouldRunOnboarding. */
|
|
103
|
+
export function getLlmProviderIds(): string[] {
|
|
104
|
+
return Array.from(new Set([...getLlmProviders().map(p => p.id), "claude-code"]))
|
|
105
|
+
}
|
|
@@ -44,6 +44,8 @@ import { existsSync, readdirSync, readFileSync } from 'node:fs';
|
|
|
44
44
|
import { debugCount, debugTime } from './debug-logger.js';
|
|
45
45
|
import { logWarning, logError } from './workflow-logger.js';
|
|
46
46
|
import { extractVerdict } from './verdict-parser.js';
|
|
47
|
+
import { loadEffectiveGSDPreferences } from './preferences.js';
|
|
48
|
+
import { detectPendingEscalation } from './escalation.js';
|
|
47
49
|
|
|
48
50
|
import {
|
|
49
51
|
isDbAvailable,
|
|
@@ -60,6 +62,7 @@ import {
|
|
|
60
62
|
updateSliceStatus,
|
|
61
63
|
updateTaskStatus,
|
|
62
64
|
getPendingGateCountForTurn,
|
|
65
|
+
autoHealSketchFlags,
|
|
63
66
|
type MilestoneRow,
|
|
64
67
|
type SliceRow,
|
|
65
68
|
type TaskRow,
|
|
@@ -849,7 +852,15 @@ export async function deriveStateFromDb(basePath: string): Promise<GSDState> {
|
|
|
849
852
|
return handleAllSlicesDone(basePath, activeMilestone, registry, requirements, milestoneProgress, sliceProgress);
|
|
850
853
|
}
|
|
851
854
|
|
|
852
|
-
|
|
855
|
+
// ADR-011 auto-heal: if a slice has a PLAN on disk but is still flagged is_sketch=1
|
|
856
|
+
// (e.g. a crash between plan-slice write and the sketch flip), reconcile before
|
|
857
|
+
// running phase derivation so the flag doesn't misroute state.
|
|
858
|
+
autoHealSketchFlags(activeMilestone.id, (sid) =>
|
|
859
|
+
!!resolveSliceFile(basePath, activeMilestone.id, sid, "PLAN"),
|
|
860
|
+
);
|
|
861
|
+
// Re-read slices after auto-heal so downstream reads see fresh is_sketch values.
|
|
862
|
+
const healedSlices = getMilestoneSlices(activeMilestone.id);
|
|
863
|
+
const activeSliceContext = resolveSliceDependencies(healedSlices);
|
|
853
864
|
if (!activeSliceContext.activeSlice) {
|
|
854
865
|
// If locked slice wasn't found, it returns null but logs warning, we need to return 'blocked'
|
|
855
866
|
if (process.env.GSD_SLICE_LOCK) {
|
|
@@ -869,10 +880,24 @@ export async function deriveStateFromDb(basePath: string): Promise<GSDState> {
|
|
|
869
880
|
progress: { milestones: milestoneProgress, slices: sliceProgress },
|
|
870
881
|
};
|
|
871
882
|
}
|
|
872
|
-
const { activeSlice } = activeSliceContext;
|
|
883
|
+
const { activeSlice, activeSliceRow } = activeSliceContext;
|
|
873
884
|
|
|
874
885
|
const planFile = resolveSliceFile(basePath, activeMilestone.id, activeSlice.id, "PLAN");
|
|
875
886
|
if (!planFile) {
|
|
887
|
+
// ADR-011: sketch slices with progressive_planning enabled enter the
|
|
888
|
+
// `refining` phase — a refine-slice unit expands the sketch into a full plan
|
|
889
|
+
// before execution. When the flag is off, sketches are indistinguishable
|
|
890
|
+
// from a missing plan and fall through to the normal `planning` phase.
|
|
891
|
+
const progressive = loadEffectiveGSDPreferences()?.preferences?.phases?.progressive_planning === true;
|
|
892
|
+
if (progressive && activeSliceRow?.is_sketch === 1) {
|
|
893
|
+
return {
|
|
894
|
+
activeMilestone, activeSlice, activeTask: null,
|
|
895
|
+
phase: 'refining', recentDecisions: [], blockers: [],
|
|
896
|
+
nextAction: `Refine sketch slice ${activeSlice.id} (${activeSlice.title}) using prior slice context.`,
|
|
897
|
+
registry, requirements,
|
|
898
|
+
progress: { milestones: milestoneProgress, slices: sliceProgress },
|
|
899
|
+
};
|
|
900
|
+
}
|
|
876
901
|
return {
|
|
877
902
|
activeMilestone, activeSlice, activeTask: null,
|
|
878
903
|
phase: 'planning', recentDecisions: [], blockers: [],
|
|
@@ -965,6 +990,29 @@ export async function deriveStateFromDb(basePath: string): Promise<GSDState> {
|
|
|
965
990
|
}
|
|
966
991
|
}
|
|
967
992
|
|
|
993
|
+
// ADR-011 Phase 2: pause-on-escalation takes precedence over dispatching the
|
|
994
|
+
// next task. `awaiting_review` tasks (continueWithDefault=true) are NOT
|
|
995
|
+
// surfaced here — they let the loop continue.
|
|
996
|
+
//
|
|
997
|
+
// We do NOT gate this on `phases.mid_execution_escalation` — creation of
|
|
998
|
+
// new escalations is gated at the write site (tools/complete-task.ts:315),
|
|
999
|
+
// but any escalation_pending row already persisted in the DB must be
|
|
1000
|
+
// honored even if the user later toggles the flag off. Otherwise those
|
|
1001
|
+
// rows would silently orphan, the loop would advance past the paused task,
|
|
1002
|
+
// and the user's prior resolution never lands.
|
|
1003
|
+
const escalatingTaskId = detectPendingEscalation(tasks, basePath);
|
|
1004
|
+
if (escalatingTaskId) {
|
|
1005
|
+
return {
|
|
1006
|
+
activeMilestone, activeSlice, activeTask,
|
|
1007
|
+
phase: 'escalating-task', recentDecisions: [],
|
|
1008
|
+
blockers: [`Task ${escalatingTaskId} requires a user decision before the loop can proceed`],
|
|
1009
|
+
nextAction: `Run /gsd escalate show ${escalatingTaskId} to review, then /gsd escalate resolve ${escalatingTaskId} <choice> to proceed.`,
|
|
1010
|
+
activeWorkspace: undefined,
|
|
1011
|
+
registry, requirements,
|
|
1012
|
+
progress: { milestones: milestoneProgress, slices: sliceProgress, tasks: taskProgress },
|
|
1013
|
+
};
|
|
1014
|
+
}
|
|
1015
|
+
|
|
968
1016
|
if (!blockerTaskId) {
|
|
969
1017
|
const isTriggered = checkReplanTrigger(basePath, activeMilestone.id, activeSlice.id);
|
|
970
1018
|
if (isTriggered) {
|
|
@@ -44,19 +44,19 @@ uok:
|
|
|
44
44
|
legacy_fallback:
|
|
45
45
|
enabled: false
|
|
46
46
|
gates:
|
|
47
|
-
enabled:
|
|
47
|
+
enabled: true
|
|
48
48
|
model_policy:
|
|
49
|
-
enabled:
|
|
49
|
+
enabled: true
|
|
50
50
|
execution_graph:
|
|
51
|
-
enabled:
|
|
51
|
+
enabled: true
|
|
52
52
|
gitops:
|
|
53
|
-
enabled:
|
|
54
|
-
turn_action:
|
|
53
|
+
enabled: true
|
|
54
|
+
turn_action: commit
|
|
55
55
|
turn_push: false
|
|
56
56
|
audit_unified:
|
|
57
|
-
enabled:
|
|
57
|
+
enabled: true
|
|
58
58
|
plan_v2:
|
|
59
|
-
enabled:
|
|
59
|
+
enabled: true
|
|
60
60
|
auto_visualize:
|
|
61
61
|
auto_report:
|
|
62
62
|
parallel:
|
|
@@ -2,8 +2,7 @@
|
|
|
2
2
|
* agent-end-retry.test.ts — Regression checks for the agent_end model.
|
|
3
3
|
*
|
|
4
4
|
* The per-unit one-shot resolve function lives at module level in auto-loop.ts
|
|
5
|
-
* (_currentResolve).
|
|
6
|
-
* resolveAgentEnd().
|
|
5
|
+
* (_currentResolve). agent_end is handled via resolveAgentEnd().
|
|
7
6
|
*/
|
|
8
7
|
|
|
9
8
|
import test from "node:test";
|
|
@@ -62,38 +61,6 @@ test("legacy pendingAgentEndRetry state is gone", () => {
|
|
|
62
61
|
);
|
|
63
62
|
});
|
|
64
63
|
|
|
65
|
-
test("handleAgentEnd is a thin compatibility wrapper", () => {
|
|
66
|
-
const source = getAutoTsSource();
|
|
67
|
-
const fnIdx = source.indexOf("export async function handleAgentEnd");
|
|
68
|
-
assert.ok(fnIdx > -1, "handleAgentEnd must exist in auto.ts");
|
|
69
|
-
const fnBlock = source.slice(fnIdx, source.indexOf("\n// ─── ", fnIdx + 100));
|
|
70
|
-
|
|
71
|
-
assert.ok(
|
|
72
|
-
fnBlock.includes("resolveAgentEnd("),
|
|
73
|
-
"handleAgentEnd must delegate to resolveAgentEnd",
|
|
74
|
-
);
|
|
75
|
-
assert.ok(
|
|
76
|
-
!fnBlock.includes("pendingAgentEndRetry"),
|
|
77
|
-
"handleAgentEnd must not use legacy retry state",
|
|
78
|
-
);
|
|
79
|
-
assert.ok(
|
|
80
|
-
!fnBlock.includes("dispatchNextUnit"),
|
|
81
|
-
"handleAgentEnd must not dispatch recursively",
|
|
82
|
-
);
|
|
83
|
-
});
|
|
84
|
-
|
|
85
|
-
test("handleAgentEnd early return calls resolveAgentEndCancelled", () => {
|
|
86
|
-
const source = getAutoTsSource();
|
|
87
|
-
const fnIdx = source.indexOf("export async function handleAgentEnd");
|
|
88
|
-
assert.ok(fnIdx > -1, "handleAgentEnd must exist in auto.ts");
|
|
89
|
-
const fnBlock = source.slice(fnIdx, source.indexOf("\n// ─── ", fnIdx + 100));
|
|
90
|
-
|
|
91
|
-
assert.ok(
|
|
92
|
-
fnBlock.includes("resolveAgentEndCancelled()"),
|
|
93
|
-
"handleAgentEnd must call resolveAgentEndCancelled on early return to prevent orphaned promises",
|
|
94
|
-
);
|
|
95
|
-
});
|
|
96
|
-
|
|
97
64
|
test("pauseAuto calls resolveAgentEndCancelled to unblock the loop", () => {
|
|
98
65
|
const source = getAutoTsSource();
|
|
99
66
|
const fnIdx = source.indexOf("export async function pauseAuto");
|
|
@@ -46,6 +46,8 @@ function makeSliceRow(overrides?: Partial<SliceRow>): SliceRow {
|
|
|
46
46
|
observability_impact: '',
|
|
47
47
|
sequence: 4,
|
|
48
48
|
replan_triggered_at: null,
|
|
49
|
+
is_sketch: 0,
|
|
50
|
+
sketch_scope: '',
|
|
49
51
|
...overrides,
|
|
50
52
|
};
|
|
51
53
|
}
|
|
@@ -77,6 +79,11 @@ function makeTaskRow(overrides?: Partial<TaskRow>): TaskRow {
|
|
|
77
79
|
expected_output: [],
|
|
78
80
|
observability_impact: '',
|
|
79
81
|
sequence: 0,
|
|
82
|
+
blocker_source: '',
|
|
83
|
+
escalation_pending: 0,
|
|
84
|
+
escalation_awaiting_review: 0,
|
|
85
|
+
escalation_artifact_path: null,
|
|
86
|
+
escalation_override_applied_at: null,
|
|
80
87
|
...overrides,
|
|
81
88
|
};
|
|
82
89
|
}
|
|
@@ -3,6 +3,7 @@ import assert from "node:assert/strict";
|
|
|
3
3
|
import { mkdirSync, readFileSync, rmSync, writeFileSync } from "node:fs";
|
|
4
4
|
import { join } from "node:path";
|
|
5
5
|
import { tmpdir } from "node:os";
|
|
6
|
+
import { execFileSync } from "node:child_process";
|
|
6
7
|
|
|
7
8
|
import {
|
|
8
9
|
unitVerb,
|
|
@@ -15,6 +16,10 @@ import {
|
|
|
15
16
|
getWidgetMode,
|
|
16
17
|
cycleWidgetMode,
|
|
17
18
|
_resetWidgetModeForTests,
|
|
19
|
+
_resetLastCommitCacheForTests,
|
|
20
|
+
_refreshLastCommitForTests,
|
|
21
|
+
_getLastCommitForTests,
|
|
22
|
+
_getLastCommitFetchedAtForTests,
|
|
18
23
|
} from "../auto-dashboard.ts";
|
|
19
24
|
|
|
20
25
|
const autoSource = readFileSync(join(process.cwd(), "src", "resources", "extensions", "gsd", "auto.ts"), "utf-8");
|
|
@@ -215,6 +220,50 @@ test("auto progress widget renders RTK savings under the footer stats line", ()
|
|
|
215
220
|
assert.match(dashboardSource, /lines\.push\(rightAlign\("", theme\.fg\("dim", cachedRtkLabel\), width\)\);/);
|
|
216
221
|
});
|
|
217
222
|
|
|
223
|
+
test("last commit refresh backs off cleanly when base path is not a git repo", (t) => {
|
|
224
|
+
const dir = makeTempDir("non-git");
|
|
225
|
+
mkdirSync(dir, { recursive: true });
|
|
226
|
+
|
|
227
|
+
t.after(() => {
|
|
228
|
+
cleanup(dir);
|
|
229
|
+
_resetLastCommitCacheForTests();
|
|
230
|
+
});
|
|
231
|
+
|
|
232
|
+
_resetLastCommitCacheForTests();
|
|
233
|
+
_refreshLastCommitForTests(dir);
|
|
234
|
+
|
|
235
|
+
assert.equal(_getLastCommitForTests(dir), null);
|
|
236
|
+
assert.ok(
|
|
237
|
+
_getLastCommitFetchedAtForTests() > 0,
|
|
238
|
+
"non-git refresh should still advance fetchedAt to avoid render-loop retries",
|
|
239
|
+
);
|
|
240
|
+
});
|
|
241
|
+
|
|
242
|
+
test("last commit refresh still returns commit info for a valid git repo", (t) => {
|
|
243
|
+
const dir = makeTempDir("git");
|
|
244
|
+
mkdirSync(dir, { recursive: true });
|
|
245
|
+
|
|
246
|
+
execFileSync("git", ["init", "-b", "main"], { cwd: dir, stdio: "pipe" });
|
|
247
|
+
execFileSync("git", ["config", "user.name", "GSD Test"], { cwd: dir, stdio: "pipe" });
|
|
248
|
+
execFileSync("git", ["config", "user.email", "gsd@example.com"], { cwd: dir, stdio: "pipe" });
|
|
249
|
+
writeFileSync(join(dir, "README.md"), "hello\n", "utf-8");
|
|
250
|
+
execFileSync("git", ["add", "README.md"], { cwd: dir, stdio: "pipe" });
|
|
251
|
+
execFileSync("git", ["commit", "-m", "test: seed dashboard repo"], { cwd: dir, stdio: "pipe" });
|
|
252
|
+
|
|
253
|
+
t.after(() => {
|
|
254
|
+
cleanup(dir);
|
|
255
|
+
_resetLastCommitCacheForTests();
|
|
256
|
+
});
|
|
257
|
+
|
|
258
|
+
_resetLastCommitCacheForTests();
|
|
259
|
+
_refreshLastCommitForTests(dir);
|
|
260
|
+
|
|
261
|
+
const lastCommit = _getLastCommitForTests(dir);
|
|
262
|
+
assert.ok(lastCommit, "git repo should produce last commit metadata");
|
|
263
|
+
assert.match(lastCommit!.message, /test: seed dashboard repo/);
|
|
264
|
+
assert.ok(lastCommit!.timeAgo.length > 0, "relative time should be populated");
|
|
265
|
+
});
|
|
266
|
+
|
|
218
267
|
// ─── extractUatSliceId ───────────────────────────────────────────────────
|
|
219
268
|
|
|
220
269
|
test("extractUatSliceId extracts slice ID from M001/S01 format", () => {
|