gsd-pi 2.44.0 → 2.45.0-dev.e0ee972

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 (505) hide show
  1. package/README.md +30 -12
  2. package/dist/help-text.js +1 -1
  3. package/dist/loader.js +34 -0
  4. package/dist/resources/extensions/gsd/activity-log.js +7 -0
  5. package/dist/resources/extensions/gsd/auto/infra-errors.js +3 -0
  6. package/dist/resources/extensions/gsd/auto/phases.js +52 -45
  7. package/dist/resources/extensions/gsd/auto/run-unit.js +6 -3
  8. package/dist/resources/extensions/gsd/auto-prompts.js +24 -1
  9. package/dist/resources/extensions/gsd/auto-start.js +31 -2
  10. package/dist/resources/extensions/gsd/auto-timers.js +57 -3
  11. package/dist/resources/extensions/gsd/auto-worktree-sync.js +4 -0
  12. package/dist/resources/extensions/gsd/auto-worktree.js +14 -10
  13. package/dist/resources/extensions/gsd/auto.js +34 -8
  14. package/dist/resources/extensions/gsd/bootstrap/db-tools.js +168 -11
  15. package/dist/resources/extensions/gsd/bootstrap/system-context.js +46 -12
  16. package/dist/resources/extensions/gsd/commands/catalog.js +7 -1
  17. package/dist/resources/extensions/gsd/commands/handlers/core.js +2 -0
  18. package/dist/resources/extensions/gsd/commands/handlers/ops.js +10 -0
  19. package/dist/resources/extensions/gsd/commands/handlers/workflow.js +5 -0
  20. package/dist/resources/extensions/gsd/commands-mcp-status.js +187 -0
  21. package/dist/resources/extensions/gsd/db-writer.js +40 -22
  22. package/dist/resources/extensions/gsd/doctor-checks.js +1 -1
  23. package/dist/resources/extensions/gsd/doctor.js +10 -2
  24. package/dist/resources/extensions/gsd/git-service.js +8 -3
  25. package/dist/resources/extensions/gsd/gsd-db.js +17 -2
  26. package/dist/resources/extensions/gsd/markdown-renderer.js +1 -1
  27. package/dist/resources/extensions/gsd/preferences-types.js +2 -2
  28. package/dist/resources/extensions/gsd/preferences.js +17 -5
  29. package/dist/resources/extensions/gsd/prompts/complete-milestone.md +2 -4
  30. package/dist/resources/extensions/gsd/prompts/plan-slice.md +1 -1
  31. package/dist/resources/extensions/gsd/prompts/reassess-roadmap.md +6 -6
  32. package/dist/resources/extensions/gsd/prompts/replan-slice.md +3 -14
  33. package/dist/resources/extensions/gsd/prompts/rethink.md +78 -0
  34. package/dist/resources/extensions/gsd/prompts/validate-milestone.md +7 -37
  35. package/dist/resources/extensions/gsd/provider-error-pause.js +7 -0
  36. package/dist/resources/extensions/gsd/repo-identity.js +45 -7
  37. package/dist/resources/extensions/gsd/rethink.js +115 -0
  38. package/dist/resources/extensions/gsd/state.js +41 -3
  39. package/dist/resources/extensions/gsd/tools/plan-slice.js +1 -0
  40. package/dist/resources/extensions/gsd/tools/plan-task.js +1 -0
  41. package/dist/resources/extensions/gsd/tools/replan-slice.js +2 -0
  42. package/dist/resources/extensions/gsd/tools/validate-milestone.js +88 -0
  43. package/dist/resources/extensions/gsd/workflow-logger.js +138 -0
  44. package/dist/resources/extensions/gsd/worktree-manager.js +34 -3
  45. package/dist/resources/extensions/gsd/worktree-resolver.js +43 -0
  46. package/dist/resources/extensions/mcp-client/index.js +14 -0
  47. package/dist/resources/extensions/voice/index.js +11 -16
  48. package/dist/resources/extensions/voice/linux-ready.js +67 -0
  49. package/dist/web/standalone/.next/BUILD_ID +1 -1
  50. package/dist/web/standalone/.next/app-path-routes-manifest.json +15 -15
  51. package/dist/web/standalone/.next/build-manifest.json +4 -4
  52. package/dist/web/standalone/.next/prerender-manifest.json +3 -3
  53. package/dist/web/standalone/.next/react-loadable-manifest.json +2 -2
  54. package/dist/web/standalone/.next/required-server-files.json +3 -3
  55. package/dist/web/standalone/.next/server/app/_global-error/page.js +3 -3
  56. package/dist/web/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  57. package/dist/web/standalone/.next/server/app/_global-error.html +2 -2
  58. package/dist/web/standalone/.next/server/app/_global-error.rsc +1 -1
  59. package/dist/web/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  60. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  61. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  62. package/dist/web/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  63. package/dist/web/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  64. package/dist/web/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  65. package/dist/web/standalone/.next/server/app/_not-found/page.js +2 -2
  66. package/dist/web/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  67. package/dist/web/standalone/.next/server/app/_not-found.html +1 -1
  68. package/dist/web/standalone/.next/server/app/_not-found.rsc +5 -5
  69. package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +5 -5
  70. package/dist/web/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  71. package/dist/web/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +4 -4
  72. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  73. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  74. package/dist/web/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  75. package/dist/web/standalone/.next/server/app/api/boot/route.js +1 -1
  76. package/dist/web/standalone/.next/server/app/api/boot/route_client-reference-manifest.js +1 -1
  77. package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route.js +1 -1
  78. package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route_client-reference-manifest.js +1 -1
  79. package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route.js +1 -1
  80. package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route_client-reference-manifest.js +1 -1
  81. package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route.js +2 -2
  82. package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route_client-reference-manifest.js +1 -1
  83. package/dist/web/standalone/.next/server/app/api/browse-directories/route.js +1 -1
  84. package/dist/web/standalone/.next/server/app/api/browse-directories/route_client-reference-manifest.js +1 -1
  85. package/dist/web/standalone/.next/server/app/api/captures/route.js +1 -1
  86. package/dist/web/standalone/.next/server/app/api/captures/route_client-reference-manifest.js +1 -1
  87. package/dist/web/standalone/.next/server/app/api/cleanup/route.js +1 -1
  88. package/dist/web/standalone/.next/server/app/api/cleanup/route_client-reference-manifest.js +1 -1
  89. package/dist/web/standalone/.next/server/app/api/dev-mode/route.js +1 -1
  90. package/dist/web/standalone/.next/server/app/api/dev-mode/route_client-reference-manifest.js +1 -1
  91. package/dist/web/standalone/.next/server/app/api/doctor/route.js +1 -1
  92. package/dist/web/standalone/.next/server/app/api/doctor/route_client-reference-manifest.js +1 -1
  93. package/dist/web/standalone/.next/server/app/api/export-data/route.js +1 -1
  94. package/dist/web/standalone/.next/server/app/api/export-data/route_client-reference-manifest.js +1 -1
  95. package/dist/web/standalone/.next/server/app/api/files/route.js +1 -1
  96. package/dist/web/standalone/.next/server/app/api/files/route_client-reference-manifest.js +1 -1
  97. package/dist/web/standalone/.next/server/app/api/forensics/route.js +1 -1
  98. package/dist/web/standalone/.next/server/app/api/forensics/route_client-reference-manifest.js +1 -1
  99. package/dist/web/standalone/.next/server/app/api/git/route.js +1 -1
  100. package/dist/web/standalone/.next/server/app/api/git/route_client-reference-manifest.js +1 -1
  101. package/dist/web/standalone/.next/server/app/api/history/route.js +1 -1
  102. package/dist/web/standalone/.next/server/app/api/history/route_client-reference-manifest.js +1 -1
  103. package/dist/web/standalone/.next/server/app/api/hooks/route.js +1 -1
  104. package/dist/web/standalone/.next/server/app/api/hooks/route_client-reference-manifest.js +1 -1
  105. package/dist/web/standalone/.next/server/app/api/inspect/route.js +1 -1
  106. package/dist/web/standalone/.next/server/app/api/inspect/route_client-reference-manifest.js +1 -1
  107. package/dist/web/standalone/.next/server/app/api/knowledge/route.js +1 -1
  108. package/dist/web/standalone/.next/server/app/api/knowledge/route_client-reference-manifest.js +1 -1
  109. package/dist/web/standalone/.next/server/app/api/live-state/route.js +1 -1
  110. package/dist/web/standalone/.next/server/app/api/live-state/route_client-reference-manifest.js +1 -1
  111. package/dist/web/standalone/.next/server/app/api/onboarding/route.js +1 -1
  112. package/dist/web/standalone/.next/server/app/api/onboarding/route_client-reference-manifest.js +1 -1
  113. package/dist/web/standalone/.next/server/app/api/preferences/route.js +1 -1
  114. package/dist/web/standalone/.next/server/app/api/preferences/route_client-reference-manifest.js +1 -1
  115. package/dist/web/standalone/.next/server/app/api/projects/route.js +1 -1
  116. package/dist/web/standalone/.next/server/app/api/projects/route_client-reference-manifest.js +1 -1
  117. package/dist/web/standalone/.next/server/app/api/recovery/route.js +1 -1
  118. package/dist/web/standalone/.next/server/app/api/recovery/route_client-reference-manifest.js +1 -1
  119. package/dist/web/standalone/.next/server/app/api/remote-questions/route.js +5 -5
  120. package/dist/web/standalone/.next/server/app/api/remote-questions/route_client-reference-manifest.js +1 -1
  121. package/dist/web/standalone/.next/server/app/api/session/browser/route.js +1 -1
  122. package/dist/web/standalone/.next/server/app/api/session/browser/route_client-reference-manifest.js +1 -1
  123. package/dist/web/standalone/.next/server/app/api/session/command/route.js +1 -1
  124. package/dist/web/standalone/.next/server/app/api/session/command/route_client-reference-manifest.js +1 -1
  125. package/dist/web/standalone/.next/server/app/api/session/events/route.js +2 -2
  126. package/dist/web/standalone/.next/server/app/api/session/events/route_client-reference-manifest.js +1 -1
  127. package/dist/web/standalone/.next/server/app/api/session/manage/route.js +1 -1
  128. package/dist/web/standalone/.next/server/app/api/session/manage/route_client-reference-manifest.js +1 -1
  129. package/dist/web/standalone/.next/server/app/api/settings-data/route.js +1 -1
  130. package/dist/web/standalone/.next/server/app/api/settings-data/route_client-reference-manifest.js +1 -1
  131. package/dist/web/standalone/.next/server/app/api/shutdown/route.js +1 -1
  132. package/dist/web/standalone/.next/server/app/api/shutdown/route_client-reference-manifest.js +1 -1
  133. package/dist/web/standalone/.next/server/app/api/skill-health/route.js +1 -1
  134. package/dist/web/standalone/.next/server/app/api/skill-health/route_client-reference-manifest.js +1 -1
  135. package/dist/web/standalone/.next/server/app/api/steer/route.js +1 -1
  136. package/dist/web/standalone/.next/server/app/api/steer/route_client-reference-manifest.js +1 -1
  137. package/dist/web/standalone/.next/server/app/api/switch-root/route.js +1 -1
  138. package/dist/web/standalone/.next/server/app/api/switch-root/route_client-reference-manifest.js +1 -1
  139. package/dist/web/standalone/.next/server/app/api/terminal/input/route.js +2 -2
  140. package/dist/web/standalone/.next/server/app/api/terminal/input/route_client-reference-manifest.js +1 -1
  141. package/dist/web/standalone/.next/server/app/api/terminal/resize/route.js +2 -2
  142. package/dist/web/standalone/.next/server/app/api/terminal/resize/route_client-reference-manifest.js +1 -1
  143. package/dist/web/standalone/.next/server/app/api/terminal/sessions/route.js +2 -2
  144. package/dist/web/standalone/.next/server/app/api/terminal/sessions/route_client-reference-manifest.js +1 -1
  145. package/dist/web/standalone/.next/server/app/api/terminal/stream/route.js +4 -4
  146. package/dist/web/standalone/.next/server/app/api/terminal/stream/route_client-reference-manifest.js +1 -1
  147. package/dist/web/standalone/.next/server/app/api/terminal/upload/route.js +1 -1
  148. package/dist/web/standalone/.next/server/app/api/terminal/upload/route_client-reference-manifest.js +1 -1
  149. package/dist/web/standalone/.next/server/app/api/undo/route.js +1 -1
  150. package/dist/web/standalone/.next/server/app/api/undo/route_client-reference-manifest.js +1 -1
  151. package/dist/web/standalone/.next/server/app/api/update/route.js +1 -1
  152. package/dist/web/standalone/.next/server/app/api/update/route_client-reference-manifest.js +1 -1
  153. package/dist/web/standalone/.next/server/app/api/visualizer/route.js +1 -1
  154. package/dist/web/standalone/.next/server/app/api/visualizer/route_client-reference-manifest.js +1 -1
  155. package/dist/web/standalone/.next/server/app/index.html +1 -1
  156. package/dist/web/standalone/.next/server/app/index.rsc +6 -6
  157. package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
  158. package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +6 -6
  159. package/dist/web/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
  160. package/dist/web/standalone/.next/server/app/index.segments/_index.segment.rsc +4 -4
  161. package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  162. package/dist/web/standalone/.next/server/app/page.js +2 -2
  163. package/dist/web/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  164. package/dist/web/standalone/.next/server/app-paths-manifest.json +15 -15
  165. package/dist/web/standalone/.next/server/chunks/229.js +1 -1
  166. package/dist/web/standalone/.next/server/chunks/471.js +3 -3
  167. package/dist/web/standalone/.next/server/middleware-build-manifest.js +1 -1
  168. package/dist/web/standalone/.next/server/middleware-react-loadable-manifest.js +1 -1
  169. package/dist/web/standalone/.next/server/middleware.js +2 -2
  170. package/dist/web/standalone/.next/server/next-font-manifest.js +1 -1
  171. package/dist/web/standalone/.next/server/next-font-manifest.json +1 -1
  172. package/dist/web/standalone/.next/server/pages/404.html +1 -1
  173. package/dist/web/standalone/.next/server/pages/500.html +2 -2
  174. package/dist/web/standalone/.next/server/server-reference-manifest.json +1 -1
  175. package/dist/web/standalone/.next/static/chunks/4024.11ca5c01938e5948.js +9 -0
  176. package/dist/web/standalone/.next/static/chunks/{3721.bf31263de6d5fa46.js → 485.243af25f0cdf50d6.js} +2 -2
  177. package/dist/web/standalone/.next/static/chunks/app/_not-found/{page-2f24283c162b6ab3.js → page-f2a7482d42a5614b.js} +1 -1
  178. package/dist/web/standalone/.next/static/chunks/app/{layout-9ecfd95f343793f0.js → layout-a16c7a7ecdf0c2cf.js} +1 -1
  179. package/dist/web/standalone/.next/static/chunks/app/page-6654a8cca61a3d1c.js +1 -0
  180. package/dist/web/standalone/.next/static/chunks/main-app-fdab67f7802d7832.js +1 -0
  181. package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/global-error-459824ffb8c323dd.js +1 -0
  182. package/dist/web/standalone/.next/static/chunks/webpack-0a4cd455ec4197d2.js +1 -0
  183. package/dist/web/standalone/.next/static/css/dd4ae3f58ac9b600.css +1 -0
  184. package/dist/web/standalone/node_modules/node-pty/build/Makefile +2 -2
  185. package/dist/web/standalone/node_modules/node-pty/build/Release/pty.node +0 -0
  186. package/dist/web/standalone/node_modules/node-pty/build/pty.target.mk +14 -14
  187. package/dist/web/standalone/node_modules/node-pty/node-addon-api/node_addon_api.target.mk +14 -14
  188. package/dist/web/standalone/node_modules/node-pty/node-addon-api/node_addon_api_except.target.mk +14 -14
  189. package/dist/web/standalone/node_modules/node-pty/node-addon-api/node_addon_api_maybe.target.mk +14 -14
  190. package/dist/web/standalone/server.js +1 -1
  191. package/package.json +1 -1
  192. package/packages/native/dist/stream-process/index.js +2 -2
  193. package/packages/native/src/__tests__/stream-process.test.mjs +34 -0
  194. package/packages/native/src/stream-process/index.ts +2 -2
  195. package/packages/pi-coding-agent/dist/core/auth-storage.d.ts +3 -1
  196. package/packages/pi-coding-agent/dist/core/auth-storage.d.ts.map +1 -1
  197. package/packages/pi-coding-agent/dist/core/auth-storage.js +15 -1
  198. package/packages/pi-coding-agent/dist/core/auth-storage.js.map +1 -1
  199. package/packages/pi-coding-agent/dist/core/auth-storage.test.js +6 -8
  200. package/packages/pi-coding-agent/dist/core/auth-storage.test.js.map +1 -1
  201. package/packages/pi-coding-agent/dist/core/compaction-orchestrator.d.ts.map +1 -1
  202. package/packages/pi-coding-agent/dist/core/compaction-orchestrator.js +2 -0
  203. package/packages/pi-coding-agent/dist/core/compaction-orchestrator.js.map +1 -1
  204. package/packages/pi-coding-agent/dist/core/extensions/runner.test.js +24 -26
  205. package/packages/pi-coding-agent/dist/core/extensions/runner.test.js.map +1 -1
  206. package/packages/pi-coding-agent/dist/core/extensions/types.d.ts +2 -1
  207. package/packages/pi-coding-agent/dist/core/extensions/types.d.ts.map +1 -1
  208. package/packages/pi-coding-agent/dist/core/extensions/types.js.map +1 -1
  209. package/packages/pi-coding-agent/dist/core/fs-utils.test.js +29 -48
  210. package/packages/pi-coding-agent/dist/core/fs-utils.test.js.map +1 -1
  211. package/packages/pi-coding-agent/dist/core/lifecycle-hooks.d.ts +4 -0
  212. package/packages/pi-coding-agent/dist/core/lifecycle-hooks.d.ts.map +1 -1
  213. package/packages/pi-coding-agent/dist/core/lifecycle-hooks.js +10 -5
  214. package/packages/pi-coding-agent/dist/core/lifecycle-hooks.js.map +1 -1
  215. package/packages/pi-coding-agent/dist/core/lifecycle-hooks.test.d.ts +2 -0
  216. package/packages/pi-coding-agent/dist/core/lifecycle-hooks.test.d.ts.map +1 -0
  217. package/packages/pi-coding-agent/dist/core/lifecycle-hooks.test.js +185 -0
  218. package/packages/pi-coding-agent/dist/core/lifecycle-hooks.test.js.map +1 -0
  219. package/packages/pi-coding-agent/dist/core/local-model-check.d.ts +15 -0
  220. package/packages/pi-coding-agent/dist/core/local-model-check.d.ts.map +1 -0
  221. package/packages/pi-coding-agent/dist/core/local-model-check.js +41 -0
  222. package/packages/pi-coding-agent/dist/core/local-model-check.js.map +1 -0
  223. package/packages/pi-coding-agent/dist/core/model-registry-auth-mode.test.js +239 -10
  224. package/packages/pi-coding-agent/dist/core/model-registry-auth-mode.test.js.map +1 -1
  225. package/packages/pi-coding-agent/dist/core/model-registry.d.ts +13 -1
  226. package/packages/pi-coding-agent/dist/core/model-registry.d.ts.map +1 -1
  227. package/packages/pi-coding-agent/dist/core/model-registry.js +40 -3
  228. package/packages/pi-coding-agent/dist/core/model-registry.js.map +1 -1
  229. package/packages/pi-coding-agent/dist/core/package-commands.test.js +206 -195
  230. package/packages/pi-coding-agent/dist/core/package-commands.test.js.map +1 -1
  231. package/packages/pi-coding-agent/dist/core/resolve-config-value.test.js +34 -44
  232. package/packages/pi-coding-agent/dist/core/resolve-config-value.test.js.map +1 -1
  233. package/packages/pi-coding-agent/dist/core/session-manager.test.js +30 -34
  234. package/packages/pi-coding-agent/dist/core/session-manager.test.js.map +1 -1
  235. package/packages/pi-coding-agent/dist/core/settings-manager.d.ts +3 -0
  236. package/packages/pi-coding-agent/dist/core/settings-manager.d.ts.map +1 -1
  237. package/packages/pi-coding-agent/dist/core/settings-manager.js +6 -0
  238. package/packages/pi-coding-agent/dist/core/settings-manager.js.map +1 -1
  239. package/packages/pi-coding-agent/dist/core/tools/edit-diff.test.js +10 -12
  240. package/packages/pi-coding-agent/dist/core/tools/edit-diff.test.js.map +1 -1
  241. package/packages/pi-coding-agent/dist/main.d.ts.map +1 -1
  242. package/packages/pi-coding-agent/dist/main.js +17 -0
  243. package/packages/pi-coding-agent/dist/main.js.map +1 -1
  244. package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/timestamp.test.d.ts +2 -0
  245. package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/timestamp.test.d.ts.map +1 -0
  246. package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/timestamp.test.js +32 -0
  247. package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/timestamp.test.js.map +1 -0
  248. package/packages/pi-coding-agent/dist/modes/interactive/components/assistant-message.d.ts +3 -1
  249. package/packages/pi-coding-agent/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
  250. package/packages/pi-coding-agent/dist/modes/interactive/components/assistant-message.js +8 -1
  251. package/packages/pi-coding-agent/dist/modes/interactive/components/assistant-message.js.map +1 -1
  252. package/packages/pi-coding-agent/dist/modes/interactive/components/settings-selector.d.ts +2 -0
  253. package/packages/pi-coding-agent/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
  254. package/packages/pi-coding-agent/dist/modes/interactive/components/settings-selector.js +12 -0
  255. package/packages/pi-coding-agent/dist/modes/interactive/components/settings-selector.js.map +1 -1
  256. package/packages/pi-coding-agent/dist/modes/interactive/components/timestamp.d.ts +15 -0
  257. package/packages/pi-coding-agent/dist/modes/interactive/components/timestamp.d.ts.map +1 -0
  258. package/packages/pi-coding-agent/dist/modes/interactive/components/timestamp.js +40 -0
  259. package/packages/pi-coding-agent/dist/modes/interactive/components/timestamp.js.map +1 -0
  260. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
  261. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.js +4 -1
  262. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.js.map +1 -1
  263. package/packages/pi-coding-agent/dist/modes/interactive/components/user-message.d.ts +5 -2
  264. package/packages/pi-coding-agent/dist/modes/interactive/components/user-message.d.ts.map +1 -1
  265. package/packages/pi-coding-agent/dist/modes/interactive/components/user-message.js +13 -2
  266. package/packages/pi-coding-agent/dist/modes/interactive/components/user-message.js.map +1 -1
  267. package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.d.ts.map +1 -1
  268. package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.js +17 -8
  269. package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.js.map +1 -1
  270. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  271. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js +7 -3
  272. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js.map +1 -1
  273. package/packages/pi-coding-agent/dist/resources/extensions/memory/storage.test.js +43 -47
  274. package/packages/pi-coding-agent/dist/resources/extensions/memory/storage.test.js.map +1 -1
  275. package/packages/pi-coding-agent/package.json +1 -1
  276. package/packages/pi-coding-agent/src/core/auth-storage.test.ts +7 -7
  277. package/packages/pi-coding-agent/src/core/auth-storage.ts +15 -1
  278. package/packages/pi-coding-agent/src/core/compaction-orchestrator.ts +2 -0
  279. package/packages/pi-coding-agent/src/core/extensions/runner.test.ts +26 -26
  280. package/packages/pi-coding-agent/src/core/extensions/types.ts +2 -1
  281. package/packages/pi-coding-agent/src/core/fs-utils.test.ts +31 -43
  282. package/packages/pi-coding-agent/src/core/lifecycle-hooks.test.ts +227 -0
  283. package/packages/pi-coding-agent/src/core/lifecycle-hooks.ts +11 -5
  284. package/packages/pi-coding-agent/src/core/local-model-check.ts +45 -0
  285. package/packages/pi-coding-agent/src/core/model-registry-auth-mode.test.ts +297 -11
  286. package/packages/pi-coding-agent/src/core/model-registry.ts +51 -4
  287. package/packages/pi-coding-agent/src/core/package-commands.test.ts +227 -205
  288. package/packages/pi-coding-agent/src/core/resolve-config-value.test.ts +40 -45
  289. package/packages/pi-coding-agent/src/core/session-manager.test.ts +33 -33
  290. package/packages/pi-coding-agent/src/core/settings-manager.ts +9 -0
  291. package/packages/pi-coding-agent/src/core/tools/edit-diff.test.ts +17 -17
  292. package/packages/pi-coding-agent/src/main.ts +19 -0
  293. package/packages/pi-coding-agent/src/modes/interactive/components/__tests__/timestamp.test.ts +38 -0
  294. package/packages/pi-coding-agent/src/modes/interactive/components/assistant-message.ts +10 -0
  295. package/packages/pi-coding-agent/src/modes/interactive/components/settings-selector.ts +15 -0
  296. package/packages/pi-coding-agent/src/modes/interactive/components/timestamp.ts +48 -0
  297. package/packages/pi-coding-agent/src/modes/interactive/components/tool-execution.ts +3 -1
  298. package/packages/pi-coding-agent/src/modes/interactive/components/user-message.ts +18 -3
  299. package/packages/pi-coding-agent/src/modes/interactive/controllers/chat-controller.ts +16 -7
  300. package/packages/pi-coding-agent/src/modes/interactive/interactive-mode.ts +8 -1
  301. package/packages/pi-coding-agent/src/resources/extensions/memory/storage.test.ts +74 -74
  302. package/pkg/package.json +1 -1
  303. package/src/resources/extensions/gsd/activity-log.ts +1 -0
  304. package/src/resources/extensions/gsd/auto/infra-errors.ts +3 -0
  305. package/src/resources/extensions/gsd/auto/phases.ts +61 -59
  306. package/src/resources/extensions/gsd/auto/run-unit.ts +6 -3
  307. package/src/resources/extensions/gsd/auto-prompts.ts +24 -1
  308. package/src/resources/extensions/gsd/auto-start.ts +39 -2
  309. package/src/resources/extensions/gsd/auto-timers.ts +64 -3
  310. package/src/resources/extensions/gsd/auto-worktree-sync.ts +5 -0
  311. package/src/resources/extensions/gsd/auto-worktree.ts +17 -11
  312. package/src/resources/extensions/gsd/auto.ts +40 -6
  313. package/src/resources/extensions/gsd/bootstrap/db-tools.ts +160 -11
  314. package/src/resources/extensions/gsd/bootstrap/system-context.ts +48 -11
  315. package/src/resources/extensions/gsd/commands/catalog.ts +7 -1
  316. package/src/resources/extensions/gsd/commands/handlers/core.ts +2 -0
  317. package/src/resources/extensions/gsd/commands/handlers/ops.ts +10 -0
  318. package/src/resources/extensions/gsd/commands/handlers/workflow.ts +8 -0
  319. package/src/resources/extensions/gsd/commands-mcp-status.ts +247 -0
  320. package/src/resources/extensions/gsd/db-writer.ts +41 -27
  321. package/src/resources/extensions/gsd/doctor-checks.ts +1 -1
  322. package/src/resources/extensions/gsd/doctor.ts +9 -3
  323. package/src/resources/extensions/gsd/git-service.ts +6 -2
  324. package/src/resources/extensions/gsd/gsd-db.ts +21 -2
  325. package/src/resources/extensions/gsd/journal.ts +6 -1
  326. package/src/resources/extensions/gsd/markdown-renderer.ts +1 -1
  327. package/src/resources/extensions/gsd/preferences-types.ts +2 -2
  328. package/src/resources/extensions/gsd/preferences.ts +18 -4
  329. package/src/resources/extensions/gsd/prompts/complete-milestone.md +2 -4
  330. package/src/resources/extensions/gsd/prompts/plan-slice.md +1 -1
  331. package/src/resources/extensions/gsd/prompts/reassess-roadmap.md +6 -6
  332. package/src/resources/extensions/gsd/prompts/replan-slice.md +3 -14
  333. package/src/resources/extensions/gsd/prompts/rethink.md +78 -0
  334. package/src/resources/extensions/gsd/prompts/validate-milestone.md +7 -37
  335. package/src/resources/extensions/gsd/provider-error-pause.ts +9 -0
  336. package/src/resources/extensions/gsd/repo-identity.ts +46 -7
  337. package/src/resources/extensions/gsd/rethink.ts +154 -0
  338. package/src/resources/extensions/gsd/state.ts +41 -1
  339. package/src/resources/extensions/gsd/tests/all-milestones-complete-merge.test.ts +99 -99
  340. package/src/resources/extensions/gsd/tests/auto-lock-creation.test.ts +14 -16
  341. package/src/resources/extensions/gsd/tests/auto-paused-session-validation.test.ts +43 -57
  342. package/src/resources/extensions/gsd/tests/auto-pr-bugs.test.ts +88 -0
  343. package/src/resources/extensions/gsd/tests/auto-preflight.test.ts +11 -13
  344. package/src/resources/extensions/gsd/tests/auto-recovery.test.ts +465 -523
  345. package/src/resources/extensions/gsd/tests/auto-secrets-gate.test.ts +73 -75
  346. package/src/resources/extensions/gsd/tests/auto-start-needs-discussion.test.ts +34 -56
  347. package/src/resources/extensions/gsd/tests/auto-worktree-milestone-merge.test.ts +533 -656
  348. package/src/resources/extensions/gsd/tests/auto-worktree.test.ts +165 -143
  349. package/src/resources/extensions/gsd/tests/cache-staleness-regression.test.ts +29 -52
  350. package/src/resources/extensions/gsd/tests/captures.test.ts +148 -176
  351. package/src/resources/extensions/gsd/tests/claude-import-tui.test.ts +32 -33
  352. package/src/resources/extensions/gsd/tests/collect-from-manifest.test.ts +141 -143
  353. package/src/resources/extensions/gsd/tests/commands-inspect-open-db.test.ts +25 -25
  354. package/src/resources/extensions/gsd/tests/commands-logs.test.ts +81 -81
  355. package/src/resources/extensions/gsd/tests/complete-milestone.test.ts +38 -59
  356. package/src/resources/extensions/gsd/tests/complete-slice.test.ts +228 -263
  357. package/src/resources/extensions/gsd/tests/complete-task.test.ts +250 -302
  358. package/src/resources/extensions/gsd/tests/completed-units-metrics-sync.test.ts +114 -0
  359. package/src/resources/extensions/gsd/tests/context-store.test.ts +354 -367
  360. package/src/resources/extensions/gsd/tests/continue-here.test.ts +68 -72
  361. package/src/resources/extensions/gsd/tests/cost-projection.test.ts +92 -106
  362. package/src/resources/extensions/gsd/tests/crash-recovery.test.ts +27 -35
  363. package/src/resources/extensions/gsd/tests/dashboard-budget.test.ts +220 -237
  364. package/src/resources/extensions/gsd/tests/db-writer.test.ts +465 -416
  365. package/src/resources/extensions/gsd/tests/definition-loader.test.ts +76 -92
  366. package/src/resources/extensions/gsd/tests/derive-state-crossval.test.ts +68 -83
  367. package/src/resources/extensions/gsd/tests/derive-state-db-disk-reconcile.test.ts +121 -0
  368. package/src/resources/extensions/gsd/tests/derive-state-db.test.ts +210 -181
  369. package/src/resources/extensions/gsd/tests/derive-state-deps.test.ts +78 -101
  370. package/src/resources/extensions/gsd/tests/derive-state.test.ts +192 -227
  371. package/src/resources/extensions/gsd/tests/detection.test.ts +232 -278
  372. package/src/resources/extensions/gsd/tests/dev-engine-wrapper.test.ts +30 -34
  373. package/src/resources/extensions/gsd/tests/dispatch-guard.test.ts +164 -180
  374. package/src/resources/extensions/gsd/tests/dispatch-missing-task-plans.test.ts +43 -49
  375. package/src/resources/extensions/gsd/tests/dispatch-uat-last-completed.test.ts +28 -32
  376. package/src/resources/extensions/gsd/tests/doctor-completion-deferral.test.ts +27 -29
  377. package/src/resources/extensions/gsd/tests/doctor-delimiter-fix.test.ts +34 -38
  378. package/src/resources/extensions/gsd/tests/doctor-enhancements.test.ts +54 -75
  379. package/src/resources/extensions/gsd/tests/doctor-environment-worktree.test.ts +21 -32
  380. package/src/resources/extensions/gsd/tests/doctor-environment.test.ts +72 -97
  381. package/src/resources/extensions/gsd/tests/doctor-fixlevel.test.ts +38 -44
  382. package/src/resources/extensions/gsd/tests/doctor-git.test.ts +104 -145
  383. package/src/resources/extensions/gsd/tests/doctor-proactive.test.ts +84 -106
  384. package/src/resources/extensions/gsd/tests/doctor-roadmap-summary-atomicity.test.ts +54 -60
  385. package/src/resources/extensions/gsd/tests/doctor-runtime.test.ts +72 -93
  386. package/src/resources/extensions/gsd/tests/doctor.test.ts +104 -134
  387. package/src/resources/extensions/gsd/tests/ensure-db-open.test.ts +123 -131
  388. package/src/resources/extensions/gsd/tests/est-annotation-timeout.test.ts +120 -0
  389. package/src/resources/extensions/gsd/tests/exit-command.test.ts +20 -24
  390. package/src/resources/extensions/gsd/tests/feature-branch-lifecycle-integration.test.ts +48 -57
  391. package/src/resources/extensions/gsd/tests/files-loadfile-eisdir.test.ts +5 -7
  392. package/src/resources/extensions/gsd/tests/flag-file-db.test.ts +30 -42
  393. package/src/resources/extensions/gsd/tests/freeform-decisions.test.ts +198 -206
  394. package/src/resources/extensions/gsd/tests/git-locale.test.ts +13 -27
  395. package/src/resources/extensions/gsd/tests/git-service.test.ts +285 -388
  396. package/src/resources/extensions/gsd/tests/gitignore-tracked-gsd.test.ts +31 -39
  397. package/src/resources/extensions/gsd/tests/graph-operations.test.ts +63 -69
  398. package/src/resources/extensions/gsd/tests/gsd-db.test.ts +255 -264
  399. package/src/resources/extensions/gsd/tests/gsd-inspect.test.ts +108 -119
  400. package/src/resources/extensions/gsd/tests/gsd-recover.test.ts +81 -103
  401. package/src/resources/extensions/gsd/tests/gsd-tools.test.ts +229 -262
  402. package/src/resources/extensions/gsd/tests/headless-answers.test.ts +13 -13
  403. package/src/resources/extensions/gsd/tests/health-widget.test.ts +29 -37
  404. package/src/resources/extensions/gsd/tests/idle-recovery.test.ts +81 -102
  405. package/src/resources/extensions/gsd/tests/infra-error.test.ts +20 -2
  406. package/src/resources/extensions/gsd/tests/inherited-repo-home-dir.test.ts +121 -0
  407. package/src/resources/extensions/gsd/tests/init-wizard.test.ts +16 -18
  408. package/src/resources/extensions/gsd/tests/integration-edge.test.ts +41 -46
  409. package/src/resources/extensions/gsd/tests/integration-lifecycle.test.ts +42 -53
  410. package/src/resources/extensions/gsd/tests/integration-mixed-milestones.test.ts +75 -91
  411. package/src/resources/extensions/gsd/tests/integration-proof.test.ts +18 -18
  412. package/src/resources/extensions/gsd/tests/knowledge.test.ts +89 -0
  413. package/src/resources/extensions/gsd/tests/markdown-renderer.test.ts +150 -194
  414. package/src/resources/extensions/gsd/tests/mcp-status.test.ts +103 -0
  415. package/src/resources/extensions/gsd/tests/md-importer.test.ts +101 -125
  416. package/src/resources/extensions/gsd/tests/memory-extractor.test.ts +45 -54
  417. package/src/resources/extensions/gsd/tests/memory-store.test.ts +80 -93
  418. package/src/resources/extensions/gsd/tests/merge-conflict-stops-loop.test.ts +66 -0
  419. package/src/resources/extensions/gsd/tests/migrate-command.test.ts +57 -66
  420. package/src/resources/extensions/gsd/tests/migrate-hierarchy.test.ts +83 -93
  421. package/src/resources/extensions/gsd/tests/migrate-parser.test.ts +161 -170
  422. package/src/resources/extensions/gsd/tests/migrate-transformer.test.ts +125 -141
  423. package/src/resources/extensions/gsd/tests/migrate-validator-parsers.test.ts +107 -131
  424. package/src/resources/extensions/gsd/tests/migrate-writer-integration.test.ts +87 -96
  425. package/src/resources/extensions/gsd/tests/migrate-writer.test.ts +125 -164
  426. package/src/resources/extensions/gsd/tests/must-have-parser.test.ts +81 -94
  427. package/src/resources/extensions/gsd/tests/none-mode-gates.test.ts +75 -37
  428. package/src/resources/extensions/gsd/tests/overrides.test.ts +99 -106
  429. package/src/resources/extensions/gsd/tests/parallel-crash-recovery.test.ts +40 -47
  430. package/src/resources/extensions/gsd/tests/parallel-worker-monitoring.test.ts +25 -28
  431. package/src/resources/extensions/gsd/tests/parallel-workers-multi-milestone-e2e.test.ts +66 -83
  432. package/src/resources/extensions/gsd/tests/park-edge-cases.test.ts +54 -77
  433. package/src/resources/extensions/gsd/tests/park-milestone.test.ts +68 -115
  434. package/src/resources/extensions/gsd/tests/parsers.test.ts +546 -611
  435. package/src/resources/extensions/gsd/tests/paths.test.ts +72 -87
  436. package/src/resources/extensions/gsd/tests/post-unit-hooks.test.ts +77 -117
  437. package/src/resources/extensions/gsd/tests/preferences.test.ts +34 -9
  438. package/src/resources/extensions/gsd/tests/prompt-contracts.test.ts +11 -7
  439. package/src/resources/extensions/gsd/tests/prompt-db.test.ts +56 -56
  440. package/src/resources/extensions/gsd/tests/queue-draft-detection.test.ts +93 -119
  441. package/src/resources/extensions/gsd/tests/queue-order.test.ts +70 -82
  442. package/src/resources/extensions/gsd/tests/queue-reorder-e2e.test.ts +42 -55
  443. package/src/resources/extensions/gsd/tests/quick-auto-guard.test.ts +100 -0
  444. package/src/resources/extensions/gsd/tests/quick-branch-lifecycle.test.ts +45 -73
  445. package/src/resources/extensions/gsd/tests/reassess-prompt.test.ts +28 -38
  446. package/src/resources/extensions/gsd/tests/recovery-attempts-reset.test.ts +176 -0
  447. package/src/resources/extensions/gsd/tests/replan-slice.test.ts +73 -80
  448. package/src/resources/extensions/gsd/tests/repo-identity-worktree.test.ts +71 -74
  449. package/src/resources/extensions/gsd/tests/requirements.test.ts +70 -75
  450. package/src/resources/extensions/gsd/tests/retry-state-reset.test.ts +44 -66
  451. package/src/resources/extensions/gsd/tests/roadmap-parse-regression.test.ts +114 -181
  452. package/src/resources/extensions/gsd/tests/rule-registry.test.ts +63 -65
  453. package/src/resources/extensions/gsd/tests/run-uat.test.ts +66 -128
  454. package/src/resources/extensions/gsd/tests/session-lock-multipath.test.ts +18 -25
  455. package/src/resources/extensions/gsd/tests/session-lock-regression.test.ts +37 -44
  456. package/src/resources/extensions/gsd/tests/shared-wal.test.ts +19 -26
  457. package/src/resources/extensions/gsd/tests/sqlite-unavailable-gate.test.ts +63 -0
  458. package/src/resources/extensions/gsd/tests/stalled-tool-recovery.test.ts +6 -8
  459. package/src/resources/extensions/gsd/tests/stop-auto-merge-back.test.ts +67 -0
  460. package/src/resources/extensions/gsd/tests/survivor-branch-complete.test.ts +108 -0
  461. package/src/resources/extensions/gsd/tests/symlink-numbered-variants.test.ts +22 -28
  462. package/src/resources/extensions/gsd/tests/terminated-transient.test.ts +49 -0
  463. package/src/resources/extensions/gsd/tests/token-savings.test.ts +54 -56
  464. package/src/resources/extensions/gsd/tests/tool-call-loop-guard.test.ts +23 -25
  465. package/src/resources/extensions/gsd/tests/tool-naming.test.ts +10 -11
  466. package/src/resources/extensions/gsd/tests/unique-milestone-ids.test.ts +66 -82
  467. package/src/resources/extensions/gsd/tests/unit-runtime.test.ts +46 -47
  468. package/src/resources/extensions/gsd/tests/visualizer-critical-path.test.ts +20 -22
  469. package/src/resources/extensions/gsd/tests/visualizer-data.test.ts +84 -86
  470. package/src/resources/extensions/gsd/tests/visualizer-overlay.test.ts +41 -43
  471. package/src/resources/extensions/gsd/tests/visualizer-views.test.ts +94 -96
  472. package/src/resources/extensions/gsd/tests/windows-path-normalization.test.ts +11 -13
  473. package/src/resources/extensions/gsd/tests/worker-registry.test.ts +27 -29
  474. package/src/resources/extensions/gsd/tests/workflow-logger.test.ts +275 -0
  475. package/src/resources/extensions/gsd/tests/workflow-templates.test.ts +50 -52
  476. package/src/resources/extensions/gsd/tests/worktree-bugfix.test.ts +10 -13
  477. package/src/resources/extensions/gsd/tests/worktree-db-integration.test.ts +14 -18
  478. package/src/resources/extensions/gsd/tests/worktree-db.test.ts +38 -39
  479. package/src/resources/extensions/gsd/tests/worktree-e2e.test.ts +17 -21
  480. package/src/resources/extensions/gsd/tests/worktree-health.test.ts +25 -30
  481. package/src/resources/extensions/gsd/tests/worktree-integration.test.ts +30 -37
  482. package/src/resources/extensions/gsd/tests/worktree-journal-events.test.ts +220 -0
  483. package/src/resources/extensions/gsd/tests/worktree-submodule-safety.test.ts +65 -0
  484. package/src/resources/extensions/gsd/tests/worktree-symlink-removal.test.ts +15 -22
  485. package/src/resources/extensions/gsd/tests/worktree-sync-milestones.test.ts +59 -66
  486. package/src/resources/extensions/gsd/tests/worktree.test.ts +44 -50
  487. package/src/resources/extensions/gsd/tools/plan-slice.ts +2 -0
  488. package/src/resources/extensions/gsd/tools/plan-task.ts +2 -0
  489. package/src/resources/extensions/gsd/tools/replan-slice.ts +3 -0
  490. package/src/resources/extensions/gsd/tools/validate-milestone.ts +127 -0
  491. package/src/resources/extensions/gsd/workflow-logger.ts +193 -0
  492. package/src/resources/extensions/gsd/worktree-manager.ts +41 -5
  493. package/src/resources/extensions/gsd/worktree-resolver.ts +44 -0
  494. package/src/resources/extensions/mcp-client/index.ts +20 -0
  495. package/src/resources/extensions/voice/index.ts +11 -21
  496. package/src/resources/extensions/voice/linux-ready.ts +87 -0
  497. package/src/resources/extensions/voice/tests/linux-ready.test.ts +124 -0
  498. package/dist/web/standalone/.next/static/chunks/4024.0de81b543b28b9fe.js +0 -9
  499. package/dist/web/standalone/.next/static/chunks/app/page-7e9530a7122506c5.js +0 -1
  500. package/dist/web/standalone/.next/static/chunks/main-app-d3d4c336195465f9.js +0 -1
  501. package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/global-error-ab5a8926e07ec673.js +0 -1
  502. package/dist/web/standalone/.next/static/chunks/webpack-9014b5adb127a98a.js +0 -1
  503. package/dist/web/standalone/.next/static/css/8a727f372cf53002.css +0 -1
  504. /package/dist/web/standalone/.next/static/{mgkxN0mGP6gSUmGPEzbk_ → dFMji9G1LZ-Tv36el9pRT}/_buildManifest.js +0 -0
  505. /package/dist/web/standalone/.next/static/{mgkxN0mGP6gSUmGPEzbk_ → dFMji9G1LZ-Tv36el9pRT}/_ssgManifest.js +0 -0
