gsd-pi 2.33.1-dev.ee47f1b → 2.34.0-dev.0150ae9

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 (356) hide show
  1. package/dist/bundled-resource-path.d.ts +8 -0
  2. package/dist/bundled-resource-path.js +14 -0
  3. package/dist/headless-query.js +6 -6
  4. package/dist/resources/extensions/gsd/auto/session.js +27 -32
  5. package/dist/resources/extensions/gsd/auto-dashboard.js +29 -109
  6. package/dist/resources/extensions/gsd/auto-direct-dispatch.js +6 -1
  7. package/dist/resources/extensions/gsd/auto-dispatch.js +52 -81
  8. package/dist/resources/extensions/gsd/auto-loop.js +956 -0
  9. package/dist/resources/extensions/gsd/auto-observability.js +4 -2
  10. package/dist/resources/extensions/gsd/auto-post-unit.js +75 -185
  11. package/dist/resources/extensions/gsd/auto-prompts.js +133 -101
  12. package/dist/resources/extensions/gsd/auto-recovery.js +59 -97
  13. package/dist/resources/extensions/gsd/auto-start.js +330 -309
  14. package/dist/resources/extensions/gsd/auto-supervisor.js +5 -11
  15. package/dist/resources/extensions/gsd/auto-timeout-recovery.js +7 -7
  16. package/dist/resources/extensions/gsd/auto-timers.js +3 -4
  17. package/dist/resources/extensions/gsd/auto-verification.js +35 -73
  18. package/dist/resources/extensions/gsd/auto-worktree-sync.js +167 -0
  19. package/dist/resources/extensions/gsd/auto-worktree.js +291 -126
  20. package/dist/resources/extensions/gsd/auto.js +283 -1013
  21. package/dist/resources/extensions/gsd/captures.js +10 -4
  22. package/dist/resources/extensions/gsd/dispatch-guard.js +7 -8
  23. package/dist/resources/extensions/gsd/docs/preferences-reference.md +25 -18
  24. package/dist/resources/extensions/gsd/doctor-checks.js +3 -4
  25. package/dist/resources/extensions/gsd/git-service.js +1 -1
  26. package/dist/resources/extensions/gsd/gsd-db.js +296 -151
  27. package/dist/resources/extensions/gsd/index.js +92 -228
  28. package/dist/resources/extensions/gsd/post-unit-hooks.js +13 -13
  29. package/dist/resources/extensions/gsd/progress-score.js +61 -156
  30. package/dist/resources/extensions/gsd/quick.js +98 -122
  31. package/dist/resources/extensions/gsd/session-lock.js +13 -0
  32. package/dist/resources/extensions/gsd/templates/preferences.md +1 -0
  33. package/dist/resources/extensions/gsd/undo.js +43 -48
  34. package/dist/resources/extensions/gsd/unit-runtime.js +16 -15
  35. package/dist/resources/extensions/gsd/verification-evidence.js +0 -1
  36. package/dist/resources/extensions/gsd/verification-gate.js +6 -35
  37. package/dist/resources/extensions/gsd/worktree-command.js +30 -24
  38. package/dist/resources/extensions/gsd/worktree-manager.js +2 -3
  39. package/dist/resources/extensions/gsd/worktree-resolver.js +344 -0
  40. package/dist/resources/extensions/gsd/worktree.js +7 -44
  41. package/dist/resources/extensions/mcp-client/index.js +2 -1
  42. package/dist/tool-bootstrap.js +59 -11
  43. package/dist/worktree-cli.js +7 -7
  44. package/package.json +1 -1
  45. package/packages/native/dist/native.d.ts +0 -2
  46. package/packages/native/dist/native.js +0 -2
  47. package/packages/native/src/native.ts +0 -3
  48. package/packages/pi-agent-core/dist/proxy.d.ts +1 -25
  49. package/packages/pi-agent-core/dist/proxy.d.ts.map +1 -1
  50. package/packages/pi-agent-core/dist/proxy.js +1 -1
  51. package/packages/pi-agent-core/dist/proxy.js.map +1 -1
  52. package/packages/pi-agent-core/src/proxy.ts +1 -1
  53. package/packages/pi-ai/dist/api-registry.d.ts +0 -2
  54. package/packages/pi-ai/dist/api-registry.d.ts.map +1 -1
  55. package/packages/pi-ai/dist/api-registry.js +0 -10
  56. package/packages/pi-ai/dist/api-registry.js.map +1 -1
  57. package/packages/pi-ai/dist/models.generated.d.ts +3630 -5483
  58. package/packages/pi-ai/dist/models.generated.d.ts.map +1 -1
  59. package/packages/pi-ai/dist/models.generated.js +735 -2588
  60. package/packages/pi-ai/dist/models.generated.js.map +1 -1
  61. package/packages/pi-ai/dist/providers/anthropic.d.ts +0 -8
  62. package/packages/pi-ai/dist/providers/anthropic.d.ts.map +1 -1
  63. package/packages/pi-ai/dist/providers/anthropic.js +1 -1
  64. package/packages/pi-ai/dist/providers/anthropic.js.map +1 -1
  65. package/packages/pi-ai/dist/providers/github-copilot-headers.d.ts +0 -1
  66. package/packages/pi-ai/dist/providers/github-copilot-headers.d.ts.map +1 -1
  67. package/packages/pi-ai/dist/providers/github-copilot-headers.js +1 -1
  68. package/packages/pi-ai/dist/providers/github-copilot-headers.js.map +1 -1
  69. package/packages/pi-ai/dist/providers/google-gemini-cli.d.ts +1 -43
  70. package/packages/pi-ai/dist/providers/google-gemini-cli.d.ts.map +1 -1
  71. package/packages/pi-ai/dist/providers/google-gemini-cli.js +2 -2
  72. package/packages/pi-ai/dist/providers/google-gemini-cli.js.map +1 -1
  73. package/packages/pi-ai/dist/providers/google-shared.d.ts +0 -4
  74. package/packages/pi-ai/dist/providers/google-shared.d.ts.map +1 -1
  75. package/packages/pi-ai/dist/providers/google-shared.js +1 -1
  76. package/packages/pi-ai/dist/providers/google-shared.js.map +1 -1
  77. package/packages/pi-ai/dist/providers/register-builtins.d.ts +0 -1
  78. package/packages/pi-ai/dist/providers/register-builtins.d.ts.map +1 -1
  79. package/packages/pi-ai/dist/providers/register-builtins.js +1 -1
  80. package/packages/pi-ai/dist/providers/register-builtins.js.map +1 -1
  81. package/packages/pi-ai/dist/utils/event-stream.d.ts +0 -2
  82. package/packages/pi-ai/dist/utils/event-stream.d.ts.map +1 -1
  83. package/packages/pi-ai/dist/utils/event-stream.js +0 -4
  84. package/packages/pi-ai/dist/utils/event-stream.js.map +1 -1
  85. package/packages/pi-ai/dist/utils/overflow.d.ts +0 -4
  86. package/packages/pi-ai/dist/utils/overflow.d.ts.map +1 -1
  87. package/packages/pi-ai/dist/utils/overflow.js +0 -6
  88. package/packages/pi-ai/dist/utils/overflow.js.map +1 -1
  89. package/packages/pi-ai/dist/utils/validation.d.ts +0 -8
  90. package/packages/pi-ai/dist/utils/validation.d.ts.map +1 -1
  91. package/packages/pi-ai/dist/utils/validation.js +0 -14
  92. package/packages/pi-ai/dist/utils/validation.js.map +1 -1
  93. package/packages/pi-ai/src/api-registry.ts +0 -12
  94. package/packages/pi-ai/src/models.generated.ts +1039 -2892
  95. package/packages/pi-ai/src/providers/anthropic.ts +1 -1
  96. package/packages/pi-ai/src/providers/github-copilot-headers.ts +1 -1
  97. package/packages/pi-ai/src/providers/google-gemini-cli.ts +2 -2
  98. package/packages/pi-ai/src/providers/google-shared.ts +1 -1
  99. package/packages/pi-ai/src/providers/register-builtins.ts +1 -1
  100. package/packages/pi-ai/src/utils/event-stream.ts +0 -5
  101. package/packages/pi-ai/src/utils/overflow.ts +1 -8
  102. package/packages/pi-ai/src/utils/validation.ts +0 -15
  103. package/packages/pi-coding-agent/dist/config.d.ts +0 -9
  104. package/packages/pi-coding-agent/dist/config.d.ts.map +1 -1
  105. package/packages/pi-coding-agent/dist/config.js +4 -8
  106. package/packages/pi-coding-agent/dist/config.js.map +1 -1
  107. package/packages/pi-coding-agent/dist/core/export-html/ansi-to-html.d.ts +0 -4
  108. package/packages/pi-coding-agent/dist/core/export-html/ansi-to-html.d.ts.map +1 -1
  109. package/packages/pi-coding-agent/dist/core/export-html/ansi-to-html.js +1 -1
  110. package/packages/pi-coding-agent/dist/core/export-html/ansi-to-html.js.map +1 -1
  111. package/packages/pi-coding-agent/dist/core/extensions/runner.d.ts +0 -5
  112. package/packages/pi-coding-agent/dist/core/extensions/runner.d.ts.map +1 -1
  113. package/packages/pi-coding-agent/dist/core/extensions/runner.js +0 -13
  114. package/packages/pi-coding-agent/dist/core/extensions/runner.js.map +1 -1
  115. package/packages/pi-coding-agent/dist/core/keybindings.d.ts +0 -8
  116. package/packages/pi-coding-agent/dist/core/keybindings.d.ts.map +1 -1
  117. package/packages/pi-coding-agent/dist/core/keybindings.js +2 -2
  118. package/packages/pi-coding-agent/dist/core/keybindings.js.map +1 -1
  119. package/packages/pi-coding-agent/dist/core/lsp/client.d.ts +0 -17
  120. package/packages/pi-coding-agent/dist/core/lsp/client.d.ts.map +1 -1
  121. package/packages/pi-coding-agent/dist/core/lsp/client.js +3 -62
  122. package/packages/pi-coding-agent/dist/core/lsp/client.js.map +1 -1
  123. package/packages/pi-coding-agent/dist/core/lsp/config.d.ts +0 -2
  124. package/packages/pi-coding-agent/dist/core/lsp/config.d.ts.map +1 -1
  125. package/packages/pi-coding-agent/dist/core/lsp/config.js +0 -7
  126. package/packages/pi-coding-agent/dist/core/lsp/config.js.map +1 -1
  127. package/packages/pi-coding-agent/dist/core/lsp/edits.d.ts +0 -5
  128. package/packages/pi-coding-agent/dist/core/lsp/edits.d.ts.map +1 -1
  129. package/packages/pi-coding-agent/dist/core/lsp/edits.js +1 -1
  130. package/packages/pi-coding-agent/dist/core/lsp/edits.js.map +1 -1
  131. package/packages/pi-coding-agent/dist/core/lsp/lspmux.d.ts +0 -1
  132. package/packages/pi-coding-agent/dist/core/lsp/lspmux.d.ts.map +1 -1
  133. package/packages/pi-coding-agent/dist/core/lsp/lspmux.js +1 -1
  134. package/packages/pi-coding-agent/dist/core/lsp/lspmux.js.map +1 -1
  135. package/packages/pi-coding-agent/dist/core/lsp/utils.d.ts +1 -6
  136. package/packages/pi-coding-agent/dist/core/lsp/utils.d.ts.map +1 -1
  137. package/packages/pi-coding-agent/dist/core/lsp/utils.js +1 -28
  138. package/packages/pi-coding-agent/dist/core/lsp/utils.js.map +1 -1
  139. package/packages/pi-coding-agent/dist/core/messages.d.ts +0 -8
  140. package/packages/pi-coding-agent/dist/core/messages.d.ts.map +1 -1
  141. package/packages/pi-coding-agent/dist/core/messages.js +5 -5
  142. package/packages/pi-coding-agent/dist/core/messages.js.map +1 -1
  143. package/packages/pi-coding-agent/dist/core/model-registry.d.ts +0 -3
  144. package/packages/pi-coding-agent/dist/core/model-registry.d.ts.map +1 -1
  145. package/packages/pi-coding-agent/dist/core/model-registry.js +1 -3
  146. package/packages/pi-coding-agent/dist/core/model-registry.js.map +1 -1
  147. package/packages/pi-coding-agent/dist/core/model-resolver.d.ts +1 -26
  148. package/packages/pi-coding-agent/dist/core/model-resolver.d.ts.map +1 -1
  149. package/packages/pi-coding-agent/dist/core/model-resolver.js +3 -59
  150. package/packages/pi-coding-agent/dist/core/model-resolver.js.map +1 -1
  151. package/packages/pi-coding-agent/dist/core/prompt-templates.d.ts +0 -17
  152. package/packages/pi-coding-agent/dist/core/prompt-templates.d.ts.map +1 -1
  153. package/packages/pi-coding-agent/dist/core/prompt-templates.js +2 -2
  154. package/packages/pi-coding-agent/dist/core/prompt-templates.js.map +1 -1
  155. package/packages/pi-coding-agent/dist/core/session-manager.d.ts +0 -4
  156. package/packages/pi-coding-agent/dist/core/session-manager.d.ts.map +1 -1
  157. package/packages/pi-coding-agent/dist/core/session-manager.js +2 -4
  158. package/packages/pi-coding-agent/dist/core/session-manager.js.map +1 -1
  159. package/packages/pi-coding-agent/dist/core/settings-manager.d.ts +0 -12
  160. package/packages/pi-coding-agent/dist/core/settings-manager.d.ts.map +1 -1
  161. package/packages/pi-coding-agent/dist/core/settings-manager.js +2 -2
  162. package/packages/pi-coding-agent/dist/core/settings-manager.js.map +1 -1
  163. package/packages/pi-coding-agent/dist/migrations.d.ts +0 -16
  164. package/packages/pi-coding-agent/dist/migrations.d.ts.map +1 -1
  165. package/packages/pi-coding-agent/dist/migrations.js +2 -2
  166. package/packages/pi-coding-agent/dist/migrations.js.map +1 -1
  167. package/packages/pi-coding-agent/dist/modes/interactive/components/session-selector-search.d.ts +0 -2
  168. package/packages/pi-coding-agent/dist/modes/interactive/components/session-selector-search.d.ts.map +1 -1
  169. package/packages/pi-coding-agent/dist/modes/interactive/components/session-selector-search.js +2 -2
  170. package/packages/pi-coding-agent/dist/modes/interactive/components/session-selector-search.js.map +1 -1
  171. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts +1 -24
  172. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  173. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js +50 -512
  174. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js.map +1 -1
  175. package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.d.ts +71 -0
  176. package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.d.ts.map +1 -0
  177. package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.js +514 -0
  178. package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.js.map +1 -0
  179. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.d.ts +65 -4
  180. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  181. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.js +6 -23
  182. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.js.map +1 -1
  183. package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.d.ts +12 -0
  184. package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.d.ts.map +1 -0
  185. package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.js +175 -0
  186. package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.js.map +1 -0
  187. package/packages/pi-coding-agent/dist/utils/changelog.d.ts +0 -4
  188. package/packages/pi-coding-agent/dist/utils/changelog.d.ts.map +1 -1
  189. package/packages/pi-coding-agent/dist/utils/changelog.js +1 -1
  190. package/packages/pi-coding-agent/dist/utils/changelog.js.map +1 -1
  191. package/packages/pi-coding-agent/dist/utils/clipboard-image.d.ts +0 -1
  192. package/packages/pi-coding-agent/dist/utils/clipboard-image.d.ts.map +1 -1
  193. package/packages/pi-coding-agent/dist/utils/clipboard-image.js +1 -1
  194. package/packages/pi-coding-agent/dist/utils/clipboard-image.js.map +1 -1
  195. package/packages/pi-coding-agent/dist/utils/photon.d.ts +0 -19
  196. package/packages/pi-coding-agent/dist/utils/photon.d.ts.map +1 -1
  197. package/packages/pi-coding-agent/dist/utils/photon.js +1 -120
  198. package/packages/pi-coding-agent/dist/utils/photon.js.map +1 -1
  199. package/packages/pi-coding-agent/dist/utils/tools-manager.d.ts +0 -1
  200. package/packages/pi-coding-agent/dist/utils/tools-manager.d.ts.map +1 -1
  201. package/packages/pi-coding-agent/dist/utils/tools-manager.js +1 -1
  202. package/packages/pi-coding-agent/dist/utils/tools-manager.js.map +1 -1
  203. package/packages/pi-coding-agent/package.json +1 -1
  204. package/packages/pi-coding-agent/src/config.ts +5 -10
  205. package/packages/pi-coding-agent/src/core/export-html/ansi-to-html.ts +1 -1
  206. package/packages/pi-coding-agent/src/core/extensions/runner.ts +0 -13
  207. package/packages/pi-coding-agent/src/core/keybindings.ts +2 -2
  208. package/packages/pi-coding-agent/src/core/lsp/client.ts +3 -73
  209. package/packages/pi-coding-agent/src/core/lsp/config.ts +0 -11
  210. package/packages/pi-coding-agent/src/core/lsp/edits.ts +1 -1
  211. package/packages/pi-coding-agent/src/core/lsp/lspmux.ts +1 -1
  212. package/packages/pi-coding-agent/src/core/lsp/utils.ts +1 -33
  213. package/packages/pi-coding-agent/src/core/messages.ts +5 -5
  214. package/packages/pi-coding-agent/src/core/model-registry.ts +0 -2
  215. package/packages/pi-coding-agent/src/core/model-resolver.ts +3 -77
  216. package/packages/pi-coding-agent/src/core/prompt-templates.ts +2 -2
  217. package/packages/pi-coding-agent/src/core/session-manager.ts +2 -4
  218. package/packages/pi-coding-agent/src/core/settings-manager.ts +2 -2
  219. package/packages/pi-coding-agent/src/migrations.ts +2 -2
  220. package/packages/pi-coding-agent/src/modes/interactive/components/session-selector-search.ts +2 -2
  221. package/packages/pi-coding-agent/src/modes/interactive/interactive-mode.ts +50 -561
  222. package/packages/pi-coding-agent/src/modes/interactive/slash-command-handlers.ts +653 -0
  223. package/packages/pi-coding-agent/src/modes/interactive/theme/theme.ts +7 -26
  224. package/packages/pi-coding-agent/src/modes/interactive/theme/themes.ts +196 -0
  225. package/packages/pi-coding-agent/src/utils/changelog.ts +1 -1
  226. package/packages/pi-coding-agent/src/utils/clipboard-image.ts +1 -1
  227. package/packages/pi-coding-agent/src/utils/photon.ts +0 -137
  228. package/packages/pi-coding-agent/src/utils/tools-manager.ts +1 -1
  229. package/packages/pi-tui/dist/components/editor.d.ts +0 -10
  230. package/packages/pi-tui/dist/components/editor.d.ts.map +1 -1
  231. package/packages/pi-tui/dist/components/editor.js +1 -1
  232. package/packages/pi-tui/dist/components/editor.js.map +1 -1
  233. package/packages/pi-tui/dist/overlay-layout.d.ts +55 -0
  234. package/packages/pi-tui/dist/overlay-layout.d.ts.map +1 -0
  235. package/packages/pi-tui/dist/overlay-layout.js +288 -0
  236. package/packages/pi-tui/dist/overlay-layout.js.map +1 -0
  237. package/packages/pi-tui/dist/tui.d.ts +0 -22
  238. package/packages/pi-tui/dist/tui.d.ts.map +1 -1
  239. package/packages/pi-tui/dist/tui.js +6 -272
  240. package/packages/pi-tui/dist/tui.js.map +1 -1
  241. package/packages/pi-tui/dist/utils.d.ts +0 -7
  242. package/packages/pi-tui/dist/utils.d.ts.map +1 -1
  243. package/packages/pi-tui/dist/utils.js +0 -44
  244. package/packages/pi-tui/dist/utils.js.map +1 -1
  245. package/packages/pi-tui/src/components/editor.ts +1 -1
  246. package/packages/pi-tui/src/overlay-layout.ts +372 -0
  247. package/packages/pi-tui/src/tui.ts +11 -312
  248. package/packages/pi-tui/src/utils.ts +0 -43
  249. package/pkg/dist/core/export-html/ansi-to-html.d.ts +0 -4
  250. package/pkg/dist/core/export-html/ansi-to-html.d.ts.map +1 -1
  251. package/pkg/dist/core/export-html/ansi-to-html.js +1 -1
  252. package/pkg/dist/core/export-html/ansi-to-html.js.map +1 -1
  253. package/pkg/dist/modes/interactive/theme/theme.d.ts +65 -4
  254. package/pkg/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  255. package/pkg/dist/modes/interactive/theme/theme.js +6 -23
  256. package/pkg/dist/modes/interactive/theme/theme.js.map +1 -1
  257. package/pkg/dist/modes/interactive/theme/themes.d.ts +12 -0
  258. package/pkg/dist/modes/interactive/theme/themes.d.ts.map +1 -0
  259. package/pkg/dist/modes/interactive/theme/themes.js +175 -0
  260. package/pkg/dist/modes/interactive/theme/themes.js.map +1 -0
  261. package/pkg/package.json +1 -1
  262. package/src/resources/extensions/gsd/auto/session.ts +47 -30
  263. package/src/resources/extensions/gsd/auto-dashboard.ts +28 -131
  264. package/src/resources/extensions/gsd/auto-direct-dispatch.ts +6 -1
  265. package/src/resources/extensions/gsd/auto-dispatch.ts +135 -91
  266. package/src/resources/extensions/gsd/auto-loop.ts +1665 -0
  267. package/src/resources/extensions/gsd/auto-observability.ts +4 -2
  268. package/src/resources/extensions/gsd/auto-post-unit.ts +85 -228
  269. package/src/resources/extensions/gsd/auto-prompts.ts +138 -109
  270. package/src/resources/extensions/gsd/auto-recovery.ts +124 -118
  271. package/src/resources/extensions/gsd/auto-start.ts +440 -354
  272. package/src/resources/extensions/gsd/auto-supervisor.ts +5 -12
  273. package/src/resources/extensions/gsd/auto-timeout-recovery.ts +8 -8
  274. package/src/resources/extensions/gsd/auto-timers.ts +3 -4
  275. package/src/resources/extensions/gsd/auto-verification.ts +76 -90
  276. package/src/resources/extensions/gsd/auto-worktree-sync.ts +204 -0
  277. package/src/resources/extensions/gsd/auto-worktree.ts +389 -141
  278. package/src/resources/extensions/gsd/auto.ts +515 -1199
  279. package/src/resources/extensions/gsd/captures.ts +10 -4
  280. package/src/resources/extensions/gsd/dispatch-guard.ts +13 -9
  281. package/src/resources/extensions/gsd/docs/preferences-reference.md +25 -18
  282. package/src/resources/extensions/gsd/doctor-checks.ts +3 -4
  283. package/src/resources/extensions/gsd/git-service.ts +8 -1
  284. package/src/resources/extensions/gsd/gitignore.ts +4 -2
  285. package/src/resources/extensions/gsd/gsd-db.ts +375 -180
  286. package/src/resources/extensions/gsd/index.ts +104 -263
  287. package/src/resources/extensions/gsd/post-unit-hooks.ts +13 -13
  288. package/src/resources/extensions/gsd/progress-score.ts +65 -200
  289. package/src/resources/extensions/gsd/quick.ts +121 -125
  290. package/src/resources/extensions/gsd/session-lock.ts +11 -0
  291. package/src/resources/extensions/gsd/templates/preferences.md +1 -0
  292. package/src/resources/extensions/gsd/tests/agent-end-retry.test.ts +32 -59
  293. package/src/resources/extensions/gsd/tests/all-milestones-complete-merge.test.ts +75 -27
  294. package/src/resources/extensions/gsd/tests/auto-budget-alerts.test.ts +1 -1
  295. package/src/resources/extensions/gsd/tests/auto-lock-creation.test.ts +37 -0
  296. package/src/resources/extensions/gsd/tests/auto-loop.test.ts +1458 -0
  297. package/src/resources/extensions/gsd/tests/auto-recovery.test.ts +8 -162
  298. package/src/resources/extensions/gsd/tests/auto-secrets-gate.test.ts +2 -108
  299. package/src/resources/extensions/gsd/tests/auto-session-encapsulation.test.ts +1 -3
  300. package/src/resources/extensions/gsd/tests/auto-worktree-milestone-merge.test.ts +0 -3
  301. package/src/resources/extensions/gsd/tests/auto-worktree.test.ts +58 -0
  302. package/src/resources/extensions/gsd/tests/dispatch-guard.test.ts +0 -55
  303. package/src/resources/extensions/gsd/tests/headless-query.test.ts +22 -0
  304. package/src/resources/extensions/gsd/tests/milestone-transition-worktree.test.ts +8 -11
  305. package/src/resources/extensions/gsd/tests/provider-errors.test.ts +4 -6
  306. package/src/resources/extensions/gsd/tests/run-uat.test.ts +3 -3
  307. package/src/resources/extensions/gsd/tests/session-lock-regression.test.ts +64 -0
  308. package/src/resources/extensions/gsd/tests/sidecar-queue.test.ts +181 -0
  309. package/src/resources/extensions/gsd/tests/stale-worktree-cwd.test.ts +0 -3
  310. package/src/resources/extensions/gsd/tests/token-profile.test.ts +6 -6
  311. package/src/resources/extensions/gsd/tests/triage-dispatch.test.ts +6 -6
  312. package/src/resources/extensions/gsd/tests/undo.test.ts +6 -0
  313. package/src/resources/extensions/gsd/tests/verification-evidence.test.ts +24 -26
  314. package/src/resources/extensions/gsd/tests/verification-gate.test.ts +7 -201
  315. package/src/resources/extensions/gsd/tests/worktree-db-integration.test.ts +205 -0
  316. package/src/resources/extensions/gsd/tests/worktree-db.test.ts +442 -0
  317. package/src/resources/extensions/gsd/tests/worktree-e2e.test.ts +0 -3
  318. package/src/resources/extensions/gsd/tests/worktree-resolver.test.ts +705 -0
  319. package/src/resources/extensions/gsd/tests/worktree-sync-milestones.test.ts +57 -106
  320. package/src/resources/extensions/gsd/tests/worktree.test.ts +5 -1
  321. package/src/resources/extensions/gsd/tests/write-gate.test.ts +43 -132
  322. package/src/resources/extensions/gsd/types.ts +90 -81
  323. package/src/resources/extensions/gsd/undo.ts +42 -46
  324. package/src/resources/extensions/gsd/unit-runtime.ts +14 -18
  325. package/src/resources/extensions/gsd/verification-evidence.ts +1 -3
  326. package/src/resources/extensions/gsd/verification-gate.ts +6 -39
  327. package/src/resources/extensions/gsd/worktree-command.ts +36 -24
  328. package/src/resources/extensions/gsd/worktree-manager.ts +2 -3
  329. package/src/resources/extensions/gsd/worktree-resolver.ts +485 -0
  330. package/src/resources/extensions/gsd/worktree.ts +7 -44
  331. package/src/resources/extensions/mcp-client/index.ts +2 -1
  332. package/dist/resources/extensions/gsd/auto-constants.js +0 -5
  333. package/dist/resources/extensions/gsd/auto-idempotency.js +0 -106
  334. package/dist/resources/extensions/gsd/auto-stuck-detection.js +0 -165
  335. package/dist/resources/extensions/gsd/mechanical-completion.js +0 -351
  336. package/packages/pi-coding-agent/dist/modes/interactive/theme/dark.json +0 -85
  337. package/packages/pi-coding-agent/dist/modes/interactive/theme/light.json +0 -84
  338. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme-schema.json +0 -335
  339. package/packages/pi-coding-agent/src/modes/interactive/theme/dark.json +0 -85
  340. package/packages/pi-coding-agent/src/modes/interactive/theme/light.json +0 -84
  341. package/packages/pi-coding-agent/src/modes/interactive/theme/theme-schema.json +0 -335
  342. package/pkg/dist/modes/interactive/theme/dark.json +0 -85
  343. package/pkg/dist/modes/interactive/theme/light.json +0 -84
  344. package/pkg/dist/modes/interactive/theme/theme-schema.json +0 -335
  345. package/src/resources/extensions/gsd/auto-constants.ts +0 -6
  346. package/src/resources/extensions/gsd/auto-idempotency.ts +0 -151
  347. package/src/resources/extensions/gsd/auto-stuck-detection.ts +0 -221
  348. package/src/resources/extensions/gsd/mechanical-completion.ts +0 -430
  349. package/src/resources/extensions/gsd/tests/auto-dispatch-loop.test.ts +0 -691
  350. package/src/resources/extensions/gsd/tests/auto-reentrancy-guard.test.ts +0 -127
  351. package/src/resources/extensions/gsd/tests/auto-skip-loop.test.ts +0 -123
  352. package/src/resources/extensions/gsd/tests/dispatch-stall-guard.test.ts +0 -126
  353. package/src/resources/extensions/gsd/tests/loop-regression.test.ts +0 -874
  354. package/src/resources/extensions/gsd/tests/mechanical-completion.test.ts +0 -356
  355. package/src/resources/extensions/gsd/tests/progress-score.test.ts +0 -206
  356. package/src/resources/extensions/gsd/tests/session-lock.test.ts +0 -434
