gsd-pi 2.77.0-dev.538325aea → 2.77.0-dev.eaa4973bc

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 (874) hide show
  1. package/dist/cli-web-branch.d.ts +1 -0
  2. package/dist/cli-web-branch.js +3 -0
  3. package/dist/cli.js +59 -15
  4. package/dist/extension-discovery.d.ts +6 -0
  5. package/dist/extension-discovery.js +37 -0
  6. package/dist/extension-registry.d.ts +3 -0
  7. package/dist/extension-registry.js +1 -1
  8. package/dist/extension-sort.d.ts +18 -0
  9. package/dist/extension-sort.js +114 -0
  10. package/dist/extension-validator.d.ts +47 -0
  11. package/dist/extension-validator.js +127 -0
  12. package/dist/headless-ui.d.ts +1 -1
  13. package/dist/headless.js +4 -2
  14. package/dist/loader.js +36 -7
  15. package/dist/onboarding.js +5 -5
  16. package/dist/provider-migrations.d.ts +20 -2
  17. package/dist/provider-migrations.js +15 -2
  18. package/dist/remote-questions-config.js +1 -1
  19. package/dist/resources/extensions/async-jobs/async-bash-tool.js +1 -1
  20. package/dist/resources/extensions/aws-auth/index.js +1 -2
  21. package/dist/resources/extensions/bg-shell/bg-shell-lifecycle.js +9 -6
  22. package/dist/resources/extensions/bg-shell/process-manager.js +1 -2
  23. package/dist/resources/extensions/browser-tools/index.js +1 -0
  24. package/dist/resources/extensions/claude-code-cli/index.js +1 -1
  25. package/dist/resources/extensions/claude-code-cli/partial-builder.js +17 -106
  26. package/dist/resources/extensions/claude-code-cli/stream-adapter.js +71 -57
  27. package/dist/resources/extensions/cmux/index.js +20 -0
  28. package/dist/resources/extensions/google-search/extension-manifest.json +5 -4
  29. package/dist/resources/extensions/google-search/index.js +2 -375
  30. package/dist/resources/extensions/gsd/abandon-detect.js +44 -0
  31. package/dist/resources/extensions/gsd/auto/resolve.js +24 -0
  32. package/dist/resources/extensions/gsd/auto/run-unit.js +10 -2
  33. package/dist/resources/extensions/gsd/auto/turn-epoch.js +95 -0
  34. package/dist/resources/extensions/gsd/auto-dispatch.js +24 -0
  35. package/dist/resources/extensions/gsd/auto-loop.js +1 -1
  36. package/dist/resources/extensions/gsd/auto-post-unit.js +31 -0
  37. package/dist/resources/extensions/gsd/auto-timeout-recovery.js +11 -5
  38. package/dist/resources/extensions/gsd/auto-unit-closeout.js +11 -2
  39. package/dist/resources/extensions/gsd/auto-worktree.js +58 -8
  40. package/dist/resources/extensions/gsd/auto.js +31 -14
  41. package/dist/resources/extensions/gsd/bootstrap/provider-error-resume.js +4 -2
  42. package/dist/resources/extensions/gsd/bootstrap/register-extension.js +11 -0
  43. package/dist/resources/extensions/gsd/bootstrap/system-context.js +11 -6
  44. package/dist/resources/extensions/gsd/commands/handlers/workflow.js +31 -4
  45. package/dist/resources/extensions/gsd/commands-cmux.js +9 -6
  46. package/dist/resources/extensions/gsd/commands-extensions.js +634 -43
  47. package/dist/resources/extensions/gsd/file-lock.js +49 -9
  48. package/dist/resources/extensions/gsd/git-service.js +1 -0
  49. package/dist/resources/extensions/gsd/gitignore.js +1 -0
  50. package/dist/resources/extensions/gsd/guided-flow-queue.js +4 -1
  51. package/dist/resources/extensions/gsd/guided-flow.js +1 -1
  52. package/dist/resources/extensions/gsd/journal.js +17 -2
  53. package/dist/resources/extensions/gsd/milestone-actions.js +15 -0
  54. package/dist/resources/extensions/gsd/notifications.js +30 -16
  55. package/dist/resources/extensions/gsd/reports.js +5 -4
  56. package/dist/resources/extensions/gsd/tools/complete-slice.js +21 -0
  57. package/dist/resources/extensions/gsd/tools/complete-task.js +31 -0
  58. package/dist/resources/extensions/gsd/uok/audit.js +18 -2
  59. package/dist/resources/extensions/gsd/workflow-logger.js +10 -2
  60. package/dist/resources/extensions/gsd/worktree-manager.js +1 -0
  61. package/dist/resources/extensions/mcp-client/auth.js +10 -1
  62. package/dist/resources/extensions/mcp-client/index.js +119 -10
  63. package/dist/resources/extensions/ollama/index.js +2 -1
  64. package/dist/resources/extensions/ollama/ollama-chat-provider.js +15 -5
  65. package/dist/resources/extensions/remote-questions/config.js +1 -12
  66. package/dist/resources/extensions/shared/cmux-events.js +12 -0
  67. package/dist/resources/extensions/shared/rtk-session-stats.js +1 -2
  68. package/dist/resources/extensions/universal-config/index.js +1 -1
  69. package/dist/resources/skills/create-skill/SKILL.md +2 -2
  70. package/dist/resources/skills/create-skill/references/gsd-skill-ecosystem.md +4 -4
  71. package/dist/resources/skills/create-skill/workflows/audit-skill.md +4 -4
  72. package/dist/resources/skills/create-skill/workflows/create-new-skill.md +5 -5
  73. package/dist/security-overrides.d.ts +1 -4
  74. package/dist/security-overrides.js +3 -16
  75. package/dist/tsconfig.extensions.tsbuildinfo +1 -1
  76. package/dist/web/standalone/.next/BUILD_ID +1 -1
  77. package/dist/web/standalone/.next/app-path-routes-manifest.json +11 -11
  78. package/dist/web/standalone/.next/build-manifest.json +3 -3
  79. package/dist/web/standalone/.next/prerender-manifest.json +3 -3
  80. package/dist/web/standalone/.next/react-loadable-manifest.json +1 -1
  81. package/dist/web/standalone/.next/server/app/_global-error.html +1 -1
  82. package/dist/web/standalone/.next/server/app/_global-error.rsc +1 -1
  83. package/dist/web/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  84. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  85. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  86. package/dist/web/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  87. package/dist/web/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  88. package/dist/web/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  89. package/dist/web/standalone/.next/server/app/_not-found.html +1 -1
  90. package/dist/web/standalone/.next/server/app/_not-found.rsc +1 -1
  91. package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
  92. package/dist/web/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  93. package/dist/web/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
  94. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  95. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  96. package/dist/web/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  97. package/dist/web/standalone/.next/server/app/api/boot/route.js +1 -1
  98. package/dist/web/standalone/.next/server/app/api/boot/route.js.nft.json +1 -1
  99. package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route.js +1 -1
  100. package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route.js.nft.json +1 -1
  101. package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route.js +1 -1
  102. package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route.js.nft.json +1 -1
  103. package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route.js +1 -1
  104. package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route.js.nft.json +1 -1
  105. package/dist/web/standalone/.next/server/app/api/captures/route.js +1 -1
  106. package/dist/web/standalone/.next/server/app/api/captures/route.js.nft.json +1 -1
  107. package/dist/web/standalone/.next/server/app/api/cleanup/route.js +1 -1
  108. package/dist/web/standalone/.next/server/app/api/cleanup/route.js.nft.json +1 -1
  109. package/dist/web/standalone/.next/server/app/api/doctor/route.js +1 -1
  110. package/dist/web/standalone/.next/server/app/api/doctor/route.js.nft.json +1 -1
  111. package/dist/web/standalone/.next/server/app/api/export-data/route.js +1 -1
  112. package/dist/web/standalone/.next/server/app/api/export-data/route.js.nft.json +1 -1
  113. package/dist/web/standalone/.next/server/app/api/files/route.js +1 -1
  114. package/dist/web/standalone/.next/server/app/api/files/route.js.nft.json +1 -1
  115. package/dist/web/standalone/.next/server/app/api/forensics/route.js +1 -1
  116. package/dist/web/standalone/.next/server/app/api/forensics/route.js.nft.json +1 -1
  117. package/dist/web/standalone/.next/server/app/api/git/route.js +1 -1
  118. package/dist/web/standalone/.next/server/app/api/git/route.js.nft.json +1 -1
  119. package/dist/web/standalone/.next/server/app/api/history/route.js +1 -1
  120. package/dist/web/standalone/.next/server/app/api/history/route.js.nft.json +1 -1
  121. package/dist/web/standalone/.next/server/app/api/hooks/route.js +1 -1
  122. package/dist/web/standalone/.next/server/app/api/hooks/route.js.nft.json +1 -1
  123. package/dist/web/standalone/.next/server/app/api/inspect/route.js +1 -1
  124. package/dist/web/standalone/.next/server/app/api/inspect/route.js.nft.json +1 -1
  125. package/dist/web/standalone/.next/server/app/api/knowledge/route.js +1 -1
  126. package/dist/web/standalone/.next/server/app/api/knowledge/route.js.nft.json +1 -1
  127. package/dist/web/standalone/.next/server/app/api/live-state/route.js +1 -1
  128. package/dist/web/standalone/.next/server/app/api/live-state/route.js.nft.json +1 -1
  129. package/dist/web/standalone/.next/server/app/api/notifications/route.js +1 -1
  130. package/dist/web/standalone/.next/server/app/api/notifications/route.js.nft.json +1 -1
  131. package/dist/web/standalone/.next/server/app/api/onboarding/route.js +1 -1
  132. package/dist/web/standalone/.next/server/app/api/onboarding/route.js.nft.json +1 -1
  133. package/dist/web/standalone/.next/server/app/api/projects/route.js +1 -1
  134. package/dist/web/standalone/.next/server/app/api/projects/route.js.nft.json +1 -1
  135. package/dist/web/standalone/.next/server/app/api/recovery/route.js +1 -1
  136. package/dist/web/standalone/.next/server/app/api/recovery/route.js.nft.json +1 -1
  137. package/dist/web/standalone/.next/server/app/api/session/browser/route.js +1 -1
  138. package/dist/web/standalone/.next/server/app/api/session/browser/route.js.nft.json +1 -1
  139. package/dist/web/standalone/.next/server/app/api/session/command/route.js +1 -1
  140. package/dist/web/standalone/.next/server/app/api/session/command/route.js.nft.json +1 -1
  141. package/dist/web/standalone/.next/server/app/api/session/events/route.js +1 -1
  142. package/dist/web/standalone/.next/server/app/api/session/events/route.js.nft.json +1 -1
  143. package/dist/web/standalone/.next/server/app/api/session/manage/route.js +1 -1
  144. package/dist/web/standalone/.next/server/app/api/session/manage/route.js.nft.json +1 -1
  145. package/dist/web/standalone/.next/server/app/api/settings-data/route.js +1 -1
  146. package/dist/web/standalone/.next/server/app/api/settings-data/route.js.nft.json +1 -1
  147. package/dist/web/standalone/.next/server/app/api/skill-health/route.js +1 -1
  148. package/dist/web/standalone/.next/server/app/api/skill-health/route.js.nft.json +1 -1
  149. package/dist/web/standalone/.next/server/app/api/steer/route.js +1 -1
  150. package/dist/web/standalone/.next/server/app/api/steer/route.js.nft.json +1 -1
  151. package/dist/web/standalone/.next/server/app/api/switch-root/route.js +1 -1
  152. package/dist/web/standalone/.next/server/app/api/switch-root/route.js.nft.json +1 -1
  153. package/dist/web/standalone/.next/server/app/api/terminal/input/route.js +1 -1
  154. package/dist/web/standalone/.next/server/app/api/terminal/resize/route.js +1 -1
  155. package/dist/web/standalone/.next/server/app/api/terminal/sessions/route.js +1 -1
  156. package/dist/web/standalone/.next/server/app/api/terminal/sessions/route.js.nft.json +1 -1
  157. package/dist/web/standalone/.next/server/app/api/terminal/stream/route.js +1 -1
  158. package/dist/web/standalone/.next/server/app/api/terminal/stream/route.js.nft.json +1 -1
  159. package/dist/web/standalone/.next/server/app/api/undo/route.js +1 -1
  160. package/dist/web/standalone/.next/server/app/api/undo/route.js.nft.json +1 -1
  161. package/dist/web/standalone/.next/server/app/api/visualizer/route.js +1 -1
  162. package/dist/web/standalone/.next/server/app/api/visualizer/route.js.nft.json +1 -1
  163. package/dist/web/standalone/.next/server/app/index.html +1 -1
  164. package/dist/web/standalone/.next/server/app/index.rsc +1 -1
  165. package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  166. package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +1 -1
  167. package/dist/web/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
  168. package/dist/web/standalone/.next/server/app/index.segments/_index.segment.rsc +1 -1
  169. package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  170. package/dist/web/standalone/.next/server/app-paths-manifest.json +11 -11
  171. package/dist/web/standalone/.next/server/chunks/1926.js +1 -0
  172. package/dist/web/standalone/.next/server/chunks/6897.js +2 -2
  173. package/dist/web/standalone/.next/server/middleware-build-manifest.js +1 -1
  174. package/dist/web/standalone/.next/server/middleware-manifest.json +5 -5
  175. package/dist/web/standalone/.next/server/middleware-react-loadable-manifest.js +1 -1
  176. package/dist/web/standalone/.next/server/pages/404.html +1 -1
  177. package/dist/web/standalone/.next/server/pages/500.html +1 -1
  178. package/dist/web/standalone/.next/server/server-reference-manifest.json +1 -1
  179. package/dist/web/standalone/.next/static/chunks/2826.e9f5195e91f9cad2.js +11 -0
  180. package/dist/web/standalone/.next/static/chunks/{webpack-1832629448831fdc.js → webpack-2e68521d7c82f7c2.js} +1 -1
  181. package/dist/web-mode.js +1 -1
  182. package/dist/welcome-screen.js +20 -19
  183. package/dist/wizard.js +5 -2
  184. package/package.json +16 -32
  185. package/packages/mcp-server/README.md +3 -3
  186. package/packages/mcp-server/dist/env-writer.d.ts +1 -0
  187. package/packages/mcp-server/dist/env-writer.d.ts.map +1 -1
  188. package/packages/mcp-server/dist/env-writer.js +74 -6
  189. package/packages/mcp-server/dist/env-writer.js.map +1 -1
  190. package/packages/mcp-server/dist/server.d.ts.map +1 -1
  191. package/packages/mcp-server/dist/server.js +36 -17
  192. package/packages/mcp-server/dist/server.js.map +1 -1
  193. package/packages/mcp-server/package.json +5 -0
  194. package/packages/mcp-server/src/env-writer.test.ts +79 -1
  195. package/packages/mcp-server/src/env-writer.ts +76 -6
  196. package/packages/mcp-server/src/readers/readers.test.ts +5 -1
  197. package/packages/mcp-server/src/server.ts +45 -19
  198. package/packages/mcp-server/tsconfig.tsbuildinfo +1 -1
  199. package/packages/native/package.json +5 -0
  200. package/packages/native/src/__tests__/clipboard.test.mjs +69 -23
  201. package/packages/native/tsconfig.json +1 -2
  202. package/packages/native/tsconfig.tsbuildinfo +1 -0
  203. package/packages/pi-agent-core/package.json +5 -0
  204. package/packages/pi-agent-core/src/agent-loop.test.ts +220 -15
  205. package/packages/pi-ai/package.json +5 -0
  206. package/packages/pi-ai/tsconfig.tsbuildinfo +1 -1
  207. package/packages/pi-coding-agent/dist/core/compaction/compaction.d.ts +25 -0
  208. package/packages/pi-coding-agent/dist/core/compaction/compaction.d.ts.map +1 -1
  209. package/packages/pi-coding-agent/dist/core/compaction/compaction.js +105 -6
  210. package/packages/pi-coding-agent/dist/core/compaction/compaction.js.map +1 -1
  211. package/packages/pi-coding-agent/dist/core/compaction/compaction.test.js +230 -28
  212. package/packages/pi-coding-agent/dist/core/compaction/compaction.test.js.map +1 -1
  213. package/packages/pi-coding-agent/dist/core/compaction/utils.d.ts +30 -2
  214. package/packages/pi-coding-agent/dist/core/compaction/utils.d.ts.map +1 -1
  215. package/packages/pi-coding-agent/dist/core/compaction/utils.js +113 -12
  216. package/packages/pi-coding-agent/dist/core/compaction/utils.js.map +1 -1
  217. package/packages/pi-coding-agent/dist/core/compaction-orchestrator.d.ts +1 -0
  218. package/packages/pi-coding-agent/dist/core/compaction-orchestrator.d.ts.map +1 -1
  219. package/packages/pi-coding-agent/dist/core/compaction-orchestrator.js +29 -18
  220. package/packages/pi-coding-agent/dist/core/compaction-orchestrator.js.map +1 -1
  221. package/packages/pi-coding-agent/dist/core/compaction-orchestrator.test.d.ts +2 -0
  222. package/packages/pi-coding-agent/dist/core/compaction-orchestrator.test.d.ts.map +1 -0
  223. package/packages/pi-coding-agent/dist/core/compaction-orchestrator.test.js +130 -0
  224. package/packages/pi-coding-agent/dist/core/compaction-orchestrator.test.js.map +1 -0
  225. package/packages/pi-coding-agent/dist/core/compaction-utils.test.js +56 -1
  226. package/packages/pi-coding-agent/dist/core/compaction-utils.test.js.map +1 -1
  227. package/packages/pi-coding-agent/dist/core/discovery-cache.test.js +8 -15
  228. package/packages/pi-coding-agent/dist/core/discovery-cache.test.js.map +1 -1
  229. package/packages/pi-coding-agent/dist/core/extensions/extension-discovery.d.ts +25 -0
  230. package/packages/pi-coding-agent/dist/core/extensions/extension-discovery.d.ts.map +1 -0
  231. package/packages/pi-coding-agent/dist/core/extensions/extension-discovery.js +109 -0
  232. package/packages/pi-coding-agent/dist/core/extensions/extension-discovery.js.map +1 -0
  233. package/packages/pi-coding-agent/dist/core/extensions/extension-registry.d.ts +67 -0
  234. package/packages/pi-coding-agent/dist/core/extensions/extension-registry.d.ts.map +1 -0
  235. package/packages/pi-coding-agent/dist/core/extensions/extension-registry.js +167 -0
  236. package/packages/pi-coding-agent/dist/core/extensions/extension-registry.js.map +1 -0
  237. package/packages/pi-coding-agent/dist/core/extensions/loader.d.ts +3 -2
  238. package/packages/pi-coding-agent/dist/core/extensions/loader.d.ts.map +1 -1
  239. package/packages/pi-coding-agent/dist/core/extensions/loader.js +24 -8
  240. package/packages/pi-coding-agent/dist/core/extensions/loader.js.map +1 -1
  241. package/packages/pi-coding-agent/dist/core/extensions/types.d.ts +7 -0
  242. package/packages/pi-coding-agent/dist/core/extensions/types.d.ts.map +1 -1
  243. package/packages/pi-coding-agent/dist/core/extensions/types.js.map +1 -1
  244. package/packages/pi-coding-agent/dist/core/lsp/lsp-integration.test.js +11 -0
  245. package/packages/pi-coding-agent/dist/core/lsp/lsp-integration.test.js.map +1 -1
  246. package/packages/pi-coding-agent/dist/core/model-registry-auth-mode.test.js +2 -2
  247. package/packages/pi-coding-agent/dist/core/model-registry-auth-mode.test.js.map +1 -1
  248. package/packages/pi-coding-agent/dist/core/resource-loader.js +1 -1
  249. package/packages/pi-coding-agent/dist/core/resource-loader.js.map +1 -1
  250. package/packages/pi-coding-agent/dist/core/sdk.d.ts +1 -0
  251. package/packages/pi-coding-agent/dist/core/sdk.d.ts.map +1 -1
  252. package/packages/pi-coding-agent/dist/core/sdk.js +4 -1
  253. package/packages/pi-coding-agent/dist/core/sdk.js.map +1 -1
  254. package/packages/pi-coding-agent/dist/core/sdk.test.js +19 -1
  255. package/packages/pi-coding-agent/dist/core/sdk.test.js.map +1 -1
  256. package/packages/pi-coding-agent/dist/core/system-prompt.js +3 -3
  257. package/packages/pi-coding-agent/dist/core/system-prompt.js.map +1 -1
  258. package/packages/pi-coding-agent/dist/core/tools/path-utils.test.js +2 -1
  259. package/packages/pi-coding-agent/dist/core/tools/path-utils.test.js.map +1 -1
  260. package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/provider-display-name.test.js +15 -6
  261. package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/provider-display-name.test.js.map +1 -1
  262. package/packages/pi-coding-agent/dist/modes/interactive/components/footer.d.ts.map +1 -1
  263. package/packages/pi-coding-agent/dist/modes/interactive/components/footer.js +14 -5
  264. package/packages/pi-coding-agent/dist/modes/interactive/components/footer.js.map +1 -1
  265. package/packages/pi-coding-agent/dist/modes/interactive/components/model-selector.d.ts +7 -1
  266. package/packages/pi-coding-agent/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
  267. package/packages/pi-coding-agent/dist/modes/interactive/components/model-selector.js +31 -9
  268. package/packages/pi-coding-agent/dist/modes/interactive/components/model-selector.js.map +1 -1
  269. package/packages/pi-coding-agent/dist/modes/interactive/controllers/input-controller.test.js +14 -0
  270. package/packages/pi-coding-agent/dist/modes/interactive/controllers/input-controller.test.js.map +1 -1
  271. package/packages/pi-coding-agent/package.json +5 -0
  272. package/packages/pi-coding-agent/src/core/compaction/compaction.test.ts +368 -28
  273. package/packages/pi-coding-agent/src/core/compaction/compaction.ts +122 -6
  274. package/packages/pi-coding-agent/src/core/compaction/utils.ts +111 -13
  275. package/packages/pi-coding-agent/src/core/compaction-orchestrator.test.ts +154 -0
  276. package/packages/pi-coding-agent/src/core/compaction-orchestrator.ts +32 -18
  277. package/packages/pi-coding-agent/src/core/compaction-utils.test.ts +68 -1
  278. package/packages/pi-coding-agent/src/core/discovery-cache.test.ts +9 -18
  279. package/packages/pi-coding-agent/src/core/extensions/extension-discovery.ts +119 -0
  280. package/packages/pi-coding-agent/src/core/extensions/extension-registry.ts +222 -0
  281. package/packages/pi-coding-agent/src/core/extensions/loader.ts +24 -11
  282. package/packages/pi-coding-agent/src/core/extensions/types.ts +8 -0
  283. package/packages/pi-coding-agent/src/core/lsp/lsp-integration.test.ts +13 -0
  284. package/packages/pi-coding-agent/src/core/model-registry-auth-mode.test.ts +2 -2
  285. package/packages/pi-coding-agent/src/core/resource-loader.ts +1 -1
  286. package/packages/pi-coding-agent/src/core/sdk.test.ts +25 -1
  287. package/packages/pi-coding-agent/src/core/sdk.ts +10 -3
  288. package/packages/pi-coding-agent/src/core/system-prompt.ts +3 -3
  289. package/packages/pi-coding-agent/src/core/tools/path-utils.test.ts +2 -1
  290. package/packages/pi-coding-agent/src/modes/interactive/components/__tests__/provider-display-name.test.ts +17 -7
  291. package/packages/pi-coding-agent/src/modes/interactive/components/footer.ts +14 -5
  292. package/packages/pi-coding-agent/src/modes/interactive/components/model-selector.ts +45 -11
  293. package/packages/pi-coding-agent/src/modes/interactive/controllers/input-controller.test.ts +14 -0
  294. package/packages/pi-coding-agent/tsconfig.tsbuildinfo +1 -1
  295. package/packages/pi-tui/dist/__tests__/autocomplete.test.js +12 -5
  296. package/packages/pi-tui/dist/__tests__/autocomplete.test.js.map +1 -1
  297. package/packages/pi-tui/dist/__tests__/stdin-buffer.test.js +19 -0
  298. package/packages/pi-tui/dist/__tests__/stdin-buffer.test.js.map +1 -1
  299. package/packages/pi-tui/dist/stdin-buffer.d.ts +7 -0
  300. package/packages/pi-tui/dist/stdin-buffer.d.ts.map +1 -1
  301. package/packages/pi-tui/dist/stdin-buffer.js +20 -0
  302. package/packages/pi-tui/dist/stdin-buffer.js.map +1 -1
  303. package/packages/pi-tui/package.json +5 -0
  304. package/packages/pi-tui/src/__tests__/autocomplete.test.ts +20 -5
  305. package/packages/pi-tui/src/__tests__/stdin-buffer.test.ts +25 -0
  306. package/packages/pi-tui/src/stdin-buffer.ts +26 -0
  307. package/packages/pi-tui/tsconfig.tsbuildinfo +1 -1
  308. package/packages/rpc-client/package.json +5 -0
  309. package/pkg/dist/core/export-html/ansi-to-html.d.ts.map +1 -1
  310. package/pkg/dist/core/export-html/ansi-to-html.js +0 -1
  311. package/pkg/dist/core/export-html/ansi-to-html.js.map +1 -1
  312. package/pkg/dist/core/export-html/index.d.ts +1 -1
  313. package/pkg/dist/core/export-html/index.d.ts.map +1 -1
  314. package/pkg/dist/core/export-html/index.js +5 -39
  315. package/pkg/dist/core/export-html/index.js.map +1 -1
  316. package/pkg/dist/core/export-html/tool-renderer.d.ts +2 -2
  317. package/pkg/dist/core/export-html/tool-renderer.d.ts.map +1 -1
  318. package/pkg/dist/core/export-html/tool-renderer.js.map +1 -1
  319. package/scripts/ensure-workspace-builds.cjs +0 -2
  320. package/scripts/lib/workspace-manifest.cjs +86 -0
  321. package/scripts/link-workspace-packages.cjs +5 -19
  322. package/src/resources/extensions/async-jobs/async-bash-tool.ts +1 -1
  323. package/src/resources/extensions/aws-auth/index.ts +1 -2
  324. package/src/resources/extensions/bg-shell/bg-shell-lifecycle.ts +7 -4
  325. package/src/resources/extensions/bg-shell/index.ts +1 -2
  326. package/src/resources/extensions/bg-shell/process-manager.ts +1 -2
  327. package/src/resources/extensions/browser-tools/index.ts +1 -2
  328. package/src/resources/extensions/claude-code-cli/index.ts +1 -1
  329. package/src/resources/extensions/claude-code-cli/partial-builder.ts +23 -115
  330. package/src/resources/extensions/claude-code-cli/stream-adapter.ts +81 -61
  331. package/src/resources/extensions/claude-code-cli/tests/stream-adapter.test.ts +91 -22
  332. package/src/resources/extensions/cmux/index.ts +35 -10
  333. package/src/resources/extensions/google-search/extension-manifest.json +5 -4
  334. package/src/resources/extensions/google-search/index.ts +8 -470
  335. package/src/resources/extensions/gsd/abandon-detect.ts +62 -0
  336. package/src/resources/extensions/gsd/auto/loop-deps.ts +1 -1
  337. package/src/resources/extensions/gsd/auto/resolve.ts +29 -0
  338. package/src/resources/extensions/gsd/auto/run-unit.ts +16 -2
  339. package/src/resources/extensions/gsd/auto/turn-epoch.ts +108 -0
  340. package/src/resources/extensions/gsd/auto/types.ts +1 -1
  341. package/src/resources/extensions/gsd/auto-dispatch.ts +20 -0
  342. package/src/resources/extensions/gsd/auto-loop.ts +1 -1
  343. package/src/resources/extensions/gsd/auto-post-unit.ts +30 -0
  344. package/src/resources/extensions/gsd/auto-timeout-recovery.ts +12 -5
  345. package/src/resources/extensions/gsd/auto-unit-closeout.ts +14 -3
  346. package/src/resources/extensions/gsd/auto-worktree.ts +60 -5
  347. package/src/resources/extensions/gsd/auto.ts +37 -18
  348. package/src/resources/extensions/gsd/bootstrap/provider-error-resume.ts +6 -2
  349. package/src/resources/extensions/gsd/bootstrap/register-extension.ts +11 -0
  350. package/src/resources/extensions/gsd/bootstrap/system-context.ts +13 -9
  351. package/src/resources/extensions/gsd/commands/handlers/workflow.ts +27 -8
  352. package/src/resources/extensions/gsd/commands-cmux.ts +10 -6
  353. package/src/resources/extensions/gsd/commands-extensions.ts +747 -41
  354. package/src/resources/extensions/gsd/file-lock.ts +84 -11
  355. package/src/resources/extensions/gsd/git-service.ts +1 -0
  356. package/src/resources/extensions/gsd/gitignore.ts +1 -0
  357. package/src/resources/extensions/gsd/guided-flow-queue.ts +4 -1
  358. package/src/resources/extensions/gsd/guided-flow.ts +1 -1
  359. package/src/resources/extensions/gsd/journal.ts +27 -2
  360. package/src/resources/extensions/gsd/milestone-actions.ts +18 -0
  361. package/src/resources/extensions/gsd/notifications.ts +27 -15
  362. package/src/resources/extensions/gsd/reports.ts +5 -4
  363. package/src/resources/extensions/gsd/tests/auto-loop.test.ts +11 -2
  364. package/src/resources/extensions/gsd/tests/auto-mode-guards.test.ts +79 -0
  365. package/src/resources/extensions/gsd/tests/cmux.test.ts +5 -9
  366. package/src/resources/extensions/gsd/tests/file-lock.test.ts +86 -12
  367. package/src/resources/extensions/gsd/tests/google-search-stub.test.ts +121 -0
  368. package/src/resources/extensions/gsd/tests/integration/auto-worktree-milestone-merge.test.ts +30 -0
  369. package/src/resources/extensions/gsd/tests/integration/git-service.test.ts +3 -2
  370. package/src/resources/extensions/gsd/tests/mcp-client-security.test.ts +76 -0
  371. package/src/resources/extensions/gsd/tests/milestone-transition-state-rebuild.test.ts +4 -2
  372. package/src/resources/extensions/gsd/tests/parallel-commit-scope.test.ts +5 -0
  373. package/src/resources/extensions/gsd/tests/parallel-skill-prompt-integration.test.ts +150 -0
  374. package/src/resources/extensions/gsd/tests/provider-errors.test.ts +39 -25
  375. package/src/resources/extensions/gsd/tests/queue-auto-guard.test.ts +181 -0
  376. package/src/resources/extensions/gsd/tests/quick-auto-guard.test.ts +13 -7
  377. package/src/resources/extensions/gsd/tests/require-slice-discussion-dispatch.test.ts +170 -0
  378. package/src/resources/extensions/gsd/tests/rewrite-docs-abandon-detect.test.ts +195 -0
  379. package/src/resources/extensions/gsd/tests/stuck-detection-coverage.test.ts +2 -2
  380. package/src/resources/extensions/gsd/tests/triage-resolution.test.ts +50 -2
  381. package/src/resources/extensions/gsd/tests/turn-epoch.test.ts +162 -0
  382. package/src/resources/extensions/gsd/tests/validate-extension-package.test.ts +168 -0
  383. package/src/resources/extensions/gsd/tests/workflow-mcp.test.ts +25 -2
  384. package/src/resources/extensions/gsd/tools/complete-slice.ts +38 -0
  385. package/src/resources/extensions/gsd/tools/complete-task.ts +49 -0
  386. package/src/resources/extensions/gsd/uok/audit.ts +20 -2
  387. package/src/resources/extensions/gsd/workflow-logger.ts +22 -3
  388. package/src/resources/extensions/gsd/worktree-manager.ts +1 -0
  389. package/src/resources/extensions/mcp-client/auth.ts +12 -1
  390. package/src/resources/extensions/mcp-client/index.ts +130 -11
  391. package/src/resources/extensions/ollama/index.ts +3 -3
  392. package/src/resources/extensions/ollama/ollama-chat-provider.ts +18 -6
  393. package/src/resources/extensions/remote-questions/config.ts +4 -15
  394. package/src/resources/extensions/search-the-web/index.ts +1 -2
  395. package/src/resources/extensions/shared/cmux-events.ts +59 -0
  396. package/src/resources/extensions/shared/rtk-session-stats.ts +1 -2
  397. package/src/resources/extensions/shared/tests/format-utils.test.ts +3 -5
  398. package/src/resources/extensions/universal-config/index.ts +1 -1
  399. package/src/resources/skills/create-skill/SKILL.md +2 -2
  400. package/src/resources/skills/create-skill/references/gsd-skill-ecosystem.md +4 -4
  401. package/src/resources/skills/create-skill/workflows/audit-skill.md +4 -4
  402. package/src/resources/skills/create-skill/workflows/create-new-skill.md +5 -5
  403. package/dist/web/standalone/.next/server/chunks/7461.js +0 -1
  404. package/dist/web/standalone/.next/static/chunks/2826.d445fb428ef41fa1.js +0 -9
  405. package/packages/gsd-agent-core/dist/agent-session.d.ts +0 -716
  406. package/packages/gsd-agent-core/dist/agent-session.d.ts.map +0 -1
  407. package/packages/gsd-agent-core/dist/agent-session.js +0 -2595
  408. package/packages/gsd-agent-core/dist/agent-session.js.map +0 -1
  409. package/packages/gsd-agent-core/dist/artifact-manager.d.ts +0 -52
  410. package/packages/gsd-agent-core/dist/artifact-manager.d.ts.map +0 -1
  411. package/packages/gsd-agent-core/dist/artifact-manager.js +0 -118
  412. package/packages/gsd-agent-core/dist/artifact-manager.js.map +0 -1
  413. package/packages/gsd-agent-core/dist/bash-executor.d.ts +0 -57
  414. package/packages/gsd-agent-core/dist/bash-executor.d.ts.map +0 -1
  415. package/packages/gsd-agent-core/dist/bash-executor.js +0 -282
  416. package/packages/gsd-agent-core/dist/bash-executor.js.map +0 -1
  417. package/packages/gsd-agent-core/dist/blob-store.d.ts +0 -39
  418. package/packages/gsd-agent-core/dist/blob-store.d.ts.map +0 -1
  419. package/packages/gsd-agent-core/dist/blob-store.js +0 -151
  420. package/packages/gsd-agent-core/dist/blob-store.js.map +0 -1
  421. package/packages/gsd-agent-core/dist/compaction/branch-summarization.d.ts +0 -90
  422. package/packages/gsd-agent-core/dist/compaction/branch-summarization.d.ts.map +0 -1
  423. package/packages/gsd-agent-core/dist/compaction/branch-summarization.js +0 -207
  424. package/packages/gsd-agent-core/dist/compaction/branch-summarization.js.map +0 -1
  425. package/packages/gsd-agent-core/dist/compaction/compaction.d.ts +0 -137
  426. package/packages/gsd-agent-core/dist/compaction/compaction.d.ts.map +0 -1
  427. package/packages/gsd-agent-core/dist/compaction/compaction.js +0 -621
  428. package/packages/gsd-agent-core/dist/compaction/compaction.js.map +0 -1
  429. package/packages/gsd-agent-core/dist/compaction/index.d.ts +0 -7
  430. package/packages/gsd-agent-core/dist/compaction/index.d.ts.map +0 -1
  431. package/packages/gsd-agent-core/dist/compaction/index.js +0 -7
  432. package/packages/gsd-agent-core/dist/compaction/index.js.map +0 -1
  433. package/packages/gsd-agent-core/dist/compaction/utils.d.ts +0 -78
  434. package/packages/gsd-agent-core/dist/compaction/utils.d.ts.map +0 -1
  435. package/packages/gsd-agent-core/dist/compaction/utils.js +0 -263
  436. package/packages/gsd-agent-core/dist/compaction/utils.js.map +0 -1
  437. package/packages/gsd-agent-core/dist/compaction-orchestrator.d.ts +0 -90
  438. package/packages/gsd-agent-core/dist/compaction-orchestrator.d.ts.map +0 -1
  439. package/packages/gsd-agent-core/dist/compaction-orchestrator.js +0 -338
  440. package/packages/gsd-agent-core/dist/compaction-orchestrator.js.map +0 -1
  441. package/packages/gsd-agent-core/dist/contextual-tips.d.ts +0 -43
  442. package/packages/gsd-agent-core/dist/contextual-tips.d.ts.map +0 -1
  443. package/packages/gsd-agent-core/dist/contextual-tips.js +0 -208
  444. package/packages/gsd-agent-core/dist/contextual-tips.js.map +0 -1
  445. package/packages/gsd-agent-core/dist/export-html/ansi-to-html.d.ts +0 -18
  446. package/packages/gsd-agent-core/dist/export-html/ansi-to-html.d.ts.map +0 -1
  447. package/packages/gsd-agent-core/dist/export-html/ansi-to-html.js +0 -250
  448. package/packages/gsd-agent-core/dist/export-html/ansi-to-html.js.map +0 -1
  449. package/packages/gsd-agent-core/dist/export-html/index.d.ts +0 -37
  450. package/packages/gsd-agent-core/dist/export-html/index.d.ts.map +0 -1
  451. package/packages/gsd-agent-core/dist/export-html/index.js +0 -257
  452. package/packages/gsd-agent-core/dist/export-html/index.js.map +0 -1
  453. package/packages/gsd-agent-core/dist/export-html/template.css +0 -971
  454. package/packages/gsd-agent-core/dist/export-html/template.html +0 -54
  455. package/packages/gsd-agent-core/dist/export-html/template.js +0 -1583
  456. package/packages/gsd-agent-core/dist/export-html/tool-renderer.d.ts +0 -38
  457. package/packages/gsd-agent-core/dist/export-html/tool-renderer.d.ts.map +0 -1
  458. package/packages/gsd-agent-core/dist/export-html/tool-renderer.js +0 -70
  459. package/packages/gsd-agent-core/dist/export-html/tool-renderer.js.map +0 -1
  460. package/packages/gsd-agent-core/dist/export-html/vendor/highlight.min.js +0 -1213
  461. package/packages/gsd-agent-core/dist/export-html/vendor/marked.min.js +0 -6
  462. package/packages/gsd-agent-core/dist/fallback-resolver.d.ts +0 -75
  463. package/packages/gsd-agent-core/dist/fallback-resolver.d.ts.map +0 -1
  464. package/packages/gsd-agent-core/dist/fallback-resolver.js +0 -118
  465. package/packages/gsd-agent-core/dist/fallback-resolver.js.map +0 -1
  466. package/packages/gsd-agent-core/dist/image-overflow-recovery.d.ts +0 -44
  467. package/packages/gsd-agent-core/dist/image-overflow-recovery.d.ts.map +0 -1
  468. package/packages/gsd-agent-core/dist/image-overflow-recovery.js +0 -99
  469. package/packages/gsd-agent-core/dist/image-overflow-recovery.js.map +0 -1
  470. package/packages/gsd-agent-core/dist/index.d.ts +0 -14
  471. package/packages/gsd-agent-core/dist/index.d.ts.map +0 -1
  472. package/packages/gsd-agent-core/dist/index.js +0 -19
  473. package/packages/gsd-agent-core/dist/index.js.map +0 -1
  474. package/packages/gsd-agent-core/dist/keybindings.d.ts +0 -47
  475. package/packages/gsd-agent-core/dist/keybindings.d.ts.map +0 -1
  476. package/packages/gsd-agent-core/dist/keybindings.js +0 -156
  477. package/packages/gsd-agent-core/dist/keybindings.js.map +0 -1
  478. package/packages/gsd-agent-core/dist/lifecycle-hooks.d.ts +0 -42
  479. package/packages/gsd-agent-core/dist/lifecycle-hooks.d.ts.map +0 -1
  480. package/packages/gsd-agent-core/dist/lifecycle-hooks.js +0 -204
  481. package/packages/gsd-agent-core/dist/lifecycle-hooks.js.map +0 -1
  482. package/packages/gsd-agent-core/dist/retry-handler.d.ts +0 -128
  483. package/packages/gsd-agent-core/dist/retry-handler.d.ts.map +0 -1
  484. package/packages/gsd-agent-core/dist/retry-handler.js +0 -518
  485. package/packages/gsd-agent-core/dist/retry-handler.js.map +0 -1
  486. package/packages/gsd-agent-core/dist/sdk.d.ts +0 -159
  487. package/packages/gsd-agent-core/dist/sdk.d.ts.map +0 -1
  488. package/packages/gsd-agent-core/dist/sdk.js +0 -375
  489. package/packages/gsd-agent-core/dist/sdk.js.map +0 -1
  490. package/packages/gsd-agent-core/dist/system-prompt.d.ts +0 -28
  491. package/packages/gsd-agent-core/dist/system-prompt.d.ts.map +0 -1
  492. package/packages/gsd-agent-core/dist/system-prompt.js +0 -201
  493. package/packages/gsd-agent-core/dist/system-prompt.js.map +0 -1
  494. package/packages/gsd-agent-core/package.json +0 -25
  495. package/packages/gsd-agent-core/scripts/copy-assets.cjs +0 -43
  496. package/packages/gsd-agent-core/src/agent-session.test.ts +0 -169
  497. package/packages/gsd-agent-core/src/agent-session.ts +0 -3358
  498. package/packages/gsd-agent-core/src/artifact-manager.ts +0 -126
  499. package/packages/gsd-agent-core/src/bash-executor.ts +0 -352
  500. package/packages/gsd-agent-core/src/blob-store.ts +0 -154
  501. package/packages/gsd-agent-core/src/compaction/branch-summarization.ts +0 -317
  502. package/packages/gsd-agent-core/src/compaction/compaction.ts +0 -855
  503. package/packages/gsd-agent-core/src/compaction/index.ts +0 -7
  504. package/packages/gsd-agent-core/src/compaction/utils.ts +0 -312
  505. package/packages/gsd-agent-core/src/compaction-orchestrator.ts +0 -449
  506. package/packages/gsd-agent-core/src/contextual-tips.ts +0 -232
  507. package/packages/gsd-agent-core/src/export-html/ansi-to-html.ts +0 -259
  508. package/packages/gsd-agent-core/src/export-html/index.ts +0 -345
  509. package/packages/gsd-agent-core/src/export-html/template.css +0 -971
  510. package/packages/gsd-agent-core/src/export-html/template.html +0 -54
  511. package/packages/gsd-agent-core/src/export-html/template.js +0 -1583
  512. package/packages/gsd-agent-core/src/export-html/tool-renderer.ts +0 -114
  513. package/packages/gsd-agent-core/src/export-html/vendor/highlight.min.js +0 -1213
  514. package/packages/gsd-agent-core/src/export-html/vendor/marked.min.js +0 -6
  515. package/packages/gsd-agent-core/src/fallback-resolver.ts +0 -193
  516. package/packages/gsd-agent-core/src/image-overflow-recovery.ts +0 -120
  517. package/packages/gsd-agent-core/src/index.ts +0 -68
  518. package/packages/gsd-agent-core/src/keybindings.ts +0 -220
  519. package/packages/gsd-agent-core/src/lifecycle-hooks.ts +0 -284
  520. package/packages/gsd-agent-core/src/retry-handler.ts +0 -620
  521. package/packages/gsd-agent-core/src/sdk.ts +0 -550
  522. package/packages/gsd-agent-core/src/system-prompt.ts +0 -270
  523. package/packages/gsd-agent-core/tsconfig.json +0 -28
  524. package/packages/gsd-agent-core/tsconfig.tsbuildinfo +0 -1
  525. package/packages/gsd-agent-modes/dist/cli/args.d.ts +0 -58
  526. package/packages/gsd-agent-modes/dist/cli/args.d.ts.map +0 -1
  527. package/packages/gsd-agent-modes/dist/cli/args.js +0 -324
  528. package/packages/gsd-agent-modes/dist/cli/args.js.map +0 -1
  529. package/packages/gsd-agent-modes/dist/cli/config-selector.d.ts +0 -13
  530. package/packages/gsd-agent-modes/dist/cli/config-selector.d.ts.map +0 -1
  531. package/packages/gsd-agent-modes/dist/cli/config-selector.js +0 -32
  532. package/packages/gsd-agent-modes/dist/cli/config-selector.js.map +0 -1
  533. package/packages/gsd-agent-modes/dist/cli/file-processor.d.ts +0 -15
  534. package/packages/gsd-agent-modes/dist/cli/file-processor.d.ts.map +0 -1
  535. package/packages/gsd-agent-modes/dist/cli/file-processor.js +0 -86
  536. package/packages/gsd-agent-modes/dist/cli/file-processor.js.map +0 -1
  537. package/packages/gsd-agent-modes/dist/cli/list-models.d.ts +0 -21
  538. package/packages/gsd-agent-modes/dist/cli/list-models.d.ts.map +0 -1
  539. package/packages/gsd-agent-modes/dist/cli/list-models.js +0 -114
  540. package/packages/gsd-agent-modes/dist/cli/list-models.js.map +0 -1
  541. package/packages/gsd-agent-modes/dist/cli/session-picker.d.ts +0 -10
  542. package/packages/gsd-agent-modes/dist/cli/session-picker.d.ts.map +0 -1
  543. package/packages/gsd-agent-modes/dist/cli/session-picker.js +0 -37
  544. package/packages/gsd-agent-modes/dist/cli/session-picker.js.map +0 -1
  545. package/packages/gsd-agent-modes/dist/index.d.ts +0 -7
  546. package/packages/gsd-agent-modes/dist/index.d.ts.map +0 -1
  547. package/packages/gsd-agent-modes/dist/index.js +0 -7
  548. package/packages/gsd-agent-modes/dist/index.js.map +0 -1
  549. package/packages/gsd-agent-modes/dist/main.d.ts +0 -8
  550. package/packages/gsd-agent-modes/dist/main.d.ts.map +0 -1
  551. package/packages/gsd-agent-modes/dist/main.js +0 -491
  552. package/packages/gsd-agent-modes/dist/main.js.map +0 -1
  553. package/packages/gsd-agent-modes/dist/modes/interactive/components/armin.d.ts +0 -34
  554. package/packages/gsd-agent-modes/dist/modes/interactive/components/armin.d.ts.map +0 -1
  555. package/packages/gsd-agent-modes/dist/modes/interactive/components/armin.js +0 -330
  556. package/packages/gsd-agent-modes/dist/modes/interactive/components/armin.js.map +0 -1
  557. package/packages/gsd-agent-modes/dist/modes/interactive/components/assistant-message.d.ts +0 -29
  558. package/packages/gsd-agent-modes/dist/modes/interactive/components/assistant-message.d.ts.map +0 -1
  559. package/packages/gsd-agent-modes/dist/modes/interactive/components/assistant-message.js +0 -141
  560. package/packages/gsd-agent-modes/dist/modes/interactive/components/assistant-message.js.map +0 -1
  561. package/packages/gsd-agent-modes/dist/modes/interactive/components/bash-execution.d.ts +0 -36
  562. package/packages/gsd-agent-modes/dist/modes/interactive/components/bash-execution.d.ts.map +0 -1
  563. package/packages/gsd-agent-modes/dist/modes/interactive/components/bash-execution.js +0 -157
  564. package/packages/gsd-agent-modes/dist/modes/interactive/components/bash-execution.js.map +0 -1
  565. package/packages/gsd-agent-modes/dist/modes/interactive/components/bordered-loader.d.ts +0 -16
  566. package/packages/gsd-agent-modes/dist/modes/interactive/components/bordered-loader.d.ts.map +0 -1
  567. package/packages/gsd-agent-modes/dist/modes/interactive/components/bordered-loader.js +0 -48
  568. package/packages/gsd-agent-modes/dist/modes/interactive/components/bordered-loader.js.map +0 -1
  569. package/packages/gsd-agent-modes/dist/modes/interactive/components/branch-summary-message.d.ts +0 -16
  570. package/packages/gsd-agent-modes/dist/modes/interactive/components/branch-summary-message.d.ts.map +0 -1
  571. package/packages/gsd-agent-modes/dist/modes/interactive/components/branch-summary-message.js +0 -43
  572. package/packages/gsd-agent-modes/dist/modes/interactive/components/branch-summary-message.js.map +0 -1
  573. package/packages/gsd-agent-modes/dist/modes/interactive/components/chat-frame.d.ts +0 -11
  574. package/packages/gsd-agent-modes/dist/modes/interactive/components/chat-frame.d.ts.map +0 -1
  575. package/packages/gsd-agent-modes/dist/modes/interactive/components/chat-frame.js +0 -47
  576. package/packages/gsd-agent-modes/dist/modes/interactive/components/chat-frame.js.map +0 -1
  577. package/packages/gsd-agent-modes/dist/modes/interactive/components/compaction-summary-message.d.ts +0 -16
  578. package/packages/gsd-agent-modes/dist/modes/interactive/components/compaction-summary-message.d.ts.map +0 -1
  579. package/packages/gsd-agent-modes/dist/modes/interactive/components/compaction-summary-message.js +0 -44
  580. package/packages/gsd-agent-modes/dist/modes/interactive/components/compaction-summary-message.js.map +0 -1
  581. package/packages/gsd-agent-modes/dist/modes/interactive/components/config-selector.d.ts +0 -71
  582. package/packages/gsd-agent-modes/dist/modes/interactive/components/config-selector.d.ts.map +0 -1
  583. package/packages/gsd-agent-modes/dist/modes/interactive/components/config-selector.js +0 -474
  584. package/packages/gsd-agent-modes/dist/modes/interactive/components/config-selector.js.map +0 -1
  585. package/packages/gsd-agent-modes/dist/modes/interactive/components/countdown-timer.d.ts +0 -15
  586. package/packages/gsd-agent-modes/dist/modes/interactive/components/countdown-timer.d.ts.map +0 -1
  587. package/packages/gsd-agent-modes/dist/modes/interactive/components/countdown-timer.js +0 -32
  588. package/packages/gsd-agent-modes/dist/modes/interactive/components/countdown-timer.js.map +0 -1
  589. package/packages/gsd-agent-modes/dist/modes/interactive/components/custom-editor.d.ts +0 -22
  590. package/packages/gsd-agent-modes/dist/modes/interactive/components/custom-editor.d.ts.map +0 -1
  591. package/packages/gsd-agent-modes/dist/modes/interactive/components/custom-editor.js +0 -70
  592. package/packages/gsd-agent-modes/dist/modes/interactive/components/custom-editor.js.map +0 -1
  593. package/packages/gsd-agent-modes/dist/modes/interactive/components/custom-message.d.ts +0 -20
  594. package/packages/gsd-agent-modes/dist/modes/interactive/components/custom-message.d.ts.map +0 -1
  595. package/packages/gsd-agent-modes/dist/modes/interactive/components/custom-message.js +0 -75
  596. package/packages/gsd-agent-modes/dist/modes/interactive/components/custom-message.js.map +0 -1
  597. package/packages/gsd-agent-modes/dist/modes/interactive/components/daxnuts.d.ts +0 -23
  598. package/packages/gsd-agent-modes/dist/modes/interactive/components/daxnuts.d.ts.map +0 -1
  599. package/packages/gsd-agent-modes/dist/modes/interactive/components/daxnuts.js +0 -140
  600. package/packages/gsd-agent-modes/dist/modes/interactive/components/daxnuts.js.map +0 -1
  601. package/packages/gsd-agent-modes/dist/modes/interactive/components/diff.d.ts +0 -12
  602. package/packages/gsd-agent-modes/dist/modes/interactive/components/diff.d.ts.map +0 -1
  603. package/packages/gsd-agent-modes/dist/modes/interactive/components/diff.js +0 -133
  604. package/packages/gsd-agent-modes/dist/modes/interactive/components/diff.js.map +0 -1
  605. package/packages/gsd-agent-modes/dist/modes/interactive/components/dynamic-border.d.ts +0 -33
  606. package/packages/gsd-agent-modes/dist/modes/interactive/components/dynamic-border.d.ts.map +0 -1
  607. package/packages/gsd-agent-modes/dist/modes/interactive/components/dynamic-border.js +0 -82
  608. package/packages/gsd-agent-modes/dist/modes/interactive/components/dynamic-border.js.map +0 -1
  609. package/packages/gsd-agent-modes/dist/modes/interactive/components/extension-editor.d.ts +0 -20
  610. package/packages/gsd-agent-modes/dist/modes/interactive/components/extension-editor.d.ts.map +0 -1
  611. package/packages/gsd-agent-modes/dist/modes/interactive/components/extension-editor.js +0 -111
  612. package/packages/gsd-agent-modes/dist/modes/interactive/components/extension-editor.js.map +0 -1
  613. package/packages/gsd-agent-modes/dist/modes/interactive/components/extension-input.d.ts +0 -24
  614. package/packages/gsd-agent-modes/dist/modes/interactive/components/extension-input.d.ts.map +0 -1
  615. package/packages/gsd-agent-modes/dist/modes/interactive/components/extension-input.js +0 -63
  616. package/packages/gsd-agent-modes/dist/modes/interactive/components/extension-input.js.map +0 -1
  617. package/packages/gsd-agent-modes/dist/modes/interactive/components/extension-selector.d.ts +0 -33
  618. package/packages/gsd-agent-modes/dist/modes/interactive/components/extension-selector.d.ts.map +0 -1
  619. package/packages/gsd-agent-modes/dist/modes/interactive/components/extension-selector.js +0 -118
  620. package/packages/gsd-agent-modes/dist/modes/interactive/components/extension-selector.js.map +0 -1
  621. package/packages/gsd-agent-modes/dist/modes/interactive/components/footer.d.ts +0 -32
  622. package/packages/gsd-agent-modes/dist/modes/interactive/components/footer.d.ts.map +0 -1
  623. package/packages/gsd-agent-modes/dist/modes/interactive/components/footer.js +0 -230
  624. package/packages/gsd-agent-modes/dist/modes/interactive/components/footer.js.map +0 -1
  625. package/packages/gsd-agent-modes/dist/modes/interactive/components/index.d.ts +0 -34
  626. package/packages/gsd-agent-modes/dist/modes/interactive/components/index.d.ts.map +0 -1
  627. package/packages/gsd-agent-modes/dist/modes/interactive/components/index.js +0 -36
  628. package/packages/gsd-agent-modes/dist/modes/interactive/components/index.js.map +0 -1
  629. package/packages/gsd-agent-modes/dist/modes/interactive/components/keybinding-hints.d.ts +0 -48
  630. package/packages/gsd-agent-modes/dist/modes/interactive/components/keybinding-hints.d.ts.map +0 -1
  631. package/packages/gsd-agent-modes/dist/modes/interactive/components/keybinding-hints.js +0 -72
  632. package/packages/gsd-agent-modes/dist/modes/interactive/components/keybinding-hints.js.map +0 -1
  633. package/packages/gsd-agent-modes/dist/modes/interactive/components/login-dialog.d.ts +0 -63
  634. package/packages/gsd-agent-modes/dist/modes/interactive/components/login-dialog.d.ts.map +0 -1
  635. package/packages/gsd-agent-modes/dist/modes/interactive/components/login-dialog.js +0 -213
  636. package/packages/gsd-agent-modes/dist/modes/interactive/components/login-dialog.js.map +0 -1
  637. package/packages/gsd-agent-modes/dist/modes/interactive/components/model-selector.d.ts +0 -86
  638. package/packages/gsd-agent-modes/dist/modes/interactive/components/model-selector.d.ts.map +0 -1
  639. package/packages/gsd-agent-modes/dist/modes/interactive/components/model-selector.js +0 -536
  640. package/packages/gsd-agent-modes/dist/modes/interactive/components/model-selector.js.map +0 -1
  641. package/packages/gsd-agent-modes/dist/modes/interactive/components/oauth-selector.d.ts +0 -19
  642. package/packages/gsd-agent-modes/dist/modes/interactive/components/oauth-selector.d.ts.map +0 -1
  643. package/packages/gsd-agent-modes/dist/modes/interactive/components/oauth-selector.js +0 -93
  644. package/packages/gsd-agent-modes/dist/modes/interactive/components/oauth-selector.js.map +0 -1
  645. package/packages/gsd-agent-modes/dist/modes/interactive/components/provider-manager.d.ts +0 -30
  646. package/packages/gsd-agent-modes/dist/modes/interactive/components/provider-manager.d.ts.map +0 -1
  647. package/packages/gsd-agent-modes/dist/modes/interactive/components/provider-manager.js +0 -169
  648. package/packages/gsd-agent-modes/dist/modes/interactive/components/provider-manager.js.map +0 -1
  649. package/packages/gsd-agent-modes/dist/modes/interactive/components/scoped-models-selector.d.ts +0 -49
  650. package/packages/gsd-agent-modes/dist/modes/interactive/components/scoped-models-selector.d.ts.map +0 -1
  651. package/packages/gsd-agent-modes/dist/modes/interactive/components/scoped-models-selector.js +0 -267
  652. package/packages/gsd-agent-modes/dist/modes/interactive/components/scoped-models-selector.js.map +0 -1
  653. package/packages/gsd-agent-modes/dist/modes/interactive/components/session-selector-search.d.ts +0 -21
  654. package/packages/gsd-agent-modes/dist/modes/interactive/components/session-selector-search.d.ts.map +0 -1
  655. package/packages/gsd-agent-modes/dist/modes/interactive/components/session-selector-search.js +0 -155
  656. package/packages/gsd-agent-modes/dist/modes/interactive/components/session-selector-search.js.map +0 -1
  657. package/packages/gsd-agent-modes/dist/modes/interactive/components/session-selector.d.ts +0 -97
  658. package/packages/gsd-agent-modes/dist/modes/interactive/components/session-selector.d.ts.map +0 -1
  659. package/packages/gsd-agent-modes/dist/modes/interactive/components/session-selector.js +0 -810
  660. package/packages/gsd-agent-modes/dist/modes/interactive/components/session-selector.js.map +0 -1
  661. package/packages/gsd-agent-modes/dist/modes/interactive/components/settings-selector.d.ts +0 -71
  662. package/packages/gsd-agent-modes/dist/modes/interactive/components/settings-selector.d.ts.map +0 -1
  663. package/packages/gsd-agent-modes/dist/modes/interactive/components/settings-selector.js +0 -320
  664. package/packages/gsd-agent-modes/dist/modes/interactive/components/settings-selector.js.map +0 -1
  665. package/packages/gsd-agent-modes/dist/modes/interactive/components/show-images-selector.d.ts +0 -10
  666. package/packages/gsd-agent-modes/dist/modes/interactive/components/show-images-selector.d.ts.map +0 -1
  667. package/packages/gsd-agent-modes/dist/modes/interactive/components/show-images-selector.js +0 -34
  668. package/packages/gsd-agent-modes/dist/modes/interactive/components/show-images-selector.js.map +0 -1
  669. package/packages/gsd-agent-modes/dist/modes/interactive/components/skill-invocation-message.d.ts +0 -17
  670. package/packages/gsd-agent-modes/dist/modes/interactive/components/skill-invocation-message.d.ts.map +0 -1
  671. package/packages/gsd-agent-modes/dist/modes/interactive/components/skill-invocation-message.js +0 -46
  672. package/packages/gsd-agent-modes/dist/modes/interactive/components/skill-invocation-message.js.map +0 -1
  673. package/packages/gsd-agent-modes/dist/modes/interactive/components/theme-selector.d.ts +0 -11
  674. package/packages/gsd-agent-modes/dist/modes/interactive/components/theme-selector.d.ts.map +0 -1
  675. package/packages/gsd-agent-modes/dist/modes/interactive/components/theme-selector.js +0 -45
  676. package/packages/gsd-agent-modes/dist/modes/interactive/components/theme-selector.js.map +0 -1
  677. package/packages/gsd-agent-modes/dist/modes/interactive/components/thinking-selector.d.ts +0 -11
  678. package/packages/gsd-agent-modes/dist/modes/interactive/components/thinking-selector.d.ts.map +0 -1
  679. package/packages/gsd-agent-modes/dist/modes/interactive/components/thinking-selector.js +0 -46
  680. package/packages/gsd-agent-modes/dist/modes/interactive/components/thinking-selector.js.map +0 -1
  681. package/packages/gsd-agent-modes/dist/modes/interactive/components/timestamp.d.ts +0 -15
  682. package/packages/gsd-agent-modes/dist/modes/interactive/components/timestamp.d.ts.map +0 -1
  683. package/packages/gsd-agent-modes/dist/modes/interactive/components/timestamp.js +0 -40
  684. package/packages/gsd-agent-modes/dist/modes/interactive/components/timestamp.js.map +0 -1
  685. package/packages/gsd-agent-modes/dist/modes/interactive/components/tool-execution.d.ts +0 -111
  686. package/packages/gsd-agent-modes/dist/modes/interactive/components/tool-execution.d.ts.map +0 -1
  687. package/packages/gsd-agent-modes/dist/modes/interactive/components/tool-execution.js +0 -984
  688. package/packages/gsd-agent-modes/dist/modes/interactive/components/tool-execution.js.map +0 -1
  689. package/packages/gsd-agent-modes/dist/modes/interactive/components/tree-render-utils.d.ts +0 -44
  690. package/packages/gsd-agent-modes/dist/modes/interactive/components/tree-render-utils.d.ts.map +0 -1
  691. package/packages/gsd-agent-modes/dist/modes/interactive/components/tree-render-utils.js +0 -61
  692. package/packages/gsd-agent-modes/dist/modes/interactive/components/tree-render-utils.js.map +0 -1
  693. package/packages/gsd-agent-modes/dist/modes/interactive/components/tree-selector.d.ts +0 -109
  694. package/packages/gsd-agent-modes/dist/modes/interactive/components/tree-selector.d.ts.map +0 -1
  695. package/packages/gsd-agent-modes/dist/modes/interactive/components/tree-selector.js +0 -1035
  696. package/packages/gsd-agent-modes/dist/modes/interactive/components/tree-selector.js.map +0 -1
  697. package/packages/gsd-agent-modes/dist/modes/interactive/components/user-message-selector.d.ts +0 -30
  698. package/packages/gsd-agent-modes/dist/modes/interactive/components/user-message-selector.d.ts.map +0 -1
  699. package/packages/gsd-agent-modes/dist/modes/interactive/components/user-message-selector.js +0 -112
  700. package/packages/gsd-agent-modes/dist/modes/interactive/components/user-message-selector.js.map +0 -1
  701. package/packages/gsd-agent-modes/dist/modes/interactive/components/user-message.d.ts +0 -12
  702. package/packages/gsd-agent-modes/dist/modes/interactive/components/user-message.d.ts.map +0 -1
  703. package/packages/gsd-agent-modes/dist/modes/interactive/components/user-message.js +0 -38
  704. package/packages/gsd-agent-modes/dist/modes/interactive/components/user-message.js.map +0 -1
  705. package/packages/gsd-agent-modes/dist/modes/interactive/components/visual-truncate.d.ts +0 -24
  706. package/packages/gsd-agent-modes/dist/modes/interactive/components/visual-truncate.d.ts.map +0 -1
  707. package/packages/gsd-agent-modes/dist/modes/interactive/components/visual-truncate.js +0 -33
  708. package/packages/gsd-agent-modes/dist/modes/interactive/components/visual-truncate.js.map +0 -1
  709. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.d.ts +0 -27
  710. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.d.ts.map +0 -1
  711. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.js +0 -793
  712. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.js.map +0 -1
  713. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/extension-ui-controller.d.ts +0 -4
  714. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/extension-ui-controller.d.ts.map +0 -1
  715. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/extension-ui-controller.js +0 -62
  716. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/extension-ui-controller.js.map +0 -1
  717. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/input-controller.d.ts +0 -22
  718. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/input-controller.d.ts.map +0 -1
  719. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/input-controller.js +0 -118
  720. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/input-controller.js.map +0 -1
  721. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/model-controller.d.ts +0 -7
  722. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/model-controller.d.ts.map +0 -1
  723. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/model-controller.js +0 -68
  724. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/model-controller.js.map +0 -1
  725. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-state.d.ts +0 -50
  726. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-state.d.ts.map +0 -1
  727. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-state.js +0 -2
  728. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-state.js.map +0 -1
  729. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode.d.ts +0 -358
  730. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode.d.ts.map +0 -1
  731. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode.js +0 -3409
  732. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode.js.map +0 -1
  733. package/packages/gsd-agent-modes/dist/modes/interactive/slash-command-handlers.d.ts +0 -77
  734. package/packages/gsd-agent-modes/dist/modes/interactive/slash-command-handlers.d.ts.map +0 -1
  735. package/packages/gsd-agent-modes/dist/modes/interactive/slash-command-handlers.js +0 -529
  736. package/packages/gsd-agent-modes/dist/modes/interactive/slash-command-handlers.js.map +0 -1
  737. package/packages/gsd-agent-modes/dist/modes/interactive/utils/shorten-path.d.ts +0 -6
  738. package/packages/gsd-agent-modes/dist/modes/interactive/utils/shorten-path.d.ts.map +0 -1
  739. package/packages/gsd-agent-modes/dist/modes/interactive/utils/shorten-path.js +0 -15
  740. package/packages/gsd-agent-modes/dist/modes/interactive/utils/shorten-path.js.map +0 -1
  741. package/packages/gsd-agent-modes/dist/modes/print-mode.d.ts +0 -28
  742. package/packages/gsd-agent-modes/dist/modes/print-mode.d.ts.map +0 -1
  743. package/packages/gsd-agent-modes/dist/modes/print-mode.js +0 -84
  744. package/packages/gsd-agent-modes/dist/modes/print-mode.js.map +0 -1
  745. package/packages/gsd-agent-modes/dist/modes/rpc/jsonl.d.ts +0 -17
  746. package/packages/gsd-agent-modes/dist/modes/rpc/jsonl.d.ts.map +0 -1
  747. package/packages/gsd-agent-modes/dist/modes/rpc/jsonl.js +0 -49
  748. package/packages/gsd-agent-modes/dist/modes/rpc/jsonl.js.map +0 -1
  749. package/packages/gsd-agent-modes/dist/modes/rpc/remote-terminal.d.ts +0 -37
  750. package/packages/gsd-agent-modes/dist/modes/rpc/remote-terminal.d.ts.map +0 -1
  751. package/packages/gsd-agent-modes/dist/modes/rpc/remote-terminal.js +0 -84
  752. package/packages/gsd-agent-modes/dist/modes/rpc/remote-terminal.js.map +0 -1
  753. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-client.d.ts +0 -243
  754. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-client.d.ts.map +0 -1
  755. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-client.js +0 -464
  756. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-client.js.map +0 -1
  757. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-mode.d.ts +0 -25
  758. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-mode.d.ts.map +0 -1
  759. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-mode.js +0 -750
  760. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-mode.js.map +0 -1
  761. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-types.d.ts +0 -511
  762. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-types.d.ts.map +0 -1
  763. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-types.js +0 -8
  764. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-types.js.map +0 -1
  765. package/packages/gsd-agent-modes/dist/modes/shared/command-context-actions.d.ts +0 -19
  766. package/packages/gsd-agent-modes/dist/modes/shared/command-context-actions.d.ts.map +0 -1
  767. package/packages/gsd-agent-modes/dist/modes/shared/command-context-actions.js +0 -45
  768. package/packages/gsd-agent-modes/dist/modes/shared/command-context-actions.js.map +0 -1
  769. package/packages/gsd-agent-modes/dist/pi-coding-agent-compat.d.ts +0 -22
  770. package/packages/gsd-agent-modes/dist/pi-coding-agent-compat.d.ts.map +0 -1
  771. package/packages/gsd-agent-modes/dist/pi-coding-agent-compat.js +0 -21
  772. package/packages/gsd-agent-modes/dist/pi-coding-agent-compat.js.map +0 -1
  773. package/packages/gsd-agent-modes/dist/pi-tui-compat.d.ts +0 -4
  774. package/packages/gsd-agent-modes/dist/pi-tui-compat.d.ts.map +0 -1
  775. package/packages/gsd-agent-modes/dist/pi-tui-compat.js +0 -3
  776. package/packages/gsd-agent-modes/dist/pi-tui-compat.js.map +0 -1
  777. package/packages/gsd-agent-modes/dist/theme.d.ts +0 -15
  778. package/packages/gsd-agent-modes/dist/theme.d.ts.map +0 -1
  779. package/packages/gsd-agent-modes/dist/theme.js +0 -23
  780. package/packages/gsd-agent-modes/dist/theme.js.map +0 -1
  781. package/packages/gsd-agent-modes/dist/utils/theme.d.ts +0 -16
  782. package/packages/gsd-agent-modes/dist/utils/theme.d.ts.map +0 -1
  783. package/packages/gsd-agent-modes/dist/utils/theme.js +0 -11
  784. package/packages/gsd-agent-modes/dist/utils/theme.js.map +0 -1
  785. package/packages/gsd-agent-modes/package.json +0 -23
  786. package/packages/gsd-agent-modes/src/cli/args.ts +0 -350
  787. package/packages/gsd-agent-modes/src/cli/config-selector.ts +0 -54
  788. package/packages/gsd-agent-modes/src/cli/file-processor.ts +0 -107
  789. package/packages/gsd-agent-modes/src/cli/list-models.ts +0 -141
  790. package/packages/gsd-agent-modes/src/cli/session-picker.ts +0 -59
  791. package/packages/gsd-agent-modes/src/index.ts +0 -6
  792. package/packages/gsd-agent-modes/src/main.ts +0 -614
  793. package/packages/gsd-agent-modes/src/modes/interactive/components/__tests__/login-dialog.test.ts +0 -24
  794. package/packages/gsd-agent-modes/src/modes/interactive/components/__tests__/provider-display-name.test.ts +0 -18
  795. package/packages/gsd-agent-modes/src/modes/interactive/components/__tests__/timestamp.test.ts +0 -38
  796. package/packages/gsd-agent-modes/src/modes/interactive/components/__tests__/tool-execution.test.ts +0 -171
  797. package/packages/gsd-agent-modes/src/modes/interactive/components/armin.ts +0 -382
  798. package/packages/gsd-agent-modes/src/modes/interactive/components/assistant-message.ts +0 -178
  799. package/packages/gsd-agent-modes/src/modes/interactive/components/bash-execution.ts +0 -212
  800. package/packages/gsd-agent-modes/src/modes/interactive/components/bordered-loader.ts +0 -66
  801. package/packages/gsd-agent-modes/src/modes/interactive/components/branch-summary-message.ts +0 -59
  802. package/packages/gsd-agent-modes/src/modes/interactive/components/chat-frame.ts +0 -67
  803. package/packages/gsd-agent-modes/src/modes/interactive/components/compaction-summary-message.ts +0 -60
  804. package/packages/gsd-agent-modes/src/modes/interactive/components/config-selector.ts +0 -597
  805. package/packages/gsd-agent-modes/src/modes/interactive/components/countdown-timer.ts +0 -41
  806. package/packages/gsd-agent-modes/src/modes/interactive/components/custom-editor.ts +0 -88
  807. package/packages/gsd-agent-modes/src/modes/interactive/components/custom-message.ts +0 -100
  808. package/packages/gsd-agent-modes/src/modes/interactive/components/daxnuts.ts +0 -165
  809. package/packages/gsd-agent-modes/src/modes/interactive/components/diff.ts +0 -147
  810. package/packages/gsd-agent-modes/src/modes/interactive/components/dynamic-border.test.ts +0 -73
  811. package/packages/gsd-agent-modes/src/modes/interactive/components/dynamic-border.ts +0 -89
  812. package/packages/gsd-agent-modes/src/modes/interactive/components/extension-editor.ts +0 -151
  813. package/packages/gsd-agent-modes/src/modes/interactive/components/extension-input.ts +0 -100
  814. package/packages/gsd-agent-modes/src/modes/interactive/components/extension-selector.ts +0 -156
  815. package/packages/gsd-agent-modes/src/modes/interactive/components/footer.ts +0 -257
  816. package/packages/gsd-agent-modes/src/modes/interactive/components/index.ts +0 -35
  817. package/packages/gsd-agent-modes/src/modes/interactive/components/keybinding-hints.ts +0 -84
  818. package/packages/gsd-agent-modes/src/modes/interactive/components/login-dialog.ts +0 -257
  819. package/packages/gsd-agent-modes/src/modes/interactive/components/model-selector.ts +0 -656
  820. package/packages/gsd-agent-modes/src/modes/interactive/components/oauth-selector.ts +0 -122
  821. package/packages/gsd-agent-modes/src/modes/interactive/components/provider-manager.ts +0 -210
  822. package/packages/gsd-agent-modes/src/modes/interactive/components/scoped-models-selector.ts +0 -342
  823. package/packages/gsd-agent-modes/src/modes/interactive/components/session-selector-search.ts +0 -194
  824. package/packages/gsd-agent-modes/src/modes/interactive/components/session-selector.ts +0 -1011
  825. package/packages/gsd-agent-modes/src/modes/interactive/components/settings-selector.ts +0 -452
  826. package/packages/gsd-agent-modes/src/modes/interactive/components/show-images-selector.ts +0 -45
  827. package/packages/gsd-agent-modes/src/modes/interactive/components/skill-invocation-message.ts +0 -56
  828. package/packages/gsd-agent-modes/src/modes/interactive/components/theme-selector.ts +0 -63
  829. package/packages/gsd-agent-modes/src/modes/interactive/components/thinking-selector.ts +0 -64
  830. package/packages/gsd-agent-modes/src/modes/interactive/components/timestamp.ts +0 -48
  831. package/packages/gsd-agent-modes/src/modes/interactive/components/tool-execution.ts +0 -1157
  832. package/packages/gsd-agent-modes/src/modes/interactive/components/tree-render-utils.ts +0 -81
  833. package/packages/gsd-agent-modes/src/modes/interactive/components/tree-selector.ts +0 -1208
  834. package/packages/gsd-agent-modes/src/modes/interactive/components/user-message-selector.ts +0 -145
  835. package/packages/gsd-agent-modes/src/modes/interactive/components/user-message.ts +0 -44
  836. package/packages/gsd-agent-modes/src/modes/interactive/components/visual-truncate.ts +0 -50
  837. package/packages/gsd-agent-modes/src/modes/interactive/controllers/chat-controller-ordering.test.ts +0 -1430
  838. package/packages/gsd-agent-modes/src/modes/interactive/controllers/chat-controller.test.ts +0 -71
  839. package/packages/gsd-agent-modes/src/modes/interactive/controllers/chat-controller.ts +0 -957
  840. package/packages/gsd-agent-modes/src/modes/interactive/controllers/extension-ui-controller.ts +0 -63
  841. package/packages/gsd-agent-modes/src/modes/interactive/controllers/input-controller.test.ts +0 -183
  842. package/packages/gsd-agent-modes/src/modes/interactive/controllers/input-controller.ts +0 -140
  843. package/packages/gsd-agent-modes/src/modes/interactive/controllers/model-controller.ts +0 -77
  844. package/packages/gsd-agent-modes/src/modes/interactive/interactive-mode-ordering.test.ts +0 -44
  845. package/packages/gsd-agent-modes/src/modes/interactive/interactive-mode-state.ts +0 -49
  846. package/packages/gsd-agent-modes/src/modes/interactive/interactive-mode.ts +0 -4195
  847. package/packages/gsd-agent-modes/src/modes/interactive/slash-command-handlers.ts +0 -670
  848. package/packages/gsd-agent-modes/src/modes/interactive/utils/shorten-path.ts +0 -14
  849. package/packages/gsd-agent-modes/src/modes/print-mode.ts +0 -106
  850. package/packages/gsd-agent-modes/src/modes/rpc/jsonl.ts +0 -58
  851. package/packages/gsd-agent-modes/src/modes/rpc/remote-terminal.ts +0 -109
  852. package/packages/gsd-agent-modes/src/modes/rpc/rpc-client.ts +0 -572
  853. package/packages/gsd-agent-modes/src/modes/rpc/rpc-mode.ts +0 -902
  854. package/packages/gsd-agent-modes/src/modes/rpc/rpc-protocol-v2.test.ts +0 -971
  855. package/packages/gsd-agent-modes/src/modes/rpc/rpc-types.ts +0 -335
  856. package/packages/gsd-agent-modes/src/modes/shared/command-context-actions.ts +0 -53
  857. package/packages/gsd-agent-modes/src/pi-coding-agent-compat.ts +0 -42
  858. package/packages/gsd-agent-modes/src/pi-tui-compat.ts +0 -4
  859. package/packages/gsd-agent-modes/src/theme.ts +0 -25
  860. package/packages/gsd-agent-modes/src/utils/theme.ts +0 -24
  861. package/packages/gsd-agent-modes/tsconfig.json +0 -28
  862. package/packages/gsd-agent-modes/tsconfig.tsbuildinfo +0 -1
  863. package/packages/gsd-agent-types/dist/index.d.ts +0 -176
  864. package/packages/gsd-agent-types/dist/index.d.ts.map +0 -1
  865. package/packages/gsd-agent-types/dist/index.js +0 -24
  866. package/packages/gsd-agent-types/dist/index.js.map +0 -1
  867. package/packages/gsd-agent-types/package.json +0 -24
  868. package/packages/gsd-agent-types/src/index.ts +0 -206
  869. package/packages/gsd-agent-types/tsconfig.json +0 -25
  870. package/packages/gsd-agent-types/tsconfig.tsbuildinfo +0 -1
  871. package/packages/native/dist/tsconfig.tsbuildinfo +0 -1
  872. package/src/resources/extensions/claude-code-cli/tests/provider-registration.test.ts +0 -27
  873. /package/dist/web/standalone/.next/static/{gy6_foLMsEzdGBT19c3hr → 5wbu35_C2_MQ3Jj1lEVDx}/_buildManifest.js +0 -0
  874. /package/dist/web/standalone/.next/static/{gy6_foLMsEzdGBT19c3hr → 5wbu35_C2_MQ3Jj1lEVDx}/_ssgManifest.js +0 -0
