gsd-pi 2.75.0-dev.063e5a3 → 2.75.0-dev.fd2382b9f

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 (606) hide show
  1. package/README.md +186 -149
  2. package/dist/claude-cli-check.d.ts +10 -0
  3. package/dist/claude-cli-check.js +13 -3
  4. package/dist/headless-events.d.ts +1 -1
  5. package/dist/headless-events.js +5 -2
  6. package/dist/headless.js +5 -6
  7. package/dist/loader.js +0 -0
  8. package/dist/onboarding.js +39 -14
  9. package/dist/resources/extensions/ask-user-questions.js +17 -5
  10. package/dist/resources/extensions/claude-code-cli/models.js +9 -0
  11. package/dist/resources/extensions/claude-code-cli/readiness.js +12 -2
  12. package/dist/resources/extensions/claude-code-cli/stream-adapter.js +76 -4
  13. package/dist/resources/extensions/gsd/auto/detect-stuck.js +9 -0
  14. package/dist/resources/extensions/gsd/auto/loop.js +67 -4
  15. package/dist/resources/extensions/gsd/auto/phases.js +70 -47
  16. package/dist/resources/extensions/gsd/auto/resolve.js +1 -1
  17. package/dist/resources/extensions/gsd/auto/run-unit.js +10 -1
  18. package/dist/resources/extensions/gsd/auto/session.js +5 -0
  19. package/dist/resources/extensions/gsd/auto-artifact-paths.js +20 -0
  20. package/dist/resources/extensions/gsd/auto-dashboard.js +15 -7
  21. package/dist/resources/extensions/gsd/auto-dispatch.js +112 -6
  22. package/dist/resources/extensions/gsd/auto-loop.js +1 -1
  23. package/dist/resources/extensions/gsd/auto-model-selection.js +10 -2
  24. package/dist/resources/extensions/gsd/auto-post-unit.js +9 -7
  25. package/dist/resources/extensions/gsd/auto-prompts.js +151 -37
  26. package/dist/resources/extensions/gsd/auto-recovery.js +57 -0
  27. package/dist/resources/extensions/gsd/auto-start.js +5 -3
  28. package/dist/resources/extensions/gsd/auto-verification.js +3 -3
  29. package/dist/resources/extensions/gsd/auto-worktree.js +55 -1
  30. package/dist/resources/extensions/gsd/auto.js +50 -25
  31. package/dist/resources/extensions/gsd/bootstrap/agent-end-recovery.js +8 -21
  32. package/dist/resources/extensions/gsd/bootstrap/db-tools.js +22 -4
  33. package/dist/resources/extensions/gsd/bootstrap/query-tools.js +29 -0
  34. package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +22 -0
  35. package/dist/resources/extensions/gsd/commands/catalog.js +67 -3
  36. package/dist/resources/extensions/gsd/commands/handlers/core.js +6 -0
  37. package/dist/resources/extensions/gsd/commands/handlers/escalate.js +171 -0
  38. package/dist/resources/extensions/gsd/commands/handlers/ops.js +16 -0
  39. package/dist/resources/extensions/gsd/commands/handlers/workflow.js +228 -29
  40. package/dist/resources/extensions/gsd/commands-cmux.js +5 -2
  41. package/dist/resources/extensions/gsd/commands-debug.js +388 -0
  42. package/dist/resources/extensions/gsd/commands-do.js +1 -0
  43. package/dist/resources/extensions/gsd/commands-handlers.js +21 -2
  44. package/dist/resources/extensions/gsd/commands-prefs-wizard.js +1 -1
  45. package/dist/resources/extensions/gsd/commands-scan.js +94 -0
  46. package/dist/resources/extensions/gsd/commands-workflow-templates.js +101 -2
  47. package/dist/resources/extensions/gsd/custom-workflow-engine.js +74 -54
  48. package/dist/resources/extensions/gsd/db-writer.js +1 -0
  49. package/dist/resources/extensions/gsd/debug-session-store.js +238 -0
  50. package/dist/resources/extensions/gsd/definition-loader.js +7 -0
  51. package/dist/resources/extensions/gsd/docs/preferences-reference.md +9 -9
  52. package/dist/resources/extensions/gsd/doctor-git-checks.js +5 -1
  53. package/dist/resources/extensions/gsd/doctor-proactive.js +4 -1
  54. package/dist/resources/extensions/gsd/doctor-providers.js +48 -20
  55. package/dist/resources/extensions/gsd/doctor-runtime-checks.js +22 -4
  56. package/dist/resources/extensions/gsd/doctor.js +7 -1
  57. package/dist/resources/extensions/gsd/error-classifier.js +6 -3
  58. package/dist/resources/extensions/gsd/escalation.js +321 -0
  59. package/dist/resources/extensions/gsd/forensics.js +26 -29
  60. package/dist/resources/extensions/gsd/git-service.js +0 -1
  61. package/dist/resources/extensions/gsd/graph.js +26 -2
  62. package/dist/resources/extensions/gsd/gsd-db.js +254 -29
  63. package/dist/resources/extensions/gsd/health-widget-core.js +42 -14
  64. package/dist/resources/extensions/gsd/health-widget.js +7 -4
  65. package/dist/resources/extensions/gsd/metrics.js +1 -0
  66. package/dist/resources/extensions/gsd/model-cost-table.js +3 -1
  67. package/dist/resources/extensions/gsd/model-router.js +7 -1
  68. package/dist/resources/extensions/gsd/native-git-bridge.js +137 -5
  69. package/dist/resources/extensions/gsd/notification-widget.js +24 -39
  70. package/dist/resources/extensions/gsd/notifications.js +4 -0
  71. package/dist/resources/extensions/gsd/post-execution-checks.js +27 -11
  72. package/dist/resources/extensions/gsd/pre-execution-checks.js +97 -4
  73. package/dist/resources/extensions/gsd/preferences-models.js +1 -0
  74. package/dist/resources/extensions/gsd/preferences-types.js +2 -1
  75. package/dist/resources/extensions/gsd/preferences-validation.js +42 -8
  76. package/dist/resources/extensions/gsd/preferences.js +10 -10
  77. package/dist/resources/extensions/gsd/prompts/debug-diagnose.md +25 -0
  78. package/dist/resources/extensions/gsd/prompts/debug-session-manager.md +80 -0
  79. package/dist/resources/extensions/gsd/prompts/execute-task.md +12 -0
  80. package/dist/resources/extensions/gsd/prompts/plan-milestone.md +12 -0
  81. package/dist/resources/extensions/gsd/prompts/refine-slice.md +69 -0
  82. package/dist/resources/extensions/gsd/prompts/scan.md +79 -0
  83. package/dist/resources/extensions/gsd/prompts/workflow-oneshot.md +26 -0
  84. package/dist/resources/extensions/gsd/run-manager.js +37 -17
  85. package/dist/resources/extensions/gsd/state.js +47 -3
  86. package/dist/resources/extensions/gsd/templates/PREFERENCES.md +7 -7
  87. package/dist/resources/extensions/gsd/tools/complete-task.js +80 -0
  88. package/dist/resources/extensions/gsd/tools/plan-milestone.js +37 -12
  89. package/dist/resources/extensions/gsd/tools/plan-slice.js +5 -2
  90. package/dist/resources/extensions/gsd/uok/flags.js +7 -7
  91. package/dist/resources/extensions/gsd/uok/kernel.js +8 -3
  92. package/dist/resources/extensions/gsd/workflow-dispatch.js +64 -0
  93. package/dist/resources/extensions/gsd/workflow-install.js +327 -0
  94. package/dist/resources/extensions/gsd/workflow-manifest.js +8 -0
  95. package/dist/resources/extensions/gsd/workflow-mcp.js +1 -6
  96. package/dist/resources/extensions/gsd/workflow-plugins.js +346 -0
  97. package/dist/resources/extensions/gsd/workflow-templates/accessibility-audit.md +88 -0
  98. package/dist/resources/extensions/gsd/workflow-templates/api-breaking-change.md +117 -0
  99. package/dist/resources/extensions/gsd/workflow-templates/bugfix.md +1 -0
  100. package/dist/resources/extensions/gsd/workflow-templates/changelog-gen.md +82 -0
  101. package/dist/resources/extensions/gsd/workflow-templates/ci-bootstrap.md +144 -0
  102. package/dist/resources/extensions/gsd/workflow-templates/dead-code.md +81 -0
  103. package/dist/resources/extensions/gsd/workflow-templates/dep-upgrade.md +1 -0
  104. package/dist/resources/extensions/gsd/workflow-templates/docs-sync.yaml +76 -0
  105. package/dist/resources/extensions/gsd/workflow-templates/env-audit.yaml +88 -0
  106. package/dist/resources/extensions/gsd/workflow-templates/full-project.md +1 -0
  107. package/dist/resources/extensions/gsd/workflow-templates/hotfix.md +1 -0
  108. package/dist/resources/extensions/gsd/workflow-templates/issue-triage.md +84 -0
  109. package/dist/resources/extensions/gsd/workflow-templates/observability-setup.md +133 -0
  110. package/dist/resources/extensions/gsd/workflow-templates/onboarding-check.md +74 -0
  111. package/dist/resources/extensions/gsd/workflow-templates/performance-audit.md +125 -0
  112. package/dist/resources/extensions/gsd/workflow-templates/pr-review.md +67 -0
  113. package/dist/resources/extensions/gsd/workflow-templates/pr-triage.md +83 -0
  114. package/dist/resources/extensions/gsd/workflow-templates/refactor.md +1 -0
  115. package/dist/resources/extensions/gsd/workflow-templates/registry.json +184 -0
  116. package/dist/resources/extensions/gsd/workflow-templates/release.md +118 -0
  117. package/dist/resources/extensions/gsd/workflow-templates/rename-symbol.yaml +99 -0
  118. package/dist/resources/extensions/gsd/workflow-templates/security-audit.md +1 -0
  119. package/dist/resources/extensions/gsd/workflow-templates/small-feature.md +1 -0
  120. package/dist/resources/extensions/gsd/workflow-templates/spike.md +1 -0
  121. package/dist/resources/extensions/gsd/workflow-templates/test-backfill.yaml +73 -0
  122. package/dist/resources/extensions/gsd/worktree-resolver.js +42 -1
  123. package/dist/resources/extensions/remote-questions/commands.js +380 -0
  124. package/dist/resources/extensions/remote-questions/manager.js +39 -5
  125. package/dist/resources/extensions/remote-questions/telegram-adapter.js +79 -4
  126. package/dist/resources/extensions/shared/interview-ui.js +189 -1
  127. package/dist/resources/extensions/shared/layout-utils.js +17 -0
  128. package/dist/resources/extensions/shared/rtk-shared.js +47 -0
  129. package/dist/resources/extensions/shared/rtk.js +3 -46
  130. package/dist/resources/skills/create-workflow/SKILL.md +33 -6
  131. package/dist/rtk-shared.d.ts +10 -0
  132. package/dist/rtk-shared.js +47 -0
  133. package/dist/rtk.d.ts +2 -6
  134. package/dist/rtk.js +3 -48
  135. package/dist/shared/workspace-types.d.ts +52 -0
  136. package/dist/shared/workspace-types.js +1 -0
  137. package/dist/tsconfig.extensions.tsbuildinfo +1 -1
  138. package/dist/update-check.d.ts +10 -0
  139. package/dist/update-check.js +24 -3
  140. package/dist/web/standalone/.next/BUILD_ID +1 -1
  141. package/dist/web/standalone/.next/app-path-routes-manifest.json +6 -6
  142. package/dist/web/standalone/.next/build-manifest.json +3 -3
  143. package/dist/web/standalone/.next/prerender-manifest.json +3 -3
  144. package/dist/web/standalone/.next/react-loadable-manifest.json +1 -1
  145. package/dist/web/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  146. package/dist/web/standalone/.next/server/app/_global-error.html +1 -1
  147. package/dist/web/standalone/.next/server/app/_global-error.rsc +1 -1
  148. package/dist/web/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  149. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  150. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  151. package/dist/web/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  152. package/dist/web/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  153. package/dist/web/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  154. package/dist/web/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  155. package/dist/web/standalone/.next/server/app/_not-found.html +1 -1
  156. package/dist/web/standalone/.next/server/app/_not-found.rsc +2 -2
  157. package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
  158. package/dist/web/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  159. package/dist/web/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
  160. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  161. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  162. package/dist/web/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  163. package/dist/web/standalone/.next/server/app/api/git/route.js +1 -1
  164. package/dist/web/standalone/.next/server/app/api/update/route.js +1 -1
  165. package/dist/web/standalone/.next/server/app/index.html +1 -1
  166. package/dist/web/standalone/.next/server/app/index.rsc +2 -2
  167. package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  168. package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +2 -2
  169. package/dist/web/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
  170. package/dist/web/standalone/.next/server/app/index.segments/_index.segment.rsc +2 -2
  171. package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  172. package/dist/web/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  173. package/dist/web/standalone/.next/server/app-paths-manifest.json +6 -6
  174. package/dist/web/standalone/.next/server/chunks/6897.js +2 -2
  175. package/dist/web/standalone/.next/server/middleware-build-manifest.js +1 -1
  176. package/dist/web/standalone/.next/server/middleware-manifest.json +5 -5
  177. package/dist/web/standalone/.next/server/middleware-react-loadable-manifest.js +1 -1
  178. package/dist/web/standalone/.next/server/pages/404.html +1 -1
  179. package/dist/web/standalone/.next/server/pages/500.html +1 -1
  180. package/dist/web/standalone/.next/server/server-reference-manifest.json +1 -1
  181. package/dist/web/standalone/.next/static/chunks/2826.02df9631042cc18e.js +9 -0
  182. package/dist/web/standalone/.next/static/chunks/{webpack-b868033a5834586d.js → webpack-6c7cda3e318eedb6.js} +1 -1
  183. package/dist/web/standalone/.next/static/css/3e9cdadb4d23b8a4.css +1 -0
  184. package/dist/welcome-screen.js +48 -24
  185. package/dist/wizard.js +2 -2
  186. package/dist/worktree-cli.d.ts +6 -5
  187. package/dist/worktree-cli.js +23 -7
  188. package/package.json +3 -3
  189. package/packages/mcp-server/tsconfig.tsbuildinfo +1 -1
  190. package/packages/native/tsconfig.tsbuildinfo +1 -1
  191. package/packages/pi-agent-core/tsconfig.tsbuildinfo +1 -1
  192. package/packages/pi-ai/dist/models/capability-patches.d.ts.map +1 -1
  193. package/packages/pi-ai/dist/models/capability-patches.js +3 -2
  194. package/packages/pi-ai/dist/models/capability-patches.js.map +1 -1
  195. package/packages/pi-ai/dist/models/generated/amazon-bedrock.d.ts +68 -0
  196. package/packages/pi-ai/dist/models/generated/amazon-bedrock.d.ts.map +1 -1
  197. package/packages/pi-ai/dist/models/generated/amazon-bedrock.js +68 -0
  198. package/packages/pi-ai/dist/models/generated/amazon-bedrock.js.map +1 -1
  199. package/packages/pi-ai/dist/models/generated/anthropic.d.ts +17 -0
  200. package/packages/pi-ai/dist/models/generated/anthropic.d.ts.map +1 -1
  201. package/packages/pi-ai/dist/models/generated/anthropic.js +17 -0
  202. package/packages/pi-ai/dist/models/generated/anthropic.js.map +1 -1
  203. package/packages/pi-ai/dist/models/generated/google-antigravity.d.ts +17 -0
  204. package/packages/pi-ai/dist/models/generated/google-antigravity.d.ts.map +1 -1
  205. package/packages/pi-ai/dist/models/generated/google-antigravity.js +17 -0
  206. package/packages/pi-ai/dist/models/generated/google-antigravity.js.map +1 -1
  207. package/packages/pi-ai/dist/models/generated/groq.d.ts +0 -153
  208. package/packages/pi-ai/dist/models/generated/groq.d.ts.map +1 -1
  209. package/packages/pi-ai/dist/models/generated/groq.js +0 -153
  210. package/packages/pi-ai/dist/models/generated/groq.js.map +1 -1
  211. package/packages/pi-ai/dist/models/generated/index.d.ts +136 -153
  212. package/packages/pi-ai/dist/models/generated/index.d.ts.map +1 -1
  213. package/packages/pi-ai/dist/models/generated/openai-codex.d.ts +17 -0
  214. package/packages/pi-ai/dist/models/generated/openai-codex.d.ts.map +1 -1
  215. package/packages/pi-ai/dist/models/generated/openai-codex.js +17 -0
  216. package/packages/pi-ai/dist/models/generated/openai-codex.js.map +1 -1
  217. package/packages/pi-ai/dist/models/generated/openrouter.d.ts +17 -0
  218. package/packages/pi-ai/dist/models/generated/openrouter.d.ts.map +1 -1
  219. package/packages/pi-ai/dist/models/generated/openrouter.js +17 -0
  220. package/packages/pi-ai/dist/models/generated/openrouter.js.map +1 -1
  221. package/packages/pi-ai/dist/models.generated.test.js +17 -0
  222. package/packages/pi-ai/dist/models.generated.test.js.map +1 -1
  223. package/packages/pi-ai/dist/providers/amazon-bedrock.d.ts +22 -1
  224. package/packages/pi-ai/dist/providers/amazon-bedrock.d.ts.map +1 -1
  225. package/packages/pi-ai/dist/providers/amazon-bedrock.js +40 -6
  226. package/packages/pi-ai/dist/providers/amazon-bedrock.js.map +1 -1
  227. package/packages/pi-ai/dist/providers/amazon-bedrock.test.d.ts +2 -0
  228. package/packages/pi-ai/dist/providers/amazon-bedrock.test.d.ts.map +1 -0
  229. package/packages/pi-ai/dist/providers/amazon-bedrock.test.js +106 -0
  230. package/packages/pi-ai/dist/providers/amazon-bedrock.test.js.map +1 -0
  231. package/packages/pi-ai/dist/providers/anthropic-auth.test.js +42 -1
  232. package/packages/pi-ai/dist/providers/anthropic-auth.test.js.map +1 -1
  233. package/packages/pi-ai/dist/providers/anthropic-shared.d.ts +20 -1
  234. package/packages/pi-ai/dist/providers/anthropic-shared.d.ts.map +1 -1
  235. package/packages/pi-ai/dist/providers/anthropic-shared.js +32 -2
  236. package/packages/pi-ai/dist/providers/anthropic-shared.js.map +1 -1
  237. package/packages/pi-ai/dist/providers/anthropic-shared.test.js +12 -1
  238. package/packages/pi-ai/dist/providers/anthropic-shared.test.js.map +1 -1
  239. package/packages/pi-ai/dist/providers/anthropic.d.ts +11 -0
  240. package/packages/pi-ai/dist/providers/anthropic.d.ts.map +1 -1
  241. package/packages/pi-ai/dist/providers/anthropic.js +18 -1
  242. package/packages/pi-ai/dist/providers/anthropic.js.map +1 -1
  243. package/packages/pi-ai/dist/utils/oauth/openai-codex.d.ts.map +1 -1
  244. package/packages/pi-ai/dist/utils/oauth/openai-codex.js +12 -0
  245. package/packages/pi-ai/dist/utils/oauth/openai-codex.js.map +1 -1
  246. package/packages/pi-ai/package.json +1 -1
  247. package/packages/pi-ai/scripts/generate-models.ts +50 -0
  248. package/packages/pi-ai/src/models/capability-patches.ts +5 -2
  249. package/packages/pi-ai/src/models/generated/amazon-bedrock.ts +68 -0
  250. package/packages/pi-ai/src/models/generated/anthropic.ts +17 -0
  251. package/packages/pi-ai/src/models/generated/google-antigravity.ts +17 -0
  252. package/packages/pi-ai/src/models/generated/groq.ts +0 -153
  253. package/packages/pi-ai/src/models/generated/openai-codex.ts +17 -0
  254. package/packages/pi-ai/src/models/generated/openrouter.ts +17 -0
  255. package/packages/pi-ai/src/models.generated.test.ts +17 -0
  256. package/packages/pi-ai/src/providers/amazon-bedrock.test.ts +164 -0
  257. package/packages/pi-ai/src/providers/amazon-bedrock.ts +41 -7
  258. package/packages/pi-ai/src/providers/anthropic-auth.test.ts +47 -1
  259. package/packages/pi-ai/src/providers/anthropic-shared.test.ts +15 -1
  260. package/packages/pi-ai/src/providers/anthropic-shared.ts +36 -3
  261. package/packages/pi-ai/src/providers/anthropic.ts +19 -1
  262. package/packages/pi-ai/src/utils/oauth/openai-codex.ts +15 -0
  263. package/packages/pi-ai/tsconfig.tsbuildinfo +1 -1
  264. package/packages/pi-coding-agent/dist/core/agent-session-abort-order.test.d.ts +2 -0
  265. package/packages/pi-coding-agent/dist/core/agent-session-abort-order.test.d.ts.map +1 -0
  266. package/packages/pi-coding-agent/dist/core/agent-session-abort-order.test.js +38 -0
  267. package/packages/pi-coding-agent/dist/core/agent-session-abort-order.test.js.map +1 -0
  268. package/packages/pi-coding-agent/dist/core/auth-storage.d.ts +14 -0
  269. package/packages/pi-coding-agent/dist/core/auth-storage.d.ts.map +1 -1
  270. package/packages/pi-coding-agent/dist/core/auth-storage.js +34 -0
  271. package/packages/pi-coding-agent/dist/core/auth-storage.js.map +1 -1
  272. package/packages/pi-coding-agent/dist/core/auth-storage.test.js +74 -0
  273. package/packages/pi-coding-agent/dist/core/auth-storage.test.js.map +1 -1
  274. package/packages/pi-coding-agent/dist/core/chat-controller-ordering.test.js +4 -1
  275. package/packages/pi-coding-agent/dist/core/chat-controller-ordering.test.js.map +1 -1
  276. package/packages/pi-coding-agent/dist/core/model-registry-auth-mode.test.js +32 -0
  277. package/packages/pi-coding-agent/dist/core/model-registry-auth-mode.test.js.map +1 -1
  278. package/packages/pi-coding-agent/dist/core/sdk.d.ts.map +1 -1
  279. package/packages/pi-coding-agent/dist/core/sdk.js +32 -0
  280. package/packages/pi-coding-agent/dist/core/sdk.js.map +1 -1
  281. package/packages/pi-coding-agent/dist/core/skill-tool.test.js +2 -2
  282. package/packages/pi-coding-agent/dist/core/skill-tool.test.js.map +1 -1
  283. package/packages/pi-coding-agent/dist/modes/interactive/components/chat-frame.d.ts.map +1 -1
  284. package/packages/pi-coding-agent/dist/modes/interactive/components/chat-frame.js +17 -7
  285. package/packages/pi-coding-agent/dist/modes/interactive/components/chat-frame.js.map +1 -1
  286. package/packages/pi-coding-agent/dist/modes/interactive/components/footer.d.ts.map +1 -1
  287. package/packages/pi-coding-agent/dist/modes/interactive/components/footer.js +48 -34
  288. package/packages/pi-coding-agent/dist/modes/interactive/components/footer.js.map +1 -1
  289. package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.d.ts +4 -0
  290. package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.d.ts.map +1 -1
  291. package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.js +83 -33
  292. package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.js.map +1 -1
  293. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme-schema.d.ts +70 -0
  294. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme-schema.d.ts.map +1 -0
  295. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme-schema.js +77 -0
  296. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme-schema.js.map +1 -0
  297. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.d.ts +1 -66
  298. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  299. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.js +1 -75
  300. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.js.map +1 -1
  301. package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.d.ts +1 -1
  302. package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.d.ts.map +1 -1
  303. package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.js +192 -24
  304. package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.js.map +1 -1
  305. package/packages/pi-coding-agent/src/core/agent-session-abort-order.test.ts +56 -0
  306. package/packages/pi-coding-agent/src/core/auth-storage.test.ts +83 -0
  307. package/packages/pi-coding-agent/src/core/auth-storage.ts +35 -0
  308. package/packages/pi-coding-agent/src/core/chat-controller-ordering.test.ts +4 -1
  309. package/packages/pi-coding-agent/src/core/model-registry-auth-mode.test.ts +37 -1
  310. package/packages/pi-coding-agent/src/core/sdk.ts +41 -0
  311. package/packages/pi-coding-agent/src/core/skill-tool.test.ts +2 -2
  312. package/packages/pi-coding-agent/src/modes/interactive/components/chat-frame.ts +19 -7
  313. package/packages/pi-coding-agent/src/modes/interactive/components/footer.ts +53 -31
  314. package/packages/pi-coding-agent/src/modes/interactive/controllers/chat-controller.ts +88 -36
  315. package/packages/pi-coding-agent/src/modes/interactive/theme/theme-schema.ts +83 -0
  316. package/packages/pi-coding-agent/src/modes/interactive/theme/theme.ts +2 -83
  317. package/packages/pi-coding-agent/src/modes/interactive/theme/themes.ts +208 -27
  318. package/packages/pi-coding-agent/tsconfig.tsbuildinfo +1 -1
  319. package/packages/pi-tui/tsconfig.tsbuildinfo +1 -1
  320. package/packages/rpc-client/tsconfig.tsbuildinfo +1 -1
  321. package/pkg/dist/modes/interactive/theme/theme-schema.d.ts +70 -0
  322. package/pkg/dist/modes/interactive/theme/theme-schema.d.ts.map +1 -0
  323. package/pkg/dist/modes/interactive/theme/theme-schema.js +77 -0
  324. package/pkg/dist/modes/interactive/theme/theme-schema.js.map +1 -0
  325. package/pkg/dist/modes/interactive/theme/theme.d.ts +1 -66
  326. package/pkg/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  327. package/pkg/dist/modes/interactive/theme/theme.js +1 -75
  328. package/pkg/dist/modes/interactive/theme/theme.js.map +1 -1
  329. package/pkg/dist/modes/interactive/theme/themes.d.ts +1 -1
  330. package/pkg/dist/modes/interactive/theme/themes.d.ts.map +1 -1
  331. package/pkg/dist/modes/interactive/theme/themes.js +192 -24
  332. package/pkg/dist/modes/interactive/theme/themes.js.map +1 -1
  333. package/src/resources/extensions/ask-user-questions.ts +24 -6
  334. package/src/resources/extensions/claude-code-cli/models.ts +9 -0
  335. package/src/resources/extensions/claude-code-cli/readiness.ts +13 -2
  336. package/src/resources/extensions/claude-code-cli/stream-adapter.ts +94 -4
  337. package/src/resources/extensions/claude-code-cli/tests/stream-adapter.test.ts +84 -0
  338. package/src/resources/extensions/gsd/auto/detect-stuck.ts +10 -0
  339. package/src/resources/extensions/gsd/auto/loop-deps.ts +1 -0
  340. package/src/resources/extensions/gsd/auto/loop.ts +109 -3
  341. package/src/resources/extensions/gsd/auto/phases.ts +94 -60
  342. package/src/resources/extensions/gsd/auto/resolve.ts +1 -1
  343. package/src/resources/extensions/gsd/auto/run-unit.ts +11 -1
  344. package/src/resources/extensions/gsd/auto/session.ts +7 -0
  345. package/src/resources/extensions/gsd/auto-artifact-paths.ts +20 -0
  346. package/src/resources/extensions/gsd/auto-dashboard.ts +21 -4
  347. package/src/resources/extensions/gsd/auto-dispatch.ts +123 -5
  348. package/src/resources/extensions/gsd/auto-loop.ts +1 -1
  349. package/src/resources/extensions/gsd/auto-model-selection.ts +13 -2
  350. package/src/resources/extensions/gsd/auto-post-unit.ts +9 -7
  351. package/src/resources/extensions/gsd/auto-prompts.ts +178 -38
  352. package/src/resources/extensions/gsd/auto-recovery.ts +63 -1
  353. package/src/resources/extensions/gsd/auto-start.ts +8 -6
  354. package/src/resources/extensions/gsd/auto-verification.ts +3 -3
  355. package/src/resources/extensions/gsd/auto-worktree.ts +65 -0
  356. package/src/resources/extensions/gsd/auto.ts +53 -28
  357. package/src/resources/extensions/gsd/bootstrap/agent-end-recovery.ts +8 -21
  358. package/src/resources/extensions/gsd/bootstrap/db-tools.ts +22 -4
  359. package/src/resources/extensions/gsd/bootstrap/query-tools.ts +31 -0
  360. package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +22 -0
  361. package/src/resources/extensions/gsd/commands/catalog.ts +60 -3
  362. package/src/resources/extensions/gsd/commands/handlers/core.ts +6 -0
  363. package/src/resources/extensions/gsd/commands/handlers/escalate.ts +216 -0
  364. package/src/resources/extensions/gsd/commands/handlers/ops.ts +16 -0
  365. package/src/resources/extensions/gsd/commands/handlers/workflow.ts +279 -29
  366. package/src/resources/extensions/gsd/commands-cmux.ts +6 -2
  367. package/src/resources/extensions/gsd/commands-debug.ts +484 -0
  368. package/src/resources/extensions/gsd/commands-do.ts +1 -0
  369. package/src/resources/extensions/gsd/commands-handlers.ts +19 -2
  370. package/src/resources/extensions/gsd/commands-prefs-wizard.ts +1 -1
  371. package/src/resources/extensions/gsd/commands-scan.ts +125 -0
  372. package/src/resources/extensions/gsd/commands-workflow-templates.ts +129 -2
  373. package/src/resources/extensions/gsd/custom-workflow-engine.ts +85 -60
  374. package/src/resources/extensions/gsd/db-writer.ts +3 -0
  375. package/src/resources/extensions/gsd/debug-session-store.ts +377 -0
  376. package/src/resources/extensions/gsd/definition-loader.ts +7 -0
  377. package/src/resources/extensions/gsd/docs/preferences-reference.md +9 -9
  378. package/src/resources/extensions/gsd/doctor-git-checks.ts +5 -1
  379. package/src/resources/extensions/gsd/doctor-proactive.ts +4 -1
  380. package/src/resources/extensions/gsd/doctor-providers.ts +52 -22
  381. package/src/resources/extensions/gsd/doctor-runtime-checks.ts +23 -4
  382. package/src/resources/extensions/gsd/doctor-types.ts +1 -0
  383. package/src/resources/extensions/gsd/doctor.ts +7 -1
  384. package/src/resources/extensions/gsd/error-classifier.ts +6 -3
  385. package/src/resources/extensions/gsd/escalation.ts +367 -0
  386. package/src/resources/extensions/gsd/forensics.ts +25 -29
  387. package/src/resources/extensions/gsd/git-service.ts +0 -1
  388. package/src/resources/extensions/gsd/graph.ts +33 -3
  389. package/src/resources/extensions/gsd/gsd-db.ts +306 -29
  390. package/src/resources/extensions/gsd/health-widget-core.ts +43 -14
  391. package/src/resources/extensions/gsd/health-widget.ts +7 -3
  392. package/src/resources/extensions/gsd/metrics.ts +1 -0
  393. package/src/resources/extensions/gsd/model-cost-table.ts +3 -1
  394. package/src/resources/extensions/gsd/model-router.ts +15 -1
  395. package/src/resources/extensions/gsd/native-git-bridge.ts +134 -6
  396. package/src/resources/extensions/gsd/notification-widget.ts +25 -43
  397. package/src/resources/extensions/gsd/notifications.ts +6 -0
  398. package/src/resources/extensions/gsd/post-execution-checks.ts +37 -14
  399. package/src/resources/extensions/gsd/pre-execution-checks.ts +98 -8
  400. package/src/resources/extensions/gsd/preferences-models.ts +1 -0
  401. package/src/resources/extensions/gsd/preferences-types.ts +10 -2
  402. package/src/resources/extensions/gsd/preferences-validation.ts +33 -7
  403. package/src/resources/extensions/gsd/preferences.ts +10 -10
  404. package/src/resources/extensions/gsd/prompts/debug-diagnose.md +25 -0
  405. package/src/resources/extensions/gsd/prompts/debug-session-manager.md +80 -0
  406. package/src/resources/extensions/gsd/prompts/execute-task.md +12 -0
  407. package/src/resources/extensions/gsd/prompts/plan-milestone.md +12 -0
  408. package/src/resources/extensions/gsd/prompts/refine-slice.md +69 -0
  409. package/src/resources/extensions/gsd/prompts/scan.md +79 -0
  410. package/src/resources/extensions/gsd/prompts/workflow-oneshot.md +26 -0
  411. package/src/resources/extensions/gsd/run-manager.ts +53 -19
  412. package/src/resources/extensions/gsd/state.ts +50 -2
  413. package/src/resources/extensions/gsd/templates/PREFERENCES.md +7 -7
  414. package/src/resources/extensions/gsd/tests/agent-end-retry.test.ts +1 -34
  415. package/src/resources/extensions/gsd/tests/artifact-corruption-2630.test.ts +7 -0
  416. package/src/resources/extensions/gsd/tests/auto-loop.test.ts +45 -31
  417. package/src/resources/extensions/gsd/tests/auto-recovery.test.ts +123 -1
  418. package/src/resources/extensions/gsd/tests/auto-wrapup-inflight-guard.test.ts +39 -0
  419. package/src/resources/extensions/gsd/tests/autocomplete-regressions-1675.test.ts +39 -0
  420. package/src/resources/extensions/gsd/tests/commands-do.test.ts +48 -0
  421. package/src/resources/extensions/gsd/tests/commands-scan.test.ts +351 -0
  422. package/src/resources/extensions/gsd/tests/commands-workflow-custom.test.ts +8 -6
  423. package/src/resources/extensions/gsd/tests/complete-slice.test.ts +2 -2
  424. package/src/resources/extensions/gsd/tests/complete-task.test.ts +2 -2
  425. package/src/resources/extensions/gsd/tests/custom-workflow-engine.test.ts +63 -0
  426. package/src/resources/extensions/gsd/tests/debug-command-handler.test.ts +905 -0
  427. package/src/resources/extensions/gsd/tests/debug-command-lifecycle.integration.test.ts +1229 -0
  428. package/src/resources/extensions/gsd/tests/debug-session-store.test.ts +565 -0
  429. package/src/resources/extensions/gsd/tests/discuss-milestone-structured-questions.test.ts +64 -0
  430. package/src/resources/extensions/gsd/tests/dispatch-complete-milestone-guard.test.ts +67 -0
  431. package/src/resources/extensions/gsd/tests/doctor-providers.test.ts +62 -18
  432. package/src/resources/extensions/gsd/tests/enhanced-verification-integration.test.ts +5 -0
  433. package/src/resources/extensions/gsd/tests/escalation.test.ts +818 -0
  434. package/src/resources/extensions/gsd/tests/finalize-timeout-guard.test.ts +29 -12
  435. package/src/resources/extensions/gsd/tests/flat-rate-routing-guard.test.ts +106 -0
  436. package/src/resources/extensions/gsd/tests/forensics-hook-key-parse.test.ts +74 -0
  437. package/src/resources/extensions/gsd/tests/graph-operations.test.ts +0 -4
  438. package/src/resources/extensions/gsd/tests/gsd-db.test.ts +44 -1
  439. package/src/resources/extensions/gsd/tests/health-widget.test.ts +8 -2
  440. package/src/resources/extensions/gsd/tests/integration/doctor-git.test.ts +39 -0
  441. package/src/resources/extensions/gsd/tests/integration/doctor-proactive.test.ts +44 -0
  442. package/src/resources/extensions/gsd/tests/integration/doctor-runtime.test.ts +68 -1
  443. package/src/resources/extensions/gsd/tests/integration/git-service.test.ts +109 -11
  444. package/src/resources/extensions/gsd/tests/integration/idle-recovery.test.ts +51 -0
  445. package/src/resources/extensions/gsd/tests/integration/test-isolation.ts +53 -0
  446. package/src/resources/extensions/gsd/tests/journal-integration.test.ts +171 -1
  447. package/src/resources/extensions/gsd/tests/md-importer.test.ts +1 -1
  448. package/src/resources/extensions/gsd/tests/memory-store.test.ts +2 -2
  449. package/src/resources/extensions/gsd/tests/milestone-status-tool.test.ts +3 -2
  450. package/src/resources/extensions/gsd/tests/model-cost-table.test.ts +2 -2
  451. package/src/resources/extensions/gsd/tests/model-router.test.ts +1 -1
  452. package/src/resources/extensions/gsd/tests/model-unittype-mapping.test.ts +59 -0
  453. package/src/resources/extensions/gsd/tests/notification-widget.test.ts +1 -1
  454. package/src/resources/extensions/gsd/tests/plan-slice.test.ts +17 -0
  455. package/src/resources/extensions/gsd/tests/post-execution-checks.test.ts +105 -1
  456. package/src/resources/extensions/gsd/tests/pre-execution-checks.test.ts +275 -6
  457. package/src/resources/extensions/gsd/tests/preferences.test.ts +69 -1
  458. package/src/resources/extensions/gsd/tests/progressive-planning.test.ts +539 -0
  459. package/src/resources/extensions/gsd/tests/projection-regression.test.ts +7 -0
  460. package/src/resources/extensions/gsd/tests/prompt-budget-enforcement.test.ts +27 -0
  461. package/src/resources/extensions/gsd/tests/prompt-contracts.test.ts +24 -0
  462. package/src/resources/extensions/gsd/tests/prompt-db.test.ts +1 -1
  463. package/src/resources/extensions/gsd/tests/provider-errors.test.ts +33 -0
  464. package/src/resources/extensions/gsd/tests/register-hooks-depth-verification.test.ts +67 -0
  465. package/src/resources/extensions/gsd/tests/remote-notification-from-desktop.test.ts +107 -0
  466. package/src/resources/extensions/gsd/tests/requirements.test.ts +9 -0
  467. package/src/resources/extensions/gsd/tests/session-start-footer.test.ts +153 -0
  468. package/src/resources/extensions/gsd/tests/slice-context-injection.test.ts +16 -4
  469. package/src/resources/extensions/gsd/tests/state-corruption-2945.test.ts +3 -0
  470. package/src/resources/extensions/gsd/tests/stuck-detection-coverage.test.ts +15 -0
  471. package/src/resources/extensions/gsd/tests/summary-render-parity.test.ts +5 -0
  472. package/src/resources/extensions/gsd/tests/uok-contracts.test.ts +2 -1
  473. package/src/resources/extensions/gsd/tests/uok-flags.test.ts +31 -1
  474. package/src/resources/extensions/gsd/tests/uok-kernel-path.test.ts +166 -0
  475. package/src/resources/extensions/gsd/tests/workflow-install.test.ts +113 -0
  476. package/src/resources/extensions/gsd/tests/workflow-logger-wiring.test.ts +15 -6
  477. package/src/resources/extensions/gsd/tests/workflow-mcp.test.ts +2 -2
  478. package/src/resources/extensions/gsd/tests/workflow-plugins.test.ts +310 -0
  479. package/src/resources/extensions/gsd/tests/workflow-projections.test.ts +7 -0
  480. package/src/resources/extensions/gsd/tests/workflow-templates.test.ts +8 -2
  481. package/src/resources/extensions/gsd/tests/worktree-journal-events.test.ts +2 -1
  482. package/src/resources/extensions/gsd/tests/worktree-resolver.test.ts +77 -2
  483. package/src/resources/extensions/gsd/tools/complete-task.ts +87 -0
  484. package/src/resources/extensions/gsd/tools/plan-milestone.ts +42 -8
  485. package/src/resources/extensions/gsd/tools/plan-slice.ts +6 -1
  486. package/src/resources/extensions/gsd/types.ts +62 -0
  487. package/src/resources/extensions/gsd/unit-runtime.ts +1 -0
  488. package/src/resources/extensions/gsd/uok/contracts.ts +2 -1
  489. package/src/resources/extensions/gsd/uok/flags.ts +7 -7
  490. package/src/resources/extensions/gsd/uok/kernel.ts +16 -4
  491. package/src/resources/extensions/gsd/workflow-dispatch.ts +106 -0
  492. package/src/resources/extensions/gsd/workflow-install.ts +423 -0
  493. package/src/resources/extensions/gsd/workflow-manifest.ts +8 -0
  494. package/src/resources/extensions/gsd/workflow-mcp.ts +1 -6
  495. package/src/resources/extensions/gsd/workflow-plugins.ts +403 -0
  496. package/src/resources/extensions/gsd/workflow-templates/accessibility-audit.md +88 -0
  497. package/src/resources/extensions/gsd/workflow-templates/api-breaking-change.md +117 -0
  498. package/src/resources/extensions/gsd/workflow-templates/bugfix.md +1 -0
  499. package/src/resources/extensions/gsd/workflow-templates/changelog-gen.md +82 -0
  500. package/src/resources/extensions/gsd/workflow-templates/ci-bootstrap.md +144 -0
  501. package/src/resources/extensions/gsd/workflow-templates/dead-code.md +81 -0
  502. package/src/resources/extensions/gsd/workflow-templates/dep-upgrade.md +1 -0
  503. package/src/resources/extensions/gsd/workflow-templates/docs-sync.yaml +76 -0
  504. package/src/resources/extensions/gsd/workflow-templates/env-audit.yaml +88 -0
  505. package/src/resources/extensions/gsd/workflow-templates/full-project.md +1 -0
  506. package/src/resources/extensions/gsd/workflow-templates/hotfix.md +1 -0
  507. package/src/resources/extensions/gsd/workflow-templates/issue-triage.md +84 -0
  508. package/src/resources/extensions/gsd/workflow-templates/observability-setup.md +133 -0
  509. package/src/resources/extensions/gsd/workflow-templates/onboarding-check.md +74 -0
  510. package/src/resources/extensions/gsd/workflow-templates/performance-audit.md +125 -0
  511. package/src/resources/extensions/gsd/workflow-templates/pr-review.md +67 -0
  512. package/src/resources/extensions/gsd/workflow-templates/pr-triage.md +83 -0
  513. package/src/resources/extensions/gsd/workflow-templates/refactor.md +1 -0
  514. package/src/resources/extensions/gsd/workflow-templates/registry.json +184 -0
  515. package/src/resources/extensions/gsd/workflow-templates/release.md +118 -0
  516. package/src/resources/extensions/gsd/workflow-templates/rename-symbol.yaml +99 -0
  517. package/src/resources/extensions/gsd/workflow-templates/security-audit.md +1 -0
  518. package/src/resources/extensions/gsd/workflow-templates/small-feature.md +1 -0
  519. package/src/resources/extensions/gsd/workflow-templates/spike.md +1 -0
  520. package/src/resources/extensions/gsd/workflow-templates/test-backfill.yaml +73 -0
  521. package/src/resources/extensions/gsd/workflow-templates.ts +7 -0
  522. package/src/resources/extensions/gsd/workspace-index.ts +9 -4
  523. package/src/resources/extensions/gsd/worktree-resolver.ts +47 -1
  524. package/src/resources/extensions/remote-questions/commands.ts +480 -0
  525. package/src/resources/extensions/remote-questions/manager.ts +49 -4
  526. package/src/resources/extensions/remote-questions/telegram-adapter.ts +86 -4
  527. package/src/resources/extensions/remote-questions/tests/command-polling.test.ts +246 -0
  528. package/src/resources/extensions/remote-questions/tests/remote-answer-normalization.test.ts +92 -0
  529. package/src/resources/extensions/remote-questions/tests/telegram-commands.test.ts +267 -0
  530. package/src/resources/extensions/shared/interview-ui.ts +195 -1
  531. package/src/resources/extensions/shared/layout-utils.ts +26 -0
  532. package/src/resources/extensions/shared/rtk-shared.ts +58 -0
  533. package/src/resources/extensions/shared/rtk.ts +12 -52
  534. package/src/resources/extensions/shared/tests/interview-preview.test.ts +177 -0
  535. package/src/resources/extensions/shared/tests/preview-layout.test.ts +120 -0
  536. package/src/resources/skills/create-workflow/SKILL.md +33 -6
  537. package/dist/web/standalone/.next/static/chunks/2826.dd3dc8bbd3025fa5.js +0 -9
  538. package/dist/web/standalone/.next/static/css/f6e8833d46e738d8.css +0 -1
  539. package/packages/native/dist/ps/types.d.ts +0 -5
  540. package/packages/native/dist/ps/types.js +0 -2
  541. package/packages/native/src/ps/types.ts +0 -5
  542. package/packages/pi-ai/node_modules/@smithy/node-http-handler/LICENSE +0 -201
  543. package/packages/pi-ai/node_modules/@smithy/node-http-handler/README.md +0 -9
  544. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-cjs/index.js +0 -762
  545. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/build-abort-error.js +0 -19
  546. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/constants.js +0 -1
  547. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/get-transformed-headers.js +0 -9
  548. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/index.js +0 -3
  549. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/node-http-handler.js +0 -230
  550. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/node-http2-connection-manager.js +0 -87
  551. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/node-http2-connection-pool.js +0 -32
  552. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/node-http2-handler.js +0 -169
  553. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/readable.mock.js +0 -21
  554. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/server.mock.js +0 -88
  555. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/set-connection-timeout.js +0 -36
  556. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/set-request-timeout.js +0 -21
  557. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/set-socket-keep-alive.js +0 -22
  558. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/set-socket-timeout.js +0 -23
  559. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/stream-collector/collector.js +0 -8
  560. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/stream-collector/index.js +0 -41
  561. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/stream-collector/readable.mock.js +0 -21
  562. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/timing.js +0 -4
  563. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/write-request-body.js +0 -63
  564. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/build-abort-error.d.ts +0 -10
  565. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/constants.d.ts +0 -5
  566. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/get-transformed-headers.d.ts +0 -4
  567. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/index.d.ts +0 -3
  568. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/node-http-handler.d.ts +0 -46
  569. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/node-http2-connection-manager.d.ts +0 -24
  570. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/node-http2-connection-pool.d.ts +0 -12
  571. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/node-http2-handler.d.ts +0 -63
  572. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/readable.mock.d.ts +0 -13
  573. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/server.mock.d.ts +0 -12
  574. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/set-connection-timeout.d.ts +0 -2
  575. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/set-request-timeout.d.ts +0 -6
  576. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/set-socket-keep-alive.d.ts +0 -6
  577. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/set-socket-timeout.d.ts +0 -2
  578. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/stream-collector/collector.d.ts +0 -5
  579. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/stream-collector/index.d.ts +0 -6
  580. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/stream-collector/readable.mock.d.ts +0 -13
  581. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/timing.d.ts +0 -8
  582. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/build-abort-error.d.ts +0 -10
  583. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/constants.d.ts +0 -5
  584. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/get-transformed-headers.d.ts +0 -4
  585. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/index.d.ts +0 -3
  586. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/node-http-handler.d.ts +0 -46
  587. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/node-http2-connection-manager.d.ts +0 -24
  588. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/node-http2-connection-pool.d.ts +0 -12
  589. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/node-http2-handler.d.ts +0 -63
  590. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/readable.mock.d.ts +0 -13
  591. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/server.mock.d.ts +0 -12
  592. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/set-connection-timeout.d.ts +0 -2
  593. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/set-request-timeout.d.ts +0 -6
  594. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/set-socket-keep-alive.d.ts +0 -6
  595. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/set-socket-timeout.d.ts +0 -2
  596. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/stream-collector/collector.d.ts +0 -5
  597. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/stream-collector/index.d.ts +0 -6
  598. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/stream-collector/readable.mock.d.ts +0 -13
  599. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/timing.d.ts +0 -8
  600. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/write-request-body.d.ts +0 -12
  601. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/write-request-body.d.ts +0 -12
  602. package/packages/pi-ai/node_modules/@smithy/node-http-handler/package.json +0 -68
  603. package/packages/pi-ai/oauth.d.ts +0 -1
  604. package/packages/pi-ai/oauth.js +0 -1
  605. /package/dist/web/standalone/.next/static/{j7IBD35UgrL2b298GLK3V → jaWw1Jh0TYayjbfOrFe8D}/_buildManifest.js +0 -0
  606. /package/dist/web/standalone/.next/static/{j7IBD35UgrL2b298GLK3V → jaWw1Jh0TYayjbfOrFe8D}/_ssgManifest.js +0 -0
