gsd-pi 2.71.0 → 2.72.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 (350) hide show
  1. package/README.md +57 -17
  2. package/dist/cli.js +29 -3
  3. package/dist/headless-events.d.ts +2 -0
  4. package/dist/headless-events.js +7 -0
  5. package/dist/headless.js +16 -3
  6. package/dist/mcp-server.js +40 -17
  7. package/dist/provider-migrations.d.ts +10 -0
  8. package/dist/provider-migrations.js +12 -0
  9. package/dist/resource-loader.js +139 -13
  10. package/dist/resources/GSD-WORKFLOW.md +1 -1
  11. package/dist/resources/agents/debugger.md +58 -0
  12. package/dist/resources/agents/doc-writer.md +43 -0
  13. package/dist/resources/agents/git-ops.md +56 -0
  14. package/dist/resources/agents/javascript-pro.md +46 -271
  15. package/dist/resources/agents/planner.md +55 -0
  16. package/dist/resources/agents/refactorer.md +47 -0
  17. package/dist/resources/agents/reviewer.md +48 -0
  18. package/dist/resources/agents/security.md +59 -0
  19. package/dist/resources/agents/tester.md +50 -0
  20. package/dist/resources/agents/typescript-pro.md +41 -235
  21. package/dist/resources/extensions/claude-code-cli/stream-adapter.js +113 -10
  22. package/dist/resources/extensions/gsd/auto/infra-errors.js +34 -0
  23. package/dist/resources/extensions/gsd/auto/loop.js +32 -1
  24. package/dist/resources/extensions/gsd/auto/phases.js +5 -1
  25. package/dist/resources/extensions/gsd/auto/session.js +11 -0
  26. package/dist/resources/extensions/gsd/auto-dashboard.js +22 -16
  27. package/dist/resources/extensions/gsd/auto-model-selection.js +10 -2
  28. package/dist/resources/extensions/gsd/auto-prompts.js +88 -33
  29. package/dist/resources/extensions/gsd/auto-start.js +34 -7
  30. package/dist/resources/extensions/gsd/auto-tool-tracking.js +1 -1
  31. package/dist/resources/extensions/gsd/auto-worktree.js +1 -1
  32. package/dist/resources/extensions/gsd/auto.js +56 -0
  33. package/dist/resources/extensions/gsd/bootstrap/db-tools.js +3 -3
  34. package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +2 -0
  35. package/dist/resources/extensions/gsd/bootstrap/register-shortcuts.js +63 -51
  36. package/dist/resources/extensions/gsd/bootstrap/system-context.js +6 -0
  37. package/dist/resources/extensions/gsd/commands/context.js +15 -6
  38. package/dist/resources/extensions/gsd/commands/dispatcher.js +12 -2
  39. package/dist/resources/extensions/gsd/commands/handlers/auto.js +10 -33
  40. package/dist/resources/extensions/gsd/commands/handlers/core.js +56 -11
  41. package/dist/resources/extensions/gsd/commands/handlers/notifications-handler.js +15 -6
  42. package/dist/resources/extensions/gsd/commands/handlers/workflow.js +4 -10
  43. package/dist/resources/extensions/gsd/dashboard-overlay.js +8 -3
  44. package/dist/resources/extensions/gsd/dispatch-guard.js +18 -1
  45. package/dist/resources/extensions/gsd/doctor-providers.js +23 -0
  46. package/dist/resources/extensions/gsd/error-classifier.js +5 -2
  47. package/dist/resources/extensions/gsd/forensics.js +19 -6
  48. package/dist/resources/extensions/gsd/gate-registry.js +208 -0
  49. package/dist/resources/extensions/gsd/gsd-db.js +41 -0
  50. package/dist/resources/extensions/gsd/guided-flow.js +5 -10
  51. package/dist/resources/extensions/gsd/metrics.js +1 -0
  52. package/dist/resources/extensions/gsd/milestone-actions.js +10 -4
  53. package/dist/resources/extensions/gsd/milestone-validation-gates.js +11 -12
  54. package/dist/resources/extensions/gsd/notification-overlay.js +42 -13
  55. package/dist/resources/extensions/gsd/notification-store.js +56 -5
  56. package/dist/resources/extensions/gsd/notification-widget.js +5 -13
  57. package/dist/resources/extensions/gsd/parallel-monitor-overlay.js +8 -3
  58. package/dist/resources/extensions/gsd/pre-execution-checks.js +35 -2
  59. package/dist/resources/extensions/gsd/prompt-validation.js +126 -0
  60. package/dist/resources/extensions/gsd/prompts/complete-slice.md +5 -3
  61. package/dist/resources/extensions/gsd/prompts/discuss.md +2 -0
  62. package/dist/resources/extensions/gsd/prompts/execute-task.md +22 -19
  63. package/dist/resources/extensions/gsd/prompts/guided-discuss-milestone.md +2 -0
  64. package/dist/resources/extensions/gsd/prompts/guided-discuss-slice.md +2 -0
  65. package/dist/resources/extensions/gsd/prompts/guided-resume-task.md +1 -1
  66. package/dist/resources/extensions/gsd/prompts/queue.md +3 -2
  67. package/dist/resources/extensions/gsd/prompts/system.md +1 -0
  68. package/dist/resources/extensions/gsd/prompts/validate-milestone.md +4 -1
  69. package/dist/resources/extensions/gsd/session-model-override.js +25 -0
  70. package/dist/resources/extensions/gsd/shortcut-defs.js +40 -0
  71. package/dist/resources/extensions/gsd/state.js +9 -2
  72. package/dist/resources/extensions/gsd/tools/complete-slice.js +52 -1
  73. package/dist/resources/extensions/gsd/tools/complete-task.js +51 -1
  74. package/dist/resources/extensions/gsd/tools/workflow-tool-executors.js +4 -1
  75. package/dist/resources/extensions/ollama/index.js +13 -5
  76. package/dist/resources/extensions/shared/gsd-phase-state.js +35 -0
  77. package/dist/resources/extensions/subagent/agents.js +8 -0
  78. package/dist/resources/extensions/subagent/index.js +17 -0
  79. package/dist/resources/skills/create-skill/SKILL.md +2 -0
  80. package/dist/startup-model-validation.d.ts +0 -1
  81. package/dist/startup-model-validation.js +6 -2
  82. package/dist/web/standalone/.next/BUILD_ID +1 -1
  83. package/dist/web/standalone/.next/app-path-routes-manifest.json +8 -8
  84. package/dist/web/standalone/.next/build-manifest.json +2 -2
  85. package/dist/web/standalone/.next/prerender-manifest.json +3 -3
  86. package/dist/web/standalone/.next/server/app/_global-error.html +1 -1
  87. package/dist/web/standalone/.next/server/app/_global-error.rsc +1 -1
  88. package/dist/web/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  89. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  90. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  91. package/dist/web/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  92. package/dist/web/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  93. package/dist/web/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  94. package/dist/web/standalone/.next/server/app/_not-found.html +1 -1
  95. package/dist/web/standalone/.next/server/app/_not-found.rsc +1 -1
  96. package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
  97. package/dist/web/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  98. package/dist/web/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
  99. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  100. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  101. package/dist/web/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  102. package/dist/web/standalone/.next/server/app/index.html +1 -1
  103. package/dist/web/standalone/.next/server/app/index.rsc +1 -1
  104. package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  105. package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +1 -1
  106. package/dist/web/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
  107. package/dist/web/standalone/.next/server/app/index.segments/_index.segment.rsc +1 -1
  108. package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  109. package/dist/web/standalone/.next/server/app-paths-manifest.json +8 -8
  110. package/dist/web/standalone/.next/server/middleware-build-manifest.js +1 -1
  111. package/dist/web/standalone/.next/server/next-font-manifest.js +1 -1
  112. package/dist/web/standalone/.next/server/next-font-manifest.json +1 -1
  113. package/dist/web/standalone/.next/server/pages/404.html +1 -1
  114. package/dist/web/standalone/.next/server/pages/500.html +1 -1
  115. package/dist/web/standalone/.next/server/server-reference-manifest.json +1 -1
  116. package/package.json +1 -1
  117. package/packages/mcp-server/dist/server.d.ts +12 -1
  118. package/packages/mcp-server/dist/server.d.ts.map +1 -1
  119. package/packages/mcp-server/dist/server.js +90 -42
  120. package/packages/mcp-server/dist/server.js.map +1 -1
  121. package/packages/mcp-server/dist/workflow-tools.d.ts.map +1 -1
  122. package/packages/mcp-server/dist/workflow-tools.js +22 -12
  123. package/packages/mcp-server/dist/workflow-tools.js.map +1 -1
  124. package/packages/mcp-server/src/server.ts +110 -38
  125. package/packages/mcp-server/src/workflow-tools.test.ts +110 -0
  126. package/packages/mcp-server/src/workflow-tools.ts +32 -12
  127. package/packages/pi-ai/dist/providers/amazon-bedrock.js +11 -2
  128. package/packages/pi-ai/dist/providers/amazon-bedrock.js.map +1 -1
  129. package/packages/pi-ai/dist/providers/anthropic-auth.test.d.ts +2 -0
  130. package/packages/pi-ai/dist/providers/anthropic-auth.test.d.ts.map +1 -0
  131. package/packages/pi-ai/dist/providers/anthropic-auth.test.js +20 -0
  132. package/packages/pi-ai/dist/providers/anthropic-auth.test.js.map +1 -0
  133. package/packages/pi-ai/dist/providers/anthropic-shared.d.ts +4 -1
  134. package/packages/pi-ai/dist/providers/anthropic-shared.d.ts.map +1 -1
  135. package/packages/pi-ai/dist/providers/anthropic-shared.js +8 -3
  136. package/packages/pi-ai/dist/providers/anthropic-shared.js.map +1 -1
  137. package/packages/pi-ai/dist/providers/anthropic-shared.test.js +44 -1
  138. package/packages/pi-ai/dist/providers/anthropic-shared.test.js.map +1 -1
  139. package/packages/pi-ai/dist/providers/anthropic.d.ts +2 -1
  140. package/packages/pi-ai/dist/providers/anthropic.d.ts.map +1 -1
  141. package/packages/pi-ai/dist/providers/anthropic.js +7 -4
  142. package/packages/pi-ai/dist/providers/anthropic.js.map +1 -1
  143. package/packages/pi-ai/dist/providers/openai-completions.d.ts.map +1 -1
  144. package/packages/pi-ai/dist/providers/openai-completions.js +11 -0
  145. package/packages/pi-ai/dist/providers/openai-completions.js.map +1 -1
  146. package/packages/pi-ai/src/providers/amazon-bedrock.ts +13 -1
  147. package/packages/pi-ai/src/providers/anthropic-auth.test.ts +32 -0
  148. package/packages/pi-ai/src/providers/anthropic-shared.test.ts +55 -1
  149. package/packages/pi-ai/src/providers/anthropic-shared.ts +14 -3
  150. package/packages/pi-ai/src/providers/anthropic.ts +8 -4
  151. package/packages/pi-ai/src/providers/openai-completions.ts +14 -0
  152. package/packages/pi-coding-agent/dist/core/agent-session-renderable-tools.test.d.ts +2 -0
  153. package/packages/pi-coding-agent/dist/core/agent-session-renderable-tools.test.d.ts.map +1 -0
  154. package/packages/pi-coding-agent/dist/core/agent-session-renderable-tools.test.js +61 -0
  155. package/packages/pi-coding-agent/dist/core/agent-session-renderable-tools.test.js.map +1 -0
  156. package/packages/pi-coding-agent/dist/core/agent-session.d.ts.map +1 -1
  157. package/packages/pi-coding-agent/dist/core/agent-session.js +2 -1
  158. package/packages/pi-coding-agent/dist/core/agent-session.js.map +1 -1
  159. package/packages/pi-coding-agent/dist/core/auth-storage.d.ts +10 -0
  160. package/packages/pi-coding-agent/dist/core/auth-storage.d.ts.map +1 -1
  161. package/packages/pi-coding-agent/dist/core/auth-storage.js +27 -0
  162. package/packages/pi-coding-agent/dist/core/auth-storage.js.map +1 -1
  163. package/packages/pi-coding-agent/dist/core/auth-storage.test.js +85 -0
  164. package/packages/pi-coding-agent/dist/core/auth-storage.test.js.map +1 -1
  165. package/packages/pi-coding-agent/dist/core/model-resolver-initial-model-auth.test.d.ts +2 -0
  166. package/packages/pi-coding-agent/dist/core/model-resolver-initial-model-auth.test.d.ts.map +1 -0
  167. package/packages/pi-coding-agent/dist/core/model-resolver-initial-model-auth.test.js +64 -0
  168. package/packages/pi-coding-agent/dist/core/model-resolver-initial-model-auth.test.js.map +1 -0
  169. package/packages/pi-coding-agent/dist/core/model-resolver.d.ts.map +1 -1
  170. package/packages/pi-coding-agent/dist/core/model-resolver.js +22 -18
  171. package/packages/pi-coding-agent/dist/core/model-resolver.js.map +1 -1
  172. package/packages/pi-coding-agent/dist/core/model-resolver.test.d.ts +8 -0
  173. package/packages/pi-coding-agent/dist/core/model-resolver.test.d.ts.map +1 -0
  174. package/packages/pi-coding-agent/dist/core/model-resolver.test.js +75 -0
  175. package/packages/pi-coding-agent/dist/core/model-resolver.test.js.map +1 -0
  176. package/packages/pi-coding-agent/dist/core/retry-handler.d.ts +5 -0
  177. package/packages/pi-coding-agent/dist/core/retry-handler.d.ts.map +1 -1
  178. package/packages/pi-coding-agent/dist/core/retry-handler.js +55 -1
  179. package/packages/pi-coding-agent/dist/core/retry-handler.js.map +1 -1
  180. package/packages/pi-coding-agent/dist/core/retry-handler.test.js +57 -0
  181. package/packages/pi-coding-agent/dist/core/retry-handler.test.js.map +1 -1
  182. package/packages/pi-coding-agent/dist/core/sdk.d.ts +11 -0
  183. package/packages/pi-coding-agent/dist/core/sdk.d.ts.map +1 -1
  184. package/packages/pi-coding-agent/dist/core/sdk.js +38 -5
  185. package/packages/pi-coding-agent/dist/core/sdk.js.map +1 -1
  186. package/packages/pi-coding-agent/dist/core/sdk.test.d.ts +2 -0
  187. package/packages/pi-coding-agent/dist/core/sdk.test.d.ts.map +1 -0
  188. package/packages/pi-coding-agent/dist/core/sdk.test.js +71 -0
  189. package/packages/pi-coding-agent/dist/core/sdk.test.js.map +1 -0
  190. package/packages/pi-coding-agent/dist/index.d.ts +1 -1
  191. package/packages/pi-coding-agent/dist/index.d.ts.map +1 -1
  192. package/packages/pi-coding-agent/dist/index.js +1 -1
  193. package/packages/pi-coding-agent/dist/index.js.map +1 -1
  194. package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/login-dialog.test.d.ts +2 -0
  195. package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/login-dialog.test.d.ts.map +1 -0
  196. package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/login-dialog.test.js +13 -0
  197. package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/login-dialog.test.js.map +1 -0
  198. package/packages/pi-coding-agent/dist/modes/interactive/components/login-dialog.d.ts +4 -0
  199. package/packages/pi-coding-agent/dist/modes/interactive/components/login-dialog.d.ts.map +1 -1
  200. package/packages/pi-coding-agent/dist/modes/interactive/components/login-dialog.js +24 -2
  201. package/packages/pi-coding-agent/dist/modes/interactive/components/login-dialog.js.map +1 -1
  202. package/packages/pi-coding-agent/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
  203. package/packages/pi-coding-agent/dist/modes/interactive/components/model-selector.js +9 -2
  204. package/packages/pi-coding-agent/dist/modes/interactive/components/model-selector.js.map +1 -1
  205. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.d.ts +4 -0
  206. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
  207. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.js +43 -0
  208. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.js.map +1 -1
  209. package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.d.ts.map +1 -1
  210. package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.js +7 -2
  211. package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.js.map +1 -1
  212. package/packages/pi-coding-agent/dist/modes/interactive/controllers/model-controller.d.ts.map +1 -1
  213. package/packages/pi-coding-agent/dist/modes/interactive/controllers/model-controller.js +6 -1
  214. package/packages/pi-coding-agent/dist/modes/interactive/controllers/model-controller.js.map +1 -1
  215. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  216. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js +4 -3
  217. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js.map +1 -1
  218. package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.js +4 -2
  219. package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.js.map +1 -1
  220. package/packages/pi-coding-agent/package.json +1 -1
  221. package/packages/pi-coding-agent/src/core/agent-session-renderable-tools.test.ts +70 -0
  222. package/packages/pi-coding-agent/src/core/agent-session.ts +2 -1
  223. package/packages/pi-coding-agent/src/core/auth-storage.test.ts +108 -0
  224. package/packages/pi-coding-agent/src/core/auth-storage.ts +30 -0
  225. package/packages/pi-coding-agent/src/core/model-resolver-initial-model-auth.test.ts +78 -0
  226. package/packages/pi-coding-agent/src/core/model-resolver.test.ts +85 -0
  227. package/packages/pi-coding-agent/src/core/model-resolver.ts +22 -18
  228. package/packages/pi-coding-agent/src/core/retry-handler.test.ts +83 -0
  229. package/packages/pi-coding-agent/src/core/retry-handler.ts +60 -1
  230. package/packages/pi-coding-agent/src/core/sdk.test.ts +89 -0
  231. package/packages/pi-coding-agent/src/core/sdk.ts +45 -9
  232. package/packages/pi-coding-agent/src/index.ts +1 -0
  233. package/packages/pi-coding-agent/src/modes/interactive/components/__tests__/login-dialog.test.ts +24 -0
  234. package/packages/pi-coding-agent/src/modes/interactive/components/login-dialog.ts +30 -2
  235. package/packages/pi-coding-agent/src/modes/interactive/components/model-selector.ts +15 -6
  236. package/packages/pi-coding-agent/src/modes/interactive/components/tool-execution.ts +47 -0
  237. package/packages/pi-coding-agent/src/modes/interactive/controllers/chat-controller.ts +7 -2
  238. package/packages/pi-coding-agent/src/modes/interactive/controllers/model-controller.ts +6 -1
  239. package/packages/pi-coding-agent/src/modes/interactive/interactive-mode.ts +4 -3
  240. package/packages/pi-coding-agent/src/modes/interactive/slash-command-handlers.ts +4 -2
  241. package/pkg/package.json +1 -1
  242. package/src/resources/GSD-WORKFLOW.md +1 -1
  243. package/src/resources/agents/debugger.md +58 -0
  244. package/src/resources/agents/doc-writer.md +43 -0
  245. package/src/resources/agents/git-ops.md +56 -0
  246. package/src/resources/agents/javascript-pro.md +46 -271
  247. package/src/resources/agents/planner.md +55 -0
  248. package/src/resources/agents/refactorer.md +47 -0
  249. package/src/resources/agents/reviewer.md +48 -0
  250. package/src/resources/agents/security.md +59 -0
  251. package/src/resources/agents/tester.md +50 -0
  252. package/src/resources/agents/typescript-pro.md +41 -235
  253. package/src/resources/extensions/claude-code-cli/stream-adapter.ts +122 -8
  254. package/src/resources/extensions/claude-code-cli/tests/stream-adapter.test.ts +189 -6
  255. package/src/resources/extensions/gsd/auto/infra-errors.ts +38 -0
  256. package/src/resources/extensions/gsd/auto/loop-deps.ts +2 -0
  257. package/src/resources/extensions/gsd/auto/loop.ts +45 -1
  258. package/src/resources/extensions/gsd/auto/phases.ts +6 -0
  259. package/src/resources/extensions/gsd/auto/session.ts +11 -0
  260. package/src/resources/extensions/gsd/auto-dashboard.ts +29 -18
  261. package/src/resources/extensions/gsd/auto-model-selection.ts +9 -1
  262. package/src/resources/extensions/gsd/auto-prompts.ts +111 -33
  263. package/src/resources/extensions/gsd/auto-start.ts +41 -7
  264. package/src/resources/extensions/gsd/auto-tool-tracking.ts +1 -1
  265. package/src/resources/extensions/gsd/auto-worktree.ts +1 -1
  266. package/src/resources/extensions/gsd/auto.ts +72 -0
  267. package/src/resources/extensions/gsd/bootstrap/db-tools.ts +3 -3
  268. package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +2 -0
  269. package/src/resources/extensions/gsd/bootstrap/register-shortcuts.ts +79 -60
  270. package/src/resources/extensions/gsd/bootstrap/system-context.ts +7 -0
  271. package/src/resources/extensions/gsd/commands/context.ts +16 -5
  272. package/src/resources/extensions/gsd/commands/dispatcher.ts +14 -2
  273. package/src/resources/extensions/gsd/commands/handlers/auto.ts +10 -36
  274. package/src/resources/extensions/gsd/commands/handlers/core.ts +58 -11
  275. package/src/resources/extensions/gsd/commands/handlers/notifications-handler.ts +17 -7
  276. package/src/resources/extensions/gsd/commands/handlers/workflow.ts +4 -10
  277. package/src/resources/extensions/gsd/dashboard-overlay.ts +10 -3
  278. package/src/resources/extensions/gsd/dispatch-guard.ts +18 -1
  279. package/src/resources/extensions/gsd/doctor-providers.ts +24 -0
  280. package/src/resources/extensions/gsd/error-classifier.ts +5 -2
  281. package/src/resources/extensions/gsd/forensics.ts +23 -7
  282. package/src/resources/extensions/gsd/gate-registry.ts +251 -0
  283. package/src/resources/extensions/gsd/gsd-db.ts +51 -0
  284. package/src/resources/extensions/gsd/guided-flow.ts +5 -10
  285. package/src/resources/extensions/gsd/interrupted-session.ts +1 -0
  286. package/src/resources/extensions/gsd/metrics.ts +12 -1
  287. package/src/resources/extensions/gsd/milestone-actions.ts +10 -3
  288. package/src/resources/extensions/gsd/milestone-validation-gates.ts +11 -13
  289. package/src/resources/extensions/gsd/notification-overlay.ts +47 -14
  290. package/src/resources/extensions/gsd/notification-store.ts +54 -5
  291. package/src/resources/extensions/gsd/notification-widget.ts +5 -14
  292. package/src/resources/extensions/gsd/parallel-monitor-overlay.ts +10 -3
  293. package/src/resources/extensions/gsd/pre-execution-checks.ts +39 -2
  294. package/src/resources/extensions/gsd/prompt-validation.ts +157 -0
  295. package/src/resources/extensions/gsd/prompts/complete-slice.md +5 -3
  296. package/src/resources/extensions/gsd/prompts/discuss.md +2 -0
  297. package/src/resources/extensions/gsd/prompts/execute-task.md +22 -19
  298. package/src/resources/extensions/gsd/prompts/guided-discuss-milestone.md +2 -0
  299. package/src/resources/extensions/gsd/prompts/guided-discuss-slice.md +2 -0
  300. package/src/resources/extensions/gsd/prompts/guided-resume-task.md +1 -1
  301. package/src/resources/extensions/gsd/prompts/queue.md +3 -2
  302. package/src/resources/extensions/gsd/prompts/system.md +1 -0
  303. package/src/resources/extensions/gsd/prompts/validate-milestone.md +4 -1
  304. package/src/resources/extensions/gsd/session-model-override.ts +36 -0
  305. package/src/resources/extensions/gsd/shortcut-defs.ts +56 -0
  306. package/src/resources/extensions/gsd/state.ts +13 -2
  307. package/src/resources/extensions/gsd/tests/auto-start-model-capture.test.ts +25 -9
  308. package/src/resources/extensions/gsd/tests/auto-start-worktree-db-path.test.ts +28 -0
  309. package/src/resources/extensions/gsd/tests/bootstrap-derive-state-db-open.test.ts +39 -0
  310. package/src/resources/extensions/gsd/tests/complete-slice-gate-closure.test.ts +167 -0
  311. package/src/resources/extensions/gsd/tests/complete-slice-prompt-task-summary-layout.test.ts +18 -0
  312. package/src/resources/extensions/gsd/tests/dispatch-guard.test.ts +27 -0
  313. package/src/resources/extensions/gsd/tests/doctor-providers.test.ts +36 -0
  314. package/src/resources/extensions/gsd/tests/execute-task-prompt-existing-artifact-guard.test.ts +33 -0
  315. package/src/resources/extensions/gsd/tests/forensics-stuck-loops.test.ts +62 -0
  316. package/src/resources/extensions/gsd/tests/format-shortcut.test.ts +31 -0
  317. package/src/resources/extensions/gsd/tests/gate-dispatch.test.ts +27 -0
  318. package/src/resources/extensions/gsd/tests/gate-registry.test.ts +140 -0
  319. package/src/resources/extensions/gsd/tests/gsd-no-project-error.test.ts +73 -0
  320. package/src/resources/extensions/gsd/tests/infra-errors-cooldown.test.ts +180 -0
  321. package/src/resources/extensions/gsd/tests/integration/auto-worktree-milestone-merge.test.ts +66 -1
  322. package/src/resources/extensions/gsd/tests/model-isolation.test.ts +36 -51
  323. package/src/resources/extensions/gsd/tests/notification-store.test.ts +35 -0
  324. package/src/resources/extensions/gsd/tests/notification-widget.test.ts +26 -0
  325. package/src/resources/extensions/gsd/tests/notifications-handler.test.ts +90 -0
  326. package/src/resources/extensions/gsd/tests/parallel-monitor-overlay.test.ts +1 -0
  327. package/src/resources/extensions/gsd/tests/park-db-sync.test.ts +18 -0
  328. package/src/resources/extensions/gsd/tests/pre-execution-checks.test.ts +49 -0
  329. package/src/resources/extensions/gsd/tests/prompt-contracts.test.ts +19 -0
  330. package/src/resources/extensions/gsd/tests/prompt-system-gate-coverage.test.ts +208 -0
  331. package/src/resources/extensions/gsd/tests/provider-errors.test.ts +16 -0
  332. package/src/resources/extensions/gsd/tests/register-shortcuts.test.ts +63 -5
  333. package/src/resources/extensions/gsd/tests/session-model-override.test.ts +35 -0
  334. package/src/resources/extensions/gsd/tests/start-auto-detached.test.ts +90 -0
  335. package/src/resources/extensions/gsd/tests/tool-invocation-error-loop-break.test.ts +7 -0
  336. package/src/resources/extensions/gsd/tests/validate-milestone-prompt-verification-classes.test.ts +18 -0
  337. package/src/resources/extensions/gsd/tools/complete-slice.ts +63 -0
  338. package/src/resources/extensions/gsd/tools/complete-task.ts +63 -0
  339. package/src/resources/extensions/gsd/tools/workflow-tool-executors.ts +4 -1
  340. package/src/resources/extensions/gsd/types.ts +26 -0
  341. package/src/resources/extensions/ollama/index.ts +13 -3
  342. package/src/resources/extensions/ollama/ollama-status-indicator.test.ts +28 -0
  343. package/src/resources/extensions/shared/gsd-phase-state.ts +42 -0
  344. package/src/resources/extensions/shared/tests/gsd-phase-state.test.ts +48 -0
  345. package/src/resources/extensions/subagent/agents.ts +10 -0
  346. package/src/resources/extensions/subagent/index.ts +18 -0
  347. package/src/resources/extensions/subagent/tests/agents-conflicts.test.ts +33 -0
  348. package/src/resources/skills/create-skill/SKILL.md +2 -0
  349. /package/dist/web/standalone/.next/static/{nPky_WQC28aBD77eZsRAB → Y0I7CjXJl-tWoV__KidV4}/_buildManifest.js +0 -0
  350. /package/dist/web/standalone/.next/static/{nPky_WQC28aBD77eZsRAB → Y0I7CjXJl-tWoV__KidV4}/_ssgManifest.js +0 -0
