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.
Files changed (289) hide show
  1. package/README.md +5 -1
  2. package/dist/cli.js +3 -3
  3. package/dist/onboarding.d.ts +3 -1
  4. package/dist/onboarding.js +77 -3
  5. package/dist/remote-questions-config.d.ts +1 -1
  6. package/dist/resources/extensions/google-search/index.ts +164 -47
  7. package/dist/resources/extensions/gsd/auto-dashboard.ts +14 -2
  8. package/dist/resources/extensions/gsd/auto-prompts.ts +148 -39
  9. package/dist/resources/extensions/gsd/auto-worktree.ts +93 -9
  10. package/dist/resources/extensions/gsd/auto.ts +690 -39
  11. package/dist/resources/extensions/gsd/captures.ts +384 -0
  12. package/dist/resources/extensions/gsd/commands.ts +654 -36
  13. package/dist/resources/extensions/gsd/complexity-classifier.ts +322 -0
  14. package/dist/resources/extensions/gsd/context-budget.ts +243 -0
  15. package/dist/resources/extensions/gsd/context-store.ts +195 -0
  16. package/dist/resources/extensions/gsd/dashboard-overlay.ts +51 -3
  17. package/dist/resources/extensions/gsd/db-writer.ts +341 -0
  18. package/dist/resources/extensions/gsd/debug-logger.ts +178 -0
  19. package/dist/resources/extensions/gsd/dispatch-guard.ts +0 -1
  20. package/dist/resources/extensions/gsd/docs/preferences-reference.md +54 -0
  21. package/dist/resources/extensions/gsd/doctor-proactive.ts +286 -0
  22. package/dist/resources/extensions/gsd/doctor.ts +283 -2
  23. package/dist/resources/extensions/gsd/export.ts +81 -2
  24. package/dist/resources/extensions/gsd/files.ts +39 -9
  25. package/dist/resources/extensions/gsd/git-service.ts +6 -0
  26. package/dist/resources/extensions/gsd/gsd-db.ts +752 -0
  27. package/dist/resources/extensions/gsd/guided-flow.ts +26 -1
  28. package/dist/resources/extensions/gsd/history.ts +0 -1
  29. package/dist/resources/extensions/gsd/index.ts +277 -1
  30. package/dist/resources/extensions/gsd/md-importer.ts +526 -0
  31. package/dist/resources/extensions/gsd/metrics.ts +84 -0
  32. package/dist/resources/extensions/gsd/model-cost-table.ts +65 -0
  33. package/dist/resources/extensions/gsd/model-router.ts +256 -0
  34. package/dist/resources/extensions/gsd/notifications.ts +0 -1
  35. package/dist/resources/extensions/gsd/post-unit-hooks.ts +72 -2
  36. package/dist/resources/extensions/gsd/preferences.ts +198 -150
  37. package/dist/resources/extensions/gsd/prompt-loader.ts +45 -9
  38. package/dist/resources/extensions/gsd/prompts/execute-task.md +3 -5
  39. package/dist/resources/extensions/gsd/prompts/heal-skill.md +45 -0
  40. package/dist/resources/extensions/gsd/prompts/plan-slice.md +5 -1
  41. package/dist/resources/extensions/gsd/prompts/quick-task.md +48 -0
  42. package/dist/resources/extensions/gsd/prompts/reassess-roadmap.md +6 -0
  43. package/dist/resources/extensions/gsd/prompts/replan-slice.md +8 -0
  44. package/dist/resources/extensions/gsd/prompts/system.md +2 -1
  45. package/dist/resources/extensions/gsd/prompts/triage-captures.md +62 -0
  46. package/dist/resources/extensions/gsd/quick.ts +156 -0
  47. package/dist/resources/extensions/gsd/skill-discovery.ts +5 -3
  48. package/dist/resources/extensions/gsd/skill-health.ts +417 -0
  49. package/dist/resources/extensions/gsd/skill-telemetry.ts +127 -0
  50. package/dist/resources/extensions/gsd/state.ts +30 -0
  51. package/dist/resources/extensions/gsd/templates/preferences.md +1 -0
  52. package/dist/resources/extensions/gsd/tests/captures.test.ts +438 -0
  53. package/dist/resources/extensions/gsd/tests/complexity-classifier.test.ts +181 -0
  54. package/dist/resources/extensions/gsd/tests/context-budget.test.ts +283 -0
  55. package/dist/resources/extensions/gsd/tests/context-compression.test.ts +1 -1
  56. package/dist/resources/extensions/gsd/tests/context-store.test.ts +462 -0
  57. package/dist/resources/extensions/gsd/tests/continue-here.test.ts +204 -0
  58. package/dist/resources/extensions/gsd/tests/dashboard-budget.test.ts +346 -0
  59. package/dist/resources/extensions/gsd/tests/db-writer.test.ts +602 -0
  60. package/dist/resources/extensions/gsd/tests/debug-logger.test.ts +185 -0
  61. package/dist/resources/extensions/gsd/tests/derive-state-db.test.ts +406 -0
  62. package/dist/resources/extensions/gsd/tests/dispatch-guard.test.ts +0 -1
  63. package/dist/resources/extensions/gsd/tests/dist-redirect.mjs +22 -0
  64. package/dist/resources/extensions/gsd/tests/doctor-proactive.test.ts +244 -0
  65. package/dist/resources/extensions/gsd/tests/doctor-runtime.test.ts +303 -0
  66. package/dist/resources/extensions/gsd/tests/feature-branch-lifecycle-integration.test.ts +434 -0
  67. package/dist/resources/extensions/gsd/tests/gsd-db.test.ts +353 -0
  68. package/dist/resources/extensions/gsd/tests/gsd-inspect.test.ts +125 -0
  69. package/dist/resources/extensions/gsd/tests/gsd-tools.test.ts +326 -0
  70. package/dist/resources/extensions/gsd/tests/integration-edge.test.ts +228 -0
  71. package/dist/resources/extensions/gsd/tests/integration-lifecycle.test.ts +277 -0
  72. package/dist/resources/extensions/gsd/tests/md-importer.test.ts +411 -0
  73. package/dist/resources/extensions/gsd/tests/metrics.test.ts +197 -0
  74. package/dist/resources/extensions/gsd/tests/milestone-transition-worktree.test.ts +144 -0
  75. package/dist/resources/extensions/gsd/tests/model-cost-table.test.ts +69 -0
  76. package/dist/resources/extensions/gsd/tests/model-isolation.test.ts +99 -0
  77. package/dist/resources/extensions/gsd/tests/model-router.test.ts +167 -0
  78. package/dist/resources/extensions/gsd/tests/parsers.test.ts +40 -0
  79. package/dist/resources/extensions/gsd/tests/post-unit-hooks.test.ts +41 -1
  80. package/dist/resources/extensions/gsd/tests/preferences-git.test.ts +0 -1
  81. package/dist/resources/extensions/gsd/tests/preferences-hooks.test.ts +0 -1
  82. package/dist/resources/extensions/gsd/tests/preferences-mode.test.ts +110 -0
  83. package/dist/resources/extensions/gsd/tests/preferences-models.test.ts +0 -1
  84. package/dist/resources/extensions/gsd/tests/prompt-budget-enforcement.test.ts +464 -0
  85. package/dist/resources/extensions/gsd/tests/prompt-db.test.ts +385 -0
  86. package/dist/resources/extensions/gsd/tests/remote-questions.test.ts +488 -1
  87. package/dist/resources/extensions/gsd/tests/resolve-ts-hooks.mjs +17 -29
  88. package/dist/resources/extensions/gsd/tests/resolve-ts.mjs +2 -8
  89. package/dist/resources/extensions/gsd/tests/routing-history.test.ts +215 -62
  90. package/dist/resources/extensions/gsd/tests/skill-lifecycle.test.ts +126 -0
  91. package/dist/resources/extensions/gsd/tests/stop-auto-remote.test.ts +31 -8
  92. package/dist/resources/extensions/gsd/tests/token-savings.test.ts +366 -0
  93. package/dist/resources/extensions/gsd/tests/triage-dispatch.test.ts +224 -0
  94. package/dist/resources/extensions/gsd/tests/triage-resolution.test.ts +215 -0
  95. package/dist/resources/extensions/gsd/tests/unit-runtime.test.ts +25 -1
  96. package/dist/resources/extensions/gsd/tests/visualizer-critical-path.test.ts +145 -0
  97. package/dist/resources/extensions/gsd/tests/visualizer-data.test.ts +290 -0
  98. package/dist/resources/extensions/gsd/tests/visualizer-overlay.test.ts +120 -0
  99. package/dist/resources/extensions/gsd/tests/visualizer-views.test.ts +478 -0
  100. package/dist/resources/extensions/gsd/tests/worktree-db-integration.test.ts +205 -0
  101. package/dist/resources/extensions/gsd/tests/worktree-db.test.ts +442 -0
  102. package/dist/resources/extensions/gsd/tests/worktree-post-create-hook.test.ts +165 -0
  103. package/dist/resources/extensions/gsd/triage-resolution.ts +200 -0
  104. package/dist/resources/extensions/gsd/triage-ui.ts +175 -0
  105. package/dist/resources/extensions/gsd/types.ts +29 -0
  106. package/dist/resources/extensions/gsd/undo.ts +0 -1
  107. package/dist/resources/extensions/gsd/unit-runtime.ts +5 -1
  108. package/dist/resources/extensions/gsd/visualizer-data.ts +505 -0
  109. package/dist/resources/extensions/gsd/visualizer-overlay.ts +337 -0
  110. package/dist/resources/extensions/gsd/visualizer-views.ts +755 -0
  111. package/dist/resources/extensions/gsd/worktree-command.ts +18 -0
  112. package/dist/resources/extensions/gsd/worktree-manager.ts +11 -4
  113. package/dist/resources/extensions/remote-questions/config.ts +4 -2
  114. package/dist/resources/extensions/remote-questions/discord-adapter.ts +35 -4
  115. package/dist/resources/extensions/remote-questions/format.ts +166 -14
  116. package/dist/resources/extensions/remote-questions/manager.ts +14 -4
  117. package/dist/resources/extensions/remote-questions/remote-command.ts +100 -4
  118. package/dist/resources/extensions/remote-questions/slack-adapter.ts +58 -2
  119. package/dist/resources/extensions/remote-questions/telegram-adapter.ts +161 -0
  120. package/dist/resources/extensions/remote-questions/types.ts +2 -1
  121. package/dist/resources/extensions/ttsr/ttsr-manager.ts +26 -0
  122. package/dist/resources/extensions/voice/index.ts +4 -3
  123. package/package.json +1 -1
  124. package/packages/pi-coding-agent/dist/core/agent-session.d.ts.map +1 -1
  125. package/packages/pi-coding-agent/dist/core/agent-session.js +12 -1
  126. package/packages/pi-coding-agent/dist/core/agent-session.js.map +1 -1
  127. package/packages/pi-coding-agent/dist/core/extensions/loader.d.ts.map +1 -1
  128. package/packages/pi-coding-agent/dist/core/extensions/loader.js +5 -0
  129. package/packages/pi-coding-agent/dist/core/extensions/loader.js.map +1 -1
  130. package/packages/pi-coding-agent/dist/core/lsp/client.d.ts +6 -0
  131. package/packages/pi-coding-agent/dist/core/lsp/client.d.ts.map +1 -1
  132. package/packages/pi-coding-agent/dist/core/lsp/client.js +25 -0
  133. package/packages/pi-coding-agent/dist/core/lsp/client.js.map +1 -1
  134. package/packages/pi-coding-agent/dist/core/lsp/index.d.ts +2 -0
  135. package/packages/pi-coding-agent/dist/core/lsp/index.d.ts.map +1 -1
  136. package/packages/pi-coding-agent/dist/core/lsp/index.js +106 -3
  137. package/packages/pi-coding-agent/dist/core/lsp/index.js.map +1 -1
  138. package/packages/pi-coding-agent/dist/core/lsp/lsp.md +6 -0
  139. package/packages/pi-coding-agent/dist/core/lsp/types.d.ts +35 -0
  140. package/packages/pi-coding-agent/dist/core/lsp/types.d.ts.map +1 -1
  141. package/packages/pi-coding-agent/dist/core/lsp/types.js +6 -0
  142. package/packages/pi-coding-agent/dist/core/lsp/types.js.map +1 -1
  143. package/packages/pi-coding-agent/dist/core/lsp/utils.d.ts +3 -1
  144. package/packages/pi-coding-agent/dist/core/lsp/utils.d.ts.map +1 -1
  145. package/packages/pi-coding-agent/dist/core/lsp/utils.js +45 -0
  146. package/packages/pi-coding-agent/dist/core/lsp/utils.js.map +1 -1
  147. package/packages/pi-coding-agent/dist/core/settings-manager.d.ts +6 -0
  148. package/packages/pi-coding-agent/dist/core/settings-manager.d.ts.map +1 -1
  149. package/packages/pi-coding-agent/dist/core/settings-manager.js +43 -11
  150. package/packages/pi-coding-agent/dist/core/settings-manager.js.map +1 -1
  151. package/packages/pi-coding-agent/dist/core/system-prompt.d.ts.map +1 -1
  152. package/packages/pi-coding-agent/dist/core/system-prompt.js +7 -1
  153. package/packages/pi-coding-agent/dist/core/system-prompt.js.map +1 -1
  154. package/packages/pi-coding-agent/dist/core/tools/edit.d.ts.map +1 -1
  155. package/packages/pi-coding-agent/dist/core/tools/edit.js +5 -0
  156. package/packages/pi-coding-agent/dist/core/tools/edit.js.map +1 -1
  157. package/packages/pi-coding-agent/dist/core/tools/index.d.ts +2 -0
  158. package/packages/pi-coding-agent/dist/core/tools/index.d.ts.map +1 -1
  159. package/packages/pi-coding-agent/dist/core/tools/write.d.ts.map +1 -1
  160. package/packages/pi-coding-agent/dist/core/tools/write.js +5 -0
  161. package/packages/pi-coding-agent/dist/core/tools/write.js.map +1 -1
  162. package/packages/pi-coding-agent/src/core/agent-session.ts +13 -1
  163. package/packages/pi-coding-agent/src/core/extensions/loader.ts +6 -0
  164. package/packages/pi-coding-agent/src/core/lsp/client.ts +26 -0
  165. package/packages/pi-coding-agent/src/core/lsp/index.ts +157 -2
  166. package/packages/pi-coding-agent/src/core/lsp/lsp.md +6 -0
  167. package/packages/pi-coding-agent/src/core/lsp/types.ts +53 -0
  168. package/packages/pi-coding-agent/src/core/lsp/utils.ts +56 -0
  169. package/packages/pi-coding-agent/src/core/settings-manager.ts +41 -11
  170. package/packages/pi-coding-agent/src/core/system-prompt.ts +7 -1
  171. package/packages/pi-coding-agent/src/core/tools/edit.ts +3 -0
  172. package/packages/pi-coding-agent/src/core/tools/write.ts +3 -0
  173. package/src/resources/extensions/google-search/index.ts +164 -47
  174. package/src/resources/extensions/gsd/auto-dashboard.ts +14 -2
  175. package/src/resources/extensions/gsd/auto-prompts.ts +148 -39
  176. package/src/resources/extensions/gsd/auto-worktree.ts +93 -9
  177. package/src/resources/extensions/gsd/auto.ts +690 -39
  178. package/src/resources/extensions/gsd/captures.ts +384 -0
  179. package/src/resources/extensions/gsd/commands.ts +654 -36
  180. package/src/resources/extensions/gsd/complexity-classifier.ts +322 -0
  181. package/src/resources/extensions/gsd/context-budget.ts +243 -0
  182. package/src/resources/extensions/gsd/context-store.ts +195 -0
  183. package/src/resources/extensions/gsd/dashboard-overlay.ts +51 -3
  184. package/src/resources/extensions/gsd/db-writer.ts +341 -0
  185. package/src/resources/extensions/gsd/debug-logger.ts +178 -0
  186. package/src/resources/extensions/gsd/dispatch-guard.ts +0 -1
  187. package/src/resources/extensions/gsd/docs/preferences-reference.md +54 -0
  188. package/src/resources/extensions/gsd/doctor-proactive.ts +286 -0
  189. package/src/resources/extensions/gsd/doctor.ts +283 -2
  190. package/src/resources/extensions/gsd/export.ts +81 -2
  191. package/src/resources/extensions/gsd/files.ts +39 -9
  192. package/src/resources/extensions/gsd/git-service.ts +6 -0
  193. package/src/resources/extensions/gsd/gsd-db.ts +752 -0
  194. package/src/resources/extensions/gsd/guided-flow.ts +26 -1
  195. package/src/resources/extensions/gsd/history.ts +0 -1
  196. package/src/resources/extensions/gsd/index.ts +277 -1
  197. package/src/resources/extensions/gsd/md-importer.ts +526 -0
  198. package/src/resources/extensions/gsd/metrics.ts +84 -0
  199. package/src/resources/extensions/gsd/model-cost-table.ts +65 -0
  200. package/src/resources/extensions/gsd/model-router.ts +256 -0
  201. package/src/resources/extensions/gsd/notifications.ts +0 -1
  202. package/src/resources/extensions/gsd/post-unit-hooks.ts +72 -2
  203. package/src/resources/extensions/gsd/preferences.ts +198 -150
  204. package/src/resources/extensions/gsd/prompt-loader.ts +45 -9
  205. package/src/resources/extensions/gsd/prompts/execute-task.md +3 -5
  206. package/src/resources/extensions/gsd/prompts/heal-skill.md +45 -0
  207. package/src/resources/extensions/gsd/prompts/plan-slice.md +5 -1
  208. package/src/resources/extensions/gsd/prompts/quick-task.md +48 -0
  209. package/src/resources/extensions/gsd/prompts/reassess-roadmap.md +6 -0
  210. package/src/resources/extensions/gsd/prompts/replan-slice.md +8 -0
  211. package/src/resources/extensions/gsd/prompts/system.md +2 -1
  212. package/src/resources/extensions/gsd/prompts/triage-captures.md +62 -0
  213. package/src/resources/extensions/gsd/quick.ts +156 -0
  214. package/src/resources/extensions/gsd/skill-discovery.ts +5 -3
  215. package/src/resources/extensions/gsd/skill-health.ts +417 -0
  216. package/src/resources/extensions/gsd/skill-telemetry.ts +127 -0
  217. package/src/resources/extensions/gsd/state.ts +30 -0
  218. package/src/resources/extensions/gsd/templates/preferences.md +1 -0
  219. package/src/resources/extensions/gsd/tests/captures.test.ts +438 -0
  220. package/src/resources/extensions/gsd/tests/complexity-classifier.test.ts +181 -0
  221. package/src/resources/extensions/gsd/tests/context-budget.test.ts +283 -0
  222. package/src/resources/extensions/gsd/tests/context-compression.test.ts +1 -1
  223. package/src/resources/extensions/gsd/tests/context-store.test.ts +462 -0
  224. package/src/resources/extensions/gsd/tests/continue-here.test.ts +204 -0
  225. package/src/resources/extensions/gsd/tests/dashboard-budget.test.ts +346 -0
  226. package/src/resources/extensions/gsd/tests/db-writer.test.ts +602 -0
  227. package/src/resources/extensions/gsd/tests/debug-logger.test.ts +185 -0
  228. package/src/resources/extensions/gsd/tests/derive-state-db.test.ts +406 -0
  229. package/src/resources/extensions/gsd/tests/dispatch-guard.test.ts +0 -1
  230. package/src/resources/extensions/gsd/tests/dist-redirect.mjs +22 -0
  231. package/src/resources/extensions/gsd/tests/doctor-proactive.test.ts +244 -0
  232. package/src/resources/extensions/gsd/tests/doctor-runtime.test.ts +303 -0
  233. package/src/resources/extensions/gsd/tests/feature-branch-lifecycle-integration.test.ts +434 -0
  234. package/src/resources/extensions/gsd/tests/gsd-db.test.ts +353 -0
  235. package/src/resources/extensions/gsd/tests/gsd-inspect.test.ts +125 -0
  236. package/src/resources/extensions/gsd/tests/gsd-tools.test.ts +326 -0
  237. package/src/resources/extensions/gsd/tests/integration-edge.test.ts +228 -0
  238. package/src/resources/extensions/gsd/tests/integration-lifecycle.test.ts +277 -0
  239. package/src/resources/extensions/gsd/tests/md-importer.test.ts +411 -0
  240. package/src/resources/extensions/gsd/tests/metrics.test.ts +197 -0
  241. package/src/resources/extensions/gsd/tests/milestone-transition-worktree.test.ts +144 -0
  242. package/src/resources/extensions/gsd/tests/model-cost-table.test.ts +69 -0
  243. package/src/resources/extensions/gsd/tests/model-isolation.test.ts +99 -0
  244. package/src/resources/extensions/gsd/tests/model-router.test.ts +167 -0
  245. package/src/resources/extensions/gsd/tests/parsers.test.ts +40 -0
  246. package/src/resources/extensions/gsd/tests/post-unit-hooks.test.ts +41 -1
  247. package/src/resources/extensions/gsd/tests/preferences-git.test.ts +0 -1
  248. package/src/resources/extensions/gsd/tests/preferences-hooks.test.ts +0 -1
  249. package/src/resources/extensions/gsd/tests/preferences-mode.test.ts +110 -0
  250. package/src/resources/extensions/gsd/tests/preferences-models.test.ts +0 -1
  251. package/src/resources/extensions/gsd/tests/prompt-budget-enforcement.test.ts +464 -0
  252. package/src/resources/extensions/gsd/tests/prompt-db.test.ts +385 -0
  253. package/src/resources/extensions/gsd/tests/remote-questions.test.ts +488 -1
  254. package/src/resources/extensions/gsd/tests/resolve-ts-hooks.mjs +17 -29
  255. package/src/resources/extensions/gsd/tests/resolve-ts.mjs +2 -8
  256. package/src/resources/extensions/gsd/tests/routing-history.test.ts +215 -62
  257. package/src/resources/extensions/gsd/tests/skill-lifecycle.test.ts +126 -0
  258. package/src/resources/extensions/gsd/tests/stop-auto-remote.test.ts +31 -8
  259. package/src/resources/extensions/gsd/tests/token-savings.test.ts +366 -0
  260. package/src/resources/extensions/gsd/tests/triage-dispatch.test.ts +224 -0
  261. package/src/resources/extensions/gsd/tests/triage-resolution.test.ts +215 -0
  262. package/src/resources/extensions/gsd/tests/unit-runtime.test.ts +25 -1
  263. package/src/resources/extensions/gsd/tests/visualizer-critical-path.test.ts +145 -0
  264. package/src/resources/extensions/gsd/tests/visualizer-data.test.ts +290 -0
  265. package/src/resources/extensions/gsd/tests/visualizer-overlay.test.ts +120 -0
  266. package/src/resources/extensions/gsd/tests/visualizer-views.test.ts +478 -0
  267. package/src/resources/extensions/gsd/tests/worktree-db-integration.test.ts +205 -0
  268. package/src/resources/extensions/gsd/tests/worktree-db.test.ts +442 -0
  269. package/src/resources/extensions/gsd/tests/worktree-post-create-hook.test.ts +165 -0
  270. package/src/resources/extensions/gsd/triage-resolution.ts +200 -0
  271. package/src/resources/extensions/gsd/triage-ui.ts +175 -0
  272. package/src/resources/extensions/gsd/types.ts +29 -0
  273. package/src/resources/extensions/gsd/undo.ts +0 -1
  274. package/src/resources/extensions/gsd/unit-runtime.ts +5 -1
  275. package/src/resources/extensions/gsd/visualizer-data.ts +505 -0
  276. package/src/resources/extensions/gsd/visualizer-overlay.ts +337 -0
  277. package/src/resources/extensions/gsd/visualizer-views.ts +755 -0
  278. package/src/resources/extensions/gsd/worktree-command.ts +18 -0
  279. package/src/resources/extensions/gsd/worktree-manager.ts +11 -4
  280. package/src/resources/extensions/remote-questions/config.ts +4 -2
  281. package/src/resources/extensions/remote-questions/discord-adapter.ts +35 -4
  282. package/src/resources/extensions/remote-questions/format.ts +166 -14
  283. package/src/resources/extensions/remote-questions/manager.ts +14 -4
  284. package/src/resources/extensions/remote-questions/remote-command.ts +100 -4
  285. package/src/resources/extensions/remote-questions/slack-adapter.ts +58 -2
  286. package/src/resources/extensions/remote-questions/telegram-adapter.ts +161 -0
  287. package/src/resources/extensions/remote-questions/types.ts +2 -1
  288. package/src/resources/extensions/ttsr/ttsr-manager.ts +26 -0
  289. 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 go-to-definition, find-references, and type info. Falls back gracefully if no server is available. Never `grep` for a symbol definition when `lsp` can resolve it semantically.
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
- const match = content.match(/^---\n([\s\S]*?)\n---/);
114
- if (!match) return null;
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 = match[1];
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);