@@ -0,0 +1,539 @@
1
+ // GSD Extension — ADR-011 Progressive Planning tests
2
+ // Sketch detection → refining phase, dispatch routing, auto-heal, migration idempotency.
3
+
4
+ import test from "node:test";
5
+ import assert from "node:assert/strict";
6
+ import { mkdtempSync, mkdirSync, rmSync, writeFileSync } from "node:fs";
7
+ import { join } from "node:path";
8
+ import { tmpdir } from "node:os";
9
+
10
+ import {
11
+ openDatabase,
12
+ closeDatabase,
13
+ insertMilestone,
14
+ insertSlice,
15
+ setSliceSketchFlag,
16
+ autoHealSketchFlags,
17
+ getSlice,
18
+ } from "../gsd-db.ts";
19
+ import { deriveStateFromDb } from "../state.ts";
20
+ import { resolveDispatch } from "../auto-dispatch.ts";
21
+ import type { DispatchContext } from "../auto-dispatch.ts";
22
+
23
+ function makeFixtureBase(): string {
24
+ const base = mkdtempSync(join(tmpdir(), "gsd-adr011-"));
25
+ mkdirSync(join(base, ".gsd"), { recursive: true });
26
+ mkdirSync(join(base, ".gsd", "milestones", "M001", "slices", "S02"), { recursive: true });
27
+ mkdirSync(join(base, ".gsd", "milestones", "M001", "slices", "S01"), { recursive: true });
28
+ return base;
29
+ }
30
+
31
+ function writePreferences(base: string, phasesBlock: string): void {
32
+ const prefsPath = join(base, ".gsd", "PREFERENCES.md");
33
+ const body = [
34
+ "---",
35
+ "version: 1",
36
+ phasesBlock,
37
+ "---",
38
+ ].join("\n");
39
+ writeFileSync(prefsPath, body);
40
+ }
41
+
42
+ function seedMilestoneWithSketchedS02(base: string): void {
43
+ openDatabase(join(base, ".gsd", "gsd.db"));
44
+ insertMilestone({ id: "M001", title: "Test", status: "active" });
45
+ // S01: full slice, complete
46
+ insertSlice({
47
+ id: "S01",
48
+ milestoneId: "M001",
49
+ title: "Foundation",
50
+ status: "complete",
51
+ risk: "high",
52
+ depends: [],
53
+ demo: "S01 done.",
54
+ sequence: 1,
55
+ isSketch: false,
56
+ });
57
+ // S02: sketch slice, pending
58
+ insertSlice({
59
+ id: "S02",
60
+ milestoneId: "M001",
61
+ title: "Feature",
62
+ status: "pending",
63
+ risk: "medium",
64
+ depends: ["S01"],
65
+ demo: "S02 demo.",
66
+ sequence: 2,
67
+ isSketch: true,
68
+ sketchScope: "Scope limited to feature X in module Y; no cross-cutting refactors.",
69
+ });
70
+ }
71
+
72
+ function writeS01Artifacts(base: string): void {
73
+ writeFileSync(join(base, ".gsd", "milestones", "M001", "slices", "S01", "S01-PLAN.md"), "# S01 Plan\n");
74
+ writeFileSync(join(base, ".gsd", "milestones", "M001", "slices", "S01", "S01-SUMMARY.md"), "# S01 Summary\n");
75
+ }
76
+
77
+ function cleanup(base: string, originalCwd: string): void {
78
+ try { closeDatabase(); } catch { /* noop */ }
79
+ process.chdir(originalCwd);
80
+ try { rmSync(base, { recursive: true, force: true }); } catch { /* noop */ }
81
+ }
82
+
83
+ // ═══════════════════════════════════════════════════════════════════════════
84
+ // Tests
85
+ // ═══════════════════════════════════════════════════════════════════════════
86
+
87
+ test("ADR-011: sketch slice + progressive_planning ON → phase='refining'", async (t) => {
88
+ const originalCwd = process.cwd();
89
+ const base = makeFixtureBase();
90
+ t.after(() => cleanup(base, originalCwd));
91
+
92
+ seedMilestoneWithSketchedS02(base);
93
+ writeS01Artifacts(base);
94
+ writePreferences(base, "phases:\n progressive_planning: true");
95
+ process.chdir(base);
96
+
97
+ const state = await deriveStateFromDb(base);
98
+ assert.equal(state.activeSlice?.id, "S02", "S02 should be the active slice (S01 complete)");
99
+ assert.equal(state.phase, "refining", "sketch slice with flag ON must yield refining phase");
100
+ });
101
+
102
+ test("ADR-011: sketch slice + progressive_planning OFF → phase='planning' (backwards compat)", async (t) => {
103
+ const originalCwd = process.cwd();
104
+ const base = makeFixtureBase();
105
+ t.after(() => cleanup(base, originalCwd));
106
+
107
+ seedMilestoneWithSketchedS02(base);
108
+ writeS01Artifacts(base);
109
+ // Write a PREFERENCES.md without the flag so loadEffectiveGSDPreferences finds
110
+ // a valid file but progressive_planning resolves to undefined.
111
+ writePreferences(base, "phases:\n skip_research: false");
112
+ process.chdir(base);
113
+
114
+ const state = await deriveStateFromDb(base);
115
+ assert.equal(state.activeSlice?.id, "S02");
116
+ assert.equal(state.phase, "planning", "flag absent → must fall through to planning");
117
+ });
118
+
119
+ test("ADR-011: dispatch rule maps refining → refine-slice unit", async (t) => {
120
+ const originalCwd = process.cwd();
121
+ const base = makeFixtureBase();
122
+ t.after(() => cleanup(base, originalCwd));
123
+
124
+ seedMilestoneWithSketchedS02(base);
125
+ writeS01Artifacts(base);
126
+ writePreferences(base, "phases:\n progressive_planning: true");
127
+ process.chdir(base);
128
+
129
+ const state = await deriveStateFromDb(base);
130
+ const ctx: DispatchContext = {
131
+ basePath: base,
132
+ mid: "M001",
133
+ midTitle: "Test",
134
+ state,
135
+ // Disable reassess-roadmap so it doesn't fire first on the just-completed S01.
136
+ prefs: { phases: { progressive_planning: true, reassess_after_slice: false } } as any,
137
+ };
138
+ const result = await resolveDispatch(ctx);
139
+ assert.equal(result.action, "dispatch");
140
+ if (result.action === "dispatch") {
141
+ assert.equal(result.unitType, "refine-slice");
142
+ assert.equal(result.unitId, "M001/S02");
143
+ }
144
+ });
145
+
146
+ test("ADR-011: refining + flag flipped OFF mid-milestone → falls through to plan-slice (no dead-end)", async (t) => {
147
+ const originalCwd = process.cwd();
148
+ const base = makeFixtureBase();
149
+ t.after(() => cleanup(base, originalCwd));
150
+
151
+ seedMilestoneWithSketchedS02(base);
152
+ writeS01Artifacts(base);
153
+ // prefs ON so state derivation yields 'refining'...
154
+ writePreferences(base, "phases:\n progressive_planning: true");
155
+ process.chdir(base);
156
+ const state = await deriveStateFromDb(base);
157
+ assert.equal(state.phase, "refining");
158
+
159
+ // ...then dispatch is invoked with the flag OFF (simulates user toggling
160
+ // progressive_planning off while a slice sits in 'refining'). The rule
161
+ // must gracefully downgrade to plan-slice, not return null (dead-end).
162
+ const ctx: DispatchContext = {
163
+ basePath: base,
164
+ mid: "M001",
165
+ midTitle: "Test",
166
+ state,
167
+ prefs: { phases: { progressive_planning: false, reassess_after_slice: false } } as any,
168
+ };
169
+ const result = await resolveDispatch(ctx);
170
+ assert.equal(result.action, "dispatch");
171
+ if (result.action === "dispatch") {
172
+ assert.equal(result.unitType, "plan-slice", "flag-off must downgrade to plan-slice");
173
+ }
174
+ });
175
+
176
+ test("ADR-011: autoHealSketchFlags flips is_sketch=0 when PLAN file exists", async (t) => {
177
+ const originalCwd = process.cwd();
178
+ const base = makeFixtureBase();
179
+ t.after(() => cleanup(base, originalCwd));
180
+
181
+ seedMilestoneWithSketchedS02(base);
182
+ writeS01Artifacts(base);
183
+ // Simulate crash between plan-slice write and sketch flip: PLAN.md exists
184
+ // but is_sketch is still 1.
185
+ writeFileSync(
186
+ join(base, ".gsd", "milestones", "M001", "slices", "S02", "S02-PLAN.md"),
187
+ "# S02 Plan\n",
188
+ );
189
+ assert.equal(getSlice("M001", "S02")?.is_sketch, 1, "pre: flagged as sketch");
190
+
191
+ const { existsSync } = await import("node:fs");
192
+ autoHealSketchFlags("M001", (sid) => {
193
+ const planPath = join(base, ".gsd", "milestones", "M001", "slices", sid, `${sid}-PLAN.md`);
194
+ return existsSync(planPath);
195
+ });
196
+
197
+ assert.equal(getSlice("M001", "S02")?.is_sketch, 0, "post-heal: flag cleared");
198
+ });
199
+
200
+ test("ADR-011: schema v16 is idempotent — re-opening DB preserves is_sketch and sketch_scope columns", async (t) => {
201
+ const originalCwd = process.cwd();
202
+ const base = mkdtempSync(join(tmpdir(), "gsd-adr011-schema-"));
203
+ t.after(() => {
204
+ try { closeDatabase(); } catch { /* noop */ }
205
+ // Restore cwd even though this test doesn't chdir — guards against
206
+ // leaked cwd from any earlier test in the file.
207
+ if (process.cwd() !== originalCwd) process.chdir(originalCwd);
208
+ rmSync(base, { recursive: true, force: true });
209
+ });
210
+
211
+ const dbPath = join(base, "gsd.db");
212
+ openDatabase(dbPath);
213
+ // Insert a sketch slice — round-trip proves the columns exist with correct
214
+ // defaults. If migration hadn't run, insertSlice would throw on the new
215
+ // named params.
216
+ insertMilestone({ id: "M001", title: "Test", status: "active" });
217
+ insertSlice({
218
+ id: "S01",
219
+ milestoneId: "M001",
220
+ title: "X",
221
+ isSketch: true,
222
+ sketchScope: "narrow scope",
223
+ });
224
+ assert.equal(getSlice("M001", "S01")?.is_sketch, 1);
225
+ assert.equal(getSlice("M001", "S01")?.sketch_scope, "narrow scope");
226
+
227
+ // Close and re-open — migration must be a no-op the second time and
228
+ // data must persist.
229
+ closeDatabase();
230
+ openDatabase(dbPath);
231
+ assert.equal(getSlice("M001", "S01")?.is_sketch, 1, "data survives re-open");
232
+ assert.equal(getSlice("M001", "S01")?.sketch_scope, "narrow scope");
233
+
234
+ // Inserting a full (non-sketch) slice uses the default column values.
235
+ insertSlice({ id: "S02", milestoneId: "M001", title: "Y" });
236
+ assert.equal(getSlice("M001", "S02")?.is_sketch, 0, "default is_sketch=0");
237
+ assert.equal(getSlice("M001", "S02")?.sketch_scope, "", "default sketch_scope=''");
238
+
239
+ // setSliceSketchFlag round-trip.
240
+ setSliceSketchFlag("M001", "S01", false);
241
+ assert.equal(getSlice("M001", "S01")?.is_sketch, 0);
242
+ });
243
+
244
+ // ═══════════════════════════════════════════════════════════════════════════
245
+ // ADR-011: insertSlice ON CONFLICT sketch-flag preservation matrix
246
+ // ═══════════════════════════════════════════════════════════════════════════
247
+ // Regression coverage for the 3-valued isSketch semantics (true/false/undefined).
248
+ // Re-planning a milestone must NOT silently flip a sketch slice to non-sketch
249
+ // (or vice versa) unless the caller explicitly intends the change.
250
+
251
+ test("ADR-011 ON CONFLICT: omitted isSketch preserves existing is_sketch=1", async (t) => {
252
+ const base = mkdtempSync(join(tmpdir(), "gsd-adr011-conflict-"));
253
+ t.after(() => {
254
+ try { closeDatabase(); } catch { /* noop */ }
255
+ rmSync(base, { recursive: true, force: true });
256
+ });
257
+ openDatabase(join(base, "gsd.db"));
258
+ insertMilestone({ id: "M001", title: "Test", status: "active" });
259
+
260
+ // Seed: S01 is a sketch.
261
+ insertSlice({
262
+ id: "S01", milestoneId: "M001", title: "X",
263
+ isSketch: true, sketchScope: "narrow scope",
264
+ });
265
+ assert.equal(getSlice("M001", "S01")?.is_sketch, 1);
266
+
267
+ // Re-plan with isSketch omitted (undefined) — MUST preserve sketch state.
268
+ insertSlice({
269
+ id: "S01", milestoneId: "M001", title: "X (updated title)",
270
+ // isSketch intentionally omitted
271
+ });
272
+ assert.equal(
273
+ getSlice("M001", "S01")?.is_sketch, 1,
274
+ "omitted isSketch must preserve the existing sketch flag on ON CONFLICT",
275
+ );
276
+ assert.equal(
277
+ getSlice("M001", "S01")?.sketch_scope, "narrow scope",
278
+ "omitted sketchScope must preserve existing scope on ON CONFLICT",
279
+ );
280
+ });
281
+
282
+ test("ADR-011 ON CONFLICT: explicit isSketch=false clears existing sketch flag", async (t) => {
283
+ const base = mkdtempSync(join(tmpdir(), "gsd-adr011-conflict-false-"));
284
+ t.after(() => {
285
+ try { closeDatabase(); } catch { /* noop */ }
286
+ rmSync(base, { recursive: true, force: true });
287
+ });
288
+ openDatabase(join(base, "gsd.db"));
289
+ insertMilestone({ id: "M001", title: "Test", status: "active" });
290
+
291
+ insertSlice({
292
+ id: "S01", milestoneId: "M001", title: "X",
293
+ isSketch: true, sketchScope: "narrow scope",
294
+ });
295
+ assert.equal(getSlice("M001", "S01")?.is_sketch, 1);
296
+
297
+ // Explicit isSketch=false intentionally clears the flag (e.g., user re-plans
298
+ // sketch as full slice).
299
+ insertSlice({
300
+ id: "S01", milestoneId: "M001", title: "X",
301
+ isSketch: false,
302
+ });
303
+ assert.equal(
304
+ getSlice("M001", "S01")?.is_sketch, 0,
305
+ "explicit isSketch=false must clear the sketch flag",
306
+ );
307
+ });
308
+
309
+ test("ADR-011 ON CONFLICT: isSketch=true upgrades existing non-sketch to sketch", async (t) => {
310
+ const base = mkdtempSync(join(tmpdir(), "gsd-adr011-conflict-true-"));
311
+ t.after(() => {
312
+ try { closeDatabase(); } catch { /* noop */ }
313
+ rmSync(base, { recursive: true, force: true });
314
+ });
315
+ openDatabase(join(base, "gsd.db"));
316
+ insertMilestone({ id: "M001", title: "Test", status: "active" });
317
+
318
+ // Seed as full slice.
319
+ insertSlice({ id: "S01", milestoneId: "M001", title: "X" });
320
+ assert.equal(getSlice("M001", "S01")?.is_sketch, 0);
321
+
322
+ // Re-plan upgrading to sketch.
323
+ insertSlice({
324
+ id: "S01", milestoneId: "M001", title: "X",
325
+ isSketch: true, sketchScope: "new scope",
326
+ });
327
+ assert.equal(getSlice("M001", "S01")?.is_sketch, 1);
328
+ assert.equal(getSlice("M001", "S01")?.sketch_scope, "new scope");
329
+ });
330
+
331
+ test("ADR-011 ON CONFLICT: empty-string sketchScope clears existing scope (not preserves it)", async (t) => {
332
+ const base = mkdtempSync(join(tmpdir(), "gsd-adr011-conflict-empty-"));
333
+ t.after(() => {
334
+ try { closeDatabase(); } catch { /* noop */ }
335
+ rmSync(base, { recursive: true, force: true });
336
+ });
337
+ openDatabase(join(base, "gsd.db"));
338
+ insertMilestone({ id: "M001", title: "Test", status: "active" });
339
+
340
+ insertSlice({
341
+ id: "S01", milestoneId: "M001", title: "X",
342
+ isSketch: true, sketchScope: "existing scope",
343
+ });
344
+ // Explicit empty string is the caller saying "clear it" — must not be
345
+ // treated as absent (the `?? null` footgun the peer review flagged).
346
+ insertSlice({
347
+ id: "S01", milestoneId: "M001", title: "X",
348
+ isSketch: false, sketchScope: "",
349
+ });
350
+ assert.equal(getSlice("M001", "S01")?.sketch_scope, "", "explicit '' must clear, not preserve");
351
+ });
352
+
353
+ // ═══════════════════════════════════════════════════════════════════════════
354
+ // ADR-011 Phase 3 — Integration: Progressive Planning
355
+ // ═══════════════════════════════════════════════════════════════════════════
356
+
357
+ test("ADR-011 P3 #19: refine-slice prompt incorporates prior slice findings + sketch scope as hard constraint", async (t) => {
358
+ // Exercises the end-to-end path that makes progressive planning useful:
359
+ // 1. M001 has 3 slices. S01 is full and complete, with a SUMMARY.md that
360
+ // contains specific findings. S02 is a sketch that depends on S01.
361
+ // 2. The refining-phase dispatch builds S02's prompt via buildRefineSlicePrompt.
362
+ // 3. The generated prompt must contain BOTH the S01 findings (via
363
+ // inlineDependencySummaries, same path plan-slice uses) AND the stored
364
+ // sketch_scope prepended as a hard-constraint block (escalation-free
365
+ // Phase 1 contract).
366
+ //
367
+ // This is the core value proposition of ADR-011: refine against the latest
368
+ // codebase state + upstream findings, not the blank snapshot from initial
369
+ // plan-milestone. If either piece is missing, the refine flow has regressed.
370
+ const originalCwd = process.cwd();
371
+ const base = makeFixtureBase();
372
+ t.after(() => cleanup(base, originalCwd));
373
+
374
+ openDatabase(join(base, ".gsd", "gsd.db"));
375
+ insertMilestone({ id: "M001", title: "Integration test milestone", status: "active" });
376
+ insertSlice({
377
+ id: "S01", milestoneId: "M001", title: "Foundation",
378
+ status: "complete", risk: "high", depends: [], sequence: 1,
379
+ isSketch: false,
380
+ });
381
+ insertSlice({
382
+ id: "S02", milestoneId: "M001", title: "Feature built on foundation",
383
+ status: "pending", risk: "medium", depends: ["S01"], sequence: 2,
384
+ isSketch: true,
385
+ sketchScope: "Feature X in module Y only; do not refactor the foundation.",
386
+ });
387
+ insertSlice({
388
+ id: "S03", milestoneId: "M001", title: "Polish",
389
+ status: "pending", risk: "low", depends: ["S02"], sequence: 3,
390
+ isSketch: true,
391
+ sketchScope: "Polish + docs for Feature X.",
392
+ });
393
+
394
+ // Minimal roadmap so inlineRoadmapExcerpt has something to read.
395
+ writeFileSync(
396
+ join(base, ".gsd", "milestones", "M001", "ROADMAP.md"),
397
+ [
398
+ "# M001: Integration test milestone",
399
+ "",
400
+ "## Slices",
401
+ "",
402
+ "- [x] **S01: Foundation** `risk:high` `depends:[]`",
403
+ "- [ ] **S02: Feature built on foundation** `risk:medium` `depends:[S01]`",
404
+ "- [ ] **S03: Polish** `risk:low` `depends:[S02]`",
405
+ "",
406
+ ].join("\n"),
407
+ );
408
+
409
+ // Write S01 artifacts — the SUMMARY carries findings that S02's refine pass
410
+ // must incorporate. The specific markers below are what the assertion pins.
411
+ writeFileSync(
412
+ join(base, ".gsd", "milestones", "M001", "slices", "S01", "S01-PLAN.md"),
413
+ "# S01 Plan\n",
414
+ );
415
+ const s01Findings = [
416
+ "# S01 Summary",
417
+ "",
418
+ "## Findings",
419
+ "",
420
+ "- FINDING-MARKER-AUTH: chose JWT over sessions for statelessness.",
421
+ "- FINDING-MARKER-DB: schema v17 migration required before S02 can safely add the feature table.",
422
+ "",
423
+ "## Key Decisions",
424
+ "",
425
+ "- Do not introduce a background worker yet — premature.",
426
+ ].join("\n");
427
+ writeFileSync(
428
+ join(base, ".gsd", "milestones", "M001", "slices", "S01", "S01-SUMMARY.md"),
429
+ s01Findings,
430
+ );
431
+
432
+ writePreferences(base, "phases:\n progressive_planning: true");
433
+ process.chdir(base);
434
+
435
+ // Build the refine prompt for S02 — the same call the refining-phase
436
+ // dispatch rule would make in production.
437
+ const { buildRefineSlicePrompt } = await import("../auto-prompts.ts");
438
+ const prompt = await buildRefineSlicePrompt(
439
+ "M001", "Integration test milestone", "S02", "Feature built on foundation", base,
440
+ );
441
+
442
+ // ── Sketch scope injected as a hard constraint ─────────────────────────
443
+ assert.match(
444
+ prompt,
445
+ /## Sketch Scope \(hard constraint\)/,
446
+ "refine prompt must frame sketch_scope as a hard constraint",
447
+ );
448
+ assert.match(
449
+ prompt,
450
+ /Feature X in module Y only/,
451
+ "refine prompt must include the stored sketch_scope text verbatim",
452
+ );
453
+
454
+ // ── Prior slice findings carried forward from S01-SUMMARY ──────────────
455
+ assert.match(
456
+ prompt,
457
+ /FINDING-MARKER-AUTH/,
458
+ "S01's auth finding must surface in the S02 refine prompt",
459
+ );
460
+ assert.match(
461
+ prompt,
462
+ /FINDING-MARKER-DB/,
463
+ "S01's DB finding must surface in the S02 refine prompt",
464
+ );
465
+ assert.match(
466
+ prompt,
467
+ /S01 Summary/,
468
+ "inlineDependencySummaries must label the injected block with S01's section header",
469
+ );
470
+
471
+ // ── Not the stale blank-slate plan-slice framing ───────────────────────
472
+ // The refine prompt is a *transformation*, not a blank-sheet plan. Pin the
473
+ // distinction so future prompt edits don't silently collapse the two paths.
474
+ assert.doesNotMatch(
475
+ prompt,
476
+ /Prior Sketch Scope \(soft hint — non-binding\)/,
477
+ "refine prompt must NOT use the soft-hint framing (that's the plan-slice flag-off downgrade)",
478
+ );
479
+ });
480
+
481
+ test("ADR-011 P3 #26: refine-slice dispatch latency is bounded vs plan-slice baseline", async (t) => {
482
+ // Pins the Zylos 2026 research claim that progressive planning trades a
483
+ // small dispatch-time cost for significant plan quality. The refine path
484
+ // does extra work: it reads sketch_scope from the DB and inlines the
485
+ // dependency summaries. Neither operation should dominate the prompt build.
486
+ //
487
+ // Absolute: < 500ms wall clock. Relative: < 3x plan-slice baseline.
488
+ // Both bounds are deliberately generous — this test is a regression gate,
489
+ // not a benchmark. The goal is catching accidental O(N) fs walks or DB
490
+ // queries that would multiply dispatch time as milestones grow.
491
+ const originalCwd = process.cwd();
492
+ const base = makeFixtureBase();
493
+ t.after(() => cleanup(base, originalCwd));
494
+
495
+ seedMilestoneWithSketchedS02(base);
496
+ writeS01Artifacts(base);
497
+ writeFileSync(
498
+ join(base, ".gsd", "milestones", "M001", "ROADMAP.md"),
499
+ [
500
+ "# M001: Test",
501
+ "",
502
+ "## Slices",
503
+ "",
504
+ "- [x] **S01: Foundation** `risk:high` `depends:[]`",
505
+ "- [ ] **S02: Feature** `risk:medium` `depends:[S01]`",
506
+ "",
507
+ ].join("\n"),
508
+ );
509
+ writePreferences(base, "phases:\n progressive_planning: true");
510
+ process.chdir(base);
511
+
512
+ const { buildRefineSlicePrompt, buildPlanSlicePrompt } = await import("../auto-prompts.ts");
513
+
514
+ // Warm-up pass — first call loads the prompt template from disk and primes
515
+ // fs/DB caches. Measuring the cold path would be noisy and misleading.
516
+ await buildPlanSlicePrompt("M001", "Test", "S02", "Feature", base);
517
+ await buildRefineSlicePrompt("M001", "Test", "S02", "Feature", base);
518
+
519
+ const planStart = Date.now();
520
+ await buildPlanSlicePrompt("M001", "Test", "S02", "Feature", base);
521
+ const planElapsed = Date.now() - planStart;
522
+
523
+ const refineStart = Date.now();
524
+ await buildRefineSlicePrompt("M001", "Test", "S02", "Feature", base);
525
+ const refineElapsed = Date.now() - refineStart;
526
+
527
+ assert.ok(
528
+ refineElapsed < 500,
529
+ `refine-slice prompt build must complete under 500ms (took ${refineElapsed}ms)`,
530
+ );
531
+ // Guard the ratio only when the baseline is large enough to be meaningful —
532
+ // if plan-slice measures 0-2ms the ratio is dominated by timer noise.
533
+ if (planElapsed >= 5) {
534
+ assert.ok(
535
+ refineElapsed < planElapsed * 3,
536
+ `refine-slice must not exceed 3x plan-slice baseline (refine=${refineElapsed}ms, plan=${planElapsed}ms)`,
537
+ );
538
+ }
539
+ });
@@ -30,6 +30,8 @@ function makeSliceRow(overrides?: Partial<SliceRow>): SliceRow {
30
30
  observability_impact: '',
31
31
  sequence: 0,
32
32
  replan_triggered_at: null,
33
+ is_sketch: 0,
34
+ sketch_scope: '',
33
35
  ...overrides,
34
36
  };
