gsd-pi 2.28.0-dev.e19bf89 → 2.29.0-dev.23d50d0

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 (285) hide show
  1. package/README.md +24 -17
  2. package/dist/cli.js +15 -9
  3. package/dist/headless.js +4 -0
  4. package/dist/resource-loader.js +80 -8
  5. package/dist/resources/extensions/bg-shell/process-manager.ts +13 -0
  6. package/dist/resources/extensions/gsd/auto-dashboard.ts +217 -65
  7. package/dist/resources/extensions/gsd/auto-dispatch.ts +2 -2
  8. package/dist/resources/extensions/gsd/auto-post-unit.ts +53 -6
  9. package/dist/resources/extensions/gsd/auto-prompts.ts +27 -14
  10. package/dist/resources/extensions/gsd/auto-recovery.ts +33 -23
  11. package/dist/resources/extensions/gsd/auto-start.ts +25 -10
  12. package/dist/resources/extensions/gsd/auto-verification.ts +41 -7
  13. package/dist/resources/extensions/gsd/auto-worktree-sync.ts +21 -6
  14. package/dist/resources/extensions/gsd/auto-worktree.ts +9 -0
  15. package/dist/resources/extensions/gsd/auto.ts +67 -22
  16. package/dist/resources/extensions/gsd/commands-handlers.ts +3 -11
  17. package/dist/resources/extensions/gsd/commands-logs.ts +536 -0
  18. package/dist/resources/extensions/gsd/commands-prefs-wizard.ts +90 -47
  19. package/dist/resources/extensions/gsd/commands-workflow-templates.ts +544 -0
  20. package/dist/resources/extensions/gsd/commands.ts +75 -29
  21. package/dist/resources/extensions/gsd/dashboard-overlay.ts +2 -1
  22. package/dist/resources/extensions/gsd/doctor-types.ts +13 -0
  23. package/dist/resources/extensions/gsd/doctor.ts +2 -6
  24. package/dist/resources/extensions/gsd/export.ts +28 -2
  25. package/dist/resources/extensions/gsd/gsd-db.ts +19 -0
  26. package/dist/resources/extensions/gsd/index.ts +2 -1
  27. package/dist/resources/extensions/gsd/json-persistence.ts +67 -0
  28. package/dist/resources/extensions/gsd/mechanical-completion.ts +430 -0
  29. package/dist/resources/extensions/gsd/metrics.ts +17 -31
  30. package/dist/resources/extensions/gsd/paths.ts +17 -8
  31. package/dist/resources/extensions/gsd/preferences-models.ts +7 -1
  32. package/dist/resources/extensions/gsd/preferences-validation.ts +2 -1
  33. package/dist/resources/extensions/gsd/prompts/discuss-headless.md +4 -2
  34. package/dist/resources/extensions/gsd/prompts/guided-discuss-milestone.md +1 -1
  35. package/dist/resources/extensions/gsd/prompts/plan-milestone.md +26 -2
  36. package/dist/resources/extensions/gsd/prompts/plan-slice.md +15 -1
  37. package/dist/resources/extensions/gsd/prompts/workflow-start.md +28 -0
  38. package/dist/resources/extensions/gsd/queue-order.ts +10 -11
  39. package/dist/resources/extensions/gsd/routing-history.ts +13 -17
  40. package/dist/resources/extensions/gsd/session-lock.ts +284 -0
  41. package/dist/resources/extensions/gsd/session-status-io.ts +23 -41
  42. package/dist/resources/extensions/gsd/tests/auto-budget-alerts.test.ts +1 -1
  43. package/dist/resources/extensions/gsd/tests/auto-skip-loop.test.ts +1 -1
  44. package/dist/resources/extensions/gsd/tests/commands-logs.test.ts +241 -0
  45. package/dist/resources/extensions/gsd/tests/extension-selector-separator.test.ts +60 -38
  46. package/dist/resources/extensions/gsd/tests/gsd-inspect.test.ts +1 -1
  47. package/dist/resources/extensions/gsd/tests/mechanical-completion.test.ts +356 -0
  48. package/dist/resources/extensions/gsd/tests/parallel-workers-multi-milestone-e2e.test.ts +1 -1
  49. package/dist/resources/extensions/gsd/tests/plan-slice-prompt.test.ts +1 -0
  50. package/dist/resources/extensions/gsd/tests/session-lock.test.ts +315 -0
  51. package/dist/resources/extensions/gsd/tests/token-profile.test.ts +14 -16
  52. package/dist/resources/extensions/gsd/tests/validate-milestone.test.ts +55 -0
  53. package/dist/resources/extensions/gsd/tests/verification-evidence.test.ts +26 -24
  54. package/dist/resources/extensions/gsd/tests/verification-gate.test.ts +136 -7
  55. package/dist/resources/extensions/gsd/tests/workflow-templates.test.ts +173 -0
  56. package/dist/resources/extensions/gsd/types.ts +3 -0
  57. package/dist/resources/extensions/gsd/unit-runtime.ts +16 -13
  58. package/dist/resources/extensions/gsd/verification-evidence.ts +2 -0
  59. package/dist/resources/extensions/gsd/verification-gate.ts +13 -2
  60. package/dist/resources/extensions/gsd/workflow-templates/bugfix.md +87 -0
  61. package/dist/resources/extensions/gsd/workflow-templates/dep-upgrade.md +74 -0
  62. package/dist/resources/extensions/gsd/workflow-templates/full-project.md +41 -0
  63. package/dist/resources/extensions/gsd/workflow-templates/hotfix.md +45 -0
  64. package/dist/resources/extensions/gsd/workflow-templates/refactor.md +83 -0
  65. package/dist/resources/extensions/gsd/workflow-templates/registry.json +85 -0
  66. package/dist/resources/extensions/gsd/workflow-templates/security-audit.md +73 -0
  67. package/dist/resources/extensions/gsd/workflow-templates/small-feature.md +81 -0
  68. package/dist/resources/extensions/gsd/workflow-templates/spike.md +69 -0
  69. package/dist/resources/extensions/gsd/workflow-templates.ts +241 -0
  70. package/dist/resources/extensions/mcp-client/index.ts +459 -0
  71. package/dist/resources/extensions/remote-questions/discord-adapter.ts +9 -20
  72. package/dist/resources/extensions/remote-questions/http-client.ts +76 -0
  73. package/dist/resources/extensions/remote-questions/notify.ts +1 -2
  74. package/dist/resources/extensions/remote-questions/slack-adapter.ts +11 -18
  75. package/dist/resources/extensions/remote-questions/telegram-adapter.ts +8 -20
  76. package/dist/resources/extensions/remote-questions/types.ts +3 -0
  77. package/dist/resources/extensions/shared/mod.ts +3 -0
  78. package/dist/resources/skills/create-gsd-extension/SKILL.md +87 -0
  79. package/dist/resources/skills/create-gsd-extension/references/compaction-session-control.md +77 -0
  80. package/dist/resources/skills/create-gsd-extension/references/custom-commands.md +139 -0
  81. package/dist/resources/skills/create-gsd-extension/references/custom-rendering.md +108 -0
  82. package/dist/resources/skills/create-gsd-extension/references/custom-tools.md +183 -0
  83. package/dist/resources/skills/create-gsd-extension/references/custom-ui.md +490 -0
  84. package/dist/resources/skills/create-gsd-extension/references/events-reference.md +126 -0
  85. package/dist/resources/skills/create-gsd-extension/references/extension-lifecycle.md +64 -0
  86. package/dist/resources/skills/create-gsd-extension/references/extensionapi-reference.md +75 -0
  87. package/dist/resources/skills/create-gsd-extension/references/extensioncontext-reference.md +53 -0
  88. package/dist/resources/skills/create-gsd-extension/references/key-rules-gotchas.md +36 -0
  89. package/dist/resources/skills/create-gsd-extension/references/mode-behavior.md +32 -0
  90. package/dist/resources/skills/create-gsd-extension/references/model-provider-management.md +89 -0
  91. package/dist/resources/skills/create-gsd-extension/references/packaging-distribution.md +55 -0
  92. package/dist/resources/skills/create-gsd-extension/references/remote-execution-overrides.md +90 -0
  93. package/dist/resources/skills/create-gsd-extension/references/state-management.md +70 -0
  94. package/dist/resources/skills/create-gsd-extension/references/system-prompt-modification.md +52 -0
  95. package/dist/resources/skills/create-gsd-extension/templates/extension-skeleton.ts +51 -0
  96. package/dist/resources/skills/create-gsd-extension/templates/stateful-tool-skeleton.ts +143 -0
  97. package/dist/resources/skills/create-gsd-extension/workflows/add-capability.md +57 -0
  98. package/dist/resources/skills/create-gsd-extension/workflows/create-extension.md +156 -0
  99. package/dist/resources/skills/create-gsd-extension/workflows/debug-extension.md +74 -0
  100. package/dist/resources/skills/create-skill/SKILL.md +184 -0
  101. package/dist/resources/skills/create-skill/references/api-security.md +226 -0
  102. package/dist/resources/skills/create-skill/references/be-clear-and-direct.md +531 -0
  103. package/dist/resources/skills/create-skill/references/common-patterns.md +595 -0
  104. package/dist/resources/skills/create-skill/references/core-principles.md +437 -0
  105. package/dist/resources/skills/create-skill/references/executable-code.md +175 -0
  106. package/dist/resources/skills/create-skill/references/gsd-skill-ecosystem.md +68 -0
  107. package/dist/resources/skills/create-skill/references/iteration-and-testing.md +474 -0
  108. package/dist/resources/skills/create-skill/references/recommended-structure.md +168 -0
  109. package/dist/resources/skills/create-skill/references/skill-structure.md +372 -0
  110. package/dist/resources/skills/create-skill/references/use-xml-tags.md +466 -0
  111. package/dist/resources/skills/create-skill/references/using-scripts.md +113 -0
  112. package/dist/resources/skills/create-skill/references/using-templates.md +112 -0
  113. package/dist/resources/skills/create-skill/references/workflows-and-validation.md +510 -0
  114. package/dist/resources/skills/create-skill/templates/router-skill.md +73 -0
  115. package/dist/resources/skills/create-skill/templates/simple-skill.md +33 -0
  116. package/dist/resources/skills/create-skill/workflows/add-reference.md +96 -0
  117. package/dist/resources/skills/create-skill/workflows/add-script.md +93 -0
  118. package/dist/resources/skills/create-skill/workflows/add-template.md +74 -0
  119. package/dist/resources/skills/create-skill/workflows/add-workflow.md +120 -0
  120. package/dist/resources/skills/create-skill/workflows/audit-skill.md +148 -0
  121. package/dist/resources/skills/create-skill/workflows/create-new-skill.md +196 -0
  122. package/dist/resources/skills/create-skill/workflows/get-guidance.md +121 -0
  123. package/dist/resources/skills/create-skill/workflows/upgrade-to-router.md +161 -0
  124. package/dist/resources/skills/create-skill/workflows/verify-skill.md +204 -0
  125. package/package.json +6 -3
  126. package/packages/native/dist/native.d.ts +2 -0
  127. package/packages/native/dist/native.js +19 -5
  128. package/packages/native/src/native.ts +23 -9
  129. package/packages/pi-coding-agent/dist/core/extensions/loader.d.ts.map +1 -1
  130. package/packages/pi-coding-agent/dist/core/extensions/loader.js +13 -0
  131. package/packages/pi-coding-agent/dist/core/extensions/loader.js.map +1 -1
  132. package/packages/pi-coding-agent/dist/core/lsp/client.d.ts.map +1 -1
  133. package/packages/pi-coding-agent/dist/core/lsp/client.js +3 -0
  134. package/packages/pi-coding-agent/dist/core/lsp/client.js.map +1 -1
  135. package/packages/pi-coding-agent/dist/core/settings-manager.d.ts +3 -0
  136. package/packages/pi-coding-agent/dist/core/settings-manager.d.ts.map +1 -1
  137. package/packages/pi-coding-agent/dist/core/settings-manager.js +8 -0
  138. package/packages/pi-coding-agent/dist/core/settings-manager.js.map +1 -1
  139. package/packages/pi-coding-agent/dist/core/system-prompt.d.ts.map +1 -1
  140. package/packages/pi-coding-agent/dist/core/system-prompt.js +10 -0
  141. package/packages/pi-coding-agent/dist/core/system-prompt.js.map +1 -1
  142. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  143. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js +4 -1
  144. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js.map +1 -1
  145. package/packages/pi-coding-agent/package.json +1 -1
  146. package/packages/pi-coding-agent/scripts/copy-assets.cjs +39 -8
  147. package/packages/pi-coding-agent/src/core/extensions/loader.ts +13 -0
  148. package/packages/pi-coding-agent/src/core/lsp/client.ts +3 -0
  149. package/packages/pi-coding-agent/src/core/settings-manager.ts +11 -0
  150. package/packages/pi-coding-agent/src/core/system-prompt.ts +11 -0
  151. package/packages/pi-coding-agent/src/modes/interactive/interactive-mode.ts +4 -1
  152. package/packages/pi-tui/dist/autocomplete.d.ts +3 -0
  153. package/packages/pi-tui/dist/autocomplete.d.ts.map +1 -1
  154. package/packages/pi-tui/dist/autocomplete.js +14 -0
  155. package/packages/pi-tui/dist/autocomplete.js.map +1 -1
  156. package/packages/pi-tui/src/autocomplete.ts +19 -1
  157. package/pkg/package.json +1 -1
  158. package/src/resources/extensions/bg-shell/process-manager.ts +13 -0
  159. package/src/resources/extensions/gsd/auto-dashboard.ts +217 -65
  160. package/src/resources/extensions/gsd/auto-dispatch.ts +2 -2
  161. package/src/resources/extensions/gsd/auto-post-unit.ts +53 -6
  162. package/src/resources/extensions/gsd/auto-prompts.ts +27 -14
  163. package/src/resources/extensions/gsd/auto-recovery.ts +33 -23
  164. package/src/resources/extensions/gsd/auto-start.ts +25 -10
  165. package/src/resources/extensions/gsd/auto-verification.ts +41 -7
  166. package/src/resources/extensions/gsd/auto-worktree-sync.ts +21 -6
  167. package/src/resources/extensions/gsd/auto-worktree.ts +9 -0
  168. package/src/resources/extensions/gsd/auto.ts +67 -22
  169. package/src/resources/extensions/gsd/commands-handlers.ts +3 -11
  170. package/src/resources/extensions/gsd/commands-logs.ts +536 -0
  171. package/src/resources/extensions/gsd/commands-prefs-wizard.ts +90 -47
  172. package/src/resources/extensions/gsd/commands-workflow-templates.ts +544 -0
  173. package/src/resources/extensions/gsd/commands.ts +75 -29
  174. package/src/resources/extensions/gsd/dashboard-overlay.ts +2 -1
  175. package/src/resources/extensions/gsd/doctor-types.ts +13 -0
  176. package/src/resources/extensions/gsd/doctor.ts +2 -6
  177. package/src/resources/extensions/gsd/export.ts +28 -2
  178. package/src/resources/extensions/gsd/gsd-db.ts +19 -0
  179. package/src/resources/extensions/gsd/index.ts +2 -1
  180. package/src/resources/extensions/gsd/json-persistence.ts +67 -0
  181. package/src/resources/extensions/gsd/mechanical-completion.ts +430 -0
  182. package/src/resources/extensions/gsd/metrics.ts +17 -31
  183. package/src/resources/extensions/gsd/paths.ts +17 -8
  184. package/src/resources/extensions/gsd/preferences-models.ts +7 -1
  185. package/src/resources/extensions/gsd/preferences-validation.ts +2 -1
  186. package/src/resources/extensions/gsd/prompts/discuss-headless.md +4 -2
  187. package/src/resources/extensions/gsd/prompts/guided-discuss-milestone.md +1 -1
  188. package/src/resources/extensions/gsd/prompts/plan-milestone.md +26 -2
  189. package/src/resources/extensions/gsd/prompts/plan-slice.md +15 -1
  190. package/src/resources/extensions/gsd/prompts/workflow-start.md +28 -0
  191. package/src/resources/extensions/gsd/queue-order.ts +10 -11
  192. package/src/resources/extensions/gsd/routing-history.ts +13 -17
  193. package/src/resources/extensions/gsd/session-lock.ts +284 -0
  194. package/src/resources/extensions/gsd/session-status-io.ts +23 -41
  195. package/src/resources/extensions/gsd/tests/auto-budget-alerts.test.ts +1 -1
  196. package/src/resources/extensions/gsd/tests/auto-skip-loop.test.ts +1 -1
  197. package/src/resources/extensions/gsd/tests/commands-logs.test.ts +241 -0
  198. package/src/resources/extensions/gsd/tests/extension-selector-separator.test.ts +60 -38
  199. package/src/resources/extensions/gsd/tests/gsd-inspect.test.ts +1 -1
  200. package/src/resources/extensions/gsd/tests/mechanical-completion.test.ts +356 -0
  201. package/src/resources/extensions/gsd/tests/parallel-workers-multi-milestone-e2e.test.ts +1 -1
  202. package/src/resources/extensions/gsd/tests/plan-slice-prompt.test.ts +1 -0
  203. package/src/resources/extensions/gsd/tests/session-lock.test.ts +315 -0
  204. package/src/resources/extensions/gsd/tests/token-profile.test.ts +14 -16
  205. package/src/resources/extensions/gsd/tests/validate-milestone.test.ts +55 -0
  206. package/src/resources/extensions/gsd/tests/verification-evidence.test.ts +26 -24
  207. package/src/resources/extensions/gsd/tests/verification-gate.test.ts +136 -7
  208. package/src/resources/extensions/gsd/tests/workflow-templates.test.ts +173 -0
  209. package/src/resources/extensions/gsd/types.ts +3 -0
  210. package/src/resources/extensions/gsd/unit-runtime.ts +16 -13
  211. package/src/resources/extensions/gsd/verification-evidence.ts +2 -0
  212. package/src/resources/extensions/gsd/verification-gate.ts +13 -2
  213. package/src/resources/extensions/gsd/workflow-templates/bugfix.md +87 -0
  214. package/src/resources/extensions/gsd/workflow-templates/dep-upgrade.md +74 -0
  215. package/src/resources/extensions/gsd/workflow-templates/full-project.md +41 -0
  216. package/src/resources/extensions/gsd/workflow-templates/hotfix.md +45 -0
  217. package/src/resources/extensions/gsd/workflow-templates/refactor.md +83 -0
  218. package/src/resources/extensions/gsd/workflow-templates/registry.json +85 -0
  219. package/src/resources/extensions/gsd/workflow-templates/security-audit.md +73 -0
  220. package/src/resources/extensions/gsd/workflow-templates/small-feature.md +81 -0
  221. package/src/resources/extensions/gsd/workflow-templates/spike.md +69 -0
  222. package/src/resources/extensions/gsd/workflow-templates.ts +241 -0
  223. package/src/resources/extensions/mcp-client/index.ts +459 -0
  224. package/src/resources/extensions/remote-questions/discord-adapter.ts +9 -20
  225. package/src/resources/extensions/remote-questions/http-client.ts +76 -0
  226. package/src/resources/extensions/remote-questions/notify.ts +1 -2
  227. package/src/resources/extensions/remote-questions/slack-adapter.ts +11 -18
  228. package/src/resources/extensions/remote-questions/telegram-adapter.ts +8 -20
  229. package/src/resources/extensions/remote-questions/types.ts +3 -0
  230. package/src/resources/extensions/shared/mod.ts +3 -0
  231. package/src/resources/skills/create-gsd-extension/SKILL.md +87 -0
  232. package/src/resources/skills/create-gsd-extension/references/compaction-session-control.md +77 -0
  233. package/src/resources/skills/create-gsd-extension/references/custom-commands.md +139 -0
  234. package/src/resources/skills/create-gsd-extension/references/custom-rendering.md +108 -0
  235. package/src/resources/skills/create-gsd-extension/references/custom-tools.md +183 -0
  236. package/src/resources/skills/create-gsd-extension/references/custom-ui.md +490 -0
  237. package/src/resources/skills/create-gsd-extension/references/events-reference.md +126 -0
  238. package/src/resources/skills/create-gsd-extension/references/extension-lifecycle.md +64 -0
  239. package/src/resources/skills/create-gsd-extension/references/extensionapi-reference.md +75 -0
  240. package/src/resources/skills/create-gsd-extension/references/extensioncontext-reference.md +53 -0
  241. package/src/resources/skills/create-gsd-extension/references/key-rules-gotchas.md +36 -0
  242. package/src/resources/skills/create-gsd-extension/references/mode-behavior.md +32 -0
  243. package/src/resources/skills/create-gsd-extension/references/model-provider-management.md +89 -0
  244. package/src/resources/skills/create-gsd-extension/references/packaging-distribution.md +55 -0
  245. package/src/resources/skills/create-gsd-extension/references/remote-execution-overrides.md +90 -0
  246. package/src/resources/skills/create-gsd-extension/references/state-management.md +70 -0
  247. package/src/resources/skills/create-gsd-extension/references/system-prompt-modification.md +52 -0
  248. package/src/resources/skills/create-gsd-extension/templates/extension-skeleton.ts +51 -0
  249. package/src/resources/skills/create-gsd-extension/templates/stateful-tool-skeleton.ts +143 -0
  250. package/src/resources/skills/create-gsd-extension/workflows/add-capability.md +57 -0
  251. package/src/resources/skills/create-gsd-extension/workflows/create-extension.md +156 -0
  252. package/src/resources/skills/create-gsd-extension/workflows/debug-extension.md +74 -0
  253. package/src/resources/skills/create-skill/SKILL.md +184 -0
  254. package/src/resources/skills/create-skill/references/api-security.md +226 -0
  255. package/src/resources/skills/create-skill/references/be-clear-and-direct.md +531 -0
  256. package/src/resources/skills/create-skill/references/common-patterns.md +595 -0
  257. package/src/resources/skills/create-skill/references/core-principles.md +437 -0
  258. package/src/resources/skills/create-skill/references/executable-code.md +175 -0
  259. package/src/resources/skills/create-skill/references/gsd-skill-ecosystem.md +68 -0
  260. package/src/resources/skills/create-skill/references/iteration-and-testing.md +474 -0
  261. package/src/resources/skills/create-skill/references/recommended-structure.md +168 -0
  262. package/src/resources/skills/create-skill/references/skill-structure.md +372 -0
  263. package/src/resources/skills/create-skill/references/use-xml-tags.md +466 -0
  264. package/src/resources/skills/create-skill/references/using-scripts.md +113 -0
  265. package/src/resources/skills/create-skill/references/using-templates.md +112 -0
  266. package/src/resources/skills/create-skill/references/workflows-and-validation.md +510 -0
  267. package/src/resources/skills/create-skill/templates/router-skill.md +73 -0
  268. package/src/resources/skills/create-skill/templates/simple-skill.md +33 -0
  269. package/src/resources/skills/create-skill/workflows/add-reference.md +96 -0
  270. package/src/resources/skills/create-skill/workflows/add-script.md +93 -0
  271. package/src/resources/skills/create-skill/workflows/add-template.md +74 -0
  272. package/src/resources/skills/create-skill/workflows/add-workflow.md +120 -0
  273. package/src/resources/skills/create-skill/workflows/audit-skill.md +148 -0
  274. package/src/resources/skills/create-skill/workflows/create-new-skill.md +196 -0
  275. package/src/resources/skills/create-skill/workflows/get-guidance.md +121 -0
  276. package/src/resources/skills/create-skill/workflows/upgrade-to-router.md +161 -0
  277. package/src/resources/skills/create-skill/workflows/verify-skill.md +204 -0
  278. package/dist/resources/extensions/gsd/preferences-hooks.ts +0 -10
  279. package/dist/resources/extensions/mcporter/index.ts +0 -525
  280. package/dist/resources/extensions/shared/progress-widget.ts +0 -282
  281. package/dist/resources/extensions/shared/thinking-widget.ts +0 -107
  282. package/src/resources/extensions/gsd/preferences-hooks.ts +0 -10
  283. package/src/resources/extensions/mcporter/index.ts +0 -525
  284. package/src/resources/extensions/shared/progress-widget.ts +0 -282
  285. package/src/resources/extensions/shared/thinking-widget.ts +0 -107
