gsd-pi 2.43.0 → 2.44.0-dev.0b97ffd

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 (693) hide show
  1. package/README.md +30 -12
  2. package/dist/cli.js +13 -1
  3. package/dist/help-text.js +24 -0
  4. package/dist/resources/extensions/bg-shell/overlay.js +3 -0
  5. package/dist/resources/extensions/github-sync/sync.js +2 -1
  6. package/dist/resources/extensions/gsd/auto/loop.js +0 -2
  7. package/dist/resources/extensions/gsd/auto/phases.js +7 -12
  8. package/dist/resources/extensions/gsd/auto-dashboard.js +19 -18
  9. package/dist/resources/extensions/gsd/auto-direct-dispatch.js +34 -19
  10. package/dist/resources/extensions/gsd/auto-dispatch.js +36 -21
  11. package/dist/resources/extensions/gsd/auto-post-unit.js +128 -14
  12. package/dist/resources/extensions/gsd/auto-prompts.js +202 -92
  13. package/dist/resources/extensions/gsd/auto-recovery.js +83 -135
  14. package/dist/resources/extensions/gsd/auto-start.js +10 -0
  15. package/dist/resources/extensions/gsd/auto-supervisor.js +14 -0
  16. package/dist/resources/extensions/gsd/auto-timeout-recovery.js +4 -7
  17. package/dist/resources/extensions/gsd/auto-verification.js +5 -10
  18. package/dist/resources/extensions/gsd/auto-worktree.js +123 -30
  19. package/dist/resources/extensions/gsd/auto.js +1 -4
  20. package/dist/resources/extensions/gsd/bootstrap/db-tools.js +611 -0
  21. package/dist/resources/extensions/gsd/bootstrap/dynamic-tools.js +28 -3
  22. package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +7 -0
  23. package/dist/resources/extensions/gsd/commands/catalog.js +3 -1
  24. package/dist/resources/extensions/gsd/commands/handlers/ops.js +15 -1
  25. package/dist/resources/extensions/gsd/commands/handlers/workflow.js +5 -0
  26. package/dist/resources/extensions/gsd/commands-handlers.js +1 -1
  27. package/dist/resources/extensions/gsd/commands-maintenance.js +78 -3
  28. package/dist/resources/extensions/gsd/dashboard-overlay.js +32 -31
  29. package/dist/resources/extensions/gsd/db-writer.js +95 -4
  30. package/dist/resources/extensions/gsd/dispatch-guard.js +35 -30
  31. package/dist/resources/extensions/gsd/doctor-checks.js +28 -11
  32. package/dist/resources/extensions/gsd/doctor-environment.js +28 -0
  33. package/dist/resources/extensions/gsd/doctor-types.js +0 -15
  34. package/dist/resources/extensions/gsd/doctor.js +46 -282
  35. package/dist/resources/extensions/gsd/file-watcher.js +5 -1
  36. package/dist/resources/extensions/gsd/files.js +14 -198
  37. package/dist/resources/extensions/gsd/git-service.js +4 -0
  38. package/dist/resources/extensions/gsd/gitignore.js +4 -0
  39. package/dist/resources/extensions/gsd/gsd-db.js +819 -197
  40. package/dist/resources/extensions/gsd/guided-flow.js +18 -8
  41. package/dist/resources/extensions/gsd/markdown-renderer.js +862 -0
  42. package/dist/resources/extensions/gsd/md-importer.js +182 -4
  43. package/dist/resources/extensions/gsd/native-git-bridge.js +10 -1
  44. package/dist/resources/extensions/gsd/parallel-eligibility.js +14 -19
  45. package/dist/resources/extensions/gsd/parallel-orchestrator.js +38 -0
  46. package/dist/resources/extensions/gsd/parsers-legacy.js +239 -0
  47. package/dist/resources/extensions/gsd/preferences-types.js +1 -0
  48. package/dist/resources/extensions/gsd/preferences-validation.js +9 -0
  49. package/dist/resources/extensions/gsd/preferences.js +1 -0
  50. package/dist/resources/extensions/gsd/prompts/complete-slice.md +22 -9
  51. package/dist/resources/extensions/gsd/prompts/discuss.md +2 -2
  52. package/dist/resources/extensions/gsd/prompts/execute-task.md +15 -5
  53. package/dist/resources/extensions/gsd/prompts/guided-complete-slice.md +1 -1
  54. package/dist/resources/extensions/gsd/prompts/guided-execute-task.md +1 -1
  55. package/dist/resources/extensions/gsd/prompts/guided-plan-milestone.md +1 -1
  56. package/dist/resources/extensions/gsd/prompts/plan-milestone.md +6 -10
  57. package/dist/resources/extensions/gsd/prompts/plan-slice.md +4 -7
  58. package/dist/resources/extensions/gsd/prompts/reactive-execute.md +3 -3
  59. package/dist/resources/extensions/gsd/prompts/reassess-roadmap.md +6 -7
  60. package/dist/resources/extensions/gsd/prompts/replan-slice.md +6 -6
  61. package/dist/resources/extensions/gsd/reactive-graph.js +33 -3
  62. package/dist/resources/extensions/gsd/skill-health.js +3 -1
  63. package/dist/resources/extensions/gsd/state.js +484 -30
  64. package/dist/resources/extensions/gsd/tools/complete-milestone.js +128 -0
  65. package/dist/resources/extensions/gsd/tools/complete-slice.js +244 -0
  66. package/dist/resources/extensions/gsd/tools/complete-task.js +204 -0
  67. package/dist/resources/extensions/gsd/tools/plan-milestone.js +205 -0
  68. package/dist/resources/extensions/gsd/tools/plan-slice.js +155 -0
  69. package/dist/resources/extensions/gsd/tools/plan-task.js +94 -0
  70. package/dist/resources/extensions/gsd/tools/reassess-roadmap.js +152 -0
  71. package/dist/resources/extensions/gsd/tools/replan-slice.js +146 -0
  72. package/dist/resources/extensions/gsd/triage-resolution.js +17 -1
  73. package/dist/resources/extensions/gsd/undo.js +197 -3
  74. package/dist/resources/extensions/gsd/visualizer-data.js +53 -16
  75. package/dist/resources/extensions/gsd/workspace-index.js +63 -39
  76. package/dist/web/standalone/.next/BUILD_ID +1 -1
  77. package/dist/web/standalone/.next/app-path-routes-manifest.json +18 -17
  78. package/dist/web/standalone/.next/build-manifest.json +4 -4
  79. package/dist/web/standalone/.next/prerender-manifest.json +3 -3
  80. package/dist/web/standalone/.next/react-loadable-manifest.json +1 -1
  81. package/dist/web/standalone/.next/required-server-files.json +4 -4
  82. package/dist/web/standalone/.next/routes-manifest.json +6 -0
  83. package/dist/web/standalone/.next/server/app/_global-error/page.js +3 -3
  84. package/dist/web/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  85. package/dist/web/standalone/.next/server/app/_global-error.html +2 -2
  86. package/dist/web/standalone/.next/server/app/_global-error.rsc +1 -1
  87. package/dist/web/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  88. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  89. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  90. package/dist/web/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  91. package/dist/web/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  92. package/dist/web/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  93. package/dist/web/standalone/.next/server/app/_not-found/page.js +2 -2
  94. package/dist/web/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  95. package/dist/web/standalone/.next/server/app/_not-found.html +1 -1
  96. package/dist/web/standalone/.next/server/app/_not-found.rsc +4 -4
  97. package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +4 -4
  98. package/dist/web/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  99. package/dist/web/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +4 -4
  100. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  101. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  102. package/dist/web/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  103. package/dist/web/standalone/.next/server/app/api/boot/route.js +1 -1
  104. package/dist/web/standalone/.next/server/app/api/boot/route_client-reference-manifest.js +1 -1
  105. package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route.js +1 -1
  106. package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route_client-reference-manifest.js +1 -1
  107. package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route.js +1 -1
  108. package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route_client-reference-manifest.js +1 -1
  109. package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route.js +2 -2
  110. package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route_client-reference-manifest.js +1 -1
  111. package/dist/web/standalone/.next/server/app/api/browse-directories/route.js +1 -1
  112. package/dist/web/standalone/.next/server/app/api/browse-directories/route_client-reference-manifest.js +1 -1
  113. package/dist/web/standalone/.next/server/app/api/captures/route.js +1 -1
  114. package/dist/web/standalone/.next/server/app/api/captures/route_client-reference-manifest.js +1 -1
  115. package/dist/web/standalone/.next/server/app/api/cleanup/route.js +1 -1
  116. package/dist/web/standalone/.next/server/app/api/cleanup/route_client-reference-manifest.js +1 -1
  117. package/dist/web/standalone/.next/server/app/api/dev-mode/route.js +1 -1
  118. package/dist/web/standalone/.next/server/app/api/dev-mode/route_client-reference-manifest.js +1 -1
  119. package/dist/web/standalone/.next/server/app/api/doctor/route.js +1 -1
  120. package/dist/web/standalone/.next/server/app/api/doctor/route_client-reference-manifest.js +1 -1
  121. package/dist/web/standalone/.next/server/app/api/export-data/route.js +1 -1
  122. package/dist/web/standalone/.next/server/app/api/export-data/route_client-reference-manifest.js +1 -1
  123. package/dist/web/standalone/.next/server/app/api/files/route.js +1 -1
  124. package/dist/web/standalone/.next/server/app/api/files/route_client-reference-manifest.js +1 -1
  125. package/dist/web/standalone/.next/server/app/api/forensics/route.js +1 -1
  126. package/dist/web/standalone/.next/server/app/api/forensics/route_client-reference-manifest.js +1 -1
  127. package/dist/web/standalone/.next/server/app/api/git/route.js +1 -1
  128. package/dist/web/standalone/.next/server/app/api/git/route_client-reference-manifest.js +1 -1
  129. package/dist/web/standalone/.next/server/app/api/history/route.js +1 -1
  130. package/dist/web/standalone/.next/server/app/api/history/route_client-reference-manifest.js +1 -1
  131. package/dist/web/standalone/.next/server/app/api/hooks/route.js +1 -1
  132. package/dist/web/standalone/.next/server/app/api/hooks/route_client-reference-manifest.js +1 -1
  133. package/dist/web/standalone/.next/server/app/api/inspect/route.js +1 -1
  134. package/dist/web/standalone/.next/server/app/api/inspect/route_client-reference-manifest.js +1 -1
  135. package/dist/web/standalone/.next/server/app/api/knowledge/route.js +1 -1
  136. package/dist/web/standalone/.next/server/app/api/knowledge/route_client-reference-manifest.js +1 -1
  137. package/dist/web/standalone/.next/server/app/api/live-state/route.js +1 -1
  138. package/dist/web/standalone/.next/server/app/api/live-state/route_client-reference-manifest.js +1 -1
  139. package/dist/web/standalone/.next/server/app/api/onboarding/route.js +1 -1
  140. package/dist/web/standalone/.next/server/app/api/onboarding/route_client-reference-manifest.js +1 -1
  141. package/dist/web/standalone/.next/server/app/api/preferences/route.js +1 -1
  142. package/dist/web/standalone/.next/server/app/api/preferences/route_client-reference-manifest.js +1 -1
  143. package/dist/web/standalone/.next/server/app/api/projects/route.js +1 -1
  144. package/dist/web/standalone/.next/server/app/api/projects/route_client-reference-manifest.js +1 -1
  145. package/dist/web/standalone/.next/server/app/api/recovery/route.js +1 -1
  146. package/dist/web/standalone/.next/server/app/api/recovery/route_client-reference-manifest.js +1 -1
  147. package/dist/web/standalone/.next/server/app/api/remote-questions/route.js +5 -5
  148. package/dist/web/standalone/.next/server/app/api/remote-questions/route_client-reference-manifest.js +1 -1
  149. package/dist/web/standalone/.next/server/app/api/session/browser/route.js +1 -1
  150. package/dist/web/standalone/.next/server/app/api/session/browser/route_client-reference-manifest.js +1 -1
  151. package/dist/web/standalone/.next/server/app/api/session/command/route.js +1 -1
  152. package/dist/web/standalone/.next/server/app/api/session/command/route_client-reference-manifest.js +1 -1
  153. package/dist/web/standalone/.next/server/app/api/session/events/route.js +2 -2
  154. package/dist/web/standalone/.next/server/app/api/session/events/route_client-reference-manifest.js +1 -1
  155. package/dist/web/standalone/.next/server/app/api/session/manage/route.js +1 -1
  156. package/dist/web/standalone/.next/server/app/api/session/manage/route_client-reference-manifest.js +1 -1
  157. package/dist/web/standalone/.next/server/app/api/settings-data/route.js +1 -1
  158. package/dist/web/standalone/.next/server/app/api/settings-data/route_client-reference-manifest.js +1 -1
  159. package/dist/web/standalone/.next/server/app/api/shutdown/route.js +1 -1
  160. package/dist/web/standalone/.next/server/app/api/shutdown/route_client-reference-manifest.js +1 -1
  161. package/dist/web/standalone/.next/server/app/api/skill-health/route.js +1 -1
  162. package/dist/web/standalone/.next/server/app/api/skill-health/route_client-reference-manifest.js +1 -1
  163. package/dist/web/standalone/.next/server/app/api/steer/route.js +1 -1
  164. package/dist/web/standalone/.next/server/app/api/steer/route_client-reference-manifest.js +1 -1
  165. package/dist/web/standalone/.next/server/app/api/switch-root/route.js +1 -0
  166. package/dist/web/standalone/.next/server/app/api/switch-root/route.js.nft.json +1 -0
  167. package/dist/web/standalone/.next/server/app/api/switch-root/route_client-reference-manifest.js +1 -0
  168. package/dist/web/standalone/.next/server/app/api/terminal/input/route.js +1 -1
  169. package/dist/web/standalone/.next/server/app/api/terminal/input/route_client-reference-manifest.js +1 -1
  170. package/dist/web/standalone/.next/server/app/api/terminal/resize/route.js +2 -2
  171. package/dist/web/standalone/.next/server/app/api/terminal/resize/route_client-reference-manifest.js +1 -1
  172. package/dist/web/standalone/.next/server/app/api/terminal/sessions/route.js +2 -2
  173. package/dist/web/standalone/.next/server/app/api/terminal/sessions/route_client-reference-manifest.js +1 -1
  174. package/dist/web/standalone/.next/server/app/api/terminal/stream/route.js +4 -4
  175. package/dist/web/standalone/.next/server/app/api/terminal/stream/route_client-reference-manifest.js +1 -1
  176. package/dist/web/standalone/.next/server/app/api/terminal/upload/route.js +1 -1
  177. package/dist/web/standalone/.next/server/app/api/terminal/upload/route_client-reference-manifest.js +1 -1
  178. package/dist/web/standalone/.next/server/app/api/undo/route.js +1 -1
  179. package/dist/web/standalone/.next/server/app/api/undo/route_client-reference-manifest.js +1 -1
  180. package/dist/web/standalone/.next/server/app/api/update/route.js +1 -1
  181. package/dist/web/standalone/.next/server/app/api/update/route_client-reference-manifest.js +1 -1
  182. package/dist/web/standalone/.next/server/app/api/visualizer/route.js +1 -1
  183. package/dist/web/standalone/.next/server/app/api/visualizer/route_client-reference-manifest.js +1 -1
  184. package/dist/web/standalone/.next/server/app/index.html +1 -1
  185. package/dist/web/standalone/.next/server/app/index.rsc +5 -5
  186. package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
  187. package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +5 -5
  188. package/dist/web/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
  189. package/dist/web/standalone/.next/server/app/index.segments/_index.segment.rsc +4 -4
  190. package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  191. package/dist/web/standalone/.next/server/app/page.js +2 -2
  192. package/dist/web/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  193. package/dist/web/standalone/.next/server/app-paths-manifest.json +18 -17
  194. package/dist/web/standalone/.next/server/chunks/229.js +3 -3
  195. package/dist/web/standalone/.next/server/chunks/471.js +3 -3
  196. package/dist/web/standalone/.next/server/functions-config-manifest.json +1 -0
  197. package/dist/web/standalone/.next/server/middleware-build-manifest.js +1 -1
  198. package/dist/web/standalone/.next/server/middleware-react-loadable-manifest.js +1 -1
  199. package/dist/web/standalone/.next/server/middleware.js +2 -2
  200. package/dist/web/standalone/.next/server/next-font-manifest.js +1 -1
  201. package/dist/web/standalone/.next/server/next-font-manifest.json +1 -1
  202. package/dist/web/standalone/.next/server/pages/404.html +1 -1
  203. package/dist/web/standalone/.next/server/pages/500.html +2 -2
  204. package/dist/web/standalone/.next/server/server-reference-manifest.json +1 -1
  205. package/dist/web/standalone/.next/static/alS4hoANx0TK4UVZY27da/_buildManifest.js +1 -0
  206. package/dist/web/standalone/.next/static/chunks/{4024.c195dc1fdd2adbea.js → 4024.0de81b543b28b9fe.js} +2 -2
  207. package/dist/web/standalone/.next/static/chunks/app/_global-error/{page-d07a2c023f1aef1e.js → page-d83ba70a25a85472.js} +1 -1
  208. package/dist/web/standalone/.next/static/chunks/app/_not-found/page-f2a7482d42a5614b.js +1 -0
  209. package/dist/web/standalone/.next/static/chunks/app/api/boot/{route-d07a2c023f1aef1e.js → route-d83ba70a25a85472.js} +1 -1
  210. package/dist/web/standalone/.next/static/chunks/app/api/bridge-terminal/input/{route-d07a2c023f1aef1e.js → route-d83ba70a25a85472.js} +1 -1
  211. package/dist/web/standalone/.next/static/chunks/app/api/bridge-terminal/resize/{route-d07a2c023f1aef1e.js → route-d83ba70a25a85472.js} +1 -1
  212. package/dist/web/standalone/.next/static/chunks/app/api/bridge-terminal/stream/route-d83ba70a25a85472.js +1 -0
  213. package/dist/web/standalone/.next/static/chunks/app/api/browse-directories/route-d83ba70a25a85472.js +1 -0
  214. package/dist/web/standalone/.next/static/chunks/app/api/captures/route-d83ba70a25a85472.js +1 -0
  215. package/dist/web/standalone/.next/static/chunks/app/api/cleanup/route-d83ba70a25a85472.js +1 -0
  216. package/dist/web/standalone/.next/static/chunks/app/api/dev-mode/route-d83ba70a25a85472.js +1 -0
  217. package/dist/web/standalone/.next/static/chunks/app/api/doctor/route-d83ba70a25a85472.js +1 -0
  218. package/dist/web/standalone/.next/static/chunks/app/api/export-data/route-d83ba70a25a85472.js +1 -0
  219. package/dist/web/standalone/.next/static/chunks/app/api/files/route-d83ba70a25a85472.js +1 -0
  220. package/dist/web/standalone/.next/static/chunks/app/api/forensics/route-d83ba70a25a85472.js +1 -0
  221. package/dist/web/standalone/.next/static/chunks/app/api/git/route-d83ba70a25a85472.js +1 -0
  222. package/dist/web/standalone/.next/static/chunks/app/api/history/route-d83ba70a25a85472.js +1 -0
  223. package/dist/web/standalone/.next/static/chunks/app/api/hooks/route-d83ba70a25a85472.js +1 -0
  224. package/dist/web/standalone/.next/static/chunks/app/api/inspect/route-d83ba70a25a85472.js +1 -0
  225. package/dist/web/standalone/.next/static/chunks/app/api/knowledge/route-d83ba70a25a85472.js +1 -0
  226. package/dist/web/standalone/.next/static/chunks/app/api/live-state/route-d83ba70a25a85472.js +1 -0
  227. package/dist/web/standalone/.next/static/chunks/app/api/onboarding/route-d83ba70a25a85472.js +1 -0
  228. package/dist/web/standalone/.next/static/chunks/app/api/preferences/route-d83ba70a25a85472.js +1 -0
  229. package/dist/web/standalone/.next/static/chunks/app/api/projects/route-d83ba70a25a85472.js +1 -0
  230. package/dist/web/standalone/.next/static/chunks/app/api/recovery/route-d83ba70a25a85472.js +1 -0
  231. package/dist/web/standalone/.next/static/chunks/app/api/remote-questions/route-d83ba70a25a85472.js +1 -0
  232. package/dist/web/standalone/.next/static/chunks/app/api/session/browser/route-d83ba70a25a85472.js +1 -0
  233. package/dist/web/standalone/.next/static/chunks/app/api/session/command/route-d83ba70a25a85472.js +1 -0
  234. package/dist/web/standalone/.next/static/chunks/app/api/session/events/route-d83ba70a25a85472.js +1 -0
  235. package/dist/web/standalone/.next/static/chunks/app/api/session/manage/route-d83ba70a25a85472.js +1 -0
  236. package/dist/web/standalone/.next/static/chunks/app/api/settings-data/route-d83ba70a25a85472.js +1 -0
  237. package/dist/web/standalone/.next/static/chunks/app/api/shutdown/route-d83ba70a25a85472.js +1 -0
  238. package/dist/web/standalone/.next/static/chunks/app/api/skill-health/route-d83ba70a25a85472.js +1 -0
  239. package/dist/web/standalone/.next/static/chunks/app/api/steer/route-d83ba70a25a85472.js +1 -0
  240. package/dist/web/standalone/.next/static/chunks/app/api/switch-root/route-d83ba70a25a85472.js +1 -0
  241. package/dist/web/standalone/.next/static/chunks/app/api/terminal/input/route-d83ba70a25a85472.js +1 -0
  242. package/dist/web/standalone/.next/static/chunks/app/api/terminal/resize/route-d83ba70a25a85472.js +1 -0
  243. package/dist/web/standalone/.next/static/chunks/app/api/terminal/sessions/route-d83ba70a25a85472.js +1 -0
  244. package/dist/web/standalone/.next/static/chunks/app/api/terminal/stream/route-d83ba70a25a85472.js +1 -0
  245. package/dist/web/standalone/.next/static/chunks/app/api/terminal/upload/route-d83ba70a25a85472.js +1 -0
  246. package/dist/web/standalone/.next/static/chunks/app/api/undo/route-d83ba70a25a85472.js +1 -0
  247. package/dist/web/standalone/.next/static/chunks/app/api/update/route-d83ba70a25a85472.js +1 -0
  248. package/dist/web/standalone/.next/static/chunks/app/api/visualizer/route-d83ba70a25a85472.js +1 -0
  249. package/dist/web/standalone/.next/static/chunks/app/layout-a16c7a7ecdf0c2cf.js +1 -0
  250. package/dist/web/standalone/.next/static/chunks/app/page-b9367c5ae13b99c6.js +1 -0
  251. package/dist/web/standalone/.next/static/chunks/{main-app-2f2ee7b85712c2bd.js → main-app-fdab67f7802d7832.js} +1 -1
  252. package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/app-error-d83ba70a25a85472.js +1 -0
  253. package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/forbidden-d83ba70a25a85472.js +1 -0
  254. package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/global-error-459824ffb8c323dd.js +1 -0
  255. package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/not-found-d83ba70a25a85472.js +1 -0
  256. package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/unauthorized-d83ba70a25a85472.js +1 -0
  257. package/dist/web/standalone/.next/static/chunks/{webpack-fa307370fcf9fb2c.js → webpack-9014b5adb127a98a.js} +1 -1
  258. package/dist/web/standalone/.next/static/css/8a727f372cf53002.css +1 -0
  259. package/dist/web/standalone/node_modules/node-pty/build/Makefile +2 -2
  260. package/dist/web/standalone/node_modules/node-pty/build/Release/pty.node +0 -0
  261. package/dist/web/standalone/node_modules/node-pty/build/pty.target.mk +14 -14
  262. package/dist/web/standalone/node_modules/node-pty/node-addon-api/node_addon_api.target.mk +14 -14
  263. package/dist/web/standalone/node_modules/node-pty/node-addon-api/node_addon_api_except.target.mk +14 -14
  264. package/dist/web/standalone/node_modules/node-pty/node-addon-api/node_addon_api_maybe.target.mk +14 -14
  265. package/dist/web/standalone/server.js +1 -1
  266. package/package.json +4 -4
  267. package/packages/pi-ai/dist/models.custom.d.ts +173 -0
  268. package/packages/pi-ai/dist/models.custom.d.ts.map +1 -0
  269. package/packages/pi-ai/dist/models.custom.js +170 -0
  270. package/packages/pi-ai/dist/models.custom.js.map +1 -0
  271. package/packages/pi-ai/dist/models.d.ts.map +1 -1
  272. package/packages/pi-ai/dist/models.js +16 -1
  273. package/packages/pi-ai/dist/models.js.map +1 -1
  274. package/packages/pi-ai/dist/models.test.d.ts +2 -0
  275. package/packages/pi-ai/dist/models.test.d.ts.map +1 -0
  276. package/packages/pi-ai/dist/models.test.js +67 -0
  277. package/packages/pi-ai/dist/models.test.js.map +1 -0
  278. package/packages/pi-ai/src/models.custom.ts +172 -0
  279. package/packages/pi-ai/src/models.test.ts +85 -0
  280. package/packages/pi-ai/src/models.ts +17 -1
  281. package/packages/pi-coding-agent/dist/core/agent-session.d.ts +10 -3
  282. package/packages/pi-coding-agent/dist/core/agent-session.d.ts.map +1 -1
  283. package/packages/pi-coding-agent/dist/core/agent-session.js +21 -34
  284. package/packages/pi-coding-agent/dist/core/agent-session.js.map +1 -1
  285. package/packages/pi-coding-agent/dist/core/auth-storage.test.js +6 -8
  286. package/packages/pi-coding-agent/dist/core/auth-storage.test.js.map +1 -1
  287. package/packages/pi-coding-agent/dist/core/compaction/branch-summarization.d.ts +2 -2
  288. package/packages/pi-coding-agent/dist/core/compaction/branch-summarization.d.ts.map +1 -1
  289. package/packages/pi-coding-agent/dist/core/compaction/branch-summarization.js.map +1 -1
  290. package/packages/pi-coding-agent/dist/core/compaction/compaction.d.ts +2 -2
  291. package/packages/pi-coding-agent/dist/core/compaction/compaction.d.ts.map +1 -1
  292. package/packages/pi-coding-agent/dist/core/compaction/compaction.js.map +1 -1
  293. package/packages/pi-coding-agent/dist/core/compaction-orchestrator.js +4 -4
  294. package/packages/pi-coding-agent/dist/core/compaction-orchestrator.js.map +1 -1
  295. package/packages/pi-coding-agent/dist/core/extensions/index.d.ts +1 -1
  296. package/packages/pi-coding-agent/dist/core/extensions/index.d.ts.map +1 -1
  297. package/packages/pi-coding-agent/dist/core/extensions/index.js.map +1 -1
  298. package/packages/pi-coding-agent/dist/core/extensions/loader.d.ts +6 -0
  299. package/packages/pi-coding-agent/dist/core/extensions/loader.d.ts.map +1 -1
  300. package/packages/pi-coding-agent/dist/core/extensions/loader.js +80 -0
  301. package/packages/pi-coding-agent/dist/core/extensions/loader.js.map +1 -1
  302. package/packages/pi-coding-agent/dist/core/extensions/loader.test.js +63 -0
  303. package/packages/pi-coding-agent/dist/core/extensions/loader.test.js.map +1 -1
  304. package/packages/pi-coding-agent/dist/core/extensions/runner.test.js +24 -26
  305. package/packages/pi-coding-agent/dist/core/extensions/runner.test.js.map +1 -1
  306. package/packages/pi-coding-agent/dist/core/extensions/types.d.ts +37 -0
  307. package/packages/pi-coding-agent/dist/core/extensions/types.d.ts.map +1 -1
  308. package/packages/pi-coding-agent/dist/core/extensions/types.js.map +1 -1
  309. package/packages/pi-coding-agent/dist/core/fallback-resolver.d.ts.map +1 -1
  310. package/packages/pi-coding-agent/dist/core/fallback-resolver.js +2 -3
  311. package/packages/pi-coding-agent/dist/core/fallback-resolver.js.map +1 -1
  312. package/packages/pi-coding-agent/dist/core/fallback-resolver.test.js +12 -2
  313. package/packages/pi-coding-agent/dist/core/fallback-resolver.test.js.map +1 -1
  314. package/packages/pi-coding-agent/dist/core/fs-utils.test.js +29 -48
  315. package/packages/pi-coding-agent/dist/core/fs-utils.test.js.map +1 -1
  316. package/packages/pi-coding-agent/dist/core/lifecycle-hooks.d.ts +38 -0
  317. package/packages/pi-coding-agent/dist/core/lifecycle-hooks.d.ts.map +1 -0
  318. package/packages/pi-coding-agent/dist/core/lifecycle-hooks.js +192 -0
  319. package/packages/pi-coding-agent/dist/core/lifecycle-hooks.js.map +1 -0
  320. package/packages/pi-coding-agent/dist/core/lsp/client.d.ts +5 -0
  321. package/packages/pi-coding-agent/dist/core/lsp/client.d.ts.map +1 -1
  322. package/packages/pi-coding-agent/dist/core/lsp/client.js +69 -21
  323. package/packages/pi-coding-agent/dist/core/lsp/client.js.map +1 -1
  324. package/packages/pi-coding-agent/dist/core/model-registry-auth-mode.test.d.ts +2 -0
  325. package/packages/pi-coding-agent/dist/core/model-registry-auth-mode.test.d.ts.map +1 -0
  326. package/packages/pi-coding-agent/dist/core/model-registry-auth-mode.test.js +255 -0
  327. package/packages/pi-coding-agent/dist/core/model-registry-auth-mode.test.js.map +1 -0
  328. package/packages/pi-coding-agent/dist/core/model-registry.d.ts +15 -0
  329. package/packages/pi-coding-agent/dist/core/model-registry.d.ts.map +1 -1
  330. package/packages/pi-coding-agent/dist/core/model-registry.js +40 -3
  331. package/packages/pi-coding-agent/dist/core/model-registry.js.map +1 -1
  332. package/packages/pi-coding-agent/dist/core/package-commands.d.ts +25 -0
  333. package/packages/pi-coding-agent/dist/core/package-commands.d.ts.map +1 -0
  334. package/packages/pi-coding-agent/dist/core/package-commands.js +253 -0
  335. package/packages/pi-coding-agent/dist/core/package-commands.js.map +1 -0
  336. package/packages/pi-coding-agent/dist/core/package-commands.test.d.ts +2 -0
  337. package/packages/pi-coding-agent/dist/core/package-commands.test.d.ts.map +1 -0
  338. package/packages/pi-coding-agent/dist/core/package-commands.test.js +225 -0
  339. package/packages/pi-coding-agent/dist/core/package-commands.test.js.map +1 -0
  340. package/packages/pi-coding-agent/dist/core/resolve-config-value.test.js +34 -44
  341. package/packages/pi-coding-agent/dist/core/resolve-config-value.test.js.map +1 -1
  342. package/packages/pi-coding-agent/dist/core/sdk.d.ts.map +1 -1
  343. package/packages/pi-coding-agent/dist/core/sdk.js +4 -0
  344. package/packages/pi-coding-agent/dist/core/sdk.js.map +1 -1
  345. package/packages/pi-coding-agent/dist/core/session-manager.test.js +30 -34
  346. package/packages/pi-coding-agent/dist/core/session-manager.test.js.map +1 -1
  347. package/packages/pi-coding-agent/dist/core/tools/edit-diff.test.js +10 -12
  348. package/packages/pi-coding-agent/dist/core/tools/edit-diff.test.js.map +1 -1
  349. package/packages/pi-coding-agent/dist/index.d.ts +3 -1
  350. package/packages/pi-coding-agent/dist/index.d.ts.map +1 -1
  351. package/packages/pi-coding-agent/dist/index.js +1 -0
  352. package/packages/pi-coding-agent/dist/index.js.map +1 -1
  353. package/packages/pi-coding-agent/dist/main.d.ts.map +1 -1
  354. package/packages/pi-coding-agent/dist/main.js +11 -199
  355. package/packages/pi-coding-agent/dist/main.js.map +1 -1
  356. package/packages/pi-coding-agent/dist/modes/interactive/components/footer.d.ts +6 -0
  357. package/packages/pi-coding-agent/dist/modes/interactive/components/footer.d.ts.map +1 -1
  358. package/packages/pi-coding-agent/dist/modes/interactive/components/footer.js +21 -0
  359. package/packages/pi-coding-agent/dist/modes/interactive/components/footer.js.map +1 -1
  360. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.d.ts +1 -1
  361. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  362. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.js +8 -15
  363. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.js.map +1 -1
  364. package/packages/pi-coding-agent/dist/modes/print-mode.d.ts.map +1 -1
  365. package/packages/pi-coding-agent/dist/modes/print-mode.js +45 -34
  366. package/packages/pi-coding-agent/dist/modes/print-mode.js.map +1 -1
  367. package/packages/pi-coding-agent/dist/modes/rpc/rpc-client.d.ts +1 -0
  368. package/packages/pi-coding-agent/dist/modes/rpc/rpc-client.d.ts.map +1 -1
  369. package/packages/pi-coding-agent/dist/modes/rpc/rpc-client.js +7 -2
  370. package/packages/pi-coding-agent/dist/modes/rpc/rpc-client.js.map +1 -1
  371. package/packages/pi-coding-agent/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  372. package/packages/pi-coding-agent/dist/modes/rpc/rpc-mode.js +2 -1
  373. package/packages/pi-coding-agent/dist/modes/rpc/rpc-mode.js.map +1 -1
  374. package/packages/pi-coding-agent/dist/resources/extensions/memory/storage.test.js +43 -47
  375. package/packages/pi-coding-agent/dist/resources/extensions/memory/storage.test.js.map +1 -1
  376. package/packages/pi-coding-agent/package.json +1 -1
  377. package/packages/pi-coding-agent/src/core/agent-session.ts +26 -37
  378. package/packages/pi-coding-agent/src/core/auth-storage.test.ts +7 -7
  379. package/packages/pi-coding-agent/src/core/compaction/branch-summarization.ts +2 -2
  380. package/packages/pi-coding-agent/src/core/compaction/compaction.ts +3 -3
  381. package/packages/pi-coding-agent/src/core/compaction-orchestrator.ts +4 -4
  382. package/packages/pi-coding-agent/src/core/extensions/index.ts +5 -0
  383. package/packages/pi-coding-agent/src/core/extensions/loader.test.ts +96 -0
  384. package/packages/pi-coding-agent/src/core/extensions/loader.ts +89 -0
  385. package/packages/pi-coding-agent/src/core/extensions/runner.test.ts +26 -26
  386. package/packages/pi-coding-agent/src/core/extensions/types.ts +44 -0
  387. package/packages/pi-coding-agent/src/core/fallback-resolver.test.ts +15 -2
  388. package/packages/pi-coding-agent/src/core/fallback-resolver.ts +2 -3
  389. package/packages/pi-coding-agent/src/core/fs-utils.test.ts +31 -43
  390. package/packages/pi-coding-agent/src/core/lifecycle-hooks.ts +274 -0
  391. package/packages/pi-coding-agent/src/core/lsp/client.ts +83 -21
  392. package/packages/pi-coding-agent/src/core/model-registry-auth-mode.test.ts +288 -0
  393. package/packages/pi-coding-agent/src/core/model-registry.ts +39 -3
  394. package/packages/pi-coding-agent/src/core/package-commands.test.ts +240 -0
  395. package/packages/pi-coding-agent/src/core/package-commands.ts +310 -0
  396. package/packages/pi-coding-agent/src/core/resolve-config-value.test.ts +40 -45
  397. package/packages/pi-coding-agent/src/core/sdk.ts +4 -0
  398. package/packages/pi-coding-agent/src/core/session-manager.test.ts +33 -33
  399. package/packages/pi-coding-agent/src/core/tools/edit-diff.test.ts +17 -17
  400. package/packages/pi-coding-agent/src/index.ts +7 -0
  401. package/packages/pi-coding-agent/src/main.ts +11 -232
  402. package/packages/pi-coding-agent/src/modes/interactive/components/footer.ts +20 -0
  403. package/packages/pi-coding-agent/src/modes/interactive/theme/theme.ts +9 -16
  404. package/packages/pi-coding-agent/src/modes/print-mode.ts +42 -32
  405. package/packages/pi-coding-agent/src/modes/rpc/rpc-client.ts +8 -2
  406. package/packages/pi-coding-agent/src/modes/rpc/rpc-mode.ts +2 -1
  407. package/packages/pi-coding-agent/src/resources/extensions/memory/storage.test.ts +74 -74
  408. package/pkg/dist/modes/interactive/theme/theme.d.ts +1 -1
  409. package/pkg/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  410. package/pkg/dist/modes/interactive/theme/theme.js +8 -15
  411. package/pkg/dist/modes/interactive/theme/theme.js.map +1 -1
  412. package/pkg/package.json +1 -1
  413. package/src/resources/extensions/bg-shell/overlay.ts +4 -0
  414. package/src/resources/extensions/github-sync/sync.ts +2 -1
  415. package/src/resources/extensions/gsd/auto/loop-deps.ts +0 -8
  416. package/src/resources/extensions/gsd/auto/loop.ts +0 -2
  417. package/src/resources/extensions/gsd/auto/phases.ts +7 -20
  418. package/src/resources/extensions/gsd/auto/types.ts +0 -1
  419. package/src/resources/extensions/gsd/auto-dashboard.ts +20 -16
  420. package/src/resources/extensions/gsd/auto-direct-dispatch.ts +34 -19
  421. package/src/resources/extensions/gsd/auto-dispatch.ts +38 -21
  422. package/src/resources/extensions/gsd/auto-post-unit.ts +150 -15
  423. package/src/resources/extensions/gsd/auto-prompts.ts +186 -103
  424. package/src/resources/extensions/gsd/auto-recovery.ts +77 -142
  425. package/src/resources/extensions/gsd/auto-start.ts +14 -0
  426. package/src/resources/extensions/gsd/auto-supervisor.ts +14 -0
  427. package/src/resources/extensions/gsd/auto-timeout-recovery.ts +6 -7
  428. package/src/resources/extensions/gsd/auto-verification.ts +4 -9
  429. package/src/resources/extensions/gsd/auto-worktree.ts +126 -30
  430. package/src/resources/extensions/gsd/auto.ts +0 -9
  431. package/src/resources/extensions/gsd/bootstrap/db-tools.ts +675 -4
  432. package/src/resources/extensions/gsd/bootstrap/dynamic-tools.ts +31 -3
  433. package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +7 -0
  434. package/src/resources/extensions/gsd/commands/catalog.ts +3 -1
  435. package/src/resources/extensions/gsd/commands/handlers/ops.ts +15 -1
  436. package/src/resources/extensions/gsd/commands/handlers/workflow.ts +8 -0
  437. package/src/resources/extensions/gsd/commands-handlers.ts +1 -1
  438. package/src/resources/extensions/gsd/commands-maintenance.ts +86 -3
  439. package/src/resources/extensions/gsd/dashboard-overlay.ts +17 -13
  440. package/src/resources/extensions/gsd/db-writer.ts +105 -4
  441. package/src/resources/extensions/gsd/dispatch-guard.ts +32 -30
  442. package/src/resources/extensions/gsd/doctor-checks.ts +25 -11
  443. package/src/resources/extensions/gsd/doctor-environment.ts +31 -0
  444. package/src/resources/extensions/gsd/doctor-types.ts +0 -23
  445. package/src/resources/extensions/gsd/doctor.ts +45 -295
  446. package/src/resources/extensions/gsd/file-watcher.ts +4 -1
  447. package/src/resources/extensions/gsd/files.ts +16 -220
  448. package/src/resources/extensions/gsd/git-service.ts +4 -0
  449. package/src/resources/extensions/gsd/gitignore.ts +4 -0
  450. package/src/resources/extensions/gsd/gsd-db.ts +1157 -370
  451. package/src/resources/extensions/gsd/guided-flow.ts +20 -8
  452. package/src/resources/extensions/gsd/markdown-renderer.ts +1098 -0
  453. package/src/resources/extensions/gsd/md-importer.ts +211 -2
  454. package/src/resources/extensions/gsd/native-git-bridge.ts +12 -1
  455. package/src/resources/extensions/gsd/parallel-eligibility.ts +14 -18
  456. package/src/resources/extensions/gsd/parallel-orchestrator.ts +43 -0
  457. package/src/resources/extensions/gsd/parsers-legacy.ts +271 -0
  458. package/src/resources/extensions/gsd/preferences-types.ts +3 -0
  459. package/src/resources/extensions/gsd/preferences-validation.ts +9 -0
  460. package/src/resources/extensions/gsd/preferences.ts +1 -0
  461. package/src/resources/extensions/gsd/prompts/complete-slice.md +22 -9
  462. package/src/resources/extensions/gsd/prompts/discuss.md +2 -2
  463. package/src/resources/extensions/gsd/prompts/execute-task.md +15 -5
  464. package/src/resources/extensions/gsd/prompts/guided-complete-slice.md +1 -1
  465. package/src/resources/extensions/gsd/prompts/guided-execute-task.md +1 -1
  466. package/src/resources/extensions/gsd/prompts/guided-plan-milestone.md +1 -1
  467. package/src/resources/extensions/gsd/prompts/plan-milestone.md +6 -10
  468. package/src/resources/extensions/gsd/prompts/plan-slice.md +4 -7
  469. package/src/resources/extensions/gsd/prompts/reactive-execute.md +3 -3
  470. package/src/resources/extensions/gsd/prompts/reassess-roadmap.md +6 -7
  471. package/src/resources/extensions/gsd/prompts/replan-slice.md +6 -6
  472. package/src/resources/extensions/gsd/reactive-graph.ts +33 -3
  473. package/src/resources/extensions/gsd/skill-health.ts +2 -1
  474. package/src/resources/extensions/gsd/state.ts +547 -29
  475. package/src/resources/extensions/gsd/tests/all-milestones-complete-merge.test.ts +99 -99
  476. package/src/resources/extensions/gsd/tests/atomic-task-closeout.test.ts +8 -120
  477. package/src/resources/extensions/gsd/tests/auto-lock-creation.test.ts +14 -16
  478. package/src/resources/extensions/gsd/tests/auto-loop.test.ts +20 -11
  479. package/src/resources/extensions/gsd/tests/auto-paused-session-validation.test.ts +43 -57
  480. package/src/resources/extensions/gsd/tests/auto-preflight.test.ts +11 -13
  481. package/src/resources/extensions/gsd/tests/auto-recovery.test.ts +600 -513
  482. package/src/resources/extensions/gsd/tests/auto-secrets-gate.test.ts +73 -75
  483. package/src/resources/extensions/gsd/tests/auto-start-needs-discussion.test.ts +34 -56
  484. package/src/resources/extensions/gsd/tests/auto-stash-merge.test.ts +121 -0
  485. package/src/resources/extensions/gsd/tests/auto-worktree-milestone-merge.test.ts +540 -668
  486. package/src/resources/extensions/gsd/tests/auto-worktree.test.ts +165 -143
  487. package/src/resources/extensions/gsd/tests/cache-staleness-regression.test.ts +29 -52
  488. package/src/resources/extensions/gsd/tests/captures.test.ts +148 -176
  489. package/src/resources/extensions/gsd/tests/claude-import-tui.test.ts +32 -33
  490. package/src/resources/extensions/gsd/tests/collect-from-manifest.test.ts +141 -143
  491. package/src/resources/extensions/gsd/tests/commands-inspect-open-db.test.ts +25 -25
  492. package/src/resources/extensions/gsd/tests/commands-logs.test.ts +81 -81
  493. package/src/resources/extensions/gsd/tests/complete-milestone.test.ts +39 -60
  494. package/src/resources/extensions/gsd/tests/complete-slice.test.ts +375 -0
  495. package/src/resources/extensions/gsd/tests/complete-task.test.ts +387 -0
  496. package/src/resources/extensions/gsd/tests/context-store.test.ts +354 -367
  497. package/src/resources/extensions/gsd/tests/continue-here.test.ts +68 -72
  498. package/src/resources/extensions/gsd/tests/cost-projection.test.ts +92 -106
  499. package/src/resources/extensions/gsd/tests/crash-recovery.test.ts +27 -35
  500. package/src/resources/extensions/gsd/tests/custom-engine-loop-integration.test.ts +0 -2
  501. package/src/resources/extensions/gsd/tests/dashboard-budget.test.ts +220 -237
  502. package/src/resources/extensions/gsd/tests/db-writer.test.ts +390 -420
  503. package/src/resources/extensions/gsd/tests/definition-loader.test.ts +76 -92
  504. package/src/resources/extensions/gsd/tests/derive-state-crossval.test.ts +512 -0
  505. package/src/resources/extensions/gsd/tests/derive-state-db.test.ts +644 -84
  506. package/src/resources/extensions/gsd/tests/derive-state-deps.test.ts +78 -101
  507. package/src/resources/extensions/gsd/tests/derive-state.test.ts +192 -227
  508. package/src/resources/extensions/gsd/tests/detection.test.ts +232 -278
  509. package/src/resources/extensions/gsd/tests/dev-engine-wrapper.test.ts +30 -34
  510. package/src/resources/extensions/gsd/tests/dispatch-guard.test.ts +192 -161
  511. package/src/resources/extensions/gsd/tests/dispatch-missing-task-plans.test.ts +43 -49
  512. package/src/resources/extensions/gsd/tests/dispatch-uat-last-completed.test.ts +28 -32
  513. package/src/resources/extensions/gsd/tests/doctor-completion-deferral.test.ts +30 -90
  514. package/src/resources/extensions/gsd/tests/doctor-delimiter-fix.test.ts +34 -38
  515. package/src/resources/extensions/gsd/tests/doctor-enhancements.test.ts +57 -80
  516. package/src/resources/extensions/gsd/tests/doctor-environment-worktree.test.ts +164 -0
  517. package/src/resources/extensions/gsd/tests/doctor-environment.test.ts +72 -97
  518. package/src/resources/extensions/gsd/tests/doctor-fixlevel.test.ts +55 -153
  519. package/src/resources/extensions/gsd/tests/doctor-git.test.ts +104 -145
  520. package/src/resources/extensions/gsd/tests/doctor-proactive.test.ts +84 -106
  521. package/src/resources/extensions/gsd/tests/doctor-roadmap-summary-atomicity.test.ts +53 -97
  522. package/src/resources/extensions/gsd/tests/doctor-runtime.test.ts +72 -93
  523. package/src/resources/extensions/gsd/tests/doctor.test.ts +109 -149
  524. package/src/resources/extensions/gsd/tests/ensure-db-open.test.ts +123 -131
  525. package/src/resources/extensions/gsd/tests/exit-command.test.ts +20 -24
  526. package/src/resources/extensions/gsd/tests/feature-branch-lifecycle-integration.test.ts +48 -57
  527. package/src/resources/extensions/gsd/tests/files-loadfile-eisdir.test.ts +5 -7
  528. package/src/resources/extensions/gsd/tests/flag-file-db.test.ts +278 -0
  529. package/src/resources/extensions/gsd/tests/freeform-decisions.test.ts +232 -0
  530. package/src/resources/extensions/gsd/tests/git-locale.test.ts +13 -27
  531. package/src/resources/extensions/gsd/tests/git-service.test.ts +291 -390
  532. package/src/resources/extensions/gsd/tests/gitignore-tracked-gsd.test.ts +31 -39
  533. package/src/resources/extensions/gsd/tests/graph-operations.test.ts +63 -69
  534. package/src/resources/extensions/gsd/tests/gsd-db.test.ts +255 -264
  535. package/src/resources/extensions/gsd/tests/gsd-inspect.test.ts +108 -119
  536. package/src/resources/extensions/gsd/tests/gsd-recover.test.ts +440 -0
  537. package/src/resources/extensions/gsd/tests/gsd-tools.test.ts +229 -262
  538. package/src/resources/extensions/gsd/tests/headless-answers.test.ts +13 -13
  539. package/src/resources/extensions/gsd/tests/health-widget.test.ts +29 -37
  540. package/src/resources/extensions/gsd/tests/idle-recovery.test.ts +81 -270
  541. package/src/resources/extensions/gsd/tests/init-wizard.test.ts +16 -18
  542. package/src/resources/extensions/gsd/tests/integration-edge.test.ts +41 -46
  543. package/src/resources/extensions/gsd/tests/integration-lifecycle.test.ts +42 -53
  544. package/src/resources/extensions/gsd/tests/integration-mixed-milestones.test.ts +75 -91
  545. package/src/resources/extensions/gsd/tests/integration-proof.test.ts +643 -0
  546. package/src/resources/extensions/gsd/tests/journal-integration.test.ts +0 -3
  547. package/src/resources/extensions/gsd/tests/markdown-renderer.test.ts +1161 -0
  548. package/src/resources/extensions/gsd/tests/md-importer.test.ts +101 -125
  549. package/src/resources/extensions/gsd/tests/memory-extractor.test.ts +45 -54
  550. package/src/resources/extensions/gsd/tests/memory-store.test.ts +81 -94
  551. package/src/resources/extensions/gsd/tests/migrate-command.test.ts +57 -66
  552. package/src/resources/extensions/gsd/tests/migrate-hierarchy.test.ts +429 -0
  553. package/src/resources/extensions/gsd/tests/migrate-parser.test.ts +161 -170
  554. package/src/resources/extensions/gsd/tests/migrate-transformer.test.ts +125 -141
  555. package/src/resources/extensions/gsd/tests/migrate-validator-parsers.test.ts +107 -131
  556. package/src/resources/extensions/gsd/tests/migrate-writer-integration.test.ts +89 -97
  557. package/src/resources/extensions/gsd/tests/migrate-writer.test.ts +127 -164
  558. package/src/resources/extensions/gsd/tests/must-have-parser.test.ts +81 -94
  559. package/src/resources/extensions/gsd/tests/none-mode-gates.test.ts +35 -36
  560. package/src/resources/extensions/gsd/tests/overrides.test.ts +99 -106
  561. package/src/resources/extensions/gsd/tests/parallel-crash-recovery.test.ts +40 -47
  562. package/src/resources/extensions/gsd/tests/parallel-worker-monitoring.test.ts +25 -28
  563. package/src/resources/extensions/gsd/tests/parallel-workers-multi-milestone-e2e.test.ts +66 -83
  564. package/src/resources/extensions/gsd/tests/park-edge-cases.test.ts +54 -77
  565. package/src/resources/extensions/gsd/tests/park-milestone.test.ts +68 -115
  566. package/src/resources/extensions/gsd/tests/parsers.test.ts +548 -612
  567. package/src/resources/extensions/gsd/tests/paths.test.ts +72 -87
  568. package/src/resources/extensions/gsd/tests/plan-milestone.test.ts +176 -113
  569. package/src/resources/extensions/gsd/tests/plan-slice-prompt.test.ts +7 -0
  570. package/src/resources/extensions/gsd/tests/plan-slice.test.ts +179 -0
  571. package/src/resources/extensions/gsd/tests/plan-task.test.ts +145 -0
  572. package/src/resources/extensions/gsd/tests/planning-crossval.test.ts +305 -0
  573. package/src/resources/extensions/gsd/tests/post-unit-hooks.test.ts +77 -117
  574. package/src/resources/extensions/gsd/tests/prompt-contracts.test.ts +139 -0
  575. package/src/resources/extensions/gsd/tests/prompt-db.test.ts +56 -56
  576. package/src/resources/extensions/gsd/tests/queue-draft-detection.test.ts +93 -119
  577. package/src/resources/extensions/gsd/tests/queue-order.test.ts +70 -82
  578. package/src/resources/extensions/gsd/tests/queue-reorder-e2e.test.ts +42 -55
  579. package/src/resources/extensions/gsd/tests/quick-auto-guard.test.ts +100 -0
  580. package/src/resources/extensions/gsd/tests/quick-branch-lifecycle.test.ts +45 -73
  581. package/src/resources/extensions/gsd/tests/reassess-handler.test.ts +325 -0
  582. package/src/resources/extensions/gsd/tests/reassess-prompt.test.ts +28 -38
  583. package/src/resources/extensions/gsd/tests/replan-handler.test.ts +410 -0
  584. package/src/resources/extensions/gsd/tests/replan-slice.test.ts +73 -80
  585. package/src/resources/extensions/gsd/tests/repo-identity-worktree.test.ts +71 -74
  586. package/src/resources/extensions/gsd/tests/requirements.test.ts +70 -75
  587. package/src/resources/extensions/gsd/tests/retry-state-reset.test.ts +44 -66
  588. package/src/resources/extensions/gsd/tests/roadmap-parse-regression.test.ts +114 -181
  589. package/src/resources/extensions/gsd/tests/roadmap-slices.test.ts +1 -1
  590. package/src/resources/extensions/gsd/tests/rogue-file-detection.test.ts +296 -0
  591. package/src/resources/extensions/gsd/tests/rule-registry.test.ts +63 -65
  592. package/src/resources/extensions/gsd/tests/run-uat.test.ts +66 -128
  593. package/src/resources/extensions/gsd/tests/schema-v9-sequence.test.ts +176 -0
  594. package/src/resources/extensions/gsd/tests/session-lock-multipath.test.ts +18 -25
  595. package/src/resources/extensions/gsd/tests/session-lock-regression.test.ts +37 -44
  596. package/src/resources/extensions/gsd/tests/shared-wal.test.ts +209 -0
  597. package/src/resources/extensions/gsd/tests/sqlite-unavailable-gate.test.ts +63 -0
  598. package/src/resources/extensions/gsd/tests/stalled-tool-recovery.test.ts +6 -8
  599. package/src/resources/extensions/gsd/tests/symlink-numbered-variants.test.ts +22 -28
  600. package/src/resources/extensions/gsd/tests/token-cost-display.test.ts +118 -0
  601. package/src/resources/extensions/gsd/tests/token-savings.test.ts +54 -56
  602. package/src/resources/extensions/gsd/tests/tool-call-loop-guard.test.ts +23 -25
  603. package/src/resources/extensions/gsd/tests/tool-naming.test.ts +19 -13
  604. package/src/resources/extensions/gsd/tests/undo.test.ts +321 -1
  605. package/src/resources/extensions/gsd/tests/unique-milestone-ids.test.ts +66 -82
  606. package/src/resources/extensions/gsd/tests/unit-runtime.test.ts +46 -47
  607. package/src/resources/extensions/gsd/tests/validate-milestone.test.ts +1 -1
  608. package/src/resources/extensions/gsd/tests/verification-evidence.test.ts +0 -142
  609. package/src/resources/extensions/gsd/tests/visualizer-critical-path.test.ts +20 -22
  610. package/src/resources/extensions/gsd/tests/visualizer-data.test.ts +84 -86
  611. package/src/resources/extensions/gsd/tests/visualizer-overlay.test.ts +41 -43
  612. package/src/resources/extensions/gsd/tests/visualizer-views.test.ts +94 -96
  613. package/src/resources/extensions/gsd/tests/windows-path-normalization.test.ts +11 -13
  614. package/src/resources/extensions/gsd/tests/worker-registry.test.ts +27 -29
  615. package/src/resources/extensions/gsd/tests/workflow-templates.test.ts +50 -52
  616. package/src/resources/extensions/gsd/tests/worktree-bugfix.test.ts +10 -13
  617. package/src/resources/extensions/gsd/tests/worktree-db-integration.test.ts +14 -18
  618. package/src/resources/extensions/gsd/tests/worktree-db.test.ts +38 -39
  619. package/src/resources/extensions/gsd/tests/worktree-e2e.test.ts +17 -21
  620. package/src/resources/extensions/gsd/tests/worktree-health-dispatch.test.ts +12 -5
  621. package/src/resources/extensions/gsd/tests/worktree-health.test.ts +25 -30
  622. package/src/resources/extensions/gsd/tests/worktree-integration.test.ts +30 -37
  623. package/src/resources/extensions/gsd/tests/worktree-symlink-removal.test.ts +15 -22
  624. package/src/resources/extensions/gsd/tests/worktree-sync-milestones.test.ts +59 -66
  625. package/src/resources/extensions/gsd/tests/worktree.test.ts +44 -50
  626. package/src/resources/extensions/gsd/tools/complete-milestone.ts +176 -0
  627. package/src/resources/extensions/gsd/tools/complete-slice.ts +300 -0
  628. package/src/resources/extensions/gsd/tools/complete-task.ts +245 -0
  629. package/src/resources/extensions/gsd/tools/plan-milestone.ts +249 -0
  630. package/src/resources/extensions/gsd/tools/plan-slice.ts +194 -0
  631. package/src/resources/extensions/gsd/tools/plan-task.ts +116 -0
  632. package/src/resources/extensions/gsd/tools/reassess-roadmap.ts +203 -0
  633. package/src/resources/extensions/gsd/tools/replan-slice.ts +192 -0
  634. package/src/resources/extensions/gsd/triage-resolution.ts +20 -1
  635. package/src/resources/extensions/gsd/types.ts +50 -0
  636. package/src/resources/extensions/gsd/undo.ts +247 -3
  637. package/src/resources/extensions/gsd/visualizer-data.ts +54 -17
  638. package/src/resources/extensions/gsd/workspace-index.ts +64 -46
  639. package/dist/resources/extensions/gsd/auto-observability.js +0 -56
  640. package/dist/resources/extensions/gsd/observability-validator.js +0 -422
  641. package/dist/resources/extensions/gsd/roadmap-mutations.js +0 -110
  642. package/dist/web/standalone/.next/static/VvclDCW6TAWjEyLU-EYL1/_buildManifest.js +0 -1
  643. package/dist/web/standalone/.next/static/chunks/app/_not-found/page-e07acdb7dd069836.js +0 -1
  644. package/dist/web/standalone/.next/static/chunks/app/api/bridge-terminal/stream/route-d07a2c023f1aef1e.js +0 -1
  645. package/dist/web/standalone/.next/static/chunks/app/api/browse-directories/route-d07a2c023f1aef1e.js +0 -1
  646. package/dist/web/standalone/.next/static/chunks/app/api/captures/route-d07a2c023f1aef1e.js +0 -1
  647. package/dist/web/standalone/.next/static/chunks/app/api/cleanup/route-d07a2c023f1aef1e.js +0 -1
  648. package/dist/web/standalone/.next/static/chunks/app/api/dev-mode/route-d07a2c023f1aef1e.js +0 -1
  649. package/dist/web/standalone/.next/static/chunks/app/api/doctor/route-d07a2c023f1aef1e.js +0 -1
  650. package/dist/web/standalone/.next/static/chunks/app/api/export-data/route-d07a2c023f1aef1e.js +0 -1
  651. package/dist/web/standalone/.next/static/chunks/app/api/files/route-d07a2c023f1aef1e.js +0 -1
  652. package/dist/web/standalone/.next/static/chunks/app/api/forensics/route-d07a2c023f1aef1e.js +0 -1
  653. package/dist/web/standalone/.next/static/chunks/app/api/git/route-d07a2c023f1aef1e.js +0 -1
  654. package/dist/web/standalone/.next/static/chunks/app/api/history/route-d07a2c023f1aef1e.js +0 -1
  655. package/dist/web/standalone/.next/static/chunks/app/api/hooks/route-d07a2c023f1aef1e.js +0 -1
  656. package/dist/web/standalone/.next/static/chunks/app/api/inspect/route-d07a2c023f1aef1e.js +0 -1
  657. package/dist/web/standalone/.next/static/chunks/app/api/knowledge/route-d07a2c023f1aef1e.js +0 -1
  658. package/dist/web/standalone/.next/static/chunks/app/api/live-state/route-d07a2c023f1aef1e.js +0 -1
  659. package/dist/web/standalone/.next/static/chunks/app/api/onboarding/route-d07a2c023f1aef1e.js +0 -1
  660. package/dist/web/standalone/.next/static/chunks/app/api/preferences/route-d07a2c023f1aef1e.js +0 -1
  661. package/dist/web/standalone/.next/static/chunks/app/api/projects/route-d07a2c023f1aef1e.js +0 -1
  662. package/dist/web/standalone/.next/static/chunks/app/api/recovery/route-d07a2c023f1aef1e.js +0 -1
  663. package/dist/web/standalone/.next/static/chunks/app/api/remote-questions/route-d07a2c023f1aef1e.js +0 -1
  664. package/dist/web/standalone/.next/static/chunks/app/api/session/browser/route-d07a2c023f1aef1e.js +0 -1
  665. package/dist/web/standalone/.next/static/chunks/app/api/session/command/route-d07a2c023f1aef1e.js +0 -1
  666. package/dist/web/standalone/.next/static/chunks/app/api/session/events/route-d07a2c023f1aef1e.js +0 -1
  667. package/dist/web/standalone/.next/static/chunks/app/api/session/manage/route-d07a2c023f1aef1e.js +0 -1
  668. package/dist/web/standalone/.next/static/chunks/app/api/settings-data/route-d07a2c023f1aef1e.js +0 -1
  669. package/dist/web/standalone/.next/static/chunks/app/api/shutdown/route-d07a2c023f1aef1e.js +0 -1
  670. package/dist/web/standalone/.next/static/chunks/app/api/skill-health/route-d07a2c023f1aef1e.js +0 -1
  671. package/dist/web/standalone/.next/static/chunks/app/api/steer/route-d07a2c023f1aef1e.js +0 -1
  672. package/dist/web/standalone/.next/static/chunks/app/api/terminal/input/route-d07a2c023f1aef1e.js +0 -1
  673. package/dist/web/standalone/.next/static/chunks/app/api/terminal/resize/route-d07a2c023f1aef1e.js +0 -1
  674. package/dist/web/standalone/.next/static/chunks/app/api/terminal/sessions/route-d07a2c023f1aef1e.js +0 -1
  675. package/dist/web/standalone/.next/static/chunks/app/api/terminal/stream/route-d07a2c023f1aef1e.js +0 -1
  676. package/dist/web/standalone/.next/static/chunks/app/api/terminal/upload/route-d07a2c023f1aef1e.js +0 -1
  677. package/dist/web/standalone/.next/static/chunks/app/api/undo/route-d07a2c023f1aef1e.js +0 -1
  678. package/dist/web/standalone/.next/static/chunks/app/api/update/route-d07a2c023f1aef1e.js +0 -1
  679. package/dist/web/standalone/.next/static/chunks/app/api/visualizer/route-d07a2c023f1aef1e.js +0 -1
  680. package/dist/web/standalone/.next/static/chunks/app/layout-745c6ed5fea5fb06.js +0 -1
  681. package/dist/web/standalone/.next/static/chunks/app/page-801b53eff6e83579.js +0 -1
  682. package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/app-error-d07a2c023f1aef1e.js +0 -1
  683. package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/forbidden-d07a2c023f1aef1e.js +0 -1
  684. package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/global-error-e6255954dccfcf0a.js +0 -1
  685. package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/not-found-d07a2c023f1aef1e.js +0 -1
  686. package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/unauthorized-d07a2c023f1aef1e.js +0 -1
  687. package/dist/web/standalone/.next/static/css/123c0bb039697968.css +0 -1
  688. package/src/resources/extensions/gsd/auto-observability.ts +0 -74
  689. package/src/resources/extensions/gsd/observability-validator.ts +0 -456
  690. package/src/resources/extensions/gsd/roadmap-mutations.ts +0 -134
  691. package/src/resources/extensions/gsd/tests/doctor-task-done-missing-summary-slice-loop.test.ts +0 -174
  692. package/src/resources/extensions/gsd/tests/plan-quality-validator.test.ts +0 -474
  693. /package/dist/web/standalone/.next/static/{VvclDCW6TAWjEyLU-EYL1 → alS4hoANx0TK4UVZY27da}/_ssgManifest.js +0 -0
