gsd-pi 2.10.12 → 2.12.0

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