@@ -3,8 +3,14 @@
3
3
  */
4
4
 
5
5
  import type { AgentMessage } from "@gsd/pi-agent-core";
6
- import type { Message } from "@gsd/pi-ai";
6
+ import type { AssistantMessage, Message } from "@gsd/pi-ai";
7
7
  import { TOOL_RESULT_MAX_CHARS } from "../constants.js";
8
+
9
+ // Head/tail split for head+tail truncation. Keeps first half + last half up to
10
+ // TOOL_RESULT_MAX_CHARS total. Tool results and other large blocks put their
11
+ // information-dense content (exit codes, verdicts, commit hashes, pass/fail
12
+ // counts) at the tail — pure head-slicing discards that signal. See issue #4665.
13
+ const HEAD_TAIL_HALF = Math.floor(TOOL_RESULT_MAX_CHARS / 2);
8
14
  import {
9
15
  createBranchSummaryMessage,
10
16
  createCompactionSummaryMessage,
@@ -189,13 +195,20 @@ export function createSummarizationMessage(promptText: string): [{ role: "user";
189
195
  // TOOL_RESULT_MAX_CHARS imported from ../constants.js
190
196
 
191
197
  /**
192
- * Truncate text to a maximum character length for summarization.
193
- * Keeps the beginning and appends a truncation marker.
198
+ * Truncate text to a maximum character length for summarization, keeping both
199
+ * the head AND the tail. The tail is where information density lives for tool
200
+ * output (exit codes, verdicts, pass/fail counts, commit hashes), so pure
201
+ * head-slicing produced degenerate summaries (see issue #4665).
202
+ *
203
+ * Exported for test access only.
194
204
  */
195
- function truncateForSummary(text: string, maxChars: number): string {
205
+ export function truncateForSummary(text: string, maxChars: number): string {
196
206
  if (text.length <= maxChars) return text;
197
- const truncatedChars = text.length - maxChars;
198
- return `${text.slice(0, maxChars)}\n\n[... ${truncatedChars} more characters truncated]`;
207
+ const half = Math.floor(maxChars / 2);
208
+ const head = text.slice(0, half);
209
+ const tail = text.slice(text.length - half);
210
+ const truncatedChars = text.length - (head.length + tail.length);
211
+ return `${head}\n\n[... ${truncatedChars} more characters truncated ...]\n\n${tail}`;
199
212
  }
200
213
 
201
214
  /**
@@ -203,11 +216,15 @@ function truncateForSummary(text: string, maxChars: number): string {
203
216
  * This prevents the model from treating it as a conversation to continue.
204
217
  * Call convertToLlm() first to handle custom message types.
205
218
  *
206
- * Tool results are truncated to keep the summarization request within
207
- * reasonable token budgets. Full content is not needed for summarization.
219
+ * Every content block with a character count above TOOL_RESULT_MAX_CHARS is
220
+ * head+tail truncated. The issue #4665 fix broadened this from tool-results-
221
+ * only to every block type — large user pastes, assistant thinking, tool-call
222
+ * args, and bashExecution-derived blocks also bloat summarization input if
223
+ * uncapped.
208
224
  */
209
225
  export function serializeConversation(messages: Message[]): string {
210
226
  const parts: string[] = [];
227
+ const cap = TOOL_RESULT_MAX_CHARS;
211
228
 
212
229
  for (const msg of messages) {
213
230
  if (msg.role === "user") {
@@ -218,7 +235,7 @@ export function serializeConversation(messages: Message[]): string {
218
235
  .filter((c): c is { type: "text"; text: string } => c.type === "text")
219
236
  .map((c) => c.text)
220
237
  .join("");
221
- if (content) parts.push(`**User said:** ${content}`);
238
+ if (content) parts.push(`**User said:** ${truncateForSummary(content, cap)}`);
222
239
  } else if (msg.role === "assistant") {
223
240
  const textParts: string[] = [];
224
241
  const thinkingParts: string[] = [];
@@ -239,13 +256,13 @@ export function serializeConversation(messages: Message[]): string {
239
256
  }
240
257
 
241
258
  if (thinkingParts.length > 0) {
242
- parts.push(`**Assistant thinking:** ${thinkingParts.join("\n")}`);
259
+ parts.push(`**Assistant thinking:** ${truncateForSummary(thinkingParts.join("\n"), cap)}`);
243
260
  }
244
261
  if (textParts.length > 0) {
245
- parts.push(`**Assistant responded:** ${textParts.join("\n")}`);
262
+ parts.push(`**Assistant responded:** ${truncateForSummary(textParts.join("\n"), cap)}`);
246
263
  }
247
264
  if (toolCalls.length > 0) {
248
- parts.push(`**Assistant tool calls:** ${toolCalls.join("; ")}`);
265
+ parts.push(`**Assistant tool calls:** ${truncateForSummary(toolCalls.join("; "), cap)}`);
249
266
  }
250
267
  } else if (msg.role === "toolResult") {
251
268
  const content = msg.content
@@ -253,7 +270,7 @@ export function serializeConversation(messages: Message[]): string {
253
270
  .map((c) => c.text)
254
271
  .join("");
255
272
  if (content) {
256
- parts.push(`**Tool result:** ${truncateForSummary(content, TOOL_RESULT_MAX_CHARS)}`);
273
+ parts.push(`**Tool result:** ${truncateForSummary(content, cap)}`);
257
274
  }
258
275
  }
259
276
  }
@@ -261,6 +278,87 @@ export function serializeConversation(messages: Message[]): string {
261
278
  return parts.join("\n\n");
262
279
  }
263
280
 
281
+ // ============================================================================
282
+ // Token estimation for post-serialization size
283
+ // ============================================================================
284
+
285
+ /**
286
+ * Estimate tokens for a message AFTER the summarization serializer will have
287
+ * capped its large content blocks. Use this when deciding chunk sizes for
288
+ * summarization — NOT when deciding whether to compact in the first place
289
+ * (that needs the real in-memory content size via `estimateTokens`).
290
+ *
291
+ * See issue #4665: the old chunker used real content size but the serializer
292
+ * truncated tool results to 2000 chars, so a single 400K-char tool result
293
+ * looked like 100K tokens (triggering tens of unnecessary chunks) but actually
294
+ * serialized to ~600 tokens.
295
+ *
296
+ * Colocated with `truncateForSummary` / `serializeConversation` so the two
297
+ * stay in sync — if the serialization cap changes, both functions pick it up
298
+ * from `TOOL_RESULT_MAX_CHARS`.
299
+ */
300
+ export function estimateSerializedTokens(message: AgentMessage): number {
301
+ const cap = TOOL_RESULT_MAX_CHARS;
302
+ const capLen = (len: number) => Math.min(len, cap);
303
+ let chars = 0;
304
+
305
+ switch (message.role) {
306
+ case "user": {
307
+ const content = (message as { content: string | Array<{ type: string; text?: string }> }).content;
308
+ if (typeof content === "string") {
309
+ chars = capLen(content.length);
310
+ } else if (Array.isArray(content)) {
311
+ let total = 0;
312
+ for (const block of content) {
313
+ if (block.type === "text" && block.text) total += block.text.length;
314
+ }
315
+ chars = capLen(total);
316
+ }
317
+ return Math.ceil(chars / 4);
318
+ }
319
+ case "assistant": {
320
+ const assistant = message as AssistantMessage;
321
+ let textLen = 0;
322
+ let thinkingLen = 0;
323
+ let toolCallsLen = 0;
324
+ for (const block of assistant.content) {
325
+ if (block.type === "text") textLen += block.text.length;
326
+ else if (block.type === "thinking") thinkingLen += block.thinking.length;
327
+ else if (block.type === "toolCall") toolCallsLen += block.name.length + JSON.stringify(block.arguments).length;
328
+ }
329
+ chars = capLen(textLen) + capLen(thinkingLen) + capLen(toolCallsLen);
330
+ return Math.ceil(chars / 4);
331
+ }
332
+ case "custom":
333
+ case "toolResult": {
334
+ if (typeof message.content === "string") {
335
+ chars = capLen(message.content.length);
336
+ } else {
337
+ let textLen = 0;
338
+ let imageChars = 0;
339
+ for (const block of message.content) {
340
+ if (block.type === "text" && block.text) textLen += block.text.length;
341
+ if (block.type === "image") imageChars += 4800;
342
+ }
343
+ chars = capLen(textLen) + imageChars;
344
+ }
345
+ return Math.ceil(chars / 4);
346
+ }
347
+ case "bashExecution": {
348
+ chars = capLen(message.command.length + message.output.length);
349
+ return Math.ceil(chars / 4);
350
+ }
351
+ case "branchSummary":
352
+ case "compactionSummary": {
353
+ // Summary messages are already concise; don't truncate them.
354
+ chars = message.summary.length;
355
+ return Math.ceil(chars / 4);
356
+ }
357
+ }
358
+
359
+ return 0;
360
+ }
361
+
264
362
  // ============================================================================
265
363
  // Summarization System Prompt
266
364
  // ============================================================================
@@ -0,0 +1,154 @@
1
+ import assert from "node:assert/strict";
2
+ import { mkdtempSync, rmSync } from "node:fs";
3
+ import { tmpdir } from "node:os";
4
+ import { join } from "node:path";
5
+ import { describe, it, mock, type Mock } from "node:test";
6
+
7
+ import type { Agent } from "@gsd/pi-agent-core";
8
+ import type { Api, AssistantMessage, Model } from "@gsd/pi-ai";
9
+
10
+ import { CompactionOrchestrator, type CompactionOrchestratorDeps } from "./compaction-orchestrator.js";
11
+ import { SessionManager } from "./session-manager.js";
12
+
13
+ function createMockModel(): Model<Api> {
14
+ return {
15
+ id: "claude-opus-4-6",
16
+ name: "Claude Opus 4.6",
17
+ api: "anthropic-messages" as Api,
18
+ provider: "anthropic",
19
+ baseUrl: "https://api.anthropic.com",
20
+ reasoning: false,
21
+ input: ["text"],
22
+ cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
23
+ contextWindow: 200_000,
24
+ maxTokens: 16_384,
25
+ } as Model<Api>;
26
+ }
27
+
28
+ function createAssistantMessage(
29
+ stopReason: AssistantMessage["stopReason"],
30
+ contentText: string,
31
+ ): AssistantMessage {
32
+ return {
33
+ role: "assistant",
34
+ content: [{ type: "text", text: contentText }],
35
+ api: "anthropic-messages",
36
+ provider: "anthropic",
37
+ model: "claude-opus-4-6",
38
+ usage: {
39
+ input: 100,
40
+ output: 100,
41
+ cacheRead: 0,
42
+ cacheWrite: 0,
43
+ totalTokens: 200,
44
+ cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 },
45
+ },
46
+ stopReason,
47
+ timestamp: Date.now(),
48
+ errorMessage: stopReason === "error" ? contentText : undefined,
49
+ } as AssistantMessage;
50
+ }
51
+
52
+ function wait(ms: number): Promise<void> {
53
+ return new Promise((resolve) => setTimeout(resolve, ms));
54
+ }
55
+
56
+ function createHarness(overrides?: {
57
+ cancelResult?: boolean;
58
+ willRetry?: boolean;
59
+ hasQueuedMessages?: boolean;
60
+ }) {
61
+ const dir = mkdtempSync(join(tmpdir(), "compaction-orchestrator-test-"));
62
+ const sessionManager = SessionManager.create(dir, dir);
63
+ sessionManager.appendMessage({ role: "user", content: "First user message" } as any);
64
+ sessionManager.appendMessage(createAssistantMessage("stop", "First assistant message"));
65
+ sessionManager.appendMessage({ role: "user", content: "Second user message" } as any);
66
+
67
+ const emittedEvents: Array<Record<string, unknown>> = [];
68
+ const continueFn = mock.fn(async () => {});
69
+ const replaceMessages = mock.fn((nextMessages: unknown[]) => {
70
+ (agent.state.messages as unknown[]) = nextMessages;
71
+ });
72
+ const agent = {
73
+ state: {
74
+ messages: [
75
+ { role: "user", content: "queued follow-up" },
76
+ createAssistantMessage("error", "context overflow"),
77
+ ],
78
+ },
79
+ continue: continueFn,
80
+ replaceMessages,
81
+ hasQueuedMessages: () => overrides?.hasQueuedMessages ?? false,
82
+ } as unknown as Agent;
83
+
84
+ const extensionRunner = {
85
+ hasHandlers: mock.fn(() => true),
86
+ emit: mock.fn(async () => ({ cancel: overrides?.cancelResult ?? true })),
87
+ };
88
+
89
+ const deps: CompactionOrchestratorDeps = {
90
+ agent,
91
+ sessionManager,
92
+ settingsManager: {
93
+ getCompactionSettings: () => ({
94
+ enabled: true,
95
+ reserveTokens: 16_384,
96
+ keepRecentTokens: 1,
97
+ }),
98
+ } as any,
99
+ modelRegistry: {
100
+ isProviderRequestReady: () => true,
101
+ getApiKey: async () => undefined,
102
+ } as any,
103
+ getModel: () => createMockModel(),
104
+ getSessionId: () => "test-session",
105
+ getExtensionRunner: () => extensionRunner as any,
106
+ emit: (event) => emittedEvents.push(event as unknown as Record<string, unknown>),
107
+ disconnectFromAgent: () => {},
108
+ reconnectToAgent: () => {},
109
+ abort: async () => {},
110
+ };
111
+
112
+ return {
113
+ dir,
114
+ agent,
115
+ continueFn,
116
+ replaceMessages,
117
+ emittedEvents,
118
+ extensionRunner,
119
+ orchestrator: new CompactionOrchestrator(deps),
120
+ cleanup: () => rmSync(dir, { recursive: true, force: true }),
121
+ };
122
+ }
123
+
124
+ describe("CompactionOrchestrator", () => {
125
+ it("overflow cancel keeps retry intent and resumes the agent (#3971)", async (t) => {
126
+ const harness = createHarness({ willRetry: true });
127
+ t.after(harness.cleanup);
128
+
129
+ await (harness.orchestrator as any)._runAutoCompaction("overflow", true);
130
+ await wait(150);
131
+
132
+ const endEvent = harness.emittedEvents.find((event) => event.type === "auto_compaction_end");
133
+ assert.ok(endEvent, "should emit auto_compaction_end");
134
+ assert.equal(endEvent?.aborted, true, "cancelled compaction should be marked aborted");
135
+ assert.equal(endEvent?.willRetry, true, "overflow cancel should preserve retry intent");
136
+ assert.equal(harness.continueFn.mock.callCount(), 1, "overflow cancel should resume the agent");
137
+ assert.equal(harness.replaceMessages.mock.callCount(), 1, "retry follow-up should trim the error message when present");
138
+ });
139
+
140
+ it("threshold cancel stays non-retrying when no queued messages exist", async (t) => {
141
+ const harness = createHarness({ willRetry: false, hasQueuedMessages: false });
142
+ t.after(harness.cleanup);
143
+
144
+ await (harness.orchestrator as any)._runAutoCompaction("threshold", false);
145
+ await wait(150);
146
+
147
+ const endEvent = harness.emittedEvents.find((event) => event.type === "auto_compaction_end");
148
+ assert.ok(endEvent, "should emit auto_compaction_end");
149
+ assert.equal(endEvent?.aborted, true, "cancelled compaction should be marked aborted");
150
+ assert.equal(endEvent?.willRetry, false, "threshold cancel should stay non-retrying");
151
+ assert.equal(harness.continueFn.mock.callCount(), 0, "threshold cancel should not resume the agent without queued work");
152
+ assert.equal(harness.replaceMessages.mock.callCount(), 0, "non-retry cancel should not trim messages");
153
+ });
154
+ });
@@ -14,6 +14,7 @@ import type { AssistantMessage, Model } from "@gsd/pi-ai";
14
14
  import { isContextOverflow } from "@gsd/pi-ai";
15
15
  import {
16
16
  type CompactionResult,
17
+ CompactionProducedNoSummaryError,
17
18
  calculateContextTokens,
18
19
  compact,
19
20
  estimateContextTokens,
@@ -332,8 +333,9 @@ export class CompactionOrchestrator {
332
333
  type: "auto_compaction_end",
333
334
  result: undefined,
334
335
  aborted: true,
335
- willRetry: false,
336
+ willRetry,
336
337
  });
338
+ this._scheduleAutoCompactionFollowup(willRetry);
337
339
  return;
338
340
  }
339
341
 
@@ -391,24 +393,15 @@ export class CompactionOrchestrator {
391
393
 
392
394
  const result: CompactionResult = { summary, firstKeptEntryId, tokensBefore, details };
393
395
  this._deps.emit({ type: "auto_compaction_end", result, aborted: false, willRetry });
394
-
395
- if (willRetry) {
396
- const messages = this._deps.agent.state.messages;
397
- const lastMsg = messages[messages.length - 1];
398
- if (lastMsg?.role === "assistant" && (lastMsg as AssistantMessage).stopReason === "error") {
399
- this._deps.agent.replaceMessages(messages.slice(0, -1));
400
- }
401
-
402
- setTimeout(() => {
403
- this._deps.agent.continue().catch(() => {});
404
- }, 100);
405
- } else if (this._deps.agent.hasQueuedMessages()) {
406
- setTimeout(() => {
407
- this._deps.agent.continue().catch(() => {});
408
- }, 100);
409
- }
396
+ this._scheduleAutoCompactionFollowup(willRetry);
410
397
  } catch (error) {
411
- const errorMessage = getErrorMessage(error);
398
+ // Distinguish the "no usable summary" failure (issue #4665) so the UI
399
+ // can surface a clearer message than a generic compaction failure.
400
+ // Either way we drop the would-be compaction entry rather than writing
401
+ // an empty string to the session history.
402
+ const errorMessage = error instanceof CompactionProducedNoSummaryError
403
+ ? `Compaction produced no usable summary — session history preserved as-is. (${error.message})`
404
+ : getErrorMessage(error);
412
405
  this._deps.emit({
413
406
  type: "auto_compaction_end",
414
407
  result: undefined,
@@ -423,4 +416,25 @@ export class CompactionOrchestrator {
423
416
  this._autoCompactionAbortController = undefined;
424
417
  }
425
418
  }
419
+
420
+ private _scheduleAutoCompactionFollowup(willRetry: boolean): void {
421
+ if (willRetry) {
422
+ const messages = this._deps.agent.state.messages;
423
+ const lastMsg = messages[messages.length - 1];
424
+ if (lastMsg?.role === "assistant" && (lastMsg as AssistantMessage).stopReason === "error") {
425
+ this._deps.agent.replaceMessages(messages.slice(0, -1));
426
+ }
427
+
428
+ setTimeout(() => {
429
+ this._deps.agent.continue().catch(() => {});
430
+ }, 100);
431
+ return;
432
+ }
433
+
434
+ if (this._deps.agent.hasQueuedMessages()) {
435
+ setTimeout(() => {
436
+ this._deps.agent.continue().catch(() => {});
437
+ }, 100);
438
+ }
439
+ }
426
440
  }
@@ -3,7 +3,7 @@ import test from "node:test";
3
3
 
4
4
  import type { Message } from "@gsd/pi-ai";
5
5
 
6
- import { serializeConversation } from "./compaction/index.js";
6
+ import { serializeConversation, truncateForSummary } from "./compaction/index.js";
7
7
 
8
8
  test("serializeConversation uses narrative role markers instead of chat-style delimiters (#4054)", () => {
9
9
  const messages: Message[] = [
@@ -48,3 +48,70 @@ test("serializeConversation uses narrative role markers instead of chat-style de
48
48
  assert.ok(!serialized.includes("[Assistant]:"), "chat-style [Assistant]: markers should not remain");
49
49
  assert.ok(!serialized.includes("[Tool result]:"), "chat-style [Tool result]: markers should not remain");
50
50
  });
51
+
52
+ // ---------------------------------------------------------------------------
53
+ // #4665 regression: head+tail truncation keeps verdicts/results
54
+ // ---------------------------------------------------------------------------
55
+
56
+ test("(#4665) truncateForSummary keeps both head AND tail — tail carries result/verdict text", () => {
57
+ // Construct a 10K-char fixture where the HEAD is "setup noise" and the TAIL
58
+ // contains a result line. The old head-only truncation would drop the tail
59
+ // and lose the result. The fix preserves both.
60
+ const head = "setup log line A\n".repeat(500); // ~8500 chars of setup
61
+ const tail = "RESULT: 258 passed, 0 failed. exit_code=0 commit=abc1234";
62
+ const input = head + tail;
63
+
64
+ const out = truncateForSummary(input, 2_000);
65
+
66
+ assert.ok(out.length < input.length, "must truncate when over cap");
67
+ assert.ok(out.includes("setup log line A"), "head content preserved");
68
+ assert.ok(out.includes("RESULT: 258 passed"), "tail content preserved (issue #4665)");
69
+ assert.match(out, /more characters truncated/, "emits an elision marker");
70
+ });
71
+
72
+ test("(#4665) truncateForSummary is a no-op when input is within the cap", () => {
73
+ const input = "short enough";
74
+ assert.equal(truncateForSummary(input, 2_000), input);
75
+ });
76
+
77
+ test("(#4665) serializeConversation caps large user content, not just tool results", () => {
78
+ // Pre-fix, only toolResult blocks were capped. A large user paste could
79
+ // still blow out the chunker's token math and the LLM's input budget.
80
+ const hugeUserText = "U".repeat(100_000);
81
+ const hugeAssistantText = "A".repeat(100_000);
82
+ const hugeToolResult = "T".repeat(100_000);
83
+
84
+ const messages: Message[] = [
85
+ { role: "user", content: hugeUserText } as Message,
86
+ {
87
+ role: "assistant",
88
+ content: [{ type: "text", text: hugeAssistantText }],
89
+ api: "anthropic-messages",
90
+ provider: "anthropic",
91
+ model: "claude-sonnet-4-6",
92
+ usage: {
93
+ input: 0, output: 0, cacheRead: 0, cacheWrite: 0, totalTokens: 0,
94
+ cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 },
95
+ },
96
+ stopReason: "stop",
97
+ timestamp: Date.now(),
98
+ } as Message,
99
+ {
100
+ role: "toolResult",
101
+ content: [{ type: "text", text: hugeToolResult }],
102
+ toolName: "Bash",
103
+ toolCallId: "tool-huge",
104
+ } as Message,
105
+ ];
106
+
107
+ const serialized = serializeConversation(messages);
108
+
109
+ // Each block is truncated independently to TOOL_RESULT_MAX_CHARS plus the
110
+ // framing marker, so the serialized output should be a tiny fraction of
111
+ // the raw 300K chars of content.
112
+ assert.ok(
113
+ serialized.length < 10_000,
114
+ `serialized output should be small after capping all blocks, got ${serialized.length} chars`,
115
+ );
116
+ assert.match(serialized, /more characters truncated/, "truncation marker present");
117
+ });
@@ -8,6 +8,12 @@ import { ModelDiscoveryCache } from "./discovery-cache.js";
8
8
  let testDir: string;
9
9
  let cachePath: string;
10
10
 
11
+ function markEntryStale(cache: ModelDiscoveryCache, provider: string): void {
12
+ const entry = cache.get(provider);
13
+ assert.ok(entry, `expected cache entry for ${provider}`);
14
+ entry.fetchedAt = Date.now() - entry.ttlMs - 1;
15
+ }
16
+
11
17
  beforeEach(() => {
12
18
  testDir = join(tmpdir(), `discovery-cache-test-${Date.now()}-${Math.random().toString(36).slice(2)}`);
13
19
  mkdirSync(testDir, { recursive: true });
@@ -92,12 +98,7 @@ describe("ModelDiscoveryCache — staleness", () => {
92
98
  it("entries with expired TTL are stale", () => {
93
99
  const cache = new ModelDiscoveryCache(cachePath);
94
100
  cache.set("openai", [{ id: "gpt-4o" }], 1); // 1ms TTL
95
-
96
- // Wait for TTL to expire
97
- const start = Date.now();
98
- while (Date.now() - start < 5) {
99
- // busy wait
100
- }
101
+ markEntryStale(cache, "openai");
101
102
 
102
103
  assert.equal(cache.isStale("openai"), true);
103
104
  });
@@ -110,12 +111,7 @@ describe("ModelDiscoveryCache — getAll", () => {
110
111
  const cache = new ModelDiscoveryCache(cachePath);
111
112
  cache.set("openai", [{ id: "gpt-4o" }]);
112
113
  cache.set("stale", [{ id: "old" }], 1);
113
-
114
- // Wait for stale TTL
115
- const start = Date.now();
116
- while (Date.now() - start < 5) {
117
- // busy wait
118
- }
114
+ markEntryStale(cache, "stale");
119
115
 
120
116
  const all = cache.getAll();
121
117
  assert.ok(all.has("openai"));
@@ -126,12 +122,7 @@ describe("ModelDiscoveryCache — getAll", () => {
126
122
  const cache = new ModelDiscoveryCache(cachePath);
127
123
  cache.set("openai", [{ id: "gpt-4o" }]);
128
124
  cache.set("stale", [{ id: "old" }], 1);
129
-
130
- // Wait for stale TTL
131
- const start = Date.now();
132
- while (Date.now() - start < 5) {
133
- // busy wait
134
- }
125
+ markEntryStale(cache, "stale");
135
126
 
136
127
  const all = cache.getAll(true);
137
128
  assert.ok(all.has("openai"));
@@ -0,0 +1,119 @@
1
+ import { existsSync, readFileSync, readdirSync } from 'node:fs'
2
+ import { join, resolve } from 'node:path'
3
+ import { readManifest, readManifestFromEntryPath } from './extension-registry.js'
4
+
5
+ function isExtensionFile(name: string): boolean {
6
+ return name.endsWith('.ts') || name.endsWith('.js')
7
+ }
8
+
9
+ /**
10
+ * Resolves the entry-point file(s) for a single extension directory.
11
+ *
12
+ * 1. If the directory contains a package.json with a `pi` manifest object,
13
+ * the manifest is authoritative:
14
+ * - `pi.extensions` array → resolve each entry relative to the directory.
15
+ * - `pi: {}` (no extensions) → return empty (library opt-out, e.g. cmux).
16
+ * 2. Only when no `pi` manifest exists does it fall back to `index.ts` → `index.js`.
17
+ */
18
+ export function resolveExtensionEntries(dir: string): string[] {
19
+ const packageJsonPath = join(dir, 'package.json')
20
+ if (existsSync(packageJsonPath)) {
21
+ try {
22
+ const pkg = JSON.parse(readFileSync(packageJsonPath, 'utf-8'))
23
+ if (pkg?.pi && typeof pkg.pi === 'object') {
24
+ // When a pi manifest exists, it is authoritative — don't fall through
25
+ // to index.ts/index.js auto-detection. This allows library directories
26
+ // (like cmux) to opt out by declaring "pi": {} with no extensions.
27
+ const declared = pkg.pi.extensions
28
+ if (!Array.isArray(declared) || declared.length === 0) {
29
+ return []
30
+ }
31
+ return declared
32
+ .filter((entry: unknown): entry is string => typeof entry === 'string')
33
+ .map((entry: string) => resolve(dir, entry))
34
+ .filter((entry: string) => existsSync(entry))
35
+ }
36
+ } catch {
37
+ // Ignore malformed manifests and fall back to index.ts/index.js discovery.
38
+ }
39
+ }
40
+
41
+ const indexTs = join(dir, 'index.ts')
42
+ if (existsSync(indexTs)) {
43
+ return [indexTs]
44
+ }
45
+
46
+ const indexJs = join(dir, 'index.js')
47
+ if (existsSync(indexJs)) {
48
+ return [indexJs]
49
+ }
50
+
51
+ return []
52
+ }
53
+
54
+ /**
55
+ * Discovers all extension entry-point paths under an extensions directory.
56
+ *
57
+ * - Top-level .ts/.js files are treated as standalone extension entry points.
58
+ * - Subdirectories are resolved via `resolveExtensionEntries()` (package.json →
59
+ * pi.extensions, then index.ts/index.js fallback).
60
+ */
61
+ export function discoverExtensionEntryPaths(extensionsDir: string): string[] {
62
+ if (!existsSync(extensionsDir)) {
63
+ return []
64
+ }
65
+
66
+ const discovered: string[] = []
67
+ for (const entry of readdirSync(extensionsDir, { withFileTypes: true })) {
68
+ const entryPath = join(extensionsDir, entry.name)
69
+
70
+ if ((entry.isFile() || entry.isSymbolicLink()) && isExtensionFile(entry.name)) {
71
+ discovered.push(entryPath)
72
+ continue
73
+ }
74
+
75
+ if (entry.isDirectory() || entry.isSymbolicLink()) {
76
+ discovered.push(...resolveExtensionEntries(entryPath))
77
+ }
78
+ }
79
+
80
+ return discovered
81
+ }
82
+
83
+ /**
84
+ * Merge bundled and installed extension entry paths.
85
+ * Installed extensions with the same manifest ID as a bundled extension take precedence (D-14).
86
+ * Loader stays dumb — receives a pre-merged path list (D-15).
87
+ */
88
+ export function mergeExtensionEntryPaths(bundledPaths: string[], installedExtDir: string): string[] {
89
+ if (!existsSync(installedExtDir)) return bundledPaths
90
+
91
+ // Build map: manifest ID → entry paths for installed extensions
92
+ const installedById = new Map<string, string[]>()
93
+ for (const entry of readdirSync(installedExtDir, { withFileTypes: true })) {
94
+ if (!entry.isDirectory()) continue
95
+ const dir = join(installedExtDir, entry.name)
96
+ const manifest = readManifest(dir)
97
+ const entries = resolveExtensionEntries(dir)
98
+ if (manifest && entries.length > 0) {
99
+ installedById.set(manifest.id, entries)
100
+ }
101
+ }
102
+
103
+ if (installedById.size === 0) return bundledPaths
104
+
105
+ // Filter bundled paths: skip any whose manifest id is shadowed by installed
106
+ const merged: string[] = []
107
+ for (const entryPath of bundledPaths) {
108
+ const manifest = readManifestFromEntryPath(entryPath)
109
+ if (manifest && installedById.has(manifest.id)) continue // shadowed by installed
110
+ merged.push(entryPath)
111
+ }
112
+
113
+ // Append all installed entries
114
+ for (const entries of installedById.values()) {
115
+ merged.push(...entries)
116
+ }
117
+
118
+ return merged
119
+ }