package/README.md CHANGED
@@ -24,20 +24,21 @@ One command. Walk away. Come back to a built project with clean git history.
24
24
 
25
25
  ---
26
26
 
27
- ## What's New in v2.28
28
-
29
- - **`gsd headless query`**instant JSON snapshot of project state (~50ms, no LLM session)
30
- - **`/gsd update`**update GSD to the latest version without leaving your session
31
- - **`/gsd export --html --all`** generate retrospective HTML reports for all milestones at once
32
- - **Reliability hardening**atomic file writes, OAuth fetch timeouts, RPC exit detection, blob GC, LSP init retry with backoff
33
- - **RPC utilities** now part of the public API for headless/scripted integrations
34
- - **npm** established as the canonical package manager
35
- - **CI/CD Pipeline** — three-stage promotion (Dev → Test → Prod) with automated versioning
36
- - **Docker support** — containerized builds with multi-stage Dockerfile
37
- - **`/gsd keys`** — full API key lifecycle management (list, add, remove, test, rotate, doctor)
38
- - **Milestone parking** — park in-progress milestones to work on something else, unpark to resume
39
- - **Studio** — experimental Electron desktop app (early preview)
27
+ ## What's New in v2.29
28
+
29
+ - **Node.js 24 LTS**CI, Docker, and package config all upgraded to Node 24 (Krypton)
30
+ - **`searchExcludeDirs` setting**blacklist directories from `@` file autocomplete (e.g., `node_modules`, `dist`)
31
+ - **Automated releases** prod-release now auto-generates changelogs, bumps versions, and publishes to npm
32
+ - **`/gsd logs`**browse activity, debug, and metrics logs from within a session
33
+ - **Configurable screenshots** browser-tools now support custom resolution, format, and quality
34
+ - **Pre-commit secret scanning** automatic detection of hardcoded secrets in CI and locally
40
35
  - **Per-project MCP config** — `.gsd/mcp.json` for project-scoped MCP server definitions