@@ -0,0 +1,138 @@
1
+ // GSD Extension — Workflow Logger
2
+ // Centralized warning/error accumulator for the workflow engine pipeline.
3
+ // Captures structured entries that the auto-loop can drain after each unit
4
+ // to surface root causes for stuck loops, silent degradation, and blocked writes.
5
+ //
6
+ // Stderr policy: every logWarning/logError call writes immediately to stderr
7
+ // for terminal visibility. This is intentional — unlike debug-logger (which is
8
+ // opt-in and zero-overhead when disabled), workflow-logger covers operational
9
+ // warnings/errors that should always be visible. There is no disable flag.
10
+ //
11
+ // Singleton safety: _buffer is module-level and shared across all calls within
12
+ // a process. The auto-loop must call _resetLogs() (or drainAndSummarize()) at
13
+ // the start of each unit to prevent log bleed between units running in the same
14
+ // Node process.
15
+ // ─── Buffer ─────────────────────────────────────────────────────────────
16
+ const MAX_BUFFER = 100;
17
+ let _buffer = [];
18
+ // ─── Public API ─────────────────────────────────────────────────────────
19
+ /**
20
+ * Record a warning. Also writes to stderr for terminal visibility.
21
+ */
22
+ export function logWarning(component, message, context) {
23
+ _push("warn", component, message, context);
24
+ }
25
+ /**
26
+ * Record an error. Also writes to stderr for terminal visibility.
27
+ */
28
+ export function logError(component, message, context) {
29
+ _push("error", component, message, context);
30
+ }
31
+ /**
32
+ * Drain all accumulated entries and clear the buffer.
33
+ * Returns entries oldest-first.
34
+ *
35
+ * WARNING: Call summarizeLogs() or drainAndSummarize() BEFORE calling this
36
+ * if you need a summary — drainLogs() clears the buffer immediately.
37
+ */
38
+ export function drainLogs() {
39
+ const entries = _buffer;
40
+ _buffer = [];
41
+ return entries;
42
+ }
43
+ /**
44
+ * Atomically summarize then drain — the safe way to consume logs.
45
+ * Use this in the auto-loop instead of calling summarizeLogs() + drainLogs()
46
+ * separately to avoid the ordering footgun.
47
+ */
48
+ export function drainAndSummarize() {
49
+ const summary = summarizeLogs();
50
+ const logs = drainLogs();
51
+ return { logs, summary };
52
+ }
53
+ /**
54
+ * Peek at current entries without clearing.
55
+ */
56
+ export function peekLogs() {
57
+ return _buffer;
58
+ }
59
+ /**
60
+ * Returns true if the buffer contains any error-severity entries.
61
+ */
62
+ export function hasErrors() {
63
+ return _buffer.some((e) => e.severity === "error");
64
+ }
65
+ /**
66
+ * Returns true if the buffer contains any warn-severity entries.
67
+ * Use hasAnyIssues() if you want to check for either severity.
68
+ */
69
+ export function hasWarnings() {
70
+ return _buffer.some((e) => e.severity === "warn");
71
+ }
72
+ /**
73
+ * Returns true if the buffer contains any entries (warn or error).
74
+ */
75
+ export function hasAnyIssues() {
76
+ return _buffer.length > 0;
77
+ }
78
+ /**
79
+ * Get a one-line summary of accumulated issues for stuck detection messages.
80
+ * Returns null if no entries.
81
+ *
82
+ * Must be called BEFORE drainLogs() — use drainAndSummarize() for safe ordering.
83
+ */
84
+ export function summarizeLogs() {
85
+ if (_buffer.length === 0)
86
+ return null;
87
+ const errors = _buffer.filter((e) => e.severity === "error");
88
+ const warns = _buffer.filter((e) => e.severity === "warn");
89
+ const parts = [];
90
+ if (errors.length > 0) {
91
+ parts.push(`${errors.length} error(s): ${errors.map((e) => e.message).join("; ")}`);
92
+ }
93
+ if (warns.length > 0) {
94
+ parts.push(`${warns.length} warning(s): ${warns.map((e) => e.message).join("; ")}`);
95
+ }
96
+ return parts.join(" | ");
97
+ }
98
+ /**
99
+ * Format entries for display (used by auto-loop post-unit notification).
100
+ * Note: context fields are not included in the formatted output.
101
+ */
102
+ export function formatForNotification(entries) {
103
+ if (entries.length === 0)
104
+ return "";
105
+ if (entries.length === 1) {
106
+ const e = entries[0];
107
+ return `[${e.component}] ${e.message}`;
108
+ }
109
+ return entries
110
+ .map((e) => `[${e.component}] ${e.message}`)
111
+ .join("\n");
112
+ }
113
+ /**
114
+ * Reset buffer. Call at the start of each auto-loop unit to prevent log bleed
115
+ * between units running in the same process. Also used in tests via _resetLogs().
116
+ */
117
+ export function _resetLogs() {
118
+ _buffer = [];
119
+ }
120
+ // ─── Internal ───────────────────────────────────────────────────────────
121
+ function _push(severity, component, message, context) {
122
+ const entry = {
123
+ ts: new Date().toISOString(),
124
+ severity,
125
+ component,
126
+ message,
127
+ ...(context ? { context } : {}),
128
+ };
129
+ // Always forward to stderr so terminal watchers see it (see module header for policy)
130
+ const prefix = severity === "error" ? "ERROR" : "WARN";
131
+ const ctxStr = context ? ` ${JSON.stringify(context)}` : "";
132
+ process.stderr.write(`[gsd:${component}] ${prefix}: ${message}${ctxStr}\n`);
133
+ // Buffer for auto-loop to drain
134
+ _buffer.push(entry);
135
+ if (_buffer.length > MAX_BUFFER) {
136
+ _buffer.shift();
137
+ }
138
+ }
@@ -15,8 +15,10 @@
15
15
  * 4. remove() — git worktree remove + branch cleanup