35
37
  }
@@ -61,6 +63,11 @@ function makeTaskRow(overrides?: Partial<TaskRow>): TaskRow {
61
63
  expected_output: [],
62
64
  observability_impact: '',
63
65
  sequence: 0,
66
+ blocker_source: '',
67
+ escalation_pending: 0,
68
+ escalation_awaiting_review: 0,
69
+ escalation_artifact_path: null,
70
+ escalation_override_applied_at: null,
64
71
  ...overrides,
65
72
  };
66
73
  }
@@ -164,6 +164,33 @@ describe("prompt-budget: inlineDependencySummaries truncation", () => {
164
164
  const result = await inlineDependencySummaries("M001", "S01", base, 1000);
165
165
  assert.equal(result, "- (no dependencies)");
166
166
  });
167
+
168
+ // Regression for issue #4435: a slice with 12 declared dependencies on a
169
+ // small-window (32K) model should not inject the full concatenated 55-70K
170
+ // chars of dep summaries. Exercises the budget the builders now pass in
171
+ // (computeBudgets(32000).summaryBudgetChars ≈ 19_200 chars).
172
+ it("caps 12 cumulative dep summaries at the 32K summaryBudgetChars (#4435)", async () => {
173
+ const depIds = Array.from({ length: 12 }, (_, i) => `S${String(i + 1).padStart(2, "0")}`);
174
+ const section = (label: string) => `### ${label}\n\n${"Lorem ipsum dolor sit amet. ".repeat(200)}`;
175
+ const perSummary = [section("Results"), section("Key Decisions"), section("Forward Intelligence")].join("\n\n");
176
+ const summaries: Record<string, string> = {};
177
+ for (const id of depIds) summaries[id] = perSummary;
178
+
179
+ setupDependencyFixture(base, "M001", "S13", depIds, summaries);
180
+
181
+ const budget32K = computeBudgets(32_000).summaryBudgetChars;
182
+ const result = await inlineDependencySummaries("M001", "S13", base, budget32K);
183
+
184
+ // The total raw content would be 12 × ~17K chars ≈ 200K chars. Budget at
185
+ // 32K is ~19.2K chars. The result must be bounded and the overflow marker
186
+ // must be present.
187
+ assert.ok(result.length <= budget32K + 200, `result must fit within 32K summary budget, got ${result.length}`);
188
+ assert.ok(result.includes("[...truncated"), "must emit the truncation marker when over budget");
189
+
190
+ // Unbounded call returns the full ~200K — confirms this is the regression surface.
191
+ const unbounded = await inlineDependencySummaries("M001", "S13", base);
192
+ assert.ok(unbounded.length > budget32K * 5, "unbounded call should blow past the 32K budget (regression baseline)");
193
+ });
167
194
  });