36
+ - **API request metrics** — track request counts for Copilot/subscription users
37
+ - **`/gsd keys`** — full API key lifecycle management (list, add, remove, test, rotate, doctor)
38
+ - **Advisory verification gate** — auto-discovered checks (lint/test from package.json) no longer doom-loop on pre-existing errors
39
+ - **Worktree living doc sync** — DECISIONS, REQUIREMENTS, PROJECT, and KNOWLEDGE now sync between worktree and project root
40
+ - **Windows non-ASCII path support** — `cpSync` fallback for usernames with special characters
41
+ - **`needs-discussion` routing** — milestones with draft context now route to the interactive discussion flow instead of stopping
41
42
 
42
43
  See the full [Changelog](./CHANGELOG.md) for details.
43
44
 
@@ -62,6 +63,8 @@ Full documentation is available in the [`docs/`](./docs/) directory:
62
63
  - **[CI/CD Pipeline](./docs/ci-cd-pipeline.md)** — three-stage promotion pipeline (Dev → Test → Prod)
63
64
  - **[VS Code Extension](./vscode-extension/README.md)** — chat participant, sidebar dashboard, RPC integration
64
65
  - **[Visualizer](./docs/visualizer.md)** — workflow visualizer with stats and discussion status
66
+ - **[Remote Questions](./docs/remote-questions.md)** — route decisions to Slack or Discord when human input is needed
67
+ - **[Dynamic Model Routing](./docs/dynamic-model-routing.md)** — complexity-based model selection and budget pressure
65
68
  - **[Migration from v1](./docs/migration.md)** — `.planning` → `.gsd` migration