16
16
  */
17
17
  import { existsSync, mkdirSync, readFileSync, realpathSync, rmSync } from "node:fs";
18
+ import { execFileSync } from "node:child_process";
18
19
  import { join, resolve, sep } from "node:path";
19
20
  import { GSDError, GSD_PARSE_ERROR, GSD_STALE_STATE, GSD_LOCK_HELD, GSD_GIT_ERROR, GSD_MERGE_CONFLICT } from "./errors.js";
21
+ import { logWarning } from "./workflow-logger.js";
20
22
  import { nativeBranchDelete, nativeBranchExists, nativeBranchForceReset, nativeCommit, nativeDetectMainBranch, nativeDiffContent, nativeDiffNameStatus, nativeDiffNumstat, nativeGetCurrentBranch, nativeLogOneline, nativeMergeSquash, nativeWorktreeAdd, nativeWorktreeList, nativeWorktreePrune, nativeWorktreeRemove, } from "./native-git-bridge.js";
21
23
  // ─── Path Helpers ──────────────────────────────────────────────────────────
22
24
  function normalizePathForComparison(path) {
@@ -84,7 +86,7 @@ export function createWorktree(basePath, name, opts = {}) {
84
86
  // worktree can be created in its place.
85
87
  const gitFilePath = join(wtPath, ".git");
86
88
  if (!existsSync(gitFilePath)) {
87
- console.error(`[GSD] Removing stale worktree directory (no .git file): ${wtPath}`);
89
+ logWarning("reconcile", `Removing stale worktree directory (no .git file): ${wtPath}`, { worktree: name });
88
90
  rmSync(wtPath, { recursive: true, force: true });
89
91
  }
90
92
  else {
@@ -240,9 +242,38 @@ export function removeWorktree(basePath, name, opts = {}) {
240
242
  }
241
243
  return;
242
244
  }
243
- // Remove worktree using the resolved path (force if requested, to handle dirty worktrees)
245
+ // Submodule safety (#2337): detect submodules with uncommitted changes
246
+ // before force-removing the worktree. Force removal destroys all uncommitted
247
+ // state, which is especially destructive for submodule directories.
248
+ let hasSubmoduleChanges = false;
249
+ const gitmodulesPath = join(resolvedWtPath, ".gitmodules");
250
+ if (existsSync(gitmodulesPath)) {
251
+ try {
252
+ const submoduleStatus = execFileSync("git", ["submodule", "status"], { cwd: resolvedWtPath, stdio: ["ignore", "pipe", "pipe"], encoding: "utf-8" }).trim();
253
+ // Lines starting with '+' indicate uncommitted submodule changes
254
+ hasSubmoduleChanges = submoduleStatus.split("\n").some((line) => line.startsWith("+") || line.startsWith("-"));
255
+ if (hasSubmoduleChanges) {
256
+ // Stash submodule changes so they are not lost during force removal.
257
+ // The stash is created in the worktree before it's torn down.
258
+ try {
259
+ execFileSync("git", ["stash", "push", "-m", "gsd: auto-stash submodule changes before worktree teardown"], { cwd: resolvedWtPath, stdio: ["ignore", "pipe", "pipe"], encoding: "utf-8" });
260
+ logWarning("reconcile", `Stashed uncommitted submodule changes before worktree teardown`, { worktree: name, path: resolvedWtPath });
261
+ }
262
+ catch {
263
+ // Stash failed — warn the user that submodule changes may be lost
264
+ logWarning("reconcile", `Submodule changes detected — stash failed, changes may be lost during force removal`, { worktree: name, path: resolvedWtPath });
265
+ }
266
+ }
267
+ }
268
+ catch {
269
+ // submodule status failed — proceed with normal removal
270
+ }
271
+ }
272
+ // Remove worktree: try non-force first when submodules have changes,
273
+ // falling back to force only after submodule state has been preserved.
274
+ const useForce = hasSubmoduleChanges ? false : force;
244
275
  try {
245
- nativeWorktreeRemove(basePath, resolvedWtPath, force);
276
+ nativeWorktreeRemove(basePath, resolvedWtPath, useForce);
246
277
  }
247
278
  catch { /* may fail */ }
248
279
  // If the directory is still there (e.g. locked), try harder with force
@@ -13,8 +13,11 @@
13
13
  * `process.chdir()` internally — this class MUST NOT double-chdir.
14
14
  */
15
15
  import { existsSync, unlinkSync } from "node:fs";
16
+ import { randomUUID } from "node:crypto";
16
17
  import { join } from "node:path";
17
18
  import { debugLog } from "./debug-logger.js";
19
+ import { MergeConflictError } from "./git-service.js";
20
+ import { emitJournalEvent } from "./journal.js";
18
21
  // ─── WorktreeResolver ──────────────────────────────────────────────────────
19
22
  export class WorktreeResolver {
20
23
  s;
@@ -76,6 +79,13 @@ export class WorktreeResolver {
76
79
  skipped: true,
77
80
  reason: "isolation-disabled",
78
81
  });
82
+ emitJournalEvent(this.s.originalBasePath || this.s.basePath, {
83
+ ts: new Date().toISOString(),
84
+ flowId: randomUUID(),
85
+ seq: 0,
86
+ eventType: "worktree-skip",
87
+ data: { milestoneId, reason: "isolation-disabled" },
88
+ });
79
89
  return;
80
90
  }
81
91
  const basePath = this.s.originalBasePath || this.s.basePath;
@@ -101,6 +111,13 @@ export class WorktreeResolver {
101
111
  result: "success",
102
112
  wtPath,
103
113
  });
