gsd-pi 2.58.0-dev.778d6ac → 2.58.0-dev.d63175c

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 (628) hide show
  1. package/README.md +1 -1
  2. package/dist/cli.js +35 -49
  3. package/dist/headless-ui.d.ts +0 -17
  4. package/dist/headless-ui.js +3 -97
  5. package/dist/headless.js +6 -67
  6. package/dist/help-text.js +0 -1
  7. package/dist/onboarding.js +0 -44
  8. package/dist/resource-loader.js +1 -16
  9. package/dist/resources/agents/researcher.md +1 -1
  10. package/dist/resources/extensions/ask-user-questions.js +3 -16
  11. package/dist/resources/extensions/async-jobs/extension-manifest.json +1 -1
  12. package/dist/resources/extensions/bg-shell/extension-manifest.json +1 -1
  13. package/dist/resources/extensions/browser-tools/extension-manifest.json +1 -1
  14. package/dist/resources/extensions/claude-code-cli/partial-builder.js +6 -14
  15. package/dist/resources/extensions/claude-code-cli/stream-adapter.js +36 -59
  16. package/dist/resources/extensions/context7/extension-manifest.json +1 -1
  17. package/dist/resources/extensions/get-secrets-from-user.js +5 -8
  18. package/dist/resources/extensions/google-search/extension-manifest.json +1 -1
  19. package/dist/resources/extensions/google-search/index.js +1 -2
  20. package/dist/resources/extensions/gsd/auto/phases.js +21 -25
  21. package/dist/resources/extensions/gsd/auto-artifact-paths.js +2 -2
  22. package/dist/resources/extensions/gsd/auto-dashboard.js +20 -37
  23. package/dist/resources/extensions/gsd/auto-dispatch.js +2 -17
  24. package/dist/resources/extensions/gsd/auto-model-selection.js +3 -26
  25. package/dist/resources/extensions/gsd/auto-post-unit.js +4 -16
  26. package/dist/resources/extensions/gsd/auto-prompts.js +1 -1
  27. package/dist/resources/extensions/gsd/auto-recovery.js +5 -13
  28. package/dist/resources/extensions/gsd/auto-start.js +22 -35
  29. package/dist/resources/extensions/gsd/auto-worktree.js +12 -196
  30. package/dist/resources/extensions/gsd/bootstrap/agent-end-recovery.js +0 -32
  31. package/dist/resources/extensions/gsd/bootstrap/db-tools.js +8 -80
  32. package/dist/resources/extensions/gsd/bootstrap/dynamic-tools.js +1 -32
  33. package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +18 -33
  34. package/dist/resources/extensions/gsd/bootstrap/system-context.js +11 -44
  35. package/dist/resources/extensions/gsd/bootstrap/write-gate.js +0 -67
  36. package/dist/resources/extensions/gsd/captures.js +4 -56
  37. package/dist/resources/extensions/gsd/db-writer.js +8 -116
  38. package/dist/resources/extensions/gsd/doctor-git-checks.js +0 -28
  39. package/dist/resources/extensions/gsd/doctor-providers.js +1 -2
  40. package/dist/resources/extensions/gsd/doctor-runtime-checks.js +4 -5
  41. package/dist/resources/extensions/gsd/doctor.js +1 -3
  42. package/dist/resources/extensions/gsd/error-classifier.js +10 -13
  43. package/dist/resources/extensions/gsd/extension-manifest.json +1 -16
  44. package/dist/resources/extensions/gsd/forensics.js +20 -123
  45. package/dist/resources/extensions/gsd/git-service.js +1 -23
  46. package/dist/resources/extensions/gsd/gitignore.js +0 -33
  47. package/dist/resources/extensions/gsd/gsd-db.js +9 -36
  48. package/dist/resources/extensions/gsd/guided-flow.js +44 -106
  49. package/dist/resources/extensions/gsd/health-widget-core.js +0 -31
  50. package/dist/resources/extensions/gsd/health-widget.js +0 -17
  51. package/dist/resources/extensions/gsd/index.js +1 -1
  52. package/dist/resources/extensions/gsd/memory-extractor.js +0 -7
  53. package/dist/resources/extensions/gsd/migrate-external.js +1 -8
  54. package/dist/resources/extensions/gsd/model-cost-table.js +0 -18
  55. package/dist/resources/extensions/gsd/model-router.js +1 -35
  56. package/dist/resources/extensions/gsd/native-git-bridge.js +0 -17
  57. package/dist/resources/extensions/gsd/notifications.js +1 -16
  58. package/dist/resources/extensions/gsd/parallel-eligibility.js +2 -13
  59. package/dist/resources/extensions/gsd/parallel-merge.js +5 -78
  60. package/dist/resources/extensions/gsd/parsers-legacy.js +3 -20
  61. package/dist/resources/extensions/gsd/paths.js +0 -43
  62. package/dist/resources/extensions/gsd/preferences-models.js +1 -14
  63. package/dist/resources/extensions/gsd/preferences-types.js +1 -2
  64. package/dist/resources/extensions/gsd/preferences.js +16 -13
  65. package/dist/resources/extensions/gsd/prompt-loader.js +1 -4
  66. package/dist/resources/extensions/gsd/prompts/complete-milestone.md +1 -1
  67. package/dist/resources/extensions/gsd/prompts/complete-slice.md +2 -4
  68. package/dist/resources/extensions/gsd/prompts/discuss-headless.md +1 -1
  69. package/dist/resources/extensions/gsd/prompts/discuss.md +1 -1
  70. package/dist/resources/extensions/gsd/prompts/execute-task.md +1 -3
  71. package/dist/resources/extensions/gsd/prompts/forensics.md +2 -2
  72. package/dist/resources/extensions/gsd/prompts/guided-discuss-milestone.md +1 -1
  73. package/dist/resources/extensions/gsd/prompts/guided-discuss-slice.md +1 -1
  74. package/dist/resources/extensions/gsd/prompts/plan-slice.md +0 -2
  75. package/dist/resources/extensions/gsd/prompts/rethink.md +1 -1
  76. package/dist/resources/extensions/gsd/prompts/triage-captures.md +0 -1
  77. package/dist/resources/extensions/gsd/repo-identity.js +11 -205
  78. package/dist/resources/extensions/gsd/rethink.js +0 -5
  79. package/dist/resources/extensions/gsd/roadmap-slices.js +4 -5
  80. package/dist/resources/extensions/gsd/state.js +27 -85
  81. package/dist/resources/extensions/gsd/tests/dist-redirect.mjs +1 -20
  82. package/dist/resources/extensions/gsd/tools/complete-task.js +71 -34
  83. package/dist/resources/extensions/gsd/tools/plan-milestone.js +2 -12
  84. package/dist/resources/extensions/gsd/tools/reassess-roadmap.js +1 -29
  85. package/dist/resources/extensions/gsd/tools/validate-milestone.js +3 -14
  86. package/dist/resources/extensions/gsd/triage-resolution.js +7 -22
  87. package/dist/resources/extensions/gsd/undo.js +2 -2
  88. package/dist/resources/extensions/gsd/unit-ownership.js +33 -164
  89. package/dist/resources/extensions/gsd/verdict-parser.js +8 -20
  90. package/dist/resources/extensions/gsd/workflow-manifest.js +5 -24
  91. package/dist/resources/extensions/gsd/workflow-projections.js +63 -95
  92. package/dist/resources/extensions/gsd/workflow-reconcile.js +5 -35
  93. package/dist/resources/extensions/gsd/workspace-index.js +0 -24
  94. package/dist/resources/extensions/gsd/worktree-manager.js +1 -105
  95. package/dist/resources/extensions/gsd/worktree-resolver.js +3 -20
  96. package/dist/resources/extensions/mcp-client/index.js +7 -11
  97. package/dist/resources/extensions/search-the-web/extension-manifest.json +1 -1
  98. package/dist/resources/extensions/shared/interview-ui.js +1 -11
  99. package/dist/resources/skills/create-gsd-extension/SKILL.md +3 -5
  100. package/dist/resources/skills/create-gsd-extension/references/key-rules-gotchas.md +4 -5
  101. package/dist/resources/skills/create-gsd-extension/workflows/add-capability.md +2 -2
  102. package/dist/resources/skills/create-gsd-extension/workflows/create-extension.md +4 -4
  103. package/dist/resources/skills/create-gsd-extension/workflows/debug-extension.md +3 -5
  104. package/dist/web/standalone/.next/BUILD_ID +1 -1
  105. package/dist/web/standalone/.next/app-path-routes-manifest.json +17 -17
  106. package/dist/web/standalone/.next/build-manifest.json +3 -3
  107. package/dist/web/standalone/.next/prerender-manifest.json +3 -3
  108. package/dist/web/standalone/.next/react-loadable-manifest.json +1 -1
  109. package/dist/web/standalone/.next/required-server-files.json +1 -1
  110. package/dist/web/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  111. package/dist/web/standalone/.next/server/app/_global-error.html +2 -2
  112. package/dist/web/standalone/.next/server/app/_global-error.rsc +1 -1
  113. package/dist/web/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  114. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  115. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  116. package/dist/web/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  117. package/dist/web/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  118. package/dist/web/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  119. package/dist/web/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  120. package/dist/web/standalone/.next/server/app/_not-found.html +1 -1
  121. package/dist/web/standalone/.next/server/app/_not-found.rsc +2 -2
  122. package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
  123. package/dist/web/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  124. package/dist/web/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
  125. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  126. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  127. package/dist/web/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  128. package/dist/web/standalone/.next/server/app/api/boot/route_client-reference-manifest.js +1 -1
  129. package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route_client-reference-manifest.js +1 -1
  130. package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route_client-reference-manifest.js +1 -1
  131. package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route_client-reference-manifest.js +1 -1
  132. package/dist/web/standalone/.next/server/app/api/browse-directories/route_client-reference-manifest.js +1 -1
  133. package/dist/web/standalone/.next/server/app/api/captures/route.js +1 -1
  134. package/dist/web/standalone/.next/server/app/api/captures/route_client-reference-manifest.js +1 -1
  135. package/dist/web/standalone/.next/server/app/api/cleanup/route.js +1 -1
  136. package/dist/web/standalone/.next/server/app/api/cleanup/route_client-reference-manifest.js +1 -1
  137. package/dist/web/standalone/.next/server/app/api/dev-mode/route_client-reference-manifest.js +1 -1
  138. package/dist/web/standalone/.next/server/app/api/doctor/route.js +1 -1
  139. package/dist/web/standalone/.next/server/app/api/doctor/route_client-reference-manifest.js +1 -1
  140. package/dist/web/standalone/.next/server/app/api/experimental/route_client-reference-manifest.js +1 -1
  141. package/dist/web/standalone/.next/server/app/api/export-data/route.js +1 -1
  142. package/dist/web/standalone/.next/server/app/api/export-data/route_client-reference-manifest.js +1 -1
  143. package/dist/web/standalone/.next/server/app/api/files/route_client-reference-manifest.js +1 -1
  144. package/dist/web/standalone/.next/server/app/api/forensics/route.js +1 -1
  145. package/dist/web/standalone/.next/server/app/api/forensics/route_client-reference-manifest.js +1 -1
  146. package/dist/web/standalone/.next/server/app/api/git/route_client-reference-manifest.js +1 -1
  147. package/dist/web/standalone/.next/server/app/api/history/route.js +1 -1
  148. package/dist/web/standalone/.next/server/app/api/history/route_client-reference-manifest.js +1 -1
  149. package/dist/web/standalone/.next/server/app/api/hooks/route.js +1 -1
  150. package/dist/web/standalone/.next/server/app/api/hooks/route_client-reference-manifest.js +1 -1
  151. package/dist/web/standalone/.next/server/app/api/inspect/route_client-reference-manifest.js +1 -1
  152. package/dist/web/standalone/.next/server/app/api/knowledge/route_client-reference-manifest.js +1 -1
  153. package/dist/web/standalone/.next/server/app/api/live-state/route_client-reference-manifest.js +1 -1
  154. package/dist/web/standalone/.next/server/app/api/onboarding/route_client-reference-manifest.js +1 -1
  155. package/dist/web/standalone/.next/server/app/api/preferences/route_client-reference-manifest.js +1 -1
  156. package/dist/web/standalone/.next/server/app/api/projects/route_client-reference-manifest.js +1 -1
  157. package/dist/web/standalone/.next/server/app/api/recovery/route.js +1 -1
  158. package/dist/web/standalone/.next/server/app/api/recovery/route_client-reference-manifest.js +1 -1
  159. package/dist/web/standalone/.next/server/app/api/remote-questions/route_client-reference-manifest.js +1 -1
  160. package/dist/web/standalone/.next/server/app/api/session/browser/route_client-reference-manifest.js +1 -1
  161. package/dist/web/standalone/.next/server/app/api/session/command/route_client-reference-manifest.js +1 -1
  162. package/dist/web/standalone/.next/server/app/api/session/events/route_client-reference-manifest.js +1 -1
  163. package/dist/web/standalone/.next/server/app/api/session/manage/route_client-reference-manifest.js +1 -1
  164. package/dist/web/standalone/.next/server/app/api/settings-data/route.js +1 -1
  165. package/dist/web/standalone/.next/server/app/api/settings-data/route_client-reference-manifest.js +1 -1
  166. package/dist/web/standalone/.next/server/app/api/shutdown/route_client-reference-manifest.js +1 -1
  167. package/dist/web/standalone/.next/server/app/api/skill-health/route.js +1 -1
  168. package/dist/web/standalone/.next/server/app/api/skill-health/route_client-reference-manifest.js +1 -1
  169. package/dist/web/standalone/.next/server/app/api/steer/route_client-reference-manifest.js +1 -1
  170. package/dist/web/standalone/.next/server/app/api/switch-root/route_client-reference-manifest.js +1 -1
  171. package/dist/web/standalone/.next/server/app/api/terminal/input/route_client-reference-manifest.js +1 -1
  172. package/dist/web/standalone/.next/server/app/api/terminal/resize/route_client-reference-manifest.js +1 -1
  173. package/dist/web/standalone/.next/server/app/api/terminal/sessions/route_client-reference-manifest.js +1 -1
  174. package/dist/web/standalone/.next/server/app/api/terminal/stream/route_client-reference-manifest.js +1 -1
  175. package/dist/web/standalone/.next/server/app/api/terminal/upload/route_client-reference-manifest.js +1 -1
  176. package/dist/web/standalone/.next/server/app/api/undo/route.js +1 -1
  177. package/dist/web/standalone/.next/server/app/api/undo/route_client-reference-manifest.js +1 -1
  178. package/dist/web/standalone/.next/server/app/api/update/route.js +1 -1
  179. package/dist/web/standalone/.next/server/app/api/update/route_client-reference-manifest.js +1 -1
  180. package/dist/web/standalone/.next/server/app/api/visualizer/route.js +1 -1
  181. package/dist/web/standalone/.next/server/app/api/visualizer/route_client-reference-manifest.js +1 -1
  182. package/dist/web/standalone/.next/server/app/index.html +1 -1
  183. package/dist/web/standalone/.next/server/app/index.rsc +2 -2
  184. package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  185. package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +2 -2
  186. package/dist/web/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
  187. package/dist/web/standalone/.next/server/app/index.segments/_index.segment.rsc +2 -2
  188. package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  189. package/dist/web/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  190. package/dist/web/standalone/.next/server/app-paths-manifest.json +17 -17
  191. package/dist/web/standalone/.next/server/chunks/2229.js +2 -2
  192. package/dist/web/standalone/.next/server/middleware-build-manifest.js +1 -1
  193. package/dist/web/standalone/.next/server/middleware-react-loadable-manifest.js +1 -1
  194. package/dist/web/standalone/.next/server/pages/404.html +1 -1
  195. package/dist/web/standalone/.next/server/pages/500.html +2 -2
  196. package/dist/web/standalone/.next/server/server-reference-manifest.json +1 -1
  197. package/dist/web/standalone/.next/static/chunks/6502.8b732f67a11b11b4.js +9 -0
  198. package/dist/web/standalone/.next/static/chunks/{webpack-a1c1e452c6b32d04.js → webpack-61d3afac6d0f0ce7.js} +1 -1
  199. package/dist/web/standalone/.next/static/css/a58ef8a151aa0493.css +1 -0
  200. package/dist/web/standalone/server.js +1 -1
  201. package/dist/web-mode.js +1 -2
  202. package/package.json +2 -2
  203. package/packages/native/dist/ast/index.js +5 -9
  204. package/packages/native/dist/ast/types.js +1 -2
  205. package/packages/native/dist/clipboard/index.js +7 -12
  206. package/packages/native/dist/clipboard/types.js +1 -2
  207. package/packages/native/dist/diff/index.js +7 -12
  208. package/packages/native/dist/diff/types.js +1 -2
  209. package/packages/native/dist/fd/index.js +3 -6
  210. package/packages/native/dist/fd/types.js +1 -2
  211. package/packages/native/dist/glob/index.js +5 -9
  212. package/packages/native/dist/glob/types.js +1 -2
  213. package/packages/native/dist/grep/index.js +5 -9
  214. package/packages/native/dist/grep/types.js +1 -2
  215. package/packages/native/dist/gsd-parser/index.js +11 -18
  216. package/packages/native/dist/gsd-parser/types.js +1 -2
  217. package/packages/native/dist/highlight/index.js +7 -12
  218. package/packages/native/dist/highlight/types.js +1 -2
  219. package/packages/native/dist/html/index.js +3 -6
  220. package/packages/native/dist/html/types.js +1 -2
  221. package/packages/native/dist/image/index.js +5 -10
  222. package/packages/native/dist/image/types.js +4 -7
  223. package/packages/native/dist/index.js +17 -70
  224. package/packages/native/dist/json-parse/index.js +8 -13
  225. package/packages/native/dist/native.js +10 -47
  226. package/packages/native/dist/ps/index.js +9 -15
  227. package/packages/native/dist/ps/types.js +1 -2
  228. package/packages/native/dist/stream-process/index.js +7 -12
  229. package/packages/native/dist/text/index.js +14 -24
  230. package/packages/native/dist/text/types.js +2 -5
  231. package/packages/native/dist/truncate/index.js +7 -12
  232. package/packages/native/dist/ttsr/index.js +7 -12
  233. package/packages/native/dist/ttsr/types.js +1 -2
  234. package/packages/native/dist/xxhash/index.js +5 -9
  235. package/packages/native/package.json +19 -19
  236. package/packages/native/src/native.ts +8 -9
  237. package/packages/pi-agent-core/dist/agent-loop.js +2 -3
  238. package/packages/pi-agent-core/dist/agent-loop.js.map +1 -1
  239. package/packages/pi-agent-core/dist/proxy.d.ts +1 -1
  240. package/packages/pi-agent-core/dist/proxy.d.ts.map +1 -1
  241. package/packages/pi-agent-core/dist/proxy.js.map +1 -1
  242. package/packages/pi-agent-core/src/agent-loop.ts +2 -3
  243. package/packages/pi-agent-core/src/proxy.ts +1 -1
  244. package/packages/pi-ai/dist/env-api-keys.js +0 -1
  245. package/packages/pi-ai/dist/env-api-keys.js.map +1 -1
  246. package/packages/pi-ai/dist/index.d.ts +0 -1
  247. package/packages/pi-ai/dist/index.d.ts.map +1 -1
  248. package/packages/pi-ai/dist/index.js +0 -1
  249. package/packages/pi-ai/dist/index.js.map +1 -1
  250. package/packages/pi-ai/dist/providers/anthropic-shared.d.ts.map +1 -1
  251. package/packages/pi-ai/dist/providers/anthropic-shared.js +2 -19
  252. package/packages/pi-ai/dist/providers/anthropic-shared.js.map +1 -1
  253. package/packages/pi-ai/dist/types.d.ts +3 -3
  254. package/packages/pi-ai/dist/types.d.ts.map +1 -1
  255. package/packages/pi-ai/dist/types.js.map +1 -1
  256. package/packages/pi-ai/dist/utils/json-parse.d.ts +0 -3
  257. package/packages/pi-ai/dist/utils/json-parse.d.ts.map +1 -1
  258. package/packages/pi-ai/dist/utils/json-parse.js +1 -24
  259. package/packages/pi-ai/dist/utils/json-parse.js.map +1 -1
  260. package/packages/pi-ai/src/env-api-keys.ts +0 -1
  261. package/packages/pi-ai/src/index.ts +0 -1
  262. package/packages/pi-ai/src/providers/anthropic-shared.ts +2 -17
  263. package/packages/pi-ai/src/types.ts +2 -3
  264. package/packages/pi-ai/src/utils/json-parse.ts +1 -28
  265. package/packages/pi-coding-agent/dist/core/agent-session.d.ts +0 -4
  266. package/packages/pi-coding-agent/dist/core/agent-session.d.ts.map +1 -1
  267. package/packages/pi-coding-agent/dist/core/agent-session.js +0 -31
  268. package/packages/pi-coding-agent/dist/core/agent-session.js.map +1 -1
  269. package/packages/pi-coding-agent/dist/core/compaction/compaction.d.ts +1 -17
  270. package/packages/pi-coding-agent/dist/core/compaction/compaction.d.ts.map +1 -1
  271. package/packages/pi-coding-agent/dist/core/compaction/compaction.js +2 -62
  272. package/packages/pi-coding-agent/dist/core/compaction/compaction.js.map +1 -1
  273. package/packages/pi-coding-agent/dist/core/exec.d.ts.map +1 -1
  274. package/packages/pi-coding-agent/dist/core/exec.js +1 -3
  275. package/packages/pi-coding-agent/dist/core/exec.js.map +1 -1
  276. package/packages/pi-coding-agent/dist/core/extensions/index.d.ts +0 -4
  277. package/packages/pi-coding-agent/dist/core/extensions/index.d.ts.map +1 -1
  278. package/packages/pi-coding-agent/dist/core/extensions/index.js +0 -2
  279. package/packages/pi-coding-agent/dist/core/extensions/index.js.map +1 -1
  280. package/packages/pi-coding-agent/dist/core/extensions/loader.d.ts +0 -5
  281. package/packages/pi-coding-agent/dist/core/extensions/loader.d.ts.map +1 -1
  282. package/packages/pi-coding-agent/dist/core/extensions/loader.js +0 -5
  283. package/packages/pi-coding-agent/dist/core/extensions/loader.js.map +1 -1
  284. package/packages/pi-coding-agent/dist/core/index.d.ts +1 -1
  285. package/packages/pi-coding-agent/dist/core/index.d.ts.map +1 -1
  286. package/packages/pi-coding-agent/dist/core/index.js +1 -1
  287. package/packages/pi-coding-agent/dist/core/index.js.map +1 -1
  288. package/packages/pi-coding-agent/dist/core/lsp/index.d.ts.map +1 -1
  289. package/packages/pi-coding-agent/dist/core/lsp/index.js +0 -3
  290. package/packages/pi-coding-agent/dist/core/lsp/index.js.map +1 -1
  291. package/packages/pi-coding-agent/dist/core/lsp/lspmux.d.ts.map +1 -1
  292. package/packages/pi-coding-agent/dist/core/lsp/lspmux.js +0 -3
  293. package/packages/pi-coding-agent/dist/core/lsp/lspmux.js.map +1 -1
  294. package/packages/pi-coding-agent/dist/core/messages.d.ts.map +1 -1
  295. package/packages/pi-coding-agent/dist/core/messages.js +2 -31
  296. package/packages/pi-coding-agent/dist/core/messages.js.map +1 -1
  297. package/packages/pi-coding-agent/dist/core/model-resolver.d.ts.map +1 -1
  298. package/packages/pi-coding-agent/dist/core/model-resolver.js +0 -1
  299. package/packages/pi-coding-agent/dist/core/model-resolver.js.map +1 -1
  300. package/packages/pi-coding-agent/dist/core/resource-loader.d.ts +0 -10
  301. package/packages/pi-coding-agent/dist/core/resource-loader.d.ts.map +1 -1
  302. package/packages/pi-coding-agent/dist/core/resource-loader.js +1 -12
  303. package/packages/pi-coding-agent/dist/core/resource-loader.js.map +1 -1
  304. package/packages/pi-coding-agent/dist/core/retry-handler.d.ts +0 -6
  305. package/packages/pi-coding-agent/dist/core/retry-handler.d.ts.map +1 -1
  306. package/packages/pi-coding-agent/dist/core/retry-handler.js +1 -48
  307. package/packages/pi-coding-agent/dist/core/retry-handler.js.map +1 -1
  308. package/packages/pi-coding-agent/dist/core/tools/hashline-read.d.ts.map +1 -1
  309. package/packages/pi-coding-agent/dist/core/tools/hashline-read.js +3 -10
  310. package/packages/pi-coding-agent/dist/core/tools/hashline-read.js.map +1 -1
  311. package/packages/pi-coding-agent/dist/core/tools/read.d.ts.map +1 -1
  312. package/packages/pi-coding-agent/dist/core/tools/read.js +4 -13
  313. package/packages/pi-coding-agent/dist/core/tools/read.js.map +1 -1
  314. package/packages/pi-coding-agent/dist/index.d.ts +2 -2
  315. package/packages/pi-coding-agent/dist/index.d.ts.map +1 -1
  316. package/packages/pi-coding-agent/dist/index.js +1 -1
  317. package/packages/pi-coding-agent/dist/index.js.map +1 -1
  318. package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.d.ts.map +1 -1
  319. package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.js +0 -4
  320. package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.js.map +1 -1
  321. package/packages/pi-coding-agent/dist/modes/rpc/remote-terminal.d.ts +0 -1
  322. package/packages/pi-coding-agent/dist/modes/rpc/remote-terminal.d.ts.map +1 -1
  323. package/packages/pi-coding-agent/dist/modes/rpc/remote-terminal.js +0 -5
  324. package/packages/pi-coding-agent/dist/modes/rpc/remote-terminal.js.map +1 -1
  325. package/packages/pi-coding-agent/src/core/agent-session.ts +1 -38
  326. package/packages/pi-coding-agent/src/core/compaction/compaction.ts +1 -94
  327. package/packages/pi-coding-agent/src/core/exec.ts +1 -3
  328. package/packages/pi-coding-agent/src/core/extensions/index.ts +0 -4
  329. package/packages/pi-coding-agent/src/core/extensions/loader.ts +0 -5
  330. package/packages/pi-coding-agent/src/core/index.ts +0 -6
  331. package/packages/pi-coding-agent/src/core/lsp/index.ts +0 -3
  332. package/packages/pi-coding-agent/src/core/lsp/lspmux.ts +0 -3
  333. package/packages/pi-coding-agent/src/core/messages.ts +2 -29
  334. package/packages/pi-coding-agent/src/core/model-resolver.ts +0 -1
  335. package/packages/pi-coding-agent/src/core/resource-loader.ts +1 -20
  336. package/packages/pi-coding-agent/src/core/retry-handler.ts +1 -52
  337. package/packages/pi-coding-agent/src/core/tools/hashline-read.ts +3 -11
  338. package/packages/pi-coding-agent/src/core/tools/read.ts +4 -14
  339. package/packages/pi-coding-agent/src/index.ts +0 -6
  340. package/packages/pi-coding-agent/src/modes/interactive/controllers/chat-controller.ts +0 -7
  341. package/packages/pi-coding-agent/src/modes/rpc/remote-terminal.ts +0 -6
  342. package/packages/pi-tui/dist/terminal.d.ts +0 -2
  343. package/packages/pi-tui/dist/terminal.d.ts.map +1 -1
  344. package/packages/pi-tui/dist/terminal.js +0 -9
  345. package/packages/pi-tui/dist/terminal.js.map +1 -1
  346. package/packages/pi-tui/dist/tui.d.ts.map +1 -1
  347. package/packages/pi-tui/dist/tui.js +0 -9
  348. package/packages/pi-tui/dist/tui.js.map +1 -1
  349. package/packages/pi-tui/src/terminal.ts +0 -14
  350. package/packages/pi-tui/src/tui.ts +0 -8
  351. package/scripts/ensure-workspace-builds.cjs +14 -45
  352. package/src/resources/agents/researcher.md +1 -1
  353. package/src/resources/extensions/ask-user-questions.ts +3 -21
  354. package/src/resources/extensions/async-jobs/extension-manifest.json +1 -1
  355. package/src/resources/extensions/bg-shell/extension-manifest.json +1 -1
  356. package/src/resources/extensions/browser-tools/extension-manifest.json +1 -1
  357. package/src/resources/extensions/claude-code-cli/partial-builder.ts +6 -13
  358. package/src/resources/extensions/claude-code-cli/stream-adapter.ts +35 -63
  359. package/src/resources/extensions/claude-code-cli/tests/partial-builder.test.ts +0 -28
  360. package/src/resources/extensions/claude-code-cli/tests/stream-adapter.test.ts +1 -108
  361. package/src/resources/extensions/context7/extension-manifest.json +1 -1
  362. package/src/resources/extensions/get-secrets-from-user.ts +5 -8
  363. package/src/resources/extensions/google-search/extension-manifest.json +1 -1
  364. package/src/resources/extensions/google-search/index.ts +1 -2
  365. package/src/resources/extensions/gsd/auto/loop-deps.ts +0 -1
  366. package/src/resources/extensions/gsd/auto/phases.ts +34 -43
  367. package/src/resources/extensions/gsd/auto-artifact-paths.ts +2 -2
  368. package/src/resources/extensions/gsd/auto-dashboard.ts +19 -37
  369. package/src/resources/extensions/gsd/auto-dispatch.ts +2 -18
  370. package/src/resources/extensions/gsd/auto-model-selection.ts +5 -26
  371. package/src/resources/extensions/gsd/auto-post-unit.ts +4 -18
  372. package/src/resources/extensions/gsd/auto-prompts.ts +1 -1
  373. package/src/resources/extensions/gsd/auto-recovery.ts +5 -12
  374. package/src/resources/extensions/gsd/auto-start.ts +26 -35
  375. package/src/resources/extensions/gsd/auto-worktree.ts +9 -190
  376. package/src/resources/extensions/gsd/bootstrap/agent-end-recovery.ts +0 -31
  377. package/src/resources/extensions/gsd/bootstrap/db-tools.ts +8 -85
  378. package/src/resources/extensions/gsd/bootstrap/dynamic-tools.ts +1 -38
  379. package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +19 -31
  380. package/src/resources/extensions/gsd/bootstrap/system-context.ts +11 -50
  381. package/src/resources/extensions/gsd/bootstrap/write-gate.ts +0 -75
  382. package/src/resources/extensions/gsd/captures.ts +3 -63
  383. package/src/resources/extensions/gsd/db-writer.ts +7 -140
  384. package/src/resources/extensions/gsd/doctor-git-checks.ts +0 -26
  385. package/src/resources/extensions/gsd/doctor-providers.ts +1 -2
  386. package/src/resources/extensions/gsd/doctor-runtime-checks.ts +4 -5
  387. package/src/resources/extensions/gsd/doctor.ts +1 -3
  388. package/src/resources/extensions/gsd/error-classifier.ts +11 -14
  389. package/src/resources/extensions/gsd/extension-manifest.json +1 -16
  390. package/src/resources/extensions/gsd/forensics.ts +20 -144
  391. package/src/resources/extensions/gsd/git-service.ts +3 -26
  392. package/src/resources/extensions/gsd/gitignore.ts +0 -33
  393. package/src/resources/extensions/gsd/gsd-db.ts +7 -43
  394. package/src/resources/extensions/gsd/guided-flow.ts +45 -114
  395. package/src/resources/extensions/gsd/health-widget-core.ts +0 -34
  396. package/src/resources/extensions/gsd/health-widget.ts +0 -17
  397. package/src/resources/extensions/gsd/index.ts +0 -1
  398. package/src/resources/extensions/gsd/memory-extractor.ts +0 -8
  399. package/src/resources/extensions/gsd/migrate-external.ts +1 -9
  400. package/src/resources/extensions/gsd/model-cost-table.ts +0 -19
  401. package/src/resources/extensions/gsd/model-router.ts +1 -35
  402. package/src/resources/extensions/gsd/native-git-bridge.ts +0 -17
  403. package/src/resources/extensions/gsd/notifications.ts +0 -16
  404. package/src/resources/extensions/gsd/parallel-eligibility.ts +2 -15
  405. package/src/resources/extensions/gsd/parallel-merge.ts +4 -87
  406. package/src/resources/extensions/gsd/parsers-legacy.ts +3 -22
  407. package/src/resources/extensions/gsd/paths.ts +0 -42
  408. package/src/resources/extensions/gsd/preferences-models.ts +1 -14
  409. package/src/resources/extensions/gsd/preferences-types.ts +1 -2
  410. package/src/resources/extensions/gsd/preferences.ts +15 -13
  411. package/src/resources/extensions/gsd/prompt-loader.ts +1 -4
  412. package/src/resources/extensions/gsd/prompts/complete-milestone.md +1 -1
  413. package/src/resources/extensions/gsd/prompts/complete-slice.md +2 -4
  414. package/src/resources/extensions/gsd/prompts/discuss-headless.md +1 -1
  415. package/src/resources/extensions/gsd/prompts/discuss.md +1 -1
  416. package/src/resources/extensions/gsd/prompts/execute-task.md +1 -3
  417. package/src/resources/extensions/gsd/prompts/forensics.md +2 -2
  418. package/src/resources/extensions/gsd/prompts/guided-discuss-milestone.md +1 -1
  419. package/src/resources/extensions/gsd/prompts/guided-discuss-slice.md +1 -1
  420. package/src/resources/extensions/gsd/prompts/plan-slice.md +0 -2
  421. package/src/resources/extensions/gsd/prompts/rethink.md +1 -1
  422. package/src/resources/extensions/gsd/prompts/triage-captures.md +0 -1
  423. package/src/resources/extensions/gsd/repo-identity.ts +11 -186
  424. package/src/resources/extensions/gsd/rethink.ts +0 -6
  425. package/src/resources/extensions/gsd/roadmap-slices.ts +4 -5
  426. package/src/resources/extensions/gsd/state.ts +32 -84
  427. package/src/resources/extensions/gsd/tests/auto-loop.test.ts +0 -29
  428. package/src/resources/extensions/gsd/tests/auto-model-selection.test.ts +1 -71
  429. package/src/resources/extensions/gsd/tests/captures.test.ts +0 -103
  430. package/src/resources/extensions/gsd/tests/complete-milestone.test.ts +0 -27
  431. package/src/resources/extensions/gsd/tests/complete-slice.test.ts +0 -21
  432. package/src/resources/extensions/gsd/tests/db-writer.test.ts +12 -7
  433. package/src/resources/extensions/gsd/tests/derive-state-db.test.ts +5 -78
  434. package/src/resources/extensions/gsd/tests/derive-state.test.ts +0 -29
  435. package/src/resources/extensions/gsd/tests/discuss-queued-milestones.test.ts +0 -40
  436. package/src/resources/extensions/gsd/tests/dist-redirect.mjs +1 -20
  437. package/src/resources/extensions/gsd/tests/doctor-providers.test.ts +0 -117
  438. package/src/resources/extensions/gsd/tests/empty-db-reconciliation.test.ts +79 -0
  439. package/src/resources/extensions/gsd/tests/forensics-dedup.test.ts +0 -31
  440. package/src/resources/extensions/gsd/tests/gsd-tools.test.ts +12 -125
  441. package/src/resources/extensions/gsd/tests/health-widget.test.ts +0 -67
  442. package/src/resources/extensions/gsd/tests/integration/auto-recovery.test.ts +1 -111
  443. package/src/resources/extensions/gsd/tests/integration/auto-worktree-milestone-merge.test.ts +0 -101
  444. package/src/resources/extensions/gsd/tests/integration/auto-worktree.test.ts +0 -59
  445. package/src/resources/extensions/gsd/tests/integration/parallel-merge.test.ts +0 -110
  446. package/src/resources/extensions/gsd/tests/integration/run-uat.test.ts +1 -1
  447. package/src/resources/extensions/gsd/tests/memory-extractor.test.ts +2 -85
  448. package/src/resources/extensions/gsd/tests/model-cost-table.test.ts +0 -34
  449. package/src/resources/extensions/gsd/tests/model-router.test.ts +3 -68
  450. package/src/resources/extensions/gsd/tests/model-unittype-mapping.test.ts +0 -28
  451. package/src/resources/extensions/gsd/tests/notifications.test.ts +0 -45
  452. package/src/resources/extensions/gsd/tests/plan-milestone.test.ts +1 -33
  453. package/src/resources/extensions/gsd/tests/prompt-contracts.test.ts +0 -29
  454. package/src/resources/extensions/gsd/tests/provider-errors.test.ts +0 -38
  455. package/src/resources/extensions/gsd/tests/reassess-handler.test.ts +0 -117
  456. package/src/resources/extensions/gsd/tests/roadmap-slices.test.ts +0 -97
  457. package/src/resources/extensions/gsd/tests/secure-env-collect.test.ts +0 -134
  458. package/src/resources/extensions/gsd/tests/tool-naming.test.ts +1 -2
  459. package/src/resources/extensions/gsd/tests/triage-resolution.test.ts +0 -8
  460. package/src/resources/extensions/gsd/tests/unit-ownership.test.ts +17 -100
  461. package/src/resources/extensions/gsd/tests/validate-milestone-write-order.test.ts +1 -4
  462. package/src/resources/extensions/gsd/tests/workflow-logger.test.ts +0 -48
  463. package/src/resources/extensions/gsd/tests/workflow-manifest.test.ts +0 -92
  464. package/src/resources/extensions/gsd/tests/workflow-projections.test.ts +2 -4
  465. package/src/resources/extensions/gsd/tests/worktree-resolver.test.ts +1 -48
  466. package/src/resources/extensions/gsd/tests/worktree-sync-milestones.test.ts +5 -29
  467. package/src/resources/extensions/gsd/tools/complete-task.ts +74 -36
  468. package/src/resources/extensions/gsd/tools/plan-milestone.ts +1 -13
  469. package/src/resources/extensions/gsd/tools/reassess-roadmap.ts +0 -36
  470. package/src/resources/extensions/gsd/tools/validate-milestone.ts +2 -20
  471. package/src/resources/extensions/gsd/triage-resolution.ts +6 -23
  472. package/src/resources/extensions/gsd/types.ts +2 -4
  473. package/src/resources/extensions/gsd/undo.ts +2 -2
  474. package/src/resources/extensions/gsd/unit-ownership.ts +35 -206
  475. package/src/resources/extensions/gsd/verdict-parser.ts +6 -21
  476. package/src/resources/extensions/gsd/workflow-logger.ts +1 -3
  477. package/src/resources/extensions/gsd/workflow-manifest.ts +5 -22
  478. package/src/resources/extensions/gsd/workflow-projections.ts +64 -97
  479. package/src/resources/extensions/gsd/workflow-reconcile.ts +10 -39
  480. package/src/resources/extensions/gsd/workspace-index.ts +0 -30
  481. package/src/resources/extensions/gsd/worktree-manager.ts +1 -120
  482. package/src/resources/extensions/gsd/worktree-resolver.ts +3 -22
  483. package/src/resources/extensions/mcp-client/index.ts +7 -13
  484. package/src/resources/extensions/search-the-web/extension-manifest.json +1 -1
  485. package/src/resources/extensions/shared/interview-ui.ts +1 -12
  486. package/src/resources/skills/create-gsd-extension/SKILL.md +3 -5
  487. package/src/resources/skills/create-gsd-extension/references/key-rules-gotchas.md +4 -5
  488. package/src/resources/skills/create-gsd-extension/workflows/add-capability.md +2 -2
  489. package/src/resources/skills/create-gsd-extension/workflows/create-extension.md +4 -4
  490. package/src/resources/skills/create-gsd-extension/workflows/debug-extension.md +3 -5
  491. package/dist/resources/extensions/gsd/milestone-validation-gates.js +0 -45
  492. package/dist/resources/extensions/ollama/index.js +0 -112
  493. package/dist/resources/extensions/ollama/model-capabilities.js +0 -115
  494. package/dist/resources/extensions/ollama/ollama-client.js +0 -168
  495. package/dist/resources/extensions/ollama/ollama-commands.js +0 -194
  496. package/dist/resources/extensions/ollama/ollama-discovery.js +0 -69
  497. package/dist/resources/extensions/ollama/ollama-tool.js +0 -184
  498. package/dist/resources/extensions/ollama/types.js +0 -2
  499. package/dist/startup-model-validation.d.ts +0 -39
  500. package/dist/startup-model-validation.js +0 -50
  501. package/dist/web/standalone/.next/static/chunks/6502.7593d7797a4b3999.js +0 -9
  502. package/dist/web/standalone/.next/static/css/f6e8833d46e738d8.css +0 -1
  503. package/packages/native/src/__tests__/module-compat.test.mjs +0 -91
  504. package/packages/pi-agent-core/src/agent-loop.test.ts +0 -45
  505. package/packages/pi-ai/dist/providers/anthropic-shared.test.d.ts +0 -2
  506. package/packages/pi-ai/dist/providers/anthropic-shared.test.d.ts.map +0 -1
  507. package/packages/pi-ai/dist/providers/anthropic-shared.test.js +0 -25
  508. package/packages/pi-ai/dist/providers/anthropic-shared.test.js.map +0 -1
  509. package/packages/pi-ai/dist/utils/repair-tool-json.d.ts +0 -37
  510. package/packages/pi-ai/dist/utils/repair-tool-json.d.ts.map +0 -1
  511. package/packages/pi-ai/dist/utils/repair-tool-json.js +0 -75
  512. package/packages/pi-ai/dist/utils/repair-tool-json.js.map +0 -1
  513. package/packages/pi-ai/dist/utils/tests/repair-tool-json.test.d.ts +0 -2
  514. package/packages/pi-ai/dist/utils/tests/repair-tool-json.test.d.ts.map +0 -1
  515. package/packages/pi-ai/dist/utils/tests/repair-tool-json.test.js +0 -73
  516. package/packages/pi-ai/dist/utils/tests/repair-tool-json.test.js.map +0 -1
  517. package/packages/pi-ai/src/providers/anthropic-shared.test.ts +0 -29
  518. package/packages/pi-ai/src/utils/repair-tool-json.ts +0 -88
  519. package/packages/pi-ai/src/utils/tests/repair-tool-json.test.ts +0 -102
  520. package/packages/pi-coding-agent/dist/core/compaction/compaction.test.d.ts +0 -6
  521. package/packages/pi-coding-agent/dist/core/compaction/compaction.test.d.ts.map +0 -1
  522. package/packages/pi-coding-agent/dist/core/compaction/compaction.test.js +0 -176
  523. package/packages/pi-coding-agent/dist/core/compaction/compaction.test.js.map +0 -1
  524. package/packages/pi-coding-agent/dist/core/extensions/extension-manifest.d.ts +0 -28
  525. package/packages/pi-coding-agent/dist/core/extensions/extension-manifest.d.ts.map +0 -1
  526. package/packages/pi-coding-agent/dist/core/extensions/extension-manifest.js +0 -37
  527. package/packages/pi-coding-agent/dist/core/extensions/extension-manifest.js.map +0 -1
  528. package/packages/pi-coding-agent/dist/core/extensions/extension-manifest.test.d.ts +0 -2
  529. package/packages/pi-coding-agent/dist/core/extensions/extension-manifest.test.d.ts.map +0 -1
  530. package/packages/pi-coding-agent/dist/core/extensions/extension-manifest.test.js +0 -63
  531. package/packages/pi-coding-agent/dist/core/extensions/extension-manifest.test.js.map +0 -1
  532. package/packages/pi-coding-agent/dist/core/extensions/extension-sort.d.ts +0 -19
  533. package/packages/pi-coding-agent/dist/core/extensions/extension-sort.d.ts.map +0 -1
  534. package/packages/pi-coding-agent/dist/core/extensions/extension-sort.js +0 -115
  535. package/packages/pi-coding-agent/dist/core/extensions/extension-sort.js.map +0 -1
  536. package/packages/pi-coding-agent/dist/core/extensions/extension-sort.test.d.ts +0 -2
  537. package/packages/pi-coding-agent/dist/core/extensions/extension-sort.test.d.ts.map +0 -1
  538. package/packages/pi-coding-agent/dist/core/extensions/extension-sort.test.js +0 -109
  539. package/packages/pi-coding-agent/dist/core/extensions/extension-sort.test.js.map +0 -1
  540. package/packages/pi-coding-agent/dist/core/image-overflow-recovery.d.ts +0 -44
  541. package/packages/pi-coding-agent/dist/core/image-overflow-recovery.d.ts.map +0 -1
  542. package/packages/pi-coding-agent/dist/core/image-overflow-recovery.js +0 -97
  543. package/packages/pi-coding-agent/dist/core/image-overflow-recovery.js.map +0 -1
  544. package/packages/pi-coding-agent/dist/core/image-overflow-recovery.test.d.ts +0 -2
  545. package/packages/pi-coding-agent/dist/core/image-overflow-recovery.test.d.ts.map +0 -1
  546. package/packages/pi-coding-agent/dist/core/image-overflow-recovery.test.js +0 -181
  547. package/packages/pi-coding-agent/dist/core/image-overflow-recovery.test.js.map +0 -1
  548. package/packages/pi-coding-agent/dist/core/messages.test.d.ts +0 -9
  549. package/packages/pi-coding-agent/dist/core/messages.test.d.ts.map +0 -1
  550. package/packages/pi-coding-agent/dist/core/messages.test.js +0 -86
  551. package/packages/pi-coding-agent/dist/core/messages.test.js.map +0 -1
  552. package/packages/pi-coding-agent/dist/core/retry-handler.test.d.ts +0 -9
  553. package/packages/pi-coding-agent/dist/core/retry-handler.test.d.ts.map +0 -1
  554. package/packages/pi-coding-agent/dist/core/retry-handler.test.js +0 -193
  555. package/packages/pi-coding-agent/dist/core/retry-handler.test.js.map +0 -1
  556. package/packages/pi-coding-agent/dist/core/tools/spawn-shell-windows.test.d.ts +0 -16
  557. package/packages/pi-coding-agent/dist/core/tools/spawn-shell-windows.test.d.ts.map +0 -1
  558. package/packages/pi-coding-agent/dist/core/tools/spawn-shell-windows.test.js +0 -80
  559. package/packages/pi-coding-agent/dist/core/tools/spawn-shell-windows.test.js.map +0 -1
  560. package/packages/pi-coding-agent/src/core/compaction/compaction.test.ts +0 -236
  561. package/packages/pi-coding-agent/src/core/extensions/extension-manifest.test.ts +0 -77
  562. package/packages/pi-coding-agent/src/core/extensions/extension-manifest.ts +0 -62
  563. package/packages/pi-coding-agent/src/core/extensions/extension-sort.test.ts +0 -134
  564. package/packages/pi-coding-agent/src/core/extensions/extension-sort.ts +0 -137
  565. package/packages/pi-coding-agent/src/core/image-overflow-recovery.test.ts +0 -228
  566. package/packages/pi-coding-agent/src/core/image-overflow-recovery.ts +0 -118
  567. package/packages/pi-coding-agent/src/core/messages.test.ts +0 -114
  568. package/packages/pi-coding-agent/src/core/retry-handler.test.ts +0 -255
  569. package/packages/pi-coding-agent/src/core/tools/spawn-shell-windows.test.ts +0 -92
  570. package/src/resources/extensions/gsd/milestone-validation-gates.ts +0 -56
  571. package/src/resources/extensions/gsd/tests/auto-mode-interactive-guard.test.ts +0 -71
  572. package/src/resources/extensions/gsd/tests/cli-provider-rate-limit.test.ts +0 -47
  573. package/src/resources/extensions/gsd/tests/completion-hierarchy-guards.test.ts +0 -192
  574. package/src/resources/extensions/gsd/tests/db-path-worktree-symlink.test.ts +0 -131
  575. package/src/resources/extensions/gsd/tests/discord-invite-links.test.ts +0 -47
  576. package/src/resources/extensions/gsd/tests/discuss-empty-db-fallback.test.ts +0 -127
  577. package/src/resources/extensions/gsd/tests/dynamic-routing-default.test.ts +0 -20
  578. package/src/resources/extensions/gsd/tests/empty-content-abort-loop.test.ts +0 -74
  579. package/src/resources/extensions/gsd/tests/event-replay-idempotency.test.ts +0 -140
  580. package/src/resources/extensions/gsd/tests/forensics-context-persist.test.ts +0 -129
  581. package/src/resources/extensions/gsd/tests/forensics-db-completion.test.ts +0 -96
  582. package/src/resources/extensions/gsd/tests/gsdroot-worktree-detection.test.ts +0 -164
  583. package/src/resources/extensions/gsd/tests/guided-flow-dynamic-routing.test.ts +0 -135
  584. package/src/resources/extensions/gsd/tests/guided-flow-session-isolation.test.ts +0 -97
  585. package/src/resources/extensions/gsd/tests/hook-key-parsing.test.ts +0 -107
  586. package/src/resources/extensions/gsd/tests/integration/doctor-false-positives.test.ts +0 -243
  587. package/src/resources/extensions/gsd/tests/integration/gitignore-staging-2570.test.ts +0 -150
  588. package/src/resources/extensions/gsd/tests/integration/state-machine-live-validation.test.ts +0 -959
  589. package/src/resources/extensions/gsd/tests/migrate-external-worktree.test.ts +0 -105
  590. package/src/resources/extensions/gsd/tests/milestone-status-authoritative.test.ts +0 -116
  591. package/src/resources/extensions/gsd/tests/parallel-commit-scope.test.ts +0 -159
  592. package/src/resources/extensions/gsd/tests/parallel-eligibility-ghost.test.ts +0 -150
  593. package/src/resources/extensions/gsd/tests/plan-milestone-title.test.ts +0 -70
  594. package/src/resources/extensions/gsd/tests/project-relocation-recovery.test.ts +0 -297
  595. package/src/resources/extensions/gsd/tests/prompt-loader-replacement.test.ts +0 -178
  596. package/src/resources/extensions/gsd/tests/prompt-tool-names.test.ts +0 -69
  597. package/src/resources/extensions/gsd/tests/queue-execution-guard.test.ts +0 -157
  598. package/src/resources/extensions/gsd/tests/quick-turn-end-cleanup.test.ts +0 -90
  599. package/src/resources/extensions/gsd/tests/reconciliation-edge-cases.test.ts +0 -162
  600. package/src/resources/extensions/gsd/tests/slice-disk-reconcile.test.ts +0 -233
  601. package/src/resources/extensions/gsd/tests/stash-queued-context-files.test.ts +0 -305
  602. package/src/resources/extensions/gsd/tests/state-corruption-2945.test.ts +0 -405
  603. package/src/resources/extensions/gsd/tests/state-derivation-parity.test.ts +0 -257
  604. package/src/resources/extensions/gsd/tests/state-machine-full-walkthrough.test.ts +0 -1628
  605. package/src/resources/extensions/gsd/tests/stop-auto-race-null-unit.test.ts +0 -106
  606. package/src/resources/extensions/gsd/tests/stuck-detection-coverage.test.ts +0 -174
  607. package/src/resources/extensions/gsd/tests/summary-render-parity.test.ts +0 -221
  608. package/src/resources/extensions/gsd/tests/uat-stuck-loop-orphaned-worktree.test.ts +0 -289
  609. package/src/resources/extensions/gsd/tests/vacuum-recovery.test.ts +0 -154
  610. package/src/resources/extensions/gsd/tests/verdict-parser.test.ts +0 -156
  611. package/src/resources/extensions/gsd/tests/verification-operational-gate.test.ts +0 -82
  612. package/src/resources/extensions/gsd/tests/worktree-db-respawn-truncation.test.ts +0 -140
  613. package/src/resources/extensions/gsd/tests/worktree-nested-git-safety.test.ts +0 -101
  614. package/src/resources/extensions/gsd/tests/zombie-gsd-state.test.ts +0 -95
  615. package/src/resources/extensions/mcp-client/tests/server-name-spaces.test.ts +0 -55
  616. package/src/resources/extensions/ollama/index.ts +0 -130
  617. package/src/resources/extensions/ollama/model-capabilities.ts +0 -145
  618. package/src/resources/extensions/ollama/ollama-client.ts +0 -196
  619. package/src/resources/extensions/ollama/ollama-commands.ts +0 -248
  620. package/src/resources/extensions/ollama/ollama-discovery.ts +0 -106
  621. package/src/resources/extensions/ollama/ollama-tool.ts +0 -218
  622. package/src/resources/extensions/ollama/tests/model-capabilities.test.ts +0 -162
  623. package/src/resources/extensions/ollama/tests/ollama-client.test.ts +0 -38
  624. package/src/resources/extensions/ollama/tests/ollama-discovery.test.ts +0 -28
  625. package/src/resources/extensions/ollama/types.ts +0 -130
  626. package/src/resources/extensions/shared/tests/ask-user-freetext.test.ts +0 -156
  627. /package/dist/web/standalone/.next/static/{R0D4xaIPl5kg93edN7Oo0 → 5DLsjFHdSB6_a1EDQVjr7}/_buildManifest.js +0 -0
  628. /package/dist/web/standalone/.next/static/{R0D4xaIPl5kg93edN7Oo0 → 5DLsjFHdSB6_a1EDQVjr7}/_ssgManifest.js +0 -0