66
69
 
67
70
  ---
@@ -175,7 +178,7 @@ Auto mode is a state machine driven by files on disk. It reads `.gsd/STATE.md`,
175
178
 
176
179
  9. **Adaptive replanning** — After each slice completes, the roadmap is reassessed. If the work revealed new information that changes the plan, slices are reordered, added, or removed before continuing.
177
180
 
178
- 10. **Verification enforcement** — Configure shell commands (`npm run lint`, `npm run test`, etc.) that run automatically after task execution. Failures trigger auto-fix retries before advancing. Configurable via `verification_commands`, `verification_auto_fix`, and `verification_max_retries` preferences.
181
+ 10. **Verification enforcement** — Configure shell commands (`npm run lint`, `npm run test`, etc.) that run automatically after task execution. Failures trigger auto-fix retries before advancing. Auto-discovered checks from `package.json` run in advisory mode — they log warnings but don't block on pre-existing errors. Configurable via `verification_commands`, `verification_auto_fix`, and `verification_max_retries` preferences.
179
182
 
180
183
  11. **Milestone validation** — After all slices complete, a `validate-milestone` gate compares roadmap success criteria against actual results before sealing the milestone.
181
184
 
@@ -307,6 +310,7 @@ On first run, GSD launches a branded setup wizard that walks you through LLM pro
307
310
  | `/gsd cleanup` | Archive phase directories from completed milestones |
