gsd-pi 2.81.0 → 2.82.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (290) hide show
  1. package/README.md +36 -24
  2. package/dist/resources/.managed-resources-content-hash +1 -1
  3. package/dist/resources/extensions/gsd/auto/loop.js +111 -8
  4. package/dist/resources/extensions/gsd/auto/phases.js +190 -97
  5. package/dist/resources/extensions/gsd/auto/run-unit.js +66 -3
  6. package/dist/resources/extensions/gsd/auto/session.js +9 -0
  7. package/dist/resources/extensions/gsd/auto/verification-retry-policy.js +43 -0
  8. package/dist/resources/extensions/gsd/auto-dashboard.js +182 -178
  9. package/dist/resources/extensions/gsd/auto-dispatch.js +14 -11
  10. package/dist/resources/extensions/gsd/auto-post-unit.js +7 -1
  11. package/dist/resources/extensions/gsd/auto-recovery.js +6 -181
  12. package/dist/resources/extensions/gsd/auto-runtime-state.js +5 -0
  13. package/dist/resources/extensions/gsd/auto-start.js +20 -23
  14. package/dist/resources/extensions/gsd/auto-unit-closeout.js +33 -5
  15. package/dist/resources/extensions/gsd/auto-verification.js +12 -6
  16. package/dist/resources/extensions/gsd/auto-worktree.js +8 -0
  17. package/dist/resources/extensions/gsd/auto.js +265 -76
  18. package/dist/resources/extensions/gsd/bootstrap/agent-end-recovery.js +13 -6
  19. package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +8 -2
  20. package/dist/resources/extensions/gsd/bootstrap/register-shortcuts.js +4 -8
  21. package/dist/resources/extensions/gsd/commands/handlers/notifications-handler.js +4 -10
  22. package/dist/resources/extensions/gsd/commands/handlers/parallel.js +9 -0
  23. package/dist/resources/extensions/gsd/git-service.js +2 -1
  24. package/dist/resources/extensions/gsd/gsd-db.js +7 -23
  25. package/dist/resources/extensions/gsd/health-widget-core.js +1 -1
  26. package/dist/resources/extensions/gsd/health-widget.js +4 -10
  27. package/dist/resources/extensions/gsd/markdown-renderer.js +0 -95
  28. package/dist/resources/extensions/gsd/native-git-bridge.js +14 -14
  29. package/dist/resources/extensions/gsd/notification-overlay.js +35 -40
  30. package/dist/resources/extensions/gsd/parallel-merge.js +53 -30
  31. package/dist/resources/extensions/gsd/parallel-monitor-overlay.js +25 -33
  32. package/dist/resources/extensions/gsd/prompts/complete-slice.md +14 -12
  33. package/dist/resources/extensions/gsd/prompts/discuss-headless.md +20 -2
  34. package/dist/resources/extensions/gsd/prompts/discuss.md +20 -2
  35. package/dist/resources/extensions/gsd/recovery-classification.js +15 -1
  36. package/dist/resources/extensions/gsd/session-lock.js +40 -0
  37. package/dist/resources/extensions/gsd/state-reconciliation/drift/completion.js +131 -0
  38. package/dist/resources/extensions/gsd/state-reconciliation/drift/merge-state.js +247 -0
  39. package/dist/resources/extensions/gsd/state-reconciliation/drift/project-md.js +50 -0
  40. package/dist/resources/extensions/gsd/state-reconciliation/drift/roadmap.js +87 -0
  41. package/dist/resources/extensions/gsd/state-reconciliation/drift/sketch-flag.js +50 -0
  42. package/dist/resources/extensions/gsd/state-reconciliation/drift/stale-render.js +124 -0
  43. package/dist/resources/extensions/gsd/state-reconciliation/drift/stale-worker.js +32 -0
  44. package/dist/resources/extensions/gsd/state-reconciliation/errors.js +41 -0
  45. package/dist/resources/extensions/gsd/state-reconciliation/index.js +99 -0
  46. package/dist/resources/extensions/gsd/state-reconciliation/registry.js +24 -0
  47. package/dist/resources/extensions/gsd/state-reconciliation/spawn-gate.js +43 -0
  48. package/dist/resources/extensions/gsd/state-reconciliation/types.js +3 -0
  49. package/dist/resources/extensions/gsd/state-reconciliation.js +5 -26
  50. package/dist/resources/extensions/gsd/tui/render-kit.js +74 -0
  51. package/dist/resources/extensions/gsd/watch/header-renderer.js +92 -69
  52. package/dist/resources/extensions/gsd/watch/splash-palette.js +10 -0
  53. package/dist/resources/extensions/gsd/workflow-mcp.js +2 -2
  54. package/dist/resources/extensions/gsd/worktree-lifecycle.js +722 -316
  55. package/dist/resources/extensions/gsd/worktree-telemetry.js +3 -1
  56. package/dist/tsconfig.extensions.tsbuildinfo +1 -1
  57. package/dist/web/standalone/.next/BUILD_ID +1 -1
  58. package/dist/web/standalone/.next/app-path-routes-manifest.json +9 -9
  59. package/dist/web/standalone/.next/build-manifest.json +2 -2
  60. package/dist/web/standalone/.next/server/app/_global-error.html +1 -1
  61. package/dist/web/standalone/.next/server/app/_global-error.rsc +1 -1
  62. package/dist/web/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  63. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  64. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  65. package/dist/web/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  66. package/dist/web/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  67. package/dist/web/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  68. package/dist/web/standalone/.next/server/app/_not-found.html +1 -1
  69. package/dist/web/standalone/.next/server/app/_not-found.rsc +1 -1
  70. package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
  71. package/dist/web/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  72. package/dist/web/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
  73. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  74. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  75. package/dist/web/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  76. package/dist/web/standalone/.next/server/app/index.html +1 -1
  77. package/dist/web/standalone/.next/server/app/index.rsc +1 -1
  78. package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  79. package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +1 -1
  80. package/dist/web/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
  81. package/dist/web/standalone/.next/server/app/index.segments/_index.segment.rsc +1 -1
  82. package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  83. package/dist/web/standalone/.next/server/app-paths-manifest.json +9 -9
  84. package/dist/web/standalone/.next/server/middleware-build-manifest.js +1 -1
  85. package/dist/web/standalone/.next/server/pages/404.html +1 -1
  86. package/dist/web/standalone/.next/server/pages/500.html +1 -1
  87. package/dist/welcome-screen.d.ts +0 -7
  88. package/dist/welcome-screen.js +60 -69
  89. package/package.json +1 -1
  90. package/packages/daemon/package.json +2 -2
  91. package/packages/mcp-server/package.json +2 -2
  92. package/packages/native/package.json +1 -1
  93. package/packages/pi-agent-core/package.json +1 -1
  94. package/packages/pi-ai/package.json +1 -1
  95. package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/assistant-message-design.test.d.ts +2 -0
  96. package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/assistant-message-design.test.d.ts.map +1 -0
  97. package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/assistant-message-design.test.js +47 -0
  98. package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/assistant-message-design.test.js.map +1 -0
  99. package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/tool-execution.test.js +76 -9
  100. package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/tool-execution.test.js.map +1 -1
  101. package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/user-message-design.test.d.ts +2 -0
  102. package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/user-message-design.test.d.ts.map +1 -0
  103. package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/user-message-design.test.js +40 -0
  104. package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/user-message-design.test.js.map +1 -0
  105. package/packages/pi-coding-agent/dist/modes/interactive/components/adaptive-layout.d.ts +0 -1
  106. package/packages/pi-coding-agent/dist/modes/interactive/components/adaptive-layout.d.ts.map +1 -1
  107. package/packages/pi-coding-agent/dist/modes/interactive/components/adaptive-layout.js +30 -29
  108. package/packages/pi-coding-agent/dist/modes/interactive/components/adaptive-layout.js.map +1 -1
  109. package/packages/pi-coding-agent/dist/modes/interactive/components/adaptive-layout.test.js +10 -3
  110. package/packages/pi-coding-agent/dist/modes/interactive/components/adaptive-layout.test.js.map +1 -1
  111. package/packages/pi-coding-agent/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
  112. package/packages/pi-coding-agent/dist/modes/interactive/components/assistant-message.js +13 -13
  113. package/packages/pi-coding-agent/dist/modes/interactive/components/assistant-message.js.map +1 -1
  114. package/packages/pi-coding-agent/dist/modes/interactive/components/bash-execution.d.ts +1 -3
  115. package/packages/pi-coding-agent/dist/modes/interactive/components/bash-execution.d.ts.map +1 -1
  116. package/packages/pi-coding-agent/dist/modes/interactive/components/bash-execution.js +58 -3
  117. package/packages/pi-coding-agent/dist/modes/interactive/components/bash-execution.js.map +1 -1
  118. package/packages/pi-coding-agent/dist/modes/interactive/components/diff.d.ts +2 -2
  119. package/packages/pi-coding-agent/dist/modes/interactive/components/diff.d.ts.map +1 -1
  120. package/packages/pi-coding-agent/dist/modes/interactive/components/diff.js +12 -6
  121. package/packages/pi-coding-agent/dist/modes/interactive/components/diff.js.map +1 -1
  122. package/packages/pi-coding-agent/dist/modes/interactive/components/footer.d.ts.map +1 -1
  123. package/packages/pi-coding-agent/dist/modes/interactive/components/footer.js +14 -41
  124. package/packages/pi-coding-agent/dist/modes/interactive/components/footer.js.map +1 -1
  125. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.d.ts +0 -1
  126. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
  127. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.js +86 -82
  128. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.js.map +1 -1
  129. package/packages/pi-coding-agent/dist/modes/interactive/components/transcript-design.d.ts +35 -0
  130. package/packages/pi-coding-agent/dist/modes/interactive/components/transcript-design.d.ts.map +1 -0
  131. package/packages/pi-coding-agent/dist/modes/interactive/components/transcript-design.js +152 -0
  132. package/packages/pi-coding-agent/dist/modes/interactive/components/transcript-design.js.map +1 -0
  133. package/packages/pi-coding-agent/dist/modes/interactive/components/tui-style-kit.d.ts +16 -0
  134. package/packages/pi-coding-agent/dist/modes/interactive/components/tui-style-kit.d.ts.map +1 -0
  135. package/packages/pi-coding-agent/dist/modes/interactive/components/tui-style-kit.js +73 -0
  136. package/packages/pi-coding-agent/dist/modes/interactive/components/tui-style-kit.js.map +1 -0
  137. package/packages/pi-coding-agent/dist/modes/interactive/components/user-message.d.ts +1 -1
  138. package/packages/pi-coding-agent/dist/modes/interactive/components/user-message.d.ts.map +1 -1
  139. package/packages/pi-coding-agent/dist/modes/interactive/components/user-message.js +12 -8
  140. package/packages/pi-coding-agent/dist/modes/interactive/components/user-message.js.map +1 -1
  141. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme-highlight.test.d.ts +2 -0
  142. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme-highlight.test.d.ts.map +1 -0
  143. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme-highlight.test.js +17 -0
  144. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme-highlight.test.js.map +1 -0
  145. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  146. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.js +105 -1
  147. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.js.map +1 -1
  148. package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.d.ts.map +1 -1
  149. package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.js +27 -26
  150. package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.js.map +1 -1
  151. package/packages/pi-coding-agent/dist/modes/interactive/tui-mode.test.js +9 -6
  152. package/packages/pi-coding-agent/dist/modes/interactive/tui-mode.test.js.map +1 -1
  153. package/packages/pi-coding-agent/package.json +1 -1
  154. package/packages/pi-coding-agent/src/modes/interactive/components/__tests__/assistant-message-design.test.ts +56 -0
  155. package/packages/pi-coding-agent/src/modes/interactive/components/__tests__/tool-execution.test.ts +113 -9
  156. package/packages/pi-coding-agent/src/modes/interactive/components/__tests__/user-message-design.test.ts +48 -0
  157. package/packages/pi-coding-agent/src/modes/interactive/components/adaptive-layout.test.ts +10 -3
  158. package/packages/pi-coding-agent/src/modes/interactive/components/adaptive-layout.ts +43 -42
  159. package/packages/pi-coding-agent/src/modes/interactive/components/assistant-message.ts +14 -14
  160. package/packages/pi-coding-agent/src/modes/interactive/components/bash-execution.ts +64 -3
  161. package/packages/pi-coding-agent/src/modes/interactive/components/diff.ts +13 -7
  162. package/packages/pi-coding-agent/src/modes/interactive/components/footer.ts +15 -42
  163. package/packages/pi-coding-agent/src/modes/interactive/components/tool-execution.ts +84 -104
  164. package/packages/pi-coding-agent/src/modes/interactive/components/transcript-design.ts +196 -0
  165. package/packages/pi-coding-agent/src/modes/interactive/components/tui-style-kit.ts +94 -0
  166. package/packages/pi-coding-agent/src/modes/interactive/components/user-message.ts +14 -9
  167. package/packages/pi-coding-agent/src/modes/interactive/theme/theme-highlight.test.ts +23 -0
  168. package/packages/pi-coding-agent/src/modes/interactive/theme/theme.ts +106 -1
  169. package/packages/pi-coding-agent/src/modes/interactive/theme/themes.ts +27 -26
  170. package/packages/pi-coding-agent/src/modes/interactive/tui-mode.test.ts +9 -6
  171. package/packages/pi-coding-agent/tsconfig.tsbuildinfo +1 -1
  172. package/packages/pi-tui/dist/__tests__/overlay-layout.test.js +14 -1
  173. package/packages/pi-tui/dist/__tests__/overlay-layout.test.js.map +1 -1
  174. package/packages/pi-tui/dist/overlay-layout.d.ts.map +1 -1
  175. package/packages/pi-tui/dist/overlay-layout.js +9 -6
  176. package/packages/pi-tui/dist/overlay-layout.js.map +1 -1
  177. package/packages/pi-tui/package.json +1 -1
  178. package/packages/pi-tui/src/__tests__/overlay-layout.test.ts +20 -1
  179. package/packages/pi-tui/src/overlay-layout.ts +10 -7
  180. package/packages/pi-tui/tsconfig.tsbuildinfo +1 -1
  181. package/packages/rpc-client/package.json +1 -1
  182. package/pkg/dist/modes/interactive/theme/theme-highlight.test.d.ts +2 -0
  183. package/pkg/dist/modes/interactive/theme/theme-highlight.test.d.ts.map +1 -0
  184. package/pkg/dist/modes/interactive/theme/theme-highlight.test.js +17 -0
  185. package/pkg/dist/modes/interactive/theme/theme-highlight.test.js.map +1 -0
  186. package/pkg/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  187. package/pkg/dist/modes/interactive/theme/theme.js +105 -1
  188. package/pkg/dist/modes/interactive/theme/theme.js.map +1 -1
  189. package/pkg/dist/modes/interactive/theme/themes.d.ts.map +1 -1
  190. package/pkg/dist/modes/interactive/theme/themes.js +27 -26
  191. package/pkg/dist/modes/interactive/theme/themes.js.map +1 -1
  192. package/pkg/package.json +1 -1
  193. package/src/resources/extensions/gsd/auto/loop-deps.ts +9 -5
  194. package/src/resources/extensions/gsd/auto/loop.ts +113 -9
  195. package/src/resources/extensions/gsd/auto/phases.ts +144 -19
  196. package/src/resources/extensions/gsd/auto/run-unit.ts +69 -4
  197. package/src/resources/extensions/gsd/auto/session.ts +10 -0
  198. package/src/resources/extensions/gsd/auto/verification-retry-policy.ts +82 -0
  199. package/src/resources/extensions/gsd/auto-dashboard.ts +230 -183
  200. package/src/resources/extensions/gsd/auto-dispatch.ts +15 -1
  201. package/src/resources/extensions/gsd/auto-post-unit.ts +7 -1
  202. package/src/resources/extensions/gsd/auto-recovery.ts +7 -209
  203. package/src/resources/extensions/gsd/auto-runtime-state.ts +5 -0
  204. package/src/resources/extensions/gsd/auto-start.ts +22 -22
  205. package/src/resources/extensions/gsd/auto-unit-closeout.ts +51 -0
  206. package/src/resources/extensions/gsd/auto-verification.ts +12 -6
  207. package/src/resources/extensions/gsd/auto-worktree.ts +8 -0
  208. package/src/resources/extensions/gsd/auto.ts +295 -75
  209. package/src/resources/extensions/gsd/bootstrap/agent-end-recovery.ts +21 -6
  210. package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +6 -2
  211. package/src/resources/extensions/gsd/bootstrap/register-shortcuts.ts +5 -8
  212. package/src/resources/extensions/gsd/commands/handlers/notifications-handler.ts +4 -10
  213. package/src/resources/extensions/gsd/commands/handlers/parallel.ts +12 -0
  214. package/src/resources/extensions/gsd/git-service.ts +2 -0
  215. package/src/resources/extensions/gsd/gsd-db.ts +7 -23
  216. package/src/resources/extensions/gsd/health-widget-core.ts +1 -1
  217. package/src/resources/extensions/gsd/health-widget.ts +6 -10
  218. package/src/resources/extensions/gsd/journal.ts +2 -0
  219. package/src/resources/extensions/gsd/markdown-renderer.ts +4 -95
  220. package/src/resources/extensions/gsd/native-git-bridge.ts +14 -13
  221. package/src/resources/extensions/gsd/notification-overlay.ts +50 -46
  222. package/src/resources/extensions/gsd/parallel-merge.ts +61 -34
  223. package/src/resources/extensions/gsd/parallel-monitor-overlay.ts +33 -35
  224. package/src/resources/extensions/gsd/prompts/complete-slice.md +14 -12
  225. package/src/resources/extensions/gsd/prompts/discuss-headless.md +20 -2
  226. package/src/resources/extensions/gsd/prompts/discuss.md +20 -2
  227. package/src/resources/extensions/gsd/recovery-classification.ts +18 -1
  228. package/src/resources/extensions/gsd/session-lock.ts +41 -0
  229. package/src/resources/extensions/gsd/state-reconciliation/drift/completion.ts +172 -0
  230. package/src/resources/extensions/gsd/state-reconciliation/drift/merge-state.ts +337 -0
  231. package/src/resources/extensions/gsd/state-reconciliation/drift/project-md.ts +69 -0
  232. package/src/resources/extensions/gsd/state-reconciliation/drift/roadmap.ts +109 -0
  233. package/src/resources/extensions/gsd/state-reconciliation/drift/sketch-flag.ts +68 -0
  234. package/src/resources/extensions/gsd/state-reconciliation/drift/stale-render.ts +185 -0
  235. package/src/resources/extensions/gsd/state-reconciliation/drift/stale-worker.ts +46 -0
  236. package/src/resources/extensions/gsd/state-reconciliation/errors.ts +67 -0
  237. package/src/resources/extensions/gsd/state-reconciliation/index.ts +142 -0
  238. package/src/resources/extensions/gsd/state-reconciliation/registry.ts +27 -0
  239. package/src/resources/extensions/gsd/state-reconciliation/spawn-gate.ts +60 -0
  240. package/src/resources/extensions/gsd/state-reconciliation/types.ts +83 -0
  241. package/src/resources/extensions/gsd/state-reconciliation.ts +21 -53
  242. package/src/resources/extensions/gsd/tests/artifact-retry-cap.test.ts +1 -1
  243. package/src/resources/extensions/gsd/tests/auto-dashboard.test.ts +99 -0
  244. package/src/resources/extensions/gsd/tests/auto-loop.test.ts +654 -176
  245. package/src/resources/extensions/gsd/tests/auto-paused-ui-cleanup.test.ts +291 -4
  246. package/src/resources/extensions/gsd/tests/auto-runtime-state.test.ts +16 -1
  247. package/src/resources/extensions/gsd/tests/auto-start-orphan-bootstrap.test.ts +18 -0
  248. package/src/resources/extensions/gsd/tests/auto-unit-closeout.test.ts +68 -0
  249. package/src/resources/extensions/gsd/tests/custom-engine-loop-integration.test.ts +28 -1
  250. package/src/resources/extensions/gsd/tests/deep-project-auto-loop.test.ts +20 -2
  251. package/src/resources/extensions/gsd/tests/dispatch-complete-milestone-guard.test.ts +44 -0
  252. package/src/resources/extensions/gsd/tests/header-renderer.test.ts +40 -0
  253. package/src/resources/extensions/gsd/tests/headless-milestone-parity.test.ts +10 -0
  254. package/src/resources/extensions/gsd/tests/health-widget.test.ts +14 -4
  255. package/src/resources/extensions/gsd/tests/integration/git-service.test.ts +26 -0
  256. package/src/resources/extensions/gsd/tests/integration/integration-proof.test.ts +1 -1
  257. package/src/resources/extensions/gsd/tests/integration/parallel-merge.test.ts +116 -24
  258. package/src/resources/extensions/gsd/tests/journal-integration.test.ts +0 -1
  259. package/src/resources/extensions/gsd/tests/markdown-renderer.test.ts +1 -1
  260. package/src/resources/extensions/gsd/tests/merge-conflict-stops-loop.test.ts +46 -11
  261. package/src/resources/extensions/gsd/tests/notification-overlay.test.ts +78 -41
  262. package/src/resources/extensions/gsd/tests/notifications-handler.test.ts +44 -0
  263. package/src/resources/extensions/gsd/tests/originalbase-path-comparison.test.ts +12 -217
  264. package/src/resources/extensions/gsd/tests/parallel-monitor-overlay.test.ts +38 -6
  265. package/src/resources/extensions/gsd/tests/post-exec-retry-bypass.test.ts +2 -2
  266. package/src/resources/extensions/gsd/tests/progressive-planning.test.ts +1 -1
  267. package/src/resources/extensions/gsd/tests/prompt-contracts.test.ts +24 -1
  268. package/src/resources/extensions/gsd/tests/resume-dispatch-worktree.test.ts +7 -3
  269. package/src/resources/extensions/gsd/tests/runtime-invariant-modules.test.ts +6 -3
  270. package/src/resources/extensions/gsd/tests/session-switch-abort-misclassification.test.ts +24 -0
  271. package/src/resources/extensions/gsd/tests/state-corruption-2945.test.ts +65 -58
  272. package/src/resources/extensions/gsd/tests/state-reconciliation-drift.test.ts +952 -0
  273. package/src/resources/extensions/gsd/tests/token-tool-gating.test.ts +4 -0
  274. package/src/resources/extensions/gsd/tests/tui-header-lifecycle.test.ts +121 -1
  275. package/src/resources/extensions/gsd/tests/tui-render-kit.test.ts +66 -0
  276. package/src/resources/extensions/gsd/tests/verification-retry-policy.test.ts +83 -0
  277. package/src/resources/extensions/gsd/tests/workflow-mcp.test.ts +6 -0
  278. package/src/resources/extensions/gsd/tests/worktree-journal-events.test.ts +158 -58
  279. package/src/resources/extensions/gsd/tests/worktree-lifecycle.test.ts +572 -118
  280. package/src/resources/extensions/gsd/tests/worktree-telemetry.test.ts +59 -2
  281. package/src/resources/extensions/gsd/tests/write-gate-planning-unit.test.ts +18 -0
  282. package/src/resources/extensions/gsd/tui/render-kit.ts +109 -0
  283. package/src/resources/extensions/gsd/watch/header-renderer.ts +121 -79
  284. package/src/resources/extensions/gsd/watch/splash-palette.ts +11 -0
  285. package/src/resources/extensions/gsd/workflow-mcp.ts +2 -2
  286. package/src/resources/extensions/gsd/worktree-lifecycle.ts +1151 -524
  287. package/src/resources/extensions/gsd/worktree-telemetry.ts +7 -2
  288. package/src/resources/extensions/gsd/tests/worktree-resolver.test.ts +0 -1544
  289. /package/dist/web/standalone/.next/static/{drLMkgfHQ8lzS229_HWYR → S44UQTFCUdA44dkjfYt6S}/_buildManifest.js +0 -0
  290. /package/dist/web/standalone/.next/static/{drLMkgfHQ8lzS229_HWYR → S44UQTFCUdA44dkjfYt6S}/_ssgManifest.js +0 -0
