gsd-pi 2.76.0-dev.fe143342a → 2.77.0-dev.1d17f366c
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 +17 -35
- package/dist/claude-cli-check.js +32 -3
- package/dist/cli-web-branch.d.ts +1 -0
- package/dist/cli-web-branch.js +3 -0
- package/dist/cli.js +38 -2
- package/dist/extension-discovery.d.ts +6 -0
- package/dist/extension-discovery.js +37 -0
- package/dist/extension-registry.d.ts +3 -0
- package/dist/extension-sort.d.ts +18 -0
- package/dist/extension-sort.js +114 -0
- package/dist/extension-validator.d.ts +47 -0
- package/dist/extension-validator.js +127 -0
- package/dist/loader.js +35 -7
- package/dist/onboarding.js +45 -0
- package/dist/provider-migrations.d.ts +18 -0
- package/dist/provider-migrations.js +14 -0
- package/dist/resources/extensions/claude-code-cli/readiness.js +4 -3
- package/dist/resources/extensions/claude-code-cli/stream-adapter.js +78 -59
- package/dist/resources/extensions/cmux/index.js +20 -0
- package/dist/resources/extensions/github-sync/templates.js +103 -0
- package/dist/resources/extensions/google-search/extension-manifest.json +5 -4
- package/dist/resources/extensions/google-search/index.js +3 -375
- package/dist/resources/extensions/gsd/abandon-detect.js +44 -0
- package/dist/resources/extensions/gsd/auto/loop.js +90 -2
- package/dist/resources/extensions/gsd/auto/phases.js +95 -21
- package/dist/resources/extensions/gsd/auto/resolve.js +24 -0
- package/dist/resources/extensions/gsd/auto/run-unit.js +48 -4
- package/dist/resources/extensions/gsd/auto/session.js +18 -1
- package/dist/resources/extensions/gsd/auto/turn-epoch.js +95 -0
- package/dist/resources/extensions/gsd/auto-dispatch.js +115 -17
- package/dist/resources/extensions/gsd/auto-loop.js +1 -1
- package/dist/resources/extensions/gsd/auto-model-selection.js +1 -1
- package/dist/resources/extensions/gsd/auto-post-unit.js +90 -2
- package/dist/resources/extensions/gsd/auto-prompts.js +14 -0
- package/dist/resources/extensions/gsd/auto-recovery.js +46 -1
- package/dist/resources/extensions/gsd/auto-start.js +45 -39
- package/dist/resources/extensions/gsd/auto-timeout-recovery.js +11 -5
- package/dist/resources/extensions/gsd/auto-unit-closeout.js +11 -2
- package/dist/resources/extensions/gsd/auto-worktree.js +109 -61
- package/dist/resources/extensions/gsd/auto.js +97 -31
- package/dist/resources/extensions/gsd/bootstrap/agent-end-recovery.js +27 -1
- package/dist/resources/extensions/gsd/bootstrap/provider-error-resume.js +4 -2
- package/dist/resources/extensions/gsd/bootstrap/register-extension.js +11 -0
- package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +17 -6
- package/dist/resources/extensions/gsd/bootstrap/system-context.js +11 -6
- package/dist/resources/extensions/gsd/bootstrap/write-gate.js +34 -2
- package/dist/resources/extensions/gsd/clean-root-preflight.js +93 -0
- package/dist/resources/extensions/gsd/commands/handlers/workflow.js +31 -4
- package/dist/resources/extensions/gsd/commands-cmux.js +9 -6
- package/dist/resources/extensions/gsd/commands-extensions.js +634 -43
- package/dist/resources/extensions/gsd/commands-prefs-wizard.js +968 -23
- package/dist/resources/extensions/gsd/dispatch-guard.js +29 -3
- package/dist/resources/extensions/gsd/file-lock.js +49 -9
- package/dist/resources/extensions/gsd/git-service.js +1 -0
- package/dist/resources/extensions/gsd/gitignore.js +2 -0
- package/dist/resources/extensions/gsd/gsd-db.js +90 -30
- package/dist/resources/extensions/gsd/guided-flow-queue.js +4 -1
- package/dist/resources/extensions/gsd/guided-flow.js +212 -9
- package/dist/resources/extensions/gsd/health-widget.js +4 -1
- package/dist/resources/extensions/gsd/journal.js +17 -2
- package/dist/resources/extensions/gsd/key-manager.js +22 -0
- package/dist/resources/extensions/gsd/milestone-actions.js +15 -0
- package/dist/resources/extensions/gsd/milestone-summary-classifier.js +37 -0
- package/dist/resources/extensions/gsd/model-router.js +36 -3
- package/dist/resources/extensions/gsd/notifications.js +30 -16
- package/dist/resources/extensions/gsd/pre-execution-checks.js +31 -6
- package/dist/resources/extensions/gsd/prompts/discuss-headless.md +29 -2
- package/dist/resources/extensions/gsd/prompts/discuss.md +29 -2
- package/dist/resources/extensions/gsd/prompts/doctor-heal.md +5 -4
- package/dist/resources/extensions/gsd/prompts/parallel-research-slices.md +5 -2
- package/dist/resources/extensions/gsd/prompts/system.md +1 -0
- package/dist/resources/extensions/gsd/reports.js +5 -4
- package/dist/resources/extensions/gsd/safety/evidence-collector.js +96 -0
- package/dist/resources/extensions/gsd/safety/file-change-validator.js +12 -4
- package/dist/resources/extensions/gsd/safety/safety-harness.js +5 -1
- package/dist/resources/extensions/gsd/state-transition-matrix.js +118 -0
- package/dist/resources/extensions/gsd/state.js +25 -25
- package/dist/resources/extensions/gsd/token-counter.js +22 -5
- package/dist/resources/extensions/gsd/tools/complete-milestone.js +16 -10
- package/dist/resources/extensions/gsd/tools/complete-slice.js +21 -0
- package/dist/resources/extensions/gsd/tools/complete-task.js +31 -0
- package/dist/resources/extensions/gsd/uok/audit.js +18 -2
- package/dist/resources/extensions/gsd/uok/dispatch-envelope.js +33 -0
- package/dist/resources/extensions/gsd/uok/execution-graph.js +10 -0
- package/dist/resources/extensions/gsd/uok/gitops.js +2 -1
- package/dist/resources/extensions/gsd/uok/loop-adapter.js +37 -10
- package/dist/resources/extensions/gsd/uok/parity-report.js +58 -0
- package/dist/resources/extensions/gsd/uok/plan-v2.js +30 -7
- package/dist/resources/extensions/gsd/uok/writer.js +82 -0
- package/dist/resources/extensions/gsd/workflow-logger.js +10 -2
- package/dist/resources/extensions/gsd/worktree-manager.js +1 -0
- package/dist/resources/extensions/gsd/worktree-resolver.js +50 -10
- package/dist/resources/extensions/mcp-client/auth.js +10 -1
- package/dist/resources/extensions/mcp-client/index.js +118 -9
- package/dist/resources/extensions/shared/cmux-events.js +12 -0
- package/dist/resources/extensions/shared/rtk-session-stats.js +1 -2
- package/dist/resources/skills/create-skill/SKILL.md +2 -2
- package/dist/resources/skills/create-skill/references/gsd-skill-ecosystem.md +4 -4
- package/dist/resources/skills/create-skill/workflows/audit-skill.md +4 -4
- package/dist/resources/skills/create-skill/workflows/create-new-skill.md +5 -5
- package/dist/resources/skills/verify-before-complete/SKILL.md +2 -1
- package/dist/resources/skills/write-docs/SKILL.md +2 -1
- package/dist/tsconfig.extensions.tsbuildinfo +1 -1
- package/dist/web/standalone/.next/BUILD_ID +1 -1
- package/dist/web/standalone/.next/app-path-routes-manifest.json +9 -9
- package/dist/web/standalone/.next/build-manifest.json +3 -3
- package/dist/web/standalone/.next/prerender-manifest.json +3 -3
- package/dist/web/standalone/.next/react-loadable-manifest.json +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.html +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.html +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/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 +1 -1
- 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 +1 -1
- 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 +1 -1
- 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 +1 -1
- 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 +1 -1
- 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/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 +1 -1
- package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.segments/_index.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app-paths-manifest.json +9 -9
- package/dist/web/standalone/.next/server/chunks/1926.js +1 -0
- package/dist/web/standalone/.next/server/chunks/6897.js +2 -2
- package/dist/web/standalone/.next/server/middleware-build-manifest.js +1 -1
- package/dist/web/standalone/.next/server/middleware-manifest.json +5 -5
- package/dist/web/standalone/.next/server/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/server/server-reference-manifest.json +1 -1
- package/dist/web/standalone/.next/static/chunks/2826.e9f5195e91f9cad2.js +11 -0
- package/dist/web/standalone/.next/static/chunks/{webpack-5fc74f13a25fa1bb.js → webpack-2e68521d7c82f7c2.js} +1 -1
- package/dist/welcome-screen.js +6 -1
- package/dist/wizard.js +2 -0
- package/package.json +16 -14
- package/packages/daemon/package.json +2 -2
- package/packages/mcp-server/README.md +3 -3
- package/packages/mcp-server/dist/env-writer.d.ts +1 -0
- package/packages/mcp-server/dist/env-writer.d.ts.map +1 -1
- package/packages/mcp-server/dist/env-writer.js +74 -6
- package/packages/mcp-server/dist/env-writer.js.map +1 -1
- package/packages/mcp-server/dist/remote-questions.d.ts +45 -0
- package/packages/mcp-server/dist/remote-questions.d.ts.map +1 -0
- package/packages/mcp-server/dist/remote-questions.js +732 -0
- package/packages/mcp-server/dist/remote-questions.js.map +1 -0
- package/packages/mcp-server/dist/server.d.ts +7 -0
- package/packages/mcp-server/dist/server.d.ts.map +1 -1
- package/packages/mcp-server/dist/server.js +95 -10
- package/packages/mcp-server/dist/server.js.map +1 -1
- package/packages/mcp-server/dist/session-manager.d.ts +14 -0
- package/packages/mcp-server/dist/session-manager.d.ts.map +1 -1
- package/packages/mcp-server/dist/session-manager.js +49 -1
- package/packages/mcp-server/dist/session-manager.js.map +1 -1
- package/packages/mcp-server/dist/workflow-tools.d.ts.map +1 -1
- package/packages/mcp-server/dist/workflow-tools.js +15 -6
- package/packages/mcp-server/dist/workflow-tools.js.map +1 -1
- package/packages/mcp-server/package.json +9 -3
- package/packages/mcp-server/src/env-writer.test.ts +79 -1
- package/packages/mcp-server/src/env-writer.ts +76 -6
- package/packages/mcp-server/src/mcp-server.test.ts +67 -0
- package/packages/mcp-server/src/readers/readers.test.ts +5 -1
- package/packages/mcp-server/src/remote-questions.test.ts +294 -0
- package/packages/mcp-server/src/remote-questions.ts +916 -0
- package/packages/mcp-server/src/server.ts +118 -16
- package/packages/mcp-server/src/session-manager.ts +43 -1
- package/packages/mcp-server/src/workflow-tools.test.ts +44 -0
- package/packages/mcp-server/src/workflow-tools.ts +19 -6
- package/packages/mcp-server/tsconfig.test.json +19 -0
- package/packages/mcp-server/tsconfig.tsbuildinfo +1 -1
- package/packages/native/package.json +6 -1
- package/packages/native/src/__tests__/clipboard.test.mjs +69 -23
- package/packages/native/tsconfig.tsbuildinfo +1 -1
- package/packages/pi-agent-core/package.json +6 -1
- package/packages/pi-agent-core/src/agent-loop.test.ts +220 -15
- package/packages/pi-ai/dist/models/custom.d.ts +38 -0
- package/packages/pi-ai/dist/models/custom.d.ts.map +1 -1
- package/packages/pi-ai/dist/models/custom.js +41 -0
- package/packages/pi-ai/dist/models/custom.js.map +1 -1
- package/packages/pi-ai/dist/providers/anthropic-auth.test.js +1 -1
- package/packages/pi-ai/dist/providers/anthropic-auth.test.js.map +1 -1
- package/packages/pi-ai/dist/providers/anthropic-shared.d.ts.map +1 -1
- package/packages/pi-ai/dist/providers/anthropic-shared.js +27 -4
- package/packages/pi-ai/dist/providers/anthropic-shared.js.map +1 -1
- package/packages/pi-ai/dist/providers/anthropic.d.ts.map +1 -1
- package/packages/pi-ai/dist/providers/anthropic.js +8 -3
- package/packages/pi-ai/dist/providers/anthropic.js.map +1 -1
- package/packages/pi-ai/dist/providers/minimax-tool-name.test.d.ts +2 -0
- package/packages/pi-ai/dist/providers/minimax-tool-name.test.d.ts.map +1 -0
- package/packages/pi-ai/dist/providers/minimax-tool-name.test.js +80 -0
- package/packages/pi-ai/dist/providers/minimax-tool-name.test.js.map +1 -0
- package/packages/pi-ai/dist/providers/simple-options.d.ts +10 -0
- package/packages/pi-ai/dist/providers/simple-options.d.ts.map +1 -1
- package/packages/pi-ai/dist/providers/simple-options.js +16 -1
- package/packages/pi-ai/dist/providers/simple-options.js.map +1 -1
- package/packages/pi-ai/package.json +6 -1
- package/packages/pi-ai/src/models/custom.ts +42 -0
- package/packages/pi-ai/src/providers/anthropic-auth.test.ts +1 -1
- package/packages/pi-ai/src/providers/anthropic-shared.ts +26 -5
- package/packages/pi-ai/src/providers/anthropic.ts +9 -3
- package/packages/pi-ai/src/providers/minimax-tool-name.test.ts +98 -0
- package/packages/pi-ai/src/providers/simple-options.ts +17 -1
- package/packages/pi-ai/tsconfig.tsbuildinfo +1 -1
- package/packages/pi-coding-agent/dist/core/agent-session-abort-order.test.js +3 -2
- package/packages/pi-coding-agent/dist/core/agent-session-abort-order.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/agent-session.d.ts +2 -0
- package/packages/pi-coding-agent/dist/core/agent-session.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/agent-session.js +7 -0
- package/packages/pi-coding-agent/dist/core/agent-session.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/compaction/compaction.d.ts +25 -0
- package/packages/pi-coding-agent/dist/core/compaction/compaction.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/compaction/compaction.js +105 -6
- package/packages/pi-coding-agent/dist/core/compaction/compaction.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/compaction/compaction.test.js +230 -28
- package/packages/pi-coding-agent/dist/core/compaction/compaction.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/compaction/utils.d.ts +30 -2
- package/packages/pi-coding-agent/dist/core/compaction/utils.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/compaction/utils.js +113 -12
- package/packages/pi-coding-agent/dist/core/compaction/utils.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/compaction-orchestrator.d.ts +1 -0
- package/packages/pi-coding-agent/dist/core/compaction-orchestrator.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/compaction-orchestrator.js +29 -18
- package/packages/pi-coding-agent/dist/core/compaction-orchestrator.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/compaction-orchestrator.test.d.ts +2 -0
- package/packages/pi-coding-agent/dist/core/compaction-orchestrator.test.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/compaction-orchestrator.test.js +130 -0
- package/packages/pi-coding-agent/dist/core/compaction-orchestrator.test.js.map +1 -0
- package/packages/pi-coding-agent/dist/core/compaction-utils.test.js +56 -1
- package/packages/pi-coding-agent/dist/core/compaction-utils.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/discovery-cache.test.js +8 -15
- package/packages/pi-coding-agent/dist/core/discovery-cache.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/extension-discovery.d.ts +25 -0
- package/packages/pi-coding-agent/dist/core/extensions/extension-discovery.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/extensions/extension-discovery.js +109 -0
- package/packages/pi-coding-agent/dist/core/extensions/extension-discovery.js.map +1 -0
- package/packages/pi-coding-agent/dist/core/extensions/extension-registry.d.ts +67 -0
- package/packages/pi-coding-agent/dist/core/extensions/extension-registry.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/extensions/extension-registry.js +167 -0
- package/packages/pi-coding-agent/dist/core/extensions/extension-registry.js.map +1 -0
- package/packages/pi-coding-agent/dist/core/extensions/loader.d.ts +3 -2
- package/packages/pi-coding-agent/dist/core/extensions/loader.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/loader.js +24 -8
- package/packages/pi-coding-agent/dist/core/extensions/loader.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/runner.d.ts +2 -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 +14 -0
- 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/lsp/lsp-integration.test.js +11 -0
- package/packages/pi-coding-agent/dist/core/lsp/lsp-integration.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/model-registry-auth-mode.test.js +2 -2
- package/packages/pi-coding-agent/dist/core/model-registry-auth-mode.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/model-registry-custom-caps.test.d.ts +2 -0
- package/packages/pi-coding-agent/dist/core/model-registry-custom-caps.test.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/model-registry-custom-caps.test.js +203 -0
- package/packages/pi-coding-agent/dist/core/model-registry-custom-caps.test.js.map +1 -0
- package/packages/pi-coding-agent/dist/core/model-registry.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/model-registry.js +14 -0
- package/packages/pi-coding-agent/dist/core/model-registry.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/resource-loader.js +1 -1
- package/packages/pi-coding-agent/dist/core/resource-loader.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/sdk.d.ts +1 -0
- package/packages/pi-coding-agent/dist/core/sdk.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/sdk.js +4 -1
- package/packages/pi-coding-agent/dist/core/sdk.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/sdk.test.js +19 -1
- package/packages/pi-coding-agent/dist/core/sdk.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/session-manager.js +1 -1
- package/packages/pi-coding-agent/dist/core/session-manager.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/session-manager.test.js +21 -1
- package/packages/pi-coding-agent/dist/core/session-manager.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/system-prompt.js +3 -3
- package/packages/pi-coding-agent/dist/core/system-prompt.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/path-utils.test.js +2 -1
- package/packages/pi-coding-agent/dist/core/tools/path-utils.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/provider-display-name.test.js +15 -6
- package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/provider-display-name.test.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 +14 -5
- package/packages/pi-coding-agent/dist/modes/interactive/components/footer.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/model-selector.d.ts +7 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/model-selector.js +31 -9
- package/packages/pi-coding-agent/dist/modes/interactive/components/model-selector.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/input-controller.test.js +14 -0
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/input-controller.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js +13 -1
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/packages/pi-coding-agent/package.json +6 -1
- package/packages/pi-coding-agent/src/core/agent-session-abort-order.test.ts +3 -2
- package/packages/pi-coding-agent/src/core/agent-session.ts +11 -0
- package/packages/pi-coding-agent/src/core/compaction/compaction.test.ts +368 -28
- package/packages/pi-coding-agent/src/core/compaction/compaction.ts +122 -6
- package/packages/pi-coding-agent/src/core/compaction/utils.ts +111 -13
- package/packages/pi-coding-agent/src/core/compaction-orchestrator.test.ts +154 -0
- package/packages/pi-coding-agent/src/core/compaction-orchestrator.ts +32 -18
- package/packages/pi-coding-agent/src/core/compaction-utils.test.ts +68 -1
- package/packages/pi-coding-agent/src/core/discovery-cache.test.ts +9 -18
- package/packages/pi-coding-agent/src/core/extensions/extension-discovery.ts +119 -0
- package/packages/pi-coding-agent/src/core/extensions/extension-registry.ts +222 -0
- package/packages/pi-coding-agent/src/core/extensions/loader.ts +24 -11
- package/packages/pi-coding-agent/src/core/extensions/runner.ts +2 -0
- package/packages/pi-coding-agent/src/core/extensions/types.ts +15 -0
- package/packages/pi-coding-agent/src/core/lsp/lsp-integration.test.ts +13 -0
- package/packages/pi-coding-agent/src/core/model-registry-auth-mode.test.ts +2 -2
- package/packages/pi-coding-agent/src/core/model-registry-custom-caps.test.ts +245 -0
- package/packages/pi-coding-agent/src/core/model-registry.ts +16 -0
- package/packages/pi-coding-agent/src/core/resource-loader.ts +1 -1
- package/packages/pi-coding-agent/src/core/sdk.test.ts +25 -1
- package/packages/pi-coding-agent/src/core/sdk.ts +10 -3
- package/packages/pi-coding-agent/src/core/session-manager.test.ts +30 -1
- package/packages/pi-coding-agent/src/core/session-manager.ts +1 -1
- package/packages/pi-coding-agent/src/core/system-prompt.ts +3 -3
- package/packages/pi-coding-agent/src/core/tools/path-utils.test.ts +2 -1
- package/packages/pi-coding-agent/src/modes/interactive/components/__tests__/provider-display-name.test.ts +17 -7
- package/packages/pi-coding-agent/src/modes/interactive/components/footer.ts +14 -5
- package/packages/pi-coding-agent/src/modes/interactive/components/model-selector.ts +45 -11
- package/packages/pi-coding-agent/src/modes/interactive/controllers/input-controller.test.ts +14 -0
- package/packages/pi-coding-agent/src/modes/interactive/interactive-mode.ts +13 -1
- package/packages/pi-coding-agent/tsconfig.tsbuildinfo +1 -1
- package/packages/pi-tui/dist/__tests__/autocomplete.test.js +12 -5
- package/packages/pi-tui/dist/__tests__/autocomplete.test.js.map +1 -1
- package/packages/pi-tui/dist/__tests__/stdin-buffer.test.js +21 -0
- package/packages/pi-tui/dist/__tests__/stdin-buffer.test.js.map +1 -1
- package/packages/pi-tui/dist/stdin-buffer.d.ts +7 -0
- package/packages/pi-tui/dist/stdin-buffer.d.ts.map +1 -1
- package/packages/pi-tui/dist/stdin-buffer.js +20 -0
- package/packages/pi-tui/dist/stdin-buffer.js.map +1 -1
- package/packages/pi-tui/package.json +6 -1
- package/packages/pi-tui/src/__tests__/autocomplete.test.ts +20 -5
- package/packages/pi-tui/src/__tests__/stdin-buffer.test.ts +27 -0
- package/packages/pi-tui/src/stdin-buffer.ts +26 -0
- package/packages/pi-tui/tsconfig.tsbuildinfo +1 -1
- package/packages/rpc-client/package.json +6 -1
- package/pkg/package.json +1 -1
- package/scripts/install.js +512 -0
- package/scripts/lib/workspace-manifest.cjs +86 -0
- package/scripts/link-workspace-packages.cjs +5 -17
- package/scripts/postinstall.js +9 -178
- package/src/resources/extensions/claude-code-cli/readiness.ts +4 -3
- package/src/resources/extensions/claude-code-cli/stream-adapter.ts +91 -63
- package/src/resources/extensions/claude-code-cli/tests/stream-adapter.test.ts +114 -12
- package/src/resources/extensions/cmux/index.ts +35 -10
- package/src/resources/extensions/github-sync/templates.ts +151 -0
- package/src/resources/extensions/github-sync/tests/templates.test.ts +59 -0
- package/src/resources/extensions/google-search/extension-manifest.json +5 -4
- package/src/resources/extensions/google-search/index.ts +9 -470
- package/src/resources/extensions/gsd/abandon-detect.ts +62 -0
- package/src/resources/extensions/gsd/auto/loop-deps.ts +14 -1
- package/src/resources/extensions/gsd/auto/loop.ts +104 -2
- package/src/resources/extensions/gsd/auto/phases.ts +123 -21
- package/src/resources/extensions/gsd/auto/resolve.ts +29 -0
- package/src/resources/extensions/gsd/auto/run-unit.ts +56 -4
- package/src/resources/extensions/gsd/auto/session.ts +28 -1
- package/src/resources/extensions/gsd/auto/turn-epoch.ts +108 -0
- package/src/resources/extensions/gsd/auto/types.ts +1 -1
- package/src/resources/extensions/gsd/auto-dispatch.ts +117 -16
- package/src/resources/extensions/gsd/auto-loop.ts +1 -1
- package/src/resources/extensions/gsd/auto-model-selection.ts +1 -1
- package/src/resources/extensions/gsd/auto-post-unit.ts +92 -3
- package/src/resources/extensions/gsd/auto-prompts.ts +28 -1
- package/src/resources/extensions/gsd/auto-recovery.ts +40 -1
- package/src/resources/extensions/gsd/auto-start.ts +48 -52
- package/src/resources/extensions/gsd/auto-timeout-recovery.ts +12 -5
- package/src/resources/extensions/gsd/auto-unit-closeout.ts +14 -3
- package/src/resources/extensions/gsd/auto-worktree.ts +122 -68
- package/src/resources/extensions/gsd/auto.ts +105 -35
- package/src/resources/extensions/gsd/bootstrap/agent-end-recovery.ts +34 -1
- package/src/resources/extensions/gsd/bootstrap/provider-error-resume.ts +6 -2
- package/src/resources/extensions/gsd/bootstrap/register-extension.ts +11 -0
- package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +18 -6
- package/src/resources/extensions/gsd/bootstrap/system-context.ts +13 -9
- package/src/resources/extensions/gsd/bootstrap/write-gate.ts +35 -2
- package/src/resources/extensions/gsd/clean-root-preflight.ts +111 -0
- package/src/resources/extensions/gsd/commands/handlers/workflow.ts +27 -8
- package/src/resources/extensions/gsd/commands-cmux.ts +10 -6
- package/src/resources/extensions/gsd/commands-extensions.ts +747 -41
- package/src/resources/extensions/gsd/commands-prefs-wizard.ts +898 -32
- package/src/resources/extensions/gsd/dispatch-guard.ts +26 -2
- package/src/resources/extensions/gsd/file-lock.ts +84 -11
- package/src/resources/extensions/gsd/git-service.ts +1 -0
- package/src/resources/extensions/gsd/gitignore.ts +2 -1
- package/src/resources/extensions/gsd/gsd-db.ts +92 -32
- package/src/resources/extensions/gsd/guided-flow-queue.ts +4 -1
- package/src/resources/extensions/gsd/guided-flow.ts +259 -10
- package/src/resources/extensions/gsd/health-widget.ts +3 -1
- package/src/resources/extensions/gsd/journal.ts +29 -3
- package/src/resources/extensions/gsd/key-manager.ts +22 -0
- package/src/resources/extensions/gsd/milestone-actions.ts +18 -0
- package/src/resources/extensions/gsd/milestone-summary-classifier.ts +42 -0
- package/src/resources/extensions/gsd/model-router.ts +42 -1
- package/src/resources/extensions/gsd/notifications.ts +27 -15
- package/src/resources/extensions/gsd/pre-execution-checks.ts +33 -7
- package/src/resources/extensions/gsd/preferences-types.ts +8 -0
- package/src/resources/extensions/gsd/prompts/discuss-headless.md +29 -2
- package/src/resources/extensions/gsd/prompts/discuss.md +29 -2
- package/src/resources/extensions/gsd/prompts/doctor-heal.md +5 -4
- package/src/resources/extensions/gsd/prompts/parallel-research-slices.md +5 -2
- package/src/resources/extensions/gsd/prompts/system.md +1 -0
- package/src/resources/extensions/gsd/reports.ts +5 -4
- package/src/resources/extensions/gsd/safety/evidence-collector.ts +119 -0
- package/src/resources/extensions/gsd/safety/file-change-validator.ts +16 -3
- package/src/resources/extensions/gsd/safety/safety-harness.ts +9 -0
- package/src/resources/extensions/gsd/state-transition-matrix.ts +152 -0
- package/src/resources/extensions/gsd/state.ts +35 -30
- package/src/resources/extensions/gsd/tests/auto-loop.test.ts +238 -4
- package/src/resources/extensions/gsd/tests/auto-mode-guards.test.ts +79 -0
- package/src/resources/extensions/gsd/tests/auto-paused-session-validation.test.ts +12 -0
- package/src/resources/extensions/gsd/tests/auto-recovery.test.ts +122 -0
- package/src/resources/extensions/gsd/tests/auto-start-bootstrap-await-3420.test.ts +141 -0
- package/src/resources/extensions/gsd/tests/auto-start-clean-runtime-db-gated.test.ts +63 -0
- package/src/resources/extensions/gsd/tests/auto-wrapup-inflight-guard.test.ts +23 -0
- package/src/resources/extensions/gsd/tests/clean-root-preflight.test.ts +186 -0
- package/src/resources/extensions/gsd/tests/cmux.test.ts +5 -9
- package/src/resources/extensions/gsd/tests/complete-milestone-false-merge.test.ts +15 -0
- package/src/resources/extensions/gsd/tests/complete-milestone.test.ts +61 -1
- package/src/resources/extensions/gsd/tests/complete-slice.test.ts +2 -2
- package/src/resources/extensions/gsd/tests/complete-task.test.ts +2 -2
- package/src/resources/extensions/gsd/tests/custom-engine-loop-integration.test.ts +161 -0
- package/src/resources/extensions/gsd/tests/db-access-guardrails.test.ts +1 -0
- package/src/resources/extensions/gsd/tests/derive-state.test.ts +1 -2
- package/src/resources/extensions/gsd/tests/dispatch-complete-milestone-guard.test.ts +14 -9
- package/src/resources/extensions/gsd/tests/dispatch-guard-summary-db-mismatch.test.ts +77 -0
- package/src/resources/extensions/gsd/tests/dispatch-guard.test.ts +25 -0
- package/src/resources/extensions/gsd/tests/dispatch-missing-task-plans.test.ts +14 -0
- package/src/resources/extensions/gsd/tests/doctor-providers.test.ts +31 -0
- package/src/resources/extensions/gsd/tests/double-merge-guard.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/ensure-db-open.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/escalation.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/exec-history.test.ts +113 -0
- package/src/resources/extensions/gsd/tests/execution-entry-missing-context-4671.test.ts +173 -0
- package/src/resources/extensions/gsd/tests/file-change-validator.test.ts +38 -0
- package/src/resources/extensions/gsd/tests/file-lock.test.ts +86 -12
- package/src/resources/extensions/gsd/tests/google-search-stub.test.ts +131 -0
- package/src/resources/extensions/gsd/tests/gsd-db.test.ts +296 -1
- package/src/resources/extensions/gsd/tests/headless-milestone-parity.test.ts +117 -0
- package/src/resources/extensions/gsd/tests/integration/auto-worktree-milestone-merge.test.ts +30 -0
- package/src/resources/extensions/gsd/tests/integration/git-service.test.ts +4 -2
- package/src/resources/extensions/gsd/tests/integration/gitignore-tracked-gsd.test.ts +1 -0
- package/src/resources/extensions/gsd/tests/integration/idle-recovery.test.ts +30 -0
- package/src/resources/extensions/gsd/tests/integration/worktree-e2e.test.ts +11 -0
- package/src/resources/extensions/gsd/tests/issue-4540-regressions.test.ts +288 -0
- package/src/resources/extensions/gsd/tests/journal-integration.test.ts +66 -0
- package/src/resources/extensions/gsd/tests/key-manager.test.ts +2 -0
- package/src/resources/extensions/gsd/tests/mcp-client-security.test.ts +76 -0
- package/src/resources/extensions/gsd/tests/md-importer.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/memory-pressure-stuck-state.test.ts +12 -0
- package/src/resources/extensions/gsd/tests/memory-store.test.ts +2 -2
- package/src/resources/extensions/gsd/tests/milestone-status-authoritative.test.ts +3 -3
- package/src/resources/extensions/gsd/tests/milestone-summary-classifier.test.ts +30 -0
- package/src/resources/extensions/gsd/tests/milestone-transition-state-rebuild.test.ts +4 -2
- package/src/resources/extensions/gsd/tests/parallel-commit-scope.test.ts +5 -0
- package/src/resources/extensions/gsd/tests/parallel-research-dispatch.test.ts +19 -0
- package/src/resources/extensions/gsd/tests/parallel-skill-prompt-integration.test.ts +150 -0
- package/src/resources/extensions/gsd/tests/plan-gate-failed-doctor-heal-hint.test.ts +37 -0
- package/src/resources/extensions/gsd/tests/pre-exec-gate-loop.test.ts +272 -0
- package/src/resources/extensions/gsd/tests/pre-execution-checks.test.ts +337 -0
- package/src/resources/extensions/gsd/tests/prefs-wizard-coverage.test.ts +44 -0
- package/src/resources/extensions/gsd/tests/provider-errors.test.ts +39 -25
- package/src/resources/extensions/gsd/tests/queue-auto-guard.test.ts +181 -0
- package/src/resources/extensions/gsd/tests/quick-auto-guard.test.ts +13 -7
- package/src/resources/extensions/gsd/tests/ready-phrase-no-files-4573.test.ts +388 -0
- package/src/resources/extensions/gsd/tests/require-slice-discussion-dispatch.test.ts +170 -0
- package/src/resources/extensions/gsd/tests/restore-tools-after-discuss.test.ts +9 -3
- package/src/resources/extensions/gsd/tests/resume-dispatch-worktree.test.ts +230 -0
- package/src/resources/extensions/gsd/tests/rewrite-docs-abandon-detect.test.ts +195 -0
- package/src/resources/extensions/gsd/tests/safety-harness-false-positives.test.ts +205 -0
- package/src/resources/extensions/gsd/tests/schema-v21-sequence.test.ts +413 -0
- package/src/resources/extensions/gsd/tests/session-start-footer.test.ts +32 -40
- package/src/resources/extensions/gsd/tests/stale-dirlistcache-4648.test.ts +112 -0
- package/src/resources/extensions/gsd/tests/stash-queued-context-files.test.ts +56 -0
- package/src/resources/extensions/gsd/tests/state-machine-full-walkthrough.test.ts +24 -0
- package/src/resources/extensions/gsd/tests/state-transition-matrix.test.ts +44 -0
- package/src/resources/extensions/gsd/tests/stuck-detection-coverage.test.ts +2 -2
- package/src/resources/extensions/gsd/tests/token-counter.test.ts +105 -1
- package/src/resources/extensions/gsd/tests/tool-compatibility.test.ts +107 -0
- package/src/resources/extensions/gsd/tests/triage-resolution.test.ts +50 -2
- package/src/resources/extensions/gsd/tests/turn-epoch.test.ts +162 -0
- package/src/resources/extensions/gsd/tests/uok-contracts.test.ts +51 -0
- package/src/resources/extensions/gsd/tests/uok-execution-graph.test.ts +16 -0
- package/src/resources/extensions/gsd/tests/uok-loop-adapter-writer.test.ts +65 -0
- package/src/resources/extensions/gsd/tests/uok-parity-report.test.ts +42 -0
- package/src/resources/extensions/gsd/tests/uok-plan-v2-wiring.test.ts +42 -2
- package/src/resources/extensions/gsd/tests/uok-writer.test.ts +75 -0
- package/src/resources/extensions/gsd/tests/validate-extension-package.test.ts +168 -0
- package/src/resources/extensions/gsd/tests/validate-milestone.test.ts +138 -5
- package/src/resources/extensions/gsd/tests/workflow-mcp.test.ts +25 -2
- package/src/resources/extensions/gsd/tests/workflow-tool-executors.test.ts +65 -2
- package/src/resources/extensions/gsd/tests/worktree-db.test.ts +35 -0
- package/src/resources/extensions/gsd/tests/worktree-journal-events.test.ts +6 -1
- package/src/resources/extensions/gsd/tests/worktree-resolver.test.ts +78 -5
- package/src/resources/extensions/gsd/tests/write-gate.test.ts +64 -0
- package/src/resources/extensions/gsd/token-counter.ts +22 -5
- package/src/resources/extensions/gsd/tools/complete-milestone.ts +15 -9
- package/src/resources/extensions/gsd/tools/complete-slice.ts +38 -0
- package/src/resources/extensions/gsd/tools/complete-task.ts +49 -0
- package/src/resources/extensions/gsd/uok/audit.ts +20 -2
- package/src/resources/extensions/gsd/uok/contracts.ts +65 -0
- package/src/resources/extensions/gsd/uok/dispatch-envelope.ts +56 -0
- package/src/resources/extensions/gsd/uok/execution-graph.ts +22 -0
- package/src/resources/extensions/gsd/uok/gitops.ts +6 -1
- package/src/resources/extensions/gsd/uok/loop-adapter.ts +45 -10
- package/src/resources/extensions/gsd/uok/parity-report.ts +84 -0
- package/src/resources/extensions/gsd/uok/plan-v2.ts +39 -8
- package/src/resources/extensions/gsd/uok/writer.ts +113 -0
- package/src/resources/extensions/gsd/workflow-logger.ts +23 -3
- package/src/resources/extensions/gsd/worktree-manager.ts +1 -0
- package/src/resources/extensions/gsd/worktree-resolver.ts +54 -9
- package/src/resources/extensions/mcp-client/auth.ts +12 -1
- package/src/resources/extensions/mcp-client/index.ts +129 -10
- package/src/resources/extensions/shared/cmux-events.ts +59 -0
- package/src/resources/extensions/shared/rtk-session-stats.ts +1 -2
- package/src/resources/skills/create-skill/SKILL.md +2 -2
- package/src/resources/skills/create-skill/references/gsd-skill-ecosystem.md +4 -4
- package/src/resources/skills/create-skill/workflows/audit-skill.md +4 -4
- package/src/resources/skills/create-skill/workflows/create-new-skill.md +5 -5
- package/src/resources/skills/verify-before-complete/SKILL.md +2 -1
- package/src/resources/skills/write-docs/SKILL.md +2 -1
- package/dist/web/standalone/.next/server/chunks/7461.js +0 -1
- package/dist/web/standalone/.next/static/chunks/2826.e59e8578e2e28639.js +0 -9
- /package/dist/web/standalone/.next/static/{n21VtX2hZlkpdEUO_nU4z → vidAVJkURvTJ0_V2-64ro}/_buildManifest.js +0 -0
- /package/dist/web/standalone/.next/static/{n21VtX2hZlkpdEUO_nU4z → vidAVJkURvTJ0_V2-64ro}/_ssgManifest.js +0 -0
|
@@ -16,8 +16,30 @@ import { existsSync, unlinkSync } from "node:fs";
|
|
|
16
16
|
import { randomUUID } from "node:crypto";
|
|
17
17
|
import { join } from "node:path";
|
|
18
18
|
import { debugLog } from "./debug-logger.js";
|
|
19
|
-
import { MergeConflictError } from "./git-service.js";
|
|
20
19
|
import { emitJournalEvent } from "./journal.js";
|
|
20
|
+
// ─── Path Helpers ──────────────────────────────────────────────────────────
|
|
21
|
+
/**
|
|
22
|
+
* Worktree marker segment — present in any path produced by worktreePath().
|
|
23
|
+
* Used to strip the worktree suffix and recover the project root (#3729).
|
|
24
|
+
*/
|
|
25
|
+
const WORKTREE_MARKER = "/.gsd/worktrees/";
|
|
26
|
+
/**
|
|
27
|
+
* Resolve the project root from session path state.
|
|
28
|
+
*
|
|
29
|
+
* Prefers `originalBasePath` (always the project root when set), but falls
|
|
30
|
+
* back to `basePath` when `originalBasePath` is falsy (e.g. fresh AutoSession
|
|
31
|
+
* with default empty string). If `basePath` itself is inside a worktree
|
|
32
|
+
* directory (contains `/.gsd/worktrees/`), strip that suffix to recover the
|
|
33
|
+
* actual project root — preventing double-nested worktree paths (#3729).
|
|
34
|
+
*/
|
|
35
|
+
export function resolveProjectRoot(originalBasePath, basePath) {
|
|
36
|
+
let resolved = originalBasePath || basePath;
|
|
37
|
+
const markerIdx = resolved.indexOf(WORKTREE_MARKER);
|
|
38
|
+
if (markerIdx !== -1) {
|
|
39
|
+
resolved = resolved.slice(0, markerIdx);
|
|
40
|
+
}
|
|
41
|
+
return resolved;
|
|
42
|
+
}
|
|
21
43
|
// ─── WorktreeResolver ──────────────────────────────────────────────────────
|
|
22
44
|
export class WorktreeResolver {
|
|
23
45
|
s;
|
|
@@ -33,11 +55,11 @@ export class WorktreeResolver {
|
|
|
33
55
|
}
|
|
34
56
|
/** Original project root — always the non-worktree path. */
|
|
35
57
|
get projectRoot() {
|
|
36
|
-
return this.s.originalBasePath
|
|
58
|
+
return resolveProjectRoot(this.s.originalBasePath, this.s.basePath);
|
|
37
59
|
}
|
|
38
60
|
/** Path for auto.lock file — same as the old lockBase(). */
|
|
39
61
|
get lockPath() {
|
|
40
|
-
return this.s.originalBasePath
|
|
62
|
+
return resolveProjectRoot(this.s.originalBasePath, this.s.basePath);
|
|
41
63
|
}
|
|
42
64
|
// ── Private Helpers ────────────────────────────────────────────────────
|
|
43
65
|
rebuildGitService() {
|
|
@@ -99,7 +121,10 @@ export class WorktreeResolver {
|
|
|
99
121
|
});
|
|
100
122
|
return;
|
|
101
123
|
}
|
|
102
|
-
|
|
124
|
+
// Resolve the project root for worktree operations via shared helper.
|
|
125
|
+
// Handles the case where originalBasePath is falsy and basePath is itself
|
|
126
|
+
// a worktree path — prevents double-nested worktree paths (#3729).
|
|
127
|
+
const basePath = resolveProjectRoot(this.s.originalBasePath, this.s.basePath);
|
|
103
128
|
debugLog("WorktreeResolver", {
|
|
104
129
|
action: "enterMilestone",
|
|
105
130
|
milestoneId,
|
|
@@ -429,11 +454,13 @@ export class WorktreeResolver {
|
|
|
429
454
|
/* best-effort */
|
|
430
455
|
}
|
|
431
456
|
}
|
|
432
|
-
//
|
|
433
|
-
//
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
457
|
+
// Restore state before re-throwing so callers always get a consistent
|
|
458
|
+
// session (#4380).
|
|
459
|
+
this.restoreToProjectRoot();
|
|
460
|
+
// Re-throw: MergeConflictError stops the auto loop (#2330); non-conflict
|
|
461
|
+
// errors (permission denied, filesystem failures) must also propagate so
|
|
462
|
+
// broken states are diagnosable (#4380).
|
|
463
|
+
throw err;
|
|
437
464
|
}
|
|
438
465
|
// Always restore basePath and rebuild — whether merge succeeded or failed
|
|
439
466
|
this.restoreToProjectRoot();
|
|
@@ -500,6 +527,8 @@ export class WorktreeResolver {
|
|
|
500
527
|
error: msg,
|
|
501
528
|
});
|
|
502
529
|
ctx.notify(`Milestone merge failed (branch mode): ${msg}`, "warning");
|
|
530
|
+
// Re-throw all errors so callers can apply their own recovery logic (#4380).
|
|
531
|
+
throw err;
|
|
503
532
|
}
|
|
504
533
|
}
|
|
505
534
|
// ── Merge and Enter Next ───────────────────────────────────────────────
|
|
@@ -516,7 +545,18 @@ export class WorktreeResolver {
|
|
|
516
545
|
currentMilestoneId,
|
|
517
546
|
nextMilestoneId,
|
|
518
547
|
});
|
|
519
|
-
|
|
548
|
+
try {
|
|
549
|
+
this.mergeAndExit(currentMilestoneId, ctx);
|
|
550
|
+
}
|
|
551
|
+
catch (err) {
|
|
552
|
+
// mergeAndExit emits a warning and restores state when it fails during
|
|
553
|
+
// merge/cleanup. But if it throws before recovery runs (e.g., in
|
|
554
|
+
// validateMilestoneId or emitJournalEvent), basePath won't be restored
|
|
555
|
+
// to projectRoot — re-throw so we don't enter the next milestone with
|
|
556
|
+
// the current one unmerged.
|
|
557
|
+
if (this.s.basePath !== this.projectRoot)
|
|
558
|
+
throw err;
|
|
559
|
+
}
|
|
520
560
|
this.enterMilestone(nextMilestoneId, ctx);
|
|
521
561
|
}
|
|
522
562
|
}
|
|
@@ -10,7 +10,16 @@
|
|
|
10
10
|
// ─── Env resolution ───────────────────────────────────────────────────────────
|
|
11
11
|
/** Resolve `${VAR}` references in a string against `process.env`. */
|
|
12
12
|
function resolveEnvValue(value) {
|
|
13
|
-
return value.replace(/\$\{([^}]+)\}/g, (_match, varName) =>
|
|
13
|
+
return value.replace(/\$\{([^}]+)\}/g, (_match, varName) => {
|
|
14
|
+
const resolved = process.env[varName];
|
|
15
|
+
if (resolved === undefined || resolved === "") {
|
|
16
|
+
// eslint-disable-next-line no-console
|
|
17
|
+
console.warn(`[mcp-client auth] Environment variable "${varName}" referenced in MCP server config is unset. ` +
|
|
18
|
+
`Requests will go out with a malformed header and the remote server will likely reject them with 401.`);
|
|
19
|
+
return "";
|
|
20
|
+
}
|
|
21
|
+
return resolved;
|
|
22
|
+
});
|
|
14
23
|
}
|
|
15
24
|
function resolveHeaders(raw) {
|
|
16
25
|
const resolved = {};
|
|
@@ -21,8 +21,38 @@ import { join } from "node:path";
|
|
|
21
21
|
import { buildHttpTransportOpts } from "./auth.js";
|
|
22
22
|
// ─── Connection Manager ───────────────────────────────────────────────────────
|
|
23
23
|
const connections = new Map();
|
|
24
|
+
const pendingConnections = new Map();
|
|
24
25
|
let configCache = null;
|
|
25
26
|
const toolCache = new Map();
|
|
27
|
+
const trustedStdioServers = new Set();
|
|
28
|
+
const CHILD_ENV_ALLOWLIST = new Set([
|
|
29
|
+
"PATH",
|
|
30
|
+
"Path",
|
|
31
|
+
"HOME",
|
|
32
|
+
"USER",
|
|
33
|
+
"USERNAME",
|
|
34
|
+
"USERPROFILE",
|
|
35
|
+
"SHELL",
|
|
36
|
+
"TMPDIR",
|
|
37
|
+
"TEMP",
|
|
38
|
+
"TMP",
|
|
39
|
+
"SystemRoot",
|
|
40
|
+
"WINDIR",
|
|
41
|
+
"APPDATA",
|
|
42
|
+
"LOCALAPPDATA",
|
|
43
|
+
"XDG_CONFIG_HOME",
|
|
44
|
+
"XDG_CACHE_HOME",
|
|
45
|
+
]);
|
|
46
|
+
function stdioTrustKey(config) {
|
|
47
|
+
return JSON.stringify({
|
|
48
|
+
name: config.name,
|
|
49
|
+
sourcePath: config.sourcePath,
|
|
50
|
+
command: config.command,
|
|
51
|
+
args: config.args ?? [],
|
|
52
|
+
cwd: config.cwd,
|
|
53
|
+
env: config.env ?? {},
|
|
54
|
+
});
|
|
55
|
+
}
|
|
26
56
|
function readConfigs() {
|
|
27
57
|
if (configCache)
|
|
28
58
|
return configCache;
|
|
@@ -57,6 +87,7 @@ function readConfigs() {
|
|
|
57
87
|
servers.push({
|
|
58
88
|
name,
|
|
59
89
|
transport,
|
|
90
|
+
sourcePath: configPath,
|
|
60
91
|
...(hasCommand && {
|
|
61
92
|
command: config.command,
|
|
62
93
|
args: Array.isArray(config.args) ? config.args : undefined,
|
|
@@ -78,6 +109,42 @@ function readConfigs() {
|
|
|
78
109
|
configCache = servers;
|
|
79
110
|
return servers;
|
|
80
111
|
}
|
|
112
|
+
export function _buildMcpChildEnvForTest(configEnv) {
|
|
113
|
+
const childEnv = {};
|
|
114
|
+
for (const key of CHILD_ENV_ALLOWLIST) {
|
|
115
|
+
const value = process.env[key];
|
|
116
|
+
if (typeof value === "string")
|
|
117
|
+
childEnv[key] = value;
|
|
118
|
+
}
|
|
119
|
+
return {
|
|
120
|
+
...childEnv,
|
|
121
|
+
...(configEnv ? resolveEnv(configEnv) : {}),
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
export function _buildMcpTrustConfirmOptionsForTest(signal) {
|
|
125
|
+
return signal ? { timeout: 120_000, signal } : { timeout: 120_000 };
|
|
126
|
+
}
|
|
127
|
+
async function assertTrustedStdioServer(config, ctx, signal) {
|
|
128
|
+
if (config.transport !== "stdio")
|
|
129
|
+
return undefined;
|
|
130
|
+
const trustKey = stdioTrustKey(config);
|
|
131
|
+
if (trustedStdioServers.has(trustKey))
|
|
132
|
+
return undefined;
|
|
133
|
+
if (!ctx?.hasUI) {
|
|
134
|
+
throw new Error(`MCP server "${config.name}" is a project-local stdio command from ${config.sourcePath}. ` +
|
|
135
|
+
"Run this from an interactive GSD session and approve the server before use.");
|
|
136
|
+
}
|
|
137
|
+
const commandLine = [config.command, ...(config.args ?? [])].filter(Boolean).join(" ");
|
|
138
|
+
const envKeys = Object.keys(config.env ?? {});
|
|
139
|
+
const envSummary = envKeys.length > 0
|
|
140
|
+
? `\n\nConfigured environment keys: ${envKeys.join(", ")}`
|
|
141
|
+
: "\n\nNo explicit environment keys configured.";
|
|
142
|
+
const approved = await ctx.ui.confirm(`Trust MCP server "${config.name}"?`, `Project config ${config.sourcePath} wants to start:\n\n${commandLine}${envSummary}\n\nOnly approve MCP servers you trust.`, _buildMcpTrustConfirmOptionsForTest(signal));
|
|
143
|
+
if (!approved) {
|
|
144
|
+
throw new Error(`MCP server "${config.name}" was not approved by the user.`);
|
|
145
|
+
}
|
|
146
|
+
return trustKey;
|
|
147
|
+
}
|
|
81
148
|
function getServerConfig(name) {
|
|
82
149
|
const trimmed = name.trim();
|
|
83
150
|
return readConfigs().find((s) => s.name === trimmed ||
|
|
@@ -96,7 +163,7 @@ function resolveEnv(env) {
|
|
|
96
163
|
}
|
|
97
164
|
return resolved;
|
|
98
165
|
}
|
|
99
|
-
async function getOrConnect(name, signal) {
|
|
166
|
+
async function getOrConnect(name, signal, ctx) {
|
|
100
167
|
const config = getServerConfig(name);
|
|
101
168
|
if (!config)
|
|
102
169
|
throw new Error(`Unknown MCP server: "${name}". Use mcp_servers to list available servers.`);
|
|
@@ -105,13 +172,28 @@ async function getOrConnect(name, signal) {
|
|
|
105
172
|
const existing = connections.get(config.name);
|
|
106
173
|
if (existing)
|
|
107
174
|
return existing.client;
|
|
175
|
+
const pending = pendingConnections.get(config.name);
|
|
176
|
+
if (pending)
|
|
177
|
+
return pending;
|
|
178
|
+
const connectionPromise = connectServer(config, signal, ctx);
|
|
179
|
+
pendingConnections.set(config.name, connectionPromise);
|
|
180
|
+
try {
|
|
181
|
+
return await connectionPromise;
|
|
182
|
+
}
|
|
183
|
+
finally {
|
|
184
|
+
pendingConnections.delete(config.name);
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
async function connectServer(config, signal, ctx) {
|
|
108
188
|
const client = new Client({ name: "gsd", version: "1.0.0" });
|
|
109
189
|
let transport;
|
|
190
|
+
let approvedTrustKey;
|
|
110
191
|
if (config.transport === "stdio" && config.command) {
|
|
192
|
+
approvedTrustKey = await assertTrustedStdioServer(config, ctx, signal);
|
|
111
193
|
transport = new StdioClientTransport({
|
|
112
194
|
command: config.command,
|
|
113
195
|
args: config.args,
|
|
114
|
-
env:
|
|
196
|
+
env: _buildMcpChildEnvForTest(config.env),
|
|
115
197
|
cwd: config.cwd,
|
|
116
198
|
stderr: "pipe",
|
|
117
199
|
});
|
|
@@ -127,9 +209,28 @@ async function getOrConnect(name, signal) {
|
|
|
127
209
|
else {
|
|
128
210
|
throw new Error(`Server "${config.name}" has unsupported transport: ${config.transport}`);
|
|
129
211
|
}
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
212
|
+
try {
|
|
213
|
+
await client.connect(transport, { signal, timeout: 30000 });
|
|
214
|
+
if (approvedTrustKey)
|
|
215
|
+
trustedStdioServers.add(approvedTrustKey);
|
|
216
|
+
connections.set(config.name, { client, transport });
|
|
217
|
+
return client;
|
|
218
|
+
}
|
|
219
|
+
catch (err) {
|
|
220
|
+
try {
|
|
221
|
+
await transport.close();
|
|
222
|
+
}
|
|
223
|
+
catch {
|
|
224
|
+
// Best-effort cleanup after a failed or aborted connection attempt.
|
|
225
|
+
}
|
|
226
|
+
try {
|
|
227
|
+
await client.close();
|
|
228
|
+
}
|
|
229
|
+
catch {
|
|
230
|
+
// Best-effort cleanup after a failed or aborted connection attempt.
|
|
231
|
+
}
|
|
232
|
+
throw err;
|
|
233
|
+
}
|
|
133
234
|
}
|
|
134
235
|
async function closeAll() {
|
|
135
236
|
const closing = Array.from(connections.entries()).map(async ([name, conn]) => {
|
|
@@ -139,9 +240,17 @@ async function closeAll() {
|
|
|
139
240
|
catch {
|
|
140
241
|
// Best-effort cleanup
|
|
141
242
|
}
|
|
243
|
+
try {
|
|
244
|
+
await conn.transport.close();
|
|
245
|
+
}
|
|
246
|
+
catch {
|
|
247
|
+
// Best-effort cleanup
|
|
248
|
+
}
|
|
142
249
|
connections.delete(name);
|
|
143
250
|
});
|
|
144
251
|
await Promise.allSettled(closing);
|
|
252
|
+
pendingConnections.clear();
|
|
253
|
+
trustedStdioServers.clear();
|
|
145
254
|
toolCache.clear();
|
|
146
255
|
}
|
|
147
256
|
// ─── Formatters ───────────────────────────────────────────────────────────────
|
|
@@ -249,7 +358,7 @@ export default function (pi) {
|
|
|
249
358
|
description: "MCP server name (from mcp_servers output), e.g. 'railway', 'twitter-mcp', 'linear'",
|
|
250
359
|
}),
|
|
251
360
|
}),
|
|
252
|
-
async execute(_id, params, signal) {
|
|
361
|
+
async execute(_id, params, signal, _onUpdate, ctx) {
|
|
253
362
|
try {
|
|
254
363
|
// Return cached tools if available
|
|
255
364
|
const cached = toolCache.get(params.server);
|
|
@@ -265,7 +374,7 @@ export default function (pi) {
|
|
|
265
374
|
details: { server: params.server, toolCount: cached.length, cached: true },
|
|
266
375
|
};
|
|
267
376
|
}
|
|
268
|
-
const client = await getOrConnect(params.server, signal);
|
|
377
|
+
const client = await getOrConnect(params.server, signal, ctx);
|
|
269
378
|
const result = await client.listTools(undefined, { signal, timeout: 30000 });
|
|
270
379
|
const tools = (result.tools ?? []).map((t) => ({
|
|
271
380
|
name: t.name,
|
|
@@ -326,9 +435,9 @@ export default function (pi) {
|
|
|
326
435
|
description: "Tool arguments as key-value pairs matching the tool's input schema",
|
|
327
436
|
})),
|
|
328
437
|
}),
|
|
329
|
-
async execute(_id, params, signal) {
|
|
438
|
+
async execute(_id, params, signal, _onUpdate, ctx) {
|
|
330
439
|
try {
|
|
331
|
-
const client = await getOrConnect(params.server, signal);
|
|
440
|
+
const client = await getOrConnect(params.server, signal, ctx);
|
|
332
441
|
const result = await client.callTool({ name: params.tool, arguments: params.args ?? {} }, undefined, { signal, timeout: 60000 });
|
|
333
442
|
// Serialize result content to text
|
|
334
443
|
const contentItems = result.content;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
// GSD-2 — Shared cmux event channel contracts
|
|
2
|
+
// Copyright (c) 2026 Jeremy McSpadden <jeremy@fluxlabs.net>
|
|
3
|
+
/**
|
|
4
|
+
* Neutral event channel module for gsd<->cmux IPC.
|
|
5
|
+
* Both gsd and cmux import from here — neither imports the other directly.
|
|
6
|
+
* Per ADR-006 Phase 0: event-based decoupling.
|
|
7
|
+
*/
|
|
8
|
+
export const CMUX_CHANNELS = {
|
|
9
|
+
SIDEBAR: "cmux:sidebar",
|
|
10
|
+
LOG: "cmux:log",
|
|
11
|
+
LIFECYCLE: "cmux:lifecycle",
|
|
12
|
+
};
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { spawnSync } from "node:child_process";
|
|
2
2
|
import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
3
3
|
import { join } from "node:path";
|
|
4
|
-
import { gsdRoot } from "../gsd/paths.js";
|
|
5
4
|
import { formatTokenCount } from "./format-utils.js";
|
|
6
5
|
import { buildRtkEnv, isRtkEnabled, resolveRtkBinaryPath } from "./rtk.js";
|
|
7
6
|
const SESSION_BASELINES_FILE = "rtk-session-baselines.json";
|
|
@@ -10,7 +9,7 @@ const CURRENT_SUMMARY_TIMEOUT_MS = 5_000;
|
|
|
10
9
|
const MAX_BASELINE_SESSIONS = 200;
|
|
11
10
|
let cachedSummary = null;
|
|
12
11
|
function getRuntimeDir(basePath) {
|
|
13
|
-
return join(
|
|
12
|
+
return join(basePath, ".gsd", "runtime");
|
|
14
13
|
}
|
|
15
14
|
function getBaselinesPath(basePath) {
|
|
16
15
|
return join(getRuntimeDir(basePath), SESSION_BASELINES_FILE);
|
|
@@ -88,8 +88,8 @@ Then proceed directly to the workflow.
|
|
|
88
88
|
## Skill Structure Quick Reference
|
|
89
89
|
|
|
90
90
|
**Skill directories:**
|
|
91
|
-
- Global: `~/.
|
|
92
|
-
- Project-local: `.
|
|
91
|
+
- Global: `~/.agents/skills/{skill-name}/`
|
|
92
|
+
- Project-local: `.agents/skills/{skill-name}/`
|
|
93
93
|
|
|
94
94
|
**Simple skill (single file):**
|
|
95
95
|
```yaml
|
|
@@ -5,13 +5,13 @@ GSD-specific skill ecosystem details: directory conventions, discovery mechanics
|
|
|
5
5
|
<skill_directories>
|
|
6
6
|
GSD supports two skill directories, checked in order:
|
|
7
7
|
|
|
8
|
-
**User-scope (global):** `~/.
|
|
8
|
+
**User-scope (global):** `~/.agents/skills/`
|
|
9
9
|
- Available in every GSD session regardless of working directory
|
|
10
|
-
- Installed
|
|
10
|
+
- Installed via [skills.sh](https://skills.sh) or manually
|
|
11
11
|
|
|
12
|
-
**Project-scope (local):** `.
|
|
12
|
+
**Project-scope (local):** `.agents/skills/`
|
|
13
13
|
- Available only when GSD runs inside the project directory
|
|
14
|
-
-
|
|
14
|
+
- Committable to version control so team members share the same skill set
|
|
15
15
|
- Ideal for project-specific workflows, deploy scripts, or conventions
|
|
16
16
|
|
|
17
17
|
Skills in both directories follow the same SKILL.md format and router pattern conventions.
|
|
@@ -16,22 +16,22 @@
|
|
|
16
16
|
Enumerate skills from both directories:
|
|
17
17
|
```bash
|
|
18
18
|
echo "=== Global skills ==="
|
|
19
|
-
ls ~/.
|
|
19
|
+
ls ~/.agents/skills/ 2>/dev/null || echo "(none)"
|
|
20
20
|
|
|
21
21
|
echo "=== Project-local skills ==="
|
|
22
|
-
ls .
|
|
22
|
+
ls .agents/skills/ 2>/dev/null || echo "(none)"
|
|
23
23
|
```
|
|
24
24
|
|
|
25
25
|
Present as:
|
|
26
26
|
```
|
|
27
27
|
Available skills:
|
|
28
28
|
|
|
29
|
-
Global (~/.
|
|
29
|
+
Global (~/.agents/skills/):
|
|
30
30
|
1. create-skill
|
|
31
31
|
2. manage-stripe
|
|
32
32
|
...
|
|
33
33
|
|
|
34
|
-
Project-local (.
|
|
34
|
+
Project-local (.agents/skills/):
|
|
35
35
|
3. project-deploy
|
|
36
36
|
...
|
|
37
37
|
```
|
|
@@ -15,8 +15,8 @@
|
|
|
15
15
|
**Ask the user:**
|
|
16
16
|
"Should this skill be global or project-local?"
|
|
17
17
|
|
|
18
|
-
1. **Global** (`~/.
|
|
19
|
-
2. **Project-local** (`.
|
|
18
|
+
1. **Global** (`~/.agents/skills/`) — Available in all GSD sessions
|
|
19
|
+
2. **Project-local** (`.agents/skills/`) — Available only in this project
|
|
20
20
|
|
|
21
21
|
## Step 2: Adaptive Requirements Gathering
|
|
22
22
|
|
|
@@ -99,11 +99,11 @@ See references/recommended-structure.md for templates.
|
|
|
99
99
|
## Step 5: Create Directory
|
|
100
100
|
|
|
101
101
|
Use the scope selected in Step 1 to determine the base path:
|
|
102
|
-
- **Global:** `~/.
|
|
103
|
-
- **Project-local:** `.
|
|
102
|
+
- **Global:** `~/.agents/skills/{skill-name}`
|
|
103
|
+
- **Project-local:** `.agents/skills/{skill-name}`
|
|
104
104
|
|
|
105
105
|
```bash
|
|
106
|
-
BASE_PATH="{selected-base}/
|
|
106
|
+
BASE_PATH="{selected-base}/skills/{skill-name}"
|
|
107
107
|
mkdir -p $BASE_PATH
|
|
108
108
|
# If complex:
|
|
109
109
|
mkdir -p $BASE_PATH/workflows
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: verify-before-complete
|
|
3
|
-
description:
|
|
3
|
+
description: >-
|
|
4
|
+
Block completion claims until verification evidence has been produced in the current message. Use before marking a task/slice/milestone complete, before creating a commit or PR, before saying "it works" or "tests pass", and any time you are about to claim work is done. The rule is: evidence before claims, always — running the verification must happen now, not "earlier in the session". Fresh output or no claim.
|
|
4
5
|
---
|
|
5
6
|
|
|
6
7
|
<objective>
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: write-docs
|
|
3
|
-
description:
|
|
3
|
+
description: >-
|
|
4
|
+
Collaborative document authoring workflow for proposals, technical specs, decision docs, README sections, ADRs, and long-form prose that must work for fresh readers. Use when asked to "write the docs", "draft a proposal", "write a spec", "write an RFC", "write the README", or when a document needs to be understandable by someone without this session's context. Three stages: gather context, iterate on structure, reader-test for a stranger.
|
|
4
5
|
---
|
|
5
6
|
|
|
6
7
|
<objective>
|