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
@@ -32,6 +32,19 @@ test("classifyError detects rate limit from message", () => {
32
32
  assert.equal(result.kind, "rate-limit");
33
33
  });
34
34
 
35
+ test("classifyError treats Anthropic quota-window phrasing as transient rate-limit (#4373)", () => {
36
+ const result = classifyError("You've hit your limit · resets soon");
37
+ assert.ok(isTransient(result));
38
+ assert.equal(result.kind, "rate-limit");
39
+ assert.ok("retryAfterMs" in result && result.retryAfterMs === 60_000);
40
+ });
41
+
42
+ test("classifyError treats usage-limit phrasing as transient rate-limit (#4373)", () => {
43
+ const result = classifyError("usage limit reached for this workspace");
44
+ assert.ok(isTransient(result));
45
+ assert.equal(result.kind, "rate-limit");
46
+ });
47
+
35
48
  test("classifyError treats OpenRouter affordability errors as transient rate-limit class", () => {
36
49
  const result = classifyError(
37
50
  "402 This request requires more credits, or fewer max_tokens. You requested up to 32000 tokens, but can only afford 329.",
@@ -202,6 +215,10 @@ test("isTransientNetworkError detects DNS errors", () => {
202
215
  assert.ok(isTransientNetworkError("dns resolution failed"));
203
216
  });
204
217
 
218
+ test("isTransientNetworkError detects unexpected EOF", () => {
219
+ assert.ok(isTransientNetworkError("unexpected EOF"));
220
+ });
221
+
205
222
  test("isTransientNetworkError rejects auth errors", () => {
206
223
  assert.ok(!isTransientNetworkError("unauthorized: invalid API key"));
207
224
  });
@@ -455,6 +472,22 @@ test("agent-end-recovery.ts resumes transient provider pauses through startAuto
455
472
  );
456
473
  });
457
474
 
475
+ test("agent-end-recovery.ts does not defer rate-limit errors to core retry handler before fallback (#4373)", () => {
476
+ const src = readFileSync(join(__dirname, "..", "bootstrap", "agent-end-recovery.ts"), "utf-8");
477
+ assert.ok(
478
+ src.includes('if (isTransient(cls) && cls.kind !== "rate-limit")'),
479
+ "rate-limit errors must bypass transient core-retry deferral so fallback can execute (#4373)",
480
+ );
481
+ });
482
+
483
+ test("agent-end-recovery.ts updates dashboard dispatched model after fallback switch", () => {
484
+ const src = readFileSync(join(__dirname, "..", "bootstrap", "agent-end-recovery.ts"), "utf-8");
485
+ assert.ok(
486
+ src.includes("setCurrentDispatchedModelId"),
487
+ "agent-end-recovery.ts should update currentDispatchedModelId when recovery switches model",
488
+ );
489
+ });
490
+
458
491
  // ── Codex error extraction (#1166) ──────────────────────────────────────────
459
492
 
460
493
  test("openai-codex-responses.ts extracts nested error fields", () => {
@@ -10,6 +10,7 @@ import {
10
10
  resetWriteGateState,
11
11
  shouldBlockContextArtifactSave,
12
12
  } from "../bootstrap/write-gate.ts";
13
+ import { toRoundResultResponse } from "../../remote-questions/manager.ts";
13
14
 
14
15
  function makeTempDir(prefix: string): string {
15
16
  const dir = join(
@@ -95,3 +96,69 @@ test("register-hooks unlocks milestone depth verification from question id witho
95
96
  "question-id milestone inference should unlock the matching milestone context write",
96
97
  );
97
98
  });
99
+
100
+ test("register-hooks clears depth gate when remote (Telegram/Slack/Discord) answer is normalized (#4406)", async (t) => {
101
+ const dir = makeTempDir("remote");
102
+ const originalCwd = process.cwd();
103
+ process.chdir(dir);
104
+ resetWriteGateState();
105
+
106
+ t.after(() => {
107
+ resetWriteGateState();
108
+ process.chdir(originalCwd);
109
+ rmSync(dir, { recursive: true, force: true });
110
+ });
111
+
112
+ const handlers = new Map<string, Array<(event: any, ctx?: any) => Promise<void> | void>>();
113
+ const pi = {
114
+ on(event: string, handler: (event: any, ctx?: any) => Promise<void> | void) {
115
+ const existing = handlers.get(event) ?? [];
116
+ existing.push(handler);
117
+ handlers.set(event, existing);
118
+ },
119
+ } as any;
120
+
121
+ registerHooks(pi, []);
122
+
123
+ const questionId = "depth_verification_M002_confirm";
124
+ const questions = [
125
+ {
126
+ id: questionId,
127
+ question: "Do you agree?",
128
+ options: [
129
+ { label: "Yes, you got it (Recommended)" },
130
+ { label: "Needs adjustment" },
131
+ ],
132
+ },
133
+ ];
134
+
135
+ for (const handler of handlers.get("tool_call") ?? []) {
136
+ await handler({ toolName: "ask_user_questions", input: { questions } });
137
+ }
138
+ assert.equal(getPendingGate(), questionId);
139
+
140
+ // Simulate the normalized response the remote manager now emits:
141
+ // a Telegram button press returns a RemoteAnswer that is fed through
142
+ // toRoundResultResponse before reaching details.response.
143
+ const remoteAnswer = {
144
+ answers: {
145
+ [questionId]: { answers: ["Yes, you got it (Recommended)"] },
146
+ },
147
+ };
148
+ const normalized = toRoundResultResponse(remoteAnswer);
149
+
150
+ for (const handler of handlers.get("tool_result") ?? []) {
151
+ await handler({
152
+ toolName: "ask_user_questions",
153
+ input: { questions },
154
+ details: { response: normalized },
155
+ });
156
+ }
157
+
158
+ assert.equal(getPendingGate(), null, "normalized remote answer must clear the gate");
159
+ assert.equal(
160
+ shouldBlockContextArtifactSave("CONTEXT", "M002").block,
161
+ false,
162
+ "remote confirmation must unlock the matching milestone context write",
163
+ );
164
+ });
@@ -0,0 +1,107 @@
1
+ /**
2
+ * remote-notification-from-desktop.test.ts
3
+ *
4
+ * Regression guard: sendDesktopNotification must fire sendRemoteNotification
5
+ * as a fire-and-forget side-effect so that Telegram/Slack/Discord channels
6
+ * receive the same events as native desktop notifications.
7
+ *
8
+ * Testing strategy (structural analysis):
9
+ * node:test does not support mock.module without --experimental-test-module-mocks,
10
+ * so we use the same source-code structural approach established in this codebase
11
+ * (see session-start-footer.test.ts). We read notifications.ts and assert that:
12
+ * 1. It imports sendRemoteNotification from the remote-questions/notify module.
13
+ * 2. The sendDesktopNotification function body calls sendRemoteNotification
14
+ * with title and message as arguments.
15
+ * 3. The call uses the void fire-and-forget pattern with a .catch(() => {})
16
+ * suppressor so that async failures never break the synchronous caller.
17
+ *
18
+ * Relates to #4341.
19
+ */
20
+
21
+ import test from "node:test";
22
+ import assert from "node:assert/strict";
23
+ import { readFileSync } from "node:fs";
24
+ import { join, dirname } from "node:path";
25
+ import { fileURLToPath } from "node:url";
26
+
27
+ const __dirname = dirname(fileURLToPath(import.meta.url));
28
+ const SOURCE = readFileSync(join(__dirname, "..", "notifications.ts"), "utf-8");
29
+
30
+ test("notifications.ts imports sendRemoteNotification from remote-questions/notify", () => {
31
+ const hasImport =
32
+ SOURCE.includes('from "../remote-questions/notify.js"') ||
33
+ SOURCE.includes("from '../remote-questions/notify.js'");
34
+ assert.ok(
35
+ hasImport,
36
+ "notifications.ts must import from '../remote-questions/notify.js'",
37
+ );
38
+
39
+ const importLine = SOURCE.split("\n").find(
40
+ (line) =>
41
+ line.includes("sendRemoteNotification") &&
42
+ (line.includes("remote-questions/notify") || line.includes("remote-questions/notify.js")),
43
+ );
44
+ assert.ok(
45
+ importLine,
46
+ "The import statement must include sendRemoteNotification from the remote-questions/notify module",
47
+ );
48
+ });
49
+
50
+ test("sendDesktopNotification calls sendRemoteNotification(title, message)", () => {
51
+ // Extract the body of sendDesktopNotification — from its opening brace to the
52
+ // closing brace at the same indentation level.
53
+ const fnStart = SOURCE.indexOf("export function sendDesktopNotification(");
54
+ assert.ok(fnStart > -1, "sendDesktopNotification must be present in notifications.ts");
55
+
56
+ // Find the next exported function/const after sendDesktopNotification to bound the search.
57
+ const nextExportIdx = SOURCE.indexOf("\nexport ", fnStart + 1);
58
+ const fnBody = nextExportIdx > -1 ? SOURCE.slice(fnStart, nextExportIdx) : SOURCE.slice(fnStart);
59
+
60
+ assert.ok(
61
+ fnBody.includes("sendRemoteNotification"),
62
+ "sendDesktopNotification must call sendRemoteNotification",
63
+ );
64
+
65
+ assert.ok(
66
+ fnBody.includes("sendRemoteNotification(title") || fnBody.includes("sendRemoteNotification(title,"),
67
+ "sendRemoteNotification must be called with title as first argument",
68
+ );
69
+ });
70
+
71
+ test("sendRemoteNotification is invoked as void fire-and-forget with .catch(() => {})", () => {
72
+ const fnStart = SOURCE.indexOf("export function sendDesktopNotification(");
73
+ const nextExportIdx = SOURCE.indexOf("\nexport ", fnStart + 1);
74
+ const fnBody = nextExportIdx > -1 ? SOURCE.slice(fnStart, nextExportIdx) : SOURCE.slice(fnStart);
75
+
76
+ assert.ok(
77
+ fnBody.includes("void sendRemoteNotification("),
78
+ "sendRemoteNotification must be called with void (fire-and-forget)",
79
+ );
80
+
81
+ assert.ok(
82
+ fnBody.includes(".catch("),
83
+ "sendRemoteNotification call must be followed by .catch() to suppress unhandled-rejection warnings",
84
+ );
85
+ });
86
+
87
+ test("sendRemoteNotification call appears before shouldSendDesktopNotification guard", () => {
88
+ // Regression guard for the HIGH-severity bug where remote notifications were
89
+ // gated behind the desktop-notification preference check. Users who disable
90
+ // desktop notifications must still receive Telegram/Slack/Discord messages.
91
+ const fnStart = SOURCE.indexOf("export function sendDesktopNotification(");
92
+ assert.ok(fnStart > -1, "sendDesktopNotification must be present in notifications.ts");
93
+
94
+ const nextExportIdx = SOURCE.indexOf("\nexport ", fnStart + 1);
95
+ const fnBody = nextExportIdx > -1 ? SOURCE.slice(fnStart, nextExportIdx) : SOURCE.slice(fnStart);
96
+
97
+ const remoteCallIdx = fnBody.indexOf("sendRemoteNotification(");
98
+ const guardIdx = fnBody.indexOf("shouldSendDesktopNotification(");
99
+
100
+ assert.ok(remoteCallIdx > -1, "sendRemoteNotification must be called inside sendDesktopNotification");
101
+ assert.ok(guardIdx > -1, "shouldSendDesktopNotification guard must be present inside sendDesktopNotification");
102
+
103
+ assert.ok(
104
+ remoteCallIdx < guardIdx,
105
+ `sendRemoteNotification (pos ${remoteCallIdx}) must appear BEFORE the shouldSendDesktopNotification guard (pos ${guardIdx}) so that remote channels fire even when desktop notifications are disabled`,
106
+ );
107
+ });
@@ -95,6 +95,15 @@ describe('requirements', () => {
95
95
  assert.ok(report.issues.some(issue => issue.code === "active_requirement_missing_owner"), "doctor flags missing owner");
96
96
  });
97
97
 
98
+ // #4414: active_requirement_missing_owner is a planning-hygiene signal,
99
+ // not a correctness blocker — severity must be warning, not error.
100
+ test('#4414: active_requirement_missing_owner is a warning, not an error', async () => {
101
+ const report = await runGSDDoctor(base);
102
+ const issue = report.issues.find(i => i.code === "active_requirement_missing_owner");
103
+ assert.ok(issue, "issue is present");
104
+ assert.equal(issue!.severity, "warning", "severity downgraded so doctor report.ok is not flipped to false");
105
+ });
106
+
98
107
  after(() => {
99
108
  rmSync(base, { recursive: true, force: true });
100
109
  });
@@ -0,0 +1,153 @@
1
+ /**
2
+ * session-start-footer.test.ts
3
+ *
4
+ * Verifies that register-hooks.ts suppresses the built-in footer by calling
5
+ * ctx.ui.setFooter(hideFooter) in both session_start and session_switch when
6
+ * isAutoActive() is true.
7
+ *
8
+ * Testing strategy:
9
+ * Two layers:
10
+ * 1. Source-code regression guard: ensures the guard and setFooter call are
11
+ * structurally present in register-hooks.ts for both event handlers.
12
+ * (node:test does not support mock.module without --experimental-test-module-mocks,
13
+ * so structural analysis is the correct approach here.)
14
+ * 2. Behavioral integration test: fires the live session_start handler with a
15
+ * fake ctx when isAutoActive() is false (its default at test time) and
16
+ * confirms setFooter is NOT called — verifying the guard is conditional.
17
+ *
18
+ * Relates to #4314.
19
+ */
20
+
21
+ import test from "node:test";
22
+ import assert from "node:assert/strict";
23
+ import { mkdirSync, readFileSync, rmSync } from "node:fs";
24
+ import { join, dirname } from "node:path";
25
+ import { tmpdir } from "node:os";
26
+ import { fileURLToPath } from "node:url";
27
+
28
+ import { registerHooks } from "../bootstrap/register-hooks.ts";
29
+
30
+ const __dirname = dirname(fileURLToPath(import.meta.url));
31
+ const HOOKS_SOURCE = readFileSync(
32
+ join(__dirname, "..", "bootstrap", "register-hooks.ts"),
33
+ "utf-8",
34
+ );
35
+
36
+ // ─── Source-code regression guards ──────────────────────────────────────────
37
+
38
+ test("register-hooks.ts imports hideFooter from auto-dashboard", () => {
39
+ assert.ok(
40
+ HOOKS_SOURCE.includes('import { hideFooter } from "../auto-dashboard.js"') ||
41
+ HOOKS_SOURCE.includes("import { hideFooter } from '../auto-dashboard.js'"),
42
+ "register-hooks.ts must import hideFooter from auto-dashboard.js",
43
+ );
44
+ });
45
+
46
+ test("session_start handler calls ctx.ui.setFooter(hideFooter) when isAutoActive()", () => {
47
+ // Locate the session_start handler body (up to the next pi.on call)
48
+ const sessionStartIdx = HOOKS_SOURCE.indexOf('"session_start"');
49
+ assert.ok(sessionStartIdx > -1, "session_start handler must exist");
50
+
51
+ const sessionSwitchIdx = HOOKS_SOURCE.indexOf('"session_switch"');
52
+ assert.ok(sessionSwitchIdx > sessionStartIdx, "session_switch handler must follow session_start");
53
+
54
+ const sessionStartBody = HOOKS_SOURCE.slice(sessionStartIdx, sessionSwitchIdx);
55
+
56
+ assert.ok(
57
+ sessionStartBody.includes("isAutoActive()"),
58
+ "session_start handler must call isAutoActive()",
59
+ );
60
+ assert.ok(
61
+ sessionStartBody.includes("ctx.ui.setFooter(hideFooter)"),
62
+ "session_start handler must call ctx.ui.setFooter(hideFooter)",
63
+ );
64
+
65
+ // Guard must wrap the setFooter call
66
+ const guardIdx = sessionStartBody.indexOf("isAutoActive()");
67
+ const setFooterIdx = sessionStartBody.indexOf("ctx.ui.setFooter(hideFooter)");
68
+ assert.ok(
69
+ guardIdx < setFooterIdx,
70
+ "isAutoActive() guard must appear before ctx.ui.setFooter(hideFooter) in session_start",
71
+ );
72
+ });
73
+
74
+ test("session_switch handler calls ctx.ui.setFooter(hideFooter) when isAutoActive()", () => {
75
+ const sessionSwitchIdx = HOOKS_SOURCE.indexOf('"session_switch"');
76
+ assert.ok(sessionSwitchIdx > -1, "session_switch handler must exist");
77
+
78
+ const beforeAgentStartIdx = HOOKS_SOURCE.indexOf('"before_agent_start"');
79
+ assert.ok(beforeAgentStartIdx > sessionSwitchIdx, "before_agent_start handler must follow session_switch");
80
+
81
+ const sessionSwitchBody = HOOKS_SOURCE.slice(sessionSwitchIdx, beforeAgentStartIdx);
82
+
83
+ assert.ok(
84
+ sessionSwitchBody.includes("isAutoActive()"),
85
+ "session_switch handler must call isAutoActive()",
86
+ );
87
+ assert.ok(
88
+ sessionSwitchBody.includes("ctx.ui.setFooter(hideFooter)"),
89
+ "session_switch handler must call ctx.ui.setFooter(hideFooter)",
90
+ );
91
+
92
+ const guardIdx = sessionSwitchBody.indexOf("isAutoActive()");
93
+ const setFooterIdx = sessionSwitchBody.indexOf("ctx.ui.setFooter(hideFooter)");
94
+ assert.ok(
95
+ guardIdx < setFooterIdx,
96
+ "isAutoActive() guard must appear before ctx.ui.setFooter(hideFooter) in session_switch",
97
+ );
98
+ });
99
+
100
+ // ─── Behavioral test: setFooter NOT called when auto-mode is inactive ────────
101
+
102
+ test("session_start does NOT call setFooter when isAutoActive() is false (default)", async (t) => {
103
+ const dir = join(
104
+ tmpdir(),
105
+ `gsd-footer-test-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`,
106
+ );
107
+ mkdirSync(dir, { recursive: true });
108
+
109
+ const originalCwd = process.cwd();
110
+ process.chdir(dir);
111
+ t.after(() => {
112
+ process.chdir(originalCwd);
113
+ try { rmSync(dir, { recursive: true, force: true }); } catch { /* best-effort */ }
114
+ });
115
+
116
+ let setFooterCallCount = 0;
117
+
118
+ const handlers = new Map<string, (event: unknown, ctx: any) => Promise<void> | void>();
119
+ const pi = {
120
+ on(event: string, handler: (event: unknown, ctx: any) => Promise<void> | void) {
121
+ handlers.set(event, handler);
122
+ },
123
+ } as any;
124
+
125
+ registerHooks(pi, []);
126
+
127
+ const sessionStart = handlers.get("session_start");
128
+ assert.ok(sessionStart, "session_start handler must be registered");
129
+
130
+ await sessionStart!({}, {
131
+ hasUI: true,
132
+ ui: {
133
+ notify: () => {},
134
+ setStatus: () => {},
135
+ setFooter: (_footer: unknown) => {
136
+ setFooterCallCount++;
137
+ },
138
+ setWorkingMessage: () => {},
139
+ onTerminalInput: () => () => {},
140
+ setWidget: () => {},
141
+ },
142
+ sessionManager: { getSessionId: () => null },
143
+ model: null,
144
+ } as any);
145
+
146
+ // isAutoActive() is false at test time (no auto session started),
147
+ // so setFooter must not be called.
148
+ assert.equal(
149
+ setFooterCallCount,
150
+ 0,
151
+ "setFooter must NOT be called when isAutoActive() returns false",
152
+ );
153
+ });
@@ -31,18 +31,30 @@ describe("slice CONTEXT.md injection into prompt builders (#3452)", () => {
31
31
  const fnStart = source.indexOf(`export async function ${builder}`);
32
32
  assert.ok(fnStart !== -1, `${builder} should exist in auto-prompts.ts`);
33
33
 
34
- // Get a reasonable chunk after the function start (enough to cover the inlining section)
34
+ // Get a reasonable chunk after the function start
35
35
  const chunk = source.slice(fnStart, fnStart + 3000);
36
36
 
37
+ // ADR-011: buildPlanSlicePrompt / buildRefineSlicePrompt now delegate to
38
+ // a shared helper (renderSlicePrompt) that performs the slice CONTEXT
39
+ // resolve. When a builder delegates, scan the helper's body instead.
40
+ const delegatesToHelper = chunk.includes("renderSlicePrompt(");
41
+ const bodyToCheck = delegatesToHelper
42
+ ? (() => {
43
+ const helperStart = source.indexOf("async function renderSlicePrompt");
44
+ assert.ok(helperStart !== -1, "renderSlicePrompt helper must exist");
45
+ return source.slice(helperStart, helperStart + 3000);
46
+ })()
47
+ : chunk;
48
+
37
49
  // Must resolve the slice CONTEXT path
38
50
  assert.ok(
39
- chunk.includes('resolveSliceFile(base, mid,') && chunk.includes('"CONTEXT"'),
40
- `${builder} should call resolveSliceFile with "CONTEXT"`,
51
+ bodyToCheck.includes('resolveSliceFile(base, mid,') && bodyToCheck.includes('"CONTEXT"'),
52
+ `${builder} should call resolveSliceFile with "CONTEXT" (directly or via renderSlicePrompt)`,
41
53
  );
42
54
 
43
55
  // Must inline it with inlineFileOptional
44
56
  assert.ok(
45
- chunk.includes('Slice Context'),
57
+ bodyToCheck.includes("Slice Context"),
46
58
  `${builder} should inline slice CONTEXT with a "Slice Context" label`,
47
59
  );
48
60
  });
@@ -93,6 +93,8 @@ function makeSliceRow(id: string, overrides: Partial<SliceRow> = {}): SliceRow {
93
93
  integration_closure: "",
94
94
  observability_impact: "",
95
95
  replan_triggered_at: null,
96
+ is_sketch: 0,
97
+ sketch_scope: "",
96
98
  ...overrides,
97
99
  };
98
100
  }
@@ -295,6 +297,7 @@ describe("#2945 Bug 3: mergeAndExit must teardown worktree after successful merg
295
297
  loadEffectiveGSDPreferences: () => undefined,
296
298
  invalidateAllCaches: () => {},
297
299
  captureIntegrationBranch: () => {},
300
+ enterBranchModeForMilestone: () => {},
298
301
  };
299
302
 
300
303
  // Import and create resolver
@@ -79,6 +79,21 @@ test("Rule 2: interrupted sequence does not trigger", () => {
79
79
  );
80
80
  });
81
81
 
82
+ test("Rule 2b: same unit repeated 3 times in the window triggers stuck even with an intervening unit", () => {
83
+ const result = detectStuck([
84
+ { key: "execute-task/M002/S03/T01" },
85
+ { key: "execute-task/M002/S03/T01" },
86
+ { key: "reassess-roadmap/M002/S02" },
87
+ { key: "execute-task/M002/S03/T01" },
88
+ ]);
89
+ assert.notEqual(result, null);
90
+ assert.equal(result!.stuck, true);
91
+ assert.ok(
92
+ result!.reason.includes("3 times in last 4 attempts"),
93
+ `reason was: ${result!.reason}`,
94
+ );
95
+ });
96
+
82
97
  // ─── Rule 3: Oscillation A→B→A→B ─────────────────────────────────────────────
83
98
 
84
99
  test("Rule 3: A-B-A-B oscillation triggers stuck", () => {
@@ -50,6 +50,11 @@ const taskRow: TaskRow = {
50
50
  observability_impact: "",
51
51
  full_plan_md: "",
52
52
  sequence: 1,
53
+ blocker_source: "",
54
+ escalation_pending: 0,
55
+ escalation_awaiting_review: 0,
56
+ escalation_artifact_path: null,
57
+ escalation_override_applied_at: null,
53
58
  };
54
59
 
55
60
  const verificationEvidence = [
@@ -64,8 +64,9 @@ test("uok contracts include required DAG node kinds", () => {
64
64
  "team-worker",
65
65
  "verification",
66
66
  "reprocess",
67
+ "refine",
67
68
  ];
68
- assert.deepEqual(required.length, 6);
69
+ assert.deepEqual(required.length, 7);
69
70
  });
70
71
 
71
72
  test("uok audit envelope includes trace/turn/causality fields", () => {
@@ -7,6 +7,37 @@ test("uok flags default to enabled when preference is unset", () => {
7
7
  const flags = resolveUokFlags(undefined);
8
8
  assert.equal(flags.enabled, true);
9
9
  assert.equal(flags.legacyFallback, false);
10
+ assert.equal(flags.gates, true);
11
+ assert.equal(flags.modelPolicy, true);
12
+ assert.equal(flags.executionGraph, true);
13
+ assert.equal(flags.gitops, true);
14
+ assert.equal(flags.auditUnified, true);
15
+ assert.equal(flags.planV2, true);
16
+ assert.equal(flags.gitopsTurnAction, "commit");
17
+ assert.equal(flags.gitopsTurnPush, false);
18
+ });
19
+
20
+ test("uok nested flags support explicit opt-out", () => {
21
+ const flags = resolveUokFlags({
22
+ uok: {
23
+ enabled: true,
24
+ gates: { enabled: false },
25
+ model_policy: { enabled: false },
26
+ execution_graph: { enabled: false },
27
+ gitops: { enabled: false, turn_action: "commit", turn_push: true },
28
+ audit_unified: { enabled: false },
29
+ plan_v2: { enabled: false },
30
+ },
31
+ });
32
+ assert.equal(flags.enabled, true);
33
+ assert.equal(flags.gates, false);
34
+ assert.equal(flags.modelPolicy, false);
35
+ assert.equal(flags.executionGraph, false);
36
+ assert.equal(flags.gitops, false);
37
+ assert.equal(flags.auditUnified, false);
38
+ assert.equal(flags.planV2, false);
39
+ assert.equal(flags.gitopsTurnAction, "commit");
40
+ assert.equal(flags.gitopsTurnPush, true);
10
41
  });
11
42
 
12
43
  test("uok legacy fallback preference forces legacy path", () => {
@@ -36,4 +67,3 @@ test("uok legacy fallback env var forces legacy path", () => {
36
67
  else process.env.GSD_UOK_FORCE_LEGACY = previous;
37
68
  }
38
69
  });
39
-