gsd-pi 2.18.0 → 2.20.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -1
- package/dist/cli.js +3 -3
- package/dist/onboarding.d.ts +3 -1
- package/dist/onboarding.js +77 -3
- package/dist/remote-questions-config.d.ts +1 -1
- package/dist/resources/extensions/google-search/index.ts +164 -47
- package/dist/resources/extensions/gsd/auto-dashboard.ts +14 -2
- package/dist/resources/extensions/gsd/auto-prompts.ts +148 -39
- package/dist/resources/extensions/gsd/auto-worktree.ts +93 -9
- package/dist/resources/extensions/gsd/auto.ts +690 -39
- package/dist/resources/extensions/gsd/captures.ts +384 -0
- package/dist/resources/extensions/gsd/commands.ts +654 -36
- package/dist/resources/extensions/gsd/complexity-classifier.ts +322 -0
- package/dist/resources/extensions/gsd/context-budget.ts +243 -0
- package/dist/resources/extensions/gsd/context-store.ts +195 -0
- package/dist/resources/extensions/gsd/dashboard-overlay.ts +51 -3
- package/dist/resources/extensions/gsd/db-writer.ts +341 -0
- package/dist/resources/extensions/gsd/debug-logger.ts +178 -0
- package/dist/resources/extensions/gsd/dispatch-guard.ts +0 -1
- package/dist/resources/extensions/gsd/docs/preferences-reference.md +54 -0
- package/dist/resources/extensions/gsd/doctor-proactive.ts +286 -0
- package/dist/resources/extensions/gsd/doctor.ts +283 -2
- package/dist/resources/extensions/gsd/export.ts +81 -2
- package/dist/resources/extensions/gsd/files.ts +39 -9
- package/dist/resources/extensions/gsd/git-service.ts +6 -0
- package/dist/resources/extensions/gsd/gsd-db.ts +752 -0
- package/dist/resources/extensions/gsd/guided-flow.ts +26 -1
- package/dist/resources/extensions/gsd/history.ts +0 -1
- package/dist/resources/extensions/gsd/index.ts +277 -1
- package/dist/resources/extensions/gsd/md-importer.ts +526 -0
- package/dist/resources/extensions/gsd/metrics.ts +84 -0
- package/dist/resources/extensions/gsd/model-cost-table.ts +65 -0
- package/dist/resources/extensions/gsd/model-router.ts +256 -0
- package/dist/resources/extensions/gsd/notifications.ts +0 -1
- package/dist/resources/extensions/gsd/post-unit-hooks.ts +72 -2
- package/dist/resources/extensions/gsd/preferences.ts +198 -150
- package/dist/resources/extensions/gsd/prompt-loader.ts +45 -9
- package/dist/resources/extensions/gsd/prompts/execute-task.md +3 -5
- package/dist/resources/extensions/gsd/prompts/heal-skill.md +45 -0
- package/dist/resources/extensions/gsd/prompts/plan-slice.md +5 -1
- package/dist/resources/extensions/gsd/prompts/quick-task.md +48 -0
- package/dist/resources/extensions/gsd/prompts/reassess-roadmap.md +6 -0
- package/dist/resources/extensions/gsd/prompts/replan-slice.md +8 -0
- package/dist/resources/extensions/gsd/prompts/system.md +2 -1
- package/dist/resources/extensions/gsd/prompts/triage-captures.md +62 -0
- package/dist/resources/extensions/gsd/quick.ts +156 -0
- package/dist/resources/extensions/gsd/skill-discovery.ts +5 -3
- package/dist/resources/extensions/gsd/skill-health.ts +417 -0
- package/dist/resources/extensions/gsd/skill-telemetry.ts +127 -0
- package/dist/resources/extensions/gsd/state.ts +30 -0
- package/dist/resources/extensions/gsd/templates/preferences.md +1 -0
- package/dist/resources/extensions/gsd/tests/captures.test.ts +438 -0
- package/dist/resources/extensions/gsd/tests/complexity-classifier.test.ts +181 -0
- package/dist/resources/extensions/gsd/tests/context-budget.test.ts +283 -0
- package/dist/resources/extensions/gsd/tests/context-compression.test.ts +1 -1
- package/dist/resources/extensions/gsd/tests/context-store.test.ts +462 -0
- package/dist/resources/extensions/gsd/tests/continue-here.test.ts +204 -0
- package/dist/resources/extensions/gsd/tests/dashboard-budget.test.ts +346 -0
- package/dist/resources/extensions/gsd/tests/db-writer.test.ts +602 -0
- package/dist/resources/extensions/gsd/tests/debug-logger.test.ts +185 -0
- package/dist/resources/extensions/gsd/tests/derive-state-db.test.ts +406 -0
- package/dist/resources/extensions/gsd/tests/dispatch-guard.test.ts +0 -1
- package/dist/resources/extensions/gsd/tests/dist-redirect.mjs +22 -0
- package/dist/resources/extensions/gsd/tests/doctor-proactive.test.ts +244 -0
- package/dist/resources/extensions/gsd/tests/doctor-runtime.test.ts +303 -0
- package/dist/resources/extensions/gsd/tests/feature-branch-lifecycle-integration.test.ts +434 -0
- package/dist/resources/extensions/gsd/tests/gsd-db.test.ts +353 -0
- package/dist/resources/extensions/gsd/tests/gsd-inspect.test.ts +125 -0
- package/dist/resources/extensions/gsd/tests/gsd-tools.test.ts +326 -0
- package/dist/resources/extensions/gsd/tests/integration-edge.test.ts +228 -0
- package/dist/resources/extensions/gsd/tests/integration-lifecycle.test.ts +277 -0
- package/dist/resources/extensions/gsd/tests/md-importer.test.ts +411 -0
- package/dist/resources/extensions/gsd/tests/metrics.test.ts +197 -0
- package/dist/resources/extensions/gsd/tests/milestone-transition-worktree.test.ts +144 -0
- package/dist/resources/extensions/gsd/tests/model-cost-table.test.ts +69 -0
- package/dist/resources/extensions/gsd/tests/model-isolation.test.ts +99 -0
- package/dist/resources/extensions/gsd/tests/model-router.test.ts +167 -0
- package/dist/resources/extensions/gsd/tests/parsers.test.ts +40 -0
- package/dist/resources/extensions/gsd/tests/post-unit-hooks.test.ts +41 -1
- package/dist/resources/extensions/gsd/tests/preferences-git.test.ts +0 -1
- package/dist/resources/extensions/gsd/tests/preferences-hooks.test.ts +0 -1
- package/dist/resources/extensions/gsd/tests/preferences-mode.test.ts +110 -0
- package/dist/resources/extensions/gsd/tests/preferences-models.test.ts +0 -1
- package/dist/resources/extensions/gsd/tests/prompt-budget-enforcement.test.ts +464 -0
- package/dist/resources/extensions/gsd/tests/prompt-db.test.ts +385 -0
- package/dist/resources/extensions/gsd/tests/remote-questions.test.ts +488 -1
- package/dist/resources/extensions/gsd/tests/resolve-ts-hooks.mjs +17 -29
- package/dist/resources/extensions/gsd/tests/resolve-ts.mjs +2 -8
- package/dist/resources/extensions/gsd/tests/routing-history.test.ts +215 -62
- package/dist/resources/extensions/gsd/tests/skill-lifecycle.test.ts +126 -0
- package/dist/resources/extensions/gsd/tests/stop-auto-remote.test.ts +31 -8
- package/dist/resources/extensions/gsd/tests/token-savings.test.ts +366 -0
- package/dist/resources/extensions/gsd/tests/triage-dispatch.test.ts +224 -0
- package/dist/resources/extensions/gsd/tests/triage-resolution.test.ts +215 -0
- package/dist/resources/extensions/gsd/tests/unit-runtime.test.ts +25 -1
- package/dist/resources/extensions/gsd/tests/visualizer-critical-path.test.ts +145 -0
- package/dist/resources/extensions/gsd/tests/visualizer-data.test.ts +290 -0
- package/dist/resources/extensions/gsd/tests/visualizer-overlay.test.ts +120 -0
- package/dist/resources/extensions/gsd/tests/visualizer-views.test.ts +478 -0
- package/dist/resources/extensions/gsd/tests/worktree-db-integration.test.ts +205 -0
- package/dist/resources/extensions/gsd/tests/worktree-db.test.ts +442 -0
- package/dist/resources/extensions/gsd/tests/worktree-post-create-hook.test.ts +165 -0
- package/dist/resources/extensions/gsd/triage-resolution.ts +200 -0
- package/dist/resources/extensions/gsd/triage-ui.ts +175 -0
- package/dist/resources/extensions/gsd/types.ts +29 -0
- package/dist/resources/extensions/gsd/undo.ts +0 -1
- package/dist/resources/extensions/gsd/unit-runtime.ts +5 -1
- package/dist/resources/extensions/gsd/visualizer-data.ts +505 -0
- package/dist/resources/extensions/gsd/visualizer-overlay.ts +337 -0
- package/dist/resources/extensions/gsd/visualizer-views.ts +755 -0
- package/dist/resources/extensions/gsd/worktree-command.ts +18 -0
- package/dist/resources/extensions/gsd/worktree-manager.ts +11 -4
- package/dist/resources/extensions/remote-questions/config.ts +4 -2
- package/dist/resources/extensions/remote-questions/discord-adapter.ts +35 -4
- package/dist/resources/extensions/remote-questions/format.ts +166 -14
- package/dist/resources/extensions/remote-questions/manager.ts +14 -4
- package/dist/resources/extensions/remote-questions/remote-command.ts +100 -4
- package/dist/resources/extensions/remote-questions/slack-adapter.ts +58 -2
- package/dist/resources/extensions/remote-questions/telegram-adapter.ts +161 -0
- package/dist/resources/extensions/remote-questions/types.ts +2 -1
- package/dist/resources/extensions/ttsr/ttsr-manager.ts +26 -0
- package/dist/resources/extensions/voice/index.ts +4 -3
- package/package.json +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 +12 -1
- package/packages/pi-coding-agent/dist/core/agent-session.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/loader.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/loader.js +5 -0
- package/packages/pi-coding-agent/dist/core/extensions/loader.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/lsp/client.d.ts +6 -0
- package/packages/pi-coding-agent/dist/core/lsp/client.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/lsp/client.js +25 -0
- package/packages/pi-coding-agent/dist/core/lsp/client.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/lsp/index.d.ts +2 -0
- package/packages/pi-coding-agent/dist/core/lsp/index.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/lsp/index.js +106 -3
- package/packages/pi-coding-agent/dist/core/lsp/index.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/lsp/lsp.md +6 -0
- package/packages/pi-coding-agent/dist/core/lsp/types.d.ts +35 -0
- package/packages/pi-coding-agent/dist/core/lsp/types.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/lsp/types.js +6 -0
- package/packages/pi-coding-agent/dist/core/lsp/types.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/lsp/utils.d.ts +3 -1
- package/packages/pi-coding-agent/dist/core/lsp/utils.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/lsp/utils.js +45 -0
- package/packages/pi-coding-agent/dist/core/lsp/utils.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/settings-manager.d.ts +6 -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 +43 -11
- package/packages/pi-coding-agent/dist/core/settings-manager.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/system-prompt.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/system-prompt.js +7 -1
- package/packages/pi-coding-agent/dist/core/system-prompt.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/edit.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/edit.js +5 -0
- package/packages/pi-coding-agent/dist/core/tools/edit.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/index.d.ts +2 -0
- package/packages/pi-coding-agent/dist/core/tools/index.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/write.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/write.js +5 -0
- package/packages/pi-coding-agent/dist/core/tools/write.js.map +1 -1
- package/packages/pi-coding-agent/src/core/agent-session.ts +13 -1
- package/packages/pi-coding-agent/src/core/extensions/loader.ts +6 -0
- package/packages/pi-coding-agent/src/core/lsp/client.ts +26 -0
- package/packages/pi-coding-agent/src/core/lsp/index.ts +157 -2
- package/packages/pi-coding-agent/src/core/lsp/lsp.md +6 -0
- package/packages/pi-coding-agent/src/core/lsp/types.ts +53 -0
- package/packages/pi-coding-agent/src/core/lsp/utils.ts +56 -0
- package/packages/pi-coding-agent/src/core/settings-manager.ts +41 -11
- package/packages/pi-coding-agent/src/core/system-prompt.ts +7 -1
- package/packages/pi-coding-agent/src/core/tools/edit.ts +3 -0
- package/packages/pi-coding-agent/src/core/tools/write.ts +3 -0
- package/src/resources/extensions/google-search/index.ts +164 -47
- package/src/resources/extensions/gsd/auto-dashboard.ts +14 -2
- package/src/resources/extensions/gsd/auto-prompts.ts +148 -39
- package/src/resources/extensions/gsd/auto-worktree.ts +93 -9
- package/src/resources/extensions/gsd/auto.ts +690 -39
- package/src/resources/extensions/gsd/captures.ts +384 -0
- package/src/resources/extensions/gsd/commands.ts +654 -36
- package/src/resources/extensions/gsd/complexity-classifier.ts +322 -0
- package/src/resources/extensions/gsd/context-budget.ts +243 -0
- package/src/resources/extensions/gsd/context-store.ts +195 -0
- package/src/resources/extensions/gsd/dashboard-overlay.ts +51 -3
- package/src/resources/extensions/gsd/db-writer.ts +341 -0
- package/src/resources/extensions/gsd/debug-logger.ts +178 -0
- package/src/resources/extensions/gsd/dispatch-guard.ts +0 -1
- package/src/resources/extensions/gsd/docs/preferences-reference.md +54 -0
- package/src/resources/extensions/gsd/doctor-proactive.ts +286 -0
- package/src/resources/extensions/gsd/doctor.ts +283 -2
- package/src/resources/extensions/gsd/export.ts +81 -2
- package/src/resources/extensions/gsd/files.ts +39 -9
- package/src/resources/extensions/gsd/git-service.ts +6 -0
- package/src/resources/extensions/gsd/gsd-db.ts +752 -0
- package/src/resources/extensions/gsd/guided-flow.ts +26 -1
- package/src/resources/extensions/gsd/history.ts +0 -1
- package/src/resources/extensions/gsd/index.ts +277 -1
- package/src/resources/extensions/gsd/md-importer.ts +526 -0
- package/src/resources/extensions/gsd/metrics.ts +84 -0
- package/src/resources/extensions/gsd/model-cost-table.ts +65 -0
- package/src/resources/extensions/gsd/model-router.ts +256 -0
- package/src/resources/extensions/gsd/notifications.ts +0 -1
- package/src/resources/extensions/gsd/post-unit-hooks.ts +72 -2
- package/src/resources/extensions/gsd/preferences.ts +198 -150
- package/src/resources/extensions/gsd/prompt-loader.ts +45 -9
- package/src/resources/extensions/gsd/prompts/execute-task.md +3 -5
- package/src/resources/extensions/gsd/prompts/heal-skill.md +45 -0
- package/src/resources/extensions/gsd/prompts/plan-slice.md +5 -1
- package/src/resources/extensions/gsd/prompts/quick-task.md +48 -0
- package/src/resources/extensions/gsd/prompts/reassess-roadmap.md +6 -0
- package/src/resources/extensions/gsd/prompts/replan-slice.md +8 -0
- package/src/resources/extensions/gsd/prompts/system.md +2 -1
- package/src/resources/extensions/gsd/prompts/triage-captures.md +62 -0
- package/src/resources/extensions/gsd/quick.ts +156 -0
- package/src/resources/extensions/gsd/skill-discovery.ts +5 -3
- package/src/resources/extensions/gsd/skill-health.ts +417 -0
- package/src/resources/extensions/gsd/skill-telemetry.ts +127 -0
- package/src/resources/extensions/gsd/state.ts +30 -0
- package/src/resources/extensions/gsd/templates/preferences.md +1 -0
- package/src/resources/extensions/gsd/tests/captures.test.ts +438 -0
- package/src/resources/extensions/gsd/tests/complexity-classifier.test.ts +181 -0
- package/src/resources/extensions/gsd/tests/context-budget.test.ts +283 -0
- package/src/resources/extensions/gsd/tests/context-compression.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/context-store.test.ts +462 -0
- package/src/resources/extensions/gsd/tests/continue-here.test.ts +204 -0
- package/src/resources/extensions/gsd/tests/dashboard-budget.test.ts +346 -0
- package/src/resources/extensions/gsd/tests/db-writer.test.ts +602 -0
- package/src/resources/extensions/gsd/tests/debug-logger.test.ts +185 -0
- package/src/resources/extensions/gsd/tests/derive-state-db.test.ts +406 -0
- package/src/resources/extensions/gsd/tests/dispatch-guard.test.ts +0 -1
- package/src/resources/extensions/gsd/tests/dist-redirect.mjs +22 -0
- package/src/resources/extensions/gsd/tests/doctor-proactive.test.ts +244 -0
- package/src/resources/extensions/gsd/tests/doctor-runtime.test.ts +303 -0
- package/src/resources/extensions/gsd/tests/feature-branch-lifecycle-integration.test.ts +434 -0
- package/src/resources/extensions/gsd/tests/gsd-db.test.ts +353 -0
- package/src/resources/extensions/gsd/tests/gsd-inspect.test.ts +125 -0
- package/src/resources/extensions/gsd/tests/gsd-tools.test.ts +326 -0
- package/src/resources/extensions/gsd/tests/integration-edge.test.ts +228 -0
- package/src/resources/extensions/gsd/tests/integration-lifecycle.test.ts +277 -0
- package/src/resources/extensions/gsd/tests/md-importer.test.ts +411 -0
- package/src/resources/extensions/gsd/tests/metrics.test.ts +197 -0
- package/src/resources/extensions/gsd/tests/milestone-transition-worktree.test.ts +144 -0
- package/src/resources/extensions/gsd/tests/model-cost-table.test.ts +69 -0
- package/src/resources/extensions/gsd/tests/model-isolation.test.ts +99 -0
- package/src/resources/extensions/gsd/tests/model-router.test.ts +167 -0
- package/src/resources/extensions/gsd/tests/parsers.test.ts +40 -0
- package/src/resources/extensions/gsd/tests/post-unit-hooks.test.ts +41 -1
- package/src/resources/extensions/gsd/tests/preferences-git.test.ts +0 -1
- package/src/resources/extensions/gsd/tests/preferences-hooks.test.ts +0 -1
- package/src/resources/extensions/gsd/tests/preferences-mode.test.ts +110 -0
- package/src/resources/extensions/gsd/tests/preferences-models.test.ts +0 -1
- package/src/resources/extensions/gsd/tests/prompt-budget-enforcement.test.ts +464 -0
- package/src/resources/extensions/gsd/tests/prompt-db.test.ts +385 -0
- package/src/resources/extensions/gsd/tests/remote-questions.test.ts +488 -1
- package/src/resources/extensions/gsd/tests/resolve-ts-hooks.mjs +17 -29
- package/src/resources/extensions/gsd/tests/resolve-ts.mjs +2 -8
- package/src/resources/extensions/gsd/tests/routing-history.test.ts +215 -62
- package/src/resources/extensions/gsd/tests/skill-lifecycle.test.ts +126 -0
- package/src/resources/extensions/gsd/tests/stop-auto-remote.test.ts +31 -8
- package/src/resources/extensions/gsd/tests/token-savings.test.ts +366 -0
- package/src/resources/extensions/gsd/tests/triage-dispatch.test.ts +224 -0
- package/src/resources/extensions/gsd/tests/triage-resolution.test.ts +215 -0
- package/src/resources/extensions/gsd/tests/unit-runtime.test.ts +25 -1
- package/src/resources/extensions/gsd/tests/visualizer-critical-path.test.ts +145 -0
- package/src/resources/extensions/gsd/tests/visualizer-data.test.ts +290 -0
- package/src/resources/extensions/gsd/tests/visualizer-overlay.test.ts +120 -0
- package/src/resources/extensions/gsd/tests/visualizer-views.test.ts +478 -0
- package/src/resources/extensions/gsd/tests/worktree-db-integration.test.ts +205 -0
- package/src/resources/extensions/gsd/tests/worktree-db.test.ts +442 -0
- package/src/resources/extensions/gsd/tests/worktree-post-create-hook.test.ts +165 -0
- package/src/resources/extensions/gsd/triage-resolution.ts +200 -0
- package/src/resources/extensions/gsd/triage-ui.ts +175 -0
- package/src/resources/extensions/gsd/types.ts +29 -0
- package/src/resources/extensions/gsd/undo.ts +0 -1
- package/src/resources/extensions/gsd/unit-runtime.ts +5 -1
- package/src/resources/extensions/gsd/visualizer-data.ts +505 -0
- package/src/resources/extensions/gsd/visualizer-overlay.ts +337 -0
- package/src/resources/extensions/gsd/visualizer-views.ts +755 -0
- package/src/resources/extensions/gsd/worktree-command.ts +18 -0
- package/src/resources/extensions/gsd/worktree-manager.ts +11 -4
- package/src/resources/extensions/remote-questions/config.ts +4 -2
- package/src/resources/extensions/remote-questions/discord-adapter.ts +35 -4
- package/src/resources/extensions/remote-questions/format.ts +166 -14
- package/src/resources/extensions/remote-questions/manager.ts +14 -4
- package/src/resources/extensions/remote-questions/remote-command.ts +100 -4
- package/src/resources/extensions/remote-questions/slack-adapter.ts +58 -2
- package/src/resources/extensions/remote-questions/telegram-adapter.ts +161 -0
- package/src/resources/extensions/remote-questions/types.ts +2 -1
- package/src/resources/extensions/ttsr/ttsr-manager.ts +26 -0
- package/src/resources/extensions/voice/index.ts +4 -3
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
You are executing a GSD quick task — a lightweight, focused unit of work outside the milestone/slice ceremony.
|
|
2
|
+
|
|
3
|
+
## QUICK TASK: {{description}}
|
|
4
|
+
|
|
5
|
+
**Task directory:** `{{taskDir}}`
|
|
6
|
+
**Branch:** `{{branch}}`
|
|
7
|
+
|
|
8
|
+
## Instructions
|
|
9
|
+
|
|
10
|
+
1. Read the task description above carefully. This is a focused, self-contained task.
|
|
11
|
+
2. If a `GSD Skill Preferences` block is present in system context, follow it.
|
|
12
|
+
3. Read relevant code before modifying. Understand existing patterns.
|
|
13
|
+
4. Execute the task completely:
|
|
14
|
+
- Build the real thing, not stubs or placeholders.
|
|
15
|
+
- Write or update tests where appropriate.
|
|
16
|
+
- Handle error cases and edge cases.
|
|
17
|
+
5. Verify your work:
|
|
18
|
+
- Run tests if applicable.
|
|
19
|
+
- Verify both happy path and failure modes for non-trivial changes.
|
|
20
|
+
6. Commit your changes atomically:
|
|
21
|
+
- Use conventional commit messages (feat:, fix:, refactor:, etc.)
|
|
22
|
+
- Stage only relevant files — never commit secrets or runtime files.
|
|
23
|
+
- Commit logical units separately if the task involves distinct changes.
|
|
24
|
+
7. Write a brief summary to `{{summaryPath}}`:
|
|
25
|
+
|
|
26
|
+
```markdown
|
|
27
|
+
# Quick Task: {{description}}
|
|
28
|
+
|
|
29
|
+
**Date:** {{date}}
|
|
30
|
+
**Branch:** {{branch}}
|
|
31
|
+
|
|
32
|
+
## What Changed
|
|
33
|
+
- <concise list of changes>
|
|
34
|
+
|
|
35
|
+
## Files Modified
|
|
36
|
+
- <list of files>
|
|
37
|
+
|
|
38
|
+
## Verification
|
|
39
|
+
- <what was tested/verified>
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
8. Update `.gsd/STATE.md` — add or update the "Quick Tasks Completed" table:
|
|
43
|
+
- If the section doesn't exist, create it after "### Blockers/Concerns"
|
|
44
|
+
- Table format: `| # | Description | Date | Commit | Directory |`
|
|
45
|
+
- Add a row: `| {{taskNum}} | {{description}} | {{date}} | <commit-hash> | [{{taskNum}}-{{slug}}](./quick/{{taskNum}}-{{slug}}/) |`
|
|
46
|
+
- Update the "Last activity" line
|
|
47
|
+
|
|
48
|
+
When done, say: "Quick task {{taskNum}} complete."
|
|
@@ -16,6 +16,12 @@ All relevant context has been preloaded below — the current roadmap, completed
|
|
|
16
16
|
|
|
17
17
|
{{inlinedContext}}
|
|
18
18
|
|
|
19
|
+
## Deferred Captures
|
|
20
|
+
|
|
21
|
+
The following user thoughts were captured during execution and deferred to future slices during triage. Consider whether any should influence the remaining roadmap:
|
|
22
|
+
|
|
23
|
+
{{deferredCaptures}}
|
|
24
|
+
|
|
19
25
|
If a `GSD Skill Preferences` block is present in system context, use it to decide which skills to load and follow during reassessment, without relaxing required verification or artifact rules.
|
|
20
26
|
|
|
21
27
|
Then assess whether the remaining roadmap still makes sense given what was just built.
|
|
@@ -12,6 +12,14 @@ All relevant context has been preloaded below — the roadmap, current slice pla
|
|
|
12
12
|
|
|
13
13
|
{{inlinedContext}}
|
|
14
14
|
|
|
15
|
+
## Capture Context
|
|
16
|
+
|
|
17
|
+
The following user-captured thoughts triggered or informed this replan:
|
|
18
|
+
|
|
19
|
+
{{captureContext}}
|
|
20
|
+
|
|
21
|
+
Consider these captures when rewriting the remaining tasks — they represent the user's real-time insights about what needs to change.
|
|
22
|
+
|
|
15
23
|
## Hard Constraints
|
|
16
24
|
|
|
17
25
|
- **Do NOT renumber or remove completed tasks.** All `[x]` tasks and their IDs must remain exactly as they are in the plan.
|
|
@@ -128,6 +128,7 @@ Templates showing the expected format for each artifact type are in:
|
|
|
128
128
|
- `/gsd stop` - stop auto-mode
|
|
129
129
|
- `/gsd status` - progress dashboard overlay
|
|
130
130
|
- `/gsd queue` - queue future milestones (safe while auto-mode is running)
|
|
131
|
+
- `/gsd quick <task>` - quick task with GSD guarantees (atomic commits, state tracking) but no milestone ceremony
|
|
131
132
|
- `Ctrl+Alt+G` - toggle dashboard overlay
|
|
132
133
|
- `Ctrl+Alt+B` - show shell processes
|
|
133
134
|
|
|
@@ -139,7 +140,7 @@ Templates showing the expected format for each artifact type are in:
|
|
|
139
140
|
|
|
140
141
|
**File editing:** Always `read` a file before using `edit`. The `edit` tool requires exact text match — you need the real content, not a guess. Use `write` only for new files or complete rewrites.
|
|
141
142
|
|
|
142
|
-
**Code navigation:** Use `lsp` for
|
|
143
|
+
**Code navigation:** Use `lsp` for definition, type_definition, implementation, references, incoming_calls, outgoing_calls, hover, signature, symbols, rename, code_actions, format, and diagnostics. Falls back gracefully if no server is available. Never `grep` for a symbol definition when `lsp` can resolve it semantically. Never shell out to prettier/rustfmt/gofmt when `lsp format` is available. After editing code, use `lsp diagnostics` to verify no type errors were introduced.
|
|
143
144
|
|
|
144
145
|
**Codebase exploration:** Use `subagent` with `scout` for broad unfamiliar subsystem mapping. Use `rg` for text search across files. Use `lsp` for structural navigation. Never read files one-by-one to "explore" — search first, then read what's relevant.
|
|
145
146
|
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
You are triaging user-captured thoughts during a GSD session.
|
|
2
|
+
|
|
3
|
+
## UNIT: Triage Captures
|
|
4
|
+
|
|
5
|
+
The user captured thoughts during execution using `/gsd capture`. Your job is to classify each capture, present your proposals, get user confirmation, and update CAPTURES.md with the final classifications.
|
|
6
|
+
|
|
7
|
+
## Pending Captures
|
|
8
|
+
|
|
9
|
+
{{pendingCaptures}}
|
|
10
|
+
|
|
11
|
+
## Current Slice Plan
|
|
12
|
+
|
|
13
|
+
{{currentPlan}}
|
|
14
|
+
|
|
15
|
+
## Current Roadmap
|
|
16
|
+
|
|
17
|
+
{{roadmapContext}}
|
|
18
|
+
|
|
19
|
+
## Classification Criteria
|
|
20
|
+
|
|
21
|
+
For each capture, classify it as one of:
|
|
22
|
+
|
|
23
|
+
- **quick-task**: Small, self-contained, no downstream impact. Can be done in minutes without modifying the plan. Examples: fix a typo, add a missing import, tweak a config value.
|
|
24
|
+
- **inject**: Belongs in the current slice but wasn't planned. Needs a new task added to the slice plan. Examples: add error handling to a module being built, add a missing test case for current work.
|
|
25
|
+
- **defer**: Belongs in a future slice or milestone. Not urgent for current work. Examples: performance optimization, feature that depends on unbuilt infrastructure, nice-to-have enhancement.
|
|
26
|
+
- **replan**: Changes the shape of remaining work in the current slice. Existing incomplete tasks may need rewriting. Examples: "the approach is wrong, we need to use X instead of Y", discovering a fundamental constraint.
|
|
27
|
+
- **note**: Informational only. No action needed right now. Good context for future reference. Examples: "remember that the API has a rate limit", observations about code quality.
|
|
28
|
+
|
|
29
|
+
## Decision Guidelines
|
|
30
|
+
|
|
31
|
+
- Prefer **quick-task** when the work is clearly small and self-contained.
|
|
32
|
+
- Prefer **inject** over **replan** when only a new task is needed, not rewriting existing ones.
|
|
33
|
+
- Prefer **defer** over **inject** when the work doesn't belong in the current slice's scope.
|
|
34
|
+
- Use **replan** only when remaining incomplete tasks need to change — not just for adding work.
|
|
35
|
+
- Use **note** for observations that don't require action.
|
|
36
|
+
- When unsure between quick-task and inject, consider: will this take more than 10 minutes? If yes, inject.
|
|
37
|
+
|
|
38
|
+
## Instructions
|
|
39
|
+
|
|
40
|
+
1. **Classify** each pending capture using the criteria above.
|
|
41
|
+
|
|
42
|
+
2. **Present** your classifications to the user using `ask_user_questions`. For each capture, show:
|
|
43
|
+
- The capture text
|
|
44
|
+
- Your proposed classification
|
|
45
|
+
- Your rationale
|
|
46
|
+
- If applicable, which files would be affected
|
|
47
|
+
|
|
48
|
+
For captures classified as **note** or **defer**, auto-confirm without asking — these are low-impact.
|
|
49
|
+
For captures classified as **quick-task**, **inject**, or **replan**, ask the user to confirm or choose a different classification.
|
|
50
|
+
|
|
51
|
+
3. **Update** `.gsd/CAPTURES.md` — for each capture, update its section with the confirmed classification:
|
|
52
|
+
- Change `**Status:** pending` to `**Status:** resolved`
|
|
53
|
+
- Add `**Classification:** <type>`
|
|
54
|
+
- Add `**Resolution:** <brief description of what will happen>`
|
|
55
|
+
- Add `**Rationale:** <why this classification>`
|
|
56
|
+
- Add `**Resolved:** <current ISO timestamp>`
|
|
57
|
+
|
|
58
|
+
4. **Summarize** what was triaged: how many captures, what classifications were assigned, and what actions are pending (e.g., "2 quick-tasks ready for execution, 1 deferred to S03").
|
|
59
|
+
|
|
60
|
+
**Important:** Do NOT execute any resolutions. Only classify and update CAPTURES.md. Resolution execution happens separately (in auto-mode dispatch or manually by the user).
|
|
61
|
+
|
|
62
|
+
When done, say: "Triage complete."
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GSD Quick Mode — /gsd quick <task>
|
|
3
|
+
* Copyright (c) 2026 Jeremy McSpadden <jeremy@fluxlabs.net>
|
|
4
|
+
*
|
|
5
|
+
* Lightweight task execution with GSD guarantees (atomic commits, state
|
|
6
|
+
* tracking) but without the full milestone/slice ceremony.
|
|
7
|
+
*
|
|
8
|
+
* Quick tasks live in `.gsd/quick/` and are tracked in STATE.md's
|
|
9
|
+
* "Quick Tasks Completed" table.
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
import type { ExtensionAPI, ExtensionCommandContext } from "@gsd/pi-coding-agent";
|
|
13
|
+
import { existsSync, mkdirSync, readdirSync } from "node:fs";
|
|
14
|
+
import { join } from "node:path";
|
|
15
|
+
import { loadPrompt } from "./prompt-loader.js";
|
|
16
|
+
import { gsdRoot } from "./paths.js";
|
|
17
|
+
import { GitServiceImpl, runGit } from "./git-service.js";
|
|
18
|
+
import { loadEffectiveGSDPreferences } from "./preferences.js";
|
|
19
|
+
|
|
20
|
+
// ─── Quick Task Helpers ───────────────────────────────────────────────────────
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Generate a URL-friendly slug from a description.
|
|
24
|
+
* Lowercase, hyphens, max 40 chars.
|
|
25
|
+
*/
|
|
26
|
+
function slugify(text: string): string {
|
|
27
|
+
return text
|
|
28
|
+
.toLowerCase()
|
|
29
|
+
.replace(/[^a-z0-9]+/g, "-")
|
|
30
|
+
.replace(/^-|-$/g, "")
|
|
31
|
+
.slice(0, 40)
|
|
32
|
+
.replace(/-$/, "");
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Determine the next quick task number by scanning existing directories.
|
|
37
|
+
*/
|
|
38
|
+
function getNextTaskNum(quickDir: string): number {
|
|
39
|
+
if (!existsSync(quickDir)) return 1;
|
|
40
|
+
try {
|
|
41
|
+
const entries = readdirSync(quickDir, { withFileTypes: true });
|
|
42
|
+
let max = 0;
|
|
43
|
+
for (const entry of entries) {
|
|
44
|
+
if (!entry.isDirectory()) continue;
|
|
45
|
+
const match = entry.name.match(/^(\d+)-/);
|
|
46
|
+
if (match) {
|
|
47
|
+
const num = parseInt(match[1], 10);
|
|
48
|
+
if (num > max) max = num;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
return max + 1;
|
|
52
|
+
} catch {
|
|
53
|
+
return 1;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Ensure the quick task directory structure exists.
|
|
59
|
+
* Returns the task directory path.
|
|
60
|
+
*/
|
|
61
|
+
function ensureQuickDir(basePath: string, taskNum: number, slug: string): string {
|
|
62
|
+
const quickDir = join(gsdRoot(basePath), "quick");
|
|
63
|
+
const taskDir = join(quickDir, `${taskNum}-${slug}`);
|
|
64
|
+
mkdirSync(taskDir, { recursive: true });
|
|
65
|
+
return taskDir;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
// ─── Main Handler ─────────────────────────────────────────────────────────────
|
|
69
|
+
|
|
70
|
+
export async function handleQuick(
|
|
71
|
+
args: string,
|
|
72
|
+
ctx: ExtensionCommandContext,
|
|
73
|
+
pi: ExtensionAPI,
|
|
74
|
+
): Promise<void> {
|
|
75
|
+
const basePath = process.cwd();
|
|
76
|
+
const root = gsdRoot(basePath);
|
|
77
|
+
|
|
78
|
+
// Validate: .gsd/ must exist
|
|
79
|
+
if (!existsSync(root)) {
|
|
80
|
+
ctx.ui.notify(
|
|
81
|
+
"No .gsd/ directory found. Run /gsd to initialize a project first.",
|
|
82
|
+
"error",
|
|
83
|
+
);
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
// Parse description from args
|
|
88
|
+
let description = args.trim();
|
|
89
|
+
if (!description) {
|
|
90
|
+
ctx.ui.notify(
|
|
91
|
+
"Usage: /gsd quick <task description>\n\nExample: /gsd quick fix login button not responding on mobile",
|
|
92
|
+
"info",
|
|
93
|
+
);
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
// Setup
|
|
98
|
+
const quickDir = join(root, "quick");
|
|
99
|
+
const taskNum = getNextTaskNum(quickDir);
|
|
100
|
+
const slug = slugify(description);
|
|
101
|
+
const taskDir = ensureQuickDir(basePath, taskNum, slug);
|
|
102
|
+
const taskDirRel = `.gsd/quick/${taskNum}-${slug}`;
|
|
103
|
+
const date = new Date().toISOString().split("T")[0];
|
|
104
|
+
|
|
105
|
+
// Create git branch for the quick task
|
|
106
|
+
const gitPrefs = loadEffectiveGSDPreferences()?.preferences?.git ?? {};
|
|
107
|
+
const git = new GitServiceImpl(basePath, gitPrefs);
|
|
108
|
+
const branchName = `gsd/quick/${taskNum}-${slug}`;
|
|
109
|
+
|
|
110
|
+
let branchCreated = false;
|
|
111
|
+
try {
|
|
112
|
+
const current = git.getCurrentBranch();
|
|
113
|
+
if (current !== branchName) {
|
|
114
|
+
// Auto-commit any dirty state before switching
|
|
115
|
+
try {
|
|
116
|
+
git.autoCommit("quick-task", `Q${taskNum}`, []);
|
|
117
|
+
} catch { /* nothing to commit — fine */ }
|
|
118
|
+
|
|
119
|
+
runGit(basePath, ["checkout", "-b", branchName]);
|
|
120
|
+
branchCreated = true;
|
|
121
|
+
}
|
|
122
|
+
} catch (err) {
|
|
123
|
+
// Branch creation failed — continue on current branch
|
|
124
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
125
|
+
ctx.ui.notify(`Could not create branch ${branchName}: ${message}. Working on current branch.`, "warning");
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
const actualBranch = branchCreated ? branchName : git.getCurrentBranch();
|
|
129
|
+
|
|
130
|
+
// Notify user
|
|
131
|
+
ctx.ui.notify(
|
|
132
|
+
`Quick task ${taskNum}: ${description}\nDirectory: ${taskDirRel}\nBranch: ${actualBranch}`,
|
|
133
|
+
"info",
|
|
134
|
+
);
|
|
135
|
+
|
|
136
|
+
// Build and dispatch the quick task prompt
|
|
137
|
+
const summaryPath = `${taskDirRel}/${taskNum}-SUMMARY.md`;
|
|
138
|
+
const prompt = loadPrompt("quick-task", {
|
|
139
|
+
description,
|
|
140
|
+
taskDir: taskDirRel,
|
|
141
|
+
branch: actualBranch,
|
|
142
|
+
summaryPath,
|
|
143
|
+
date,
|
|
144
|
+
taskNum: String(taskNum),
|
|
145
|
+
slug,
|
|
146
|
+
});
|
|
147
|
+
|
|
148
|
+
pi.sendMessage(
|
|
149
|
+
{
|
|
150
|
+
customType: "gsd-quick-task",
|
|
151
|
+
content: prompt,
|
|
152
|
+
display: false,
|
|
153
|
+
},
|
|
154
|
+
{ triggerTurn: true },
|
|
155
|
+
);
|
|
156
|
+
}
|
|
@@ -110,10 +110,12 @@ function listSkillDirs(): string[] {
|
|
|
110
110
|
function parseSkillFrontmatter(path: string): { name?: string; description?: string } | null {
|
|
111
111
|
try {
|
|
112
112
|
const content = readFileSync(path, "utf-8");
|
|
113
|
-
|
|
114
|
-
if (!
|
|
113
|
+
// Use indexOf instead of [\s\S]*? regex to avoid backtracking (#468)
|
|
114
|
+
if (!content.startsWith('---\n')) return null;
|
|
115
|
+
const endIdx = content.indexOf('\n---', 4);
|
|
116
|
+
if (endIdx === -1) return null;
|
|
115
117
|
|
|
116
|
-
const fm =
|
|
118
|
+
const fm = content.slice(4, endIdx);
|
|
117
119
|
const result: { name?: string; description?: string } = {};
|
|
118
120
|
|
|
119
121
|
const nameMatch = fm.match(/^name:\s*(.+)$/m);
|