@@ -9,38 +9,38 @@
9
9
  "/api/cleanup/route": "app/api/cleanup/route.js",
10
10
  "/api/doctor/route": "app/api/doctor/route.js",
11
11
  "/api/captures/route": "app/api/captures/route.js",
12
- "/api/browse-directories/route": "app/api/browse-directories/route.js",
12
+ "/api/export-data/route": "app/api/export-data/route.js",
13
13
  "/api/forensics/route": "app/api/forensics/route.js",
14
+ "/api/browse-directories/route": "app/api/browse-directories/route.js",
14
15
  "/api/git/route": "app/api/git/route.js",
15
- "/api/export-data/route": "app/api/export-data/route.js",
16
16
  "/api/history/route": "app/api/history/route.js",
17
17
  "/api/hooks/route": "app/api/hooks/route.js",
18
18
  "/api/inspect/route": "app/api/inspect/route.js",
19
19
  "/api/knowledge/route": "app/api/knowledge/route.js",
20
- "/api/notifications/route": "app/api/notifications/route.js",
21
20
  "/api/live-state/route": "app/api/live-state/route.js",
21
+ "/api/notifications/route": "app/api/notifications/route.js",
22
22
  "/api/experimental/route": "app/api/experimental/route.js",
23
23
  "/api/preferences/route": "app/api/preferences/route.js",