@@ -4,90 +4,90 @@
4
4
  import { readFileSync } from "node:fs";
5
5
  import { join, dirname } from "node:path";
6
6
  import { fileURLToPath } from "node:url";
7
- import { createTestContext } from "./test-helpers.ts";
7
+ import { test } from 'node:test';
8
+ import assert from 'node:assert/strict';
8
9
 
9
10
  const __dirname = dirname(fileURLToPath(import.meta.url));
10
- const { assertTrue, assertEq, report } = createTestContext();
11
11
 
12
12
  const overlaySrc = readFileSync(join(__dirname, "..", "visualizer-overlay.ts"), "utf-8");
13
13
 
14
14
  console.log("\n=== Overlay: Tab Configuration ===");
15
15
 
16
- assertTrue(
16
+ assert.ok(
17
17
  overlaySrc.includes("TAB_COUNT = 10"),
18
18
  "TAB_COUNT is 10",
19
19
  );
20
20
 
21
- assertTrue(
21
+ assert.ok(
22
22
  overlaySrc.includes('"1 Progress"'),
23
23
  "has Progress tab label",
24
24
  );
25
25
 
26
- assertTrue(
26
+ assert.ok(
27
27
  overlaySrc.includes('"2 Timeline"'),
28
28
  "has Timeline tab label",
29
29
  );
30
30
 
31
- assertTrue(
31
+ assert.ok(
32
32
  overlaySrc.includes('"3 Deps"'),
33
33
  "has Deps tab label",
34
34
  );
35
35
 
36
- assertTrue(
36
+ assert.ok(
37
37
  overlaySrc.includes('"5 Health"'),
38
38
  "has Health tab label",
39
39
  );
40
40
 
41
- assertTrue(
41
+ assert.ok(
42
42
  overlaySrc.includes('"6 Agent"'),
43
43
  "has Agent tab label",
44
44
  );
45
45
 
46
- assertTrue(
46
+ assert.ok(
47
47
  overlaySrc.includes('"7 Changes"'),
48
48
  "has Changes tab label",
49
49
  );
50
50
 
51
- assertTrue(
51
+ assert.ok(
52
52
  overlaySrc.includes('"8 Knowledge"'),
53
53
  "has Knowledge tab label",
54
54
  );
55
55
 
56
- assertTrue(
56
+ assert.ok(
57
57
  overlaySrc.includes('"9 Captures"'),
58
58
  "has Captures tab label",
59
59
  );
60
60
 
61
- assertTrue(
61
+ assert.ok(
62
62
  overlaySrc.includes('"0 Export"'),
63
63
  "has Export tab label",
64
64
  );
65
65
 
66
66
  console.log("\n=== Overlay: Filter Mode ===");
67
67
 
68
- assertTrue(
68
+ assert.ok(
69
69
  overlaySrc.includes('filterMode = false'),
70
70
  "filterMode initialized to false",
71
71
  );
72
72
 
73
- assertTrue(
73
+ assert.ok(
74
74
  overlaySrc.includes('filterText = ""'),
75
75
  "filterText initialized to empty string",
76
76
  );
77
77
 
78
- assertTrue(
78
+ assert.ok(
79
79
  overlaySrc.includes('filterField:'),
80
80
  "has filterField state",
81
81
  );
82
82
 
83
83
  // Filter mode entry via "/"
84
- assertTrue(
84
+ assert.ok(
85
85
  overlaySrc.includes('data === "/"') || overlaySrc.includes("data === '/'"),
86
86
  "/ key enters filter mode",
87
87
  );
88
88
 
89
89
  // Filter field cycling via "f"
90
- assertTrue(
90
+ assert.ok(
91
91
  overlaySrc.includes('data === "f"') || overlaySrc.includes("data === 'f'"),
92
92
  "f key cycles filter field",
93
93
  );
@@ -95,143 +95,141 @@ assertTrue(
95
95
  console.log("\n=== Overlay: Tab Switching ===");
96
96
 
97
97
  // Supports 1-9,0 keys
98
- assertTrue(
98
+ assert.ok(
99
99
  overlaySrc.includes('"1234567890"'),
100
100
  "supports keys 1-9,0 for tab switching",
101
101
  );
102
102
 
103
103
  // Tab wraps with TAB_COUNT
104
- assertTrue(
104
+ assert.ok(
105
105
  overlaySrc.includes("% TAB_COUNT"),
106
106
  "tab key wraps around TAB_COUNT",
107
107
  );
108
108
 
109
- assertTrue(
109
+ assert.ok(
110
110
  overlaySrc.includes('Key.shift("tab")') || overlaySrc.includes("Key.shift('tab')"),
111
111
  "supports Shift+Tab for reverse tab switching",
112
112
  );
113
113
 
114
114
  console.log("\n=== Overlay: Page/Half-Page Scroll ===");
115
115
 
116
- assertTrue(
116
+ assert.ok(
117
117
  overlaySrc.includes("Key.pageUp"),
118
118
  "has Key.pageUp handler",
119
119
  );
120
120
 
121
- assertTrue(
121
+ assert.ok(
122
122
  overlaySrc.includes("Key.pageDown"),
123
123
  "has Key.pageDown handler",
124
124
  );
125
125
 
126
- assertTrue(
126
+ assert.ok(
127
127
  overlaySrc.includes('Key.ctrl("u")'),
128
128
  "has Ctrl+U half-page scroll",
129
129
  );
130
130
 
131
- assertTrue(
131
+ assert.ok(
132
132
  overlaySrc.includes('Key.ctrl("d")'),
133
133
  "has Ctrl+D half-page scroll",
134
134
  );
135
135
 
136
136
  console.log("\n=== Overlay: Mouse Support ===");
137
137
 
138
- assertTrue(
138
+ assert.ok(
139
139
  overlaySrc.includes("parseSGRMouse"),
140
140
  "has parseSGRMouse method",
141
141
  );
142
142
 
143
- assertTrue(
143
+ assert.ok(
144
144
  overlaySrc.includes("?1003h"),
145
145
  "enables mouse tracking in constructor",
146
146
  );
147
147
 
148
- assertTrue(
148
+ assert.ok(
149
149
  overlaySrc.includes("?1003l"),
150
150
  "disables mouse tracking in dispose",
151
151
  );
152
152
 
153
153
  console.log("\n=== Overlay: Collapsible Milestones ===");
154
154
 
155
- assertTrue(
155
+ assert.ok(
156
156
  overlaySrc.includes("collapsedMilestones"),
157
157
  "has collapsedMilestones state",
158
158
  );
159
159
 
160
160
  console.log("\n=== Overlay: Help Overlay ===");
161
161
 
162
- assertTrue(
162
+ assert.ok(
163
163
  overlaySrc.includes("showHelp"),
164
164
  "has showHelp state",
165
165
  );
166
166
 
167
- assertTrue(
167
+ assert.ok(
168
168
  overlaySrc.includes('data === "?"'),
169
169
  "? key toggles help",
170
170
  );
171
171
 
172
172
  console.log("\n=== Overlay: Export Key Interception ===");
173
173
 
174
- assertTrue(
174
+ assert.ok(
175
175
  overlaySrc.includes("activeTab === 9"),
176
176
  "export key handling checks for tab 0 (index 9)",
177
177
  );
178
178
 
179
- assertTrue(
179
+ assert.ok(
180
180
  overlaySrc.includes('handleExportKey'),
181
181
  "has handleExportKey method",
182
182
  );
183
183
 
184
- assertTrue(
184
+ assert.ok(
185
185
  overlaySrc.includes('"m"') && overlaySrc.includes('"j"') && overlaySrc.includes('"s"'),
186
186
  "handles m, j, s keys for export",
187
187
  );
188
188
 
189
189
  console.log("\n=== Overlay: Footer ===");
190
190
 
191
- assertTrue(
191
+ assert.ok(
192
192
  overlaySrc.includes("1-9,0"),
193
193
  "footer hint shows 1-9,0 tab range",
194
194
  );
195
195
 
196
- assertTrue(
196
+ assert.ok(
197
197
  overlaySrc.includes("PgUp/PgDn"),
198
198
  "footer hint mentions PgUp/PgDn",
199
199
  );
200
200
 
201
- assertTrue(
201
+ assert.ok(
202
202
  overlaySrc.includes("? help"),
203
203
  "footer hint mentions ? for help",
204
204
  );
205
205
 
206
206
  console.log("\n=== Overlay: Scroll Offsets ===");
207
207
 
208
- assertTrue(
208
+ assert.ok(
209
209
  overlaySrc.includes(`new Array(TAB_COUNT).fill(0)`),
210
210
  "scroll offsets sized to TAB_COUNT",
211
211
  );
212
212
 
213
213
  console.log("\n=== Overlay: Terminal Resize Handling ===");
214
214
 
215
- assertTrue(
215
+ assert.ok(
216
216
  overlaySrc.includes('resizeHandler'),
217
217
  "has resizeHandler property",
218
218
  );
219
219
 
220
- assertTrue(
220
+ assert.ok(
221
221
  overlaySrc.includes('"resize"'),
222
222
  "listens for resize events",
223
223
  );
224
224
 
225
- assertTrue(
225
+ assert.ok(
226
226
  overlaySrc.includes('removeListener("resize"'),
227
227
  "removes resize listener on dispose",
228
228
  );
229
229
 
230
230
  console.log("\n=== Overlay: Shared Imports ===");
231
231
 
232
- assertTrue(
232
+ assert.ok(
233
233
  overlaySrc.includes('from "../shared/mod.js"'),
234
234
  "imports from shared barrel",
235
235
  );
236
-
237
- report();
@@ -14,9 +14,9 @@ import {
14
14
  renderHealthView,
15
15
  } from "../visualizer-views.js";
16
16
  import type { VisualizerData } from "../visualizer-data.js";
17
- import { createTestContext } from "./test-helpers.ts";
17
+ import { test } from 'node:test';
18
+ import assert from 'node:assert/strict';
18
19
 
19
- const { assertEq, assertTrue, report } = createTestContext();
20
20
 
21
21
  // ─── Mock theme ─────────────────────────────────────────────────────────────
22
22
 
@@ -165,19 +165,19 @@ console.log("\n=== renderProgressView ===");
165
165
  });
166
166
 
167
167
  const lines = renderProgressView(data, mockTheme, 80);
168
- assertTrue(lines.length > 0, "progress view produces output");
169
- assertTrue(lines.some(l => l.includes("M001")), "shows milestone M001");
170
- assertTrue(lines.some(l => l.includes("S01")), "shows slice S01");
171
- assertTrue(lines.some(l => l.includes("T01")), "shows task T01 for active slice");
172
- assertTrue(lines.some(l => l.includes("M002")), "shows milestone M002");
173
- assertTrue(lines.some(l => l.includes("depends on M001")), "shows dependency note");
174
- assertTrue(lines.some(l => l.includes("30m")), "shows task estimate");
175
- assertTrue(lines.some(l => l.includes("Feature Snapshot")), "shows stats header");
176
- assertTrue(lines.some(l => l.includes("Missing slices")), "shows missing slices count");
177
- assertTrue(lines.some(l => l.includes("State Engine")), "shows missing slice preview");
178
- assertTrue(lines.some(l => l.includes("Updated (last 7 days)")), "shows updated count");
179
- assertTrue(lines.some(l => l.includes("Recent completions")), "shows recent completions section");
180
- assertTrue(lines.some(l => l.includes("Core structures assembled")), "shows recent one-liner entry");
168
+ assert.ok(lines.length > 0, "progress view produces output");
169
+ assert.ok(lines.some(l => l.includes("M001")), "shows milestone M001");
170
+ assert.ok(lines.some(l => l.includes("S01")), "shows slice S01");
171
+ assert.ok(lines.some(l => l.includes("T01")), "shows task T01 for active slice");
172
+ assert.ok(lines.some(l => l.includes("M002")), "shows milestone M002");
173
+ assert.ok(lines.some(l => l.includes("depends on M001")), "shows dependency note");
174
+ assert.ok(lines.some(l => l.includes("30m")), "shows task estimate");
175
+ assert.ok(lines.some(l => l.includes("Feature Snapshot")), "shows stats header");
176
+ assert.ok(lines.some(l => l.includes("Missing slices")), "shows missing slices count");
177
+ assert.ok(lines.some(l => l.includes("State Engine")), "shows missing slice preview");
178
+ assert.ok(lines.some(l => l.includes("Updated (last 7 days)")), "shows updated count");
179
+ assert.ok(lines.some(l => l.includes("Recent completions")), "shows recent completions section");
180
+ assert.ok(lines.some(l => l.includes("Core structures assembled")), "shows recent one-liner entry");
181
181
  }
182
182
 
183
183
  {
@@ -211,10 +211,10 @@ console.log("\n=== renderProgressView ===");
211
211
  });
212
212
 
213
213
  const lines = renderProgressView(data, mockTheme, 80);
214
- assertTrue(lines.some(l => l.includes("Discussion Status")), "shows discussion section");
215
- assertTrue(lines.some(l => l.includes("Discussed: 1")), "counts discussed milestones");
216
- assertTrue(lines.some(l => l.includes("Draft")), "shows draft badge");
217
- assertTrue(lines.some(l => l.includes("Pending")), "shows pending badge");
214
+ assert.ok(lines.some(l => l.includes("Discussion Status")), "shows discussion section");
215
+ assert.ok(lines.some(l => l.includes("Discussed: 1")), "counts discussed milestones");
216
+ assert.ok(lines.some(l => l.includes("Draft")), "shows draft badge");
217
+ assert.ok(lines.some(l => l.includes("Pending")), "shows pending badge");
218
218
  }
219
219
 
220
220
  // Verification badges
@@ -239,14 +239,14 @@ console.log("\n=== renderProgressView ===");
239
239
 
240
240
  const lines = renderProgressView(data, mockTheme, 80);
241
241
  // The verification badge should show check mark and warning
242
- assertTrue(lines.some(l => l.includes("S01")), "shows slice with verification");
242
+ assert.ok(lines.some(l => l.includes("S01")), "shows slice with verification");
243
243
  }
244
244
 
245
245
  {
246
246
  const data = makeVisualizerData({ milestones: [] });
247
247
  const lines = renderProgressView(data, mockTheme, 80);
248
- assertTrue(lines.some(l => l.includes("Feature Snapshot")), "shows stats snapshot even when no milestones");
249
- assertTrue(lines.some(l => l.includes("Missing slices")), "reports missing slices count");
248
+ assert.ok(lines.some(l => l.includes("Feature Snapshot")), "shows stats snapshot even when no milestones");
249
+ assert.ok(lines.some(l => l.includes("Missing slices")), "reports missing slices count");
250
250
  }
251
251
 
252
252
  // ─── Risk Heatmap ───────────────────────────────────────────────────────────
@@ -272,9 +272,9 @@ console.log("\n=== Risk Heatmap ===");
272
272
  });
273
273
 
274
274
  const lines = renderProgressView(data, mockTheme, 80);
275
- assertTrue(lines.some(l => l.includes("Risk Heatmap")), "heatmap header present");
276
- assertTrue(lines.some(l => l.includes("1 low, 1 med, 2 high")), "risk summary counts");
277
- assertTrue(lines.some(l => l.includes("1 high-risk not started")), "high-risk not started warning");
275
+ assert.ok(lines.some(l => l.includes("Risk Heatmap")), "heatmap header present");
276
+ assert.ok(lines.some(l => l.includes("1 low, 1 med, 2 high")), "risk summary counts");
277
+ assert.ok(lines.some(l => l.includes("1 high-risk not started")), "high-risk not started warning");
278
278
  }
279
279
 
280
280
  // ─── Search/Filter ──────────────────────────────────────────────────────────
@@ -305,11 +305,11 @@ console.log("\n=== Search/Filter ===");
305
305
  });
306
306
 
307
307
  const filtered = renderProgressView(data, mockTheme, 80, { text: "auth", field: "all" });
308
- assertTrue(filtered.some(l => l.includes("M001")), "filter shows matching milestone");
309
- assertTrue(filtered.some(l => l.includes("Filter (all): auth")), "filter indicator present");
308
+ assert.ok(filtered.some(l => l.includes("M001")), "filter shows matching milestone");
309
+ assert.ok(filtered.some(l => l.includes("Filter (all): auth")), "filter indicator present");
310
310
 
311
311
  const riskFiltered = renderProgressView(data, mockTheme, 80, { text: "high", field: "risk" });
312
- assertTrue(riskFiltered.some(l => l.includes("M001")), "risk filter shows milestone with high-risk slice");
312
+ assert.ok(riskFiltered.some(l => l.includes("M001")), "risk filter shows milestone with high-risk slice");
313
313
  }
314
314
 
315
315
  // ─── renderDepsView ─────────────────────────────────────────────────────────
@@ -354,13 +354,13 @@ console.log("\n=== renderDepsView ===");
354
354
  });
355
355
 
356
356
  const lines = renderDepsView(data, mockTheme, 80);
357
- assertTrue(lines.length > 0, "deps view produces output");
358
- assertTrue(lines.some(l => l.includes("M001") && l.includes("M002")), "shows milestone dep edge");
359
- assertTrue(lines.some(l => l.includes("S01") && l.includes("S02")), "shows slice dep edge");
360
- assertTrue(lines.some(l => l.includes("Critical Path")), "shows critical path section");
361
- assertTrue(lines.some(l => l.includes("[CRITICAL]")), "shows CRITICAL badge");
362
- assertTrue(lines.some(l => l.includes("Data Flow")), "shows data flow section");
363
- assertTrue(lines.some(l => l.includes("api-types")), "shows provides artifact");
357
+ assert.ok(lines.length > 0, "deps view produces output");
358
+ assert.ok(lines.some(l => l.includes("M001") && l.includes("M002")), "shows milestone dep edge");
359
+ assert.ok(lines.some(l => l.includes("S01") && l.includes("S02")), "shows slice dep edge");
360
+ assert.ok(lines.some(l => l.includes("Critical Path")), "shows critical path section");
361
+ assert.ok(lines.some(l => l.includes("[CRITICAL]")), "shows CRITICAL badge");
362
+ assert.ok(lines.some(l => l.includes("Data Flow")), "shows data flow section");
363
+ assert.ok(lines.some(l => l.includes("api-types")), "shows provides artifact");
364
364
  }
365
365
 
366
366
  {
@@ -371,7 +371,7 @@ console.log("\n=== renderDepsView ===");
371
371
  });
372
372
 
373
373
  const lines = renderDepsView(data, mockTheme, 80);
374
- assertTrue(lines.some(l => l.includes("No milestone dependencies")), "shows no-deps message");
374
+ assert.ok(lines.some(l => l.includes("No milestone dependencies")), "shows no-deps message");
375
375
  }
376
376
 
377
377
  // ─── renderMetricsView ──────────────────────────────────────────────────────
@@ -422,21 +422,21 @@ console.log("\n=== renderMetricsView ===");
422
422
  });
423
423
 
424
424
  const lines = renderMetricsView(data, mockTheme, 80);
425
- assertTrue(lines.length > 0, "metrics view produces output");
426
- assertTrue(lines.some(l => l.includes("$2.50")), "shows total cost");
427
- assertTrue(lines.some(l => l.includes("execution")), "shows phase name");
428
- assertTrue(lines.some(l => l.includes("claude-opus-4-6")), "shows model name");
429
- assertTrue(lines.some(l => l.includes("By Tier")), "shows tier breakdown section");
430
- assertTrue(lines.some(l => l.includes("standard")), "shows tier name");
431
- assertTrue(lines.some(l => l.includes("Dynamic routing")), "shows tier savings line");
432
- assertTrue(lines.some(l => l.includes("Tools: 15")), "shows tool call count");
433
- assertTrue(lines.some(l => l.includes("10") && l.includes("sent")), "shows message counts");
425
+ assert.ok(lines.length > 0, "metrics view produces output");
426
+ assert.ok(lines.some(l => l.includes("$2.50")), "shows total cost");
427
+ assert.ok(lines.some(l => l.includes("execution")), "shows phase name");
428
+ assert.ok(lines.some(l => l.includes("claude-opus-4-6")), "shows model name");
429
+ assert.ok(lines.some(l => l.includes("By Tier")), "shows tier breakdown section");
430
+ assert.ok(lines.some(l => l.includes("standard")), "shows tier name");
431
+ assert.ok(lines.some(l => l.includes("Dynamic routing")), "shows tier savings line");
432
+ assert.ok(lines.some(l => l.includes("Tools: 15")), "shows tool call count");
433
+ assert.ok(lines.some(l => l.includes("10") && l.includes("sent")), "shows message counts");
434
434
  }
435
435
 
436
436
  {
437
437
  const data = makeVisualizerData({ totals: null });
438
438
  const lines = renderMetricsView(data, mockTheme, 80);
439
- assertTrue(lines.some(l => l.includes("No metrics data")), "shows no-data message");
439
+ assert.ok(lines.some(l => l.includes("No metrics data")), "shows no-data message");
440
440
  }
441
441
 
442
442
  // ─── renderTimelineView ─────────────────────────────────────────────────────
@@ -464,16 +464,16 @@ console.log("\n=== renderTimelineView ===");
464
464
  });
465
465
 
466
466
  const listLines = renderTimelineView(data, mockTheme, 80);
467
- assertTrue(listLines.length >= 1, "list view produces lines");
468
- assertTrue(listLines.some(l => l.includes("execute-task")), "shows unit type");
469
- assertTrue(listLines.some(l => l.includes("[standard]")), "shows tier in timeline");
470
- assertTrue(listLines.some(l => l.includes("opus-4-6")), "shows shortened model");
467
+ assert.ok(listLines.length >= 1, "list view produces lines");
468
+ assert.ok(listLines.some(l => l.includes("execute-task")), "shows unit type");
469
+ assert.ok(listLines.some(l => l.includes("[standard]")), "shows tier in timeline");
470
+ assert.ok(listLines.some(l => l.includes("opus-4-6")), "shows shortened model");
471
471
  }
472
472
 
473
473
  {
474
474
  const data = makeVisualizerData({ units: [] });
475
475
  const lines = renderTimelineView(data, mockTheme, 80);
476
- assertTrue(lines.some(l => l.includes("No execution history")), "shows empty message");
476
+ assert.ok(lines.some(l => l.includes("No execution history")), "shows empty message");
477
477
  }
478
478
 
479
479
  // ─── renderAgentView ────────────────────────────────────────────────────────
@@ -514,17 +514,17 @@ console.log("\n=== renderAgentView ===");
514
514
  });
515
515
 
516
516
  const lines = renderAgentView(data, mockTheme, 80);
517
- assertTrue(lines.length > 0, "agent view produces output");
518
- assertTrue(lines.some(l => l.includes("ACTIVE")), "shows active status");
519
- assertTrue(lines.some(l => l.includes("Pressure")), "shows pressure section");
520
- assertTrue(lines.some(l => l.includes("15.5%")), "shows truncation rate");
521
- assertTrue(lines.some(l => l.includes("Pending captures: 3")), "shows pending captures");
517
+ assert.ok(lines.length > 0, "agent view produces output");
518
+ assert.ok(lines.some(l => l.includes("ACTIVE")), "shows active status");
519
+ assert.ok(lines.some(l => l.includes("Pressure")), "shows pressure section");
520
+ assert.ok(lines.some(l => l.includes("15.5%")), "shows truncation rate");
521
+ assert.ok(lines.some(l => l.includes("Pending captures: 3")), "shows pending captures");
522
522
  }
523
523
 
524
524
  {
525
525
  const data = makeVisualizerData({ agentActivity: null });
526
526
  const lines = renderAgentView(data, mockTheme, 80);
527
- assertTrue(lines.some(l => l.includes("No agent activity")), "shows no-activity message");
527
+ assert.ok(lines.some(l => l.includes("No agent activity")), "shows no-activity message");
528
528
  }
529
529
 
530
530
  // ─── renderChangelogView ────────────────────────────────────────────────────
@@ -559,17 +559,17 @@ console.log("\n=== renderChangelogView ===");
559
559
  });
560
560
 
561
561
  const lines = renderChangelogView(data, mockTheme, 80);
562
- assertTrue(lines.some(l => l.includes("M001/S01")), "shows slice reference");
563
- assertTrue(lines.some(l => l.includes("Decisions:")), "shows decisions section");
564
- assertTrue(lines.some(l => l.includes("RS256")), "shows decision content");
565
- assertTrue(lines.some(l => l.includes("Patterns:")), "shows patterns section");
566
- assertTrue(lines.some(l => l.includes("Repository pattern")), "shows pattern content");
562
+ assert.ok(lines.some(l => l.includes("M001/S01")), "shows slice reference");
563
+ assert.ok(lines.some(l => l.includes("Decisions:")), "shows decisions section");
564
+ assert.ok(lines.some(l => l.includes("RS256")), "shows decision content");
565
+ assert.ok(lines.some(l => l.includes("Patterns:")), "shows patterns section");
566
+ assert.ok(lines.some(l => l.includes("Repository pattern")), "shows pattern content");
567
567
  }
568
568
 
569
569
  {
570
570
  const data = makeVisualizerData({ changelog: { entries: [] } });
571
571
  const lines = renderChangelogView(data, mockTheme, 80);
572
- assertTrue(lines.some(l => l.includes("No completed slices")), "shows empty state");
572
+ assert.ok(lines.some(l => l.includes("No completed slices")), "shows empty state");
573
573
  }
574
574
 
575
575
  // ─── renderExportView ───────────────────────────────────────────────────────
@@ -579,10 +579,10 @@ console.log("\n=== renderExportView ===");
579
579
  {
580
580
  const data = makeVisualizerData();
581
581
  const lines = renderExportView(data, mockTheme, 80);
582
- assertTrue(lines.some(l => l.includes("Export Options")), "shows export header");
583
- assertTrue(lines.some(l => l.includes("[m]")), "shows markdown option");
584
- assertTrue(lines.some(l => l.includes("[j]")), "shows json option");
585
- assertTrue(lines.some(l => l.includes("[s]")), "shows snapshot option");
582
+ assert.ok(lines.some(l => l.includes("Export Options")), "shows export header");
583
+ assert.ok(lines.some(l => l.includes("[m]")), "shows markdown option");
584
+ assert.ok(lines.some(l => l.includes("[j]")), "shows json option");
585
+ assert.ok(lines.some(l => l.includes("[s]")), "shows snapshot option");
586
586
  }
587
587
 
588
588
  // ─── renderKnowledgeView ────────────────────────────────────────────────────
@@ -600,13 +600,13 @@ console.log("\n=== renderKnowledgeView ===");
600
600
  });
601
601
 
602
602
  const lines = renderKnowledgeView(data, mockTheme, 80);
603
- assertTrue(lines.some(l => l.includes("Rules")), "shows rules section");
604
- assertTrue(lines.some(l => l.includes("K001")), "shows rule ID");
605
- assertTrue(lines.some(l => l.includes("Always use transactions")), "shows rule content");
606
- assertTrue(lines.some(l => l.includes("Patterns")), "shows patterns section");
607
- assertTrue(lines.some(l => l.includes("P001")), "shows pattern ID");
608
- assertTrue(lines.some(l => l.includes("Lessons Learned")), "shows lessons section");
609
- assertTrue(lines.some(l => l.includes("L001")), "shows lesson ID");
603
+ assert.ok(lines.some(l => l.includes("Rules")), "shows rules section");
604
+ assert.ok(lines.some(l => l.includes("K001")), "shows rule ID");
605
+ assert.ok(lines.some(l => l.includes("Always use transactions")), "shows rule content");
606
+ assert.ok(lines.some(l => l.includes("Patterns")), "shows patterns section");
607
+ assert.ok(lines.some(l => l.includes("P001")), "shows pattern ID");
608
+ assert.ok(lines.some(l => l.includes("Lessons Learned")), "shows lessons section");
609
+ assert.ok(lines.some(l => l.includes("L001")), "shows lesson ID");
610
610
  }
611
611
 
612
612
  {
@@ -614,7 +614,7 @@ console.log("\n=== renderKnowledgeView ===");
614
614
  knowledge: { exists: false, rules: [], patterns: [], lessons: [] },
615
615
  });
616
616
  const lines = renderKnowledgeView(data, mockTheme, 80);
617
- assertTrue(lines.some(l => l.includes("No KNOWLEDGE.md found")), "shows no-knowledge message");
617
+ assert.ok(lines.some(l => l.includes("No KNOWLEDGE.md found")), "shows no-knowledge message");
618
618
  }
619
619
 
620
620
  // ─── renderCapturesView ─────────────────────────────────────────────────────
@@ -635,11 +635,11 @@ console.log("\n=== renderCapturesView ===");
635
635
  });
636
636
 
637
637
  const lines = renderCapturesView(data, mockTheme, 80);
638
- assertTrue(lines.some(l => l.includes("3") && l.includes("total")), "shows total count");
639
- assertTrue(lines.some(l => l.includes("1") && l.includes("pending")), "shows pending count");
640
- assertTrue(lines.some(l => l.includes("CAP-abc123")), "shows capture ID");
641
- assertTrue(lines.some(l => l.includes("(inject)")), "shows classification badge");
642
- assertTrue(lines.some(l => l.includes("[pending]")), "shows status badge");
638
+ assert.ok(lines.some(l => l.includes("3") && l.includes("total")), "shows total count");
639
+ assert.ok(lines.some(l => l.includes("1") && l.includes("pending")), "shows pending count");
640
+ assert.ok(lines.some(l => l.includes("CAP-abc123")), "shows capture ID");
641
+ assert.ok(lines.some(l => l.includes("(inject)")), "shows classification badge");
642
+ assert.ok(lines.some(l => l.includes("[pending]")), "shows status badge");
643
643
  }
644
644
 
645
645
  {
@@ -647,7 +647,7 @@ console.log("\n=== renderCapturesView ===");
647
647
  captures: { entries: [], pendingCount: 0, totalCount: 0 },
648
648
  });
649
649
  const lines = renderCapturesView(data, mockTheme, 80);
650
- assertTrue(lines.some(l => l.includes("No captures recorded")), "shows empty state");
650
+ assert.ok(lines.some(l => l.includes("No captures recorded")), "shows empty state");
651
651
  }
652
652
 
653
653
  // ─── renderHealthView ───────────────────────────────────────────────────────
@@ -682,17 +682,17 @@ console.log("\n=== renderHealthView ===");
682
682
  });