308
311
  | `/gsd doctor` | Runtime health checks with auto-fix for common issues |
309
312
  | `/gsd keys` | API key manager — list, add, remove, test, rotate, doctor |
313
+ | `/gsd logs` | Browse activity, debug, and metrics logs |
310
314
  | `/gsd export --html` | Generate HTML report for current or completed milestone |
311
315
  | `/worktree` (`/wt`) | Git worktree lifecycle — create, switch, merge, remove |
312
316
  | `/voice` | Toggle real-time speech-to-text (macOS, Linux) |
@@ -447,6 +451,7 @@ auto_report: true
447
451
  | `verification_max_retries` | Max retries for verification failures (default: 2) |
448
452
  | `require_slice_discussion` | Pause auto-mode before each slice for human discussion review |
449
453
  | `auto_report` | Auto-generate HTML reports after milestone completion (default: true) |
454
+ | `searchExcludeDirs` | Directories to exclude from `@` file autocomplete (e.g., `["node_modules", ".git", "dist"]`) |
450
455
 
451
456
  ### Agent Instructions
452
457
 
@@ -478,7 +483,7 @@ See the full [Token Optimization Guide](./docs/token-optimization.md) for detail
478
483
 
479
484
  ### Bundled Tools
480
485
 
481
- GSD ships with 14 extensions, all loaded automatically:
486
+ GSD ships with 16 extensions, all loaded automatically:
482
487
 