@@ -1,13 +1,16 @@
1
+ // Project/App: GSD-2
2
+ // File Purpose: Left-edge user message rail renderer for interactive chat transcripts.
3
+
1
4
  import { Container, Markdown, type MarkdownTheme } from "@gsd/pi-tui";
2
5
  import { getMarkdownTheme } from "../theme/theme.js";
3
- import { type TimestampFormat } from "./timestamp.js";
4
- import { renderChatFrame } from "./chat-frame.js";
6
+ import { formatTimestamp, type TimestampFormat } from "./timestamp.js";
7
+ import { chatMessageWidth, renderUserRail } from "./transcript-design.js";
5
8
 
6
9
  const OSC133_ZONE_START = "\x1b]133;A\x07";
7
10
  const OSC133_ZONE_END = "\x1b]133;B\x07";
8
11
 
9
12
  /**
10
- * Component that renders a user message with a right-aligned timestamp.
13
+ * Component that renders a user message against the left edge of the chat transcript.
11
14
  */
12
15
  export class UserMessageComponent extends Container {
13
16
  private timestamp: number | undefined;
@@ -22,14 +25,16 @@ export class UserMessageComponent extends Container {
22
25
 
23
26
  override render(width: number): string[] {
24
27
  const frameWidth = Math.max(20, width);
25
- const contentWidth = Math.max(1, frameWidth - 4);
28
+ const messageWidth = chatMessageWidth(frameWidth);
29
+ const contentWidth = Math.max(1, messageWidth - 2);
26
30
  const lines = super.render(contentWidth);
27
- const framed = renderChatFrame(lines, frameWidth, {
31
+ const meta =
32
+ this.timestamp !== undefined
33
+ ? formatTimestamp(this.timestamp, this.timestampFormat)
34
+ : undefined;
35
+ const framed = renderUserRail(lines, frameWidth, {
28
36
  label: "You",
29
- tone: "user",
30
- timestamp: this.timestamp,
31
- timestampFormat: this.timestampFormat,
32
- showTimestamp: true,
37
+ meta,
33
38
  });
34
39
  if (framed.length === 0) {
35
40
  return framed;
@@ -0,0 +1,23 @@
1
+ // Project/App: GSD-2
2
+ // File Purpose: Tests for safe terminal syntax highlighting fallback.
3
+
4
+ import test from "node:test";
5
+ import assert from "node:assert/strict";
6
+ import stripAnsi from "strip-ansi";
7
+
8
+ import { highlightCode, initTheme } from "./theme.js";
9
+
10
+ initTheme("dark", false);
11
+
12
+ test("highlightCode applies lightweight syntax colors when native highlighting is disabled", () => {
13
+ const [line] = highlightCode("const answer = 42 // meaning", "typescript");
14
+
15
+ assert.ok(line.includes("\x1b["), "expected ANSI color output");
16
+ assert.equal(stripAnsi(line), "const answer = 42 // meaning");
17
+ });
18
+
19
+ test("highlightCode keeps plain text unstyled when no language is known", () => {
20
+ const [line] = highlightCode("const answer = 42");
21
+
22
+ assert.equal(line, "const answer = 42");
23
+ });
@@ -878,13 +878,118 @@ function getHighlightColors(t: Theme): HighlightColors {
878
878
  return cachedHighlightColors;
879
879
  }
880
880
 
881
+ const LIGHTWEIGHT_KEYWORDS = new Set([
882
+ "as",
883
+ "async",
884
+ "await",
885
+ "break",
886
+ "case",
887
+ "catch",
888
+ "class",
889
+ "const",
890
+ "continue",
891
+ "default",
892
+ "def",
893
+ "else",
894
+ "enum",
895
+ "export",
896
+ "extends",
897
+ "false",
898
+ "fn",
899
+ "for",
900
+ "from",
901
+ "function",
902
+ "if",
903
+ "import",
904
+ "in",
905
+ "interface",
906
+ "let",
907
+ "match",
908
+ "new",
909
+ "null",
910
+ "return",
911
+ "struct",
912
+ "switch",
913
+ "throw",
914
+ "true",
915
+ "try",
916
+ "type",
917
+ "undefined",
918
+ "use",
919
+ "var",
920
+ "while",
921
+ ]);
922
+
923
+ function lightweightHighlightLine(line: string): string {
924
+ let out = "";
925
+ let i = 0;
926
+ while (i < line.length) {
927
+ const ch = line[i];
928
+ const next = line[i + 1];
929
+ if (ch === "/" && next === "/") {
930
+ out += theme.fg("syntaxComment", line.slice(i));
931
+ break;
932
+ }
933
+ if (ch === "#") {
934
+ out += theme.fg("syntaxComment", line.slice(i));
935
+ break;
936
+ }
937
+ if (ch === '"' || ch === "'" || ch === "`") {
938
+ const quote = ch;
939
+ let j = i + 1;
940
+ while (j < line.length) {
941
+ if (line[j] === "\\") {
942
+ if (j + 1 >= line.length) {
943
+ j = line.length;
944
+ break;
945
+ }
946
+ j += 2;
947
+ continue;
948
+ }
949
+ if (line[j] === quote) {
950
+ j++;
951
+ break;
952
+ }
953
+ j++;
954
+ }
955
+ out += theme.fg("syntaxString", line.slice(i, j));
956
+ i = j;
957
+ continue;
958
+ }
959
+ if (/[A-Za-z_$]/.test(ch ?? "")) {
960
+ let j = i + 1;
961
+ while (j < line.length && /[A-Za-z0-9_$]/.test(line[j] ?? "")) j++;
962
+ const word = line.slice(i, j);
963
+ out += LIGHTWEIGHT_KEYWORDS.has(word)
964
+ ? theme.fg("syntaxKeyword", word)
965
+ : word;
966
+ i = j;
967
+ continue;
968
+ }
969
+ if (/\d/.test(ch ?? "")) {
970
+ let j = i + 1;
971
+ while (j < line.length && /[\d._]/.test(line[j] ?? "")) j++;
972
+ out += theme.fg("syntaxNumber", line.slice(i, j));
973
+ i = j;
974
+ continue;
975
+ }
976
+ out += ch;
977
+ i++;
978
+ }
979
+ return out;
980
+ }
981
+
982
+ function lightweightHighlightCode(code: string): string[] {
983
+ return code.split("\n").map(lightweightHighlightLine);
984
+ }
985
+
881
986
  /**
882
987
  * Highlight code with syntax coloring based on file extension or language.
883
988
  * Returns array of highlighted lines.
884
989
  */
885
990
  export function highlightCode(code: string, lang?: string): string[] {
886
991
  if (!NATIVE_TUI_HIGHLIGHT_ENABLED) {
887
- return code.split("\n");
992
+ return lang ? lightweightHighlightCode(code) : code.split("\n");
888
993
  }
889
994
 
890
995
  const validLang = lang && supportsLanguage(lang) ? lang : null;
@@ -1,4 +1,5 @@
1
- // GSD2 TUI - Built-in terminal theme definitions.
1
+ // Project/App: GSD-2
2
+ // File Purpose: Built-in terminal theme definitions for interactive TUI rendering.
2
3
  /**
3
4
  * Built-in theme definitions.
4
5
  *
@@ -19,24 +20,24 @@ import type { ThemeJson } from "./theme-schema.js";
19
20
  const dark: ThemeJson = {
20
21
  name: "dark",
21
22
  vars: {
22
- cyan: "#5cc8c8",
23
- blue: "#79b8ff",
24
- green: "#7ad38b",
25
- red: "#f27b7b",
26
- yellow: "#d6b85f",
27
- gray: "#87949b",
28
- dimGray: "#657178",
29
- darkGray: "#303a40",
30
- line: "#52616a",
31
- lineSoft: "#303a40",
32
- textSoft: "#cbd6dc",
33
- accent: "#5cc8c8",
34
- selectedBg: "#1d282a",
35
- userMsgBg: "#202a2f",
36
- toolPendingBg: "#252721",
37
- toolSuccessBg: "#1c251f",
38
- toolErrorBg: "#251e20",
39
- customMsgBg: "#202a2f",
23
+ cyan: "#7fd4e8",
24
+ blue: "#8db7ff",
25
+ green: "#a8c978",
26
+ red: "#d98484",
27
+ yellow: "#e6c06a",
28
+ gray: "#7d889f",
29
+ dimGray: "#4d5870",
30
+ darkGray: "#4e596d",
31
+ line: "#a7ba78",
32
+ lineSoft: "#4e596d",
33
+ textSoft: "#dce4f2",
34
+ accent: "#8db7ff",
35
+ selectedBg: "#1d2430",
36
+ userMsgBg: "#232c3a",
37
+ toolPendingBg: "#171c26",
38
+ toolSuccessBg: "#171c26",
39
+ toolErrorBg: "#241b22",
40
+ customMsgBg: "#171c26",
40
41
  },
41
42
  colors: {
42
43
  accent: "accent",
@@ -61,11 +62,11 @@ const dark: ThemeJson = {
61
62
  toolPendingBg: "toolPendingBg",
62
63
  toolSuccessBg: "toolSuccessBg",
63
64
  toolErrorBg: "toolErrorBg",
64
- toolTitle: "gray",
65
+ toolTitle: "accent",
65
66
  toolOutput: "textSoft",
66
67
  surfaceTitle: "accent",
67
68
  surfaceAccent: "accent",
68
- toolRunning: "yellow",
69
+ toolRunning: "accent",
69
70
  toolSuccess: "green",
70
71
  toolError: "red",
71
72
 
@@ -74,7 +75,7 @@ const dark: ThemeJson = {
74
75
  mdLinkUrl: "dimGray",
75
76
  mdCode: "accent",
76
77
  mdCodeBlock: "green",
77
- mdCodeBlockBorder: "gray",
78
+ mdCodeBlockBorder: "lineSoft",
78
79
  mdQuote: "gray",
79
80
  mdQuoteBorder: "gray",
80
81
  mdHr: "gray",
@@ -101,12 +102,12 @@ const dark: ThemeJson = {
101
102
  thinkingHigh: "#c084fc",
102
103
  thinkingXhigh: "#f472b6",
103
104
 
104
- bashMode: "green",
105
+ bashMode: "line",
105
106
  },
106
107
  export: {
107
- pageBg: "#111416",
108
- cardBg: "#1e2529",
109
- infoBg: "#252721",
108
+ pageBg: "#10141d",
109
+ cardBg: "#171c26",
110
+ infoBg: "#1d2430",
110
111
  },
111
112
  };
112
113
 
@@ -1,4 +1,5 @@
1
- // GSD2 - Tests for adaptive TUI mode selection
1
+ // Project/App: GSD-2
2
+ // File Purpose: Tests for adaptive TUI mode selection and command-center layout rendering.
2
3
 
3
4
  import assert from "node:assert/strict";
4
5
  import { describe, test } from "node:test";
@@ -45,7 +46,7 @@ describe("resolveTuiMode", () => {
45
46
  });
46
47
 
47
48
  describe("AdaptiveLayoutComponent", () => {
48
- test("renders workflow layout with prototype rule frames", () => {
49
+ test("renders workflow layout as rounded command center without stale labels", () => {
49
50
  const layout = new AdaptiveLayoutComponent(() => ({
50
51
  override: "workflow",
51
52
  activeToolCount: 2,
@@ -56,10 +57,12 @@ describe("AdaptiveLayoutComponent", () => {
56
57
 
57
58
  const plain = layout.render(120).map(stripAnsi);
58
59
 
59
- assert.match(plain[0], /^─+/, "workflow layout should start with a rule frame");
60
+ assert.match(plain[0], /^╭─+╮$/, "workflow layout should start with a rounded frame");
60
61
  assert.ok(plain.some((line) => line.includes("GSD Command Center")), "workflow title should render");
61
- assert.ok(plain.some((line) => line.includes("signals")), "inspector title should render");
62
- assert.ok(plain.some((line) => line.includes("│ Active")), "body rows should keep prototype gutter");
63
- assert.ok(!plain.some((line) => /[╭╮╰╯]/.test(line)), "workflow layout should not use rounded box corners");
62
+ assert.ok(plain.some((line) => line.includes("Status")), "status row should render");
63
+ assert.ok(plain.some((line) => line.includes("Tools")), "tools row should render");
64
+ assert.ok(!plain.some((line) => line.includes("signals")), "old signals title should not render");
65
+ assert.ok(!plain.some((line) => line.includes("inspector")), "old inspector title should not render");
66
+ assert.ok(!plain.some((line) => /\bAUTO\b/.test(line)), "command center should not imply GSD auto-mode");
64
67
  });
65
68
  });