gsd-pi 2.78.1-dev.84a383f51 → 2.78.1
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 +7 -7
- package/dist/cli.js +55 -95
- package/dist/headless-query.d.ts +0 -22
- package/dist/headless-query.js +4 -24
- package/dist/headless.d.ts +0 -10
- package/dist/headless.js +1 -16
- package/dist/loader.js +10 -7
- package/dist/onboarding.d.ts +0 -10
- package/dist/onboarding.js +2 -2
- package/dist/provider-migrations.d.ts +2 -2
- package/dist/provider-migrations.js +2 -5
- package/dist/resource-loader.d.ts +2 -5
- package/dist/resource-loader.js +5 -28
- package/dist/resources/extensions/browser-tools/tests/browser-tools-integration.test.mjs +601 -0
- package/dist/resources/extensions/browser-tools/tests/browser-tools-unit.test.cjs +651 -0
- package/dist/resources/extensions/browser-tools/tests/capture-sharp-optional.test.cjs +91 -0
- package/dist/resources/extensions/gsd/auto/loop.js +0 -23
- package/dist/resources/extensions/gsd/auto/phases.js +2 -2
- package/dist/resources/extensions/gsd/auto/run-unit.js +1 -3
- package/dist/resources/extensions/gsd/auto/session.js +0 -3
- package/dist/resources/extensions/gsd/auto-recovery.js +4 -43
- package/dist/resources/extensions/gsd/auto-start.js +1 -1
- package/dist/resources/extensions/gsd/auto-tool-tracking.js +2 -2
- package/dist/resources/extensions/gsd/auto-worktree.js +0 -30
- package/dist/resources/extensions/gsd/auto.js +5 -14
- package/dist/resources/extensions/gsd/bootstrap/db-tools.js +2 -14
- package/dist/resources/extensions/gsd/bootstrap/exec-tools.js +5 -7
- package/dist/resources/extensions/gsd/bootstrap/query-tools.js +2 -2
- package/dist/resources/extensions/gsd/bootstrap/register-extension.js +4 -5
- package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +31 -94
- package/dist/resources/extensions/gsd/bootstrap/register-shortcuts.js +6 -11
- package/dist/resources/extensions/gsd/bootstrap/system-context.js +8 -34
- package/dist/resources/extensions/gsd/bootstrap/write-gate.js +2 -38
- package/dist/resources/extensions/gsd/commands/catalog.js +5 -69
- package/dist/resources/extensions/gsd/commands/handlers/core.js +1 -22
- package/dist/resources/extensions/gsd/commands-mcp-status.js +1 -3
- package/dist/resources/extensions/gsd/commands-prefs-wizard.js +1 -10
- package/dist/resources/extensions/gsd/dashboard-overlay.js +1 -1
- package/dist/resources/extensions/gsd/docs/preferences-reference.md +0 -4
- package/dist/resources/extensions/gsd/doctor-runtime-checks.js +1 -39
- package/dist/resources/extensions/gsd/error-classifier.js +1 -1
- package/dist/resources/extensions/gsd/forensics.js +2 -2
- package/dist/resources/extensions/gsd/git-service.js +5 -12
- package/dist/resources/extensions/gsd/gsd-db.js +2 -11
- package/dist/resources/extensions/gsd/guided-flow.js +23 -23
- package/dist/resources/extensions/gsd/memory-store.js +31 -66
- package/dist/resources/extensions/gsd/model-router.js +9 -114
- package/dist/resources/extensions/gsd/native-git-bridge.js +1 -7
- package/dist/resources/extensions/gsd/preferences-models.js +15 -91
- package/dist/resources/extensions/gsd/preferences-types.js +0 -2
- package/dist/resources/extensions/gsd/preferences-validation.js +0 -32
- package/dist/resources/extensions/gsd/preferences.js +3 -5
- package/dist/resources/extensions/gsd/prompt-loader.js +12 -23
- package/dist/resources/extensions/gsd/slice-parallel-orchestrator.js +3 -9
- package/dist/resources/extensions/gsd/state.js +0 -42
- package/dist/resources/extensions/gsd/templates/PREFERENCES.md +0 -1
- package/dist/resources/extensions/gsd/tests/auto-supervisor.test.mjs +53 -0
- package/dist/resources/extensions/gsd/tests/dist-redirect.mjs +112 -0
- package/dist/resources/extensions/gsd/tests/resolve-ts-hooks.mjs +23 -0
- package/dist/resources/extensions/gsd/tests/resolve-ts.mjs +5 -0
- package/dist/resources/extensions/gsd/tools/memory-tools.js +1 -18
- package/dist/resources/extensions/gsd/visualizer-overlay.js +1 -1
- package/dist/resources/extensions/gsd/watch/header-renderer.js +1 -3
- package/dist/resources/extensions/gsd/worktree-command.js +46 -26
- package/dist/resources/extensions/mcp-client/index.js +3 -6
- package/dist/resources/extensions/slash-commands/create-extension.js +22 -36
- package/dist/resources/skills/create-gsd-extension/SKILL.md +5 -9
- package/dist/resources/skills/create-gsd-extension/references/custom-commands.md +1 -1
- package/dist/resources/skills/create-gsd-extension/references/custom-rendering.md +5 -5
- package/dist/resources/skills/create-gsd-extension/references/custom-tools.md +4 -4
- package/dist/resources/skills/create-gsd-extension/references/custom-ui.md +6 -6
- package/dist/resources/skills/create-gsd-extension/references/events-reference.md +3 -3
- package/dist/resources/skills/create-gsd-extension/references/packaging-distribution.md +1 -1
- package/dist/resources/skills/create-gsd-extension/references/remote-execution-overrides.md +3 -3
- package/dist/resources/skills/create-gsd-extension/workflows/create-extension.md +12 -32
- package/dist/resources/skills/github-workflows/references/gh/tests/__init__.py +0 -0
- package/dist/resources/skills/github-workflows/references/gh/tests/test_github_project_setup.py +608 -0
- package/dist/rtk-shared.d.ts +0 -3
- package/dist/rtk-shared.js +0 -17
- package/dist/rtk.d.ts +5 -2
- package/dist/rtk.js +20 -3
- 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 +13 -13
- package/dist/web/standalone/.next/build-manifest.json +4 -4
- package/dist/web/standalone/.next/prerender-manifest.json +3 -3
- package/dist/web/standalone/.next/react-loadable-manifest.json +4 -44
- package/dist/web/standalone/.next/required-server-files.json +3 -3
- package/dist/web/standalone/.next/server/app/_global-error/page.js +3 -3
- 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.js +2 -2
- 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 +3 -3
- package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +3 -3
- 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 +3 -3
- 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_client-reference-manifest.js +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_client-reference-manifest.js +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_client-reference-manifest.js +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_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/browse-directories/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/browse-directories/route_client-reference-manifest.js +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_client-reference-manifest.js +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_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/dev-mode/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/dev-mode/route_client-reference-manifest.js +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_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/experimental/route.js +2 -2
- package/dist/web/standalone/.next/server/app/api/experimental/route_client-reference-manifest.js +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_client-reference-manifest.js +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_client-reference-manifest.js +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_client-reference-manifest.js +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_client-reference-manifest.js +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_client-reference-manifest.js +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_client-reference-manifest.js +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_client-reference-manifest.js +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_client-reference-manifest.js +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_client-reference-manifest.js +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_client-reference-manifest.js +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_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/preferences/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/preferences/route_client-reference-manifest.js +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_client-reference-manifest.js +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_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/remote-questions/route.js +2 -2
- package/dist/web/standalone/.next/server/app/api/remote-questions/route_client-reference-manifest.js +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_client-reference-manifest.js +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_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/session/events/route.js +2 -4
- package/dist/web/standalone/.next/server/app/api/session/events/route_client-reference-manifest.js +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_client-reference-manifest.js +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_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/shutdown/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/shutdown/route_client-reference-manifest.js +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_client-reference-manifest.js +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_client-reference-manifest.js +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_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/input/route.js +2 -2
- package/dist/web/standalone/.next/server/app/api/terminal/input/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/resize/route.js +2 -2
- package/dist/web/standalone/.next/server/app/api/terminal/resize/route_client-reference-manifest.js +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_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/stream/route.js +4 -4
- package/dist/web/standalone/.next/server/app/api/terminal/stream/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/upload/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/upload/route_client-reference-manifest.js +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_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/update/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/update/route_client-reference-manifest.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_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/index.html +1 -1
- package/dist/web/standalone/.next/server/app/index.rsc +4 -4
- 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 +4 -4
- 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 +3 -3
- package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/page.js +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/63.js +3 -3
- package/dist/web/standalone/.next/server/chunks/6897.js +1 -1
- 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/middleware.js +2 -2
- package/dist/web/standalone/.next/server/next-font-manifest.js +1 -1
- package/dist/web/standalone/.next/server/next-font-manifest.json +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/server/webpack-runtime.js +1 -1
- package/dist/web/standalone/.next/static/chunks/2826.e9f5195e91f9cad2.js +11 -0
- package/dist/web/standalone/.next/static/chunks/3621.fc7480022c972438.js +20 -0
- package/dist/web/standalone/.next/static/chunks/app/_not-found/{page-f2a7482d42a5614b.js → page-2f24283c162b6ab3.js} +1 -1
- package/dist/web/standalone/.next/static/chunks/app/{layout-a16c7a7ecdf0c2cf.js → layout-9ecfd95f343793f0.js} +1 -1
- package/dist/web/standalone/.next/static/chunks/app/page-151349214571e2b6.js +1 -0
- package/dist/web/standalone/.next/static/chunks/main-app-d3d4c336195465f9.js +1 -0
- package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/global-error-ab5a8926e07ec673.js +1 -0
- package/dist/web/standalone/.next/static/chunks/webpack-2e68521d7c82f7c2.js +1 -0
- package/dist/web/standalone/node_modules/node-pty/build/Makefile +2 -2
- package/dist/web/standalone/node_modules/node-pty/build/Release/pty.node +0 -0
- package/dist/web/standalone/node_modules/node-pty/build/pty.target.mk +14 -14
- package/dist/web/standalone/node_modules/node-pty/node-addon-api/node_addon_api.target.mk +14 -14
- package/dist/web/standalone/node_modules/node-pty/node-addon-api/node_addon_api_except.target.mk +14 -14
- package/dist/web/standalone/node_modules/node-pty/node-addon-api/node_addon_api_maybe.target.mk +14 -14
- package/dist/web/standalone/package.json +1 -2
- package/dist/web/standalone/server.js +1 -1
- package/package.json +1 -1
- package/packages/mcp-server/dist/workflow-tools.d.ts.map +1 -1
- package/packages/mcp-server/dist/workflow-tools.js +46 -74
- package/packages/mcp-server/dist/workflow-tools.js.map +1 -1
- package/packages/mcp-server/src/workflow-tools.test.ts +0 -26
- package/packages/mcp-server/src/workflow-tools.ts +58 -93
- package/packages/mcp-server/tsconfig.tsbuildinfo +1 -1
- package/packages/pi-agent-core/tsconfig.tsbuildinfo +1 -1
- package/packages/pi-ai/dist/providers/anthropic-shared.d.ts.map +1 -1
- package/packages/pi-ai/dist/providers/anthropic-shared.js +19 -48
- package/packages/pi-ai/dist/providers/anthropic-shared.js.map +1 -1
- package/packages/pi-ai/dist/types.d.ts +0 -13
- package/packages/pi-ai/dist/types.d.ts.map +1 -1
- package/packages/pi-ai/dist/types.js.map +1 -1
- package/packages/pi-ai/dist/utils/repair-tool-json.d.ts.map +1 -1
- package/packages/pi-ai/dist/utils/repair-tool-json.js +3 -24
- package/packages/pi-ai/dist/utils/repair-tool-json.js.map +1 -1
- package/packages/pi-ai/dist/utils/tests/repair-tool-json.test.js +0 -26
- package/packages/pi-ai/dist/utils/tests/repair-tool-json.test.js.map +1 -1
- package/packages/pi-ai/src/providers/anthropic-shared.ts +20 -52
- package/packages/pi-ai/src/types.ts +0 -13
- package/packages/pi-ai/src/utils/repair-tool-json.ts +3 -24
- package/packages/pi-ai/src/utils/tests/repair-tool-json.test.ts +0 -32
- package/packages/pi-ai/tsconfig.tsbuildinfo +1 -1
- package/packages/pi-coding-agent/dist/core/agent-session.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/agent-session.js +0 -6
- package/packages/pi-coding-agent/dist/core/agent-session.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/messages.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/messages.js +0 -4
- package/packages/pi-coding-agent/dist/core/messages.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/model-registry-auth-mode.test.js +2 -19
- 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.d.ts +0 -10
- package/packages/pi-coding-agent/dist/core/model-registry.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/model-registry.js +0 -18
- package/packages/pi-coding-agent/dist/core/model-registry.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/system-prompt.d.ts +0 -13
- package/packages/pi-coding-agent/dist/core/system-prompt.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/system-prompt.js +16 -20
- package/packages/pi-coding-agent/dist/core/system-prompt.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/input-controller.js +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/input-controller.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/input-controller.test.js +1 -14
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/input-controller.test.js.map +1 -1
- package/packages/pi-coding-agent/src/core/agent-session.ts +0 -7
- package/packages/pi-coding-agent/src/core/messages.ts +0 -4
- package/packages/pi-coding-agent/src/core/model-registry-auth-mode.test.ts +2 -32
- package/packages/pi-coding-agent/src/core/model-registry.ts +0 -21
- package/packages/pi-coding-agent/src/core/system-prompt.ts +15 -33
- package/packages/pi-coding-agent/src/modes/interactive/controllers/input-controller.test.ts +1 -17
- package/packages/pi-coding-agent/src/modes/interactive/controllers/input-controller.ts +1 -1
- package/packages/pi-coding-agent/tsconfig.tsbuildinfo +1 -1
- package/packages/pi-tui/dist/__tests__/autocomplete.test.js +3 -17
- package/packages/pi-tui/dist/__tests__/autocomplete.test.js.map +1 -1
- package/packages/pi-tui/src/__tests__/autocomplete.test.ts +3 -20
- package/packages/pi-tui/tsconfig.tsbuildinfo +1 -1
- package/src/resources/extensions/gsd/auto/loop.ts +2 -24
- package/src/resources/extensions/gsd/auto/phases.ts +3 -3
- package/src/resources/extensions/gsd/auto/run-unit.ts +1 -3
- package/src/resources/extensions/gsd/auto/session.ts +0 -3
- package/src/resources/extensions/gsd/auto/types.ts +0 -1
- package/src/resources/extensions/gsd/auto-recovery.ts +8 -46
- package/src/resources/extensions/gsd/auto-start.ts +1 -1
- package/src/resources/extensions/gsd/auto-tool-tracking.ts +4 -2
- package/src/resources/extensions/gsd/auto-worktree.ts +0 -38
- package/src/resources/extensions/gsd/auto.ts +4 -14
- package/src/resources/extensions/gsd/bootstrap/db-tools.ts +13 -15
- package/src/resources/extensions/gsd/bootstrap/exec-tools.ts +7 -8
- package/src/resources/extensions/gsd/bootstrap/query-tools.ts +2 -2
- package/src/resources/extensions/gsd/bootstrap/register-extension.ts +9 -10
- package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +31 -102
- package/src/resources/extensions/gsd/bootstrap/register-shortcuts.ts +6 -12
- package/src/resources/extensions/gsd/bootstrap/system-context.ts +8 -39
- package/src/resources/extensions/gsd/bootstrap/write-gate.ts +11 -39
- package/src/resources/extensions/gsd/commands/catalog.ts +5 -75
- package/src/resources/extensions/gsd/commands/handlers/core.ts +1 -22
- package/src/resources/extensions/gsd/commands-mcp-status.ts +1 -3
- package/src/resources/extensions/gsd/commands-prefs-wizard.ts +1 -15
- package/src/resources/extensions/gsd/dashboard-overlay.ts +1 -1
- package/src/resources/extensions/gsd/docs/preferences-reference.md +0 -4
- package/src/resources/extensions/gsd/doctor-runtime-checks.ts +1 -39
- package/src/resources/extensions/gsd/doctor-types.ts +1 -3
- package/src/resources/extensions/gsd/error-classifier.ts +1 -1
- package/src/resources/extensions/gsd/forensics.ts +2 -2
- package/src/resources/extensions/gsd/git-service.ts +5 -13
- package/src/resources/extensions/gsd/gsd-db.ts +2 -12
- package/src/resources/extensions/gsd/guided-flow.ts +25 -25
- package/src/resources/extensions/gsd/memory-store.ts +28 -81
- package/src/resources/extensions/gsd/model-router.ts +9 -172
- package/src/resources/extensions/gsd/native-git-bridge.ts +1 -7
- package/src/resources/extensions/gsd/preferences-models.ts +15 -101
- package/src/resources/extensions/gsd/preferences-types.ts +0 -6
- package/src/resources/extensions/gsd/preferences-validation.ts +0 -35
- package/src/resources/extensions/gsd/preferences.ts +2 -16
- package/src/resources/extensions/gsd/prompt-loader.ts +12 -26
- package/src/resources/extensions/gsd/slice-parallel-orchestrator.ts +3 -9
- package/src/resources/extensions/gsd/state.ts +0 -42
- package/src/resources/extensions/gsd/templates/PREFERENCES.md +0 -1
- package/src/resources/extensions/gsd/tests/auto-loop.test.ts +1 -178
- package/src/resources/extensions/gsd/tests/auto-recovery.test.ts +0 -58
- package/src/resources/extensions/gsd/tests/auto-session-encapsulation.test.ts +5 -9
- package/src/resources/extensions/gsd/tests/auto-supervisor.test.mjs +4 -21
- package/src/resources/extensions/gsd/tests/bootstrap-derive-state-db-open.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/budget-prediction.test.ts +211 -138
- package/src/resources/extensions/gsd/tests/complete-slice-verification-gate.test.ts +59 -142
- package/src/resources/extensions/gsd/tests/complete-slice.test.ts +4 -7
- package/src/resources/extensions/gsd/tests/completed-at-reconcile.test.ts +32 -89
- package/src/resources/extensions/gsd/tests/copy-planning-artifacts-samepath.test.ts +22 -0
- package/src/resources/extensions/gsd/tests/custom-engine-loop-integration.test.ts +23 -41
- package/src/resources/extensions/gsd/tests/db-path-worktree-symlink.test.ts +43 -3
- package/src/resources/extensions/gsd/tests/debug-logger.test.ts +3 -5
- package/src/resources/extensions/gsd/tests/discuss-empty-db-fallback.test.ts +87 -22
- package/src/resources/extensions/gsd/tests/discuss-queued-milestones.test.ts +118 -7
- package/src/resources/extensions/gsd/tests/discuss-slice-structured-questions.test.ts +47 -0
- package/src/resources/extensions/gsd/tests/discuss-tool-scope-leak.test.ts +60 -18
- package/src/resources/extensions/gsd/tests/double-merge-guard.test.ts +76 -14
- package/src/resources/extensions/gsd/tests/empty-content-abort-loop.test.ts +75 -0
- package/src/resources/extensions/gsd/tests/false-degraded-mode-warning.test.ts +83 -22
- package/src/resources/extensions/gsd/tests/finalize-timeout-guard.test.ts +63 -1
- package/src/resources/extensions/gsd/tests/forensics-stuck-loops.test.ts +1 -26
- package/src/resources/extensions/gsd/tests/gsd-db.test.ts +0 -30
- package/src/resources/extensions/gsd/tests/headless-answers.test.ts +4 -14
- package/src/resources/extensions/gsd/tests/health-widget.test.ts +12 -22
- package/src/resources/extensions/gsd/tests/init-prefs-routing.test.ts +1 -64
- package/src/resources/extensions/gsd/tests/integration/auto-worktree.test.ts +0 -22
- package/src/resources/extensions/gsd/tests/integration/token-savings.test.ts +23 -0
- package/src/resources/extensions/gsd/tests/memory-store.test.ts +0 -128
- package/src/resources/extensions/gsd/tests/memory-tools.test.ts +1 -33
- package/src/resources/extensions/gsd/tests/model-router.test.ts +8 -169
- package/src/resources/extensions/gsd/tests/orphaned-worktree-audit.test.ts +0 -8
- package/src/resources/extensions/gsd/tests/parallel-crash-recovery.test.ts +43 -32
- package/src/resources/extensions/gsd/tests/phases-merge-error-stops-auto.test.ts +10 -4
- package/src/resources/extensions/gsd/tests/preferences.test.ts +0 -127
- package/src/resources/extensions/gsd/tests/prompt-step-ordering.test.ts +0 -16
- package/src/resources/extensions/gsd/tests/provider-errors.test.ts +0 -7
- package/src/resources/extensions/gsd/tests/quick-turn-end-cleanup.test.ts +6 -6
- package/src/resources/extensions/gsd/tests/session-start-footer.test.ts +19 -168
- package/src/resources/extensions/gsd/tests/slice-parallel-orchestrator.test.ts +1 -7
- package/src/resources/extensions/gsd/tests/smart-entry-complete.test.ts +1 -23
- package/src/resources/extensions/gsd/tests/token-profile.test.ts +4 -51
- package/src/resources/extensions/gsd/tests/turn-epoch.test.ts +16 -7
- package/src/resources/extensions/gsd/tests/unstructured-continue-context-injection.test.ts +7 -5
- package/src/resources/extensions/gsd/tests/uok-gitops-turn-action.test.ts +1 -15
- package/src/resources/extensions/gsd/tests/visualizer-overlay.test.ts +6 -6
- package/src/resources/extensions/gsd/tests/write-gate-planning-unit.test.ts +0 -15
- package/src/resources/extensions/gsd/tools/memory-tools.ts +1 -17
- package/src/resources/extensions/gsd/unit-context-manifest.ts +8 -8
- package/src/resources/extensions/gsd/visualizer-overlay.ts +1 -1
- package/src/resources/extensions/gsd/watch/header-renderer.ts +1 -3
- package/src/resources/extensions/gsd/workflow-logger.ts +0 -1
- package/src/resources/extensions/gsd/worktree-command.ts +44 -31
- package/src/resources/extensions/mcp-client/index.ts +3 -6
- package/src/resources/extensions/slash-commands/create-extension.ts +24 -38
- package/src/resources/skills/create-gsd-extension/SKILL.md +5 -9
- package/src/resources/skills/create-gsd-extension/references/custom-commands.md +1 -1
- package/src/resources/skills/create-gsd-extension/references/custom-rendering.md +5 -5
- package/src/resources/skills/create-gsd-extension/references/custom-tools.md +4 -4
- package/src/resources/skills/create-gsd-extension/references/custom-ui.md +6 -6
- package/src/resources/skills/create-gsd-extension/references/events-reference.md +3 -3
- package/src/resources/skills/create-gsd-extension/references/packaging-distribution.md +1 -1
- package/src/resources/skills/create-gsd-extension/references/remote-execution-overrides.md +3 -3
- package/src/resources/skills/create-gsd-extension/templates/extension-skeleton.ts +2 -2
- package/src/resources/skills/create-gsd-extension/templates/stateful-tool-skeleton.ts +3 -3
- package/src/resources/skills/create-gsd-extension/workflows/create-extension.md +12 -32
- package/dist/cli-policy.d.ts +0 -13
- package/dist/cli-policy.js +0 -17
- package/dist/resources/.managed-resources-content-hash +0 -1
- package/dist/resources/extensions/gsd/auto-runtime-state.js +0 -31
- package/dist/resources/extensions/gsd/milestone-id-reservation.js +0 -36
- package/dist/resources/extensions/gsd/worktree-session-state.js +0 -33
- package/dist/runtime-checks.d.ts +0 -27
- package/dist/runtime-checks.js +0 -38
- package/dist/web/standalone/.next/static/chunks/2556.0527fea66e123b7f.js +0 -1
- package/dist/web/standalone/.next/static/chunks/2824.08296bc2f9654698.js +0 -1
- package/dist/web/standalone/.next/static/chunks/3026.3af53b279375f082.js +0 -1
- package/dist/web/standalone/.next/static/chunks/315.6f68ae79b67d25cf.js +0 -1
- package/dist/web/standalone/.next/static/chunks/3497.4bfc60a3b3dea717.js +0 -1
- package/dist/web/standalone/.next/static/chunks/5516.4a07c872b5c3a663.js +0 -1
- package/dist/web/standalone/.next/static/chunks/8336.31b019697882acfb.js +0 -10
- package/dist/web/standalone/.next/static/chunks/8845.c9702695e8c5a9c5.js +0 -2
- package/dist/web/standalone/.next/static/chunks/9058.01ef3a463bda88f1.js +0 -20
- package/dist/web/standalone/.next/static/chunks/9441.1081da1125d1764f.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/page-9bf2e0c50fb2ca05.js +0 -1
- package/dist/web/standalone/.next/static/chunks/main-app-fdab67f7802d7832.js +0 -1
- package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/global-error-459824ffb8c323dd.js +0 -1
- package/dist/web/standalone/.next/static/chunks/webpack-f9f0dc45e4f3ac10.js +0 -1
- package/dist/worktree-status-banner.d.ts +0 -1
- package/dist/worktree-status-banner.js +0 -132
- package/packages/mcp-server/dist/alias-telemetry.d.ts +0 -8
- package/packages/mcp-server/dist/alias-telemetry.d.ts.map +0 -1
- package/packages/mcp-server/dist/alias-telemetry.js +0 -30
- package/packages/mcp-server/dist/alias-telemetry.js.map +0 -1
- package/packages/mcp-server/src/alias-telemetry.test.ts +0 -78
- package/packages/mcp-server/src/alias-telemetry.ts +0 -30
- package/packages/pi-ai/dist/providers/anthropic-shared.cache-breakpoint.test.d.ts +0 -2
- package/packages/pi-ai/dist/providers/anthropic-shared.cache-breakpoint.test.d.ts.map +0 -1
- package/packages/pi-ai/dist/providers/anthropic-shared.cache-breakpoint.test.js +0 -231
- package/packages/pi-ai/dist/providers/anthropic-shared.cache-breakpoint.test.js.map +0 -1
- package/packages/pi-ai/src/providers/anthropic-shared.cache-breakpoint.test.ts +0 -289
- package/packages/pi-coding-agent/dist/core/token-telemetry.d.ts +0 -37
- package/packages/pi-coding-agent/dist/core/token-telemetry.d.ts.map +0 -1
- package/packages/pi-coding-agent/dist/core/token-telemetry.js +0 -49
- package/packages/pi-coding-agent/dist/core/token-telemetry.js.map +0 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/tool-card-cleanup-and-success-runtime.test.d.ts +0 -2
- package/packages/pi-coding-agent/dist/modes/interactive/components/tool-card-cleanup-and-success-runtime.test.d.ts.map +0 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/tool-card-cleanup-and-success-runtime.test.js +0 -133
- package/packages/pi-coding-agent/dist/modes/interactive/components/tool-card-cleanup-and-success-runtime.test.js.map +0 -1
- package/packages/pi-coding-agent/dist/tests/system-prompt-cache-stability.test.d.ts +0 -2
- package/packages/pi-coding-agent/dist/tests/system-prompt-cache-stability.test.d.ts.map +0 -1
- package/packages/pi-coding-agent/dist/tests/system-prompt-cache-stability.test.js +0 -78
- package/packages/pi-coding-agent/dist/tests/system-prompt-cache-stability.test.js.map +0 -1
- package/packages/pi-coding-agent/dist/tests/token-telemetry.test.d.ts +0 -2
- package/packages/pi-coding-agent/dist/tests/token-telemetry.test.d.ts.map +0 -1
- package/packages/pi-coding-agent/dist/tests/token-telemetry.test.js +0 -181
- package/packages/pi-coding-agent/dist/tests/token-telemetry.test.js.map +0 -1
- package/packages/pi-coding-agent/src/core/token-telemetry.ts +0 -77
- package/packages/pi-coding-agent/src/modes/interactive/components/tool-card-cleanup-and-success-runtime.test.ts +0 -212
- package/packages/pi-coding-agent/src/tests/system-prompt-cache-stability.test.ts +0 -102
- package/packages/pi-coding-agent/src/tests/token-telemetry.test.ts +0 -200
- package/packages/pi-tui/dist/components/__tests__/leak-fixes-runtime.test.d.ts +0 -2
- package/packages/pi-tui/dist/components/__tests__/leak-fixes-runtime.test.d.ts.map +0 -1
- package/packages/pi-tui/dist/components/__tests__/leak-fixes-runtime.test.js +0 -161
- package/packages/pi-tui/dist/components/__tests__/leak-fixes-runtime.test.js.map +0 -1
- package/packages/pi-tui/src/components/__tests__/leak-fixes-runtime.test.ts +0 -219
- package/src/resources/extensions/gsd/auto-runtime-state.ts +0 -51
- package/src/resources/extensions/gsd/milestone-id-reservation.ts +0 -47
- package/src/resources/extensions/gsd/tests/deferred-milestone-dir-4996.test.ts +0 -116
- package/src/resources/extensions/gsd/tests/doctor-orphan-milestone-4996.test.ts +0 -100
- package/src/resources/extensions/gsd/tests/ensure-preconditions-guard-4996.test.ts +0 -93
- package/src/resources/extensions/gsd/tests/find-missing-summaries-closed-runtime.test.ts +0 -47
- package/src/resources/extensions/gsd/tests/gitignore-bg-shell-runtime.test.ts +0 -63
- package/src/resources/extensions/gsd/tests/gsd-no-project-error-runtime.test.ts +0 -81
- package/src/resources/extensions/gsd/tests/help-menu-coverage.test.ts +0 -57
- package/src/resources/extensions/gsd/tests/import-done-milestones-runtime.test.ts +0 -145
- package/src/resources/extensions/gsd/tests/merge-self-branch-guard.test.ts +0 -124
- package/src/resources/extensions/gsd/tests/milestone-id-gap-reuse-4996.test.ts +0 -152
- package/src/resources/extensions/gsd/tests/native-git-infra-errors.test.ts +0 -50
- package/src/resources/extensions/gsd/tests/register-hooks-compaction-checkpoint.test.ts +0 -93
- package/src/resources/extensions/gsd/tests/system-context-message-routing.test.ts +0 -101
- package/src/resources/extensions/gsd/worktree-session-state.ts +0 -35
- package/src/resources/extensions/mcp-client/tests/global-config.test.ts +0 -91
- package/src/resources/skills/create-gsd-extension/templates/templates.test.ts +0 -58
- /package/dist/web/standalone/.next/static/{UF5VF4F1tB0miEtJS7LyX → 7afp7gq8-DVbxum83zRQ-}/_buildManifest.js +0 -0
- /package/dist/web/standalone/.next/static/{UF5VF4F1tB0miEtJS7LyX → 7afp7gq8-DVbxum83zRQ-}/_ssgManifest.js +0 -0
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
import test from "node:test";
|
|
2
|
-
import assert from "node:assert/strict";
|
|
3
|
-
import { chmodSync, mkdirSync, mkdtempSync, rmSync, writeFileSync } from "node:fs";
|
|
4
|
-
import { tmpdir } from "node:os";
|
|
5
|
-
import { join } from "node:path";
|
|
6
|
-
|
|
7
|
-
import { git } from "./test-utils.ts";
|
|
8
|
-
import { GSD_GIT_ERROR } from "../errors.js";
|
|
9
|
-
|
|
10
|
-
test("nativeAddAllWithExclusions preserves infrastructure failures from git add", async () => {
|
|
11
|
-
const base = mkdtempSync(join(tmpdir(), "gsd-native-git-infra-"));
|
|
12
|
-
const repo = join(base, "repo");
|
|
13
|
-
const bin = join(base, "bin");
|
|
14
|
-
mkdirSync(repo);
|
|
15
|
-
mkdirSync(bin);
|
|
16
|
-
|
|
17
|
-
const fakeGit = join(bin, "git");
|
|
18
|
-
writeFileSync(
|
|
19
|
-
fakeGit,
|
|
20
|
-
"#!/bin/sh\n" +
|
|
21
|
-
"echo 'fatal: ENFILE: file table overflow' >&2\n" +
|
|
22
|
-
"exit 1\n",
|
|
23
|
-
"utf-8",
|
|
24
|
-
);
|
|
25
|
-
chmodSync(fakeGit, 0o755);
|
|
26
|
-
|
|
27
|
-
const originalPath = process.env.PATH ?? "";
|
|
28
|
-
try {
|
|
29
|
-
git(repo, "init");
|
|
30
|
-
git(repo, "config", "user.email", "test@example.com");
|
|
31
|
-
git(repo, "config", "user.name", "Test User");
|
|
32
|
-
writeFileSync(join(repo, "README.md"), "# Test\n", "utf-8");
|
|
33
|
-
|
|
34
|
-
process.env.PATH = `${bin}:${originalPath}`;
|
|
35
|
-
const { nativeAddAllWithExclusions } = await import("../native-git-bridge.ts");
|
|
36
|
-
|
|
37
|
-
assert.throws(
|
|
38
|
-
() => nativeAddAllWithExclusions(repo, [".gsd/activity/"]),
|
|
39
|
-
(err) => {
|
|
40
|
-
const shaped = err as { code?: string; stderr?: string; message?: string };
|
|
41
|
-
assert.notEqual(shaped.code, GSD_GIT_ERROR);
|
|
42
|
-
assert.match(`${shaped.stderr ?? ""}${shaped.message ?? ""}`, /ENFILE/);
|
|
43
|
-
return true;
|
|
44
|
-
},
|
|
45
|
-
);
|
|
46
|
-
} finally {
|
|
47
|
-
process.env.PATH = originalPath;
|
|
48
|
-
rmSync(base, { recursive: true, force: true });
|
|
49
|
-
}
|
|
50
|
-
});
|
|
@@ -1,93 +0,0 @@
|
|
|
1
|
-
import test from "node:test";
|
|
2
|
-
import assert from "node:assert/strict";
|
|
3
|
-
import { existsSync, mkdirSync, mkdtempSync, readFileSync, rmSync, writeFileSync } from "node:fs";
|
|
4
|
-
import { join } from "node:path";
|
|
5
|
-
import { tmpdir } from "node:os";
|
|
6
|
-
|
|
7
|
-
import { registerHooks } from "../bootstrap/register-hooks.ts";
|
|
8
|
-
import { parseContinue } from "../files.ts";
|
|
9
|
-
import { closeDatabase } from "../gsd-db.ts";
|
|
10
|
-
import { deriveState, invalidateStateCache } from "../state.ts";
|
|
11
|
-
|
|
12
|
-
function createPlanningFixtureBase(): string {
|
|
13
|
-
const base = mkdtempSync(join(tmpdir(), "gsd-compact-checkpoint-"));
|
|
14
|
-
const milestoneDir = join(base, ".gsd", "milestones", "M001");
|
|
15
|
-
const sliceDir = join(milestoneDir, "slices", "S01");
|
|
16
|
-
mkdirSync(sliceDir, { recursive: true });
|
|
17
|
-
|
|
18
|
-
writeFileSync(
|
|
19
|
-
join(milestoneDir, "M001-ROADMAP.md"),
|
|
20
|
-
`# M001: Test Milestone
|
|
21
|
-
|
|
22
|
-
**Vision:** Validate compaction checkpointing.
|
|
23
|
-
|
|
24
|
-
## Slices
|
|
25
|
-
|
|
26
|
-
- [ ] **S01: Test Slice** \`risk:low\` \`depends:[]\`
|
|
27
|
-
> After this: Slice is done.
|
|
28
|
-
`,
|
|
29
|
-
);
|
|
30
|
-
|
|
31
|
-
writeFileSync(
|
|
32
|
-
join(sliceDir, "S01-PLAN.md"),
|
|
33
|
-
`# S01: Test Slice
|
|
34
|
-
|
|
35
|
-
**Goal:** Validate planning checkpoint.
|
|
36
|
-
**Demo:** Checkpoint exists after compaction.
|
|
37
|
-
|
|
38
|
-
## Tasks
|
|
39
|
-
`,
|
|
40
|
-
);
|
|
41
|
-
|
|
42
|
-
return base;
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
test("register-hooks writes CONTINUE checkpoint during planning phase without active task (#4258)", async (t) => {
|
|
46
|
-
const base = createPlanningFixtureBase();
|
|
47
|
-
const originalCwd = process.cwd();
|
|
48
|
-
process.chdir(base);
|
|
49
|
-
invalidateStateCache();
|
|
50
|
-
closeDatabase();
|
|
51
|
-
|
|
52
|
-
t.after(() => {
|
|
53
|
-
invalidateStateCache();
|
|
54
|
-
closeDatabase();
|
|
55
|
-
process.chdir(originalCwd);
|
|
56
|
-
rmSync(base, { recursive: true, force: true });
|
|
57
|
-
});
|
|
58
|
-
|
|
59
|
-
const state = await deriveState(base);
|
|
60
|
-
assert.equal(state.phase, "planning", "fixture should derive planning phase");
|
|
61
|
-
assert.equal(state.activeMilestone?.id, "M001", "fixture should have active milestone");
|
|
62
|
-
assert.equal(state.activeSlice?.id, "S01", "fixture should have active slice");
|
|
63
|
-
assert.equal(state.activeTask, null, "fixture should have no active task");
|
|
64
|
-
|
|
65
|
-
const handlers = new Map<string, Array<(event: any, ctx?: any) => Promise<any> | any>>();
|
|
66
|
-
const pi = {
|
|
67
|
-
on(event: string, handler: (event: any, ctx?: any) => Promise<any> | any) {
|
|
68
|
-
const existing = handlers.get(event) ?? [];
|
|
69
|
-
existing.push(handler);
|
|
70
|
-
handlers.set(event, existing);
|
|
71
|
-
},
|
|
72
|
-
} as any;
|
|
73
|
-
|
|
74
|
-
registerHooks(pi, []);
|
|
75
|
-
|
|
76
|
-
const compactHandlers = handlers.get("session_before_compact");
|
|
77
|
-
assert.ok(compactHandlers && compactHandlers.length > 0, "session_before_compact handler should be registered");
|
|
78
|
-
|
|
79
|
-
for (const handler of compactHandlers ?? []) {
|
|
80
|
-
await handler({});
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
const continuePath = join(base, ".gsd", "milestones", "M001", "slices", "S01", "S01-CONTINUE.md");
|
|
84
|
-
assert.ok(existsSync(continuePath), "compaction should create slice CONTINUE checkpoint");
|
|
85
|
-
|
|
86
|
-
const parsed = parseContinue(readFileSync(continuePath, "utf-8"));
|
|
87
|
-
assert.equal(parsed.frontmatter.milestone, "M001");
|
|
88
|
-
assert.equal(parsed.frontmatter.slice, "S01");
|
|
89
|
-
assert.equal(parsed.frontmatter.task, "none", "planning checkpoint should use non-task placeholder");
|
|
90
|
-
assert.equal(parsed.frontmatter.status, "compacted");
|
|
91
|
-
assert.match(parsed.completedWork, /planning phase/i, "completed-work should capture non-executing phase context");
|
|
92
|
-
assert.match(parsed.nextAction, /slice S01/i, "next action should route resume to the active slice");
|
|
93
|
-
});
|
|
@@ -1,101 +0,0 @@
|
|
|
1
|
-
// GSD bootstrap + system-context-message-routing.test — regression coverage
|
|
2
|
-
// for #5019. `memoryBlock` is FTS-queried against the user prompt and changes
|
|
3
|
-
// per call; embedding it in the cached system prefix invalidates Anthropic
|
|
4
|
-
// prompt-cache hits on every request. The fix routes memory through the
|
|
5
|
-
// existing context-message channel (volatile user-message suffix) and combines
|
|
6
|
-
// it with any active guided-execute or forensics injection.
|
|
7
|
-
|
|
8
|
-
import { describe, test } from "node:test";
|
|
9
|
-
import assert from "node:assert/strict";
|
|
10
|
-
|
|
11
|
-
import { buildContextMessage } from "../bootstrap/system-context.ts";
|
|
12
|
-
|
|
13
|
-
describe("buildContextMessage (#5019 — memory routing)", () => {
|
|
14
|
-
test("returns null when nothing to inject", () => {
|
|
15
|
-
const result = buildContextMessage({
|
|
16
|
-
memoryBlock: "",
|
|
17
|
-
injection: null,
|
|
18
|
-
forensicsInjection: null,
|
|
19
|
-
});
|
|
20
|
-
assert.equal(result, null);
|
|
21
|
-
});
|
|
22
|
-
|
|
23
|
-
test("whitespace-only memoryBlock counts as empty", () => {
|
|
24
|
-
const result = buildContextMessage({
|
|
25
|
-
memoryBlock: " \n\n ",
|
|
26
|
-
injection: null,
|
|
27
|
-
forensicsInjection: null,
|
|
28
|
-
});
|
|
29
|
-
assert.equal(result, null);
|
|
30
|
-
});
|
|
31
|
-
|
|
32
|
-
test("memory-only path emits gsd-memory message with trimmed content", () => {
|
|
33
|
-
const result = buildContextMessage({
|
|
34
|
-
memoryBlock: "\n\n[MEMORY]\nrule one\nrule two\n\n",
|
|
35
|
-
injection: null,
|
|
36
|
-
forensicsInjection: null,
|
|
37
|
-
});
|
|
38
|
-
assert.ok(result, "expected a context message");
|
|
39
|
-
assert.equal(result.customType, "gsd-memory");
|
|
40
|
-
assert.equal(result.content, "[MEMORY]\nrule one\nrule two");
|
|
41
|
-
assert.equal(result.display, false);
|
|
42
|
-
});
|
|
43
|
-
|
|
44
|
-
test("guided-execute injection alone emits gsd-guided-context", () => {
|
|
45
|
-
const result = buildContextMessage({
|
|
46
|
-
memoryBlock: "",
|
|
47
|
-
injection: "[GUIDED]\nexecute T01",
|
|
48
|
-
forensicsInjection: null,
|
|
49
|
-
});
|
|
50
|
-
assert.ok(result);
|
|
51
|
-
assert.equal(result.customType, "gsd-guided-context");
|
|
52
|
-
assert.equal(result.content, "[GUIDED]\nexecute T01");
|
|
53
|
-
});
|
|
54
|
-
|
|
55
|
-
test("forensics injection alone emits gsd-forensics", () => {
|
|
56
|
-
const result = buildContextMessage({
|
|
57
|
-
memoryBlock: "",
|
|
58
|
-
injection: null,
|
|
59
|
-
forensicsInjection: "[FORENSICS]\ninvestigation context",
|
|
60
|
-
});
|
|
61
|
-
assert.ok(result);
|
|
62
|
-
assert.equal(result.customType, "gsd-forensics");
|
|
63
|
-
assert.equal(result.content, "[FORENSICS]\ninvestigation context");
|
|
64
|
-
});
|
|
65
|
-
|
|
66
|
-
test("memory + guided injection: memory prepended, customType is gsd-guided-context", () => {
|
|
67
|
-
const result = buildContextMessage({
|
|
68
|
-
memoryBlock: "[MEMORY]\nrule one",
|
|
69
|
-
injection: "[GUIDED]\nexecute T01",
|
|
70
|
-
forensicsInjection: null,
|
|
71
|
-
});
|
|
72
|
-
assert.ok(result);
|
|
73
|
-
assert.equal(result.customType, "gsd-guided-context");
|
|
74
|
-
assert.equal(result.content, "[MEMORY]\nrule one\n\n[GUIDED]\nexecute T01");
|
|
75
|
-
});
|
|
76
|
-
|
|
77
|
-
test("memory + forensics: memory prepended, customType is gsd-forensics", () => {
|
|
78
|
-
const result = buildContextMessage({
|
|
79
|
-
memoryBlock: "[MEMORY]\nrule one",
|
|
80
|
-
injection: null,
|
|
81
|
-
forensicsInjection: "[FORENSICS]\ninvestigation context",
|
|
82
|
-
});
|
|
83
|
-
assert.ok(result);
|
|
84
|
-
assert.equal(result.customType, "gsd-forensics");
|
|
85
|
-
assert.equal(result.content, "[MEMORY]\nrule one\n\n[FORENSICS]\ninvestigation context");
|
|
86
|
-
});
|
|
87
|
-
|
|
88
|
-
test("guided takes precedence over forensics when both are somehow present", () => {
|
|
89
|
-
// The caller in buildBeforeAgentStartResult already gates forensics on
|
|
90
|
-
// `!injection`, but the helper's documented priority is guided > forensics.
|
|
91
|
-
// Test the contract directly so a future refactor can't silently flip it.
|
|
92
|
-
const result = buildContextMessage({
|
|
93
|
-
memoryBlock: "",
|
|
94
|
-
injection: "[GUIDED]",
|
|
95
|
-
forensicsInjection: "[FORENSICS]",
|
|
96
|
-
});
|
|
97
|
-
assert.ok(result);
|
|
98
|
-
assert.equal(result.customType, "gsd-guided-context");
|
|
99
|
-
assert.equal(result.content, "[GUIDED]");
|
|
100
|
-
});
|
|
101
|
-
});
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
// GSD worktree session state
|
|
2
|
-
let originalCwd: string | null = null;
|
|
3
|
-
|
|
4
|
-
export function getWorktreeOriginalCwd(): string | null {
|
|
5
|
-
return originalCwd;
|
|
6
|
-
}
|
|
7
|
-
|
|
8
|
-
export function setWorktreeOriginalCwd(cwd: string): void {
|
|
9
|
-
originalCwd = cwd;
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
export function clearWorktreeOriginalCwd(): void {
|
|
13
|
-
originalCwd = null;
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
export function ensureWorktreeOriginalCwdFromPath(cwd: string = process.cwd()): string | null {
|
|
17
|
-
if (originalCwd) return originalCwd;
|
|
18
|
-
const marker = `${/\\/.test(cwd) ? "\\" : "/"}.gsd${/\\/.test(cwd) ? "\\" : "/"}worktrees${/\\/.test(cwd) ? "\\" : "/"}`;
|
|
19
|
-
const markerIdx = cwd.indexOf(marker);
|
|
20
|
-
if (markerIdx !== -1) {
|
|
21
|
-
originalCwd = cwd.slice(0, markerIdx);
|
|
22
|
-
}
|
|
23
|
-
return originalCwd;
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
export function getActiveWorktreeName(): string | null {
|
|
27
|
-
if (!originalCwd) return null;
|
|
28
|
-
const cwd = process.cwd();
|
|
29
|
-
const wtDir = `${originalCwd.replace(/[\\/]+$/, "")}/.gsd/worktrees`.replaceAll("\\", "/");
|
|
30
|
-
const normalizedCwd = cwd.replaceAll("\\", "/");
|
|
31
|
-
if (!normalizedCwd.startsWith(`${wtDir}/`)) return null;
|
|
32
|
-
const rel = normalizedCwd.slice(wtDir.length + 1);
|
|
33
|
-
const name = rel.split("/")[0];
|
|
34
|
-
return name || null;
|
|
35
|
-
}
|
|
@@ -1,91 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Regression test for #4757 — readConfigs() must also read the global
|
|
3
|
-
* ~/.gsd/mcp.json (resolved as $GSD_HOME/mcp.json when GSD_HOME is set).
|
|
4
|
-
*
|
|
5
|
-
* Behaviour test against the exported getServerConfig — no source grep.
|
|
6
|
-
* The fixture is anchored via $GSD_HOME so the test never touches the
|
|
7
|
-
* developer's real ~/.gsd directory.
|
|
8
|
-
*/
|
|
9
|
-
|
|
10
|
-
import test, { before, after } from "node:test";
|
|
11
|
-
import assert from "node:assert/strict";
|
|
12
|
-
import { writeFileSync, mkdtempSync, realpathSync, rmSync } from "node:fs";
|
|
13
|
-
import { tmpdir } from "node:os";
|
|
14
|
-
import { join } from "node:path";
|
|
15
|
-
|
|
16
|
-
import { getServerConfig } from "../index.js";
|
|
17
|
-
|
|
18
|
-
let cwdDir: string;
|
|
19
|
-
let gsdHomeDir: string;
|
|
20
|
-
let originalCwd: string;
|
|
21
|
-
let originalGsdHome: string | undefined;
|
|
22
|
-
|
|
23
|
-
before(() => {
|
|
24
|
-
originalCwd = process.cwd();
|
|
25
|
-
originalGsdHome = process.env.GSD_HOME;
|
|
26
|
-
|
|
27
|
-
// realpathSync resolves any symlink in tmpdir() — on macOS /var → /private/var
|
|
28
|
-
// so process.cwd() after chdir matches what mkdtempSync returned.
|
|
29
|
-
cwdDir = realpathSync(mkdtempSync(join(tmpdir(), "mcp-cwd-")));
|
|
30
|
-
gsdHomeDir = realpathSync(mkdtempSync(join(tmpdir(), "mcp-gsdhome-")));
|
|
31
|
-
|
|
32
|
-
// Project-local fixture (also defines `shared-server` for the precedence test)
|
|
33
|
-
writeFileSync(
|
|
34
|
-
join(cwdDir, ".mcp.json"),
|
|
35
|
-
JSON.stringify({
|
|
36
|
-
mcpServers: {
|
|
37
|
-
"project-server": { command: "echo", args: ["proj"] },
|
|
38
|
-
"shared-server": { command: "echo", args: ["from-project"] },
|
|
39
|
-
},
|
|
40
|
-
}),
|
|
41
|
-
"utf-8",
|
|
42
|
-
);
|
|
43
|
-
|
|
44
|
-
// Global fixture rooted at $GSD_HOME (also defines `shared-server` to test
|
|
45
|
-
// that project-local takes precedence on name collision)
|
|
46
|
-
writeFileSync(
|
|
47
|
-
join(gsdHomeDir, "mcp.json"),
|
|
48
|
-
JSON.stringify({
|
|
49
|
-
mcpServers: {
|
|
50
|
-
"global-server": { command: "echo", args: ["glob"] },
|
|
51
|
-
"shared-server": { command: "echo", args: ["from-global"] },
|
|
52
|
-
},
|
|
53
|
-
}),
|
|
54
|
-
"utf-8",
|
|
55
|
-
);
|
|
56
|
-
|
|
57
|
-
process.chdir(cwdDir);
|
|
58
|
-
process.env.GSD_HOME = gsdHomeDir;
|
|
59
|
-
});
|
|
60
|
-
|
|
61
|
-
after(() => {
|
|
62
|
-
process.chdir(originalCwd);
|
|
63
|
-
if (originalGsdHome === undefined) delete process.env.GSD_HOME;
|
|
64
|
-
else process.env.GSD_HOME = originalGsdHome;
|
|
65
|
-
try { rmSync(cwdDir, { recursive: true, force: true }); } catch { /* best-effort */ }
|
|
66
|
-
try { rmSync(gsdHomeDir, { recursive: true, force: true }); } catch { /* best-effort */ }
|
|
67
|
-
});
|
|
68
|
-
|
|
69
|
-
test("#4757: getServerConfig resolves servers declared in $GSD_HOME/mcp.json", () => {
|
|
70
|
-
const cfg = getServerConfig("global-server");
|
|
71
|
-
assert.ok(cfg, "server defined in $GSD_HOME/mcp.json must resolve");
|
|
72
|
-
assert.equal(cfg?.name, "global-server");
|
|
73
|
-
assert.equal(cfg?.sourcePath, join(gsdHomeDir, "mcp.json"));
|
|
74
|
-
});
|
|
75
|
-
|
|
76
|
-
test("#4757: project-local servers still resolve when global config exists", () => {
|
|
77
|
-
const cfg = getServerConfig("project-server");
|
|
78
|
-
assert.ok(cfg, "project-local server must continue to resolve");
|
|
79
|
-
assert.equal(cfg?.sourcePath, join(cwdDir, ".mcp.json"));
|
|
80
|
-
});
|
|
81
|
-
|
|
82
|
-
test("#4757: project-local config wins on server-name collision", () => {
|
|
83
|
-
const cfg = getServerConfig("shared-server");
|
|
84
|
-
assert.ok(cfg, "shared server must resolve");
|
|
85
|
-
assert.equal(
|
|
86
|
-
cfg?.sourcePath,
|
|
87
|
-
join(cwdDir, ".mcp.json"),
|
|
88
|
-
"project-local config must take precedence over $GSD_HOME on name collision",
|
|
89
|
-
);
|
|
90
|
-
assert.deepEqual(cfg?.args, ["from-project"]);
|
|
91
|
-
});
|
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
// GSD-2 — Extension template import path validation
|
|
2
|
-
// Copyright (c) 2026 Jeremy McSpadden <jeremy@fluxlabs.net>
|
|
3
|
-
|
|
4
|
-
import { describe, it } from "node:test";
|
|
5
|
-
import assert from "node:assert/strict";
|
|
6
|
-
import { readFileSync, readdirSync, statSync } from "node:fs";
|
|
7
|
-
import { join, dirname, relative } from "node:path";
|
|
8
|
-
import { fileURLToPath } from "node:url";
|
|
9
|
-
|
|
10
|
-
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
11
|
-
const skillRoot = join(__dirname, "..");
|
|
12
|
-
|
|
13
|
-
function walk(dir: string): string[] {
|
|
14
|
-
const out: string[] = [];
|
|
15
|
-
for (const entry of readdirSync(dir)) {
|
|
16
|
-
const full = join(dir, entry);
|
|
17
|
-
if (statSync(full).isDirectory()) {
|
|
18
|
-
out.push(...walk(full));
|
|
19
|
-
} else {
|
|
20
|
-
out.push(full);
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
return out;
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
describe("extension templates use @gsd/* imports", () => {
|
|
27
|
-
const templates = ["extension-skeleton.ts", "stateful-tool-skeleton.ts"];
|
|
28
|
-
|
|
29
|
-
for (const template of templates) {
|
|
30
|
-
it(`${template} uses @gsd/pi-coding-agent (not @mariozechner)`, () => {
|
|
31
|
-
const content = readFileSync(join(__dirname, template), "utf-8");
|
|
32
|
-
assert.ok(content.includes("@gsd/pi-coding-agent"), `Expected @gsd/pi-coding-agent import in ${template}`);
|
|
33
|
-
assert.ok(!content.includes("@mariozechner/"), `Found stale @mariozechner/ import in ${template}`);
|
|
34
|
-
});
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
it("extension-skeleton.ts uses @gsd/pi-ai for StringEnum", () => {
|
|
38
|
-
const content = readFileSync(join(__dirname, "extension-skeleton.ts"), "utf-8");
|
|
39
|
-
assert.ok(content.includes("@gsd/pi-ai"), "Expected @gsd/pi-ai import");
|
|
40
|
-
});
|
|
41
|
-
|
|
42
|
-
it("stateful-tool-skeleton.ts uses @gsd/pi-tui", () => {
|
|
43
|
-
const content = readFileSync(join(__dirname, "stateful-tool-skeleton.ts"), "utf-8");
|
|
44
|
-
assert.ok(content.includes("@gsd/pi-tui"), "Expected @gsd/pi-tui import");
|
|
45
|
-
});
|
|
46
|
-
|
|
47
|
-
it("no @mariozechner/ references anywhere in create-gsd-extension/", () => {
|
|
48
|
-
const offenders: string[] = [];
|
|
49
|
-
for (const file of walk(skillRoot)) {
|
|
50
|
-
if (file.endsWith("templates.test.ts")) continue;
|
|
51
|
-
const content = readFileSync(file, "utf-8");
|
|
52
|
-
if (content.includes("@mariozechner/")) {
|
|
53
|
-
offenders.push(relative(skillRoot, file));
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
assert.deepEqual(offenders, [], `Stale @mariozechner/ references found in: ${offenders.join(", ")}`);
|
|
57
|
-
});
|
|
58
|
-
});
|
|
File without changes
|
|
File without changes
|