483
488
  | Extension | What it provides |
484
489
  | ---------------------- | ---------------------------------------------------------------------------------------------------------------------- |
@@ -490,12 +495,14 @@ GSD ships with 14 extensions, all loaded automatically:
490
495
  | **Background Shell** | Long-running process management with readiness detection |
491
496
  | **Subagent** | Delegated tasks with isolated context windows |
492
497
  | **Mac Tools** | macOS native app automation via Accessibility APIs |
493
- | **MCPorter** | Lazy on-demand MCP server integration |
498
+ | **MCP Client** | Native MCP server integration via @modelcontextprotocol/sdk |
494
499
  | **Voice** | Real-time speech-to-text transcription (macOS, Linux — Ubuntu 22.04+) |
495
500
  | **Slash Commands** | Custom command creation |
496
501
  | **LSP** | Language Server Protocol integration — diagnostics, go-to-definition, references, hover, symbols, rename, code actions |
497
502
  | **Ask User Questions** | Structured user input with single/multi-select |
498
503
  | **Secure Env Collect** | Masked secret collection without manual .env editing |
504
+ | **Remote Questions** | Route decisions to Slack/Discord when human input is needed in headless/CI mode |
505
+ | **Universal Config** | Discover and import MCP servers and rules from other AI coding tools |
499
506
 