114
+ emitJournalEvent(this.s.originalBasePath || this.s.basePath, {
115
+ ts: new Date().toISOString(),
116
+ flowId: randomUUID(),
117
+ seq: 0,
118
+ eventType: "worktree-enter",
119
+ data: { milestoneId, wtPath, created: !existingPath },
120
+ });
104
121
  ctx.notify(`Entered worktree for ${milestoneId} at ${wtPath}`, "info");
105
122
  }
106
123
  catch (err) {
@@ -111,6 +128,13 @@ export class WorktreeResolver {
111
128
  result: "error",
112
129
  error: msg,
113
130
  });
131
+ emitJournalEvent(this.s.originalBasePath || this.s.basePath, {
132
+ ts: new Date().toISOString(),
133
+ flowId: randomUUID(),
134
+ seq: 0,
135
+ eventType: "worktree-create-failed",
136
+ data: { milestoneId, error: msg, fallback: "project-root" },
137
+ });
114
138
  ctx.notify(`Auto-worktree creation for ${milestoneId} failed: ${msg}. Continuing in project root.`, "warning");
115
139
  // Do NOT update s.basePath — stay in project root
116
140
  }
@@ -193,6 +217,13 @@ export class WorktreeResolver {
193
217
  mode,
194
218
  basePath: this.s.basePath,
195
219
  });