24
24
  "/api/recovery/route": "app/api/recovery/route.js",
25
- "/api/projects/route": "app/api/projects/route.js",
26
25
  "/api/onboarding/route": "app/api/onboarding/route.js",
26
+ "/api/projects/route": "app/api/projects/route.js",
27
27
  "/api/session/browser/route": "app/api/session/browser/route.js",
28
- "/api/session/command/route": "app/api/session/command/route.js",
29
28
  "/api/session/events/route": "app/api/session/events/route.js",
29
+ "/api/session/command/route": "app/api/session/command/route.js",
30
+ "/api/settings-data/route": "app/api/settings-data/route.js",
30
31
  "/api/session/manage/route": "app/api/session/manage/route.js",
31
32
  "/api/shutdown/route": "app/api/shutdown/route.js",
32
- "/api/settings-data/route": "app/api/settings-data/route.js",
33
+ "/api/files/route": "app/api/files/route.js",
33
34
  "/api/skill-health/route": "app/api/skill-health/route.js",
34
35
  "/api/steer/route": "app/api/steer/route.js",
35
- "/api/files/route": "app/api/files/route.js",
36
36
  "/api/terminal/input/route": "app/api/terminal/input/route.js",
37
37
  "/api/switch-root/route": "app/api/switch-root/route.js",