683
683
 
684
684
  const lines = renderHealthView(data, mockTheme, 80);
685
- assertTrue(lines.some(l => l.includes("Budget")), "shows budget section");
686
- assertTrue(lines.some(l => l.includes("Ceiling")), "shows budget ceiling");
687
- assertTrue(lines.some(l => l.includes("$20.00")), "shows ceiling amount");
688
- assertTrue(lines.some(l => l.includes("Pressure")), "shows pressure section");
689
- assertTrue(lines.some(l => l.includes("30.0%")), "shows truncation rate");
690
- assertTrue(lines.some(l => l.includes("Routing")), "shows routing section");
691
- assertTrue(lines.some(l => l.includes("standard")), "shows tier name");
692
- assertTrue(lines.some(l => l.includes("2 downgraded")), "shows downgraded count");
693
- assertTrue(lines.some(l => l.includes("Dynamic routing")), "shows savings line");
694
- assertTrue(lines.some(l => l.includes("Session")), "shows session section");
695
- assertTrue(lines.some(l => l.includes("Tool calls: 50")), "shows tool calls");
685
+ assert.ok(lines.some(l => l.includes("Budget")), "shows budget section");
686
+ assert.ok(lines.some(l => l.includes("Ceiling")), "shows budget ceiling");
687
+ assert.ok(lines.some(l => l.includes("$20.00")), "shows ceiling amount");
688
+ assert.ok(lines.some(l => l.includes("Pressure")), "shows pressure section");
689
+ assert.ok(lines.some(l => l.includes("30.0%")), "shows truncation rate");
690
+ assert.ok(lines.some(l => l.includes("Routing")), "shows routing section");
691
+ assert.ok(lines.some(l => l.includes("standard")), "shows tier name");
692
+ assert.ok(lines.some(l => l.includes("2 downgraded")), "shows downgraded count");
693
+ assert.ok(lines.some(l => l.includes("Dynamic routing")), "shows savings line");
694
+ assert.ok(lines.some(l => l.includes("Session")), "shows session section");
695
+ assert.ok(lines.some(l => l.includes("Tool calls: 50")), "shows tool calls");
696
696
  }
697
697
 
698
698
  {
@@ -709,10 +709,8 @@ console.log("\n=== renderHealthView ===");
709
709
  });
710
710
 
711
711
  const lines = renderHealthView(data, mockTheme, 80);
712
- assertTrue(lines.some(l => l.includes("No budget ceiling set")), "shows no-ceiling message");
713
- assertTrue(lines.some(l => l.includes("compact")), "shows token profile");
712
+ assert.ok(lines.some(l => l.includes("No budget ceiling set")), "shows no-ceiling message");
713
+ assert.ok(lines.some(l => l.includes("compact")), "shows token profile");
714
714
  }
715
715
 
716
716
  // ─── Report ─────────────────────────────────────────────────────────────────
717
-
718
- report();