@@ -1,127 +0,0 @@
1
- /**
2
- * auto-reentrancy-guard.test.ts — Tests for the unconditional reentrancy guard.
3
- *
4
- * Regression for #1272: auto-mode stuck-loop where gap watchdog or
5
- * pendingAgentEndRetry could enter dispatchNextUnit concurrently during
6
- * recursive skip chains because the reentrancy guard was bypassed when
7
- * skipDepth > 0.
8
- *
9
- * The fix makes the guard unconditional (`if (s.dispatching)` without
10
- * `&& s.skipDepth === 0`), and defers recursive re-dispatch via
11
- * setImmediate/setTimeout so s.dispatching is released first.
12
- */
13
-
14
- import {
15
- _getDispatching,
16
- _setDispatching,
17
- _getSkipDepth,
18
- _setSkipDepth,
19
- } from "../auto.ts";
20
- import { createTestContext } from "./test-helpers.ts";
21
-
22
- const { assertEq, assertTrue, report } = createTestContext();
23
-
24
- async function main(): Promise<void> {
25
- // ─── Test-only accessors work ───────────────────────────────────────────
26
- console.log("\n=== reentrancy guard: test accessors round-trip ===");
27
- {
28
- _setDispatching(false);
29
- assertEq(_getDispatching(), false, "dispatching starts false");
30
-
31
- _setDispatching(true);
32
- assertEq(_getDispatching(), true, "dispatching set to true");
33
-
34
- _setDispatching(false);
35
- assertEq(_getDispatching(), false, "dispatching reset to false");
36
- }
37
-
38
- // ─── skipDepth accessors ────────────────────────────────────────────────
39
- console.log("\n=== reentrancy guard: skipDepth accessors round-trip ===");
40
- {
41
- _setSkipDepth(0);
42
- assertEq(_getSkipDepth(), 0, "skipDepth starts at 0");
43
-
44
- _setSkipDepth(3);
45
- assertEq(_getSkipDepth(), 3, "skipDepth set to 3");
46
-
47
- _setSkipDepth(0);
48
- assertEq(_getSkipDepth(), 0, "skipDepth reset to 0");
49
- }
50
-
51
- // ─── Guard blocks even when skipDepth > 0 (#1272 regression) ───────────
52
- console.log("\n=== reentrancy guard: blocks when dispatching=true regardless of skipDepth ===");
53
- {
54
- // Simulate the scenario from #1272: dispatching=true + skipDepth>0
55
- // The old guard (`if (s.dispatching && s.skipDepth === 0)`) would allow
56
- // concurrent entry when skipDepth > 0. The fix makes the check
57
- // unconditional on skipDepth.
58
- _setDispatching(true);
59
- _setSkipDepth(2);
60
-
61
- // Verify dispatching is true — guard should block regardless of skipDepth
62
- assertTrue(
63
- _getDispatching() === true,
64
- "dispatching flag is true during skip chain"
65
- );
66
-
67
- // The actual reentrancy guard in dispatchNextUnit checks:
68
- // if (s.dispatching) { return; }
69
- // We verify the state that would trigger the guard:
70
- const wouldBlock = _getDispatching(); // unconditional check
71
- const wouldBlockOld = _getDispatching() && _getSkipDepth() === 0; // old check
72
-
73
- assertTrue(wouldBlock === true, "new guard blocks when dispatching=true, skipDepth=2");
74
- assertTrue(wouldBlockOld === false, "old guard WOULD NOT block when dispatching=true, skipDepth=2 (the bug)");
75
-
76
- // Clean up
77
- _setDispatching(false);
78
- _setSkipDepth(0);
79
- }
80
-
81
- // ─── Guard allows entry when dispatching=false ──────────────────────────
82
- console.log("\n=== reentrancy guard: allows entry when dispatching=false ===");
83
- {
84
- _setDispatching(false);
85
- _setSkipDepth(0);
86
- assertTrue(!_getDispatching(), "guard allows entry when dispatching=false, skipDepth=0");
87
-
88
- _setDispatching(false);
89
- _setSkipDepth(3);
90
- assertTrue(!_getDispatching(), "guard allows entry when dispatching=false, skipDepth=3");
91
-
92
- _setSkipDepth(0);
93
- }
94
-
95
- // ─── skipDepth does not affect guard decision (the fix) ─────────────────
96
- console.log("\n=== reentrancy guard: skipDepth is irrelevant to guard decision ===");
97
- {
98
- for (const depth of [0, 1, 2, 5]) {
99
- _setDispatching(true);
100
- _setSkipDepth(depth);
101
- assertTrue(
102
- _getDispatching() === true,
103
- `guard blocks at skipDepth=${depth} when dispatching=true`
104
- );
105
- }
106
-
107
- for (const depth of [0, 1, 2, 5]) {
108
- _setDispatching(false);
109
- _setSkipDepth(depth);
110
- assertTrue(
111
- _getDispatching() === false,
112
- `guard allows at skipDepth=${depth} when dispatching=false`
113
- );
114
- }
115
-
116
- // Clean up
117
- _setDispatching(false);
118
- _setSkipDepth(0);
119
- }
120
-
121
- report();
122
- }
123
-
124
- main().catch((err) => {
125
- console.error(err);
126
- process.exit(1);
127
- });
@@ -1,123 +0,0 @@
1
- /**
2
- * auto-skip-loop.test.ts — Tests for the consecutive-skip loop breaker.
3
- *
4
- * Regression for #728: auto-mode infinite skip loop on previously completed
5
- * plan-slice units when deriveState keeps returning the same unit.
6
- *
7
- * The skip paths in dispatchNextUnit track consecutive skips per unit via
8
- * unitConsecutiveSkips. When the same unit is skipped > MAX_CONSECUTIVE_SKIPS
9
- * times without a real dispatch in between, the completion record is evicted
10
- * so deriveState can reconcile.
11
- */
12
-
13
- import { mkdtempSync, mkdirSync, writeFileSync, rmSync } from "node:fs";
14
- import { join } from "node:path";
15
- import { tmpdir } from "node:os";
16
-
17
- import {
18
- _getUnitConsecutiveSkips,
19
- _resetUnitConsecutiveSkips,
20
- } from "../auto.ts";
21
- import { MAX_CONSECUTIVE_SKIPS } from "../auto/session.ts";
22
- import { persistCompletedKey, removePersistedKey, loadPersistedKeys } from "../auto-recovery.ts";
23
- import { createTestContext } from "./test-helpers.ts";
24
-
25
- const { assertEq, assertTrue, report } = createTestContext();
26
-
27
- function makeTmpBase(): string {
28
- const dir = mkdtempSync(join(tmpdir(), "gsd-skip-loop-test-"));
29
- mkdirSync(join(dir, ".gsd"), { recursive: true });
30
- return dir;
31
- }
32
-
33
- async function main(): Promise<void> {
34
- // ─── Counter starts at zero ────────────────────────────────────────────
35
- console.log("\n=== skip loop counter: initial state ===");
36
- {
37
- _resetUnitConsecutiveSkips();
38
- const map = _getUnitConsecutiveSkips();
39
- assertEq(map.size, 0, "counter map starts empty after reset");
40
- }
41
-
42
- // ─── Counter increments correctly ────────────────────────────────────
43
- console.log("\n=== skip loop counter: increments on repeated calls ===");
44
- {
45
- _resetUnitConsecutiveSkips();
46
- const map = _getUnitConsecutiveSkips();
47
- const key = "plan-slice/M001/S04";
48
-
49
- for (let i = 1; i <= MAX_CONSECUTIVE_SKIPS; i++) {
50
- const prev = map.get(key) ?? 0;
51
- map.set(key, prev + 1);
52
- }
53
-
54
- assertEq(map.get(key), MAX_CONSECUTIVE_SKIPS, `counter reaches MAX_CONSECUTIVE_SKIPS (${MAX_CONSECUTIVE_SKIPS})`);
55
- }
56
-
57
- // ─── Threshold constant is sane ──────────────────────────────────────
58
- console.log("\n=== skip loop counter: threshold is reasonable ===");
59
- {
60
- assertTrue(MAX_CONSECUTIVE_SKIPS >= 3, "threshold allows a few legitimate skips");
61
- assertTrue(MAX_CONSECUTIVE_SKIPS <= 10, "threshold catches loops quickly");
62
- }
63
-
64
- // ─── Reset clears all keys ────────────────────────────────────────────
65
- console.log("\n=== skip loop counter: reset clears all keys ===");
66
- {
67
- _resetUnitConsecutiveSkips();
68
- const map = _getUnitConsecutiveSkips();
69
- map.set("plan-slice/M001/S01", 2);
70
- map.set("plan-slice/M001/S02", 1);
71
- assertEq(map.size, 2, "map has 2 entries before reset");
72
-
73
- _resetUnitConsecutiveSkips();
74
- assertEq(_getUnitConsecutiveSkips().size, 0, "map empty after reset");
75
- }
76
-
77
- // ─── Eviction path: persistCompletedKey + removePersistedKey round-trip
78
- // (simulates what the loop-breaker does) ───────────────────────────
79
- console.log("\n=== skip loop counter: eviction removes persisted key ===");
80
- {
81
- _resetUnitConsecutiveSkips();
82
- const base = makeTmpBase();
83
- try {
84
- const key = "plan-slice/M001/S04";
85
- const keySet = new Set<string>();
86
-
87
- persistCompletedKey(base, key);
88
- loadPersistedKeys(base, keySet);
89
- assertTrue(keySet.has(key), "key persisted before eviction");
90
-
91
- // Simulate loop-breaker eviction
92
- keySet.delete(key);
93
- removePersistedKey(base, key);
94
- const keySet2 = new Set<string>();
95
- loadPersistedKeys(base, keySet2);
96
- assertTrue(!keySet2.has(key), "key absent after eviction");
97
- } finally {
98
- rmSync(base, { recursive: true, force: true });
99
- }
100
- }
101
-
102
- // ─── Counter resets per-key, not globally ─────────────────────────────
103
- console.log("\n=== skip loop counter: per-key isolation ===");
104
- {
105
- _resetUnitConsecutiveSkips();
106
- const map = _getUnitConsecutiveSkips();
107
- map.set("plan-slice/M001/S04", MAX_CONSECUTIVE_SKIPS + 1);
108
- map.set("plan-slice/M001/S05", 1);
109
-
110
- // Deleting S04 (eviction) should not affect S05
111
- map.delete("plan-slice/M001/S04");
112
- assertTrue(!map.has("plan-slice/M001/S04"), "S04 evicted");
113
- assertEq(map.get("plan-slice/M001/S05"), 1, "S05 counter unaffected");
114
- }
115
-
116
- _resetUnitConsecutiveSkips();
117
- report();
118
- }
119
-
120
- main().catch((err) => {
121
- console.error(err);
122
- process.exit(1);
123
- });
@@ -1,126 +0,0 @@
1
- /**
2
- * dispatch-stall-guard.test.ts — Verifies defensive guards against dispatch stalls (#1073).
3
- *
4
- * After a slice completes, dispatchNextUnit must reliably dispatch the next unit.
5
- * These tests verify:
6
- * 1. newSession() has timeout protection (prevents permanent hang if session creation stalls)
7
- * 2. handleAgentEnd has a dispatch hang guard (catches dispatchNextUnit itself hanging)
8
- * 3. Session timeout constants are exported for configurability
9
- */
10
-
11
- import test from "node:test";
12
- import assert from "node:assert/strict";
13
- import { readFileSync } from "node:fs";
14
- import { join, dirname } from "node:path";
15
- import { fileURLToPath } from "node:url";
16
-
17
- const __dirname = dirname(fileURLToPath(import.meta.url));
18
- const AUTO_TS_PATH = join(__dirname, "..", "auto.ts");
19
- const SESSION_TS_PATH = join(__dirname, "..", "auto", "session.ts");
20
-
21
- function getAutoTsSource(): string {
22
- return readFileSync(AUTO_TS_PATH, "utf-8");
23
- }
24
-
25
- function getSessionTsSource(): string {
26
- return readFileSync(SESSION_TS_PATH, "utf-8");
27
- }
28
-
29
- // ── Session timeout constants ───────────────────────────────────────────────
30
-
31
- test("AutoSession exports NEW_SESSION_TIMEOUT_MS constant", () => {
32
- const source = getSessionTsSource();
33
- assert.ok(
34
- source.includes("NEW_SESSION_TIMEOUT_MS"),
35
- "auto/session.ts must export NEW_SESSION_TIMEOUT_MS for newSession() timeout",
36
- );
37
- });
38
-
39
- test("AutoSession exports DISPATCH_HANG_TIMEOUT_MS constant", () => {
40
- const source = getSessionTsSource();
41
- assert.ok(
42
- source.includes("DISPATCH_HANG_TIMEOUT_MS"),
43
- "auto/session.ts must export DISPATCH_HANG_TIMEOUT_MS for dispatch hang detection",
44
- );
45
- });
46
-
47
- test("NEW_SESSION_TIMEOUT_MS is a reasonable value (15-120 seconds)", () => {
48
- const source = getSessionTsSource();
49
- const match = source.match(/NEW_SESSION_TIMEOUT_MS\s*=\s*(\d[\d_]*)/);
50
- assert.ok(match, "NEW_SESSION_TIMEOUT_MS must have a numeric value");
51
- const value = parseInt(match![1]!.replace(/_/g, ""), 10);
52
- assert.ok(value >= 15_000 && value <= 120_000,
53
- `NEW_SESSION_TIMEOUT_MS must be 15-120s, got ${value}ms`,
54
- );
55
- });
56
-
57
- test("DISPATCH_HANG_TIMEOUT_MS is greater than NEW_SESSION_TIMEOUT_MS", () => {
58
- const source = getSessionTsSource();
59
- const sessionMatch = source.match(/NEW_SESSION_TIMEOUT_MS\s*=\s*(\d[\d_]*)/);
60
- const dispatchMatch = source.match(/DISPATCH_HANG_TIMEOUT_MS\s*=\s*(\d[\d_]*)/);
61
- assert.ok(sessionMatch && dispatchMatch, "Both timeout constants must exist");
62
- const sessionTimeout = parseInt(sessionMatch![1]!.replace(/_/g, ""), 10);
63
- const dispatchTimeout = parseInt(dispatchMatch![1]!.replace(/_/g, ""), 10);
64
- assert.ok(dispatchTimeout > sessionTimeout,
65
- `DISPATCH_HANG_TIMEOUT_MS (${dispatchTimeout}) must be > NEW_SESSION_TIMEOUT_MS (${sessionTimeout})`,
66
- );
67
- });
68
-
69
- // ── newSession() timeout in dispatchNextUnit ─────────────────────────────────
70
-
71
- test("dispatchNextUnit wraps newSession() with Promise.race timeout", () => {
72
- const source = getAutoTsSource();
73
- // Search the full file — dispatchNextUnit is very large
74
- assert.ok(
75
- source.includes("Promise.race") && source.includes("NEW_SESSION_TIMEOUT_MS"),
76
- "dispatchNextUnit must use Promise.race with NEW_SESSION_TIMEOUT_MS to timeout newSession() (#1073)",
77
- );
78
- });
79
-
80
- test("dispatchNextUnit handles newSession() timeout gracefully", () => {
81
- const source = getAutoTsSource();
82
- // Must notify user when session times out
83
- assert.ok(
84
- source.includes("Session creation timed out") || source.includes("Session creation failed"),
85
- "dispatchNextUnit must notify user when newSession() times out or fails (#1073)",
86
- );
87
- });
88
-
89
- // ── Dispatch hang guard in handleAgentEnd ────────────────────────────────────
90
-
91
- test("handleAgentEnd has a dispatch hang guard before dispatchNextUnit", () => {
92
- const source = getAutoTsSource();
93
- const fnIdx = source.indexOf("export async function handleAgentEnd");
94
- assert.ok(fnIdx > -1, "handleAgentEnd must exist");
95
-
96
- // Find the section between step mode check and dispatchNextUnit call
97
- const fnBlock = source.slice(fnIdx, source.indexOf("\n// ─── Step Mode", fnIdx + 100));
98
- assert.ok(
99
- fnBlock.includes("DISPATCH_HANG_TIMEOUT_MS") || fnBlock.includes("dispatchHangGuard"),
100
- "handleAgentEnd must have a dispatch hang guard before calling dispatchNextUnit (#1073)",
101
- );
102
- });
103
-
104
- test("dispatch hang guard is cleared in finally block", () => {
105
- const source = getAutoTsSource();
106
- const fnIdx = source.indexOf("export async function handleAgentEnd");
107
- const fnBlock = source.slice(fnIdx, source.indexOf("\n// ─── Step Mode", fnIdx + 100));
108
- assert.ok(
109
- fnBlock.includes("clearTimeout(dispatchHangGuard)"),
110
- "dispatch hang guard must be cleared in finally block to prevent false alarms (#1073)",
111
- );
112
- });
113
-
114
- // ── Constants are imported in auto.ts ────────────────────────────────────────
115
-
116
- test("auto.ts imports NEW_SESSION_TIMEOUT_MS and DISPATCH_HANG_TIMEOUT_MS", () => {
117
- const source = getAutoTsSource();
118
- assert.ok(
119
- source.includes("NEW_SESSION_TIMEOUT_MS"),
120
- "auto.ts must import NEW_SESSION_TIMEOUT_MS from session.ts",
121
- );
122
- assert.ok(
123
- source.includes("DISPATCH_HANG_TIMEOUT_MS"),
124
- "auto.ts must import DISPATCH_HANG_TIMEOUT_MS from session.ts",
125
- );
126
- });