gsd-pi 2.77.0-dev.538325aea → 2.77.0-dev.58d3d4d6c

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 (1018) 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/github-sync/templates.js +103 -0
  29. package/dist/resources/extensions/google-search/extension-manifest.json +5 -4
  30. package/dist/resources/extensions/google-search/index.js +3 -375
  31. package/dist/resources/extensions/gsd/abandon-detect.js +44 -0
  32. package/dist/resources/extensions/gsd/auto/loop.js +81 -2
  33. package/dist/resources/extensions/gsd/auto/phases.js +42 -18
  34. package/dist/resources/extensions/gsd/auto/resolve.js +24 -0
  35. package/dist/resources/extensions/gsd/auto/run-unit.js +10 -2
  36. package/dist/resources/extensions/gsd/auto/session.js +6 -0
  37. package/dist/resources/extensions/gsd/auto/turn-epoch.js +95 -0
  38. package/dist/resources/extensions/gsd/auto-dispatch.js +64 -5
  39. package/dist/resources/extensions/gsd/auto-loop.js +1 -1
  40. package/dist/resources/extensions/gsd/auto-post-unit.js +110 -0
  41. package/dist/resources/extensions/gsd/auto-prompts.js +48 -7
  42. package/dist/resources/extensions/gsd/auto-recovery.js +2 -25
  43. package/dist/resources/extensions/gsd/auto-start.js +73 -5
  44. package/dist/resources/extensions/gsd/auto-timeout-recovery.js +11 -5
  45. package/dist/resources/extensions/gsd/auto-unit-closeout.js +11 -2
  46. package/dist/resources/extensions/gsd/auto-worktree.js +58 -8
  47. package/dist/resources/extensions/gsd/auto.js +76 -15
  48. package/dist/resources/extensions/gsd/bootstrap/agent-end-recovery.js +10 -0
  49. package/dist/resources/extensions/gsd/bootstrap/provider-error-resume.js +4 -2
  50. package/dist/resources/extensions/gsd/bootstrap/register-extension.js +11 -0
  51. package/dist/resources/extensions/gsd/bootstrap/system-context.js +11 -6
  52. package/dist/resources/extensions/gsd/commands/handlers/workflow.js +31 -4
  53. package/dist/resources/extensions/gsd/commands-cmux.js +9 -6
  54. package/dist/resources/extensions/gsd/commands-extensions.js +634 -43
  55. package/dist/resources/extensions/gsd/context-store.js +23 -7
  56. package/dist/resources/extensions/gsd/dispatch-guard.js +2 -17
  57. package/dist/resources/extensions/gsd/file-lock.js +49 -9
  58. package/dist/resources/extensions/gsd/forensics.js +106 -0
  59. package/dist/resources/extensions/gsd/git-service.js +1 -0
  60. package/dist/resources/extensions/gsd/gitignore.js +1 -0
  61. package/dist/resources/extensions/gsd/guided-flow-queue.js +4 -1
  62. package/dist/resources/extensions/gsd/guided-flow.js +23 -9
  63. package/dist/resources/extensions/gsd/journal.js +17 -2
  64. package/dist/resources/extensions/gsd/milestone-actions.js +15 -0
  65. package/dist/resources/extensions/gsd/milestone-summary-classifier.js +37 -0
  66. package/dist/resources/extensions/gsd/notifications.js +30 -16
  67. package/dist/resources/extensions/gsd/preferences-validation.js +23 -0
  68. package/dist/resources/extensions/gsd/prompt-cache-optimizer.js +4 -0
  69. package/dist/resources/extensions/gsd/prompts/discuss-headless.md +23 -4
  70. package/dist/resources/extensions/gsd/prompts/doctor-heal.md +5 -4
  71. package/dist/resources/extensions/gsd/reports.js +5 -4
  72. package/dist/resources/extensions/gsd/slice-cadence.js +238 -0
  73. package/dist/resources/extensions/gsd/state-transition-matrix.js +118 -0
  74. package/dist/resources/extensions/gsd/state.js +25 -25
  75. package/dist/resources/extensions/gsd/tools/complete-slice.js +21 -0
  76. package/dist/resources/extensions/gsd/tools/complete-task.js +31 -0
  77. package/dist/resources/extensions/gsd/tools/validate-milestone.js +7 -2
  78. package/dist/resources/extensions/gsd/uok/audit.js +18 -2
  79. package/dist/resources/extensions/gsd/uok/dispatch-envelope.js +33 -0
  80. package/dist/resources/extensions/gsd/uok/execution-graph.js +10 -0
  81. package/dist/resources/extensions/gsd/uok/gitops.js +2 -1
  82. package/dist/resources/extensions/gsd/uok/loop-adapter.js +37 -10
  83. package/dist/resources/extensions/gsd/uok/parity-report.js +58 -0
  84. package/dist/resources/extensions/gsd/uok/plan-v2.js +10 -4
  85. package/dist/resources/extensions/gsd/uok/writer.js +82 -0
  86. package/dist/resources/extensions/gsd/workflow-logger.js +10 -2
  87. package/dist/resources/extensions/gsd/worktree-manager.js +52 -0
  88. package/dist/resources/extensions/gsd/worktree-resolver.js +86 -7
  89. package/dist/resources/extensions/gsd/worktree-telemetry.js +198 -0
  90. package/dist/resources/extensions/mcp-client/auth.js +10 -1
  91. package/dist/resources/extensions/mcp-client/index.js +119 -10
  92. package/dist/resources/extensions/ollama/index.js +2 -1
  93. package/dist/resources/extensions/ollama/ollama-chat-provider.js +15 -5
  94. package/dist/resources/extensions/remote-questions/config.js +1 -12
  95. package/dist/resources/extensions/shared/cmux-events.js +12 -0
  96. package/dist/resources/extensions/shared/rtk-session-stats.js +1 -2
  97. package/dist/resources/extensions/universal-config/index.js +1 -1
  98. package/dist/resources/skills/create-skill/SKILL.md +2 -2
  99. package/dist/resources/skills/create-skill/references/gsd-skill-ecosystem.md +4 -4
  100. package/dist/resources/skills/create-skill/workflows/audit-skill.md +4 -4
  101. package/dist/resources/skills/create-skill/workflows/create-new-skill.md +5 -5
  102. package/dist/security-overrides.d.ts +1 -4
  103. package/dist/security-overrides.js +3 -16
  104. package/dist/tsconfig.extensions.tsbuildinfo +1 -1
  105. package/dist/web/standalone/.next/BUILD_ID +1 -1
  106. package/dist/web/standalone/.next/app-path-routes-manifest.json +4 -4
  107. package/dist/web/standalone/.next/build-manifest.json +3 -3
  108. package/dist/web/standalone/.next/prerender-manifest.json +3 -3
  109. package/dist/web/standalone/.next/react-loadable-manifest.json +1 -1
  110. package/dist/web/standalone/.next/server/app/_global-error.html +1 -1
  111. package/dist/web/standalone/.next/server/app/_global-error.rsc +1 -1
  112. package/dist/web/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  113. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  114. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  115. package/dist/web/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  116. package/dist/web/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  117. package/dist/web/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  118. package/dist/web/standalone/.next/server/app/_not-found.html +1 -1
  119. package/dist/web/standalone/.next/server/app/_not-found.rsc +1 -1
  120. package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
  121. package/dist/web/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  122. package/dist/web/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
  123. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  124. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  125. package/dist/web/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  126. package/dist/web/standalone/.next/server/app/api/boot/route.js +1 -1
  127. package/dist/web/standalone/.next/server/app/api/boot/route.js.nft.json +1 -1
  128. package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route.js +1 -1
  129. package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route.js.nft.json +1 -1
  130. package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route.js +1 -1
  131. package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route.js.nft.json +1 -1
  132. package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route.js +1 -1
  133. package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route.js.nft.json +1 -1
  134. package/dist/web/standalone/.next/server/app/api/captures/route.js +1 -1
  135. package/dist/web/standalone/.next/server/app/api/captures/route.js.nft.json +1 -1
  136. package/dist/web/standalone/.next/server/app/api/cleanup/route.js +1 -1
  137. package/dist/web/standalone/.next/server/app/api/cleanup/route.js.nft.json +1 -1
  138. package/dist/web/standalone/.next/server/app/api/doctor/route.js +1 -1
  139. package/dist/web/standalone/.next/server/app/api/doctor/route.js.nft.json +1 -1
  140. package/dist/web/standalone/.next/server/app/api/export-data/route.js +1 -1
  141. package/dist/web/standalone/.next/server/app/api/export-data/route.js.nft.json +1 -1
  142. package/dist/web/standalone/.next/server/app/api/files/route.js +1 -1
  143. package/dist/web/standalone/.next/server/app/api/files/route.js.nft.json +1 -1
  144. package/dist/web/standalone/.next/server/app/api/forensics/route.js +1 -1
  145. package/dist/web/standalone/.next/server/app/api/forensics/route.js.nft.json +1 -1
  146. package/dist/web/standalone/.next/server/app/api/git/route.js +1 -1
  147. package/dist/web/standalone/.next/server/app/api/git/route.js.nft.json +1 -1
  148. package/dist/web/standalone/.next/server/app/api/history/route.js +1 -1
  149. package/dist/web/standalone/.next/server/app/api/history/route.js.nft.json +1 -1
  150. package/dist/web/standalone/.next/server/app/api/hooks/route.js +1 -1
  151. package/dist/web/standalone/.next/server/app/api/hooks/route.js.nft.json +1 -1
  152. package/dist/web/standalone/.next/server/app/api/inspect/route.js +1 -1
  153. package/dist/web/standalone/.next/server/app/api/inspect/route.js.nft.json +1 -1
  154. package/dist/web/standalone/.next/server/app/api/knowledge/route.js +1 -1
  155. package/dist/web/standalone/.next/server/app/api/knowledge/route.js.nft.json +1 -1
  156. package/dist/web/standalone/.next/server/app/api/live-state/route.js +1 -1
  157. package/dist/web/standalone/.next/server/app/api/live-state/route.js.nft.json +1 -1
  158. package/dist/web/standalone/.next/server/app/api/notifications/route.js +1 -1
  159. package/dist/web/standalone/.next/server/app/api/notifications/route.js.nft.json +1 -1
  160. package/dist/web/standalone/.next/server/app/api/onboarding/route.js +1 -1
  161. package/dist/web/standalone/.next/server/app/api/onboarding/route.js.nft.json +1 -1
  162. package/dist/web/standalone/.next/server/app/api/projects/route.js +1 -1
  163. package/dist/web/standalone/.next/server/app/api/projects/route.js.nft.json +1 -1
  164. package/dist/web/standalone/.next/server/app/api/recovery/route.js +1 -1
  165. package/dist/web/standalone/.next/server/app/api/recovery/route.js.nft.json +1 -1
  166. package/dist/web/standalone/.next/server/app/api/session/browser/route.js +1 -1
  167. package/dist/web/standalone/.next/server/app/api/session/browser/route.js.nft.json +1 -1
  168. package/dist/web/standalone/.next/server/app/api/session/command/route.js +1 -1
  169. package/dist/web/standalone/.next/server/app/api/session/command/route.js.nft.json +1 -1
  170. package/dist/web/standalone/.next/server/app/api/session/events/route.js +1 -1
  171. package/dist/web/standalone/.next/server/app/api/session/events/route.js.nft.json +1 -1
  172. package/dist/web/standalone/.next/server/app/api/session/manage/route.js +1 -1
  173. package/dist/web/standalone/.next/server/app/api/session/manage/route.js.nft.json +1 -1
  174. package/dist/web/standalone/.next/server/app/api/settings-data/route.js +1 -1
  175. package/dist/web/standalone/.next/server/app/api/settings-data/route.js.nft.json +1 -1
  176. package/dist/web/standalone/.next/server/app/api/skill-health/route.js +1 -1
  177. package/dist/web/standalone/.next/server/app/api/skill-health/route.js.nft.json +1 -1
  178. package/dist/web/standalone/.next/server/app/api/steer/route.js +1 -1
  179. package/dist/web/standalone/.next/server/app/api/steer/route.js.nft.json +1 -1
  180. package/dist/web/standalone/.next/server/app/api/switch-root/route.js +1 -1
  181. package/dist/web/standalone/.next/server/app/api/switch-root/route.js.nft.json +1 -1
  182. package/dist/web/standalone/.next/server/app/api/terminal/input/route.js +1 -1
  183. package/dist/web/standalone/.next/server/app/api/terminal/resize/route.js +1 -1
  184. package/dist/web/standalone/.next/server/app/api/terminal/sessions/route.js +1 -1
  185. package/dist/web/standalone/.next/server/app/api/terminal/sessions/route.js.nft.json +1 -1
  186. package/dist/web/standalone/.next/server/app/api/terminal/stream/route.js +1 -1
  187. package/dist/web/standalone/.next/server/app/api/terminal/stream/route.js.nft.json +1 -1
  188. package/dist/web/standalone/.next/server/app/api/undo/route.js +1 -1
  189. package/dist/web/standalone/.next/server/app/api/undo/route.js.nft.json +1 -1
  190. package/dist/web/standalone/.next/server/app/api/visualizer/route.js +1 -1
  191. package/dist/web/standalone/.next/server/app/api/visualizer/route.js.nft.json +1 -1
  192. package/dist/web/standalone/.next/server/app/index.html +1 -1
  193. package/dist/web/standalone/.next/server/app/index.rsc +1 -1
  194. package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  195. package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +1 -1
  196. package/dist/web/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
  197. package/dist/web/standalone/.next/server/app/index.segments/_index.segment.rsc +1 -1
  198. package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  199. package/dist/web/standalone/.next/server/app-paths-manifest.json +4 -4
  200. package/dist/web/standalone/.next/server/chunks/1926.js +1 -0
  201. package/dist/web/standalone/.next/server/chunks/6897.js +2 -2
  202. package/dist/web/standalone/.next/server/middleware-build-manifest.js +1 -1
  203. package/dist/web/standalone/.next/server/middleware-manifest.json +5 -5
  204. package/dist/web/standalone/.next/server/middleware-react-loadable-manifest.js +1 -1
  205. package/dist/web/standalone/.next/server/pages/404.html +1 -1
  206. package/dist/web/standalone/.next/server/pages/500.html +1 -1
  207. package/dist/web/standalone/.next/server/server-reference-manifest.json +1 -1
  208. package/dist/web/standalone/.next/static/chunks/2826.e9f5195e91f9cad2.js +11 -0
  209. package/dist/web/standalone/.next/static/chunks/{webpack-1832629448831fdc.js → webpack-2e68521d7c82f7c2.js} +1 -1
  210. package/dist/web-mode.js +1 -1
  211. package/dist/welcome-screen.js +20 -19
  212. package/dist/wizard.js +5 -2
  213. package/package.json +16 -32
  214. package/packages/mcp-server/README.md +3 -3
  215. package/packages/mcp-server/dist/env-writer.d.ts +1 -0
  216. package/packages/mcp-server/dist/env-writer.d.ts.map +1 -1
  217. package/packages/mcp-server/dist/env-writer.js +74 -6
  218. package/packages/mcp-server/dist/env-writer.js.map +1 -1
  219. package/packages/mcp-server/dist/server.d.ts.map +1 -1
  220. package/packages/mcp-server/dist/server.js +36 -17
  221. package/packages/mcp-server/dist/server.js.map +1 -1
  222. package/packages/mcp-server/dist/workflow-tools.d.ts.map +1 -1
  223. package/packages/mcp-server/dist/workflow-tools.js +15 -6
  224. package/packages/mcp-server/dist/workflow-tools.js.map +1 -1
  225. package/packages/mcp-server/package.json +5 -0
  226. package/packages/mcp-server/src/env-writer.test.ts +79 -1
  227. package/packages/mcp-server/src/env-writer.ts +76 -6
  228. package/packages/mcp-server/src/readers/readers.test.ts +5 -1
  229. package/packages/mcp-server/src/server.ts +45 -19
  230. package/packages/mcp-server/src/workflow-tools.test.ts +44 -0
  231. package/packages/mcp-server/src/workflow-tools.ts +19 -6
  232. package/packages/mcp-server/tsconfig.tsbuildinfo +1 -1
  233. package/packages/native/package.json +5 -0
  234. package/packages/native/src/__tests__/clipboard.test.mjs +69 -23
  235. package/packages/native/tsconfig.json +1 -2
  236. package/packages/native/tsconfig.tsbuildinfo +1 -0
  237. package/packages/pi-agent-core/package.json +5 -0
  238. package/packages/pi-agent-core/src/agent-loop.test.ts +220 -15
  239. package/packages/pi-ai/package.json +5 -0
  240. package/packages/pi-ai/tsconfig.tsbuildinfo +1 -1
  241. package/packages/pi-coding-agent/dist/core/compaction/compaction.d.ts +25 -0
  242. package/packages/pi-coding-agent/dist/core/compaction/compaction.d.ts.map +1 -1
  243. package/packages/pi-coding-agent/dist/core/compaction/compaction.js +105 -6
  244. package/packages/pi-coding-agent/dist/core/compaction/compaction.js.map +1 -1
  245. package/packages/pi-coding-agent/dist/core/compaction/compaction.test.js +230 -28
  246. package/packages/pi-coding-agent/dist/core/compaction/compaction.test.js.map +1 -1
  247. package/packages/pi-coding-agent/dist/core/compaction/utils.d.ts +30 -2
  248. package/packages/pi-coding-agent/dist/core/compaction/utils.d.ts.map +1 -1
  249. package/packages/pi-coding-agent/dist/core/compaction/utils.js +113 -12
  250. package/packages/pi-coding-agent/dist/core/compaction/utils.js.map +1 -1
  251. package/packages/pi-coding-agent/dist/core/compaction-orchestrator.d.ts +1 -0
  252. package/packages/pi-coding-agent/dist/core/compaction-orchestrator.d.ts.map +1 -1
  253. package/packages/pi-coding-agent/dist/core/compaction-orchestrator.js +29 -18
  254. package/packages/pi-coding-agent/dist/core/compaction-orchestrator.js.map +1 -1
  255. package/packages/pi-coding-agent/dist/core/compaction-orchestrator.test.d.ts +2 -0
  256. package/packages/pi-coding-agent/dist/core/compaction-orchestrator.test.d.ts.map +1 -0
  257. package/packages/pi-coding-agent/dist/core/compaction-orchestrator.test.js +130 -0
  258. package/packages/pi-coding-agent/dist/core/compaction-orchestrator.test.js.map +1 -0
  259. package/packages/pi-coding-agent/dist/core/compaction-utils.test.js +56 -1
  260. package/packages/pi-coding-agent/dist/core/compaction-utils.test.js.map +1 -1
  261. package/packages/pi-coding-agent/dist/core/discovery-cache.test.js +8 -15
  262. package/packages/pi-coding-agent/dist/core/discovery-cache.test.js.map +1 -1
  263. package/packages/pi-coding-agent/dist/core/extensions/extension-discovery.d.ts +25 -0
  264. package/packages/pi-coding-agent/dist/core/extensions/extension-discovery.d.ts.map +1 -0
  265. package/packages/pi-coding-agent/dist/core/extensions/extension-discovery.js +109 -0
  266. package/packages/pi-coding-agent/dist/core/extensions/extension-discovery.js.map +1 -0
  267. package/packages/pi-coding-agent/dist/core/extensions/extension-registry.d.ts +67 -0
  268. package/packages/pi-coding-agent/dist/core/extensions/extension-registry.d.ts.map +1 -0
  269. package/packages/pi-coding-agent/dist/core/extensions/extension-registry.js +167 -0
  270. package/packages/pi-coding-agent/dist/core/extensions/extension-registry.js.map +1 -0
  271. package/packages/pi-coding-agent/dist/core/extensions/loader.d.ts +3 -2
  272. package/packages/pi-coding-agent/dist/core/extensions/loader.d.ts.map +1 -1
  273. package/packages/pi-coding-agent/dist/core/extensions/loader.js +24 -8
  274. package/packages/pi-coding-agent/dist/core/extensions/loader.js.map +1 -1
  275. package/packages/pi-coding-agent/dist/core/extensions/types.d.ts +7 -0
  276. package/packages/pi-coding-agent/dist/core/extensions/types.d.ts.map +1 -1
  277. package/packages/pi-coding-agent/dist/core/extensions/types.js.map +1 -1
  278. package/packages/pi-coding-agent/dist/core/lsp/lsp-integration.test.js +11 -0
  279. package/packages/pi-coding-agent/dist/core/lsp/lsp-integration.test.js.map +1 -1
  280. package/packages/pi-coding-agent/dist/core/model-registry-auth-mode.test.js +2 -2
  281. package/packages/pi-coding-agent/dist/core/model-registry-auth-mode.test.js.map +1 -1
  282. package/packages/pi-coding-agent/dist/core/resource-loader.js +1 -1
  283. package/packages/pi-coding-agent/dist/core/resource-loader.js.map +1 -1
  284. package/packages/pi-coding-agent/dist/core/sdk.d.ts +1 -0
  285. package/packages/pi-coding-agent/dist/core/sdk.d.ts.map +1 -1
  286. package/packages/pi-coding-agent/dist/core/sdk.js +4 -1
  287. package/packages/pi-coding-agent/dist/core/sdk.js.map +1 -1
  288. package/packages/pi-coding-agent/dist/core/sdk.test.js +19 -1
  289. package/packages/pi-coding-agent/dist/core/sdk.test.js.map +1 -1
  290. package/packages/pi-coding-agent/dist/core/system-prompt.js +3 -3
  291. package/packages/pi-coding-agent/dist/core/system-prompt.js.map +1 -1
  292. package/packages/pi-coding-agent/dist/core/tools/path-utils.test.js +2 -1
  293. package/packages/pi-coding-agent/dist/core/tools/path-utils.test.js.map +1 -1
  294. package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/provider-display-name.test.js +15 -6
  295. package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/provider-display-name.test.js.map +1 -1
  296. package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/tool-execution.test.js +36 -5
  297. package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/tool-execution.test.js.map +1 -1
  298. package/packages/pi-coding-agent/dist/modes/interactive/components/footer.d.ts.map +1 -1
  299. package/packages/pi-coding-agent/dist/modes/interactive/components/footer.js +14 -5
  300. package/packages/pi-coding-agent/dist/modes/interactive/components/footer.js.map +1 -1
  301. package/packages/pi-coding-agent/dist/modes/interactive/components/model-selector.d.ts +7 -1
  302. package/packages/pi-coding-agent/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
  303. package/packages/pi-coding-agent/dist/modes/interactive/components/model-selector.js +31 -9
  304. package/packages/pi-coding-agent/dist/modes/interactive/components/model-selector.js.map +1 -1
  305. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
  306. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.js +30 -12
  307. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.js.map +1 -1
  308. package/packages/pi-coding-agent/dist/modes/interactive/controllers/input-controller.test.js +14 -0
  309. package/packages/pi-coding-agent/dist/modes/interactive/controllers/input-controller.test.js.map +1 -1
  310. package/packages/pi-coding-agent/package.json +5 -0
  311. package/packages/pi-coding-agent/src/core/compaction/compaction.test.ts +368 -28
  312. package/packages/pi-coding-agent/src/core/compaction/compaction.ts +122 -6
  313. package/packages/pi-coding-agent/src/core/compaction/utils.ts +111 -13
  314. package/packages/pi-coding-agent/src/core/compaction-orchestrator.test.ts +154 -0
  315. package/packages/pi-coding-agent/src/core/compaction-orchestrator.ts +32 -18
  316. package/packages/pi-coding-agent/src/core/compaction-utils.test.ts +68 -1
  317. package/packages/pi-coding-agent/src/core/discovery-cache.test.ts +9 -18
  318. package/packages/pi-coding-agent/src/core/extensions/extension-discovery.ts +119 -0
  319. package/packages/pi-coding-agent/src/core/extensions/extension-registry.ts +222 -0
  320. package/packages/pi-coding-agent/src/core/extensions/loader.ts +24 -11
  321. package/packages/pi-coding-agent/src/core/extensions/types.ts +8 -0
  322. package/packages/pi-coding-agent/src/core/lsp/lsp-integration.test.ts +13 -0
  323. package/packages/pi-coding-agent/src/core/model-registry-auth-mode.test.ts +2 -2
  324. package/packages/pi-coding-agent/src/core/resource-loader.ts +1 -1
  325. package/packages/pi-coding-agent/src/core/sdk.test.ts +25 -1
  326. package/packages/pi-coding-agent/src/core/sdk.ts +10 -3
  327. package/packages/pi-coding-agent/src/core/system-prompt.ts +3 -3
  328. package/packages/pi-coding-agent/src/core/tools/path-utils.test.ts +2 -1
  329. package/packages/pi-coding-agent/src/modes/interactive/components/__tests__/provider-display-name.test.ts +17 -7
  330. package/packages/pi-coding-agent/src/modes/interactive/components/__tests__/tool-execution.test.ts +49 -3
  331. package/packages/pi-coding-agent/src/modes/interactive/components/footer.ts +14 -5
  332. package/packages/pi-coding-agent/src/modes/interactive/components/model-selector.ts +45 -11
  333. package/packages/pi-coding-agent/src/modes/interactive/components/tool-execution.ts +48 -9
  334. package/packages/pi-coding-agent/src/modes/interactive/controllers/input-controller.test.ts +14 -0
  335. package/packages/pi-coding-agent/tsconfig.tsbuildinfo +1 -1
  336. package/packages/pi-tui/dist/__tests__/autocomplete.test.js +12 -5
  337. package/packages/pi-tui/dist/__tests__/autocomplete.test.js.map +1 -1
  338. package/packages/pi-tui/dist/__tests__/stdin-buffer.test.js +21 -0
  339. package/packages/pi-tui/dist/__tests__/stdin-buffer.test.js.map +1 -1
  340. package/packages/pi-tui/dist/stdin-buffer.d.ts +7 -0
  341. package/packages/pi-tui/dist/stdin-buffer.d.ts.map +1 -1
  342. package/packages/pi-tui/dist/stdin-buffer.js +20 -0
  343. package/packages/pi-tui/dist/stdin-buffer.js.map +1 -1
  344. package/packages/pi-tui/package.json +5 -0
  345. package/packages/pi-tui/src/__tests__/autocomplete.test.ts +20 -5
  346. package/packages/pi-tui/src/__tests__/stdin-buffer.test.ts +27 -0
  347. package/packages/pi-tui/src/stdin-buffer.ts +26 -0
  348. package/packages/pi-tui/tsconfig.tsbuildinfo +1 -1
  349. package/packages/rpc-client/package.json +5 -0
  350. package/pkg/dist/core/export-html/ansi-to-html.d.ts.map +1 -1
  351. package/pkg/dist/core/export-html/ansi-to-html.js +0 -1
  352. package/pkg/dist/core/export-html/ansi-to-html.js.map +1 -1
  353. package/pkg/dist/core/export-html/index.d.ts +1 -1
  354. package/pkg/dist/core/export-html/index.d.ts.map +1 -1
  355. package/pkg/dist/core/export-html/index.js +5 -39
  356. package/pkg/dist/core/export-html/index.js.map +1 -1
  357. package/pkg/dist/core/export-html/tool-renderer.d.ts +2 -2
  358. package/pkg/dist/core/export-html/tool-renderer.d.ts.map +1 -1
  359. package/pkg/dist/core/export-html/tool-renderer.js.map +1 -1
  360. package/scripts/ensure-workspace-builds.cjs +0 -2
  361. package/scripts/lib/workspace-manifest.cjs +86 -0
  362. package/scripts/link-workspace-packages.cjs +5 -19
  363. package/src/resources/extensions/async-jobs/async-bash-tool.ts +1 -1
  364. package/src/resources/extensions/aws-auth/index.ts +1 -2
  365. package/src/resources/extensions/bg-shell/bg-shell-lifecycle.ts +7 -4
  366. package/src/resources/extensions/bg-shell/index.ts +1 -2
  367. package/src/resources/extensions/bg-shell/process-manager.ts +1 -2
  368. package/src/resources/extensions/browser-tools/index.ts +1 -2
  369. package/src/resources/extensions/claude-code-cli/index.ts +1 -1
  370. package/src/resources/extensions/claude-code-cli/partial-builder.ts +23 -115
  371. package/src/resources/extensions/claude-code-cli/stream-adapter.ts +81 -61
  372. package/src/resources/extensions/claude-code-cli/tests/stream-adapter.test.ts +91 -22
  373. package/src/resources/extensions/cmux/index.ts +35 -10
  374. package/src/resources/extensions/github-sync/templates.ts +151 -0
  375. package/src/resources/extensions/github-sync/tests/templates.test.ts +59 -0
  376. package/src/resources/extensions/google-search/extension-manifest.json +5 -4
  377. package/src/resources/extensions/google-search/index.ts +9 -470
  378. package/src/resources/extensions/gsd/abandon-detect.ts +62 -0
  379. package/src/resources/extensions/gsd/auto/loop-deps.ts +1 -1
  380. package/src/resources/extensions/gsd/auto/loop.ts +95 -2
  381. package/src/resources/extensions/gsd/auto/phases.ts +46 -18
  382. package/src/resources/extensions/gsd/auto/resolve.ts +29 -0
  383. package/src/resources/extensions/gsd/auto/run-unit.ts +16 -2
  384. package/src/resources/extensions/gsd/auto/session.ts +7 -0
  385. package/src/resources/extensions/gsd/auto/turn-epoch.ts +108 -0
  386. package/src/resources/extensions/gsd/auto/types.ts +1 -1
  387. package/src/resources/extensions/gsd/auto-dispatch.ts +63 -5
  388. package/src/resources/extensions/gsd/auto-loop.ts +1 -1
  389. package/src/resources/extensions/gsd/auto-post-unit.ts +111 -0
  390. package/src/resources/extensions/gsd/auto-prompts.ts +59 -7
  391. package/src/resources/extensions/gsd/auto-recovery.ts +5 -27
  392. package/src/resources/extensions/gsd/auto-start.ts +73 -3
  393. package/src/resources/extensions/gsd/auto-timeout-recovery.ts +12 -5
  394. package/src/resources/extensions/gsd/auto-unit-closeout.ts +14 -3
  395. package/src/resources/extensions/gsd/auto-worktree.ts +60 -5
  396. package/src/resources/extensions/gsd/auto.ts +84 -19
  397. package/src/resources/extensions/gsd/bootstrap/agent-end-recovery.ts +11 -0
  398. package/src/resources/extensions/gsd/bootstrap/provider-error-resume.ts +6 -2
  399. package/src/resources/extensions/gsd/bootstrap/register-extension.ts +11 -0
  400. package/src/resources/extensions/gsd/bootstrap/system-context.ts +13 -9
  401. package/src/resources/extensions/gsd/commands/handlers/workflow.ts +27 -8
  402. package/src/resources/extensions/gsd/commands-cmux.ts +10 -6
  403. package/src/resources/extensions/gsd/commands-extensions.ts +747 -41
  404. package/src/resources/extensions/gsd/context-store.ts +25 -8
  405. package/src/resources/extensions/gsd/dispatch-guard.ts +2 -20
  406. package/src/resources/extensions/gsd/file-lock.ts +84 -11
  407. package/src/resources/extensions/gsd/forensics.ts +118 -1
  408. package/src/resources/extensions/gsd/git-service.ts +17 -0
  409. package/src/resources/extensions/gsd/gitignore.ts +1 -0
  410. package/src/resources/extensions/gsd/guided-flow-queue.ts +4 -1
  411. package/src/resources/extensions/gsd/guided-flow.ts +38 -10
  412. package/src/resources/extensions/gsd/journal.ts +38 -3
  413. package/src/resources/extensions/gsd/milestone-actions.ts +18 -0
  414. package/src/resources/extensions/gsd/milestone-summary-classifier.ts +42 -0
  415. package/src/resources/extensions/gsd/notifications.ts +27 -15
  416. package/src/resources/extensions/gsd/preferences-validation.ts +21 -0
  417. package/src/resources/extensions/gsd/prompt-cache-optimizer.ts +4 -0
  418. package/src/resources/extensions/gsd/prompts/discuss-headless.md +23 -4
  419. package/src/resources/extensions/gsd/prompts/doctor-heal.md +5 -4
  420. package/src/resources/extensions/gsd/reports.ts +5 -4
  421. package/src/resources/extensions/gsd/slice-cadence.ts +299 -0
  422. package/src/resources/extensions/gsd/state-transition-matrix.ts +152 -0
  423. package/src/resources/extensions/gsd/state.ts +35 -30
  424. package/src/resources/extensions/gsd/tests/artifacts-table-preserved-on-cache-invalidate.test.ts +2 -1
  425. package/src/resources/extensions/gsd/tests/auto-loop.test.ts +55 -10
  426. package/src/resources/extensions/gsd/tests/auto-mode-guards.test.ts +79 -0
  427. package/src/resources/extensions/gsd/tests/auto-remediate-slice-status.test.ts +4 -1
  428. package/src/resources/extensions/gsd/tests/auto-retry-mcp-churn-fixes.test.ts +12 -9
  429. package/src/resources/extensions/gsd/tests/auto-start-clean-runtime-db-gated.test.ts +3 -2
  430. package/src/resources/extensions/gsd/tests/auto-start-cold-db-bootstrap.test.ts +2 -2
  431. package/src/resources/extensions/gsd/tests/auto-start-model-capture.test.ts +4 -3
  432. package/src/resources/extensions/gsd/tests/auto-start-worktree-db-path.test.ts +2 -2
  433. package/src/resources/extensions/gsd/tests/auto-thinking-restore.test.ts +3 -2
  434. package/src/resources/extensions/gsd/tests/auto-warning-noise-regression.test.ts +3 -2
  435. package/src/resources/extensions/gsd/tests/bootstrap-derive-state-db-open.test.ts +2 -1
  436. package/src/resources/extensions/gsd/tests/canonical-milestone-root.test.ts +108 -0
  437. package/src/resources/extensions/gsd/tests/cmux.test.ts +5 -9
  438. package/src/resources/extensions/gsd/tests/complete-slice-verification-gate.test.ts +2 -1
  439. package/src/resources/extensions/gsd/tests/context-store.test.ts +79 -0
  440. package/src/resources/extensions/gsd/tests/copy-planning-artifacts-samepath.test.ts +2 -1
  441. package/src/resources/extensions/gsd/tests/custom-engine-loop-integration.test.ts +159 -0
  442. package/src/resources/extensions/gsd/tests/db-access-guardrails.test.ts +1 -0
  443. package/src/resources/extensions/gsd/tests/derive-state.test.ts +1 -2
  444. package/src/resources/extensions/gsd/tests/discuss-slice-structured-questions.test.ts +2 -1
  445. package/src/resources/extensions/gsd/tests/discuss-tool-scope-leak.test.ts +2 -1
  446. package/src/resources/extensions/gsd/tests/dispatch-complete-milestone-guard.test.ts +5 -0
  447. package/src/resources/extensions/gsd/tests/dispatch-guard.test.ts +25 -0
  448. package/src/resources/extensions/gsd/tests/dispatch-missing-task-plans.test.ts +14 -0
  449. package/src/resources/extensions/gsd/tests/double-merge-guard.test.ts +4 -3
  450. package/src/resources/extensions/gsd/tests/empty-content-abort-loop.test.ts +4 -3
  451. package/src/resources/extensions/gsd/tests/execution-entry-missing-context-4671.test.ts +173 -0
  452. package/src/resources/extensions/gsd/tests/file-lock.test.ts +86 -12
  453. package/src/resources/extensions/gsd/tests/finalize-timeout-guard.test.ts +2 -2
  454. package/src/resources/extensions/gsd/tests/forensics-hook-key-parse.test.ts +2 -1
  455. package/src/resources/extensions/gsd/tests/forensics-worktree-telemetry.test.ts +145 -0
  456. package/src/resources/extensions/gsd/tests/google-search-stub.test.ts +131 -0
  457. package/src/resources/extensions/gsd/tests/headless-milestone-parity.test.ts +117 -0
  458. package/src/resources/extensions/gsd/tests/idle-watchdog-stall-override.test.ts +6 -1
  459. package/src/resources/extensions/gsd/tests/import-done-milestones.test.ts +2 -1
  460. package/src/resources/extensions/gsd/tests/integration/all-milestones-complete-merge.test.ts +2 -1
  461. package/src/resources/extensions/gsd/tests/integration/auto-worktree-milestone-merge.test.ts +30 -0
  462. package/src/resources/extensions/gsd/tests/integration/git-service.test.ts +3 -2
  463. package/src/resources/extensions/gsd/tests/interactive-routing-bypass.test.ts +9 -3
  464. package/src/resources/extensions/gsd/tests/journal-integration.test.ts +64 -0
  465. package/src/resources/extensions/gsd/tests/knowledge.test.ts +93 -1
  466. package/src/resources/extensions/gsd/tests/mcp-client-security.test.ts +76 -0
  467. package/src/resources/extensions/gsd/tests/merge-conflict-stops-loop.test.ts +10 -3
  468. package/src/resources/extensions/gsd/tests/milestone-summary-classifier.test.ts +30 -0
  469. package/src/resources/extensions/gsd/tests/milestone-transition-state-rebuild.test.ts +4 -2
  470. package/src/resources/extensions/gsd/tests/native-git-bridge-exec-fallback.test.ts +2 -1
  471. package/src/resources/extensions/gsd/tests/orphaned-worktree-audit.test.ts +59 -2
  472. package/src/resources/extensions/gsd/tests/parallel-commit-scope.test.ts +5 -0
  473. package/src/resources/extensions/gsd/tests/parallel-research-dispatch.test.ts +4 -1
  474. package/src/resources/extensions/gsd/tests/parallel-skill-prompt-integration.test.ts +150 -0
  475. package/src/resources/extensions/gsd/tests/preferences-worktree-sync.test.ts +2 -1
  476. package/src/resources/extensions/gsd/tests/prompt-cache-optimizer.test.ts +12 -0
  477. package/src/resources/extensions/gsd/tests/prompt-step-ordering.test.ts +15 -4
  478. package/src/resources/extensions/gsd/tests/provider-errors.test.ts +39 -25
  479. package/src/resources/extensions/gsd/tests/queue-auto-guard.test.ts +181 -0
  480. package/src/resources/extensions/gsd/tests/queue-draft-detection.test.ts +3 -2
  481. package/src/resources/extensions/gsd/tests/queued-discuss-fast-path.test.ts +4 -5
  482. package/src/resources/extensions/gsd/tests/quick-auto-guard.test.ts +13 -7
  483. package/src/resources/extensions/gsd/tests/require-slice-discussion-dispatch.test.ts +170 -0
  484. package/src/resources/extensions/gsd/tests/restore-tools-after-discuss.test.ts +6 -3
  485. package/src/resources/extensions/gsd/tests/rewrite-docs-abandon-detect.test.ts +195 -0
  486. package/src/resources/extensions/gsd/tests/sidecar-queue.test.ts +3 -2
  487. package/src/resources/extensions/gsd/tests/slice-cadence.test.ts +242 -0
  488. package/src/resources/extensions/gsd/tests/slice-context-injection.test.ts +3 -2
  489. package/src/resources/extensions/gsd/tests/smart-entry-draft.test.ts +2 -1
  490. package/src/resources/extensions/gsd/tests/stale-dirlistcache-4648.test.ts +112 -0
  491. package/src/resources/extensions/gsd/tests/state-machine-full-walkthrough.test.ts +24 -0
  492. package/src/resources/extensions/gsd/tests/state-transition-matrix.test.ts +44 -0
  493. package/src/resources/extensions/gsd/tests/stop-auto-race-null-unit.test.ts +3 -3
  494. package/src/resources/extensions/gsd/tests/stuck-detection-coverage.test.ts +2 -2
  495. package/src/resources/extensions/gsd/tests/subagent-model-dispatch.test.ts +7 -6
  496. package/src/resources/extensions/gsd/tests/sync-worktree-skip-current.test.ts +4 -3
  497. package/src/resources/extensions/gsd/tests/test-helpers.test.ts +147 -0
  498. package/src/resources/extensions/gsd/tests/test-helpers.ts +140 -0
  499. package/src/resources/extensions/gsd/tests/token-profile.test.ts +8 -1
  500. package/src/resources/extensions/gsd/tests/triage-resolution.test.ts +50 -2
  501. package/src/resources/extensions/gsd/tests/turn-epoch.test.ts +162 -0
  502. package/src/resources/extensions/gsd/tests/uok-contracts.test.ts +51 -0
  503. package/src/resources/extensions/gsd/tests/uok-execution-graph.test.ts +16 -0
  504. package/src/resources/extensions/gsd/tests/uok-loop-adapter-writer.test.ts +65 -0
  505. package/src/resources/extensions/gsd/tests/uok-parity-report.test.ts +42 -0
  506. package/src/resources/extensions/gsd/tests/uok-plan-v2-wiring.test.ts +19 -2
  507. package/src/resources/extensions/gsd/tests/uok-writer.test.ts +75 -0
  508. package/src/resources/extensions/gsd/tests/validate-extension-package.test.ts +168 -0
  509. package/src/resources/extensions/gsd/tests/validate-milestone.test.ts +11 -0
  510. package/src/resources/extensions/gsd/tests/verify-artifact-tightened.test.ts +6 -5
  511. package/src/resources/extensions/gsd/tests/workflow-mcp.test.ts +25 -2
  512. package/src/resources/extensions/gsd/tests/worktree-health-monorepo.test.ts +2 -2
  513. package/src/resources/extensions/gsd/tests/worktree-nested-git-safety.test.ts +2 -2
  514. package/src/resources/extensions/gsd/tests/worktree-submodule-safety.test.ts +2 -2
  515. package/src/resources/extensions/gsd/tests/worktree-telemetry.test.ts +210 -0
  516. package/src/resources/extensions/gsd/tests/zombie-gsd-state.test.ts +3 -3
  517. package/src/resources/extensions/gsd/tools/complete-slice.ts +38 -0
  518. package/src/resources/extensions/gsd/tools/complete-task.ts +49 -0
  519. package/src/resources/extensions/gsd/tools/validate-milestone.ts +8 -2
  520. package/src/resources/extensions/gsd/uok/audit.ts +20 -2
  521. package/src/resources/extensions/gsd/uok/contracts.ts +65 -0
  522. package/src/resources/extensions/gsd/uok/dispatch-envelope.ts +56 -0
  523. package/src/resources/extensions/gsd/uok/execution-graph.ts +22 -0
  524. package/src/resources/extensions/gsd/uok/gitops.ts +6 -1
  525. package/src/resources/extensions/gsd/uok/loop-adapter.ts +45 -10
  526. package/src/resources/extensions/gsd/uok/parity-report.ts +84 -0
  527. package/src/resources/extensions/gsd/uok/plan-v2.ts +13 -5
  528. package/src/resources/extensions/gsd/uok/writer.ts +113 -0
  529. package/src/resources/extensions/gsd/workflow-logger.ts +22 -3
  530. package/src/resources/extensions/gsd/worktree-manager.ts +54 -0
  531. package/src/resources/extensions/gsd/worktree-resolver.ts +96 -9
  532. package/src/resources/extensions/gsd/worktree-telemetry.ts +322 -0
  533. package/src/resources/extensions/mcp-client/auth.ts +12 -1
  534. package/src/resources/extensions/mcp-client/index.ts +130 -11
  535. package/src/resources/extensions/ollama/index.ts +3 -3
  536. package/src/resources/extensions/ollama/ollama-chat-provider.ts +18 -6
  537. package/src/resources/extensions/remote-questions/config.ts +4 -15
  538. package/src/resources/extensions/search-the-web/index.ts +1 -2
  539. package/src/resources/extensions/shared/cmux-events.ts +59 -0
  540. package/src/resources/extensions/shared/rtk-session-stats.ts +1 -2
  541. package/src/resources/extensions/shared/tests/format-utils.test.ts +3 -5
  542. package/src/resources/extensions/universal-config/index.ts +1 -1
  543. package/src/resources/skills/create-skill/SKILL.md +2 -2
  544. package/src/resources/skills/create-skill/references/gsd-skill-ecosystem.md +4 -4
  545. package/src/resources/skills/create-skill/workflows/audit-skill.md +4 -4
  546. package/src/resources/skills/create-skill/workflows/create-new-skill.md +5 -5
  547. package/dist/web/standalone/.next/server/chunks/7461.js +0 -1
  548. package/dist/web/standalone/.next/static/chunks/2826.d445fb428ef41fa1.js +0 -9
  549. package/packages/gsd-agent-core/dist/agent-session.d.ts +0 -716
  550. package/packages/gsd-agent-core/dist/agent-session.d.ts.map +0 -1
  551. package/packages/gsd-agent-core/dist/agent-session.js +0 -2595
  552. package/packages/gsd-agent-core/dist/agent-session.js.map +0 -1
  553. package/packages/gsd-agent-core/dist/artifact-manager.d.ts +0 -52
  554. package/packages/gsd-agent-core/dist/artifact-manager.d.ts.map +0 -1
  555. package/packages/gsd-agent-core/dist/artifact-manager.js +0 -118
  556. package/packages/gsd-agent-core/dist/artifact-manager.js.map +0 -1
  557. package/packages/gsd-agent-core/dist/bash-executor.d.ts +0 -57
  558. package/packages/gsd-agent-core/dist/bash-executor.d.ts.map +0 -1
  559. package/packages/gsd-agent-core/dist/bash-executor.js +0 -282
  560. package/packages/gsd-agent-core/dist/bash-executor.js.map +0 -1
  561. package/packages/gsd-agent-core/dist/blob-store.d.ts +0 -39
  562. package/packages/gsd-agent-core/dist/blob-store.d.ts.map +0 -1
  563. package/packages/gsd-agent-core/dist/blob-store.js +0 -151
  564. package/packages/gsd-agent-core/dist/blob-store.js.map +0 -1
  565. package/packages/gsd-agent-core/dist/compaction/branch-summarization.d.ts +0 -90
  566. package/packages/gsd-agent-core/dist/compaction/branch-summarization.d.ts.map +0 -1
  567. package/packages/gsd-agent-core/dist/compaction/branch-summarization.js +0 -207
  568. package/packages/gsd-agent-core/dist/compaction/branch-summarization.js.map +0 -1
  569. package/packages/gsd-agent-core/dist/compaction/compaction.d.ts +0 -137
  570. package/packages/gsd-agent-core/dist/compaction/compaction.d.ts.map +0 -1
  571. package/packages/gsd-agent-core/dist/compaction/compaction.js +0 -621
  572. package/packages/gsd-agent-core/dist/compaction/compaction.js.map +0 -1
  573. package/packages/gsd-agent-core/dist/compaction/index.d.ts +0 -7
  574. package/packages/gsd-agent-core/dist/compaction/index.d.ts.map +0 -1
  575. package/packages/gsd-agent-core/dist/compaction/index.js +0 -7
  576. package/packages/gsd-agent-core/dist/compaction/index.js.map +0 -1
  577. package/packages/gsd-agent-core/dist/compaction/utils.d.ts +0 -78
  578. package/packages/gsd-agent-core/dist/compaction/utils.d.ts.map +0 -1
  579. package/packages/gsd-agent-core/dist/compaction/utils.js +0 -263
  580. package/packages/gsd-agent-core/dist/compaction/utils.js.map +0 -1
  581. package/packages/gsd-agent-core/dist/compaction-orchestrator.d.ts +0 -90
  582. package/packages/gsd-agent-core/dist/compaction-orchestrator.d.ts.map +0 -1
  583. package/packages/gsd-agent-core/dist/compaction-orchestrator.js +0 -338
  584. package/packages/gsd-agent-core/dist/compaction-orchestrator.js.map +0 -1
  585. package/packages/gsd-agent-core/dist/contextual-tips.d.ts +0 -43
  586. package/packages/gsd-agent-core/dist/contextual-tips.d.ts.map +0 -1
  587. package/packages/gsd-agent-core/dist/contextual-tips.js +0 -208
  588. package/packages/gsd-agent-core/dist/contextual-tips.js.map +0 -1
  589. package/packages/gsd-agent-core/dist/export-html/ansi-to-html.d.ts +0 -18
  590. package/packages/gsd-agent-core/dist/export-html/ansi-to-html.d.ts.map +0 -1
  591. package/packages/gsd-agent-core/dist/export-html/ansi-to-html.js +0 -250
  592. package/packages/gsd-agent-core/dist/export-html/ansi-to-html.js.map +0 -1
  593. package/packages/gsd-agent-core/dist/export-html/index.d.ts +0 -37
  594. package/packages/gsd-agent-core/dist/export-html/index.d.ts.map +0 -1
  595. package/packages/gsd-agent-core/dist/export-html/index.js +0 -257
  596. package/packages/gsd-agent-core/dist/export-html/index.js.map +0 -1
  597. package/packages/gsd-agent-core/dist/export-html/template.css +0 -971
  598. package/packages/gsd-agent-core/dist/export-html/template.html +0 -54
  599. package/packages/gsd-agent-core/dist/export-html/template.js +0 -1583
  600. package/packages/gsd-agent-core/dist/export-html/tool-renderer.d.ts +0 -38
  601. package/packages/gsd-agent-core/dist/export-html/tool-renderer.d.ts.map +0 -1
  602. package/packages/gsd-agent-core/dist/export-html/tool-renderer.js +0 -70
  603. package/packages/gsd-agent-core/dist/export-html/tool-renderer.js.map +0 -1
  604. package/packages/gsd-agent-core/dist/export-html/vendor/highlight.min.js +0 -1213
  605. package/packages/gsd-agent-core/dist/export-html/vendor/marked.min.js +0 -6
  606. package/packages/gsd-agent-core/dist/fallback-resolver.d.ts +0 -75
  607. package/packages/gsd-agent-core/dist/fallback-resolver.d.ts.map +0 -1
  608. package/packages/gsd-agent-core/dist/fallback-resolver.js +0 -118
  609. package/packages/gsd-agent-core/dist/fallback-resolver.js.map +0 -1
  610. package/packages/gsd-agent-core/dist/image-overflow-recovery.d.ts +0 -44
  611. package/packages/gsd-agent-core/dist/image-overflow-recovery.d.ts.map +0 -1
  612. package/packages/gsd-agent-core/dist/image-overflow-recovery.js +0 -99
  613. package/packages/gsd-agent-core/dist/image-overflow-recovery.js.map +0 -1
  614. package/packages/gsd-agent-core/dist/index.d.ts +0 -14
  615. package/packages/gsd-agent-core/dist/index.d.ts.map +0 -1
  616. package/packages/gsd-agent-core/dist/index.js +0 -19
  617. package/packages/gsd-agent-core/dist/index.js.map +0 -1
  618. package/packages/gsd-agent-core/dist/keybindings.d.ts +0 -47
  619. package/packages/gsd-agent-core/dist/keybindings.d.ts.map +0 -1
  620. package/packages/gsd-agent-core/dist/keybindings.js +0 -156
  621. package/packages/gsd-agent-core/dist/keybindings.js.map +0 -1
  622. package/packages/gsd-agent-core/dist/lifecycle-hooks.d.ts +0 -42
  623. package/packages/gsd-agent-core/dist/lifecycle-hooks.d.ts.map +0 -1
  624. package/packages/gsd-agent-core/dist/lifecycle-hooks.js +0 -204
  625. package/packages/gsd-agent-core/dist/lifecycle-hooks.js.map +0 -1
  626. package/packages/gsd-agent-core/dist/retry-handler.d.ts +0 -128
  627. package/packages/gsd-agent-core/dist/retry-handler.d.ts.map +0 -1
  628. package/packages/gsd-agent-core/dist/retry-handler.js +0 -518
  629. package/packages/gsd-agent-core/dist/retry-handler.js.map +0 -1
  630. package/packages/gsd-agent-core/dist/sdk.d.ts +0 -159
  631. package/packages/gsd-agent-core/dist/sdk.d.ts.map +0 -1
  632. package/packages/gsd-agent-core/dist/sdk.js +0 -375
  633. package/packages/gsd-agent-core/dist/sdk.js.map +0 -1
  634. package/packages/gsd-agent-core/dist/system-prompt.d.ts +0 -28
  635. package/packages/gsd-agent-core/dist/system-prompt.d.ts.map +0 -1
  636. package/packages/gsd-agent-core/dist/system-prompt.js +0 -201
  637. package/packages/gsd-agent-core/dist/system-prompt.js.map +0 -1
  638. package/packages/gsd-agent-core/package.json +0 -25
  639. package/packages/gsd-agent-core/scripts/copy-assets.cjs +0 -43
  640. package/packages/gsd-agent-core/src/agent-session.test.ts +0 -169
  641. package/packages/gsd-agent-core/src/agent-session.ts +0 -3358
  642. package/packages/gsd-agent-core/src/artifact-manager.ts +0 -126
  643. package/packages/gsd-agent-core/src/bash-executor.ts +0 -352
  644. package/packages/gsd-agent-core/src/blob-store.ts +0 -154
  645. package/packages/gsd-agent-core/src/compaction/branch-summarization.ts +0 -317
  646. package/packages/gsd-agent-core/src/compaction/compaction.ts +0 -855
  647. package/packages/gsd-agent-core/src/compaction/index.ts +0 -7
  648. package/packages/gsd-agent-core/src/compaction/utils.ts +0 -312
  649. package/packages/gsd-agent-core/src/compaction-orchestrator.ts +0 -449
  650. package/packages/gsd-agent-core/src/contextual-tips.ts +0 -232
  651. package/packages/gsd-agent-core/src/export-html/ansi-to-html.ts +0 -259
  652. package/packages/gsd-agent-core/src/export-html/index.ts +0 -345
  653. package/packages/gsd-agent-core/src/export-html/template.css +0 -971
  654. package/packages/gsd-agent-core/src/export-html/template.html +0 -54
  655. package/packages/gsd-agent-core/src/export-html/template.js +0 -1583
  656. package/packages/gsd-agent-core/src/export-html/tool-renderer.ts +0 -114
  657. package/packages/gsd-agent-core/src/export-html/vendor/highlight.min.js +0 -1213
  658. package/packages/gsd-agent-core/src/export-html/vendor/marked.min.js +0 -6
  659. package/packages/gsd-agent-core/src/fallback-resolver.ts +0 -193
  660. package/packages/gsd-agent-core/src/image-overflow-recovery.ts +0 -120
  661. package/packages/gsd-agent-core/src/index.ts +0 -68
  662. package/packages/gsd-agent-core/src/keybindings.ts +0 -220
  663. package/packages/gsd-agent-core/src/lifecycle-hooks.ts +0 -284
  664. package/packages/gsd-agent-core/src/retry-handler.ts +0 -620
  665. package/packages/gsd-agent-core/src/sdk.ts +0 -550
  666. package/packages/gsd-agent-core/src/system-prompt.ts +0 -270
  667. package/packages/gsd-agent-core/tsconfig.json +0 -28
  668. package/packages/gsd-agent-core/tsconfig.tsbuildinfo +0 -1
  669. package/packages/gsd-agent-modes/dist/cli/args.d.ts +0 -58
  670. package/packages/gsd-agent-modes/dist/cli/args.d.ts.map +0 -1
  671. package/packages/gsd-agent-modes/dist/cli/args.js +0 -324
  672. package/packages/gsd-agent-modes/dist/cli/args.js.map +0 -1
  673. package/packages/gsd-agent-modes/dist/cli/config-selector.d.ts +0 -13
  674. package/packages/gsd-agent-modes/dist/cli/config-selector.d.ts.map +0 -1
  675. package/packages/gsd-agent-modes/dist/cli/config-selector.js +0 -32
  676. package/packages/gsd-agent-modes/dist/cli/config-selector.js.map +0 -1
  677. package/packages/gsd-agent-modes/dist/cli/file-processor.d.ts +0 -15
  678. package/packages/gsd-agent-modes/dist/cli/file-processor.d.ts.map +0 -1
  679. package/packages/gsd-agent-modes/dist/cli/file-processor.js +0 -86
  680. package/packages/gsd-agent-modes/dist/cli/file-processor.js.map +0 -1
  681. package/packages/gsd-agent-modes/dist/cli/list-models.d.ts +0 -21
  682. package/packages/gsd-agent-modes/dist/cli/list-models.d.ts.map +0 -1
  683. package/packages/gsd-agent-modes/dist/cli/list-models.js +0 -114
  684. package/packages/gsd-agent-modes/dist/cli/list-models.js.map +0 -1
  685. package/packages/gsd-agent-modes/dist/cli/session-picker.d.ts +0 -10
  686. package/packages/gsd-agent-modes/dist/cli/session-picker.d.ts.map +0 -1
  687. package/packages/gsd-agent-modes/dist/cli/session-picker.js +0 -37
  688. package/packages/gsd-agent-modes/dist/cli/session-picker.js.map +0 -1
  689. package/packages/gsd-agent-modes/dist/index.d.ts +0 -7
  690. package/packages/gsd-agent-modes/dist/index.d.ts.map +0 -1
  691. package/packages/gsd-agent-modes/dist/index.js +0 -7
  692. package/packages/gsd-agent-modes/dist/index.js.map +0 -1
  693. package/packages/gsd-agent-modes/dist/main.d.ts +0 -8
  694. package/packages/gsd-agent-modes/dist/main.d.ts.map +0 -1
  695. package/packages/gsd-agent-modes/dist/main.js +0 -491
  696. package/packages/gsd-agent-modes/dist/main.js.map +0 -1
  697. package/packages/gsd-agent-modes/dist/modes/interactive/components/armin.d.ts +0 -34
  698. package/packages/gsd-agent-modes/dist/modes/interactive/components/armin.d.ts.map +0 -1
  699. package/packages/gsd-agent-modes/dist/modes/interactive/components/armin.js +0 -330
  700. package/packages/gsd-agent-modes/dist/modes/interactive/components/armin.js.map +0 -1
  701. package/packages/gsd-agent-modes/dist/modes/interactive/components/assistant-message.d.ts +0 -29
  702. package/packages/gsd-agent-modes/dist/modes/interactive/components/assistant-message.d.ts.map +0 -1
  703. package/packages/gsd-agent-modes/dist/modes/interactive/components/assistant-message.js +0 -141
  704. package/packages/gsd-agent-modes/dist/modes/interactive/components/assistant-message.js.map +0 -1
  705. package/packages/gsd-agent-modes/dist/modes/interactive/components/bash-execution.d.ts +0 -36
  706. package/packages/gsd-agent-modes/dist/modes/interactive/components/bash-execution.d.ts.map +0 -1
  707. package/packages/gsd-agent-modes/dist/modes/interactive/components/bash-execution.js +0 -157
  708. package/packages/gsd-agent-modes/dist/modes/interactive/components/bash-execution.js.map +0 -1
  709. package/packages/gsd-agent-modes/dist/modes/interactive/components/bordered-loader.d.ts +0 -16
  710. package/packages/gsd-agent-modes/dist/modes/interactive/components/bordered-loader.d.ts.map +0 -1
  711. package/packages/gsd-agent-modes/dist/modes/interactive/components/bordered-loader.js +0 -48
  712. package/packages/gsd-agent-modes/dist/modes/interactive/components/bordered-loader.js.map +0 -1
  713. package/packages/gsd-agent-modes/dist/modes/interactive/components/branch-summary-message.d.ts +0 -16
  714. package/packages/gsd-agent-modes/dist/modes/interactive/components/branch-summary-message.d.ts.map +0 -1
  715. package/packages/gsd-agent-modes/dist/modes/interactive/components/branch-summary-message.js +0 -43
  716. package/packages/gsd-agent-modes/dist/modes/interactive/components/branch-summary-message.js.map +0 -1
  717. package/packages/gsd-agent-modes/dist/modes/interactive/components/chat-frame.d.ts +0 -11
  718. package/packages/gsd-agent-modes/dist/modes/interactive/components/chat-frame.d.ts.map +0 -1
  719. package/packages/gsd-agent-modes/dist/modes/interactive/components/chat-frame.js +0 -47
  720. package/packages/gsd-agent-modes/dist/modes/interactive/components/chat-frame.js.map +0 -1
  721. package/packages/gsd-agent-modes/dist/modes/interactive/components/compaction-summary-message.d.ts +0 -16
  722. package/packages/gsd-agent-modes/dist/modes/interactive/components/compaction-summary-message.d.ts.map +0 -1
  723. package/packages/gsd-agent-modes/dist/modes/interactive/components/compaction-summary-message.js +0 -44
  724. package/packages/gsd-agent-modes/dist/modes/interactive/components/compaction-summary-message.js.map +0 -1
  725. package/packages/gsd-agent-modes/dist/modes/interactive/components/config-selector.d.ts +0 -71
  726. package/packages/gsd-agent-modes/dist/modes/interactive/components/config-selector.d.ts.map +0 -1
  727. package/packages/gsd-agent-modes/dist/modes/interactive/components/config-selector.js +0 -474
  728. package/packages/gsd-agent-modes/dist/modes/interactive/components/config-selector.js.map +0 -1
  729. package/packages/gsd-agent-modes/dist/modes/interactive/components/countdown-timer.d.ts +0 -15
  730. package/packages/gsd-agent-modes/dist/modes/interactive/components/countdown-timer.d.ts.map +0 -1
  731. package/packages/gsd-agent-modes/dist/modes/interactive/components/countdown-timer.js +0 -32
  732. package/packages/gsd-agent-modes/dist/modes/interactive/components/countdown-timer.js.map +0 -1
  733. package/packages/gsd-agent-modes/dist/modes/interactive/components/custom-editor.d.ts +0 -22
  734. package/packages/gsd-agent-modes/dist/modes/interactive/components/custom-editor.d.ts.map +0 -1
  735. package/packages/gsd-agent-modes/dist/modes/interactive/components/custom-editor.js +0 -70
  736. package/packages/gsd-agent-modes/dist/modes/interactive/components/custom-editor.js.map +0 -1
  737. package/packages/gsd-agent-modes/dist/modes/interactive/components/custom-message.d.ts +0 -20
  738. package/packages/gsd-agent-modes/dist/modes/interactive/components/custom-message.d.ts.map +0 -1
  739. package/packages/gsd-agent-modes/dist/modes/interactive/components/custom-message.js +0 -75
  740. package/packages/gsd-agent-modes/dist/modes/interactive/components/custom-message.js.map +0 -1
  741. package/packages/gsd-agent-modes/dist/modes/interactive/components/daxnuts.d.ts +0 -23
  742. package/packages/gsd-agent-modes/dist/modes/interactive/components/daxnuts.d.ts.map +0 -1
  743. package/packages/gsd-agent-modes/dist/modes/interactive/components/daxnuts.js +0 -140
  744. package/packages/gsd-agent-modes/dist/modes/interactive/components/daxnuts.js.map +0 -1
  745. package/packages/gsd-agent-modes/dist/modes/interactive/components/diff.d.ts +0 -12
  746. package/packages/gsd-agent-modes/dist/modes/interactive/components/diff.d.ts.map +0 -1
  747. package/packages/gsd-agent-modes/dist/modes/interactive/components/diff.js +0 -133
  748. package/packages/gsd-agent-modes/dist/modes/interactive/components/diff.js.map +0 -1
  749. package/packages/gsd-agent-modes/dist/modes/interactive/components/dynamic-border.d.ts +0 -33
  750. package/packages/gsd-agent-modes/dist/modes/interactive/components/dynamic-border.d.ts.map +0 -1
  751. package/packages/gsd-agent-modes/dist/modes/interactive/components/dynamic-border.js +0 -82
  752. package/packages/gsd-agent-modes/dist/modes/interactive/components/dynamic-border.js.map +0 -1
  753. package/packages/gsd-agent-modes/dist/modes/interactive/components/extension-editor.d.ts +0 -20
  754. package/packages/gsd-agent-modes/dist/modes/interactive/components/extension-editor.d.ts.map +0 -1
  755. package/packages/gsd-agent-modes/dist/modes/interactive/components/extension-editor.js +0 -111
  756. package/packages/gsd-agent-modes/dist/modes/interactive/components/extension-editor.js.map +0 -1
  757. package/packages/gsd-agent-modes/dist/modes/interactive/components/extension-input.d.ts +0 -24
  758. package/packages/gsd-agent-modes/dist/modes/interactive/components/extension-input.d.ts.map +0 -1
  759. package/packages/gsd-agent-modes/dist/modes/interactive/components/extension-input.js +0 -63
  760. package/packages/gsd-agent-modes/dist/modes/interactive/components/extension-input.js.map +0 -1
  761. package/packages/gsd-agent-modes/dist/modes/interactive/components/extension-selector.d.ts +0 -33
  762. package/packages/gsd-agent-modes/dist/modes/interactive/components/extension-selector.d.ts.map +0 -1
  763. package/packages/gsd-agent-modes/dist/modes/interactive/components/extension-selector.js +0 -118
  764. package/packages/gsd-agent-modes/dist/modes/interactive/components/extension-selector.js.map +0 -1
  765. package/packages/gsd-agent-modes/dist/modes/interactive/components/footer.d.ts +0 -32
  766. package/packages/gsd-agent-modes/dist/modes/interactive/components/footer.d.ts.map +0 -1
  767. package/packages/gsd-agent-modes/dist/modes/interactive/components/footer.js +0 -230
  768. package/packages/gsd-agent-modes/dist/modes/interactive/components/footer.js.map +0 -1
  769. package/packages/gsd-agent-modes/dist/modes/interactive/components/index.d.ts +0 -34
  770. package/packages/gsd-agent-modes/dist/modes/interactive/components/index.d.ts.map +0 -1
  771. package/packages/gsd-agent-modes/dist/modes/interactive/components/index.js +0 -36
  772. package/packages/gsd-agent-modes/dist/modes/interactive/components/index.js.map +0 -1
  773. package/packages/gsd-agent-modes/dist/modes/interactive/components/keybinding-hints.d.ts +0 -48
  774. package/packages/gsd-agent-modes/dist/modes/interactive/components/keybinding-hints.d.ts.map +0 -1
  775. package/packages/gsd-agent-modes/dist/modes/interactive/components/keybinding-hints.js +0 -72
  776. package/packages/gsd-agent-modes/dist/modes/interactive/components/keybinding-hints.js.map +0 -1
  777. package/packages/gsd-agent-modes/dist/modes/interactive/components/login-dialog.d.ts +0 -63
  778. package/packages/gsd-agent-modes/dist/modes/interactive/components/login-dialog.d.ts.map +0 -1
  779. package/packages/gsd-agent-modes/dist/modes/interactive/components/login-dialog.js +0 -213
  780. package/packages/gsd-agent-modes/dist/modes/interactive/components/login-dialog.js.map +0 -1
  781. package/packages/gsd-agent-modes/dist/modes/interactive/components/model-selector.d.ts +0 -86
  782. package/packages/gsd-agent-modes/dist/modes/interactive/components/model-selector.d.ts.map +0 -1
  783. package/packages/gsd-agent-modes/dist/modes/interactive/components/model-selector.js +0 -536
  784. package/packages/gsd-agent-modes/dist/modes/interactive/components/model-selector.js.map +0 -1
  785. package/packages/gsd-agent-modes/dist/modes/interactive/components/oauth-selector.d.ts +0 -19
  786. package/packages/gsd-agent-modes/dist/modes/interactive/components/oauth-selector.d.ts.map +0 -1
  787. package/packages/gsd-agent-modes/dist/modes/interactive/components/oauth-selector.js +0 -93
  788. package/packages/gsd-agent-modes/dist/modes/interactive/components/oauth-selector.js.map +0 -1
  789. package/packages/gsd-agent-modes/dist/modes/interactive/components/provider-manager.d.ts +0 -30
  790. package/packages/gsd-agent-modes/dist/modes/interactive/components/provider-manager.d.ts.map +0 -1
  791. package/packages/gsd-agent-modes/dist/modes/interactive/components/provider-manager.js +0 -169
  792. package/packages/gsd-agent-modes/dist/modes/interactive/components/provider-manager.js.map +0 -1
  793. package/packages/gsd-agent-modes/dist/modes/interactive/components/scoped-models-selector.d.ts +0 -49
  794. package/packages/gsd-agent-modes/dist/modes/interactive/components/scoped-models-selector.d.ts.map +0 -1
  795. package/packages/gsd-agent-modes/dist/modes/interactive/components/scoped-models-selector.js +0 -267
  796. package/packages/gsd-agent-modes/dist/modes/interactive/components/scoped-models-selector.js.map +0 -1
  797. package/packages/gsd-agent-modes/dist/modes/interactive/components/session-selector-search.d.ts +0 -21
  798. package/packages/gsd-agent-modes/dist/modes/interactive/components/session-selector-search.d.ts.map +0 -1
  799. package/packages/gsd-agent-modes/dist/modes/interactive/components/session-selector-search.js +0 -155
  800. package/packages/gsd-agent-modes/dist/modes/interactive/components/session-selector-search.js.map +0 -1
  801. package/packages/gsd-agent-modes/dist/modes/interactive/components/session-selector.d.ts +0 -97
  802. package/packages/gsd-agent-modes/dist/modes/interactive/components/session-selector.d.ts.map +0 -1
  803. package/packages/gsd-agent-modes/dist/modes/interactive/components/session-selector.js +0 -810
  804. package/packages/gsd-agent-modes/dist/modes/interactive/components/session-selector.js.map +0 -1
  805. package/packages/gsd-agent-modes/dist/modes/interactive/components/settings-selector.d.ts +0 -71
  806. package/packages/gsd-agent-modes/dist/modes/interactive/components/settings-selector.d.ts.map +0 -1
  807. package/packages/gsd-agent-modes/dist/modes/interactive/components/settings-selector.js +0 -320
  808. package/packages/gsd-agent-modes/dist/modes/interactive/components/settings-selector.js.map +0 -1
  809. package/packages/gsd-agent-modes/dist/modes/interactive/components/show-images-selector.d.ts +0 -10
  810. package/packages/gsd-agent-modes/dist/modes/interactive/components/show-images-selector.d.ts.map +0 -1
  811. package/packages/gsd-agent-modes/dist/modes/interactive/components/show-images-selector.js +0 -34
  812. package/packages/gsd-agent-modes/dist/modes/interactive/components/show-images-selector.js.map +0 -1
  813. package/packages/gsd-agent-modes/dist/modes/interactive/components/skill-invocation-message.d.ts +0 -17
  814. package/packages/gsd-agent-modes/dist/modes/interactive/components/skill-invocation-message.d.ts.map +0 -1
  815. package/packages/gsd-agent-modes/dist/modes/interactive/components/skill-invocation-message.js +0 -46
  816. package/packages/gsd-agent-modes/dist/modes/interactive/components/skill-invocation-message.js.map +0 -1
  817. package/packages/gsd-agent-modes/dist/modes/interactive/components/theme-selector.d.ts +0 -11
  818. package/packages/gsd-agent-modes/dist/modes/interactive/components/theme-selector.d.ts.map +0 -1
  819. package/packages/gsd-agent-modes/dist/modes/interactive/components/theme-selector.js +0 -45
  820. package/packages/gsd-agent-modes/dist/modes/interactive/components/theme-selector.js.map +0 -1
  821. package/packages/gsd-agent-modes/dist/modes/interactive/components/thinking-selector.d.ts +0 -11
  822. package/packages/gsd-agent-modes/dist/modes/interactive/components/thinking-selector.d.ts.map +0 -1
  823. package/packages/gsd-agent-modes/dist/modes/interactive/components/thinking-selector.js +0 -46
  824. package/packages/gsd-agent-modes/dist/modes/interactive/components/thinking-selector.js.map +0 -1
  825. package/packages/gsd-agent-modes/dist/modes/interactive/components/timestamp.d.ts +0 -15
  826. package/packages/gsd-agent-modes/dist/modes/interactive/components/timestamp.d.ts.map +0 -1
  827. package/packages/gsd-agent-modes/dist/modes/interactive/components/timestamp.js +0 -40
  828. package/packages/gsd-agent-modes/dist/modes/interactive/components/timestamp.js.map +0 -1
  829. package/packages/gsd-agent-modes/dist/modes/interactive/components/tool-execution.d.ts +0 -111
  830. package/packages/gsd-agent-modes/dist/modes/interactive/components/tool-execution.d.ts.map +0 -1
  831. package/packages/gsd-agent-modes/dist/modes/interactive/components/tool-execution.js +0 -984
  832. package/packages/gsd-agent-modes/dist/modes/interactive/components/tool-execution.js.map +0 -1
  833. package/packages/gsd-agent-modes/dist/modes/interactive/components/tree-render-utils.d.ts +0 -44
  834. package/packages/gsd-agent-modes/dist/modes/interactive/components/tree-render-utils.d.ts.map +0 -1
  835. package/packages/gsd-agent-modes/dist/modes/interactive/components/tree-render-utils.js +0 -61
  836. package/packages/gsd-agent-modes/dist/modes/interactive/components/tree-render-utils.js.map +0 -1
  837. package/packages/gsd-agent-modes/dist/modes/interactive/components/tree-selector.d.ts +0 -109
  838. package/packages/gsd-agent-modes/dist/modes/interactive/components/tree-selector.d.ts.map +0 -1
  839. package/packages/gsd-agent-modes/dist/modes/interactive/components/tree-selector.js +0 -1035
  840. package/packages/gsd-agent-modes/dist/modes/interactive/components/tree-selector.js.map +0 -1
  841. package/packages/gsd-agent-modes/dist/modes/interactive/components/user-message-selector.d.ts +0 -30
  842. package/packages/gsd-agent-modes/dist/modes/interactive/components/user-message-selector.d.ts.map +0 -1
  843. package/packages/gsd-agent-modes/dist/modes/interactive/components/user-message-selector.js +0 -112
  844. package/packages/gsd-agent-modes/dist/modes/interactive/components/user-message-selector.js.map +0 -1
  845. package/packages/gsd-agent-modes/dist/modes/interactive/components/user-message.d.ts +0 -12
  846. package/packages/gsd-agent-modes/dist/modes/interactive/components/user-message.d.ts.map +0 -1
  847. package/packages/gsd-agent-modes/dist/modes/interactive/components/user-message.js +0 -38
  848. package/packages/gsd-agent-modes/dist/modes/interactive/components/user-message.js.map +0 -1
  849. package/packages/gsd-agent-modes/dist/modes/interactive/components/visual-truncate.d.ts +0 -24
  850. package/packages/gsd-agent-modes/dist/modes/interactive/components/visual-truncate.d.ts.map +0 -1
  851. package/packages/gsd-agent-modes/dist/modes/interactive/components/visual-truncate.js +0 -33
  852. package/packages/gsd-agent-modes/dist/modes/interactive/components/visual-truncate.js.map +0 -1
  853. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.d.ts +0 -27
  854. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.d.ts.map +0 -1
  855. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.js +0 -793
  856. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.js.map +0 -1
  857. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/extension-ui-controller.d.ts +0 -4
  858. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/extension-ui-controller.d.ts.map +0 -1
  859. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/extension-ui-controller.js +0 -62
  860. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/extension-ui-controller.js.map +0 -1
  861. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/input-controller.d.ts +0 -22
  862. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/input-controller.d.ts.map +0 -1
  863. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/input-controller.js +0 -118
  864. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/input-controller.js.map +0 -1
  865. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/model-controller.d.ts +0 -7
  866. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/model-controller.d.ts.map +0 -1
  867. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/model-controller.js +0 -68
  868. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/model-controller.js.map +0 -1
  869. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-state.d.ts +0 -50
  870. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-state.d.ts.map +0 -1
  871. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-state.js +0 -2
  872. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-state.js.map +0 -1
  873. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode.d.ts +0 -358
  874. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode.d.ts.map +0 -1
  875. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode.js +0 -3409
  876. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode.js.map +0 -1
  877. package/packages/gsd-agent-modes/dist/modes/interactive/slash-command-handlers.d.ts +0 -77
  878. package/packages/gsd-agent-modes/dist/modes/interactive/slash-command-handlers.d.ts.map +0 -1
  879. package/packages/gsd-agent-modes/dist/modes/interactive/slash-command-handlers.js +0 -529
  880. package/packages/gsd-agent-modes/dist/modes/interactive/slash-command-handlers.js.map +0 -1
  881. package/packages/gsd-agent-modes/dist/modes/interactive/utils/shorten-path.d.ts +0 -6
  882. package/packages/gsd-agent-modes/dist/modes/interactive/utils/shorten-path.d.ts.map +0 -1
  883. package/packages/gsd-agent-modes/dist/modes/interactive/utils/shorten-path.js +0 -15
  884. package/packages/gsd-agent-modes/dist/modes/interactive/utils/shorten-path.js.map +0 -1
  885. package/packages/gsd-agent-modes/dist/modes/print-mode.d.ts +0 -28
  886. package/packages/gsd-agent-modes/dist/modes/print-mode.d.ts.map +0 -1
  887. package/packages/gsd-agent-modes/dist/modes/print-mode.js +0 -84
  888. package/packages/gsd-agent-modes/dist/modes/print-mode.js.map +0 -1
  889. package/packages/gsd-agent-modes/dist/modes/rpc/jsonl.d.ts +0 -17
  890. package/packages/gsd-agent-modes/dist/modes/rpc/jsonl.d.ts.map +0 -1
  891. package/packages/gsd-agent-modes/dist/modes/rpc/jsonl.js +0 -49
  892. package/packages/gsd-agent-modes/dist/modes/rpc/jsonl.js.map +0 -1
  893. package/packages/gsd-agent-modes/dist/modes/rpc/remote-terminal.d.ts +0 -37
  894. package/packages/gsd-agent-modes/dist/modes/rpc/remote-terminal.d.ts.map +0 -1
  895. package/packages/gsd-agent-modes/dist/modes/rpc/remote-terminal.js +0 -84
  896. package/packages/gsd-agent-modes/dist/modes/rpc/remote-terminal.js.map +0 -1
  897. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-client.d.ts +0 -243
  898. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-client.d.ts.map +0 -1
  899. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-client.js +0 -464
  900. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-client.js.map +0 -1
  901. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-mode.d.ts +0 -25
  902. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-mode.d.ts.map +0 -1
  903. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-mode.js +0 -750
  904. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-mode.js.map +0 -1
  905. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-types.d.ts +0 -511
  906. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-types.d.ts.map +0 -1
  907. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-types.js +0 -8
  908. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-types.js.map +0 -1
  909. package/packages/gsd-agent-modes/dist/modes/shared/command-context-actions.d.ts +0 -19
  910. package/packages/gsd-agent-modes/dist/modes/shared/command-context-actions.d.ts.map +0 -1
  911. package/packages/gsd-agent-modes/dist/modes/shared/command-context-actions.js +0 -45
  912. package/packages/gsd-agent-modes/dist/modes/shared/command-context-actions.js.map +0 -1
  913. package/packages/gsd-agent-modes/dist/pi-coding-agent-compat.d.ts +0 -22
  914. package/packages/gsd-agent-modes/dist/pi-coding-agent-compat.d.ts.map +0 -1
  915. package/packages/gsd-agent-modes/dist/pi-coding-agent-compat.js +0 -21
  916. package/packages/gsd-agent-modes/dist/pi-coding-agent-compat.js.map +0 -1
  917. package/packages/gsd-agent-modes/dist/pi-tui-compat.d.ts +0 -4
  918. package/packages/gsd-agent-modes/dist/pi-tui-compat.d.ts.map +0 -1
  919. package/packages/gsd-agent-modes/dist/pi-tui-compat.js +0 -3
  920. package/packages/gsd-agent-modes/dist/pi-tui-compat.js.map +0 -1
  921. package/packages/gsd-agent-modes/dist/theme.d.ts +0 -15
  922. package/packages/gsd-agent-modes/dist/theme.d.ts.map +0 -1
  923. package/packages/gsd-agent-modes/dist/theme.js +0 -23
  924. package/packages/gsd-agent-modes/dist/theme.js.map +0 -1
  925. package/packages/gsd-agent-modes/dist/utils/theme.d.ts +0 -16
  926. package/packages/gsd-agent-modes/dist/utils/theme.d.ts.map +0 -1
  927. package/packages/gsd-agent-modes/dist/utils/theme.js +0 -11
  928. package/packages/gsd-agent-modes/dist/utils/theme.js.map +0 -1
  929. package/packages/gsd-agent-modes/package.json +0 -23
  930. package/packages/gsd-agent-modes/src/cli/args.ts +0 -350
  931. package/packages/gsd-agent-modes/src/cli/config-selector.ts +0 -54
  932. package/packages/gsd-agent-modes/src/cli/file-processor.ts +0 -107
  933. package/packages/gsd-agent-modes/src/cli/list-models.ts +0 -141
  934. package/packages/gsd-agent-modes/src/cli/session-picker.ts +0 -59
  935. package/packages/gsd-agent-modes/src/index.ts +0 -6
  936. package/packages/gsd-agent-modes/src/main.ts +0 -614
  937. package/packages/gsd-agent-modes/src/modes/interactive/components/__tests__/login-dialog.test.ts +0 -24
  938. package/packages/gsd-agent-modes/src/modes/interactive/components/__tests__/provider-display-name.test.ts +0 -18
  939. package/packages/gsd-agent-modes/src/modes/interactive/components/__tests__/timestamp.test.ts +0 -38
  940. package/packages/gsd-agent-modes/src/modes/interactive/components/__tests__/tool-execution.test.ts +0 -171
  941. package/packages/gsd-agent-modes/src/modes/interactive/components/armin.ts +0 -382
  942. package/packages/gsd-agent-modes/src/modes/interactive/components/assistant-message.ts +0 -178
  943. package/packages/gsd-agent-modes/src/modes/interactive/components/bash-execution.ts +0 -212
  944. package/packages/gsd-agent-modes/src/modes/interactive/components/bordered-loader.ts +0 -66
  945. package/packages/gsd-agent-modes/src/modes/interactive/components/branch-summary-message.ts +0 -59
  946. package/packages/gsd-agent-modes/src/modes/interactive/components/chat-frame.ts +0 -67
  947. package/packages/gsd-agent-modes/src/modes/interactive/components/compaction-summary-message.ts +0 -60
  948. package/packages/gsd-agent-modes/src/modes/interactive/components/config-selector.ts +0 -597
  949. package/packages/gsd-agent-modes/src/modes/interactive/components/countdown-timer.ts +0 -41
  950. package/packages/gsd-agent-modes/src/modes/interactive/components/custom-editor.ts +0 -88
  951. package/packages/gsd-agent-modes/src/modes/interactive/components/custom-message.ts +0 -100
  952. package/packages/gsd-agent-modes/src/modes/interactive/components/daxnuts.ts +0 -165
  953. package/packages/gsd-agent-modes/src/modes/interactive/components/diff.ts +0 -147
  954. package/packages/gsd-agent-modes/src/modes/interactive/components/dynamic-border.test.ts +0 -73
  955. package/packages/gsd-agent-modes/src/modes/interactive/components/dynamic-border.ts +0 -89
  956. package/packages/gsd-agent-modes/src/modes/interactive/components/extension-editor.ts +0 -151
  957. package/packages/gsd-agent-modes/src/modes/interactive/components/extension-input.ts +0 -100
  958. package/packages/gsd-agent-modes/src/modes/interactive/components/extension-selector.ts +0 -156
  959. package/packages/gsd-agent-modes/src/modes/interactive/components/footer.ts +0 -257
  960. package/packages/gsd-agent-modes/src/modes/interactive/components/index.ts +0 -35
  961. package/packages/gsd-agent-modes/src/modes/interactive/components/keybinding-hints.ts +0 -84
  962. package/packages/gsd-agent-modes/src/modes/interactive/components/login-dialog.ts +0 -257
  963. package/packages/gsd-agent-modes/src/modes/interactive/components/model-selector.ts +0 -656
  964. package/packages/gsd-agent-modes/src/modes/interactive/components/oauth-selector.ts +0 -122
  965. package/packages/gsd-agent-modes/src/modes/interactive/components/provider-manager.ts +0 -210
  966. package/packages/gsd-agent-modes/src/modes/interactive/components/scoped-models-selector.ts +0 -342
  967. package/packages/gsd-agent-modes/src/modes/interactive/components/session-selector-search.ts +0 -194
  968. package/packages/gsd-agent-modes/src/modes/interactive/components/session-selector.ts +0 -1011
  969. package/packages/gsd-agent-modes/src/modes/interactive/components/settings-selector.ts +0 -452
  970. package/packages/gsd-agent-modes/src/modes/interactive/components/show-images-selector.ts +0 -45
  971. package/packages/gsd-agent-modes/src/modes/interactive/components/skill-invocation-message.ts +0 -56
  972. package/packages/gsd-agent-modes/src/modes/interactive/components/theme-selector.ts +0 -63
  973. package/packages/gsd-agent-modes/src/modes/interactive/components/thinking-selector.ts +0 -64
  974. package/packages/gsd-agent-modes/src/modes/interactive/components/timestamp.ts +0 -48
  975. package/packages/gsd-agent-modes/src/modes/interactive/components/tool-execution.ts +0 -1157
  976. package/packages/gsd-agent-modes/src/modes/interactive/components/tree-render-utils.ts +0 -81
  977. package/packages/gsd-agent-modes/src/modes/interactive/components/tree-selector.ts +0 -1208
  978. package/packages/gsd-agent-modes/src/modes/interactive/components/user-message-selector.ts +0 -145
  979. package/packages/gsd-agent-modes/src/modes/interactive/components/user-message.ts +0 -44
  980. package/packages/gsd-agent-modes/src/modes/interactive/components/visual-truncate.ts +0 -50
  981. package/packages/gsd-agent-modes/src/modes/interactive/controllers/chat-controller-ordering.test.ts +0 -1430
  982. package/packages/gsd-agent-modes/src/modes/interactive/controllers/chat-controller.test.ts +0 -71
  983. package/packages/gsd-agent-modes/src/modes/interactive/controllers/chat-controller.ts +0 -957
  984. package/packages/gsd-agent-modes/src/modes/interactive/controllers/extension-ui-controller.ts +0 -63
  985. package/packages/gsd-agent-modes/src/modes/interactive/controllers/input-controller.test.ts +0 -183
  986. package/packages/gsd-agent-modes/src/modes/interactive/controllers/input-controller.ts +0 -140
  987. package/packages/gsd-agent-modes/src/modes/interactive/controllers/model-controller.ts +0 -77
  988. package/packages/gsd-agent-modes/src/modes/interactive/interactive-mode-ordering.test.ts +0 -44
  989. package/packages/gsd-agent-modes/src/modes/interactive/interactive-mode-state.ts +0 -49
  990. package/packages/gsd-agent-modes/src/modes/interactive/interactive-mode.ts +0 -4195
  991. package/packages/gsd-agent-modes/src/modes/interactive/slash-command-handlers.ts +0 -670
  992. package/packages/gsd-agent-modes/src/modes/interactive/utils/shorten-path.ts +0 -14
  993. package/packages/gsd-agent-modes/src/modes/print-mode.ts +0 -106
  994. package/packages/gsd-agent-modes/src/modes/rpc/jsonl.ts +0 -58
  995. package/packages/gsd-agent-modes/src/modes/rpc/remote-terminal.ts +0 -109
  996. package/packages/gsd-agent-modes/src/modes/rpc/rpc-client.ts +0 -572
  997. package/packages/gsd-agent-modes/src/modes/rpc/rpc-mode.ts +0 -902
  998. package/packages/gsd-agent-modes/src/modes/rpc/rpc-protocol-v2.test.ts +0 -971
  999. package/packages/gsd-agent-modes/src/modes/rpc/rpc-types.ts +0 -335
  1000. package/packages/gsd-agent-modes/src/modes/shared/command-context-actions.ts +0 -53
  1001. package/packages/gsd-agent-modes/src/pi-coding-agent-compat.ts +0 -42
  1002. package/packages/gsd-agent-modes/src/pi-tui-compat.ts +0 -4
  1003. package/packages/gsd-agent-modes/src/theme.ts +0 -25
  1004. package/packages/gsd-agent-modes/src/utils/theme.ts +0 -24
  1005. package/packages/gsd-agent-modes/tsconfig.json +0 -28
  1006. package/packages/gsd-agent-modes/tsconfig.tsbuildinfo +0 -1
  1007. package/packages/gsd-agent-types/dist/index.d.ts +0 -176
  1008. package/packages/gsd-agent-types/dist/index.d.ts.map +0 -1
  1009. package/packages/gsd-agent-types/dist/index.js +0 -24
  1010. package/packages/gsd-agent-types/dist/index.js.map +0 -1
  1011. package/packages/gsd-agent-types/package.json +0 -24
  1012. package/packages/gsd-agent-types/src/index.ts +0 -206
  1013. package/packages/gsd-agent-types/tsconfig.json +0 -25
  1014. package/packages/gsd-agent-types/tsconfig.tsbuildinfo +0 -1
  1015. package/packages/native/dist/tsconfig.tsbuildinfo +0 -1
  1016. package/src/resources/extensions/claude-code-cli/tests/provider-registration.test.ts +0 -27
  1017. /package/dist/web/standalone/.next/static/{gy6_foLMsEzdGBT19c3hr → Cev5xrAYA3ZGTRLyjR2fX}/_buildManifest.js +0 -0
  1018. /package/dist/web/standalone/.next/static/{gy6_foLMsEzdGBT19c3hr → Cev5xrAYA3ZGTRLyjR2fX}/_ssgManifest.js +0 -0