@@ -1,80 +0,0 @@
1
- /**
2
- * spawn-shell-windows.test.ts — Regression test for Windows spawn ENOENT/EINVAL.
3
- *
4
- * On Windows, npm/npx/tsc and other tools are installed as .cmd batch scripts.
5
- * Node's `spawn()` without `shell: true` cannot execute .cmd files, resulting
6
- * in ENOENT or EINVAL errors. Every spawn site that may invoke a user-installed
7
- * binary (not `node` or a shell like `sh`/`bash`/`cmd`) must include
8
- * `shell: process.platform === "win32"` so the call is resolved through cmd.exe
9
- * on Windows while remaining a direct exec on POSIX.
10
- *
11
- * This test structurally scans all spawn sites and verifies the guard is present.
12
- *
13
- * Fixes: gsd-build/gsd-2#2854
14
- */
15
- import test from "node:test";
16
- import assert from "node:assert/strict";
17
- import { readFileSync } from "node:fs";
18
- import { join, dirname, relative } from "node:path";
19
- import { fileURLToPath } from "node:url";
20
- const __dirname = dirname(fileURLToPath(import.meta.url));
21
- const coreDir = join(__dirname, "..");
22
- /**
23
- * Files that call `spawn()` with a user-facing binary (not `node`, `sh`, `bash`,
24
- * or `cmd`) and therefore need the Windows shell guard.
25
- *
26
- * If a file spawns only hardcoded system binaries (like `node` in rpc-client.ts),
27
- * it does not need the guard and should NOT appear here.
28
- */
29
- const SPAWN_FILES_NEEDING_SHELL_GUARD = [
30
- // Extension's GSD client — spawns the `gsd` binary which is a .cmd on Windows
31
- join(coreDir, "..", "..", "..", "vscode-extension", "src", "gsd-client.ts"),
32
- // exec.ts — used by extensions to run arbitrary commands
33
- join(coreDir, "exec.ts"),
34
- // LSP index — spawns project-type commands (tsc, cargo, etc.)
35
- join(coreDir, "lsp", "index.ts"),
36
- // LSP client — spawns LSP server binaries (npx, etc.)
37
- join(coreDir, "lsp", "client.ts"),
38
- // LSP mux — spawns lspmux binary
39
- join(coreDir, "lsp", "lspmux.ts"),
40
- // Package manager — spawns npm/yarn/pnpm
41
- join(coreDir, "package-manager.ts"),
42
- ];
43
- test("all spawn sites that invoke user-facing binaries include shell: process.platform === 'win32'", () => {
44
- const failures = [];
45
- for (const file of SPAWN_FILES_NEEDING_SHELL_GUARD) {
46
- let content;
47
- try {
48
- content = readFileSync(file, "utf-8");
49
- }
50
- catch {
51
- // File may not exist in this checkout — skip
52
- continue;
53
- }
54
- const lines = content.split("\n");
55
- // Find all spawn(..., { ... }) call sites and check each one
56
- // for the presence of `shell: process.platform === "win32"` within
57
- // 5 lines after the spawn call.
58
- for (let i = 0; i < lines.length; i++) {
59
- const line = lines[i];
60
- // Skip comments
61
- if (line.trim().startsWith("//") || line.trim().startsWith("*"))
62
- continue;
63
- // Detect a spawn() call
64
- if (/\bspawn\(/.test(line)) {
65
- // Look ahead up to 8 lines for the shell guard
66
- const lookahead = lines.slice(i, i + 8).join("\n");
67
- const hasShellGuard = /shell:\s*process\.platform\s*===\s*["']win32["']/.test(lookahead);
68
- if (!hasShellGuard) {
69
- const relPath = relative(join(coreDir, "..", ".."), file);
70
- failures.push(`${relPath}:${i + 1}`);
71
- }
72
- }
73
- }
74
- }
75
- assert.deepEqual(failures, [], `The following spawn sites are missing 'shell: process.platform === "win32"':\n` +
76
- failures.map(f => ` - ${f}`).join("\n") +
77
- `\nOn Windows, .cmd wrapper scripts (npm, npx, tsc, gsd) require shell ` +
78
- `resolution. Without this guard, spawn fails with ENOENT or EINVAL.`);
79
- });
80
- //# sourceMappingURL=spawn-shell-windows.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"spawn-shell-windows.test.js","sourceRoot":"","sources":["../../../src/core/tools/spawn-shell-windows.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,MAAM,MAAM,oBAAoB,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC1D,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;AAEtC;;;;;;GAMG;AACH,MAAM,+BAA+B,GAAG;IACvC,8EAA8E;IAC9E,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,kBAAkB,EAAE,KAAK,EAAE,eAAe,CAAC;IAC3E,yDAAyD;IACzD,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC;IACxB,8DAA8D;IAC9D,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,UAAU,CAAC;IAChC,sDAAsD;IACtD,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,WAAW,CAAC;IACjC,iCAAiC;IACjC,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,WAAW,CAAC;IACjC,yCAAyC;IACzC,IAAI,CAAC,OAAO,EAAE,oBAAoB,CAAC;CACnC,CAAC;AAEF,IAAI,CAAC,8FAA8F,EAAE,GAAG,EAAE;IACzG,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,KAAK,MAAM,IAAI,IAAI,+BAA+B,EAAE,CAAC;QACpD,IAAI,OAAe,CAAC;QACpB,IAAI,CAAC;YACJ,OAAO,GAAG,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACvC,CAAC;QAAC,MAAM,CAAC;YACR,6CAA6C;YAC7C,SAAS;QACV,CAAC;QAED,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAElC,6DAA6D;QAC7D,mEAAmE;QACnE,gCAAgC;QAChC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACvC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC;YACvB,gBAAgB;YAChB,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC;gBAAE,SAAS;YAE1E,wBAAwB;YACxB,IAAI,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC5B,+CAA+C;gBAC/C,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACnD,MAAM,aAAa,GAClB,kDAAkD,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBAEpE,IAAI,CAAC,aAAa,EAAE,CAAC;oBACpB,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;oBAC1D,QAAQ,CAAC,IAAI,CAAC,GAAG,OAAO,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBACtC,CAAC;YACF,CAAC;QACF,CAAC;IACF,CAAC;IAED,MAAM,CAAC,SAAS,CACf,QAAQ,EACR,EAAE,EACF,gFAAgF;QAChF,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;QACxC,wEAAwE;QACxE,oEAAoE,CACpE,CAAC;AACH,CAAC,CAAC,CAAC","sourcesContent":["/**\n * spawn-shell-windows.test.ts — Regression test for Windows spawn ENOENT/EINVAL.\n *\n * On Windows, npm/npx/tsc and other tools are installed as .cmd batch scripts.\n * Node's `spawn()` without `shell: true` cannot execute .cmd files, resulting\n * in ENOENT or EINVAL errors. Every spawn site that may invoke a user-installed\n * binary (not `node` or a shell like `sh`/`bash`/`cmd`) must include\n * `shell: process.platform === \"win32\"` so the call is resolved through cmd.exe\n * on Windows while remaining a direct exec on POSIX.\n *\n * This test structurally scans all spawn sites and verifies the guard is present.\n *\n * Fixes: gsd-build/gsd-2#2854\n */\n\nimport test from \"node:test\";\nimport assert from \"node:assert/strict\";\nimport { readFileSync } from \"node:fs\";\nimport { join, dirname, relative } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\n\nconst __dirname = dirname(fileURLToPath(import.meta.url));\nconst coreDir = join(__dirname, \"..\");\n\n/**\n * Files that call `spawn()` with a user-facing binary (not `node`, `sh`, `bash`,\n * or `cmd`) and therefore need the Windows shell guard.\n *\n * If a file spawns only hardcoded system binaries (like `node` in rpc-client.ts),\n * it does not need the guard and should NOT appear here.\n */\nconst SPAWN_FILES_NEEDING_SHELL_GUARD = [\n\t// Extension's GSD client — spawns the `gsd` binary which is a .cmd on Windows\n\tjoin(coreDir, \"..\", \"..\", \"..\", \"vscode-extension\", \"src\", \"gsd-client.ts\"),\n\t// exec.ts — used by extensions to run arbitrary commands\n\tjoin(coreDir, \"exec.ts\"),\n\t// LSP index — spawns project-type commands (tsc, cargo, etc.)\n\tjoin(coreDir, \"lsp\", \"index.ts\"),\n\t// LSP client — spawns LSP server binaries (npx, etc.)\n\tjoin(coreDir, \"lsp\", \"client.ts\"),\n\t// LSP mux — spawns lspmux binary\n\tjoin(coreDir, \"lsp\", \"lspmux.ts\"),\n\t// Package manager — spawns npm/yarn/pnpm\n\tjoin(coreDir, \"package-manager.ts\"),\n];\n\ntest(\"all spawn sites that invoke user-facing binaries include shell: process.platform === 'win32'\", () => {\n\tconst failures: string[] = [];\n\n\tfor (const file of SPAWN_FILES_NEEDING_SHELL_GUARD) {\n\t\tlet content: string;\n\t\ttry {\n\t\t\tcontent = readFileSync(file, \"utf-8\");\n\t\t} catch {\n\t\t\t// File may not exist in this checkout — skip\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst lines = content.split(\"\\n\");\n\n\t\t// Find all spawn(..., { ... }) call sites and check each one\n\t\t// for the presence of `shell: process.platform === \"win32\"` within\n\t\t// 5 lines after the spawn call.\n\t\tfor (let i = 0; i < lines.length; i++) {\n\t\t\tconst line = lines[i]!;\n\t\t\t// Skip comments\n\t\t\tif (line.trim().startsWith(\"//\") || line.trim().startsWith(\"*\")) continue;\n\n\t\t\t// Detect a spawn() call\n\t\t\tif (/\\bspawn\\(/.test(line)) {\n\t\t\t\t// Look ahead up to 8 lines for the shell guard\n\t\t\t\tconst lookahead = lines.slice(i, i + 8).join(\"\\n\");\n\t\t\t\tconst hasShellGuard =\n\t\t\t\t\t/shell:\\s*process\\.platform\\s*===\\s*[\"']win32[\"']/.test(lookahead);\n\n\t\t\t\tif (!hasShellGuard) {\n\t\t\t\t\tconst relPath = relative(join(coreDir, \"..\", \"..\"), file);\n\t\t\t\t\tfailures.push(`${relPath}:${i + 1}`);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tassert.deepEqual(\n\t\tfailures,\n\t\t[],\n\t\t`The following spawn sites are missing 'shell: process.platform === \"win32\"':\\n` +\n\t\tfailures.map(f => ` - ${f}`).join(\"\\n\") +\n\t\t`\\nOn Windows, .cmd wrapper scripts (npm, npx, tsc, gsd) require shell ` +\n\t\t`resolution. Without this guard, spawn fails with ENOENT or EINVAL.`,\n\t);\n});\n"]}
@@ -1,236 +0,0 @@
1
- /**
2
- * Tests for chunked compaction fallback when messages exceed model context window.
3
- * Regression test for #2932.
4
- */
5
-
6
- import assert from "node:assert/strict";
7
- import { describe, it, mock } from "node:test";
8
-
9
- import type { AgentMessage } from "@gsd/pi-agent-core";
10
- import type { Model, AssistantMessage } from "@gsd/pi-ai";
11
-
12
- import { generateSummary, estimateTokens, chunkMessages } from "./compaction.js";
13
-
14
- // ---------------------------------------------------------------------------
15
- // Helpers
16
- // ---------------------------------------------------------------------------
17
-
18
- /** Create a user message with approximately `tokenCount` tokens (chars = tokens * 4). */
19
- function makeUserMessage(tokenCount: number): AgentMessage {
20
- const text = "x".repeat(tokenCount * 4);
21
- return { role: "user", content: text } as unknown as AgentMessage;
22
- }
23
-
24
- /** Create a mock model with a given context window. */
25
- function makeModel(contextWindow: number): Model<any> {
26
- return {
27
- id: "test-model",
28
- name: "Test Model",
29
- api: "anthropic-messages",
30
- provider: "anthropic",
31
- baseUrl: "https://api.test",
32
- reasoning: false,
33
- input: ["text"],
34
- cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
35
- contextWindow,
36
- maxTokens: 4096,
37
- } as Model<any>;
38
- }
39
-
40
- function makeFakeResponse(text: string): AssistantMessage {
41
- return {
42
- content: [{ type: "text", text }],
43
- stopReason: "end_turn",
44
- } as unknown as AssistantMessage;
45
- }
46
-
47
- // ---------------------------------------------------------------------------
48
- // chunkMessages tests
49
- // ---------------------------------------------------------------------------
50
-
51
- describe("chunkMessages", () => {
52
- it("returns a single chunk when messages fit in budget", () => {
53
- const messages: AgentMessage[] = [
54
- makeUserMessage(1_000),
55
- makeUserMessage(1_000),
56
- ];
57
- const chunks = chunkMessages(messages, 100_000);
58
- assert.equal(chunks.length, 1);
59
- assert.equal(chunks[0].length, 2);
60
- });
61
-
62
- it("splits messages into multiple chunks when they exceed budget", () => {
63
- const messages: AgentMessage[] = [
64
- makeUserMessage(50_000),
65
- makeUserMessage(50_000),
66
- makeUserMessage(50_000),
67
- ];
68
- // Budget of 80k tokens means each 50k message gets its own chunk
69
- // (or two fit together if budget allows)
70
- const chunks = chunkMessages(messages, 80_000);
71
- assert.ok(chunks.length > 1, `Expected multiple chunks, got ${chunks.length}`);
72
- // All messages should be present across chunks
73
- const totalMessages = chunks.reduce((sum, c) => sum + c.length, 0);
74
- assert.equal(totalMessages, 3);
75
- });
76
-
77
- it("puts a single oversized message in its own chunk", () => {
78
- const messages: AgentMessage[] = [
79
- makeUserMessage(200_000), // Way over any reasonable budget
80
- ];
81
- const chunks = chunkMessages(messages, 80_000);
82
- assert.equal(chunks.length, 1);
83
- assert.equal(chunks[0].length, 1);
84
- });
85
-
86
- it("preserves message order across chunks", () => {
87
- // Create messages with identifiable sizes
88
- const messages: AgentMessage[] = [
89
- makeUserMessage(30_000), // ~30k tokens
90
- makeUserMessage(30_000),
91
- makeUserMessage(30_000),
92
- makeUserMessage(30_000),
93
- ];
94
- const chunks = chunkMessages(messages, 50_000);
95
- // Reconstruct original order
96
- const flat = chunks.flat();
97
- assert.equal(flat.length, 4);
98
- for (let i = 0; i < flat.length; i++) {
99
- assert.strictEqual(flat[i], messages[i], `Message ${i} should be in order`);
100
- }
101
- });
102
- });
103
-
104
- // ---------------------------------------------------------------------------
105
- // generateSummary chunked fallback tests
106
- // ---------------------------------------------------------------------------
107
-
108
- describe("generateSummary — chunked fallback (#2932)", () => {
109
- it("calls _completeFn multiple times when messages exceed model context window", async () => {
110
- // Arrange: 3 messages of ~80k tokens each = ~240k total, model has 200k window
111
- const messages: AgentMessage[] = [
112
- makeUserMessage(80_000),
113
- makeUserMessage(80_000),
114
- makeUserMessage(80_000),
115
- ];
116
- const model = makeModel(200_000);
117
- const reserveTokens = 16_384;
118
-
119
- // Verify our test setup: messages really do exceed the model window
120
- let totalTokens = 0;
121
- for (const m of messages) totalTokens += estimateTokens(m);
122
- assert.ok(
123
- totalTokens > model.contextWindow,
124
- `Test setup: ${totalTokens} tokens should exceed ${model.contextWindow} context window`,
125
- );
126
-
127
- // Track calls
128
- const calls: string[] = [];
129
- const mockComplete = mock.fn(async (_model: any, context: any, _options: any) => {
130
- const userMsg = context.messages?.[0];
131
- const text =
132
- typeof userMsg?.content === "string"
133
- ? userMsg.content
134
- : userMsg?.content?.[0]?.text ?? "";
135
-
136
- if (text.includes("<previous-summary>")) {
137
- calls.push("update");
138
- } else {
139
- calls.push("initial");
140
- }
141
- return makeFakeResponse("Summary of chunk");
142
- });
143
-
144
- const summary = await generateSummary(
145
- messages,
146
- model,
147
- reserveTokens,
148
- undefined, // apiKey
149
- undefined, // signal
150
- undefined, // customInstructions
151
- undefined, // previousSummary
152
- mockComplete, // _completeFn override for testing
153
- );
154
-
155
- // Assert: should have called completeSimple more than once (chunked)
156
- assert.ok(
157
- mockComplete.mock.callCount() > 1,
158
- `Expected multiple calls for chunked summarization, got ${mockComplete.mock.callCount()}`,
159
- );
160
-
161
- // First call should be an initial summary, subsequent should be updates
162
- assert.equal(calls[0], "initial", "First chunk should use initial summarization prompt");
163
- for (let i = 1; i < calls.length; i++) {
164
- assert.equal(calls[i], "update", `Chunk ${i + 1} should use update summarization prompt`);
165
- }
166
-
167
- // Should return a non-empty summary
168
- assert.ok(summary.length > 0, "Summary should not be empty");
169
- });
170
-
171
- it("uses single-pass when messages fit within model context window", async () => {
172
- const messages: AgentMessage[] = [
173
- makeUserMessage(10_000),
174
- makeUserMessage(10_000),
175
- ];
176
- const model = makeModel(200_000);
177
- const reserveTokens = 16_384;
178
-
179
- // Verify test setup
180
- let totalTokens = 0;
181
- for (const m of messages) totalTokens += estimateTokens(m);
182
- assert.ok(
183
- totalTokens < model.contextWindow,
184
- `Test setup: ${totalTokens} tokens should fit in ${model.contextWindow} context window`,
185
- );
186
-
187
- const mockComplete = mock.fn(async () => makeFakeResponse("Single pass summary"));
188
-
189
- await generateSummary(messages, model, reserveTokens, undefined, undefined, undefined, undefined, mockComplete);
190
-
191
- assert.equal(
192
- mockComplete.mock.callCount(),
193
- 1,
194
- "Should use single-pass summarization when messages fit in context window",
195
- );
196
- });
197
-
198
- it("passes previousSummary through chunked summarization", async () => {
199
- const messages: AgentMessage[] = [
200
- makeUserMessage(80_000),
201
- makeUserMessage(80_000),
202
- makeUserMessage(80_000),
203
- ];
204
- const model = makeModel(200_000);
205
- const reserveTokens = 16_384;
206
- const previousSummary = "Previous session summary content";
207
-
208
- const prompts: string[] = [];
209
- const mockComplete = mock.fn(async (_model: any, context: any) => {
210
- const userMsg = context.messages?.[0];
211
- const text =
212
- typeof userMsg?.content === "string"
213
- ? userMsg.content
214
- : userMsg?.content?.[0]?.text ?? "";
215
- prompts.push(text);
216
- return makeFakeResponse("Chunk summary");
217
- });
218
-
219
- await generateSummary(
220
- messages,
221
- model,
222
- reserveTokens,
223
- undefined,
224
- undefined,
225
- undefined,
226
- previousSummary,
227
- mockComplete,
228
- );
229
-
230
- // First chunk should include the previousSummary
231
- assert.ok(
232
- prompts[0].includes(previousSummary),
233
- "First chunk should incorporate the previousSummary",
234
- );
235
- });
236
- });
@@ -1,77 +0,0 @@
1
- // GSD-2 — Extension Manifest Tests
2
- // Copyright (c) 2026 Jeremy McSpadden <jeremy@fluxlabs.net>
3
-
4
- import { describe, it } from "node:test";
5
- import assert from "node:assert/strict";
6
- import { mkdtempSync, mkdirSync, writeFileSync } from "node:fs";
7
- import { join } from "node:path";
8
- import { tmpdir } from "node:os";
9
- import { readManifest, readManifestFromEntryPath } from "./extension-manifest.js";
10
-
11
- describe("readManifest", () => {
12
- it("returns null for missing directory", () => {
13
- assert.equal(readManifest("/nonexistent/path"), null);
14
- });
15
-
16
- it("returns null for directory without manifest", () => {
17
- const dir = mkdtempSync(join(tmpdir(), "ext-manifest-"));
18
- assert.equal(readManifest(dir), null);
19
- });
20
-
21
- it("returns null for invalid JSON", () => {
22
- const dir = mkdtempSync(join(tmpdir(), "ext-manifest-"));
23
- writeFileSync(join(dir, "extension-manifest.json"), "not json{{{", "utf-8");
24
- assert.equal(readManifest(dir), null);
25
- });
26
-
27
- it("returns null for manifest missing required fields", () => {
28
- const dir = mkdtempSync(join(tmpdir(), "ext-manifest-"));
29
- writeFileSync(
30
- join(dir, "extension-manifest.json"),
31
- JSON.stringify({ id: "test", name: "test" }),
32
- );
33
- assert.equal(readManifest(dir), null);
34
- });
35
-
36
- it("returns valid manifest", () => {
37
- const dir = mkdtempSync(join(tmpdir(), "ext-manifest-"));
38
- const manifest = {
39
- id: "test-ext",
40
- name: "Test Extension",
41
- version: "1.0.0",
42
- tier: "bundled",
43
- requires: { platform: ">=2.29.0" },
44
- };
45
- writeFileSync(join(dir, "extension-manifest.json"), JSON.stringify(manifest));
46
- const result = readManifest(dir);
47
- assert.equal(result?.id, "test-ext");
48
- assert.equal(result?.tier, "bundled");
49
- });
50
- });
51
-
52
- describe("readManifestFromEntryPath", () => {
53
- it("reads manifest from parent of entry path", () => {
54
- const dir = mkdtempSync(join(tmpdir(), "ext-manifest-"));
55
- const extDir = join(dir, "my-ext");
56
- mkdirSync(extDir);
57
- writeFileSync(
58
- join(extDir, "extension-manifest.json"),
59
- JSON.stringify({
60
- id: "my-ext",
61
- name: "My Extension",
62
- version: "1.0.0",
63
- tier: "community",
64
- }),
65
- );
66
- writeFileSync(join(extDir, "index.ts"), "");
67
-
68
- const result = readManifestFromEntryPath(join(extDir, "index.ts"));
69
- assert.equal(result?.id, "my-ext");
70
- assert.equal(result?.tier, "community");
71
- });
72
-
73
- it("returns null when entry path parent has no manifest", () => {
74
- const dir = mkdtempSync(join(tmpdir(), "ext-manifest-"));
75
- assert.equal(readManifestFromEntryPath(join(dir, "index.ts")), null);
76
- });
77
- });
@@ -1,62 +0,0 @@
1
- // GSD-2 — Extension Manifest: Types and reading for extension-manifest.json
2
- // Copyright (c) 2026 Jeremy McSpadden <jeremy@fluxlabs.net>
3
-
4
- import { existsSync, readFileSync } from "node:fs";
5
- import { dirname, join } from "node:path";
6
-
7
- // ─── Types ──────────────────────────────────────────────────────────────────
8
-
9
- export interface ExtensionManifest {
10
- id: string;
11
- name: string;
12
- version: string;
13
- description: string;
14
- tier: "core" | "bundled" | "community";
15
- requires: { platform: string };
16
- provides?: {
17
- tools?: string[];
18
- commands?: string[];
19
- hooks?: string[];
20
- shortcuts?: string[];
21
- };
22
- dependencies?: {
23
- extensions?: string[];
24
- runtime?: string[];
25
- };
26
- }
27
-
28
- // ─── Validation ─────────────────────────────────────────────────────────────
29
-
30
- function isManifest(data: unknown): data is ExtensionManifest {
31
- if (typeof data !== "object" || data === null) return false;
32
- const obj = data as Record<string, unknown>;
33
- return (
34
- typeof obj.id === "string" &&
35
- typeof obj.name === "string" &&
36
- typeof obj.version === "string" &&
37
- typeof obj.tier === "string"
38
- );
39
- }
40
-
41
- // ─── Reading ────────────────────────────────────────────────────────────────
42
-
43
- /** Read extension-manifest.json from a directory. Returns null if missing or invalid. */
44
- export function readManifest(extensionDir: string): ExtensionManifest | null {
45
- const manifestPath = join(extensionDir, "extension-manifest.json");
46
- if (!existsSync(manifestPath)) return null;
47
- try {
48
- const raw = JSON.parse(readFileSync(manifestPath, "utf-8"));
49
- return isManifest(raw) ? raw : null;
50
- } catch {
51
- return null;
52
- }
53
- }
54
-
55
- /**
56
- * Given an entry path (e.g. `.../extensions/browser-tools/index.ts`),
57
- * resolve the parent directory and read its manifest.
58
- */
59
- export function readManifestFromEntryPath(entryPath: string): ExtensionManifest | null {
60
- const dir = dirname(entryPath);
61
- return readManifest(dir);
62
- }
@@ -1,134 +0,0 @@
1
- // GSD-2 — Extension Sort Tests
2
- // Copyright (c) 2026 Jeremy McSpadden <jeremy@fluxlabs.net>
3
-
4
- import { describe, it } from "node:test";
5
- import assert from "node:assert/strict";
6
- import { mkdtempSync, mkdirSync, writeFileSync } from "node:fs";
7
- import { join } from "node:path";
8
- import { tmpdir } from "node:os";
9
- import { sortExtensionPaths } from "./extension-sort.js";
10
-
11
- function createExtDir(base: string, id: string, deps?: string[]): string {
12
- const dir = join(base, id);
13
- mkdirSync(dir, { recursive: true });
14
- writeFileSync(
15
- join(dir, "extension-manifest.json"),
16
- JSON.stringify({
17
- id,
18
- name: id,
19
- version: "1.0.0",
20
- tier: "bundled",
21
- requires: { platform: ">=2.29.0" },
22
- ...(deps ? { dependencies: { extensions: deps } } : {}),
23
- }),
24
- );
25
- writeFileSync(join(dir, "index.ts"), `export default function() {}`);
26
- return join(dir, "index.ts");
27
- }
28
-
29
- describe("sortExtensionPaths", () => {
30
- it("returns empty for empty input", () => {
31
- const result = sortExtensionPaths([]);
32
- assert.deepEqual(result.sortedPaths, []);
33
- assert.deepEqual(result.warnings, []);
34
- });
35
-
36
- it("sorts independent extensions alphabetically", () => {
37
- const base = mkdtempSync(join(tmpdir(), "ext-sort-"));
38
- const pathC = createExtDir(base, "charlie");
39
- const pathA = createExtDir(base, "alpha");
40
- const pathB = createExtDir(base, "bravo");
41
-
42
- const result = sortExtensionPaths([pathC, pathA, pathB]);
43
- assert.deepEqual(result.sortedPaths, [pathA, pathB, pathC]);
44
- assert.equal(result.warnings.length, 0);
45
- });
46
-
47
- it("sorts dependencies before dependents", () => {
48
- const base = mkdtempSync(join(tmpdir(), "ext-sort-"));
49
- const pathBase = createExtDir(base, "base-ext");
50
- const pathDependent = createExtDir(base, "dependent-ext", ["base-ext"]);
51
-
52
- // Pass dependent first — sort should reorder
53
- const result = sortExtensionPaths([pathDependent, pathBase]);
54
- assert.deepEqual(result.sortedPaths, [pathBase, pathDependent]);
55
- assert.equal(result.warnings.length, 0);
56
- });
57
-
58
- it("handles deep dependency chains", () => {
59
- const base = mkdtempSync(join(tmpdir(), "ext-sort-"));
60
- const pathA = createExtDir(base, "a");
61
- const pathB = createExtDir(base, "b", ["a"]);
62
- const pathC = createExtDir(base, "c", ["b"]);
63
-
64
- const result = sortExtensionPaths([pathC, pathB, pathA]);
65
- assert.deepEqual(result.sortedPaths, [pathA, pathB, pathC]);
66
- assert.equal(result.warnings.length, 0);
67
- });
68
-
69
- it("warns about missing dependencies but still loads", () => {
70
- const base = mkdtempSync(join(tmpdir(), "ext-sort-"));
71
- const pathExt = createExtDir(base, "my-ext", ["nonexistent"]);
72
-
73
- const result = sortExtensionPaths([pathExt]);
74
- assert.equal(result.sortedPaths.length, 1);
75
- assert.equal(result.sortedPaths[0], pathExt);
76
- assert.equal(result.warnings.length, 1);
77
- assert.match(result.warnings[0].message, /nonexistent.*not installed/);
78
- });
79
-
80
- it("warns about cycles but still loads both", () => {
81
- const base = mkdtempSync(join(tmpdir(), "ext-sort-"));
82
- const pathA = createExtDir(base, "cycle-a", ["cycle-b"]);
83
- const pathB = createExtDir(base, "cycle-b", ["cycle-a"]);
84
-
85
- const result = sortExtensionPaths([pathA, pathB]);
86
- assert.equal(result.sortedPaths.length, 2);
87
- assert.ok(result.warnings.length > 0);
88
- assert.ok(result.warnings.some((w) => w.message.includes("cycle")));
89
- });
90
-
91
- it("silently ignores self-dependencies", () => {
92
- const base = mkdtempSync(join(tmpdir(), "ext-sort-"));
93
- const pathExt = createExtDir(base, "self-dep", ["self-dep"]);
94
-
95
- const result = sortExtensionPaths([pathExt]);
96
- assert.deepEqual(result.sortedPaths, [pathExt]);
97
- assert.equal(result.warnings.length, 0);
98
- });
99
-
100
- it("prepends extensions without manifests", () => {
101
- const base = mkdtempSync(join(tmpdir(), "ext-sort-"));
102
- const noManifestDir = join(base, "no-manifest");
103
- mkdirSync(noManifestDir, { recursive: true });
104
- writeFileSync(join(noManifestDir, "index.ts"), `export default function() {}`);
105
- const noManifestPath = join(noManifestDir, "index.ts");
106
-
107
- const pathWithManifest = createExtDir(base, "with-manifest");
108
-
109
- const result = sortExtensionPaths([pathWithManifest, noManifestPath]);
110
- assert.equal(result.sortedPaths[0], noManifestPath);
111
- assert.equal(result.sortedPaths[1], pathWithManifest);
112
- });
113
-
114
- it("handles non-array dependencies gracefully", () => {
115
- const base = mkdtempSync(join(tmpdir(), "ext-sort-"));
116
- const dir = join(base, "bad-deps");
117
- mkdirSync(dir, { recursive: true });
118
- writeFileSync(
119
- join(dir, "extension-manifest.json"),
120
- JSON.stringify({
121
- id: "bad-deps",
122
- name: "bad-deps",
123
- version: "1.0.0",
124
- tier: "bundled",
125
- dependencies: { extensions: "not-an-array" },
126
- }),
127
- );
128
- writeFileSync(join(dir, "index.ts"), `export default function() {}`);
129
-
130
- const result = sortExtensionPaths([join(dir, "index.ts")]);
131
- assert.equal(result.sortedPaths.length, 1);
132
- assert.equal(result.warnings.length, 0);
133
- });
134
- });