220
+ emitJournalEvent(this.s.originalBasePath || this.s.basePath, {
221
+ ts: new Date().toISOString(),
222
+ flowId: randomUUID(),
223
+ seq: 0,
224
+ eventType: "worktree-merge-start",
225
+ data: { milestoneId, mode },
226
+ });
196
227
  if (mode === "none") {
197
228
  debugLog("WorktreeResolver", {
198
229
  action: "mergeAndExit",
@@ -284,6 +315,13 @@ export class WorktreeResolver {
284
315
  error: msg,
285
316
  fallback: "chdir-to-project-root",
286
317
  });
318
+ emitJournalEvent(this.s.originalBasePath || this.s.basePath, {
319
+ ts: new Date().toISOString(),
320
+ flowId: randomUUID(),
321
+ seq: 0,
322
+ eventType: "worktree-merge-failed",
323
+ data: { milestoneId, error: msg },
324
+ });
287
325
  // Surface a clear, actionable error. The worktree and milestone branch are
288
326
  // intentionally preserved — nothing has been deleted. The user can retry
289
327
  // /gsd dispatch complete-milestone or merge manually once the underlying issue is fixed
@@ -308,6 +346,11 @@ export class WorktreeResolver {
308
346
  /* best-effort */
309
347
  }
310
348
  }
349
+ // Re-throw MergeConflictError so the auto loop can detect real code
350
+ // conflicts and stop instead of retrying forever (#2330).
351
+ if (err instanceof MergeConflictError) {
352
+ throw err;
353
+ }
311
354
  }
