gsd-pi 2.10.12 → 2.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bundled-extension-paths.d.ts +2 -0
- package/dist/bundled-extension-paths.js +10 -0
- package/dist/loader.js +45 -28
- package/dist/onboarding.js +100 -0
- package/dist/resource-loader.js +12 -3
- package/dist/resources/GSD-WORKFLOW.md +661 -0
- package/dist/resources/agents/researcher.md +29 -0
- package/dist/resources/agents/scout.md +56 -0
- package/dist/resources/agents/worker.md +31 -0
- package/dist/resources/extensions/ask-user-questions.ts +289 -0
- package/dist/resources/extensions/async-jobs/async-bash-tool.ts +211 -0
- package/dist/resources/extensions/async-jobs/await-tool.ts +101 -0
- package/dist/resources/extensions/async-jobs/cancel-job-tool.ts +34 -0
- package/dist/resources/extensions/async-jobs/index.ts +133 -0
- package/dist/resources/extensions/async-jobs/job-manager.ts +211 -0
- package/dist/resources/extensions/bg-shell/index.ts +3179 -0
- package/dist/resources/extensions/browser-tools/BROWSER-TOOLS-V2-PROPOSAL.md +1277 -0
- package/dist/resources/extensions/browser-tools/capture.ts +165 -0
- package/dist/resources/extensions/browser-tools/core.d.ts +205 -0
- package/dist/resources/extensions/browser-tools/core.js +1057 -0
- package/dist/resources/extensions/browser-tools/evaluate-helpers.ts +184 -0
- package/dist/resources/extensions/browser-tools/index.ts +51 -0
- package/dist/resources/extensions/browser-tools/lifecycle.ts +270 -0
- package/dist/resources/extensions/browser-tools/package.json +24 -0
- package/dist/resources/extensions/browser-tools/refs.ts +264 -0
- package/dist/resources/extensions/browser-tools/settle.ts +197 -0
- package/dist/resources/extensions/browser-tools/state.ts +408 -0
- package/dist/resources/extensions/browser-tools/tests/browser-tools-integration.test.mjs +652 -0
- package/dist/resources/extensions/browser-tools/tests/browser-tools-unit.test.cjs +614 -0
- package/dist/resources/extensions/browser-tools/tools/assertions.ts +342 -0
- package/dist/resources/extensions/browser-tools/tools/forms.ts +801 -0
- package/dist/resources/extensions/browser-tools/tools/inspection.ts +492 -0
- package/dist/resources/extensions/browser-tools/tools/intent.ts +614 -0
- package/dist/resources/extensions/browser-tools/tools/interaction.ts +865 -0
- package/dist/resources/extensions/browser-tools/tools/navigation.ts +232 -0
- package/dist/resources/extensions/browser-tools/tools/pages.ts +303 -0
- package/dist/resources/extensions/browser-tools/tools/refs.ts +541 -0
- package/dist/resources/extensions/browser-tools/tools/screenshot.ts +83 -0
- package/dist/resources/extensions/browser-tools/tools/session.ts +400 -0
- package/dist/resources/extensions/browser-tools/tools/wait.ts +247 -0
- package/dist/resources/extensions/browser-tools/utils.ts +660 -0
- package/dist/resources/extensions/context7/index.ts +428 -0
- package/dist/resources/extensions/context7/package.json +11 -0
- package/dist/resources/extensions/get-secrets-from-user.ts +625 -0
- package/dist/resources/extensions/google-search/index.ts +336 -0
- package/dist/resources/extensions/google-search/package.json +9 -0
- package/dist/resources/extensions/gsd/activity-log.ts +116 -0
- package/dist/resources/extensions/gsd/auto.ts +3732 -0
- package/dist/resources/extensions/gsd/commands.ts +544 -0
- package/dist/resources/extensions/gsd/crash-recovery.ts +105 -0
- package/dist/resources/extensions/gsd/dashboard-overlay.ts +564 -0
- package/dist/resources/extensions/gsd/dispatch-guard.ts +78 -0
- package/dist/resources/extensions/gsd/docs/preferences-reference.md +278 -0
- package/dist/resources/extensions/gsd/doctor.ts +766 -0
- package/dist/resources/extensions/gsd/exit-command.ts +18 -0
- package/dist/resources/extensions/gsd/files.ts +857 -0
- package/dist/resources/extensions/gsd/git-service.ts +904 -0
- package/dist/resources/extensions/gsd/gitignore.ts +200 -0
- package/dist/resources/extensions/gsd/guided-flow.ts +1054 -0
- package/dist/resources/extensions/gsd/index.ts +735 -0
- package/dist/resources/extensions/gsd/metrics.ts +374 -0
- package/dist/resources/extensions/gsd/migrate/command.ts +218 -0
- package/dist/resources/extensions/gsd/migrate/index.ts +42 -0
- package/dist/resources/extensions/gsd/migrate/parser.ts +323 -0
- package/dist/resources/extensions/gsd/migrate/parsers.ts +624 -0
- package/dist/resources/extensions/gsd/migrate/preview.ts +48 -0
- package/dist/resources/extensions/gsd/migrate/transformer.ts +346 -0
- package/dist/resources/extensions/gsd/migrate/types.ts +370 -0
- package/dist/resources/extensions/gsd/migrate/validator.ts +55 -0
- package/dist/resources/extensions/gsd/migrate/writer.ts +539 -0
- package/dist/resources/extensions/gsd/native-git-bridge.ts +181 -0
- package/dist/resources/extensions/gsd/native-parser-bridge.ts +135 -0
- package/dist/resources/extensions/gsd/observability-validator.ts +408 -0
- package/dist/resources/extensions/gsd/package.json +11 -0
- package/dist/resources/extensions/gsd/paths.ts +339 -0
- package/dist/resources/extensions/gsd/post-unit-hooks.ts +449 -0
- package/dist/resources/extensions/gsd/preferences.ts +988 -0
- package/dist/resources/extensions/gsd/prompt-loader.ts +92 -0
- package/dist/resources/extensions/gsd/prompts/complete-milestone.md +25 -0
- package/dist/resources/extensions/gsd/prompts/complete-slice.md +27 -0
- package/dist/resources/extensions/gsd/prompts/discuss.md +237 -0
- package/dist/resources/extensions/gsd/prompts/doctor-heal.md +29 -0
- package/dist/resources/extensions/gsd/prompts/execute-task.md +63 -0
- package/dist/resources/extensions/gsd/prompts/guided-complete-slice.md +3 -0
- package/dist/resources/extensions/gsd/prompts/guided-discuss-milestone.md +5 -0
- package/dist/resources/extensions/gsd/prompts/guided-discuss-slice.md +61 -0
- package/dist/resources/extensions/gsd/prompts/guided-execute-task.md +3 -0
- package/dist/resources/extensions/gsd/prompts/guided-plan-milestone.md +29 -0
- package/dist/resources/extensions/gsd/prompts/guided-plan-slice.md +3 -0
- package/dist/resources/extensions/gsd/prompts/guided-research-slice.md +13 -0
- package/dist/resources/extensions/gsd/prompts/guided-resume-task.md +1 -0
- package/dist/resources/extensions/gsd/prompts/plan-milestone.md +78 -0
- package/dist/resources/extensions/gsd/prompts/plan-slice.md +55 -0
- package/dist/resources/extensions/gsd/prompts/queue.md +100 -0
- package/dist/resources/extensions/gsd/prompts/reassess-roadmap.md +48 -0
- package/dist/resources/extensions/gsd/prompts/replan-slice.md +39 -0
- package/dist/resources/extensions/gsd/prompts/research-milestone.md +37 -0
- package/dist/resources/extensions/gsd/prompts/research-slice.md +28 -0
- package/dist/resources/extensions/gsd/prompts/review-migration.md +66 -0
- package/dist/resources/extensions/gsd/prompts/run-uat.md +109 -0
- package/dist/resources/extensions/gsd/prompts/system.md +190 -0
- package/dist/resources/extensions/gsd/prompts/worktree-merge.md +123 -0
- package/dist/resources/extensions/gsd/roadmap-slices.ts +50 -0
- package/dist/resources/extensions/gsd/session-forensics.ts +500 -0
- package/dist/resources/extensions/gsd/skill-discovery.ts +137 -0
- package/dist/resources/extensions/gsd/state.ts +569 -0
- package/dist/resources/extensions/gsd/templates/context.md +76 -0
- package/dist/resources/extensions/gsd/templates/decisions.md +8 -0
- package/dist/resources/extensions/gsd/templates/milestone-summary.md +73 -0
- package/dist/resources/extensions/gsd/templates/plan.md +131 -0
- package/dist/resources/extensions/gsd/templates/preferences.md +23 -0
- package/dist/resources/extensions/gsd/templates/project.md +31 -0
- package/dist/resources/extensions/gsd/templates/reassessment.md +28 -0
- package/dist/resources/extensions/gsd/templates/requirements.md +81 -0
- package/dist/resources/extensions/gsd/templates/research.md +46 -0
- package/dist/resources/extensions/gsd/templates/roadmap.md +118 -0
- package/dist/resources/extensions/gsd/templates/secrets-manifest.md +22 -0
- package/dist/resources/extensions/gsd/templates/slice-context.md +58 -0
- package/dist/resources/extensions/gsd/templates/slice-summary.md +99 -0
- package/dist/resources/extensions/gsd/templates/state.md +19 -0
- package/dist/resources/extensions/gsd/templates/task-plan.md +52 -0
- package/dist/resources/extensions/gsd/templates/task-summary.md +57 -0
- package/dist/resources/extensions/gsd/templates/uat.md +54 -0
- package/dist/resources/extensions/gsd/tests/activity-log-prune.test.ts +297 -0
- package/dist/resources/extensions/gsd/tests/activity-log-save.test.ts +127 -0
- package/dist/resources/extensions/gsd/tests/auto-draft-pause.test.ts +109 -0
- package/dist/resources/extensions/gsd/tests/auto-preflight.test.ts +45 -0
- package/dist/resources/extensions/gsd/tests/auto-secrets-gate.test.ts +196 -0
- package/dist/resources/extensions/gsd/tests/auto-supervisor.test.mjs +53 -0
- package/dist/resources/extensions/gsd/tests/collect-from-manifest.test.ts +469 -0
- package/dist/resources/extensions/gsd/tests/complete-milestone.test.ts +200 -0
- package/dist/resources/extensions/gsd/tests/cost-projection.test.ts +134 -0
- package/dist/resources/extensions/gsd/tests/derive-state-deps.test.ts +312 -0
- package/dist/resources/extensions/gsd/tests/derive-state-draft.test.ts +299 -0
- package/dist/resources/extensions/gsd/tests/derive-state.test.ts +660 -0
- package/dist/resources/extensions/gsd/tests/discuss-prompt.test.ts +27 -0
- package/dist/resources/extensions/gsd/tests/dispatch-guard.test.ts +91 -0
- package/dist/resources/extensions/gsd/tests/doctor-fixlevel.test.ts +170 -0
- package/dist/resources/extensions/gsd/tests/doctor.test.ts +594 -0
- package/dist/resources/extensions/gsd/tests/draft-promotion.test.ts +169 -0
- package/dist/resources/extensions/gsd/tests/exit-command.test.ts +50 -0
- package/dist/resources/extensions/gsd/tests/git-service.test.ts +1788 -0
- package/dist/resources/extensions/gsd/tests/idle-recovery.test.ts +577 -0
- package/dist/resources/extensions/gsd/tests/integration-mixed-milestones.test.ts +580 -0
- package/dist/resources/extensions/gsd/tests/manifest-status.test.ts +283 -0
- package/dist/resources/extensions/gsd/tests/metrics-io.test.ts +176 -0
- package/dist/resources/extensions/gsd/tests/metrics.test.ts +188 -0
- package/dist/resources/extensions/gsd/tests/migrate-command.test.ts +369 -0
- package/dist/resources/extensions/gsd/tests/migrate-parser.test.ts +757 -0
- package/dist/resources/extensions/gsd/tests/migrate-transformer.test.ts +635 -0
- package/dist/resources/extensions/gsd/tests/migrate-validator-parsers.test.ts +414 -0
- package/dist/resources/extensions/gsd/tests/migrate-writer-integration.test.ts +297 -0
- package/dist/resources/extensions/gsd/tests/migrate-writer.test.ts +398 -0
- package/dist/resources/extensions/gsd/tests/must-have-parser.test.ts +291 -0
- package/dist/resources/extensions/gsd/tests/network-error-fallback.test.ts +54 -0
- package/dist/resources/extensions/gsd/tests/next-milestone-id.test.ts +66 -0
- package/dist/resources/extensions/gsd/tests/orphaned-branch.test.ts +353 -0
- package/dist/resources/extensions/gsd/tests/parsers.test.ts +1664 -0
- package/dist/resources/extensions/gsd/tests/plan-milestone.test.ts +133 -0
- package/dist/resources/extensions/gsd/tests/plan-quality-validator.test.ts +363 -0
- package/dist/resources/extensions/gsd/tests/post-unit-hooks.test.ts +297 -0
- package/dist/resources/extensions/gsd/tests/preferences-hooks.test.ts +226 -0
- package/dist/resources/extensions/gsd/tests/queue-draft-detection.test.ts +126 -0
- package/dist/resources/extensions/gsd/tests/reassess-prompt.test.ts +142 -0
- package/dist/resources/extensions/gsd/tests/regex-hardening.test.ts +281 -0
- package/dist/resources/extensions/gsd/tests/remote-questions.test.ts +155 -0
- package/dist/resources/extensions/gsd/tests/remote-status.test.ts +99 -0
- package/dist/resources/extensions/gsd/tests/replan-slice.test.ts +493 -0
- package/dist/resources/extensions/gsd/tests/requirements.test.ts +106 -0
- package/dist/resources/extensions/gsd/tests/resolve-ts-hooks.mjs +35 -0
- package/dist/resources/extensions/gsd/tests/resolve-ts.mjs +11 -0
- package/dist/resources/extensions/gsd/tests/roadmap-slices.test.ts +41 -0
- package/dist/resources/extensions/gsd/tests/run-uat.test.ts +316 -0
- package/dist/resources/extensions/gsd/tests/secure-env-collect.test.ts +185 -0
- package/dist/resources/extensions/gsd/tests/smart-entry-draft.test.ts +123 -0
- package/dist/resources/extensions/gsd/tests/test-helpers.ts +61 -0
- package/dist/resources/extensions/gsd/tests/unique-milestone-ids.test.ts +219 -0
- package/dist/resources/extensions/gsd/tests/unit-runtime.test.ts +234 -0
- package/dist/resources/extensions/gsd/tests/workspace-index.test.ts +75 -0
- package/dist/resources/extensions/gsd/tests/worktree-integration.test.ts +234 -0
- package/dist/resources/extensions/gsd/tests/worktree-manager.test.ts +141 -0
- package/dist/resources/extensions/gsd/tests/worktree.test.ts +597 -0
- package/dist/resources/extensions/gsd/tests/write-gate.test.ts +122 -0
- package/dist/resources/extensions/gsd/types.ts +296 -0
- package/dist/resources/extensions/gsd/unit-runtime.ts +184 -0
- package/dist/resources/extensions/gsd/workspace-index.ts +189 -0
- package/dist/resources/extensions/gsd/worktree-command.ts +845 -0
- package/dist/resources/extensions/gsd/worktree-manager.ts +459 -0
- package/dist/resources/extensions/gsd/{worktree.js → worktree.ts} +92 -61
- package/dist/resources/extensions/mac-tools/index.ts +852 -0
- package/dist/resources/extensions/mac-tools/swift-cli/Package.swift +22 -0
- package/dist/resources/extensions/mac-tools/swift-cli/Sources/main.swift +1318 -0
- package/dist/resources/extensions/mcporter/index.ts +429 -0
- package/dist/resources/extensions/remote-questions/config.ts +81 -0
- package/dist/resources/extensions/remote-questions/discord-adapter.ts +128 -0
- package/dist/resources/extensions/remote-questions/format.ts +163 -0
- package/dist/resources/extensions/remote-questions/manager.ts +192 -0
- package/dist/resources/extensions/remote-questions/remote-command.ts +361 -0
- package/dist/resources/extensions/remote-questions/slack-adapter.ts +92 -0
- package/dist/resources/extensions/remote-questions/status.ts +31 -0
- package/dist/resources/extensions/remote-questions/store.ts +77 -0
- package/dist/resources/extensions/remote-questions/types.ts +75 -0
- package/dist/resources/extensions/search-the-web/cache.ts +78 -0
- package/dist/resources/extensions/search-the-web/command-search-provider.ts +99 -0
- package/dist/resources/extensions/search-the-web/format.ts +258 -0
- package/dist/resources/extensions/search-the-web/http.ts +238 -0
- package/dist/resources/extensions/search-the-web/index.ts +65 -0
- package/dist/resources/extensions/search-the-web/native-search.ts +165 -0
- package/dist/resources/extensions/search-the-web/provider.ts +136 -0
- package/dist/resources/extensions/search-the-web/tavily.ts +116 -0
- package/dist/resources/extensions/search-the-web/tool-fetch-page.ts +581 -0
- package/dist/resources/extensions/search-the-web/tool-llm-context.ts +620 -0
- package/dist/resources/extensions/search-the-web/tool-search.ts +635 -0
- package/dist/resources/extensions/search-the-web/url-utils.ts +91 -0
- package/dist/resources/extensions/shared/bundled-extension-paths.ts +11 -0
- package/dist/resources/extensions/shared/confirm-ui.ts +126 -0
- package/dist/resources/extensions/shared/interview-ui.ts +613 -0
- package/dist/resources/extensions/shared/next-action-ui.ts +197 -0
- package/dist/resources/extensions/shared/progress-widget.ts +282 -0
- package/dist/resources/extensions/shared/terminal.ts +23 -0
- package/dist/resources/extensions/shared/thinking-widget.ts +107 -0
- package/dist/resources/extensions/shared/ui.ts +400 -0
- package/dist/resources/extensions/shared/wizard-ui.ts +551 -0
- package/dist/resources/extensions/slash-commands/audit.ts +88 -0
- package/dist/resources/extensions/slash-commands/clear.ts +10 -0
- package/dist/resources/extensions/slash-commands/create-extension.ts +297 -0
- package/dist/resources/extensions/slash-commands/create-slash-command.ts +234 -0
- package/dist/resources/extensions/slash-commands/index.ts +12 -0
- package/dist/resources/extensions/subagent/agents.ts +126 -0
- package/dist/resources/extensions/subagent/index.ts +1072 -0
- package/dist/resources/extensions/subagent/isolation.ts +498 -0
- package/dist/resources/extensions/ttsr/index.ts +163 -0
- package/dist/resources/extensions/ttsr/rule-loader.ts +121 -0
- package/dist/resources/extensions/ttsr/ttsr-interrupt.md +6 -0
- package/dist/resources/extensions/ttsr/ttsr-manager.ts +430 -0
- package/dist/resources/extensions/universal-config/discovery.ts +78 -0
- package/dist/resources/extensions/universal-config/format.ts +160 -0
- package/dist/resources/extensions/universal-config/index.ts +118 -0
- package/dist/resources/extensions/universal-config/package.json +11 -0
- package/dist/resources/extensions/universal-config/scanners.ts +579 -0
- package/dist/resources/extensions/universal-config/tests/discovery.test.ts +111 -0
- package/dist/resources/extensions/universal-config/tests/format.test.ts +111 -0
- package/dist/resources/extensions/universal-config/tests/scanners.test.ts +438 -0
- package/dist/resources/extensions/universal-config/tools.ts +60 -0
- package/dist/resources/extensions/universal-config/types.ts +116 -0
- package/dist/resources/extensions/voice/index.ts +271 -0
- package/dist/resources/extensions/voice/speech-recognizer.py +504 -0
- package/dist/resources/extensions/voice/speech-recognizer.swift +154 -0
- package/dist/resources/skills/debug-like-expert/SKILL.md +231 -0
- package/dist/resources/skills/debug-like-expert/references/debugging-mindset.md +253 -0
- package/dist/resources/skills/debug-like-expert/references/hypothesis-testing.md +373 -0
- package/dist/resources/skills/debug-like-expert/references/investigation-techniques.md +337 -0
- package/dist/resources/skills/debug-like-expert/references/verification-patterns.md +425 -0
- package/dist/resources/skills/debug-like-expert/references/when-to-research.md +361 -0
- package/dist/resources/skills/frontend-design/SKILL.md +45 -0
- package/dist/resources/skills/github-workflows/SKILL.md +92 -0
- package/dist/resources/skills/github-workflows/references/gh/SKILL.md +255 -0
- package/dist/resources/skills/github-workflows/references/gh/references/issue-stories.md +204 -0
- package/dist/resources/skills/github-workflows/references/gh/references/labels.md +170 -0
- package/dist/resources/skills/github-workflows/references/gh/references/milestones.md +158 -0
- package/dist/resources/skills/github-workflows/references/gh/references/projects-v2.md +177 -0
- package/dist/resources/skills/github-workflows/references/gh/scripts/experiment_cleanup.py +191 -0
- package/dist/resources/skills/github-workflows/references/gh/scripts/github_project_setup.py +799 -0
- 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/resources/skills/swiftui/SKILL.md +208 -0
- package/dist/resources/skills/swiftui/references/animations.md +921 -0
- package/dist/resources/skills/swiftui/references/architecture.md +1561 -0
- package/dist/resources/skills/swiftui/references/layout-system.md +1186 -0
- package/dist/resources/skills/swiftui/references/navigation.md +1492 -0
- package/dist/resources/skills/swiftui/references/networking-async.md +214 -0
- package/dist/resources/skills/swiftui/references/performance.md +1706 -0
- package/dist/resources/skills/swiftui/references/platform-integration.md +204 -0
- package/dist/resources/skills/swiftui/references/state-management.md +1443 -0
- package/dist/resources/skills/swiftui/references/swiftdata.md +297 -0
- package/dist/resources/skills/swiftui/references/testing-debugging.md +247 -0
- package/dist/resources/skills/swiftui/references/uikit-appkit-interop.md +218 -0
- package/dist/resources/skills/swiftui/workflows/add-feature.md +191 -0
- package/dist/resources/skills/swiftui/workflows/build-new-app.md +311 -0
- package/dist/resources/skills/swiftui/workflows/debug-swiftui.md +192 -0
- package/dist/resources/skills/swiftui/workflows/optimize-performance.md +197 -0
- package/dist/resources/skills/swiftui/workflows/ship-app.md +203 -0
- package/dist/resources/skills/swiftui/workflows/write-tests.md +235 -0
- package/dist/wizard.js +1 -0
- package/package.json +8 -6
- package/packages/native/dist/fd/index.d.ts +1 -0
- package/packages/native/dist/fd/index.js +1 -0
- package/packages/native/dist/grep/index.d.ts +2 -1
- package/packages/native/dist/grep/index.js +1 -0
- package/packages/native/src/__tests__/fd.test.mjs +35 -0
- package/packages/native/src/__tests__/grep.test.mjs +26 -9
- package/packages/native/src/fd/index.ts +1 -0
- package/packages/native/src/grep/index.ts +3 -2
- package/packages/pi-agent-core/dist/agent-loop.d.ts.map +1 -1
- package/packages/pi-agent-core/dist/agent-loop.js +169 -55
- package/packages/pi-agent-core/dist/agent-loop.js.map +1 -1
- package/packages/pi-agent-core/dist/agent.d.ts +13 -1
- package/packages/pi-agent-core/dist/agent.d.ts.map +1 -1
- package/packages/pi-agent-core/dist/agent.js +16 -0
- package/packages/pi-agent-core/dist/agent.js.map +1 -1
- package/packages/pi-agent-core/dist/types.d.ts +91 -1
- package/packages/pi-agent-core/dist/types.d.ts.map +1 -1
- package/packages/pi-agent-core/dist/types.js.map +1 -1
- package/packages/pi-agent-core/src/agent-loop.ts +273 -63
- package/packages/pi-agent-core/src/agent.ts +24 -0
- package/packages/pi-agent-core/src/types.ts +98 -0
- package/packages/pi-ai/dist/env-api-keys.js +2 -0
- package/packages/pi-ai/dist/env-api-keys.js.map +1 -1
- package/packages/pi-ai/dist/models.generated.d.ts +314 -0
- package/packages/pi-ai/dist/models.generated.d.ts.map +1 -1
- package/packages/pi-ai/dist/models.generated.js +236 -0
- package/packages/pi-ai/dist/models.generated.js.map +1 -1
- package/packages/pi-ai/dist/providers/google-gemini-cli.d.ts.map +1 -1
- package/packages/pi-ai/dist/providers/google-gemini-cli.js +6 -0
- package/packages/pi-ai/dist/providers/google-gemini-cli.js.map +1 -1
- package/packages/pi-ai/dist/providers/openai-completions.d.ts.map +1 -1
- package/packages/pi-ai/dist/providers/openai-completions.js +2 -0
- package/packages/pi-ai/dist/providers/openai-completions.js.map +1 -1
- package/packages/pi-ai/dist/types.d.ts +1 -1
- 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/src/env-api-keys.ts +2 -0
- package/packages/pi-ai/src/models.generated.ts +236 -0
- package/packages/pi-ai/src/providers/google-gemini-cli.ts +8 -0
- package/packages/pi-ai/src/providers/openai-completions.ts +3 -0
- package/packages/pi-ai/src/types.ts +2 -1
- package/packages/pi-coding-agent/dist/cli/args.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/cli/args.js +1 -0
- package/packages/pi-coding-agent/dist/cli/args.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/agent-session.d.ts +26 -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 +137 -22
- package/packages/pi-coding-agent/dist/core/agent-session.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/auth-storage.d.ts +20 -0
- package/packages/pi-coding-agent/dist/core/auth-storage.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/auth-storage.js +43 -0
- package/packages/pi-coding-agent/dist/core/auth-storage.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/fallback-resolver.d.ts +51 -0
- package/packages/pi-coding-agent/dist/core/fallback-resolver.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/fallback-resolver.js +119 -0
- package/packages/pi-coding-agent/dist/core/fallback-resolver.js.map +1 -0
- package/packages/pi-coding-agent/dist/core/fallback-resolver.test.d.ts +2 -0
- package/packages/pi-coding-agent/dist/core/fallback-resolver.test.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/fallback-resolver.test.js +183 -0
- package/packages/pi-coding-agent/dist/core/fallback-resolver.test.js.map +1 -0
- package/packages/pi-coding-agent/dist/core/index.d.ts +1 -0
- package/packages/pi-coding-agent/dist/core/index.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/index.js +1 -0
- package/packages/pi-coding-agent/dist/core/index.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/model-resolver.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/model-resolver.js +1 -0
- package/packages/pi-coding-agent/dist/core/model-resolver.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/session-manager.d.ts +12 -1
- package/packages/pi-coding-agent/dist/core/session-manager.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/session-manager.js +37 -1
- package/packages/pi-coding-agent/dist/core/session-manager.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/session-manager.test.d.ts +2 -0
- package/packages/pi-coding-agent/dist/core/session-manager.test.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/session-manager.test.js +61 -0
- package/packages/pi-coding-agent/dist/core/session-manager.test.js.map +1 -0
- package/packages/pi-coding-agent/dist/core/settings-manager.d.ts +20 -0
- package/packages/pi-coding-agent/dist/core/settings-manager.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/settings-manager.js +47 -0
- package/packages/pi-coding-agent/dist/core/settings-manager.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/find.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/find.js +1 -0
- package/packages/pi-coding-agent/dist/core/tools/find.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 +6 -15
- package/packages/pi-coding-agent/dist/modes/interactive/components/footer.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/login-dialog.d.ts +18 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/login-dialog.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/login-dialog.js +46 -4
- package/packages/pi-coding-agent/dist/modes/interactive/components/login-dialog.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 +25 -2
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/packages/pi-coding-agent/src/cli/args.ts +1 -0
- package/packages/pi-coding-agent/src/core/agent-session.ts +167 -22
- package/packages/pi-coding-agent/src/core/auth-storage.ts +45 -0
- package/packages/pi-coding-agent/src/core/fallback-resolver.test.ts +229 -0
- package/packages/pi-coding-agent/src/core/fallback-resolver.ts +165 -0
- package/packages/pi-coding-agent/src/core/index.ts +1 -0
- package/packages/pi-coding-agent/src/core/model-resolver.ts +1 -0
- package/packages/pi-coding-agent/src/core/session-manager.test.ts +65 -0
- package/packages/pi-coding-agent/src/core/session-manager.ts +51 -1
- package/packages/pi-coding-agent/src/core/settings-manager.ts +66 -0
- package/packages/pi-coding-agent/src/core/tools/find.ts +1 -0
- package/packages/pi-coding-agent/src/modes/interactive/components/footer.ts +6 -16
- package/packages/pi-coding-agent/src/modes/interactive/components/login-dialog.ts +49 -4
- package/packages/pi-coding-agent/src/modes/interactive/interactive-mode.ts +28 -2
- package/packages/pi-tui/dist/autocomplete.d.ts.map +1 -1
- package/packages/pi-tui/dist/autocomplete.js +3 -4
- package/packages/pi-tui/dist/autocomplete.js.map +1 -1
- package/packages/pi-tui/dist/components/editor.d.ts +7 -0
- package/packages/pi-tui/dist/components/editor.d.ts.map +1 -1
- package/packages/pi-tui/dist/components/editor.js +57 -50
- package/packages/pi-tui/dist/components/editor.js.map +1 -1
- package/packages/pi-tui/src/autocomplete.ts +3 -5
- package/packages/pi-tui/src/components/editor.ts +70 -49
- package/pkg/dist/core/export-html/ansi-to-html.d.ts +22 -0
- package/pkg/dist/core/export-html/ansi-to-html.d.ts.map +1 -0
- package/pkg/dist/core/export-html/ansi-to-html.js +249 -0
- package/pkg/dist/core/export-html/ansi-to-html.js.map +1 -0
- package/pkg/dist/core/export-html/index.d.ts +37 -0
- package/pkg/dist/core/export-html/index.d.ts.map +1 -0
- package/pkg/dist/core/export-html/index.js +223 -0
- package/pkg/dist/core/export-html/index.js.map +1 -0
- package/pkg/dist/core/export-html/template.css +971 -0
- package/pkg/dist/core/export-html/template.html +54 -0
- package/pkg/dist/core/export-html/template.js +1583 -0
- package/pkg/dist/core/export-html/tool-renderer.d.ts +38 -0
- package/pkg/dist/core/export-html/tool-renderer.d.ts.map +1 -0
- package/pkg/dist/core/export-html/tool-renderer.js +70 -0
- package/pkg/dist/core/export-html/tool-renderer.js.map +1 -0
- package/pkg/dist/core/export-html/vendor/highlight.min.js +1213 -0
- package/pkg/dist/core/export-html/vendor/marked.min.js +6 -0
- package/scripts/postinstall.js +30 -17
- package/src/resources/extensions/bg-shell/index.ts +51 -7
- package/src/resources/extensions/gsd/activity-log.ts +61 -14
- package/src/resources/extensions/gsd/auto.ts +288 -19
- package/src/resources/extensions/gsd/commands.ts +9 -3
- package/src/resources/extensions/gsd/dashboard-overlay.ts +55 -12
- package/src/resources/extensions/gsd/docs/preferences-reference.md +25 -0
- package/src/resources/extensions/gsd/doctor.ts +60 -3
- package/src/resources/extensions/gsd/files.ts +45 -1
- package/src/resources/extensions/gsd/git-service.ts +46 -41
- package/src/resources/extensions/gsd/guided-flow.ts +81 -9
- package/src/resources/extensions/gsd/index.ts +62 -1
- package/src/resources/extensions/gsd/native-git-bridge.ts +181 -0
- package/src/resources/extensions/gsd/paths.ts +35 -4
- package/src/resources/extensions/gsd/post-unit-hooks.ts +449 -0
- package/src/resources/extensions/gsd/preferences.ts +232 -1
- package/src/resources/extensions/gsd/prompt-loader.ts +45 -3
- package/src/resources/extensions/gsd/prompts/complete-milestone.md +1 -1
- package/src/resources/extensions/gsd/prompts/complete-slice.md +1 -3
- package/src/resources/extensions/gsd/prompts/discuss.md +10 -8
- package/src/resources/extensions/gsd/prompts/execute-task.md +4 -2
- package/src/resources/extensions/gsd/prompts/guided-complete-slice.md +3 -1
- package/src/resources/extensions/gsd/prompts/guided-discuss-milestone.md +3 -1
- package/src/resources/extensions/gsd/prompts/guided-discuss-slice.md +3 -1
- package/src/resources/extensions/gsd/prompts/guided-execute-task.md +3 -1
- package/src/resources/extensions/gsd/prompts/guided-plan-milestone.md +4 -2
- package/src/resources/extensions/gsd/prompts/guided-plan-slice.md +3 -1
- package/src/resources/extensions/gsd/prompts/guided-research-slice.md +3 -1
- package/src/resources/extensions/gsd/prompts/plan-milestone.md +9 -12
- package/src/resources/extensions/gsd/prompts/plan-slice.md +1 -3
- package/src/resources/extensions/gsd/prompts/queue.md +3 -1
- package/src/resources/extensions/gsd/prompts/research-milestone.md +1 -1
- package/src/resources/extensions/gsd/prompts/research-slice.md +1 -1
- package/src/resources/extensions/gsd/state.ts +130 -18
- package/src/resources/extensions/gsd/templates/context.md +1 -1
- package/src/resources/extensions/gsd/templates/state.md +3 -3
- package/src/resources/extensions/gsd/tests/activity-log-save.test.ts +127 -0
- package/src/resources/extensions/gsd/tests/complete-milestone.test.ts +5 -1
- package/src/resources/extensions/gsd/tests/doctor.test.ts +115 -1
- package/src/resources/extensions/gsd/tests/draft-promotion.test.ts +6 -2
- package/src/resources/extensions/gsd/tests/git-service.test.ts +35 -35
- package/src/resources/extensions/gsd/tests/idle-recovery.test.ts +8 -8
- package/src/resources/extensions/gsd/tests/integration-mixed-milestones.test.ts +4 -1
- package/src/resources/extensions/gsd/tests/network-error-fallback.test.ts +54 -0
- package/src/resources/extensions/gsd/tests/orphaned-branch.test.ts +5 -5
- package/src/resources/extensions/gsd/tests/post-unit-hooks.test.ts +297 -0
- package/src/resources/extensions/gsd/tests/preferences-hooks.test.ts +226 -0
- package/src/resources/extensions/gsd/tests/regex-hardening.test.ts +12 -0
- package/src/resources/extensions/gsd/tests/unit-runtime.test.ts +6 -0
- package/src/resources/extensions/gsd/tests/worktree-integration.test.ts +4 -4
- package/src/resources/extensions/gsd/tests/worktree-manager.test.ts +4 -4
- package/src/resources/extensions/gsd/tests/worktree.test.ts +19 -19
- package/src/resources/extensions/gsd/types.ts +109 -0
- package/src/resources/extensions/gsd/worktree-manager.ts +72 -13
- package/src/resources/extensions/gsd/worktree.ts +5 -4
- package/src/resources/extensions/search-the-web/command-search-provider.ts +8 -4
- package/src/resources/extensions/search-the-web/native-search.ts +32 -23
- package/src/resources/extensions/search-the-web/provider.ts +19 -2
- package/src/resources/extensions/search-the-web/tool-fetch-page.ts +62 -0
- package/src/resources/extensions/search-the-web/tool-llm-context.ts +62 -3
- package/src/resources/extensions/search-the-web/tool-search.ts +62 -3
- package/src/resources/extensions/shared/bundled-extension-paths.ts +11 -0
- package/src/resources/extensions/subagent/index.ts +2 -1
- package/src/resources/skills/github-workflows/SKILL.md +5 -0
- package/dist/resources/extensions/gsd/git-service.d.ts +0 -225
- package/dist/resources/extensions/gsd/git-service.js +0 -756
- package/dist/resources/extensions/gsd/preferences.d.ts +0 -122
- package/dist/resources/extensions/gsd/preferences.js +0 -616
- package/dist/resources/extensions/gsd/worktree.d.ts +0 -106
- package/dist/resources/extensions/remote-questions/config.d.ts +0 -14
- package/dist/resources/extensions/remote-questions/config.js +0 -68
- package/dist/resources/extensions/remote-questions/discord-adapter.d.ts +0 -17
- package/dist/resources/extensions/remote-questions/discord-adapter.js +0 -118
- package/dist/resources/extensions/remote-questions/format.d.ts +0 -38
- package/dist/resources/extensions/remote-questions/format.js +0 -119
- package/dist/resources/extensions/remote-questions/manager.d.ts +0 -23
- package/dist/resources/extensions/remote-questions/manager.js +0 -161
- package/dist/resources/extensions/remote-questions/remote-command.d.ts +0 -6
- package/dist/resources/extensions/remote-questions/remote-command.js +0 -358
- package/dist/resources/extensions/remote-questions/slack-adapter.d.ts +0 -15
- package/dist/resources/extensions/remote-questions/slack-adapter.js +0 -82
- package/dist/resources/extensions/remote-questions/status.d.ts +0 -9
- package/dist/resources/extensions/remote-questions/status.js +0 -25
- package/dist/resources/extensions/remote-questions/store.d.ts +0 -11
- package/dist/resources/extensions/remote-questions/store.js +0 -66
- package/dist/resources/extensions/remote-questions/types.d.ts +0 -68
- package/dist/resources/extensions/remote-questions/types.js +0 -4
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: {{sliceId}}
|
|
3
|
+
parent: {{milestoneId}}
|
|
4
|
+
milestone: {{milestoneId}}
|
|
5
|
+
provides:
|
|
6
|
+
- {{whatThisSliceProvides}}
|
|
7
|
+
requires:
|
|
8
|
+
- slice: {{depSliceId}}
|
|
9
|
+
provides: {{whatWasConsumed}}
|
|
10
|
+
affects:
|
|
11
|
+
- {{downstreamSliceId}}
|
|
12
|
+
key_files:
|
|
13
|
+
- {{filePath}}
|
|
14
|
+
key_decisions:
|
|
15
|
+
- {{decision}}
|
|
16
|
+
patterns_established:
|
|
17
|
+
- {{pattern}}
|
|
18
|
+
observability_surfaces:
|
|
19
|
+
- {{status endpoint, structured log, persisted failure state, diagnostic command, or none}}
|
|
20
|
+
drill_down_paths:
|
|
21
|
+
- {{pathToTaskSummary}}
|
|
22
|
+
duration: {{duration}}
|
|
23
|
+
verification_result: passed
|
|
24
|
+
completed_at: {{date}}
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
# {{sliceId}}: {{sliceTitle}}
|
|
28
|
+
|
|
29
|
+
<!-- One-liner must say what actually shipped, not just that work completed.
|
|
30
|
+
Good: "Structured job status endpoint with persisted failure diagnostics"
|
|
31
|
+
Bad: "Status feature implemented" -->
|
|
32
|
+
|
|
33
|
+
**{{oneLiner}}**
|
|
34
|
+
|
|
35
|
+
## What Happened
|
|
36
|
+
|
|
37
|
+
{{narrative — compress task summaries into a coherent story}}
|
|
38
|
+
|
|
39
|
+
## Verification
|
|
40
|
+
|
|
41
|
+
{{whatWasVerifiedAcrossAllTasks — tests, builds, manual checks}}
|
|
42
|
+
|
|
43
|
+
<!-- If the project has no REQUIREMENTS.md, omit all four requirement sections below entirely — do not fill them with "none". These sections only apply when requirements are being actively tracked. -->
|
|
44
|
+
## Requirements Advanced
|
|
45
|
+
|
|
46
|
+
- {{requirementId}} — {{howThisSliceAdvancedIt}}
|
|
47
|
+
|
|
48
|
+
## Requirements Validated
|
|
49
|
+
|
|
50
|
+
- {{requirementId}} — {{whatProofNowMakesItValidated}}
|
|
51
|
+
|
|
52
|
+
## New Requirements Surfaced
|
|
53
|
+
|
|
54
|
+
- {{newRequirementOr_none}}
|
|
55
|
+
|
|
56
|
+
## Requirements Invalidated or Re-scoped
|
|
57
|
+
|
|
58
|
+
- {{requirementIdOr_none}} — {{what changed}}
|
|
59
|
+
|
|
60
|
+
## Deviations
|
|
61
|
+
|
|
62
|
+
<!-- Deviations are unplanned changes to the written plan, not ordinary debugging inside the plan's intended scope. -->
|
|
63
|
+
|
|
64
|
+
{{deviationsFromPlan_OR_none}}
|
|
65
|
+
|
|
66
|
+
## Known Limitations
|
|
67
|
+
|
|
68
|
+
<!-- Known limitations are real gaps, rough edges, or deferred constraints that still exist after this slice shipped. -->
|
|
69
|
+
|
|
70
|
+
{{whatDoesntWorkYet_OR_whatWasDeferredToLaterSlices}}
|
|
71
|
+
|
|
72
|
+
## Follow-ups
|
|
73
|
+
|
|
74
|
+
<!-- Follow-ups are concrete next actions discovered during execution, not a restatement of known limitations. -->
|
|
75
|
+
|
|
76
|
+
{{workDeferredOrDiscoveredDuringExecution_OR_none}}
|
|
77
|
+
|
|
78
|
+
## Files Created/Modified
|
|
79
|
+
|
|
80
|
+
- `{{filePath}}` — {{description}}
|
|
81
|
+
- `{{filePath}}` — {{description}}
|
|
82
|
+
|
|
83
|
+
## Forward Intelligence
|
|
84
|
+
|
|
85
|
+
<!-- Write what you wish you'd known at the start of this slice.
|
|
86
|
+
This section is read by the next slice's planning and research steps.
|
|
87
|
+
Be specific and concrete — this is the most valuable context you can transfer. -->
|
|
88
|
+
|
|
89
|
+
### What the next slice should know
|
|
90
|
+
- {{insightThatWouldHelpDownstreamWork}}
|
|
91
|
+
|
|
92
|
+
### What's fragile
|
|
93
|
+
- {{fragileAreaOrThinImplementation}} — {{whyItMatters}}
|
|
94
|
+
|
|
95
|
+
### Authoritative diagnostics
|
|
96
|
+
- {{whereAFutureAgentShouldLookFirst}} — {{whyThisSignalIsTrustworthy}}
|
|
97
|
+
|
|
98
|
+
### What assumptions changed
|
|
99
|
+
- {{originalAssumption}} — {{whatActuallyHappened}}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# GSD State
|
|
2
|
+
|
|
3
|
+
**Active Milestone:** {{milestoneId}}: {{milestoneTitle}}
|
|
4
|
+
**Active Slice:** {{sliceId}}: {{sliceTitle}}
|
|
5
|
+
**Active Task:** {{taskId}}: {{taskTitle}}
|
|
6
|
+
**Phase:** {{phase}}
|
|
7
|
+
**Slice Branch:** {{activeBranch}}
|
|
8
|
+
**Active Workspace:** {{activeWorkspace}}
|
|
9
|
+
**Next Action:** {{nextAction}}
|
|
10
|
+
**Last Updated:** {{date}}
|
|
11
|
+
**Requirements Status:** {{activeCount}} active · {{validatedCount}} validated · {{deferredCount}} deferred · {{outOfScopeCount}} out of scope
|
|
12
|
+
|
|
13
|
+
## Recent Decisions
|
|
14
|
+
|
|
15
|
+
- {{decision}}
|
|
16
|
+
|
|
17
|
+
## Blockers
|
|
18
|
+
|
|
19
|
+
- (none)
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
---
|
|
2
|
+
# Optional scope estimate — helps the plan quality validator detect over-scoped tasks.
|
|
3
|
+
# Tasks with 10+ estimated steps or 12+ estimated files trigger a warning to consider splitting.
|
|
4
|
+
estimated_steps: {{estimatedSteps}}
|
|
5
|
+
estimated_files: {{estimatedFiles}}
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# {{taskId}}: {{taskTitle}}
|
|
9
|
+
|
|
10
|
+
**Slice:** {{sliceId}} — {{sliceTitle}}
|
|
11
|
+
**Milestone:** {{milestoneId}}
|
|
12
|
+
|
|
13
|
+
## Description
|
|
14
|
+
|
|
15
|
+
{{description}}
|
|
16
|
+
|
|
17
|
+
## Steps
|
|
18
|
+
|
|
19
|
+
1. {{step}}
|
|
20
|
+
2. {{step}}
|
|
21
|
+
3. {{step}}
|
|
22
|
+
|
|
23
|
+
## Must-Haves
|
|
24
|
+
|
|
25
|
+
- [ ] {{mustHave}}
|
|
26
|
+
- [ ] {{mustHave}}
|
|
27
|
+
|
|
28
|
+
## Verification
|
|
29
|
+
|
|
30
|
+
- {{howToVerifyThisTaskIsActuallyDone}}
|
|
31
|
+
- {{commandToRun_OR_behaviorToCheck}}
|
|
32
|
+
|
|
33
|
+
## Observability Impact
|
|
34
|
+
|
|
35
|
+
<!-- OMIT THIS SECTION ENTIRELY for simple tasks that don't touch runtime boundaries,
|
|
36
|
+
async flows, APIs, background processes, or error paths.
|
|
37
|
+
Include it only when the task meaningfully changes how failures are detected or diagnosed. -->
|
|
38
|
+
|
|
39
|
+
- Signals added/changed: {{structured logs, statuses, errors, metrics}}
|
|
40
|
+
- How a future agent inspects this: {{command, endpoint, file, UI state}}
|
|
41
|
+
- Failure state exposed: {{what becomes visible on failure}}
|
|
42
|
+
|
|
43
|
+
## Inputs
|
|
44
|
+
|
|
45
|
+
- `{{filePath}}` — {{whatThisTaskNeedsFromPriorWork}}
|
|
46
|
+
- {{priorTaskSummaryInsight}}
|
|
47
|
+
|
|
48
|
+
## Expected Output
|
|
49
|
+
|
|
50
|
+
<!-- This task should produce a real increment toward making the slice goal/demo true. A full slice plan should not be able to mark every task complete while the claimed slice behavior still does not work at the stated proof level. -->
|
|
51
|
+
|
|
52
|
+
- `{{filePath}}` — {{whatThisTaskShouldProduceOrModify}}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: {{taskId}}
|
|
3
|
+
parent: {{sliceId}}
|
|
4
|
+
milestone: {{milestoneId}}
|
|
5
|
+
provides:
|
|
6
|
+
- {{whatThisTaskProvides}}
|
|
7
|
+
key_files:
|
|
8
|
+
- {{filePath}}
|
|
9
|
+
key_decisions:
|
|
10
|
+
- {{decision}}
|
|
11
|
+
patterns_established:
|
|
12
|
+
- {{pattern}}
|
|
13
|
+
observability_surfaces:
|
|
14
|
+
- {{status endpoint, structured log, persisted failure state, diagnostic command, or none}}
|
|
15
|
+
duration: {{duration}}
|
|
16
|
+
verification_result: passed
|
|
17
|
+
completed_at: {{date}}
|
|
18
|
+
# Set blocker_discovered: true only if execution revealed the remaining slice plan
|
|
19
|
+
# is fundamentally invalid (wrong API, missing capability, architectural mismatch).
|
|
20
|
+
# Do NOT set true for ordinary bugs, minor deviations, or fixable issues.
|
|
21
|
+
blocker_discovered: false
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
# {{taskId}}: {{taskTitle}}
|
|
25
|
+
|
|
26
|
+
<!-- One-liner must say what actually shipped, not just that work completed.
|
|
27
|
+
Good: "Added retry-aware worker status logging"
|
|
28
|
+
Bad: "Implemented logging improvements" -->
|
|
29
|
+
|
|
30
|
+
**{{oneLiner}}**
|
|
31
|
+
|
|
32
|
+
## What Happened
|
|
33
|
+
|
|
34
|
+
{{narrative}}
|
|
35
|
+
|
|
36
|
+
## Verification
|
|
37
|
+
|
|
38
|
+
{{whatWasVerifiedAndHow — commands run, tests passed, behavior confirmed}}
|
|
39
|
+
|
|
40
|
+
## Diagnostics
|
|
41
|
+
|
|
42
|
+
{{howToInspectWhatThisTaskBuiltLater — status surfaces, logs, error shapes, failure artifacts, or none}}
|
|
43
|
+
|
|
44
|
+
## Deviations
|
|
45
|
+
|
|
46
|
+
<!-- Deviations are unplanned changes to the written task plan, not ordinary debugging during implementation. -->
|
|
47
|
+
|
|
48
|
+
{{deviationsFromPlan_OR_none}}
|
|
49
|
+
|
|
50
|
+
## Known Issues
|
|
51
|
+
|
|
52
|
+
{{issuesDiscoveredButNotFixed_OR_none}}
|
|
53
|
+
|
|
54
|
+
## Files Created/Modified
|
|
55
|
+
|
|
56
|
+
- `{{filePath}}` — {{description}}
|
|
57
|
+
- `{{filePath}}` — {{description}}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# {{sliceId}}: {{sliceTitle}} — UAT
|
|
2
|
+
|
|
3
|
+
**Milestone:** {{milestoneId}}
|
|
4
|
+
**Written:** {{date}}
|
|
5
|
+
|
|
6
|
+
## UAT Type
|
|
7
|
+
|
|
8
|
+
- UAT mode: {{artifact-driven | live-runtime | human-experience | mixed}}
|
|
9
|
+
- Why this mode is sufficient: {{reason}}
|
|
10
|
+
|
|
11
|
+
## Preconditions
|
|
12
|
+
|
|
13
|
+
{{whatMustBeTrueBeforeTesting — server running, data seeded, etc.}}
|
|
14
|
+
|
|
15
|
+
## Smoke Test
|
|
16
|
+
|
|
17
|
+
{{oneQuickCheckThatConfirmsTheSliceBasicallyWorks}}
|
|
18
|
+
|
|
19
|
+
## Test Cases
|
|
20
|
+
|
|
21
|
+
### 1. {{testName}}
|
|
22
|
+
|
|
23
|
+
1. {{step}}
|
|
24
|
+
2. {{step}}
|
|
25
|
+
3. **Expected:** {{expected}}
|
|
26
|
+
|
|
27
|
+
### 2. {{testName}}
|
|
28
|
+
|
|
29
|
+
1. {{step}}
|
|
30
|
+
2. **Expected:** {{expected}}
|
|
31
|
+
|
|
32
|
+
## Edge Cases
|
|
33
|
+
|
|
34
|
+
### {{edgeCaseName}}
|
|
35
|
+
|
|
36
|
+
1. {{step}}
|
|
37
|
+
2. **Expected:** {{expected}}
|
|
38
|
+
|
|
39
|
+
## Failure Signals
|
|
40
|
+
|
|
41
|
+
- {{whatWouldIndicateSomethingIsBroken — errors, missing UI, wrong data}}
|
|
42
|
+
|
|
43
|
+
## Requirements Proved By This UAT
|
|
44
|
+
|
|
45
|
+
- {{requirementIdOr_none}} — {{what this UAT proves}}
|
|
46
|
+
|
|
47
|
+
## Not Proven By This UAT
|
|
48
|
+
|
|
49
|
+
- {{what this UAT intentionally does not prove}}
|
|
50
|
+
- {{remaining live/runtime/operational gaps, if any}}
|
|
51
|
+
|
|
52
|
+
## Notes for Tester
|
|
53
|
+
|
|
54
|
+
{{anythingTheHumanShouldKnow — known rough edges, things to ignore, areas needing gut check}}
|
|
@@ -0,0 +1,297 @@
|
|
|
1
|
+
// Tests for pruneActivityLogs — age-based activity log pruning with
|
|
2
|
+
// highest-seq preservation invariant — plus step-11 prompt text assertion.
|
|
3
|
+
//
|
|
4
|
+
// Sections:
|
|
5
|
+
// (a) Basic pruning: one old file deleted, two recent survive
|
|
6
|
+
// (b) Highest-seq preserved even when all files are old
|
|
7
|
+
// (c) retentionDays=0 boundary: all non-highest-seq deleted
|
|
8
|
+
// (d) No-op when all files are recent
|
|
9
|
+
// (e) Empty directory: no crash
|
|
10
|
+
// (f) All old files: only highest-seq survives
|
|
11
|
+
// (g) Single file: always preserved (it IS highest-seq)
|
|
12
|
+
// (h) Seq number is tie-breaker (010 beats 001 lexicographically and numerically)
|
|
13
|
+
// (i) Non-matching filenames ignored: notes.txt survives, no crash
|
|
14
|
+
// (j) Step-11 prompt text: "refresh current state if needed"
|
|
15
|
+
|
|
16
|
+
import { mkdtempSync, mkdirSync, readdirSync, rmSync, utimesSync, writeFileSync } from 'node:fs';
|
|
17
|
+
import { join, dirname } from 'node:path';
|
|
18
|
+
import { tmpdir } from 'node:os';
|
|
19
|
+
import { fileURLToPath } from 'node:url';
|
|
20
|
+
|
|
21
|
+
import { pruneActivityLogs } from '../activity-log.ts';
|
|
22
|
+
import { createTestContext } from './test-helpers.ts';
|
|
23
|
+
|
|
24
|
+
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
const { assertEq, assertTrue, report } = createTestContext();
|
|
28
|
+
// ─── Fixture helpers ───────────────────────────────────────────────────────
|
|
29
|
+
|
|
30
|
+
let tmpDirs: string[] = [];
|
|
31
|
+
|
|
32
|
+
function createTmpActivityDir(): string {
|
|
33
|
+
const dir = mkdtempSync(join(tmpdir(), 'gsd-prune-test-'));
|
|
34
|
+
tmpDirs.push(dir);
|
|
35
|
+
return dir;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
function writeActivityFile(activityDir: string, seq: string, name: string): string {
|
|
39
|
+
mkdirSync(activityDir, { recursive: true });
|
|
40
|
+
const filePath = join(activityDir, `${seq}-${name}.jsonl`);
|
|
41
|
+
writeFileSync(filePath, `{"seq":${parseInt(seq, 10)},"name":"${name}"}\n`, 'utf-8');
|
|
42
|
+
return filePath;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/** Set mtime to daysAgo days in the past. */
|
|
46
|
+
function backdateFile(filePath: string, daysAgo: number): void {
|
|
47
|
+
const pastMs = Date.now() - daysAgo * 24 * 60 * 60 * 1000;
|
|
48
|
+
const pastDate = new Date(pastMs);
|
|
49
|
+
utimesSync(filePath, pastDate, pastDate);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
function cleanup(): void {
|
|
53
|
+
for (const dir of tmpDirs) {
|
|
54
|
+
rmSync(dir, { recursive: true, force: true });
|
|
55
|
+
}
|
|
56
|
+
tmpDirs = [];
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
process.on('exit', cleanup);
|
|
60
|
+
|
|
61
|
+
// ─── Helper: get sorted filenames (basenames only) in a directory ──────────
|
|
62
|
+
|
|
63
|
+
function listFiles(dir: string): string[] {
|
|
64
|
+
return readdirSync(dir).sort();
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
68
|
+
// Tests
|
|
69
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
70
|
+
|
|
71
|
+
async function main(): Promise<void> {
|
|
72
|
+
|
|
73
|
+
// ─── (a) Basic pruning ────────────────────────────────────────────────────
|
|
74
|
+
console.log('\n── (a) Basic pruning: one old file deleted, two recent survive');
|
|
75
|
+
|
|
76
|
+
{
|
|
77
|
+
const dir = createTmpActivityDir();
|
|
78
|
+
const f001 = writeActivityFile(dir, '001', 'execute-task-M001-S01-T01');
|
|
79
|
+
const _f002 = writeActivityFile(dir, '002', 'execute-task-M001-S01-T02');
|
|
80
|
+
const _f003 = writeActivityFile(dir, '003', 'execute-task-M001-S01-T03');
|
|
81
|
+
|
|
82
|
+
backdateFile(f001, 40); // older than 30-day retention
|
|
83
|
+
|
|
84
|
+
pruneActivityLogs(dir, 30);
|
|
85
|
+
|
|
86
|
+
const remaining = listFiles(dir);
|
|
87
|
+
assertTrue(
|
|
88
|
+
!remaining.includes('001-execute-task-M001-S01-T01.jsonl'),
|
|
89
|
+
'(a) file 001 deleted (40 days old, past 30-day threshold)',
|
|
90
|
+
);
|
|
91
|
+
assertTrue(
|
|
92
|
+
remaining.includes('002-execute-task-M001-S01-T02.jsonl'),
|
|
93
|
+
'(a) file 002 survives (recent)',
|
|
94
|
+
);
|
|
95
|
+
assertTrue(
|
|
96
|
+
remaining.includes('003-execute-task-M001-S01-T03.jsonl'),
|
|
97
|
+
'(a) file 003 survives (recent, also highest-seq)',
|
|
98
|
+
);
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
// ─── (b) Highest-seq preserved even when all files are old ───────────────
|
|
102
|
+
console.log('\n── (b) Highest-seq preserved even when all files are old');
|
|
103
|
+
|
|
104
|
+
{
|
|
105
|
+
const dir = createTmpActivityDir();
|
|
106
|
+
const f001 = writeActivityFile(dir, '001', 'execute-task-M001-S01-T01');
|
|
107
|
+
const f002 = writeActivityFile(dir, '002', 'execute-task-M001-S01-T02');
|
|
108
|
+
const f003 = writeActivityFile(dir, '003', 'execute-task-M001-S01-T03');
|
|
109
|
+
|
|
110
|
+
backdateFile(f001, 40);
|
|
111
|
+
backdateFile(f002, 40);
|
|
112
|
+
backdateFile(f003, 40); // all old, but 003 is highest-seq
|
|
113
|
+
|
|
114
|
+
pruneActivityLogs(dir, 30);
|
|
115
|
+
|
|
116
|
+
const remaining = listFiles(dir);
|
|
117
|
+
assertEq(remaining.length, 1, '(b) exactly 1 file survives when all are old');
|
|
118
|
+
assertTrue(
|
|
119
|
+
remaining.includes('003-execute-task-M001-S01-T03.jsonl'),
|
|
120
|
+
'(b) highest-seq file (003) is the survivor',
|
|
121
|
+
);
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
// ─── (c) retentionDays=0 boundary ────────────────────────────────────────
|
|
125
|
+
console.log('\n── (c) retentionDays=0: all non-highest-seq deleted even if brand-new');
|
|
126
|
+
|
|
127
|
+
{
|
|
128
|
+
const dir = createTmpActivityDir();
|
|
129
|
+
// All files have mtime=now (freshly written — no backdating)
|
|
130
|
+
writeActivityFile(dir, '001', 'execute-task-M002-S01-T01');
|
|
131
|
+
writeActivityFile(dir, '002', 'execute-task-M002-S01-T02');
|
|
132
|
+
writeActivityFile(dir, '003', 'execute-task-M002-S01-T03');
|
|
133
|
+
|
|
134
|
+
pruneActivityLogs(dir, 0); // cutoff = now → everything is "expired"
|
|
135
|
+
|
|
136
|
+
const remaining = listFiles(dir);
|
|
137
|
+
assertEq(remaining.length, 1, '(c) retentionDays=0: exactly 1 file survives');
|
|
138
|
+
assertTrue(
|
|
139
|
+
remaining.includes('003-execute-task-M002-S01-T03.jsonl'),
|
|
140
|
+
'(c) retentionDays=0: only highest-seq (003) survives',
|
|
141
|
+
);
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
// ─── (d) No-op when all files are recent ─────────────────────────────────
|
|
145
|
+
console.log('\n── (d) No-op when all files are recent');
|
|
146
|
+
|
|
147
|
+
{
|
|
148
|
+
const dir = createTmpActivityDir();
|
|
149
|
+
writeActivityFile(dir, '001', 'execute-task-M003-S01-T01');
|
|
150
|
+
writeActivityFile(dir, '002', 'execute-task-M003-S01-T02');
|
|
151
|
+
writeActivityFile(dir, '003', 'execute-task-M003-S01-T03');
|
|
152
|
+
// No backdating — all files are fresh
|
|
153
|
+
|
|
154
|
+
pruneActivityLogs(dir, 30);
|
|
155
|
+
|
|
156
|
+
const remaining = listFiles(dir);
|
|
157
|
+
assertEq(remaining.length, 3, '(d) all 3 files survive when all are recent');
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
// ─── (e) Empty directory: no crash ────────────────────────────────────────
|
|
161
|
+
console.log('\n── (e) Empty directory: no crash');
|
|
162
|
+
|
|
163
|
+
{
|
|
164
|
+
const dir = createTmpActivityDir();
|
|
165
|
+
// dir exists but is empty
|
|
166
|
+
|
|
167
|
+
let threw = false;
|
|
168
|
+
try {
|
|
169
|
+
pruneActivityLogs(dir, 30);
|
|
170
|
+
} catch {
|
|
171
|
+
threw = true;
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
assertTrue(!threw, '(e) pruneActivityLogs does not throw on empty directory');
|
|
175
|
+
assertTrue(
|
|
176
|
+
readdirSync(dir).length === 0,
|
|
177
|
+
'(e) directory still exists and is still empty after no-op',
|
|
178
|
+
);
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
// ─── (f) All old files: only highest-seq survives ─────────────────────────
|
|
182
|
+
console.log('\n── (f) All old files: only highest-seq survives');
|
|
183
|
+
|
|
184
|
+
{
|
|
185
|
+
const dir = createTmpActivityDir();
|
|
186
|
+
const f004 = writeActivityFile(dir, '004', 'execute-task-M004-S01-T01');
|
|
187
|
+
const f005 = writeActivityFile(dir, '005', 'execute-task-M004-S01-T02');
|
|
188
|
+
const f006 = writeActivityFile(dir, '006', 'execute-task-M004-S01-T03');
|
|
189
|
+
|
|
190
|
+
backdateFile(f004, 60);
|
|
191
|
+
backdateFile(f005, 60);
|
|
192
|
+
backdateFile(f006, 60);
|
|
193
|
+
|
|
194
|
+
pruneActivityLogs(dir, 30);
|
|
195
|
+
|
|
196
|
+
const remaining = listFiles(dir);
|
|
197
|
+
assertEq(remaining.length, 1, '(f) exactly 1 file survives when all are old');
|
|
198
|
+
assertTrue(
|
|
199
|
+
remaining[0].startsWith('006-'),
|
|
200
|
+
'(f) the surviving file starts with 006 (highest-seq)',
|
|
201
|
+
);
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
// ─── (g) Single file: always preserved ────────────────────────────────────
|
|
205
|
+
console.log('\n── (g) Single file: always preserved (it IS highest-seq)');
|
|
206
|
+
|
|
207
|
+
{
|
|
208
|
+
const dir = createTmpActivityDir();
|
|
209
|
+
const f001 = writeActivityFile(dir, '001', 'execute-task-M005-S01-T01');
|
|
210
|
+
backdateFile(f001, 100); // very old
|
|
211
|
+
|
|
212
|
+
pruneActivityLogs(dir, 30);
|
|
213
|
+
|
|
214
|
+
const remaining = listFiles(dir);
|
|
215
|
+
assertEq(remaining.length, 1, '(g) single file survives even when very old (it is the highest-seq)');
|
|
216
|
+
assertTrue(
|
|
217
|
+
remaining.includes('001-execute-task-M005-S01-T01.jsonl'),
|
|
218
|
+
'(g) the single file (001) is preserved',
|
|
219
|
+
);
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
// ─── (h) Seq tie-breaker: 010 is higher than 001 ─────────────────────────
|
|
223
|
+
console.log('\n── (h) Seq number tie-breaker: 010 beats 001 numerically');
|
|
224
|
+
|
|
225
|
+
{
|
|
226
|
+
const dir = createTmpActivityDir();
|
|
227
|
+
const f001 = writeActivityFile(dir, '001', 'execute-task-M006-S01-T01');
|
|
228
|
+
const f010 = writeActivityFile(dir, '010', 'execute-task-M006-S01-T10');
|
|
229
|
+
|
|
230
|
+
backdateFile(f001, 40);
|
|
231
|
+
backdateFile(f010, 40); // both old; 010 is numerically highest
|
|
232
|
+
|
|
233
|
+
pruneActivityLogs(dir, 30);
|
|
234
|
+
|
|
235
|
+
const remaining = listFiles(dir);
|
|
236
|
+
assertEq(remaining.length, 1, '(h) exactly 1 file survives');
|
|
237
|
+
assertTrue(
|
|
238
|
+
remaining.includes('010-execute-task-M006-S01-T10.jsonl'),
|
|
239
|
+
'(h) seq 010 (numeric 10) survives over seq 001 (numeric 1)',
|
|
240
|
+
);
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
// ─── (i) Non-matching filenames ignored ───────────────────────────────────
|
|
244
|
+
console.log('\n── (i) Non-matching filenames ignored: notes.txt survives, no crash');
|
|
245
|
+
|
|
246
|
+
{
|
|
247
|
+
const dir = createTmpActivityDir();
|
|
248
|
+
const f001 = writeActivityFile(dir, '001', 'execute-task-M007-S01-T01');
|
|
249
|
+
const notesPath = join(dir, 'notes.txt');
|
|
250
|
+
writeFileSync(notesPath, 'some notes\n', 'utf-8');
|
|
251
|
+
|
|
252
|
+
backdateFile(f001, 40); // eligible for pruning
|
|
253
|
+
// notes.txt never gets a seq prefix → should be ignored by pruner
|
|
254
|
+
|
|
255
|
+
let threw = false;
|
|
256
|
+
try {
|
|
257
|
+
pruneActivityLogs(dir, 30);
|
|
258
|
+
} catch {
|
|
259
|
+
threw = true;
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
assertTrue(!threw, '(i) no crash when non-matching file is present');
|
|
263
|
+
|
|
264
|
+
const remaining = listFiles(dir);
|
|
265
|
+
assertTrue(
|
|
266
|
+
remaining.includes('notes.txt'),
|
|
267
|
+
'(i) notes.txt (non-matching filename) survives pruning unchanged',
|
|
268
|
+
);
|
|
269
|
+
// 001 is deleted (old, and notes.txt is not counted as seq-bearing so 001 is not "highest")
|
|
270
|
+
// But wait — 001 IS the only seq file, making it highest-seq → it survives
|
|
271
|
+
assertTrue(
|
|
272
|
+
remaining.includes('001-execute-task-M007-S01-T01.jsonl'),
|
|
273
|
+
'(i) seq 001 survives (it is the highest-seq among seq files)',
|
|
274
|
+
);
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
// ─── (j) Step-11 prompt text assertion ────────────────────────────────────
|
|
278
|
+
console.log('\n── (j) Step-11 prompt text: "refresh current state if needed"');
|
|
279
|
+
|
|
280
|
+
{
|
|
281
|
+
const { readFileSync } = await import('node:fs');
|
|
282
|
+
const promptPath = join(__dirname, '..', 'prompts', 'complete-slice.md');
|
|
283
|
+
const content = readFileSync(promptPath, 'utf-8');
|
|
284
|
+
|
|
285
|
+
assertTrue(
|
|
286
|
+
content.includes('refresh current state if needed'),
|
|
287
|
+
'(j) complete-slice.md step 11 contains "refresh current state if needed"',
|
|
288
|
+
);
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
report();
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
main().catch((error) => {
|
|
295
|
+
console.error(error);
|
|
296
|
+
process.exit(1);
|
|
297
|
+
});
|