500
507
  ### Bundled Agents
501
508
 
@@ -597,7 +604,7 @@ gsd (CLI binary)
597
604
 
598
605
  ## Requirements
599
606
 
600
- - **Node.js** ≥ 20.6.0 (22+ recommended)
607
+ - **Node.js** ≥ 22.0.0 (24 LTS recommended)
601
608
  - **An LLM provider** — any of the 20+ supported providers (see [Use Any Model](#use-any-model))
602
609
  - **Git** — initialized automatically if missing
603
610
 
package/dist/cli.js CHANGED
@@ -71,6 +71,21 @@ function parseCliArgs(argv) {
71
71
  }
72
72
  const cliFlags = parseCliArgs(process.argv);
73
73
  const isPrintMode = cliFlags.print || cliFlags.mode !== undefined;
74
+ // Early resource-skew check — must run before TTY gate so version mismatch
75
+ // errors surface even in non-TTY environments.
76
+ exitIfManagedResourcesAreNewer(agentDir);
77
+ // Early TTY check — must come before heavy initialization to avoid dangling
78
+ // handles that prevent process.exit() from completing promptly.
79
+ const hasSubcommand = cliFlags.messages.length > 0;
80
+ if (!process.stdin.isTTY && !isPrintMode && !hasSubcommand && !cliFlags.listModels) {
81
+ process.stderr.write('[gsd] Error: Interactive mode requires a terminal (TTY).\n');
82
+ process.stderr.write('[gsd] Non-interactive alternatives:\n');
83
+ process.stderr.write('[gsd] gsd --print "your message" Single-shot prompt\n');
84
+ process.stderr.write('[gsd] gsd --mode rpc JSON-RPC over stdin/stdout\n');
85
+ process.stderr.write('[gsd] gsd --mode mcp MCP server over stdin/stdout\n');
86
+ process.stderr.write('[gsd] gsd --mode text "message" Text output mode\n');
87
+ process.exit(1);
88
+ }
74
89
  // `gsd <subcommand> --help` — show subcommand-specific help
75
90
  const subcommand = cliFlags.messages[0];
76
91
  if (subcommand && process.argv.includes('--help')) {
@@ -420,14 +435,5 @@ if (enabledModelPatterns && enabledModelPatterns.length > 0) {
420
435
  session.setScopedModels(scopedModels);
421
436
  }
422
437
  }
423
- if (!process.stdin.isTTY) {
424
- process.stderr.write('[gsd] Error: Interactive mode requires a terminal (TTY).\n');
425
- process.stderr.write('[gsd] Non-interactive alternatives:\n');
426
- process.stderr.write('[gsd] gsd --print "your message" Single-shot prompt\n');
427
- process.stderr.write('[gsd] gsd --mode rpc JSON-RPC over stdin/stdout\n');
428
- process.stderr.write('[gsd] gsd --mode mcp MCP server over stdin/stdout\n');
429
- process.stderr.write('[gsd] gsd --mode text "message" Text output mode\n');
430
- process.exit(1);
431
- }
432
438
  const interactiveMode = new InteractiveMode(session);
433
439
  await interactiveMode.run();
package/dist/headless.js CHANGED
@@ -128,6 +128,10 @@ async function runHeadlessOnce(options, restartCount) {
128
128
  let interrupted = false;
129
129
  const startTime = Date.now();
130
130
  const isNewMilestone = options.command === 'new-milestone';
131
+ // new-milestone involves codebase investigation + artifact writing — needs more time
132
+ if (isNewMilestone && options.timeout === 300_000) {
133
+ options.timeout = 600_000; // 10 minutes
134
+ }
131
135
  // Supervised mode cannot share stdin with --context -
132
136
  if (options.supervised && options.context === '-') {
133
137
  process.stderr.write('[headless] Error: --supervised cannot be used with --context - (both require stdin)\n');
@@ -1,6 +1,7 @@
1
1
  import { DefaultResourceLoader } from '@gsd/pi-coding-agent';
2
+ import { createHash } from 'node:crypto';
2
3
  import { homedir } from 'node:os';
3
- import { chmodSync, cpSync, existsSync, mkdirSync, readFileSync, readdirSync, rmSync, statSync, writeFileSync } from 'node:fs';
4
+ import { chmodSync, copyFileSync, cpSync, existsSync, mkdirSync, readFileSync, readdirSync, rmSync, statSync, writeFileSync } from 'node:fs';
4
5
  import { dirname, join, relative, resolve } from 'node:path';
5
6
  import { fileURLToPath } from 'node:url';
6
7
  import { compareSemver } from './update-check.js';
@@ -41,7 +42,11 @@ function getBundledGsdVersion() {
41
42
  }
42
43
  }
43
44
  function writeManagedResourceManifest(agentDir) {
44
- const manifest = { gsdVersion: getBundledGsdVersion(), syncedAt: Date.now() };
45
+ const manifest = {
46
+ gsdVersion: getBundledGsdVersion(),
47
+ syncedAt: Date.now(),
48
+ contentHash: computeResourceFingerprint(),
49
+ };
45
50
  writeFileSync(getManagedResourceManifestPath(agentDir), JSON.stringify(manifest));
46
51
  }
47
52
  export function readManagedResourceVersion(agentDir) {
@@ -53,6 +58,44 @@ export function readManagedResourceVersion(agentDir) {
53
58
  return null;
54
59
  }
55
60
  }
61
+ function readManagedResourceManifest(agentDir) {
62
+ try {
63
+ return JSON.parse(readFileSync(getManagedResourceManifestPath(agentDir), 'utf-8'));
64
+ }
65
+ catch {
66
+ return null;
67
+ }
68
+ }
69
+ /**
70
+ * Computes a lightweight content fingerprint of the bundled resources directory.
71
+ *
72
+ * Walks all files under resourcesDir and hashes their relative paths + sizes.
73
+ * This catches same-version content changes (npm link dev workflow, hotfixes
74
+ * within a release) without the cost of reading every file's contents.
75
+ *
76
+ * ~1ms for a typical resources tree (~100 files) — just stat calls, no reads.
77
+ */
78
+ function computeResourceFingerprint() {
79
+ const entries = [];
80
+ collectFileEntries(resourcesDir, resourcesDir, entries);
81
+ entries.sort();
82
+ return createHash('sha256').update(entries.join('\n')).digest('hex').slice(0, 16);
83
+ }
84
+ function collectFileEntries(dir, root, out) {
85
+ if (!existsSync(dir))
86
+ return;
87
+ for (const entry of readdirSync(dir, { withFileTypes: true })) {
88
+ const fullPath = join(dir, entry.name);
89
+ if (entry.isDirectory()) {
90
+ collectFileEntries(fullPath, root, out);
91
+ }
92
+ else {
93
+ const rel = relative(root, fullPath);
94
+ const size = statSync(fullPath).size;
95
+ out.push(`${rel}:${size}`);
96
+ }
97
+ }
98
+ }
56
99
  export function getNewerManagedResourceVersion(agentDir, currentVersion) {
57
100
  const managedVersion = readManagedResourceVersion(agentDir);
58
101
  if (!managedVersion) {
@@ -111,10 +154,34 @@ function syncResourceDir(srcDir, destDir) {
111
154
  rmSync(target, { recursive: true, force: true });
112
155
  }
113
156
  }
114
- cpSync(srcDir, destDir, { recursive: true, force: true });
157
+ try {
158
+ cpSync(srcDir, destDir, { recursive: true, force: true });
159
+ }
160
+ catch {
161
+ // Fallback for Windows paths with non-ASCII characters where cpSync
162
+ // fails with the \\?\ extended-length prefix (#1178).
163
+ copyDirRecursive(srcDir, destDir);
164
+ }
115
165
  makeTreeWritable(destDir);
116
166
  }
117
167
  }
168
+ /**
169
+ * Recursive directory copy using copyFileSync — workaround for cpSync failures
170
+ * on Windows paths containing non-ASCII characters (#1178).
171
+ */
172
+ function copyDirRecursive(src, dest) {
173
+ mkdirSync(dest, { recursive: true });
174
+ for (const entry of readdirSync(src, { withFileTypes: true })) {
175
+ const srcPath = join(src, entry.name);
176
+ const destPath = join(dest, entry.name);
177
+ if (entry.isDirectory()) {
178
+ copyDirRecursive(srcPath, destPath);
179
+ }
180
+ else {
181
+ copyFileSync(srcPath, destPath);
182
+ }
183
+ }
184
+ }
118
185
  /**
119
186
  * Syncs all bundled resources to agentDir (~/.gsd/agent/) on every launch.
120
187
  *
@@ -132,12 +199,17 @@ function syncResourceDir(srcDir, destDir) {
132
199
  */
133
200
  export function initResources(agentDir) {
134
201
  mkdirSync(agentDir, { recursive: true });
135
- // Skip the full copy when the synced version already matches the running version.
136
- // This avoids ~800ms of synchronous rmSync + cpSync on every startup.
202
+ // Skip the full copy when both version AND content fingerprint match.
203
+ // Version-only checks miss same-version content changes (npm link dev workflow,
204
+ // hotfixes within a release). The content hash catches those at ~1ms cost.
137
205
  const currentVersion = getBundledGsdVersion();
138
- const managedVersion = readManagedResourceVersion(agentDir);
139
- if (managedVersion && managedVersion === currentVersion) {
140
- return;
206
+ const manifest = readManagedResourceManifest(agentDir);
207
+ if (manifest && manifest.gsdVersion === currentVersion) {
208
+ // Version matches — check content fingerprint for same-version staleness.
209
+ const currentHash = computeResourceFingerprint();
210
+ if (manifest.contentHash && manifest.contentHash === currentHash) {
211
+ return;
212
+ }
141
213
  }
142
214
  syncResourceDir(bundledExtensionsDir, join(agentDir, 'extensions'));
143
215
  syncResourceDir(join(resourcesDir, 'agents'), join(agentDir, 'agents'));
@@ -375,6 +375,19 @@ export function cleanupAll(): void {
375
375
  processes.clear();
376
376
  }
377
377
 
378
+ /**
379
+ * Kill all alive, non-persistent bg processes.
380
+ * Called between auto-mode units to prevent orphaned servers from
381
+ * keeping ports bound across task boundaries (#1209).
382
+ */
383
+ export function killSessionProcesses(): void {
384
+ for (const [id, bg] of processes) {
385
+ if (bg.alive && !bg.persistAcrossSessions) {
386
+ killProcess(id, "SIGTERM");
387
+ }
388
+ }
389
+ }
390
+
378
391
  async function waitForProcessExit(bg: BgProcess, timeoutMs: number): Promise<boolean> {
379
392
  if (!bg.alive) return true;
380
393
  await new Promise<void>((resolve) => {