312
355
  // Always restore basePath and rebuild — whether merge succeeded or failed
313
356
  this.restoreToProjectRoot();
@@ -162,6 +162,20 @@ function formatToolList(serverName, tools) {
162
162
  lines.push(`Call with: mcp_call(server="${serverName}", tool="<tool_name>", args={...})`);
163
163
  return lines.join("\n");
164
164
  }
165
+ // ─── Status helper (consumed by /gsd mcp) ─────────────────────────────────────
166
+ /**
167
+ * Return the live connection status for a named MCP server.
168
+ * Safe to call even when the server has never been connected.
169
+ */
170
+ export function getConnectionStatus(name) {
171
+ const conn = connections.get(name);
172
+ const cached = toolCache.get(name);
173
+ return {
174
+ connected: !!conn,
175
+ tools: cached ? cached.map((t) => t.name) : [],
176
+ error: undefined,
177
+ };
178
+ }
165
179
  // ─── Extension ────────────────────────────────────────────────────────────────
166
180
  export default function (pi) {
167
181
  // ── mcp_servers ──────────────────────────────────────────────────────────
@@ -2,22 +2,15 @@ import { shortcutDesc } from "../shared/mod.js";
2
2
  import { isKeyRelease, Key, matchesKey, truncateToWidth, visibleWidth } from "@gsd/pi-tui";
3
3
  import { spawn, execFileSync } from "node:child_process";
4
4
  import * as fs from "node:fs";
5
- import * as os from "node:os";
6
5
  import * as path from "node:path";
7
6
  import * as readline from "node:readline";
7
+ import { linuxPython, diagnoseSounddeviceError, ensureVoiceVenv } from "./linux-ready.js";
8
8
  const __extensionDir = import.meta.dirname;
9
9
  const SWIFT_SRC = path.join(__extensionDir, "speech-recognizer.swift");
10
10
  const RECOGNIZER_BIN = path.join(__extensionDir, "speech-recognizer");
11
11
  const PYTHON_SCRIPT = path.join(__extensionDir, "speech-recognizer.py");
12
12
  const IS_DARWIN = process.platform === "darwin";
13
13
  const IS_LINUX = process.platform === "linux";
14
- const VOICE_VENV_PYTHON = path.join(process.env.HOME || process.env.USERPROFILE || os.homedir(), ".gsd", "voice-venv", "bin", "python3");
15
- /** Return the python3 binary path — prefer venv if it exists, else system. */
16
- function linuxPython() {
17
- if (fs.existsSync(VOICE_VENV_PYTHON))
18
- return VOICE_VENV_PYTHON;
19
- return "python3";
20
- }
21
14
  function ensureBinary() {
22
15
  if (fs.existsSync(RECOGNIZER_BIN))
23
16
  return true;
@@ -58,19 +51,21 @@ function ensureLinuxReady(ctx) {
58
51
  }
59
52
  catch (err) {
60
53
  const stderr = err?.stderr?.toString() ?? "";
61
- if (stderr.includes("sounddevice") || stderr.includes("PortAudio") || stderr.includes("portaudio")) {
62
- ctx.ui.notify("Voice: install libportaudio2 with: sudo apt install libportaudio2", "error");
63
- }
64
- else if (stderr.includes("No module") || stderr.includes("ModuleNotFoundError")) {
65
- // Deps missing the Python script handles auto-install on first run,
66
- // so we let it through. The script's own ensure_deps() will pip install.
67
- ctx.ui.notify("Voice: installing dependencies on first run — this may take a moment", "info");
54
+ const diagnosis = diagnoseSounddeviceError(stderr);
55
+ if (diagnosis === "missing-module") {
56
+ // Module not installed — auto-create venv (handles PEP 668 systems
57
+ // where system pip is blocked). See #2403.
58
+ if (!ensureVoiceVenv({ notify: (msg, level) => ctx.ui.notify(msg, level) })) {
59
+ return false;
60
+ }
68
61
  linuxReady = true;
69
62
  return true;
70
63
  }
64
+ else if (diagnosis === "missing-portaudio") {
65
+ ctx.ui.notify("Voice: install libportaudio2 with: sudo apt install libportaudio2", "error");
66
+ }
71
67
  else {
72
68
  ctx.ui.notify(`Voice: dependency check failed — ${stderr.split("\n")[0] || "unknown error"}`, "error");
73
- return false;
74
69
  }
75
70
  return false;
76
71
  }
@@ -0,0 +1,67 @@
1
+ /**
2
+ * linux-ready.ts — Linux voice readiness logic (extracted for testability).
3
+ *
4
+ * Handles:
5
+ * - Detecting system vs venv python3
6
+ * - Diagnosing sounddevice import errors (portaudio vs missing module)
7
+ * - Auto-creating venv on PEP 668 systems
8
+ */
9
+ import { execFileSync } from "node:child_process";
10
+ import * as fs from "node:fs";
11
+ import * as os from "node:os";
12
+ import * as path from "node:path";
13
+ export const VOICE_VENV_DIR = path.join(process.env.HOME || process.env.USERPROFILE || os.homedir(), ".gsd", "voice-venv");
14
+ export const VOICE_VENV_PYTHON = path.join(VOICE_VENV_DIR, "bin", "python3");
15
+ /** Return the python3 binary path — prefer venv if it exists, else system. */
16
+ export function linuxPython() {
17
+ if (fs.existsSync(VOICE_VENV_PYTHON))
18
+ return VOICE_VENV_PYTHON;
19
+ return "python3";
20
+ }
21
+ /**
22
+ * Diagnose a sounddevice import error from its stderr output.
23
+ *
24
+ * Returns:
25
+ * - "missing-module" — sounddevice python package not installed
26
+ * - "missing-portaudio" — libportaudio2 native library not found
27
+ * - "unknown" — unrecognized error
28
+ *
29
+ * IMPORTANT: Check "No module" / "ModuleNotFoundError" BEFORE checking for the
30
+ * word "sounddevice", because `ModuleNotFoundError: No module named 'sounddevice'`
31
+ * contains both strings. The more specific check must come first.
32
+ */
33
+ export function diagnoseSounddeviceError(stderr) {
34
+ // Check for missing Python module FIRST — the error message
35
+ // "ModuleNotFoundError: No module named 'sounddevice'" contains the word
36
+ // "sounddevice", so the old order (checking "sounddevice" first) was wrong.
37
+ if (stderr.includes("No module") || stderr.includes("ModuleNotFoundError")) {
38
+ return "missing-module";
39
+ }
40
+ // Now check for native portaudio library issues.
41
+ if (stderr.includes("PortAudio") || stderr.includes("portaudio")) {
42
+ return "missing-portaudio";
43
+ }
44
+ return "unknown";
45
+ }
46
+ /**
47
+ * Auto-create the voice venv if it doesn't exist.
48
+ * Uses execFileSync internally (no shell, safe from injection).
49
+ *
50
+ * Returns true on success, false on failure.
51
+ */
52
+ export function ensureVoiceVenv(cb) {
53
+ const exists = cb.exists ?? fs.existsSync;
54
+ const execFile = cb.execFile ?? execFileSync;
55
+ if (exists(VOICE_VENV_PYTHON))
56
+ return true;
57
+ cb.notify("Voice: setting up Python environment — one-time setup", "info");
58
+ try {
59
+ execFile("python3", ["-m", "venv", VOICE_VENV_DIR], { timeout: 30000 });
60
+ execFile(path.join(VOICE_VENV_DIR, "bin", "pip"), ["install", "sounddevice", "requests", "--quiet"], { timeout: 120000 });
61
+ return true;
62
+ }
63
+ catch {
64
+ cb.notify("Voice: failed to create Python venv — run: python3 -m venv ~/.gsd/voice-venv", "error");
65
+ return false;
66
+ }
67
+ }
@@ -1 +1 @@
1
- mgkxN0mGP6gSUmGPEzbk_
1
+ dFMji9G1LZ-Tv36el9pRT
@@ -1,44 +1,44 @@
1
1
  {
2
2
  "/_not-found/page": "/_not-found",
3
3
  "/_global-error/page": "/_global-error",
4
- "/api/bridge-terminal/input/route": "/api/bridge-terminal/input",
5
4
  "/api/bridge-terminal/resize/route": "/api/bridge-terminal/resize",
6
5
  "/api/boot/route": "/api/boot",
6
+ "/api/bridge-terminal/input/route": "/api/bridge-terminal/input",
7
7
  "/api/bridge-terminal/stream/route": "/api/bridge-terminal/stream",
8
8
  "/api/cleanup/route": "/api/cleanup",
9
9
  "/api/dev-mode/route": "/api/dev-mode",
10
- "/api/export-data/route": "/api/export-data",
11
- "/api/browse-directories/route": "/api/browse-directories",
12
- "/api/captures/route": "/api/captures",
13
- "/api/doctor/route": "/api/doctor",
14
10
  "/api/forensics/route": "/api/forensics",
11
+ "/api/doctor/route": "/api/doctor",
12
+ "/api/export-data/route": "/api/export-data",
15
13
  "/api/git/route": "/api/git",
16
14
  "/api/history/route": "/api/history",
17
15
  "/api/hooks/route": "/api/hooks",
18
- "/api/knowledge/route": "/api/knowledge",
16
+ "/api/browse-directories/route": "/api/browse-directories",
17
+ "/api/captures/route": "/api/captures",
19
18
  "/api/inspect/route": "/api/inspect",
19
+ "/api/knowledge/route": "/api/knowledge",
20
+ "/api/recovery/route": "/api/recovery",
21
+ "/api/projects/route": "/api/projects",
20
22
  "/api/live-state/route": "/api/live-state",
21
23
  "/api/preferences/route": "/api/preferences",
22
- "/api/recovery/route": "/api/recovery",
23
24
  "/api/onboarding/route": "/api/onboarding",
24
- "/api/projects/route": "/api/projects",
25
- "/api/session/browser/route": "/api/session/browser",
26
25
  "/api/session/command/route": "/api/session/command",
26
+ "/api/session/browser/route": "/api/session/browser",
27
27
  "/api/session/events/route": "/api/session/events",
28
- "/api/session/manage/route": "/api/session/manage",
29
28
  "/api/settings-data/route": "/api/settings-data",
30
29
  "/api/shutdown/route": "/api/shutdown",
31
- "/api/skill-health/route": "/api/skill-health",
30
+ "/api/session/manage/route": "/api/session/manage",
32
31
  "/api/steer/route": "/api/steer",
33
- "/api/terminal/input/route": "/api/terminal/input",
32
+ "/api/files/route": "/api/files",
34
33
  "/api/terminal/resize/route": "/api/terminal/resize",
35
34
  "/api/switch-root/route": "/api/switch-root",
36
- "/api/files/route": "/api/files",
37
- "/api/terminal/stream/route": "/api/terminal/stream",
35
+ "/api/terminal/input/route": "/api/terminal/input",
38
36
  "/api/terminal/sessions/route": "/api/terminal/sessions",
39
- "/api/undo/route": "/api/undo",
40
37
  "/api/terminal/upload/route": "/api/terminal/upload",
38
+ "/api/skill-health/route": "/api/skill-health",
41
39
  "/api/visualizer/route": "/api/visualizer",
40
+ "/api/undo/route": "/api/undo",
41
+ "/api/terminal/stream/route": "/api/terminal/stream",
42
42
  "/api/update/route": "/api/update",
43
43
  "/api/remote-questions/route": "/api/remote-questions",
44
44
  "/page": "/"
@@ -4,14 +4,14 @@
4
4
  ],
5
5
  "devFiles": [],
6
6
  "lowPriorityFiles": [
7
- "static/mgkxN0mGP6gSUmGPEzbk_/_buildManifest.js",
8
- "static/mgkxN0mGP6gSUmGPEzbk_/_ssgManifest.js"
7
+ "static/dFMji9G1LZ-Tv36el9pRT/_buildManifest.js",
8
+ "static/dFMji9G1LZ-Tv36el9pRT/_ssgManifest.js"
9
9
  ],
10
10
  "rootMainFiles": [
11
- "static/chunks/webpack-9014b5adb127a98a.js",
11
+ "static/chunks/webpack-0a4cd455ec4197d2.js",
12
12
  "static/chunks/4bd1b696-e5d7c65570c947b7.js",
13
13
  "static/chunks/3794-337d1ca25ad99a89.js",
14
- "static/chunks/main-app-d3d4c336195465f9.js"
14
+ "static/chunks/main-app-fdab67f7802d7832.js"
15
15
  ],
16
16
  "rootMainFilesTree": {},
17
17
  "pages": {
@@ -78,8 +78,8 @@
78
78
  "dynamicRoutes": {},
79
79
  "notFoundRoutes": [],
80
80
  "preview": {
81
- "previewModeId": "d0812aa8574d46197901d506c0714ecc",
82
- "previewModeSigningKey": "d808ce4b70ad2c0e21488f190348c843058effc54e682bc7aa20f2fca678b29c",
83
- "previewModeEncryptionKey": "26aab007b3c7658a668ee18ba0b86420555f3168a25d5153ba05dad24cbe37bd"
81
+ "previewModeId": "67b4a2e3d3223f741935a0c0a5a12b78",
82
+ "previewModeSigningKey": "5993740289b20a3dacec7b48d4dad194b5e597dac00b095837e4b713b3163035",
83
+ "previewModeEncryptionKey": "0083ba5e4f8dd3f3244017c2bedffec984b9e3c5f3a5edbae4d5439c5339ba28"
84
84
  }
85
85
  }
@@ -5,8 +5,8 @@
5
5
  "static/css/659eccb5db697b76.css",
6
6
  "static/chunks/363642f4.f9053a63f1b97508.js",
7
7
  "static/chunks/4986-c2fc8845ce785303.js",
8
- "static/chunks/3721.bf31263de6d5fa46.js",
9
- "static/chunks/4024.0de81b543b28b9fe.js"
8
+ "static/chunks/485.243af25f0cdf50d6.js",
9
+ "static/chunks/4024.11ca5c01938e5948.js"
10
10
  ]
11
11
  },
12
12
  "components/gsd/chat-mode.tsx -> react-markdown": {
@@ -100,7 +100,7 @@
100
100
  "transform": "lodash/{{member}}"
101
101
  }
102
102
  },
103
- "outputFileTracingRoot": "/home/runner/_work/gsd-2/gsd-2",
103
+ "outputFileTracingRoot": "/__w/gsd-2/gsd-2",
104
104
  "cacheComponents": false,
105
105
  "cacheLife": {
106
106
  "default": {
@@ -297,11 +297,11 @@
297
297
  "node-pty"
298
298
  ],
299
299
  "turbopack": {
300
- "root": "/home/runner/_work/gsd-2/gsd-2"
300
+ "root": "/__w/gsd-2/gsd-2"
301
301
  },
302
302
  "distDirRoot": ".next"
303
303
  },
304
- "appDir": "/home/runner/_work/gsd-2/gsd-2/web",
304
+ "appDir": "/__w/gsd-2/gsd-2/web",
305
305
  "relativeAppDir": "web",
306
306
  "files": [
307
307
  ".next/routes-manifest.json",