168
195
 
169
196
  // ─── plan-slice template includes executor constraints placeholder ────────────
@@ -223,6 +223,30 @@ test("replan-slice prompt uses gsd_replan_slice as canonical DB-backed tool", ()
223
223
  assert.doesNotMatch(prompt, /Degraded fallback/i);
224
224
  });
225
225
 
226
+ // ─── ADR-011 refine-slice prompt contracts ────────────────────────────
227
+
228
+ test("refine-slice prompt names gsd_plan_slice as the DB-backed write path", () => {
229
+ const prompt = readPrompt("refine-slice");
230
+ assert.match(prompt, /gsd_plan_slice/, "refine-slice must call gsd_plan_slice to persist");
231
+ });
232
+
233
+ test("refine-slice prompt does not instruct direct PLAN.md writes", () => {
234
+ const prompt = readPrompt("refine-slice");
235
+ assert.match(
236
+ prompt,
237
+ /do NOT rely on direct `PLAN\.md` writes/i,
238
+ "refine-slice must not frame direct file writes as authoritative",
239
+ );
240
+ });
241
+
242
+ test("refine-slice prompt frames the unit as a transformation, not blank-sheet planning", () => {
243
+ const prompt = readPrompt("refine-slice");
244
+ // The framing language is load-bearing — the model should treat this as
245
+ // expanding an approved sketch, not planning from scratch.
246
+ assert.match(prompt, /expands an approved sketch/i);
247
+ assert.match(prompt, /Sketch Scope/);
248
+ });
249
+
226
250
  test("reassess-roadmap prompt references gsd_reassess_roadmap tool", () => {
227
251
  const prompt = readPrompt("reassess-roadmap");
228
252
  assert.match(prompt, /gsd_reassess_roadmap/);
@@ -360,7 +360,7 @@ test('prompt-db: re-import updates DB when source markdown changes', () => {
360
360
  `;
361
361
  writeFileSync(join(gsdDir, 'DECISIONS.md'), updatedDecisions);
362
362
 
363
- // Re-import (simulating what handleAgentEnd does)
363
+ // Re-import (simulating what the agent_end path does)
364
364
  migrateFromMarkdown(tmpDir);
365
365
 
366
366
  // Verify DB now has 3 decisions