@@ -1,1157 +0,0 @@
1
- import {
2
- Box,
3
- Container,
4
- getCapabilities,
5
- Image,
6
- type ImageDimensions,
7
- imageFallback,
8
- Spacer,
9
- Text,
10
- type TUI,
11
- truncateToWidth,
12
- } from "@gsd/pi-tui";
13
- import stripAnsi from "strip-ansi";
14
- import type { ToolDefinition } from "@gsd/agent-types";
15
- import type { EditDiffError, EditDiffResult } from "@gsd/agent-types";
16
- import { DEFAULT_MAX_BYTES, DEFAULT_MAX_LINES, formatSize } from "@gsd/pi-coding-agent";
17
- import { getLanguageFromPath, highlightCode } from "@gsd/pi-coding-agent";
18
- import { allTools, computeEditDiff, convertToPng, sanitizeBinaryOutput } from "../../../pi-coding-agent-compat.js";
19
- import { theme } from "../../../theme.js";
20
- import { shortenPath } from "../utils/shorten-path.js";
21
- import { renderDiff } from "./diff.js";
22
- import { keyHint } from "./keybinding-hints.js";
23
- import { truncateToVisualLines } from "./visual-truncate.js";
24
-
25
- // Preview line limit for bash when not expanded
26
- const BASH_PREVIEW_LINES = 5;
27
- // During partial write tool-call streaming, re-highlight the first N lines fully
28
- // to keep multiline tokenization mostly correct without re-highlighting the full file.
29
- const WRITE_PARTIAL_FULL_HIGHLIGHT_LINES = 50;
30
-
31
- /**
32
- * Replace tabs with spaces for consistent rendering
33
- */
34
- function replaceTabs(text: string): string {
35
- return text.replace(/\t/g, " ");
36
- }
37
-
38
- /**
39
- * Normalize control characters for terminal preview rendering.
40
- * Keep tool arguments unchanged, sanitize only display text.
41
- */
42
- function normalizeDisplayText(text: string): string {
43
- return text.replace(/\r/g, "");
44
- }
45
-
46
- /** Safely coerce value to string for display. Returns null if invalid type. */
47
- function str(value: unknown): string | null {
48
- if (typeof value === "string") return value;
49
- if (value == null) return "";
50
- return null; // Invalid type
51
- }
52
-
53
- /**
54
- * Split a Claude Code MCP tool name (`mcp__<server>__<tool>`) into its parts.
55
- * Returns null for non-prefixed names. Duplicated from the claude-code-cli
56
- * extension (parseMcpToolName) so this package doesn't have to import across
57
- * the resources/extensions boundary.
58
- */
59
- function parseMcpToolName(name: string): { server: string; tool: string } | null {
60
- if (!name.startsWith("mcp__")) return null;
61
- const rest = name.slice("mcp__".length);
62
- const delim = rest.indexOf("__");
63
- if (delim <= 0 || delim === rest.length - 2) return null;
64
- return { server: rest.slice(0, delim), tool: rest.slice(delim + 2) };
65
- }
66
-
67
- const COMPACT_ARG_VALUE_LIMIT = 60;
68
- const GENERIC_OUTPUT_PREVIEW_LINES = 10;
69
- const GENERIC_ARGS_JSON_PREVIEW_LINES = 10;
70
-
71
- /**
72
- * Format tool args for the generic-renderer fallback. Produces a one-line
73
- * `k=v, k=v` summary when every value is a primitive that fits inline; falls
74
- * back to a truncated JSON dump for structurally complex args.
75
- */
76
- function formatCompactArgs(args: unknown, expanded: boolean): string {
77
- if (args == null) return "";
78
- if (typeof args !== "object") return String(args);
79
-
80
- const entries = Object.entries(args as Record<string, unknown>);
81
- if (entries.length === 0) return "";
82
-
83
- const allPrimitive = entries.every(([, value]) => {
84
- const t = typeof value;
85
- if (t === "number" || t === "boolean") return true;
86
- if (t === "string") return (value as string).length <= COMPACT_ARG_VALUE_LIMIT;
87
- return value == null;
88
- });
89
-
90
- if (allPrimitive) {
91
- return entries
92
- .map(([key, value]) => {
93
- if (typeof value === "string") return `${key}=${JSON.stringify(value)}`;
94
- if (value == null) return `${key}=null`;
95
- return `${key}=${String(value)}`;
96
- })
97
- .join(", ");
98
- }
99
-
100
- // Complex args: show truncated JSON.
101
- const lines = JSON.stringify(args, null, 2).split("\n");
102
- const maxLines = expanded ? lines.length : GENERIC_ARGS_JSON_PREVIEW_LINES;
103
- if (lines.length <= maxLines) return lines.join("\n");
104
- return lines.slice(0, maxLines).join("\n") + "\n...";
105
- }
106
-
107
- export interface ToolExecutionOptions {
108
- showImages?: boolean; // default: true (only used if terminal supports images)
109
- }
110
-
111
- type WriteHighlightCache = {
112
- rawPath: string | null;
113
- lang: string;
114
- rawContent: string;
115
- normalizedLines: string[];
116
- highlightedLines: string[];
117
- };
118
-
119
- type ToolTruncationDetails = {
120
- truncated?: boolean;
121
- truncatedBy?: string;
122
- outputLines?: number;
123
- totalLines?: number;
124
- maxBytes?: number;
125
- maxLines?: number;
126
- firstLineExceedsLimit?: boolean;
127
- };
128
-
129
- type ToolResultDetails = {
130
- truncation?: ToolTruncationDetails;
131
- fullOutputPath?: string;
132
- firstChangedLine?: number;
133
- diff?: string;
134
- entryLimitReached?: number;
135
- resultLimitReached?: number;
136
- matchLimitReached?: number;
137
- linesTruncated?: boolean;
138
- [key: string]: unknown;
139
- };
140
-
141
- /**
142
- * Component that renders a tool call with its result (updateable)
143
- */
144
- export class ToolExecutionComponent extends Container {
145
- private contentBox: Box; // Used for custom tools and bash visual truncation
146
- private contentText: Text; // For built-in tools (with its own padding/bg)
147
- private imageComponents: Image[] = [];
148
- private imageSpacers: Spacer[] = [];
149
- private toolName: string;
150
- private args: Record<string, unknown>;
151
- private expanded = false;
152
- private showImages: boolean;
153
- private isPartial = true;
154
- private toolDefinition?: ToolDefinition;
155
- private ui: TUI;
156
- private cwd: string;
157
- private result?: {
158
- content: Array<{ type: string; text?: string; data?: string; mimeType?: string }>;
159
- isError: boolean;
160
- details?: ToolResultDetails;
161
- };
162
- // Cached edit diff preview (computed when args arrive, before tool executes)
163
- private editDiffPreview?: EditDiffResult | EditDiffError;
164
- private editDiffArgsKey?: string; // Track which args the preview is for
165
- // Cached converted images for Kitty protocol (which requires PNG), keyed by index
166
- private convertedImages: Map<number, { data: string; mimeType: string }> = new Map();
167
- // Cached resolved image dimensions to avoid re-triggering async parsing
168
- // when updateDisplay() recreates Image components (#3455).
169
- private resolvedImageDimensions: Map<number, ImageDimensions> = new Map();
170
- // Incremental syntax highlighting cache for write tool call args
171
- private writeHighlightCache?: WriteHighlightCache;
172
- // When true, this component intentionally renders no lines
173
- private hideComponent = false;
174
-
175
- private get normalizedToolName(): string {
176
- return typeof this.toolName === "string" ? this.toolName.toLowerCase() : "";
177
- }
178
-
179
- constructor(
180
- toolName: string,
181
- args: Record<string, unknown>,
182
- options: ToolExecutionOptions = {},
183
- toolDefinition: ToolDefinition | undefined,
184
- ui: TUI,
185
- cwd: string = process.cwd(),
186
- ) {
187
- super();
188
- this.toolName = toolName;
189
- this.args = args;
190
- this.showImages = options.showImages ?? true;
191
- this.toolDefinition = toolDefinition;
192
- this.ui = ui;
193
- this.cwd = cwd;
194
-
195
- this.addChild(new Spacer(1));
196
-
197
- // Always create both - contentBox for custom tools/bash, contentText for other built-ins
198
- this.contentBox = new Box(1, 1, (text: string) => theme.bg("toolPendingBg", text));
199
- this.contentText = new Text("", 1, 1, (text: string) => theme.bg("toolPendingBg", text));
200
-
201
- // Use contentBox for bash (visual truncation) or custom tools with custom renderers
202
- // Use contentText for built-in tools (including overrides without custom renderers)
203
- if (this.normalizedToolName === "bash" || (toolDefinition && !this.shouldUseBuiltInRenderer())) {
204
- this.addChild(this.contentBox);
205
- } else {
206
- this.addChild(this.contentText);
207
- }
208
-
209
- this.updateDisplay();
210
- }
211
-
212
- /**
213
- * Check if we should use built-in rendering for this tool.
214
- * Returns true if the tool name is a built-in AND either there's no toolDefinition
215
- * or the toolDefinition doesn't provide custom renderers.
216
- */
217
- private shouldUseBuiltInRenderer(): boolean {
218
- const normalizedToolName = this.normalizedToolName;
219
- const isBuiltInName = normalizedToolName in allTools;
220
- const hasCustomRenderers = this.toolDefinition?.renderCall || this.toolDefinition?.renderResult;
221
- return isBuiltInName && !hasCustomRenderers;
222
- }
223
-
224
- dispose(): void {
225
- this.convertedImages.clear();
226
- this.imageComponents = [];
227
- this.imageSpacers = [];
228
- this.editDiffPreview = undefined;
229
- this.writeHighlightCache = undefined;
230
- this.result = undefined;
231
- }
232
-
233
- updateArgs(args: Record<string, unknown>): void {
234
- this.args = args;
235
- if (this.normalizedToolName === "write" && this.isPartial) {
236
- this.updateWriteHighlightCacheIncremental();
237
- }
238
- this.updateDisplay();
239
- }
240
-
241
- private highlightSingleLine(line: string, lang: string): string {
242
- const highlighted = highlightCode(line, lang);
243
- return highlighted[0] ?? "";
244
- }
245
-
246
- private refreshWriteHighlightPrefix(cache: WriteHighlightCache): void {
247
- const prefixCount = Math.min(WRITE_PARTIAL_FULL_HIGHLIGHT_LINES, cache.normalizedLines.length);
248
- if (prefixCount === 0) return;
249
-
250
- const prefixSource = cache.normalizedLines.slice(0, prefixCount).join("\n");
251
- const prefixHighlighted = highlightCode(prefixSource, cache.lang);
252
- for (let i = 0; i < prefixCount; i++) {
253
- cache.highlightedLines[i] =
254
- prefixHighlighted[i] ?? this.highlightSingleLine(cache.normalizedLines[i] ?? "", cache.lang);
255
- }
256
- }
257
-
258
- private rebuildWriteHighlightCacheFull(rawPath: string | null, fileContent: string): void {
259
- const lang = rawPath ? getLanguageFromPath(rawPath) : undefined;
260
- if (!lang) {
261
- this.writeHighlightCache = undefined;
262
- return;
263
- }
264
-
265
- const displayContent = normalizeDisplayText(fileContent);
266
- const normalized = replaceTabs(displayContent);
267
- this.writeHighlightCache = {
268
- rawPath,
269
- lang,
270
- rawContent: fileContent,
271
- normalizedLines: normalized.split("\n"),
272
- highlightedLines: highlightCode(normalized, lang),
273
- };
274
- }
275
-
276
- private updateWriteHighlightCacheIncremental(): void {
277
- const rawPath = str(this.args?.file_path ?? this.args?.path);
278
- const fileContent = str(this.args?.content);
279
- if (rawPath === null || fileContent === null) {
280
- this.writeHighlightCache = undefined;
281
- return;
282
- }
283
-
284
- const lang = rawPath ? getLanguageFromPath(rawPath) : undefined;
285
- if (!lang) {
286
- this.writeHighlightCache = undefined;
287
- return;
288
- }
289
-
290
- if (!this.writeHighlightCache) {
291
- this.rebuildWriteHighlightCacheFull(rawPath, fileContent);
292
- return;
293
- }
294
-
295
- const cache = this.writeHighlightCache;
296
- if (cache.lang !== lang || cache.rawPath !== rawPath) {
297
- this.rebuildWriteHighlightCacheFull(rawPath, fileContent);
298
- return;
299
- }
300
-
301
- if (!fileContent.startsWith(cache.rawContent)) {
302
- this.rebuildWriteHighlightCacheFull(rawPath, fileContent);
303
- return;
304
- }
305
-
306
- if (fileContent.length === cache.rawContent.length) {
307
- return;
308
- }
309
-
310
- const deltaRaw = fileContent.slice(cache.rawContent.length);
311
- const deltaDisplay = normalizeDisplayText(deltaRaw);
312
- const deltaNormalized = replaceTabs(deltaDisplay);
313
- cache.rawContent = fileContent;
314
-
315
- if (cache.normalizedLines.length === 0) {
316
- cache.normalizedLines.push("");
317
- cache.highlightedLines.push("");
318
- }
319
-
320
- const segments = deltaNormalized.split("\n");
321
- const lastIndex = cache.normalizedLines.length - 1;
322
- cache.normalizedLines[lastIndex] += segments[0];
323
- cache.highlightedLines[lastIndex] = this.highlightSingleLine(cache.normalizedLines[lastIndex], cache.lang);
324
-
325
- for (let i = 1; i < segments.length; i++) {
326
- cache.normalizedLines.push(segments[i]);
327
- cache.highlightedLines.push(this.highlightSingleLine(segments[i], cache.lang));
328
- }
329
-
330
- this.refreshWriteHighlightPrefix(cache);
331
- }
332
-
333
- /**
334
- * Signal that args are complete (tool is about to execute).
335
- * This triggers diff computation for edit tool.
336
- */
337
- setArgsComplete(): void {
338
- if (this.toolName === "write") {
339
- const rawPath = str(this.args?.file_path ?? this.args?.path);
340
- const fileContent = str(this.args?.content);
341
- if (rawPath !== null && fileContent !== null) {
342
- this.rebuildWriteHighlightCacheFull(rawPath, fileContent);
343
- }
344
- }
345
- this.maybeComputeEditDiff();
346
- }
347
-
348
- /**
349
- * Compute edit diff preview when we have complete args.
350
- * This runs async and updates display when done.
351
- * Handles both single-edit format (oldText/newText) and multi-edit format (edits[]).
352
- */
353
- private maybeComputeEditDiff(): void {
354
- if (this.toolName !== "edit") return;
355
-
356
- const path = str(this.args?.path);
357
-
358
- if (!path) return;
359
-
360
- const oldText = this.args?.oldText;
361
- const newText = this.args?.newText;
362
- const edits = this.args?.edits;
363
-
364
- if (typeof oldText === "string" && typeof newText === "string") {
365
- // Single-edit path: oldText + newText at top level
366
- const argsKey = JSON.stringify({ path, oldText, newText });
367
- if (this.editDiffArgsKey === argsKey) return;
368
- this.editDiffArgsKey = argsKey;
369
-
370
- computeEditDiff(path, oldText, newText, this.cwd).then((result) => {
371
- if (this.editDiffArgsKey === argsKey) {
372
- this.editDiffPreview = result;
373
- this.updateDisplay();
374
- this.ui.requestRender();
375
- }
376
- });
377
- } else if (Array.isArray(edits)) {
378
- // Multi-edit path: edits[] array format
379
- // Validate each element has oldText and newText strings before passing to computeEditDiff
380
- const firstValidEdit = edits.find(
381
- (e): e is { oldText: string; newText: string } =>
382
- e !== null &&
383
- typeof e === "object" &&
384
- typeof e.oldText === "string" &&
385
- typeof e.newText === "string",
386
- );
387
- if (!firstValidEdit) return;
388
-
389
- const argsKey = JSON.stringify({ path, edits });
390
- if (this.editDiffArgsKey === argsKey) return;
391
- this.editDiffArgsKey = argsKey;
392
-
393
- // Preview the first edit; subsequent edits will be reflected in the post-execution diff
394
- computeEditDiff(path, firstValidEdit.oldText, firstValidEdit.newText, this.cwd).then((result) => {
395
- if (this.editDiffArgsKey === argsKey) {
396
- this.editDiffPreview = result;
397
- this.updateDisplay();
398
- this.ui.requestRender();
399
- }
400
- });
401
- }
402
- }
403
-
404
- updateResult(
405
- result: {
406
- content: Array<{ type: string; text?: string; data?: string; mimeType?: string }>;
407
- details?: ToolResultDetails;
408
- isError: boolean;
409
- },
410
- isPartial = false,
411
- ): void {
412
- this.result = result;
413
- this.isPartial = isPartial;
414
- if (this.normalizedToolName === "write" && !isPartial) {
415
- const rawPath = str(this.args?.file_path ?? this.args?.path);
416
- const fileContent = str(this.args?.content);
417
- if (rawPath !== null && fileContent !== null) {
418
- this.rebuildWriteHighlightCacheFull(rawPath, fileContent);
419
- }
420
- }
421
- this.updateDisplay();
422
- // Convert non-PNG images to PNG for Kitty protocol (async)
423
- this.maybeConvertImagesForKitty();
424
- }
425
-
426
- /**
427
- * Mark a pending tool call as finished with no result (e.g., squashed by compaction).
428
- * Stops the "Running" indicator without providing a result.
429
- */
430
- markHistoricalNoResult(): void {
431
- this.isPartial = false;
432
- this.updateDisplay();
433
- }
434
-
435
- /**
436
- * Finalize a pending tool call as failed/interrupted while preserving any streamed partial output.
437
- */
438
- completeWithError(message?: string): void {
439
- this.isPartial = false;
440
- if (this.result) {
441
- let content = this.result.content;
442
- if (message) {
443
- const alreadyHasMessage = content.some((block) => block.type === "text" && block.text === message);
444
- if (!alreadyHasMessage) {
445
- content = [...content, { type: "text", text: message }];
446
- }
447
- }
448
- this.result = { ...this.result, content, isError: true };
449
- } else {
450
- this.result = {
451
- content: message ? [{ type: "text", text: message }] : [],
452
- isError: true,
453
- };
454
- }
455
- this.updateDisplay();
456
- }
457
-
458
- /**
459
- * Convert non-PNG images to PNG for Kitty graphics protocol.
460
- * Kitty requires PNG format (f=100), so JPEG/GIF/WebP won't display.
461
- */
462
- private maybeConvertImagesForKitty(): void {
463
- const caps = getCapabilities();
464
- // Only needed for Kitty protocol
465
- if (caps.images !== "kitty") return;
466
- if (!this.result) return;
467
-
468
- const imageBlocks = this.result.content?.filter((c) => c.type === "image") || [];
469
-
470
- for (let i = 0; i < imageBlocks.length; i++) {
471
- const img = imageBlocks[i];
472
- if (!img.data || !img.mimeType) continue;
473
- // Skip if already PNG or already converted
474
- if (img.mimeType === "image/png") continue;
475
- if (this.convertedImages.has(i)) continue;
476
-
477
- // Convert async
478
- const index = i;
479
- convertToPng(img.data, img.mimeType).then((converted) => {
480
- if (converted) {
481
- this.convertedImages.set(index, converted);
482
- this.updateDisplay();
483
- this.ui.requestRender();
484
- }
485
- });
486
- }
487
- }
488
-
489
- setExpanded(expanded: boolean): void {
490
- this.expanded = expanded;
491
- this.updateDisplay();
492
- }
493
-
494
- setShowImages(show: boolean): void {
495
- this.showImages = show;
496
- this.updateDisplay();
497
- }
498
-
499
- override invalidate(): void {
500
- super.invalidate();
501
- this.updateDisplay();
502
- }
503
-
504
- override render(width: number): string[] {
505
- if (this.hideComponent) {
506
- return [];
507
- }
508
- return super.render(width);
509
- }
510
-
511
- private updateDisplay(): void {
512
- // Set background based on state
513
- const bgFn = this.isPartial
514
- ? (text: string) => theme.bg("toolPendingBg", text)
515
- : this.result?.isError
516
- ? (text: string) => theme.bg("toolErrorBg", text)
517
- : (text: string) => theme.bg("toolSuccessBg", text);
518
-
519
- const useBuiltInRenderer = this.shouldUseBuiltInRenderer();
520
- let customRendererHasContent = false;
521
- this.hideComponent = false;
522
-
523
- // Use built-in rendering for built-in tools (or overrides without custom renderers)
524
- if (useBuiltInRenderer) {
525
- if (this.normalizedToolName === "bash") {
526
- // Bash uses Box with visual line truncation
527
- this.contentBox.setBgFn(bgFn);
528
- this.contentBox.clear();
529
- this.renderBashContent();
530
- } else {
531
- // Other built-in tools: use Text directly with caching
532
- this.contentText.setCustomBgFn(bgFn);
533
- this.contentText.setText(this.formatToolExecution());
534
- }
535
- } else if (this.toolDefinition) {
536
- // Custom tools use Box for flexible component rendering
537
- this.contentBox.setBgFn(bgFn);
538
- this.contentBox.clear();
539
-
540
- // Render call component
541
- if (this.toolDefinition.renderCall) {
542
- try {
543
- const renderContext = {
544
- args: this.args,
545
- toolCallId: "",
546
- invalidate: () => this.updateDisplay(),
547
- lastComponent: undefined,
548
- state: undefined,
549
- cwd: this.cwd,
550
- executionStarted: !this.isPartial,
551
- argsComplete: true,
552
- isPartial: this.isPartial,
553
- expanded: this.expanded,
554
- showImages: this.showImages,
555
- isError: this.result?.isError ?? false,
556
- };
557
- // vendor-seam: dual-module-path -- ToolDefinition.renderCall signature diverges between pi dist and GSD usage
558
- const callComponent = (this.toolDefinition.renderCall as unknown as (...a: unknown[]) => Container | undefined)(this.args, theme, renderContext);
559
- if (callComponent !== undefined) {
560
- this.contentBox.addChild(callComponent);
561
- customRendererHasContent = true;
562
- }
563
- } catch {
564
- // Fall back to default on error
565
- this.contentBox.addChild(new Text(theme.fg("toolTitle", theme.bold(this.toolName)), 0, 0));
566
- customRendererHasContent = true;
567
- }
568
- } else {
569
- // No custom renderCall, show tool name
570
- this.contentBox.addChild(new Text(theme.fg("toolTitle", theme.bold(this.toolName)), 0, 0));
571
- customRendererHasContent = true;
572
- }
573
-
574
- // Render result component if we have a result
575
- if (this.result && this.toolDefinition.renderResult) {
576
- try {
577
- const renderContext = {
578
- args: this.args,
579
- toolCallId: "",
580
- invalidate: () => this.updateDisplay(),
581
- lastComponent: undefined,
582
- state: undefined,
583
- cwd: this.cwd,
584
- executionStarted: true,
585
- argsComplete: true,
586
- isPartial: this.isPartial,
587
- expanded: this.expanded,
588
- showImages: this.showImages,
589
- isError: this.result.isError,
590
- };
591
- // vendor-seam: dual-module-path -- ToolDefinition.renderResult signature diverges between pi dist and GSD usage
592
- const resultComponent = (this.toolDefinition.renderResult as unknown as (...a: unknown[]) => Container | undefined)(
593
- { content: this.result.content, details: this.result.details },
594
- { expanded: this.expanded, isPartial: this.isPartial },
595
- theme,
596
- renderContext,
597
- );
598
- if (resultComponent !== undefined) {
599
- this.contentBox.addChild(resultComponent);
600
- customRendererHasContent = true;
601
- }
602
- } catch {
603
- // Fall back to showing raw output on error
604
- const output = this.getTextOutput();
605
- if (output) {
606
- this.contentBox.addChild(new Text(theme.fg("toolOutput", output), 0, 0));
607
- customRendererHasContent = true;
608
- }
609
- }
610
- } else if (this.result) {
611
- // Has result but no custom renderResult
612
- const output = this.getTextOutput();
613
- if (output) {
614
- this.contentBox.addChild(new Text(theme.fg("toolOutput", output), 0, 0));
615
- customRendererHasContent = true;
616
- }
617
- }
618
- } else {
619
- // Unknown tool with no registered definition - show generic fallback
620
- this.contentText.setCustomBgFn(bgFn);
621
- this.contentText.setText(this.formatToolExecution());
622
- }
623
-
624
- // Handle images (same for both custom and built-in)
625
- for (const img of this.imageComponents) {
626
- this.removeChild(img);
627
- }
628
- this.imageComponents = [];
629
- for (const spacer of this.imageSpacers) {
630
- this.removeChild(spacer);
631
- }
632
- this.imageSpacers = [];
633
-
634
- if (this.result) {
635
- const imageBlocks = this.result.content?.filter((c) => c.type === "image") || [];
636
- const caps = getCapabilities();
637
-
638
- for (let i = 0; i < imageBlocks.length; i++) {
639
- const img = imageBlocks[i];
640
- if (caps.images && this.showImages && img.data && img.mimeType) {
641
- // Use converted PNG for Kitty protocol if available
642
- const converted = this.convertedImages.get(i);
643
- const imageData = converted?.data ?? img.data;
644
- const imageMimeType = converted?.mimeType ?? img.mimeType;
645
-
646
- // For Kitty, skip non-PNG images that haven't been converted yet
647
- if (caps.images === "kitty" && imageMimeType !== "image/png") {
648
- continue;
649
- }
650
-
651
- const spacer = new Spacer(1);
652
- this.addChild(spacer);
653
- this.imageSpacers.push(spacer);
654
- // Pass cached dimensions to avoid re-triggering async parsing
655
- // when updateDisplay() recreates Image components (#3455).
656
- const cachedDims = this.resolvedImageDimensions.get(i);
657
- const imageComponent = new Image(
658
- imageData,
659
- imageMimeType,
660
- { fallbackColor: (s: string) => theme.fg("toolOutput", s) },
661
- { maxWidthCells: 60 },
662
- cachedDims,
663
- );
664
- // setOnDimensionsResolved/getDimensions removed in pi-tui 0.67.2 —
665
- // dimensions are passed to the Image constructor and resolved synchronously.
666
- this.imageComponents.push(imageComponent);
667
- this.addChild(imageComponent);
668
- }
669
- }
670
- }
671
-
672
- if (!useBuiltInRenderer && this.toolDefinition) {
673
- this.hideComponent = !customRendererHasContent && this.imageComponents.length === 0;
674
- }
675
- }
676
-
677
- /**
678
- * Render bash content using visual line truncation (like bash-execution.ts)
679
- */
680
- private renderBashContent(): void {
681
- const command = str(this.args?.command);
682
- const timeout = this.args?.timeout as number | undefined;
683
-
684
- // Header
685
- const timeoutSuffix = timeout ? theme.fg("muted", ` (timeout ${timeout}s)`) : "";
686
- const commandDisplay =
687
- command === null ? theme.fg("error", "[invalid arg]") : command ? command : theme.fg("toolOutput", "...");
688
- this.contentBox.addChild(
689
- new Text(theme.fg("toolTitle", theme.bold(`$ ${commandDisplay}`)) + timeoutSuffix, 0, 0),
690
- );
691
-
692
- if (this.result) {
693
- const output = this.getTextOutput().trim();
694
-
695
- if (output) {
696
- // Style each line for the output
697
- const styledOutput = output
698
- .split("\n")
699
- .map((line) => theme.fg("toolOutput", line))
700
- .join("\n");
701
-
702
- if (this.expanded) {
703
- // Show all lines when expanded
704
- this.contentBox.addChild(new Text(`\n${styledOutput}`, 0, 0));
705
- } else {
706
- // Use visual line truncation when collapsed with width-aware caching
707
- let cachedWidth: number | undefined;
708
- let cachedLines: string[] | undefined;
709
- let cachedSkipped: number | undefined;
710
-
711
- this.contentBox.addChild({
712
- render: (width: number) => {
713
- if (cachedLines === undefined || cachedWidth !== width) {
714
- const result = truncateToVisualLines(styledOutput, BASH_PREVIEW_LINES, width);
715
- cachedLines = result.visualLines;
716
- cachedSkipped = result.skippedCount;
717
- cachedWidth = width;
718
- }
719
- if (cachedSkipped && cachedSkipped > 0) {
720
- const hint =
721
- theme.fg("muted", `... (${cachedSkipped} earlier lines,`) +
722
- ` ${keyHint("expandTools", "to expand")})`;
723
- return ["", truncateToWidth(hint, width, "..."), ...cachedLines];
724
- }
725
- // Add blank line for spacing (matches expanded case)
726
- return ["", ...cachedLines];
727
- },
728
- invalidate: () => {
729
- cachedWidth = undefined;
730
- cachedLines = undefined;
731
- cachedSkipped = undefined;
732
- },
733
- });
734
- }
735
- }
736
-
737
- // Truncation warnings
738
- const truncation = this.result.details?.truncation;
739
- const fullOutputPath = this.result.details?.fullOutputPath;
740
- if (truncation?.truncated || fullOutputPath) {
741
- const warnings: string[] = [];
742
- if (fullOutputPath) {
743
- warnings.push(`Full output: ${fullOutputPath}`);
744
- }
745
- if (truncation?.truncated) {
746
- if (truncation.truncatedBy === "lines") {
747
- warnings.push(`Truncated: showing ${truncation.outputLines} of ${truncation.totalLines} lines`);
748
- } else {
749
- warnings.push(
750
- `Truncated: ${truncation.outputLines} lines shown (${formatSize(truncation.maxBytes ?? DEFAULT_MAX_BYTES)} limit)`,
751
- );
752
- }
753
- }
754
- this.contentBox.addChild(new Text(`\n${theme.fg("warning", `[${warnings.join(". ")}]`)}`, 0, 0));
755
- }
756
- }
757
- }
758
-
759
- private getTextOutput(): string {
760
- if (!this.result) return "";
761
-
762
- const textBlocks = this.result.content?.filter((c) => c.type === "text") || [];
763
- const imageBlocks = this.result.content?.filter((c) => c.type === "image") || [];
764
-
765
- let output = textBlocks
766
- .map((c) => {
767
- // Use sanitizeBinaryOutput to handle binary data that crashes string-width
768
- return sanitizeBinaryOutput(stripAnsi(c.text || "")).replace(/\r/g, "");
769
- })
770
- .join("\n");
771
-
772
- const caps = getCapabilities();
773
- if (imageBlocks.length > 0 && (!caps.images || !this.showImages)) {
774
- const imageIndicators = imageBlocks
775
- .map((img) => {
776
- return imageFallback(typeof img.mimeType === "string" ? img.mimeType : "image/unknown");
777
- })
778
- .join("\n");
779
- output = output ? `${output}\n${imageIndicators}` : imageIndicators;
780
- }
781
-
782
- return output;
783
- }
784
-
785
- private formatToolExecution(): string {
786
- let text: string;
787
- const invalidArg = theme.fg("error", "[invalid arg]");
788
- const normalizedToolName = this.normalizedToolName;
789
-
790
- if (normalizedToolName === "read") {
791
- const rawPath = str(this.args?.file_path ?? this.args?.path);
792
- const path = rawPath !== null ? shortenPath(rawPath) : null;
793
- const offset = typeof this.args?.offset === "number" ? this.args.offset : undefined;
794
- const limit = typeof this.args?.limit === "number" ? this.args.limit : undefined;
795
-
796
- let pathDisplay = path === null ? invalidArg : path ? theme.fg("accent", path) : theme.fg("toolOutput", "...");
797
- if (offset !== undefined || limit !== undefined) {
798
- const startLine = offset ?? 1;
799
- const endLine = limit !== undefined ? startLine + limit - 1 : "";
800
- pathDisplay += theme.fg("warning", `:${startLine}${endLine ? `-${endLine}` : ""}`);
801
- }
802
-
803
- text = `${theme.fg("toolTitle", theme.bold("read"))} ${pathDisplay}`;
804
-
805
- if (this.result) {
806
- if (this.result.isError) {
807
- const errorText = this.getTextOutput().trim() || "read failed";
808
- text += `\n\n${theme.fg("error", errorText)}`;
809
- return text;
810
- }
811
-
812
- const rawOutput = this.getTextOutput();
813
- // Strip hashline prefixes (e.g. "1#BQ:content") for TUI display
814
- const output = rawOutput.replace(/^(\s*)\d+#[ZPMQVRWSNKTXJBYH]{2}:/gm, "$1");
815
- const rawPath = str(this.args?.file_path ?? this.args?.path);
816
- const lang = rawPath ? getLanguageFromPath(rawPath) : undefined;
817
- const lines = lang ? highlightCode(replaceTabs(output), lang) : output.split("\n");
818
-
819
- const maxLines = this.expanded ? lines.length : 10;
820
- const displayLines = lines.slice(0, maxLines);
821
- const remaining = lines.length - maxLines;
822
-
823
- text +=
824
- "\n\n" +
825
- displayLines
826
- .map((line: string) => (lang ? replaceTabs(line) : theme.fg("toolOutput", replaceTabs(line))))
827
- .join("\n");
828
- if (remaining > 0) {
829
- text += `${theme.fg("muted", `\n... (${remaining} more lines,`)} ${keyHint("expandTools", "to expand")})`;
830
- }
831
-
832
- const truncation = this.result.details?.truncation;
833
- if (truncation?.truncated) {
834
- if (truncation.firstLineExceedsLimit) {
835
- text +=
836
- "\n" +
837
- theme.fg(
838
- "warning",
839
- `[First line exceeds ${formatSize(truncation.maxBytes ?? DEFAULT_MAX_BYTES)} limit]`,
840
- );
841
- } else if (truncation.truncatedBy === "lines") {
842
- text +=
843
- "\n" +
844
- theme.fg(
845
- "warning",
846
- `[Truncated: showing ${truncation.outputLines} of ${truncation.totalLines} lines (${truncation.maxLines ?? DEFAULT_MAX_LINES} line limit)]`,
847
- );
848
- } else {
849
- text +=
850
- "\n" +
851
- theme.fg(
852
- "warning",
853
- `[Truncated: ${truncation.outputLines} lines shown (${formatSize(truncation.maxBytes ?? DEFAULT_MAX_BYTES)} limit)]`,
854
- );
855
- }
856
- }
857
- }
858
- } else if (normalizedToolName === "write") {
859
- const rawPath = str(this.args?.file_path ?? this.args?.path);
860
- const fileContent = str(this.args?.content);
861
- const path = rawPath !== null ? shortenPath(rawPath) : null;
862
-
863
- text =
864
- theme.fg("toolTitle", theme.bold("write")) +
865
- " " +
866
- (path === null ? invalidArg : path ? theme.fg("accent", path) : theme.fg("toolOutput", "..."));
867
-
868
- if (fileContent === null) {
869
- text += `\n\n${theme.fg("error", "[invalid content arg - expected string]")}`;
870
- } else if (fileContent) {
871
- const lang = rawPath ? getLanguageFromPath(rawPath) : undefined;
872
-
873
- let lines: string[];
874
- if (lang) {
875
- const cache = this.writeHighlightCache;
876
- if (cache && cache.lang === lang && cache.rawPath === rawPath && cache.rawContent === fileContent) {
877
- lines = cache.highlightedLines;
878
- } else {
879
- const displayContent = normalizeDisplayText(fileContent);
880
- const normalized = replaceTabs(displayContent);
881
- lines = highlightCode(normalized, lang);
882
- this.writeHighlightCache = {
883
- rawPath,
884
- lang,
885
- rawContent: fileContent,
886
- normalizedLines: normalized.split("\n"),
887
- highlightedLines: lines,
888
- };
889
- }
890
- } else {
891
- lines = normalizeDisplayText(fileContent).split("\n");
892
- this.writeHighlightCache = undefined;
893
- }
894
-
895
- const totalLines = lines.length;
896
- const maxLines = this.expanded ? lines.length : 10;
897
- const displayLines = lines.slice(0, maxLines);
898
- const remaining = lines.length - maxLines;
899
-
900
- text +=
901
- "\n\n" +
902
- displayLines.map((line: string) => (lang ? line : theme.fg("toolOutput", replaceTabs(line)))).join("\n");
903
- if (remaining > 0) {
904
- text +=
905
- theme.fg("muted", `\n... (${remaining} more lines, ${totalLines} total,`) +
906
- ` ${keyHint("expandTools", "to expand")})`;
907
- }
908
- }
909
-
910
- // Show error if tool execution failed
911
- if (this.result?.isError) {
912
- const errorText = this.getTextOutput();
913
- if (errorText) {
914
- text += `\n\n${theme.fg("error", errorText)}`;
915
- }
916
- }
917
- } else if (normalizedToolName === "edit") {
918
- const rawPath = str(this.args?.file_path ?? this.args?.path);
919
- const path = rawPath !== null ? shortenPath(rawPath) : null;
920
-
921
- // Build path display, appending :line if we have diff info
922
- let pathDisplay = path === null ? invalidArg : path ? theme.fg("accent", path) : theme.fg("toolOutput", "...");
923
- const firstChangedLine =
924
- (this.editDiffPreview && "firstChangedLine" in this.editDiffPreview
925
- ? this.editDiffPreview.firstChangedLine
926
- : undefined) ||
927
- (this.result && !this.result.isError ? this.result.details?.firstChangedLine : undefined);
928
- if (firstChangedLine) {
929
- pathDisplay += theme.fg("warning", `:${firstChangedLine}`);
930
- }
931
-
932
- text = `${theme.fg("toolTitle", theme.bold("edit"))} ${pathDisplay}`;
933
-
934
- if (this.result?.isError) {
935
- // Show error from result
936
- const errorText = this.getTextOutput();
937
- if (errorText) {
938
- text += `\n\n${theme.fg("error", errorText)}`;
939
- }
940
- } else if (this.result?.details?.diff) {
941
- // Tool executed successfully - use the diff from result
942
- // This takes priority over editDiffPreview which may have a stale error
943
- // due to race condition (async preview computed after file was modified)
944
- text += `\n\n${renderDiff(this.result.details.diff, { filePath: rawPath ?? undefined })}`;
945
- } else if (this.editDiffPreview) {
946
- // Use cached diff preview (before tool executes)
947
- if ("error" in this.editDiffPreview) {
948
- text += `\n\n${theme.fg("error", this.editDiffPreview.error)}`;
949
- } else if (this.editDiffPreview.diff) {
950
- text += `\n\n${renderDiff(this.editDiffPreview.diff, { filePath: rawPath ?? undefined })}`;
951
- }
952
- }
953
- } else if (normalizedToolName === "ls") {
954
- const rawPath = str(this.args?.path);
955
- const path = rawPath !== null ? shortenPath(rawPath || ".") : null;
956
- const limit = this.args?.limit;
957
-
958
- text = `${theme.fg("toolTitle", theme.bold("ls"))} ${path === null ? invalidArg : theme.fg("accent", path)}`;
959
- if (limit !== undefined) {
960
- text += theme.fg("toolOutput", ` (limit ${limit})`);
961
- }
962
-
963
- if (this.result) {
964
- if (this.result.isError) {
965
- const errorText = this.getTextOutput().trim() || "ls failed";
966
- text += `\n\n${theme.fg("error", errorText)}`;
967
- return text;
968
- }
969
-
970
- const output = this.getTextOutput().trim();
971
- if (output) {
972
- const lines = output.split("\n");
973
- const maxLines = this.expanded ? lines.length : 20;
974
- const displayLines = lines.slice(0, maxLines);
975
- const remaining = lines.length - maxLines;
976
-
977
- text += `\n\n${displayLines.map((line: string) => theme.fg("toolOutput", line)).join("\n")}`;
978
- if (remaining > 0) {
979
- text += `${theme.fg("muted", `\n... (${remaining} more lines,`)} ${keyHint("expandTools", "to expand")})`;
980
- }
981
- }
982
-
983
- const entryLimit = this.result.details?.entryLimitReached;
984
- const truncation = this.result.details?.truncation;
985
- if (entryLimit || truncation?.truncated) {
986
- const warnings: string[] = [];
987
- if (entryLimit) {
988
- warnings.push(`${entryLimit} entries limit`);
989
- }
990
- if (truncation?.truncated) {
991
- warnings.push(`${formatSize(truncation.maxBytes ?? DEFAULT_MAX_BYTES)} limit`);
992
- }
993
- text += `\n${theme.fg("warning", `[Truncated: ${warnings.join(", ")}]`)}`;
994
- }
995
- }
996
- } else if (normalizedToolName === "find") {
997
- const pattern = str(this.args?.pattern);
998
- const rawPath = str(this.args?.path);
999
- const path = rawPath !== null ? shortenPath(rawPath || ".") : null;
1000
- const limit = this.args?.limit;
1001
-
1002
- text =
1003
- theme.fg("toolTitle", theme.bold("find")) +
1004
- " " +
1005
- (pattern === null ? invalidArg : theme.fg("accent", pattern || "")) +
1006
- theme.fg("toolOutput", ` in ${path === null ? invalidArg : path}`);
1007
- if (limit !== undefined) {
1008
- text += theme.fg("toolOutput", ` (limit ${limit})`);
1009
- }
1010
-
1011
- if (this.result) {
1012
- if (this.result.isError) {
1013
- const errorText = this.getTextOutput().trim() || "find failed";
1014
- text += `\n\n${theme.fg("error", errorText)}`;
1015
- return text;
1016
- }
1017
-
1018
- const output = this.getTextOutput().trim();
1019
- if (output) {
1020
- const lines = output.split("\n");
1021
- const maxLines = this.expanded ? lines.length : 20;
1022
- const displayLines = lines.slice(0, maxLines);
1023
- const remaining = lines.length - maxLines;
1024
-
1025
- text += `\n\n${displayLines.map((line: string) => theme.fg("toolOutput", line)).join("\n")}`;
1026
- if (remaining > 0) {
1027
- text += `${theme.fg("muted", `\n... (${remaining} more lines,`)} ${keyHint("expandTools", "to expand")})`;
1028
- }
1029
- }
1030
-
1031
- const resultLimit = this.result.details?.resultLimitReached;
1032
- const truncation = this.result.details?.truncation;
1033
- if (resultLimit || truncation?.truncated) {
1034
- const warnings: string[] = [];
1035
- if (resultLimit) {
1036
- warnings.push(`${resultLimit} results limit`);
1037
- }
1038
- if (truncation?.truncated) {
1039
- warnings.push(`${formatSize(truncation.maxBytes ?? DEFAULT_MAX_BYTES)} limit`);
1040
- }
1041
- text += `\n${theme.fg("warning", `[Truncated: ${warnings.join(", ")}]`)}`;
1042
- }
1043
- }
1044
- } else if (normalizedToolName === "grep") {
1045
- const pattern = str(this.args?.pattern);
1046
- const rawPath = str(this.args?.path);
1047
- const path = rawPath !== null ? shortenPath(rawPath || ".") : null;
1048
- const glob = str(this.args?.glob);
1049
- const limit = this.args?.limit;
1050
-
1051
- text =
1052
- theme.fg("toolTitle", theme.bold("grep")) +
1053
- " " +
1054
- (pattern === null ? invalidArg : theme.fg("accent", `/${pattern || ""}/`)) +
1055
- theme.fg("toolOutput", ` in ${path === null ? invalidArg : path}`);
1056
- if (glob) {
1057
- text += theme.fg("toolOutput", ` (${glob})`);
1058
- }
1059
- if (limit !== undefined) {
1060
- text += theme.fg("toolOutput", ` limit ${limit}`);
1061
- }
1062
-
1063
- if (this.result) {
1064
- if (this.result.isError) {
1065
- const errorText = this.getTextOutput().trim() || "grep failed";
1066
- text += `\n\n${theme.fg("error", errorText)}`;
1067
- return text;
1068
- }
1069
-
1070
- const output = this.getTextOutput().trim();
1071
- if (output) {
1072
- const lines = output.split("\n");
1073
- const maxLines = this.expanded ? lines.length : 15;
1074
- const displayLines = lines.slice(0, maxLines);
1075
- const remaining = lines.length - maxLines;
1076
-
1077
- text += `\n\n${displayLines.map((line: string) => theme.fg("toolOutput", line)).join("\n")}`;
1078
- if (remaining > 0) {
1079
- text += `${theme.fg("muted", `\n... (${remaining} more lines,`)} ${keyHint("expandTools", "to expand")})`;
1080
- }
1081
- }
1082
-
1083
- const matchLimit = this.result.details?.matchLimitReached;
1084
- const truncation = this.result.details?.truncation;
1085
- const linesTruncated = this.result.details?.linesTruncated;
1086
- if (matchLimit || truncation?.truncated || linesTruncated) {
1087
- const warnings: string[] = [];
1088
- if (matchLimit) {
1089
- warnings.push(`${matchLimit} matches limit`);
1090
- }
1091
- if (truncation?.truncated) {
1092
- warnings.push(`${formatSize(truncation.maxBytes ?? DEFAULT_MAX_BYTES)} limit`);
1093
- }
1094
- if (linesTruncated) {
1095
- warnings.push("some lines truncated");
1096
- }
1097
- text += `\n${theme.fg("warning", `[Truncated: ${warnings.join(", ")}]`)}`;
1098
- }
1099
- }
1100
- } else if (normalizedToolName === "web_search") {
1101
- // Server-side Anthropic web search
1102
- text = theme.fg("toolTitle", theme.bold("web search"));
1103
-
1104
- if (process.env.PI_OFFLINE === "1") {
1105
- text += "\n\n" + theme.fg("muted", "\u{1F50C} Offline \u{2014} web search unavailable");
1106
- } else if (this.result) {
1107
- const output = this.getTextOutput().trim();
1108
- if (output) {
1109
- const lines = output.split("\n");
1110
- const maxLines = this.expanded ? lines.length : 10;
1111
- const displayLines = lines.slice(0, maxLines);
1112
- const remaining = lines.length - maxLines;
1113
-
1114
- text += `\n\n${displayLines.map((line: string) => theme.fg("toolOutput", line)).join("\n")}`;
1115
- if (remaining > 0) {
1116
- text += `${theme.fg("muted", `\n... (${remaining} more lines,`)} ${keyHint("expandTools", "to expand")})`;
1117
- }
1118
- }
1119
- }
1120
- } else {
1121
- // Generic tool / MCP tool without a registered renderer.
1122
- // MCP tool names from Claude Code arrive as `mcp__<server>__<tool>`;
1123
- // render the server prefix in muted style so the tool name reads
1124
- // cleanly. GSD-registered MCP tools have already had their prefix
1125
- // stripped upstream in partial-builder.ts and won't reach this branch.
1126
- const parsed = parseMcpToolName(this.toolName);
1127
- const displayName = parsed ? parsed.tool : this.toolName;
1128
- const serverPrefix = parsed ? theme.fg("muted", `${parsed.server}\u00b7`) : "";
1129
- text = serverPrefix + theme.fg("toolTitle", theme.bold(displayName));
1130
-
1131
- const argsText = formatCompactArgs(this.args, this.expanded);
1132
- if (argsText) {
1133
- if (argsText.includes("\n")) {
1134
- text += `\n\n${theme.fg("toolOutput", argsText)}`;
1135
- } else {
1136
- text += " " + theme.fg("toolOutput", argsText);
1137
- }
1138
- }
1139
-
1140
- if (this.result) {
1141
- const output = this.getTextOutput().trim();
1142
- if (output) {
1143
- const lines = output.split("\n");
1144
- const maxLines = this.expanded ? lines.length : GENERIC_OUTPUT_PREVIEW_LINES;
1145
- const displayLines = lines.slice(0, maxLines);
1146
- const remaining = lines.length - maxLines;
1147
- text += `\n\n${displayLines.map((line: string) => theme.fg("toolOutput", line)).join("\n")}`;
1148
- if (remaining > 0) {
1149
- text += `${theme.fg("muted", `\n... (${remaining} more lines,`)} ${keyHint("expandTools", "to expand")})`;
1150
- }
1151
- }
1152
- }
1153
- }
1154
-
1155
- return text;
1156
- }
1157
- }