38
38
  "/api/terminal/resize/route": "app/api/terminal/resize/route.js",
39
39
  "/api/terminal/sessions/route": "app/api/terminal/sessions/route.js",
40
40
  "/api/undo/route": "app/api/undo/route.js",
41
41
  "/api/terminal/stream/route": "app/api/terminal/stream/route.js",
42
- "/api/terminal/upload/route": "app/api/terminal/upload/route.js",
43
42
  "/api/visualizer/route": "app/api/visualizer/route.js",
43
+ "/api/terminal/upload/route": "app/api/terminal/upload/route.js",
44
44
  "/api/update/route": "app/api/update/route.js",
45
45
  "/api/remote-questions/route": "app/api/remote-questions/route.js",
46
46
  "/page": "app/page.js"
@@ -1 +1 @@
1
- globalThis.__BUILD_MANIFEST={polyfillFiles:["static/chunks/polyfills-42372ed130431b0a.js"],devFiles:[],lowPriorityFiles:["static/nPky_WQC28aBD77eZsRAB/_buildManifest.js","static/nPky_WQC28aBD77eZsRAB/_ssgManifest.js"],rootMainFiles:["static/chunks/webpack-b868033a5834586d.js","static/chunks/4bd1b696-e356ca5ba0218e27.js","static/chunks/3794-42fdce068d44fa4f.js","static/chunks/main-app-d3d4c336195465f9.js"],rootMainFilesTree:{},pages:{"/_app":[]}};
1
+ globalThis.__BUILD_MANIFEST={polyfillFiles:["static/chunks/polyfills-42372ed130431b0a.js"],devFiles:[],lowPriorityFiles:["static/Y0I7CjXJl-tWoV__KidV4/_buildManifest.js","static/Y0I7CjXJl-tWoV__KidV4/_ssgManifest.js"],rootMainFiles:["static/chunks/webpack-b868033a5834586d.js","static/chunks/4bd1b696-e356ca5ba0218e27.js","static/chunks/3794-42fdce068d44fa4f.js","static/chunks/main-app-d3d4c336195465f9.js"],rootMainFilesTree:{},pages:{"/_app":[]}};
@@ -1 +1 @@
1
- self.__NEXT_FONT_MANIFEST='{"pages":{},"app":{"/home/runner/_work/gsd-2/gsd-2/web/app/layout":["static/media/93f479601ee12b01-s.p.woff2","static/media/4cf2300e9c8272f7-s.p.woff2"]},"appUsingSizeAdjust":true,"pagesUsingSizeAdjust":false}';
1
+ self.__NEXT_FONT_MANIFEST='{"pages":{},"app":{"/home/runner/_work/gsd-2/gsd-2/web/app/layout":["static/media/4cf2300e9c8272f7-s.p.woff2","static/media/93f479601ee12b01-s.p.woff2"]},"appUsingSizeAdjust":true,"pagesUsingSizeAdjust":false}';
@@ -1 +1 @@
1
- {"pages":{},"app":{"/home/runner/_work/gsd-2/gsd-2/web/app/layout":["static/media/93f479601ee12b01-s.p.woff2","static/media/4cf2300e9c8272f7-s.p.woff2"]},"appUsingSizeAdjust":true,"pagesUsingSizeAdjust":false}
1
+ {"pages":{},"app":{"/home/runner/_work/gsd-2/gsd-2/web/app/layout":["static/media/4cf2300e9c8272f7-s.p.woff2","static/media/93f479601ee12b01-s.p.woff2"]},"appUsingSizeAdjust":true,"pagesUsingSizeAdjust":false}
@@ -1 +1 @@
1
- <!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"/><link rel="preload" href="/_next/static/media/4cf2300e9c8272f7-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" href="/_next/static/media/93f479601ee12b01-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="stylesheet" href="/_next/static/css/de70bee13400563f.css" data-precedence="next"/><link rel="stylesheet" href="/_next/static/css/f6e8833d46e738d8.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-b868033a5834586d.js"/><script src="/_next/static/chunks/4bd1b696-e356ca5ba0218e27.js" async=""></script><script src="/_next/static/chunks/3794-42fdce068d44fa4f.js" async=""></script><script src="/_next/static/chunks/main-app-d3d4c336195465f9.js" async=""></script><script src="/_next/static/chunks/4986-c2fc8845ce785303.js" async=""></script><script src="/_next/static/chunks/app/layout-9ecfd95f343793f0.js" async=""></script><meta name="robots" content="noindex"/><meta name="next-size-adjust" content=""/><title>404: This page could not be found.</title><title>GSD</title><meta name="description" content="The evolution of Get Shit Done — now a real coding agent. One command. Walk away. Come back to a built project."/><meta name="application-name" content="GSD"/><link rel="icon" href="/icon-light-32x32.png" media="(prefers-color-scheme: light)"/><link rel="icon" href="/icon-dark-32x32.png" media="(prefers-color-scheme: dark)"/><link rel="icon" href="/icon.svg" type="image/svg+xml"/><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body class="__variable_188709 __variable_9a8899 font-sans antialiased"><div hidden=""><!--$--><!--/$--></div><script>((a,b,c,d,e,f,g,h)=>{let i=document.documentElement,j=["light","dark"];function k(b){var c;(Array.isArray(a)?a:[a]).forEach(a=>{let c="class"===a,d=c&&f?e.map(a=>f[a]||a):e;c?(i.classList.remove(...d),i.classList.add(f&&f[b]?f[b]:b)):i.setAttribute(a,b)}),c=b,h&&j.includes(c)&&(i.style.colorScheme=c)}if(d)k(d);else try{let a=localStorage.getItem(b)||c,d=g&&"system"===a?window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light":a;k(d)}catch(a){}})("class","theme","dark",null,["light","dark"],null,true,true)</script><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding:0 23px 0 0;font-size:24px;font-weight:500;vertical-align:top;line-height:49px">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:49px;margin:0">This page could not be found.</h2></div></div></div><!--$--><!--/$--><section aria-label="Notifications alt+T" tabindex="-1" aria-live="polite" aria-relevant="additions text" aria-atomic="false"></section><script src="/_next/static/chunks/webpack-b868033a5834586d.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[21942,[\"4986\",\"static/chunks/4986-c2fc8845ce785303.js\",\"7177\",\"static/chunks/app/layout-9ecfd95f343793f0.js\"],\"ThemeProvider\"]\n3:I[57121,[],\"\"]\n4:I[74581,[],\"\"]\n5:I[61549,[\"4986\",\"static/chunks/4986-c2fc8845ce785303.js\",\"7177\",\"static/chunks/app/layout-9ecfd95f343793f0.js\"],\"Toaster\"]\n6:I[90484,[],\"OutletBoundary\"]\n7:\"$Sreact.suspense\"\na:I[90484,[],\"ViewportBoundary\"]\nc:I[90484,[],\"MetadataBoundary\"]\ne:I[27123,[],\"default\",1]\n:HL[\"/_next/static/media/4cf2300e9c8272f7-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/_next/static/media/93f479601ee12b01-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/_next/static/css/de70bee13400563f.css\",\"style\"]\n:HL[\"/_next/static/css/f6e8833d46e738d8.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"c\":[\"\",\"_not-found\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"_not-found\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",16],[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/de70bee13400563f.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"link\",\"1\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/f6e8833d46e738d8.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"suppressHydrationWarning\":true,\"children\":[\"$\",\"body\",null,{\"className\":\"__variable_188709 __variable_9a8899 font-sans antialiased\",\"children\":[\"$\",\"$L2\",null,{\"attribute\":\"class\",\"defaultTheme\":\"dark\",\"children\":[[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}],[\"$\",\"$L5\",null,{\"position\":\"bottom-right\"}]]}]}]}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],null,[\"$\",\"$L6\",null,{\"children\":[\"$\",\"$7\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@8\"}]}]]}],{},null,false,null]},null,false,\"$@9\"]},null,false,null],[\"$\",\"$1\",\"h\",{\"children\":[[\"$\",\"meta\",null,{\"name\":\"robots\",\"content\":\"noindex\"}],[\"$\",\"$La\",null,{\"children\":\"$Lb\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$Lc\",null,{\"children\":[\"$\",\"$7\",null,{\"name\":\"Next.Metadata\",\"children\":\"$Ld\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$e\",[]],\"S\":true,\"h\":null,\"s\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"nPky_WQC28aBD77eZsRAB\"}\n"])</script><script>self.__next_f.push([1,"f:[]\n9:\"$Wf\"\n"])</script><script>self.__next_f.push([1,"b:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no\"}]]\n"])</script><script>self.__next_f.push([1,"10:I[86869,[],\"IconMark\"]\n8:null\nd:[[\"$\",\"title\",\"0\",{\"children\":\"GSD\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"The evolution of Get Shit Done — now a real coding agent. One command. Walk away. Come back to a built project.\"}],[\"$\",\"meta\",\"2\",{\"name\":\"application-name\",\"content\":\"GSD\"}],[\"$\",\"link\",\"3\",{\"rel\":\"icon\",\"href\":\"/icon-light-32x32.png\",\"media\":\"(prefers-color-scheme: light)\"}],[\"$\",\"link\",\"4\",{\"rel\":\"icon\",\"href\":\"/icon-dark-32x32.png\",\"media\":\"(prefers-color-scheme: dark)\"}],[\"$\",\"link\",\"5\",{\"rel\":\"icon\",\"href\":\"/icon.svg\",\"type\":\"image/svg+xml\"}],[\"$\",\"$L10\",\"6\",{}]]\n"])</script></body></html>
1
+ <!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"/><link rel="preload" href="/_next/static/media/4cf2300e9c8272f7-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" href="/_next/static/media/93f479601ee12b01-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="stylesheet" href="/_next/static/css/de70bee13400563f.css" data-precedence="next"/><link rel="stylesheet" href="/_next/static/css/f6e8833d46e738d8.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-b868033a5834586d.js"/><script src="/_next/static/chunks/4bd1b696-e356ca5ba0218e27.js" async=""></script><script src="/_next/static/chunks/3794-42fdce068d44fa4f.js" async=""></script><script src="/_next/static/chunks/main-app-d3d4c336195465f9.js" async=""></script><script src="/_next/static/chunks/4986-c2fc8845ce785303.js" async=""></script><script src="/_next/static/chunks/app/layout-9ecfd95f343793f0.js" async=""></script><meta name="robots" content="noindex"/><meta name="next-size-adjust" content=""/><title>404: This page could not be found.</title><title>GSD</title><meta name="description" content="The evolution of Get Shit Done — now a real coding agent. One command. Walk away. Come back to a built project."/><meta name="application-name" content="GSD"/><link rel="icon" href="/icon-light-32x32.png" media="(prefers-color-scheme: light)"/><link rel="icon" href="/icon-dark-32x32.png" media="(prefers-color-scheme: dark)"/><link rel="icon" href="/icon.svg" type="image/svg+xml"/><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body class="__variable_188709 __variable_9a8899 font-sans antialiased"><div hidden=""><!--$--><!--/$--></div><script>((a,b,c,d,e,f,g,h)=>{let i=document.documentElement,j=["light","dark"];function k(b){var c;(Array.isArray(a)?a:[a]).forEach(a=>{let c="class"===a,d=c&&f?e.map(a=>f[a]||a):e;c?(i.classList.remove(...d),i.classList.add(f&&f[b]?f[b]:b)):i.setAttribute(a,b)}),c=b,h&&j.includes(c)&&(i.style.colorScheme=c)}if(d)k(d);else try{let a=localStorage.getItem(b)||c,d=g&&"system"===a?window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light":a;k(d)}catch(a){}})("class","theme","dark",null,["light","dark"],null,true,true)</script><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding:0 23px 0 0;font-size:24px;font-weight:500;vertical-align:top;line-height:49px">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:49px;margin:0">This page could not be found.</h2></div></div></div><!--$--><!--/$--><section aria-label="Notifications alt+T" tabindex="-1" aria-live="polite" aria-relevant="additions text" aria-atomic="false"></section><script src="/_next/static/chunks/webpack-b868033a5834586d.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[21942,[\"4986\",\"static/chunks/4986-c2fc8845ce785303.js\",\"7177\",\"static/chunks/app/layout-9ecfd95f343793f0.js\"],\"ThemeProvider\"]\n3:I[57121,[],\"\"]\n4:I[74581,[],\"\"]\n5:I[61549,[\"4986\",\"static/chunks/4986-c2fc8845ce785303.js\",\"7177\",\"static/chunks/app/layout-9ecfd95f343793f0.js\"],\"Toaster\"]\n6:I[90484,[],\"OutletBoundary\"]\n7:\"$Sreact.suspense\"\na:I[90484,[],\"ViewportBoundary\"]\nc:I[90484,[],\"MetadataBoundary\"]\ne:I[27123,[],\"default\",1]\n:HL[\"/_next/static/media/4cf2300e9c8272f7-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/_next/static/media/93f479601ee12b01-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/_next/static/css/de70bee13400563f.css\",\"style\"]\n:HL[\"/_next/static/css/f6e8833d46e738d8.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"c\":[\"\",\"_not-found\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"_not-found\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",16],[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/de70bee13400563f.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"link\",\"1\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/f6e8833d46e738d8.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"suppressHydrationWarning\":true,\"children\":[\"$\",\"body\",null,{\"className\":\"__variable_188709 __variable_9a8899 font-sans antialiased\",\"children\":[\"$\",\"$L2\",null,{\"attribute\":\"class\",\"defaultTheme\":\"dark\",\"children\":[[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}],[\"$\",\"$L5\",null,{\"position\":\"bottom-right\"}]]}]}]}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],null,[\"$\",\"$L6\",null,{\"children\":[\"$\",\"$7\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@8\"}]}]]}],{},null,false,null]},null,false,\"$@9\"]},null,false,null],[\"$\",\"$1\",\"h\",{\"children\":[[\"$\",\"meta\",null,{\"name\":\"robots\",\"content\":\"noindex\"}],[\"$\",\"$La\",null,{\"children\":\"$Lb\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$Lc\",null,{\"children\":[\"$\",\"$7\",null,{\"name\":\"Next.Metadata\",\"children\":\"$Ld\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$e\",[]],\"S\":true,\"h\":null,\"s\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"Y0I7CjXJl-tWoV__KidV4\"}\n"])</script><script>self.__next_f.push([1,"f:[]\n9:\"$Wf\"\n"])</script><script>self.__next_f.push([1,"b:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no\"}]]\n"])</script><script>self.__next_f.push([1,"10:I[86869,[],\"IconMark\"]\n8:null\nd:[[\"$\",\"title\",\"0\",{\"children\":\"GSD\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"The evolution of Get Shit Done — now a real coding agent. One command. Walk away. Come back to a built project.\"}],[\"$\",\"meta\",\"2\",{\"name\":\"application-name\",\"content\":\"GSD\"}],[\"$\",\"link\",\"3\",{\"rel\":\"icon\",\"href\":\"/icon-light-32x32.png\",\"media\":\"(prefers-color-scheme: light)\"}],[\"$\",\"link\",\"4\",{\"rel\":\"icon\",\"href\":\"/icon-dark-32x32.png\",\"media\":\"(prefers-color-scheme: dark)\"}],[\"$\",\"link\",\"5\",{\"rel\":\"icon\",\"href\":\"/icon.svg\",\"type\":\"image/svg+xml\"}],[\"$\",\"$L10\",\"6\",{}]]\n"])</script></body></html>
@@ -1 +1 @@
1
- <!DOCTYPE html><html id="__next_error__"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-b868033a5834586d.js"/><script src="/_next/static/chunks/4bd1b696-e356ca5ba0218e27.js" async=""></script><script src="/_next/static/chunks/3794-42fdce068d44fa4f.js" async=""></script><script src="/_next/static/chunks/main-app-d3d4c336195465f9.js" async=""></script><meta name="next-size-adjust" content=""/><title>500: This page couldn’t load</title><style>:root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }</style><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body><div hidden=""><!--$--><!--/$--></div><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;display:flex;align-items:center;justify-content:center"><div style="margin-top:-32px;max-width:325px;padding:32px 28px;text-align:left"><svg width="32" height="32" viewBox="-0.2 -1.5 32 32" fill="none" style="margin-bottom:24px"><path d="M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z" fill="var(--next-error-title)"></path></svg><h1 style="font-size:24px;font-weight:500;letter-spacing:-0.02em;line-height:32px;margin:0 0 12px 0;color:var(--next-error-title)">This page couldn’t load</h1><p style="font-size:14px;font-weight:400;line-height:21px;margin:0 0 20px 0;color:var(--next-error-message)">A server error occurred. Reload to try again.</p><form style="margin:0"><button type="submit" style="display:inline-flex;align-items:center;justify-content:center;height:32px;padding:0 12px;font-size:14px;font-weight:500;line-height:20px;border-radius:6px;cursor:pointer;color:var(--next-error-btn-text);background:var(--next-error-btn-bg);border:var(--next-error-btn-border)">Reload</button></form></div></div><!--$--><!--/$--><script src="/_next/static/chunks/webpack-b868033a5834586d.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[57121,[],\"\"]\n3:I[74581,[],\"\"]\n4:I[90484,[],\"OutletBoundary\"]\n5:\"$Sreact.suspense\"\n8:I[90484,[],\"ViewportBoundary\"]\na:I[90484,[],\"MetadataBoundary\"]\nc:I[27123,[],\"default\",1]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"c\":[\"\",\"_global-error\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"_global-error\",{\"children\":[\"__PAGE__\",{}]}]}],[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"html\",null,{\"id\":\"__next_error__\",\"children\":[[\"$\",\"head\",null,{\"children\":[[\"$\",\"title\",null,{\"children\":\"500: This page couldn’t load\"}],[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\":root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }\"}}]]}],[\"$\",\"body\",null,{\"children\":[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"display\":\"flex\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"style\":{\"marginTop\":\"-32px\",\"maxWidth\":\"325px\",\"padding\":\"32px 28px\",\"textAlign\":\"left\"},\"children\":[[\"$\",\"svg\",null,{\"width\":\"32\",\"height\":\"32\",\"viewBox\":\"-0.2 -1.5 32 32\",\"fill\":\"none\",\"style\":{\"marginBottom\":\"24px\"},\"children\":[\"$\",\"path\",null,{\"d\":\"M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z\",\"fill\":\"var(--next-error-title)\"}]}],[\"$\",\"h1\",null,{\"style\":{\"fontSize\":\"24px\",\"fontWeight\":500,\"letterSpacing\":\"-0.02em\",\"lineHeight\":\"32px\",\"margin\":\"0 0 12px 0\",\"color\":\"var(--next-error-title)\"},\"children\":\"This page couldn’t load\"}],[\"$\",\"p\",null,{\"style\":{\"fontSize\":\"14px\",\"fontWeight\":400,\"lineHeight\":\"21px\",\"margin\":\"0 0 20px 0\",\"color\":\"var(--next-error-message)\"},\"children\":\"A server error occurred. Reload to try again.\"}],[\"$\",\"form\",null,{\"style\":{\"margin\":0},\"children\":[\"$\",\"button\",null,{\"type\":\"submit\",\"style\":{\"display\":\"inline-flex\",\"alignItems\":\"center\",\"justifyContent\":\"center\",\"height\":\"32px\",\"padding\":\"0 12px\",\"fontSize\":\"14px\",\"fontWeight\":500,\"lineHeight\":\"20px\",\"borderRadius\":\"6px\",\"cursor\":\"pointer\",\"color\":\"var(--next-error-btn-text)\",\"background\":\"var(--next-error-btn-bg)\",\"border\":\"var(--next-error-btn-border)\"},\"children\":\"Reload\"}]}]]}]}]}]]}],null,[\"$\",\"$L4\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@6\"}]}]]}],{},null,false,null]},null,false,\"$@7\"]},null,false,\"$@7\"],[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$L8\",null,{\"children\":\"$L9\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$La\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.Metadata\",\"children\":\"$Lb\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$c\",[]],\"S\":true,\"h\":null,\"s\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"nPky_WQC28aBD77eZsRAB\"}\n"])</script><script>self.__next_f.push([1,"d:[]\n7:\"$Wd\"\n"])</script><script>self.__next_f.push([1,"9:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n"])</script><script>self.__next_f.push([1,"6:null\nb:[]\n"])</script></body></html>
1
+ <!DOCTYPE html><html id="__next_error__"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-b868033a5834586d.js"/><script src="/_next/static/chunks/4bd1b696-e356ca5ba0218e27.js" async=""></script><script src="/_next/static/chunks/3794-42fdce068d44fa4f.js" async=""></script><script src="/_next/static/chunks/main-app-d3d4c336195465f9.js" async=""></script><meta name="next-size-adjust" content=""/><title>500: This page couldn’t load</title><style>:root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }</style><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body><div hidden=""><!--$--><!--/$--></div><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;display:flex;align-items:center;justify-content:center"><div style="margin-top:-32px;max-width:325px;padding:32px 28px;text-align:left"><svg width="32" height="32" viewBox="-0.2 -1.5 32 32" fill="none" style="margin-bottom:24px"><path d="M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z" fill="var(--next-error-title)"></path></svg><h1 style="font-size:24px;font-weight:500;letter-spacing:-0.02em;line-height:32px;margin:0 0 12px 0;color:var(--next-error-title)">This page couldn’t load</h1><p style="font-size:14px;font-weight:400;line-height:21px;margin:0 0 20px 0;color:var(--next-error-message)">A server error occurred. Reload to try again.</p><form style="margin:0"><button type="submit" style="display:inline-flex;align-items:center;justify-content:center;height:32px;padding:0 12px;font-size:14px;font-weight:500;line-height:20px;border-radius:6px;cursor:pointer;color:var(--next-error-btn-text);background:var(--next-error-btn-bg);border:var(--next-error-btn-border)">Reload</button></form></div></div><!--$--><!--/$--><script src="/_next/static/chunks/webpack-b868033a5834586d.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[57121,[],\"\"]\n3:I[74581,[],\"\"]\n4:I[90484,[],\"OutletBoundary\"]\n5:\"$Sreact.suspense\"\n8:I[90484,[],\"ViewportBoundary\"]\na:I[90484,[],\"MetadataBoundary\"]\nc:I[27123,[],\"default\",1]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"c\":[\"\",\"_global-error\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"_global-error\",{\"children\":[\"__PAGE__\",{}]}]}],[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"html\",null,{\"id\":\"__next_error__\",\"children\":[[\"$\",\"head\",null,{\"children\":[[\"$\",\"title\",null,{\"children\":\"500: This page couldn’t load\"}],[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\":root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }\"}}]]}],[\"$\",\"body\",null,{\"children\":[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"display\":\"flex\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"style\":{\"marginTop\":\"-32px\",\"maxWidth\":\"325px\",\"padding\":\"32px 28px\",\"textAlign\":\"left\"},\"children\":[[\"$\",\"svg\",null,{\"width\":\"32\",\"height\":\"32\",\"viewBox\":\"-0.2 -1.5 32 32\",\"fill\":\"none\",\"style\":{\"marginBottom\":\"24px\"},\"children\":[\"$\",\"path\",null,{\"d\":\"M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z\",\"fill\":\"var(--next-error-title)\"}]}],[\"$\",\"h1\",null,{\"style\":{\"fontSize\":\"24px\",\"fontWeight\":500,\"letterSpacing\":\"-0.02em\",\"lineHeight\":\"32px\",\"margin\":\"0 0 12px 0\",\"color\":\"var(--next-error-title)\"},\"children\":\"This page couldn’t load\"}],[\"$\",\"p\",null,{\"style\":{\"fontSize\":\"14px\",\"fontWeight\":400,\"lineHeight\":\"21px\",\"margin\":\"0 0 20px 0\",\"color\":\"var(--next-error-message)\"},\"children\":\"A server error occurred. Reload to try again.\"}],[\"$\",\"form\",null,{\"style\":{\"margin\":0},\"children\":[\"$\",\"button\",null,{\"type\":\"submit\",\"style\":{\"display\":\"inline-flex\",\"alignItems\":\"center\",\"justifyContent\":\"center\",\"height\":\"32px\",\"padding\":\"0 12px\",\"fontSize\":\"14px\",\"fontWeight\":500,\"lineHeight\":\"20px\",\"borderRadius\":\"6px\",\"cursor\":\"pointer\",\"color\":\"var(--next-error-btn-text)\",\"background\":\"var(--next-error-btn-bg)\",\"border\":\"var(--next-error-btn-border)\"},\"children\":\"Reload\"}]}]]}]}]}]]}],null,[\"$\",\"$L4\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@6\"}]}]]}],{},null,false,null]},null,false,\"$@7\"]},null,false,\"$@7\"],[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$L8\",null,{\"children\":\"$L9\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$La\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.Metadata\",\"children\":\"$Lb\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$c\",[]],\"S\":true,\"h\":null,\"s\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"Y0I7CjXJl-tWoV__KidV4\"}\n"])</script><script>self.__next_f.push([1,"d:[]\n7:\"$Wd\"\n"])</script><script>self.__next_f.push([1,"9:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n"])</script><script>self.__next_f.push([1,"6:null\nb:[]\n"])</script></body></html>
@@ -1 +1 @@
1
- {"node":{},"edge":{},"encryptionKey":"4TD69Ndurx1Y86/CdxXp4OX4A4IpJlSZ3Ij3ntpaDQg="}
1
+ {"node":{},"edge":{},"encryptionKey":"JOyW/NkGGBZbrWHv3URRDUgsbPKoFv/QsyVwX2l6Wi8="}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gsd-pi",
3
- "version": "2.71.0",
3
+ "version": "2.72.0",
4
4
  "description": "GSD — Get Shit Done coding agent",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -20,8 +20,19 @@ interface ElicitRequestFormParams {
20
20
  required?: string[];
21
21
  };
22
22
  }
23
+ /**
24
+ * Handler extra — the second argument passed by McpServer.tool handlers.
25
+ * Contains an AbortSignal scoped to the JSON-RPC request (cancelled when
26
+ * the client cancels the `tools/call`) plus other per-request metadata.
27
+ * Tools that can actually be stopped mid-flight should honour `signal`.
28
+ */
29
+ export interface McpToolExtra {
30
+ signal?: AbortSignal;
31
+ requestId?: string | number;
32
+ sendNotification?: (notification: unknown) => void | Promise<void>;
33
+ }
23
34
  interface McpServerInstance {
24
- tool(name: string, description: string, params: Record<string, unknown>, handler: (args: Record<string, unknown>) => Promise<unknown>): unknown;
35
+ tool(name: string, description: string, params: Record<string, unknown>, handler: (args: Record<string, unknown>, extra?: McpToolExtra) => Promise<unknown>): unknown;
25
36
  server: {
26
37
  elicitInput(params: AskUserQuestionsElicitRequest | ElicitRequestFormParams, options?: unknown): Promise<AskUserQuestionsElicitResult>;
27
38
  };
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAKH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAwG3D,UAAU,uBAAuB;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,EAAE;QACf,IAAI,EAAE,QAAQ,CAAC;QACf,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;QACpD,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;KACrB,CAAC;CACH;AAED,UAAU,iBAAiB;IACzB,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;IAChJ,MAAM,EAAE;QACN,WAAW,CACT,MAAM,EAAE,6BAA6B,GAAG,uBAAuB,EAC/D,OAAO,CAAC,EAAE,OAAO,GAChB,OAAO,CAAC,4BAA4B,CAAC,CAAC;KAC1C,CAAC;IACF,OAAO,CAAC,SAAS,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED,UAAU,qBAAqB;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,UAAU,eAAe;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,qBAAqB,EAAE,CAAC;IACjC,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAMD,KAAK,4BAA4B,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,EAAE,CAAC;AAEzE,UAAU,4BAA4B;IACpC,MAAM,EAAE,QAAQ,GAAG,SAAS,GAAG,QAAQ,CAAC;IACxC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,4BAA4B,CAAC,CAAC;CACxD;AAED,UAAU,6BAA6B;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,EAAE;QACf,IAAI,EAAE,QAAQ,CAAC;QACf,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;QACpD,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;KACrB,CAAC;CACH;AAiCD,wBAAgB,kCAAkC,CAAC,SAAS,EAAE,eAAe,EAAE,GAAG,6BAA6B,CAiD9G;AAED,wBAAgB,kCAAkC,CAChD,SAAS,EAAE,eAAe,EAAE,EAC5B,MAAM,EAAE,4BAA4B,GACnC,MAAM,CAkBR;AAMD;;;;;GAKG;AACH,wBAAsB,eAAe,CAAC,cAAc,EAAE,cAAc,GAAG,OAAO,CAAC;IAC7E,MAAM,EAAE,iBAAiB,CAAC;CAC3B,CAAC,CAwbD"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAKH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AA0I3D,UAAU,uBAAuB;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,EAAE;QACf,IAAI,EAAE,QAAQ,CAAC;QACf,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;QACpD,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;KACrB,CAAC;CACH;AAED;;;;;GAKG;AACH,MAAM,WAAW,YAAY;IAC3B,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC5B,gBAAgB,CAAC,EAAE,CAAC,YAAY,EAAE,OAAO,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACpE;AAED,UAAU,iBAAiB;IACzB,IAAI,CACF,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,KAAK,CAAC,EAAE,YAAY,KAAK,OAAO,CAAC,OAAO,CAAC,GACjF,OAAO,CAAC;IACX,MAAM,EAAE;QACN,WAAW,CACT,MAAM,EAAE,6BAA6B,GAAG,uBAAuB,EAC/D,OAAO,CAAC,EAAE,OAAO,GAChB,OAAO,CAAC,4BAA4B,CAAC,CAAC;KAC1C,CAAC;IACF,OAAO,CAAC,SAAS,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED,UAAU,qBAAqB;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,UAAU,eAAe;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,qBAAqB,EAAE,CAAC;IACjC,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAMD,KAAK,4BAA4B,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,EAAE,CAAC;AAEzE,UAAU,4BAA4B;IACpC,MAAM,EAAE,QAAQ,GAAG,SAAS,GAAG,QAAQ,CAAC;IACxC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,4BAA4B,CAAC,CAAC;CACxD;AAED,UAAU,6BAA6B;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,EAAE;QACf,IAAI,EAAE,QAAQ,CAAC;QACf,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;QACpD,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;KACrB,CAAC;CACH;AAiCD,wBAAgB,kCAAkC,CAAC,SAAS,EAAE,eAAe,EAAE,GAAG,6BAA6B,CAiD9G;AAED,wBAAgB,kCAAkC,CAChD,SAAS,EAAE,eAAe,EAAE,EAC5B,MAAM,EAAE,4BAA4B,GACnC,MAAM,CAkBR;AAMD;;;;;GAKG;AACH,wBAAsB,eAAe,CAAC,cAAc,EAAE,cAAc,GAAG,OAAO,CAAC;IAC7E,MAAM,EAAE,iBAAiB,CAAC;CAC3B,CAAC,CA6cD"}
@@ -45,47 +45,76 @@ function textContent(text) {
45
45
  // ---------------------------------------------------------------------------
46
46
  // gsd_query filesystem reader
47
47
  // ---------------------------------------------------------------------------
48
- async function readProjectState(projectDir, _query) {
48
+ /**
49
+ * Normalized query categories for {@link readProjectState}.
50
+ *
51
+ * Maps user-supplied query strings (or empty) to the set of fields we return.
52
+ * Accepts common synonyms so the MCP client can pass intuitive values.
53
+ */
54
+ const QUERY_FIELDS = {
55
+ all: ['state', 'project', 'requirements', 'milestones'],
56
+ state: ['state'],
57
+ status: ['state'],
58
+ project: ['project'],
59
+ requirements: ['requirements'],
60
+ milestones: ['milestones'],
61
+ };
62
+ function normalizeQuery(query) {
63
+ const key = (query ?? 'all').trim().toLowerCase();
64
+ if (key in QUERY_FIELDS)
65
+ return key;
66
+ return 'all';
67
+ }
68
+ async function readProjectState(projectDir, query) {
49
69
  const gsdDir = join(resolve(projectDir), '.gsd');
50
- const result = { projectDir: resolve(projectDir) };
51
- // STATE.md current execution state
52
- try {
53
- result.state = await readFile(join(gsdDir, 'STATE.md'), 'utf-8');
54
- }
55
- catch {
56
- result.state = null;
57
- }
58
- // PROJECT.md — project description
59
- try {
60
- result.project = await readFile(join(gsdDir, 'PROJECT.md'), 'utf-8');
61
- }
62
- catch {
63
- result.project = null;
64
- }
65
- // REQUIREMENTS.md — requirement contract
66
- try {
67
- result.requirements = await readFile(join(gsdDir, 'REQUIREMENTS.md'), 'utf-8');
70
+ const category = normalizeQuery(query);
71
+ const wanted = new Set(QUERY_FIELDS[category]);
72
+ const result = {
73
+ projectDir: resolve(projectDir),
74
+ query: category,
75
+ };
76
+ if (wanted.has('state')) {
77
+ try {
78
+ result.state = await readFile(join(gsdDir, 'STATE.md'), 'utf-8');
79
+ }
80
+ catch {
81
+ result.state = null;
82
+ }
68
83
  }
69
- catch {
70
- result.requirements = null;
84
+ if (wanted.has('project')) {
85
+ try {
86
+ result.project = await readFile(join(gsdDir, 'PROJECT.md'), 'utf-8');
87
+ }
88
+ catch {
89
+ result.project = null;
90
+ }
71
91
  }
72
- // List milestones with basic metadata
73
- const milestonesDir = join(gsdDir, 'milestones');
74
- try {
75
- const entries = await readdir(milestonesDir, { withFileTypes: true });
76
- const milestones = [];
77
- for (const entry of entries) {
78
- if (!entry.isDirectory())
79
- continue;
80
- const mDir = join(milestonesDir, entry.name);
81
- const hasRoadmap = await fileExists(join(mDir, `${entry.name}-ROADMAP.md`));
82
- const hasSummary = await fileExists(join(mDir, `${entry.name}-SUMMARY.md`));
83
- milestones.push({ id: entry.name, hasRoadmap, hasSummary });
84
- }
85
- result.milestones = milestones;
92
+ if (wanted.has('requirements')) {
93
+ try {
94
+ result.requirements = await readFile(join(gsdDir, 'REQUIREMENTS.md'), 'utf-8');
95
+ }
96
+ catch {
97
+ result.requirements = null;
98
+ }
86
99
  }
87
- catch {
88
- result.milestones = [];
100
+ if (wanted.has('milestones')) {
101
+ const milestonesDir = join(gsdDir, 'milestones');
102
+ try {
103
+ const entries = await readdir(milestonesDir, { withFileTypes: true });
104
+ const milestones = [];
105
+ for (const entry of entries) {
106
+ if (!entry.isDirectory())
107
+ continue;
108
+ const mDir = join(milestonesDir, entry.name);
109
+ const hasRoadmap = await fileExists(join(mDir, `${entry.name}-ROADMAP.md`));
110
+ const hasSummary = await fileExists(join(mDir, `${entry.name}-SUMMARY.md`));
111
+ milestones.push({ id: entry.name, hasRoadmap, hasSummary });
112
+ }
113
+ result.milestones = milestones;
114
+ }
115
+ catch {
116
+ result.milestones = [];
117
+ }
89
118
  }
90
119
  return result;
91
120
  }
@@ -195,17 +224,28 @@ export async function createMcpServer(sessionManager) {
195
224
  const McpServer = mcpMod.McpServer;
196
225
  const server = new McpServer({ name: SERVER_NAME, version: SERVER_VERSION }, { capabilities: { tools: {}, elicitation: {} } });
197
226
  // -----------------------------------------------------------------------
198
- // gsd_execute — start a new GSD auto-mode session
227
+ // gsd_execute — start a new GSD auto-mode session.
228
+ //
229
+ // If the JSON-RPC request is aborted while the session is starting (or
230
+ // immediately after), we cancel the session so we don't leak a background
231
+ // RpcClient process. Once the session is running the caller should use
232
+ // `gsd_cancel` to stop it via sessionId.
199
233
  // -----------------------------------------------------------------------
200
234
  server.tool('gsd_execute', 'Start a GSD auto-mode session for a project directory. Returns a sessionId for tracking.', {
201
235
  projectDir: z.string().describe('Absolute path to the project directory'),
202
236
  command: z.string().optional().describe('Command to send (default: "/gsd auto")'),
203
237
  model: z.string().optional().describe('Model ID override'),
204
238
  bare: z.boolean().optional().describe('Run in bare mode (skip user config)'),
205
- }, async (args) => {
239
+ }, async (args, extra) => {
206
240
  const { projectDir, command, model, bare } = args;
207
241
  try {
208
242
  const sessionId = await sessionManager.startSession(projectDir, { command, model, bare });
243
+ // If the client aborted while startSession was running, cancel the
244
+ // newly-created session rather than leaving an orphaned process.
245
+ if (extra?.signal?.aborted) {
246
+ await sessionManager.cancelSession(sessionId).catch(() => { });
247
+ return errorContent('gsd_execute aborted by client before returning');
248
+ }
209
249
  return jsonContent({ sessionId, status: 'started' });
210
250
  }
211
251
  catch (err) {
@@ -279,11 +319,19 @@ export async function createMcpServer(sessionManager) {
279
319
  }
280
320
  });
281
321
  // -----------------------------------------------------------------------
282
- // gsd_query — read project state from filesystem (no session needed)
322
+ // gsd_query — read project state from filesystem (no session needed).
323
+ //
324
+ // `query` is optional: when omitted the tool returns all fields (STATE.md,
325
+ // PROJECT.md, requirements, milestone listing). Accepted narrow values:
326
+ // "state" / "status", "project", "requirements", "milestones", "all".
327
+ // Unknown values fall back to "all" for forward-compatibility.
283
328
  // -----------------------------------------------------------------------
284
- server.tool('gsd_query', 'Query GSD project state from the filesystem. Returns STATE.md, PROJECT.md, requirements, and milestone listing. Does not require an active session.', {
329
+ server.tool('gsd_query', 'Query GSD project state from the filesystem. By default returns STATE.md, PROJECT.md, requirements, and milestone listing. Pass `query` to narrow the response (accepted: "state"/"status", "project", "requirements", "milestones", "all"). Does not require an active session.', {
285
330
  projectDir: z.string().describe('Absolute path to the project directory'),
286
- query: z.string().describe('What to query (e.g. "status", "milestones", "requirements")'),
331
+ query: z
332
+ .enum(['all', 'state', 'status', 'project', 'requirements', 'milestones'])
333
+ .optional()
334
+ .describe('Narrow the response to a single field (default: "all")'),
287
335
  }, async (args) => {
288
336
  const { projectDir, query } = args;
289
337
  try {