@compilr-dev/cli 0.5.0 → 0.5.2

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 (587) hide show
  1. package/LICENSE +108 -0
  2. package/README.md +237 -69
  3. package/dist/.tsbuildinfo.app +1 -0
  4. package/dist/.tsbuildinfo.data +1 -0
  5. package/dist/.tsbuildinfo.domain +1 -0
  6. package/dist/.tsbuildinfo.foundation +1 -0
  7. package/dist/agent.d.ts +61 -4
  8. package/dist/agent.js +241 -245
  9. package/dist/anchors/index.d.ts +1 -1
  10. package/dist/anchors/index.js +1 -1
  11. package/dist/anchors/project-anchors.d.ts +2 -2
  12. package/dist/anchors/project-anchors.js +1 -1
  13. package/dist/auth/api-client.d.ts +124 -0
  14. package/dist/auth/api-client.js +261 -0
  15. package/dist/auth/index.d.ts +172 -0
  16. package/dist/auth/index.js +545 -0
  17. package/dist/auth/storage.d.ts +52 -0
  18. package/dist/auth/storage.js +118 -0
  19. package/dist/changelog/index.d.ts +16 -0
  20. package/dist/changelog/index.js +24 -0
  21. package/dist/changelog/releases.d.ts +17 -0
  22. package/dist/changelog/releases.js +63 -0
  23. package/dist/commands-v2/handlers/auth.d.ts +10 -0
  24. package/dist/commands-v2/handlers/auth.js +118 -0
  25. package/dist/commands-v2/handlers/background.d.ts +14 -0
  26. package/dist/commands-v2/handlers/background.js +276 -0
  27. package/dist/commands-v2/handlers/context.js +286 -81
  28. package/dist/commands-v2/handlers/core.d.ts +1 -0
  29. package/dist/commands-v2/handlers/core.js +133 -8
  30. package/dist/commands-v2/handlers/debug.js +18 -0
  31. package/dist/commands-v2/handlers/delegations.d.ts +8 -0
  32. package/dist/commands-v2/handlers/delegations.js +29 -0
  33. package/dist/commands-v2/handlers/files.d.ts +8 -0
  34. package/dist/commands-v2/handlers/files.js +162 -0
  35. package/dist/commands-v2/handlers/filter.d.ts +9 -0
  36. package/dist/commands-v2/handlers/filter.js +130 -0
  37. package/dist/commands-v2/handlers/games.d.ts +7 -0
  38. package/dist/commands-v2/handlers/games.js +57 -0
  39. package/dist/commands-v2/handlers/index.d.ts +13 -0
  40. package/dist/commands-v2/handlers/index.js +39 -0
  41. package/dist/commands-v2/handlers/mcp.d.ts +8 -0
  42. package/dist/commands-v2/handlers/mcp.js +39 -0
  43. package/dist/commands-v2/handlers/notifications.d.ts +9 -0
  44. package/dist/commands-v2/handlers/notifications.js +34 -0
  45. package/dist/commands-v2/handlers/project.js +295 -31
  46. package/dist/commands-v2/handlers/reset.d.ts +11 -0
  47. package/dist/commands-v2/handlers/reset.js +118 -0
  48. package/dist/commands-v2/handlers/session.d.ts +161 -0
  49. package/dist/commands-v2/handlers/session.js +805 -0
  50. package/dist/commands-v2/handlers/settings.d.ts +2 -0
  51. package/dist/commands-v2/handlers/settings.js +217 -35
  52. package/dist/commands-v2/handlers/tasks.d.ts +5 -0
  53. package/dist/commands-v2/handlers/tasks.js +36 -0
  54. package/dist/commands-v2/handlers/team.d.ts +9 -0
  55. package/dist/commands-v2/handlers/team.js +549 -0
  56. package/dist/commands-v2/handlers/terminals.d.ts +9 -0
  57. package/dist/commands-v2/handlers/terminals.js +34 -0
  58. package/dist/commands-v2/index.d.ts +3 -2
  59. package/dist/commands-v2/index.js +4 -1
  60. package/dist/commands-v2/registry.d.ts +15 -0
  61. package/dist/commands-v2/registry.js +34 -0
  62. package/dist/commands-v2/types.d.ts +81 -3
  63. package/dist/commands.js +13 -0
  64. package/dist/compilr-diff-companion.vsix +0 -0
  65. package/dist/db/index.js +98 -4
  66. package/dist/db/repositories/document-repository.d.ts +2 -0
  67. package/dist/db/repositories/document-repository.js +6 -1
  68. package/dist/db/repositories/index.d.ts +2 -0
  69. package/dist/db/repositories/index.js +1 -0
  70. package/dist/db/repositories/plan-repository.d.ts +101 -0
  71. package/dist/db/repositories/plan-repository.js +275 -0
  72. package/dist/db/repositories/project-repository.d.ts +6 -0
  73. package/dist/db/repositories/project-repository.js +41 -0
  74. package/dist/db/repositories/work-item-repository.d.ts +15 -0
  75. package/dist/db/repositories/work-item-repository.js +69 -4
  76. package/dist/db/schema.d.ts +40 -3
  77. package/dist/db/schema.js +66 -3
  78. package/dist/episodes/index.d.ts +20 -0
  79. package/dist/episodes/index.js +27 -0
  80. package/dist/episodes/recorder.d.ts +51 -0
  81. package/dist/episodes/recorder.js +195 -0
  82. package/dist/episodes/significant-work.d.ts +21 -0
  83. package/dist/episodes/significant-work.js +56 -0
  84. package/dist/episodes/store.d.ts +38 -0
  85. package/dist/episodes/store.js +199 -0
  86. package/dist/episodes/types.d.ts +35 -0
  87. package/dist/episodes/types.js +6 -0
  88. package/dist/episodes/work-at-risk.d.ts +12 -0
  89. package/dist/episodes/work-at-risk.js +38 -0
  90. package/dist/episodes/work-summary-anchor.d.ts +23 -0
  91. package/dist/episodes/work-summary-anchor.js +73 -0
  92. package/dist/games/coins.d.ts +66 -0
  93. package/dist/games/coins.js +165 -0
  94. package/dist/games/game-base.d.ts +84 -0
  95. package/dist/games/game-base.js +204 -0
  96. package/dist/games/index.d.ts +16 -0
  97. package/dist/games/index.js +49 -0
  98. package/dist/games/scores.d.ts +69 -0
  99. package/dist/games/scores.js +191 -0
  100. package/dist/games/tetris/board.d.ts +59 -0
  101. package/dist/games/tetris/board.js +170 -0
  102. package/dist/games/tetris/index.d.ts +109 -0
  103. package/dist/games/tetris/index.js +610 -0
  104. package/dist/games/tetris/pieces.d.ts +44 -0
  105. package/dist/games/tetris/pieces.js +271 -0
  106. package/dist/games/tetris/renderer.d.ts +26 -0
  107. package/dist/games/tetris/renderer.js +77 -0
  108. package/dist/guide/guide-content.d.ts +23 -0
  109. package/dist/guide/guide-content.js +196 -0
  110. package/dist/guide/index.d.ts +8 -0
  111. package/dist/guide/index.js +7 -0
  112. package/dist/guide/shared-content.d.ts +37 -0
  113. package/dist/guide/shared-content.js +1272 -0
  114. package/dist/guide/tutorial-helpers.d.ts +57 -0
  115. package/dist/guide/tutorial-helpers.js +147 -0
  116. package/dist/handlers/ask-user-handlers.d.ts +32 -0
  117. package/dist/handlers/ask-user-handlers.js +104 -0
  118. package/dist/handlers/delegation-handlers.d.ts +34 -0
  119. package/dist/handlers/delegation-handlers.js +291 -0
  120. package/dist/handlers/permission-handler.d.ts +30 -0
  121. package/dist/handlers/permission-handler.js +205 -0
  122. package/dist/index.d.ts +11 -1
  123. package/dist/index.js +448 -271
  124. package/dist/input-handlers/memory-handler.d.ts +1 -1
  125. package/dist/input-handlers/memory-handler.js +2 -1
  126. package/dist/models/index.d.ts +10 -0
  127. package/dist/models/index.js +12 -0
  128. package/dist/models/model-registry.d.ts +38 -0
  129. package/dist/models/model-registry.js +69 -0
  130. package/dist/models/model-tiers.d.ts +28 -0
  131. package/dist/models/model-tiers.js +71 -0
  132. package/dist/models/model-validation.d.ts +25 -0
  133. package/dist/models/model-validation.js +291 -0
  134. package/dist/models/ollama-models.d.ts +73 -0
  135. package/dist/models/ollama-models.js +178 -0
  136. package/dist/models/provider-types.d.ts +6 -0
  137. package/dist/models/provider-types.js +1 -0
  138. package/dist/models/providers.d.ts +35 -0
  139. package/dist/models/providers.js +58 -0
  140. package/dist/models/types.d.ts +4 -0
  141. package/dist/models/types.js +4 -0
  142. package/dist/multi-agent/activity.d.ts +21 -0
  143. package/dist/multi-agent/activity.js +34 -0
  144. package/dist/multi-agent/agent-selection.d.ts +55 -0
  145. package/dist/multi-agent/agent-selection.js +90 -0
  146. package/dist/multi-agent/artifacts.d.ts +197 -0
  147. package/dist/multi-agent/artifacts.js +379 -0
  148. package/dist/multi-agent/checkpointer.d.ts +138 -0
  149. package/dist/multi-agent/checkpointer.js +471 -0
  150. package/dist/multi-agent/collision-utils.d.ts +16 -0
  151. package/dist/multi-agent/collision-utils.js +28 -0
  152. package/dist/multi-agent/context-resolver.d.ts +97 -0
  153. package/dist/multi-agent/context-resolver.js +316 -0
  154. package/dist/multi-agent/custom-agents.d.ts +83 -0
  155. package/dist/multi-agent/custom-agents.js +227 -0
  156. package/dist/multi-agent/delegation-tracker.d.ts +157 -0
  157. package/dist/multi-agent/delegation-tracker.js +243 -0
  158. package/dist/multi-agent/file-lock-hook.d.ts +29 -0
  159. package/dist/multi-agent/file-lock-hook.js +97 -0
  160. package/dist/multi-agent/file-locks.d.ts +58 -0
  161. package/dist/multi-agent/file-locks.js +194 -0
  162. package/dist/multi-agent/index.d.ts +24 -0
  163. package/dist/multi-agent/index.js +30 -0
  164. package/dist/multi-agent/mention-parser.d.ts +64 -0
  165. package/dist/multi-agent/mention-parser.js +146 -0
  166. package/dist/multi-agent/notification-manager.d.ts +84 -0
  167. package/dist/multi-agent/notification-manager.js +224 -0
  168. package/dist/multi-agent/pending-requests.d.ts +122 -0
  169. package/dist/multi-agent/pending-requests.js +155 -0
  170. package/dist/multi-agent/session-registry.d.ts +139 -0
  171. package/dist/multi-agent/session-registry.js +514 -0
  172. package/dist/multi-agent/shared-context.d.ts +293 -0
  173. package/dist/multi-agent/shared-context.js +671 -0
  174. package/dist/multi-agent/skill-requirements.d.ts +66 -0
  175. package/dist/multi-agent/skill-requirements.js +178 -0
  176. package/dist/multi-agent/task-assignment.d.ts +69 -0
  177. package/dist/multi-agent/task-assignment.js +123 -0
  178. package/dist/multi-agent/task-suggestion.d.ts +31 -0
  179. package/dist/multi-agent/task-suggestion.js +72 -0
  180. package/dist/multi-agent/team-agent.d.ts +201 -0
  181. package/dist/multi-agent/team-agent.js +488 -0
  182. package/dist/multi-agent/team.d.ts +286 -0
  183. package/dist/multi-agent/team.js +610 -0
  184. package/dist/multi-agent/tool-config.d.ts +110 -0
  185. package/dist/multi-agent/tool-config.js +661 -0
  186. package/dist/multi-agent/types.d.ts +211 -0
  187. package/dist/multi-agent/types.js +617 -0
  188. package/dist/prompts/plan-mode-prompt.d.ts +11 -0
  189. package/dist/prompts/plan-mode-prompt.js +95 -0
  190. package/dist/repl-helpers.js +5 -2
  191. package/dist/repl-v2.d.ts +401 -2
  192. package/dist/repl-v2.js +2588 -65
  193. package/dist/session/index.d.ts +6 -0
  194. package/dist/session/index.js +6 -0
  195. package/dist/session/project-session-manager.d.ts +158 -0
  196. package/dist/session/project-session-manager.js +650 -0
  197. package/dist/settings/index.d.ts +133 -13
  198. package/dist/settings/index.js +329 -24
  199. package/dist/settings/mcp-config.d.ts +76 -0
  200. package/dist/settings/mcp-config.js +143 -0
  201. package/dist/settings/paths.d.ts +4 -0
  202. package/dist/settings/paths.js +6 -0
  203. package/dist/shared-handlers.d.ts +62 -0
  204. package/dist/shared-handlers.js +48 -0
  205. package/dist/system-prompt/builder.d.ts +5 -0
  206. package/dist/system-prompt/builder.js +4 -0
  207. package/dist/system-prompt/index.d.ts +18 -0
  208. package/dist/system-prompt/index.js +18 -0
  209. package/dist/system-prompt/modules.d.ts +5 -0
  210. package/dist/system-prompt/modules.js +4 -0
  211. package/dist/tabbed-menu.js +2 -1
  212. package/dist/templates/compilr-md-import.d.ts +16 -0
  213. package/dist/templates/compilr-md-import.js +241 -0
  214. package/dist/templates/compilr-md.js +10 -61
  215. package/dist/templates/config-json.d.ts +1 -25
  216. package/dist/templates/index.d.ts +2 -0
  217. package/dist/templates/index.js +34 -73
  218. package/dist/tool-names.d.ts +113 -0
  219. package/dist/tool-names.js +239 -0
  220. package/dist/tools/ask-user-simple.d.ts +1 -1
  221. package/dist/tools/ask-user-simple.js +2 -1
  222. package/dist/tools/ask-user.d.ts +1 -1
  223. package/dist/tools/ask-user.js +2 -1
  224. package/dist/tools/backlog.d.ts +2 -2
  225. package/dist/tools/backlog.js +1 -1
  226. package/dist/tools/db-tools.d.ts +13 -61
  227. package/dist/tools/db-tools.js +12 -13
  228. package/dist/tools/delegate-background.d.ts +27 -0
  229. package/dist/tools/delegate-background.js +115 -0
  230. package/dist/tools/delegate.d.ts +22 -0
  231. package/dist/tools/delegate.js +97 -0
  232. package/dist/tools/delegation-status.d.ts +16 -0
  233. package/dist/tools/delegation-status.js +128 -0
  234. package/dist/tools/guide-tool.d.ts +12 -0
  235. package/dist/tools/guide-tool.js +59 -0
  236. package/dist/tools/handoff.d.ts +25 -0
  237. package/dist/tools/handoff.js +99 -0
  238. package/dist/tools/meta-tools.d.ts +26 -0
  239. package/dist/tools/meta-tools.js +47 -0
  240. package/dist/tools/platform-adapter.d.ts +35 -0
  241. package/dist/tools/platform-adapter.js +404 -0
  242. package/dist/tools/project-db.d.ts +5 -73
  243. package/dist/tools/project-db.js +5 -336
  244. package/dist/tools.d.ts +67 -2
  245. package/dist/tools.js +240 -48
  246. package/dist/ui/autocomplete-controller.d.ts +42 -0
  247. package/dist/ui/autocomplete-controller.js +384 -0
  248. package/dist/ui/base/index.d.ts +1 -1
  249. package/dist/ui/base/index.js +1 -1
  250. package/dist/ui/base/overlay-base-v2.d.ts +10 -0
  251. package/dist/ui/base/overlay-base-v2.js +14 -0
  252. package/dist/ui/base/render-utils.d.ts +19 -0
  253. package/dist/ui/base/render-utils.js +25 -0
  254. package/dist/ui/base/tabbed-list-overlay-v2.d.ts +16 -1
  255. package/dist/ui/base/tabbed-list-overlay-v2.js +19 -1
  256. package/dist/ui/constants/labels.d.ts +14 -0
  257. package/dist/ui/constants/labels.js +52 -0
  258. package/dist/ui/conversation-store.d.ts +55 -0
  259. package/dist/ui/conversation-store.js +107 -0
  260. package/dist/ui/conversation.js +11 -13
  261. package/dist/ui/diff.d.ts +7 -1
  262. package/dist/ui/diff.js +85 -48
  263. package/dist/ui/ephemeral.js +3 -9
  264. package/dist/ui/file-autocomplete.d.ts +24 -0
  265. package/dist/ui/file-autocomplete.js +56 -0
  266. package/dist/ui/footer-renderer.d.ts +69 -0
  267. package/dist/ui/footer-renderer.js +431 -0
  268. package/dist/ui/footer.d.ts +74 -7
  269. package/dist/ui/footer.js +173 -16
  270. package/dist/ui/input-controller.d.ts +51 -0
  271. package/dist/ui/input-controller.js +176 -0
  272. package/dist/ui/input-prompt.d.ts +19 -0
  273. package/dist/ui/input-prompt.js +206 -14
  274. package/dist/ui/keyboard-handler.d.ts +57 -0
  275. package/dist/ui/keyboard-handler.js +557 -0
  276. package/dist/ui/live-region-facade.d.ts +42 -0
  277. package/dist/ui/live-region-facade.js +205 -0
  278. package/dist/ui/live-region.d.ts +0 -4
  279. package/dist/ui/live-region.js +6 -14
  280. package/dist/ui/mascot/renderer.d.ts +1 -1
  281. package/dist/ui/mascot/renderer.js +37 -2
  282. package/dist/ui/overlay/data/tutorial-content.d.ts +9 -0
  283. package/dist/ui/overlay/data/tutorial-content.js +9 -0
  284. package/dist/ui/overlay/data/tutorial-registry.d.ts +12 -0
  285. package/dist/ui/overlay/data/tutorial-registry.js +116 -0
  286. package/dist/ui/overlay/data/tutorial-types.d.ts +35 -0
  287. package/dist/ui/overlay/data/tutorial-types.js +6 -0
  288. package/dist/ui/overlay/data/tutorials/basics/first-conversation.d.ts +7 -0
  289. package/dist/ui/overlay/data/tutorials/basics/first-conversation.js +220 -0
  290. package/dist/ui/overlay/data/tutorials/basics/first-project.d.ts +7 -0
  291. package/dist/ui/overlay/data/tutorials/basics/first-project.js +284 -0
  292. package/dist/ui/overlay/data/tutorials/basics/navigation.d.ts +8 -0
  293. package/dist/ui/overlay/data/tutorials/basics/navigation.js +22 -0
  294. package/dist/ui/overlay/data/tutorials/basics/welcome.d.ts +7 -0
  295. package/dist/ui/overlay/data/tutorials/basics/welcome.js +174 -0
  296. package/dist/ui/overlay/data/tutorials/config/context-management.d.ts +7 -0
  297. package/dist/ui/overlay/data/tutorials/config/context-management.js +158 -0
  298. package/dist/ui/overlay/data/tutorials/config/mcp-servers.d.ts +8 -0
  299. package/dist/ui/overlay/data/tutorials/config/mcp-servers.js +155 -0
  300. package/dist/ui/overlay/data/tutorials/config/model-selection.d.ts +7 -0
  301. package/dist/ui/overlay/data/tutorials/config/model-selection.js +162 -0
  302. package/dist/ui/overlay/data/tutorials/config/permissions-safety.d.ts +7 -0
  303. package/dist/ui/overlay/data/tutorials/config/permissions-safety.js +163 -0
  304. package/dist/ui/overlay/data/tutorials/config/settings-config.d.ts +7 -0
  305. package/dist/ui/overlay/data/tutorials/config/settings-config.js +166 -0
  306. package/dist/ui/overlay/data/tutorials/planning/arch.d.ts +7 -0
  307. package/dist/ui/overlay/data/tutorials/planning/arch.js +168 -0
  308. package/dist/ui/overlay/data/tutorials/planning/backlog.d.ts +7 -0
  309. package/dist/ui/overlay/data/tutorials/planning/backlog.js +103 -0
  310. package/dist/ui/overlay/data/tutorials/planning/build.d.ts +7 -0
  311. package/dist/ui/overlay/data/tutorials/planning/build.js +173 -0
  312. package/dist/ui/overlay/data/tutorials/planning/design.d.ts +7 -0
  313. package/dist/ui/overlay/data/tutorials/planning/design.js +205 -0
  314. package/dist/ui/overlay/data/tutorials/planning/docs.d.ts +7 -0
  315. package/dist/ui/overlay/data/tutorials/planning/docs.js +143 -0
  316. package/dist/ui/overlay/data/tutorials/planning/prd.d.ts +7 -0
  317. package/dist/ui/overlay/data/tutorials/planning/prd.js +173 -0
  318. package/dist/ui/overlay/data/tutorials/planning/scaffold.d.ts +7 -0
  319. package/dist/ui/overlay/data/tutorials/planning/scaffold.js +164 -0
  320. package/dist/ui/overlay/data/tutorials/planning/sketch.d.ts +7 -0
  321. package/dist/ui/overlay/data/tutorials/planning/sketch.js +58 -0
  322. package/dist/ui/overlay/data/tutorials/projects/anchors.d.ts +7 -0
  323. package/dist/ui/overlay/data/tutorials/projects/anchors.js +248 -0
  324. package/dist/ui/overlay/data/tutorials/projects/import-project.d.ts +7 -0
  325. package/dist/ui/overlay/data/tutorials/projects/import-project.js +172 -0
  326. package/dist/ui/overlay/data/tutorials/projects/managing-projects.d.ts +8 -0
  327. package/dist/ui/overlay/data/tutorials/projects/managing-projects.js +212 -0
  328. package/dist/ui/overlay/data/tutorials/projects/new-project.d.ts +7 -0
  329. package/dist/ui/overlay/data/tutorials/projects/new-project.js +251 -0
  330. package/dist/ui/overlay/data/tutorials/projects/session-management.d.ts +7 -0
  331. package/dist/ui/overlay/data/tutorials/projects/session-management.js +169 -0
  332. package/dist/ui/overlay/data/tutorials/teams/background-execution.d.ts +7 -0
  333. package/dist/ui/overlay/data/tutorials/teams/background-execution.js +171 -0
  334. package/dist/ui/overlay/data/tutorials/teams/multi-terminal.d.ts +8 -0
  335. package/dist/ui/overlay/data/tutorials/teams/multi-terminal.js +147 -0
  336. package/dist/ui/overlay/data/tutorials/teams/task-assignment.d.ts +7 -0
  337. package/dist/ui/overlay/data/tutorials/teams/task-assignment.js +204 -0
  338. package/dist/ui/overlay/data/tutorials/teams/team-overview.d.ts +7 -0
  339. package/dist/ui/overlay/data/tutorials/teams/team-overview.js +165 -0
  340. package/dist/ui/overlay/data/tutorials/teams/working-with-agents.d.ts +7 -0
  341. package/dist/ui/overlay/data/tutorials/teams/working-with-agents.js +172 -0
  342. package/dist/ui/overlay/impl/agents-overlay-v2.js +6 -17
  343. package/dist/ui/overlay/impl/anchors-overlay-v2.js +30 -64
  344. package/dist/ui/overlay/impl/artifact-detail-overlay-v2.d.ts +43 -0
  345. package/dist/ui/overlay/impl/artifact-detail-overlay-v2.js +232 -0
  346. package/dist/ui/overlay/impl/artifact-overlay-v2.d.ts +40 -0
  347. package/dist/ui/overlay/impl/artifact-overlay-v2.js +115 -0
  348. package/dist/ui/overlay/impl/ask-user-overlay-v2.js +2 -5
  349. package/dist/ui/overlay/impl/background-overlay-v2.d.ts +40 -0
  350. package/dist/ui/overlay/impl/background-overlay-v2.js +147 -0
  351. package/dist/ui/overlay/impl/backlog-overlay-v2.d.ts +4 -1
  352. package/dist/ui/overlay/impl/backlog-overlay-v2.js +55 -16
  353. package/dist/ui/overlay/impl/changelog-overlay-v2.d.ts +44 -0
  354. package/dist/ui/overlay/impl/changelog-overlay-v2.js +165 -0
  355. package/dist/ui/overlay/impl/commands-overlay-v2.js +4 -6
  356. package/dist/ui/overlay/impl/config-overlay-v2.d.ts +12 -1
  357. package/dist/ui/overlay/impl/config-overlay-v2.js +164 -100
  358. package/dist/ui/overlay/impl/custom-agent-form-overlay-v2.d.ts +83 -0
  359. package/dist/ui/overlay/impl/custom-agent-form-overlay-v2.js +711 -0
  360. package/dist/ui/overlay/impl/dashboard-overlay-v2.d.ts +2 -0
  361. package/dist/ui/overlay/impl/dashboard-overlay-v2.js +26 -3
  362. package/dist/ui/overlay/impl/delegations-overlay-v2.d.ts +28 -0
  363. package/dist/ui/overlay/impl/delegations-overlay-v2.js +279 -0
  364. package/dist/ui/overlay/impl/docs-overlay-v2.js +12 -9
  365. package/dist/ui/overlay/impl/document-detail-overlay-v2.d.ts +7 -0
  366. package/dist/ui/overlay/impl/document-detail-overlay-v2.js +119 -78
  367. package/dist/ui/overlay/impl/filter-overlay-v2.d.ts +41 -0
  368. package/dist/ui/overlay/impl/filter-overlay-v2.js +110 -0
  369. package/dist/ui/overlay/impl/games-overlay-v2.d.ts +31 -0
  370. package/dist/ui/overlay/impl/games-overlay-v2.js +135 -0
  371. package/dist/ui/overlay/impl/help-overlay-v2.d.ts +26 -3
  372. package/dist/ui/overlay/impl/help-overlay-v2.js +20 -42
  373. package/dist/ui/overlay/impl/login-overlay-v2.d.ts +49 -0
  374. package/dist/ui/overlay/impl/login-overlay-v2.js +277 -0
  375. package/dist/ui/overlay/impl/mcp-overlay-v2.d.ts +63 -0
  376. package/dist/ui/overlay/impl/mcp-overlay-v2.js +907 -0
  377. package/dist/ui/overlay/impl/model-overlay-v2.d.ts +57 -13
  378. package/dist/ui/overlay/impl/model-overlay-v2.js +1086 -61
  379. package/dist/ui/overlay/impl/new-overlay-v2.d.ts +37 -6
  380. package/dist/ui/overlay/impl/new-overlay-v2.js +715 -65
  381. package/dist/ui/overlay/impl/notifications-overlay-v2.d.ts +20 -0
  382. package/dist/ui/overlay/impl/notifications-overlay-v2.js +116 -0
  383. package/dist/ui/overlay/impl/onboarding-wizard-overlay-v2.d.ts +76 -0
  384. package/dist/ui/overlay/impl/onboarding-wizard-overlay-v2.js +728 -0
  385. package/dist/ui/overlay/impl/pending-overlay-v2.d.ts +51 -0
  386. package/dist/ui/overlay/impl/pending-overlay-v2.js +445 -0
  387. package/dist/ui/overlay/impl/permission-overlay-v2.js +5 -5
  388. package/dist/ui/overlay/impl/permissions-overlay-v2.d.ts +85 -0
  389. package/dist/ui/overlay/impl/permissions-overlay-v2.js +820 -0
  390. package/dist/ui/overlay/impl/plan-approval-overlay-v2.d.ts +35 -0
  391. package/dist/ui/overlay/impl/plan-approval-overlay-v2.js +181 -0
  392. package/dist/ui/overlay/impl/project-edit-overlay-v2.d.ts +36 -0
  393. package/dist/ui/overlay/impl/project-edit-overlay-v2.js +195 -0
  394. package/dist/ui/overlay/impl/projects-overlay-v2.d.ts +1 -0
  395. package/dist/ui/overlay/impl/projects-overlay-v2.js +278 -44
  396. package/dist/ui/overlay/impl/reset-overlay-v2.d.ts +39 -0
  397. package/dist/ui/overlay/impl/reset-overlay-v2.js +107 -0
  398. package/dist/ui/overlay/impl/resume-overlay-v2.d.ts +60 -0
  399. package/dist/ui/overlay/impl/resume-overlay-v2.js +414 -0
  400. package/dist/ui/overlay/impl/session-mode-overlay-v2.d.ts +43 -0
  401. package/dist/ui/overlay/impl/session-mode-overlay-v2.js +124 -0
  402. package/dist/ui/overlay/impl/tasks-overlay-v2.d.ts +28 -0
  403. package/dist/ui/overlay/impl/tasks-overlay-v2.js +283 -0
  404. package/dist/ui/overlay/impl/team-overlay-v2.d.ts +86 -0
  405. package/dist/ui/overlay/impl/team-overlay-v2.js +692 -0
  406. package/dist/ui/overlay/impl/terminals-overlay-v2.d.ts +26 -0
  407. package/dist/ui/overlay/impl/terminals-overlay-v2.js +217 -0
  408. package/dist/ui/overlay/impl/tools-overlay-v2.js +3 -7
  409. package/dist/ui/overlay/impl/tutorial-overlay-v2.d.ts +30 -16
  410. package/dist/ui/overlay/impl/tutorial-overlay-v2.js +133 -956
  411. package/dist/ui/overlay/impl/workflow-overlay-v2.d.ts +1 -0
  412. package/dist/ui/overlay/impl/workflow-overlay-v2.js +10 -4
  413. package/dist/ui/overlay/index.d.ts +20 -1
  414. package/dist/ui/overlay/index.js +19 -0
  415. package/dist/ui/overlay/types.d.ts +5 -0
  416. package/dist/ui/overlay-manager.d.ts +43 -0
  417. package/dist/ui/overlay-manager.js +238 -0
  418. package/dist/ui/overlays.js +4 -16
  419. package/dist/ui/permission-overlay.js +6 -5
  420. package/dist/ui/status-bar-controller.d.ts +33 -0
  421. package/dist/ui/status-bar-controller.js +99 -0
  422. package/dist/ui/subagent-renderer.js +3 -19
  423. package/dist/ui/terminal-autocomplete-utils.d.ts +23 -0
  424. package/dist/ui/terminal-autocomplete-utils.js +83 -0
  425. package/dist/ui/terminal-line-builders.d.ts +17 -0
  426. package/dist/ui/terminal-line-builders.js +42 -0
  427. package/dist/ui/terminal-render-item.d.ts +16 -0
  428. package/dist/ui/terminal-render-item.js +267 -0
  429. package/dist/ui/terminal-renderer.d.ts +7 -8
  430. package/dist/ui/terminal-renderer.js +7 -8
  431. package/dist/ui/terminal-types.d.ts +179 -0
  432. package/dist/ui/terminal-types.js +34 -0
  433. package/dist/ui/terminal-ui.d.ts +144 -276
  434. package/dist/ui/terminal-ui.js +384 -1861
  435. package/dist/ui/todo-zone.d.ts +19 -1
  436. package/dist/ui/todo-zone.js +71 -13
  437. package/dist/ui/tool-formatters.js +696 -1
  438. package/dist/ui/turn-metrics.d.ts +56 -0
  439. package/dist/ui/turn-metrics.js +75 -0
  440. package/dist/ui/types.d.ts +28 -0
  441. package/dist/ui/types.js +1 -0
  442. package/dist/ui/vscode-diff-ipc.d.ts +102 -0
  443. package/dist/ui/vscode-diff-ipc.js +385 -0
  444. package/dist/utils/credentials.d.ts +24 -5
  445. package/dist/utils/credentials.js +123 -9
  446. package/dist/utils/format-tokens.d.ts +13 -0
  447. package/dist/utils/format-tokens.js +18 -0
  448. package/dist/utils/git-config.d.ts +26 -0
  449. package/dist/utils/git-config.js +54 -0
  450. package/dist/utils/message-utils.d.ts +61 -0
  451. package/dist/utils/message-utils.js +72 -0
  452. package/dist/utils/model-tiers.d.ts +8 -1
  453. package/dist/utils/model-tiers.js +38 -16
  454. package/dist/utils/open-browser.d.ts +5 -0
  455. package/dist/utils/open-browser.js +32 -0
  456. package/dist/utils/path-safety.js +3 -2
  457. package/dist/utils/project-detection.d.ts +58 -0
  458. package/dist/utils/project-detection.js +424 -0
  459. package/dist/utils/project-memory.js +2 -1
  460. package/dist/utils/project-status.d.ts +2 -2
  461. package/dist/utils/startup-perf.d.ts +18 -0
  462. package/dist/utils/startup-perf.js +60 -0
  463. package/dist/utils/token-tracker.d.ts +62 -0
  464. package/dist/utils/token-tracker.js +150 -0
  465. package/dist/utils/token-types.d.ts +23 -0
  466. package/dist/utils/token-types.js +18 -0
  467. package/dist/utils/types/config-types.d.ts +32 -0
  468. package/dist/utils/types/config-types.js +8 -0
  469. package/dist/utils/update-checker.d.ts +28 -0
  470. package/dist/utils/update-checker.js +106 -0
  471. package/dist/utils/version.d.ts +7 -0
  472. package/dist/utils/version.js +10 -0
  473. package/dist/utils/vscode-detect.d.ts +39 -0
  474. package/dist/utils/vscode-detect.js +137 -0
  475. package/package.json +27 -13
  476. package/dist/commands/handler-types.d.ts +0 -68
  477. package/dist/commands/handler-types.js +0 -8
  478. package/dist/commands/handlers/agent-commands.d.ts +0 -13
  479. package/dist/commands/handlers/agent-commands.js +0 -305
  480. package/dist/commands/handlers/design-commands.d.ts +0 -15
  481. package/dist/commands/handlers/design-commands.js +0 -334
  482. package/dist/commands/handlers/index.d.ts +0 -20
  483. package/dist/commands/handlers/index.js +0 -43
  484. package/dist/commands/handlers/overlay-commands.d.ts +0 -21
  485. package/dist/commands/handlers/overlay-commands.js +0 -287
  486. package/dist/commands/handlers/project-commands.d.ts +0 -11
  487. package/dist/commands/handlers/project-commands.js +0 -167
  488. package/dist/commands/handlers/simple-commands.d.ts +0 -19
  489. package/dist/commands/handlers/simple-commands.js +0 -144
  490. package/dist/commands/registry.d.ts +0 -50
  491. package/dist/commands/registry.js +0 -75
  492. package/dist/index.old.d.ts +0 -7
  493. package/dist/index.old.js +0 -1014
  494. package/dist/repl.d.ts +0 -149
  495. package/dist/repl.js +0 -1151
  496. package/dist/templates/claude-md.d.ts +0 -7
  497. package/dist/templates/claude-md.js +0 -189
  498. package/dist/test-autocomplete.d.ts +0 -7
  499. package/dist/test-autocomplete.js +0 -85
  500. package/dist/test-tabbed-menu.d.ts +0 -7
  501. package/dist/test-tabbed-menu.js +0 -25
  502. package/dist/tool-selector.d.ts +0 -71
  503. package/dist/tool-selector.js +0 -184
  504. package/dist/tools/anchor-tools.d.ts +0 -31
  505. package/dist/tools/anchor-tools.js +0 -255
  506. package/dist/tools/backlog-wrappers.d.ts +0 -54
  507. package/dist/tools/backlog-wrappers.js +0 -338
  508. package/dist/tools/document-db.d.ts +0 -43
  509. package/dist/tools/document-db.js +0 -220
  510. package/dist/tools/workitem-db.d.ts +0 -103
  511. package/dist/tools/workitem-db.js +0 -549
  512. package/dist/ui/agents-overlay-v2.d.ts +0 -43
  513. package/dist/ui/agents-overlay-v2.js +0 -809
  514. package/dist/ui/agents-overlay.d.ts +0 -12
  515. package/dist/ui/agents-overlay.js +0 -863
  516. package/dist/ui/anchors-overlay.d.ts +0 -12
  517. package/dist/ui/anchors-overlay.js +0 -775
  518. package/dist/ui/arch-type-overlay.d.ts +0 -15
  519. package/dist/ui/arch-type-overlay.js +0 -201
  520. package/dist/ui/ask-user-overlay-v2.d.ts +0 -26
  521. package/dist/ui/ask-user-overlay-v2.js +0 -555
  522. package/dist/ui/ask-user-simple-overlay-v2.d.ts +0 -25
  523. package/dist/ui/ask-user-simple-overlay-v2.js +0 -215
  524. package/dist/ui/backlog-overlay.d.ts +0 -32
  525. package/dist/ui/backlog-overlay.js +0 -652
  526. package/dist/ui/commands-overlay-v2.d.ts +0 -33
  527. package/dist/ui/commands-overlay-v2.js +0 -441
  528. package/dist/ui/commands-overlay.d.ts +0 -16
  529. package/dist/ui/commands-overlay.js +0 -439
  530. package/dist/ui/config-overlay.d.ts +0 -35
  531. package/dist/ui/config-overlay.js +0 -707
  532. package/dist/ui/docs-overlay.d.ts +0 -17
  533. package/dist/ui/docs-overlay.js +0 -303
  534. package/dist/ui/footer-v2.d.ts +0 -222
  535. package/dist/ui/footer-v2.js +0 -1349
  536. package/dist/ui/help-overlay-v2.d.ts +0 -34
  537. package/dist/ui/help-overlay-v2.js +0 -309
  538. package/dist/ui/help-overlay.d.ts +0 -16
  539. package/dist/ui/help-overlay.js +0 -316
  540. package/dist/ui/init-overlay-v2.d.ts +0 -34
  541. package/dist/ui/init-overlay-v2.js +0 -600
  542. package/dist/ui/init-overlay.d.ts +0 -34
  543. package/dist/ui/init-overlay.js +0 -604
  544. package/dist/ui/input-prompt-v2.d.ts +0 -180
  545. package/dist/ui/input-prompt-v2.js +0 -999
  546. package/dist/ui/iteration-limit-overlay-v2.d.ts +0 -21
  547. package/dist/ui/iteration-limit-overlay-v2.js +0 -114
  548. package/dist/ui/keys-overlay-v2.d.ts +0 -41
  549. package/dist/ui/keys-overlay-v2.js +0 -248
  550. package/dist/ui/mascot-overlay-v2.d.ts +0 -41
  551. package/dist/ui/mascot-overlay-v2.js +0 -138
  552. package/dist/ui/mascot-overlay.d.ts +0 -21
  553. package/dist/ui/mascot-overlay.js +0 -146
  554. package/dist/ui/model-overlay-v2.d.ts +0 -49
  555. package/dist/ui/model-overlay-v2.js +0 -118
  556. package/dist/ui/model-overlay.d.ts +0 -27
  557. package/dist/ui/model-overlay.js +0 -221
  558. package/dist/ui/model-warning-overlay.d.ts +0 -30
  559. package/dist/ui/model-warning-overlay.js +0 -169
  560. package/dist/ui/new-overlay.d.ts +0 -34
  561. package/dist/ui/new-overlay.js +0 -604
  562. package/dist/ui/overlay/impl/init-overlay-v2.d.ts +0 -77
  563. package/dist/ui/overlay/impl/init-overlay-v2.js +0 -593
  564. package/dist/ui/overlay/overlay-types.d.ts +0 -128
  565. package/dist/ui/overlay/overlay-types.js +0 -22
  566. package/dist/ui/overlays/help-overlay-v2.d.ts +0 -28
  567. package/dist/ui/overlays/help-overlay-v2.js +0 -198
  568. package/dist/ui/overlays/index.d.ts +0 -11
  569. package/dist/ui/overlays/index.js +0 -11
  570. package/dist/ui/permission-overlay-v2.d.ts +0 -36
  571. package/dist/ui/permission-overlay-v2.js +0 -380
  572. package/dist/ui/projects-overlay.d.ts +0 -19
  573. package/dist/ui/projects-overlay.js +0 -484
  574. package/dist/ui/theme-overlay-v2.d.ts +0 -42
  575. package/dist/ui/theme-overlay-v2.js +0 -135
  576. package/dist/ui/theme-overlay.d.ts +0 -24
  577. package/dist/ui/theme-overlay.js +0 -127
  578. package/dist/ui/tools-overlay-v2.d.ts +0 -47
  579. package/dist/ui/tools-overlay-v2.js +0 -218
  580. package/dist/ui/tools-overlay.d.ts +0 -34
  581. package/dist/ui/tools-overlay.js +0 -230
  582. package/dist/ui/tutorial-overlay-v2.d.ts +0 -31
  583. package/dist/ui/tutorial-overlay-v2.js +0 -1035
  584. package/dist/ui/tutorial-overlay.d.ts +0 -11
  585. package/dist/ui/tutorial-overlay.js +0 -1034
  586. package/dist/ui/workflow-overlay.d.ts +0 -22
  587. package/dist/ui/workflow-overlay.js +0 -636
@@ -4,6 +4,7 @@
4
4
  * Extracts content, summary, and success from tool results.
5
5
  * Each tool type has its own formatter to produce human-readable output.
6
6
  */
7
+ import { truncate } from './base/index.js';
7
8
  /**
8
9
  * Format tool result for display.
9
10
  * Handles the agent's structured result format.
@@ -16,6 +17,10 @@ export function formatToolResult(toolName, result) {
16
17
  // Check for success/result wrapper
17
18
  const success = obj.success !== false;
18
19
  const innerResult = (obj.result ?? obj);
20
+ // Handle delegated results — large tool outputs that were auto-summarized
21
+ if (innerResult._delegated === true) {
22
+ return formatDelegated(toolName, innerResult);
23
+ }
19
24
  // Extract content based on tool type
20
25
  let content = '';
21
26
  let summary = '';
@@ -95,6 +100,99 @@ export function formatToolResult(toolName, result) {
95
100
  else if (toolLower === 'task') {
96
101
  ({ content, summary } = formatTask(innerResult));
97
102
  }
103
+ else if (toolLower === 'plan_get') {
104
+ ({ content, summary } = formatPlanGet(innerResult));
105
+ }
106
+ else if (toolLower === 'plan_list') {
107
+ ({ content, summary } = formatPlanList(innerResult));
108
+ }
109
+ else if (toolLower === 'plan_create') {
110
+ ({ content, summary } = formatPlanCreate(innerResult));
111
+ }
112
+ else if (toolLower === 'plan_update') {
113
+ ({ content, summary } = formatPlanUpdate(innerResult));
114
+ }
115
+ else if (toolLower === 'plan_delete') {
116
+ ({ content, summary } = formatPlanDelete(innerResult));
117
+ }
118
+ else if (toolLower === 'delegate_background') {
119
+ ({ content, summary } = formatDelegateBackground(innerResult));
120
+ }
121
+ else if (toolLower === 'delegate' || toolLower === 'handoff') {
122
+ ({ content, summary } = formatDelegate(innerResult));
123
+ }
124
+ else if (toolLower === 'todo_claim' || toolLower === 'todo_handoff') {
125
+ ({ content, summary } = formatTodoClaim(innerResult));
126
+ }
127
+ else if (toolLower === 'recall_work') {
128
+ ({ content, summary } = formatRecallWork(innerResult));
129
+ }
130
+ else if (toolLower.startsWith('artifact_')) {
131
+ ({ content, summary } = formatArtifact(toolLower, innerResult));
132
+ }
133
+ else if (toolLower === 'app_model_get') {
134
+ ({ content, summary } = formatAppModelGet(innerResult));
135
+ }
136
+ else if (toolLower === 'app_model_update') {
137
+ ({ content, summary } = formatAppModelUpdate(innerResult));
138
+ }
139
+ else if (toolLower === 'app_model_validate') {
140
+ ({ content, summary } = formatAppModelValidate(innerResult));
141
+ }
142
+ else if (toolLower === 'factory_scaffold') {
143
+ ({ content, summary } = formatFactoryScaffold(innerResult));
144
+ }
145
+ else if (toolLower === 'factory_list_toolkits') {
146
+ ({ content, summary } = formatFactoryListToolkits(innerResult));
147
+ }
148
+ else if (toolLower === 'list_tools') {
149
+ ({ content, summary } = formatListTools(innerResult));
150
+ }
151
+ else if (toolLower === 'get_tool_info') {
152
+ ({ content, summary } = formatGetToolInfo(innerResult));
153
+ }
154
+ else if (toolLower === 'git_stash') {
155
+ ({ content, summary } = formatGitStash(innerResult));
156
+ }
157
+ else if (toolLower === 'git_blame') {
158
+ ({ content, summary } = formatGitBlame(innerResult));
159
+ }
160
+ else if (toolLower === 'git_file_history') {
161
+ ({ content, summary } = formatGitFileHistory(innerResult));
162
+ }
163
+ else if (toolLower === 'run_build') {
164
+ ({ content, summary } = formatRunBuild(innerResult));
165
+ }
166
+ else if (toolLower === 'run_format') {
167
+ ({ content, summary } = formatRunFormat(innerResult));
168
+ }
169
+ else if (toolLower === 'find_definition') {
170
+ ({ content, summary } = formatFindDefinition(innerResult));
171
+ }
172
+ else if (toolLower === 'find_references') {
173
+ ({ content, summary } = formatFindReferences(innerResult));
174
+ }
175
+ else if (toolLower === 'find_todos') {
176
+ ({ content, summary } = formatFindTodos(innerResult));
177
+ }
178
+ else if (toolLower === 'check_outdated') {
179
+ ({ content, summary } = formatCheckOutdated(innerResult));
180
+ }
181
+ else if (toolLower === 'find_vulnerabilities') {
182
+ ({ content, summary } = formatFindVulnerabilities(innerResult));
183
+ }
184
+ else if (toolLower === 'analyze_test_coverage') {
185
+ ({ content, summary } = formatAnalyzeTestCoverage(innerResult));
186
+ }
187
+ else if (toolLower === 'get_file_structure') {
188
+ ({ content, summary } = formatGetFileStructure(innerResult));
189
+ }
190
+ else if (toolLower === 'get_complexity') {
191
+ ({ content, summary } = formatGetComplexity(innerResult));
192
+ }
193
+ else if (toolLower === 'read_function' || toolLower === 'read_class' || toolLower === 'read_type') {
194
+ ({ content, summary } = formatReadSymbol(innerResult));
195
+ }
98
196
  else {
99
197
  // Generic handling
100
198
  ({ content, summary } = formatGeneric(innerResult));
@@ -458,7 +556,7 @@ function formatProjectDocument(toolName, result) {
458
556
  }
459
557
  const docType = document.docType || 'unknown';
460
558
  const content = document.content || '';
461
- const preview = content.length > 200 ? content.slice(0, 200) + '...' : content;
559
+ const preview = truncate(content, 200);
462
560
  return { content: preview, summary: `Document: ${docType}` };
463
561
  }
464
562
  // Handle document_list - return list of documents
@@ -504,6 +602,590 @@ function formatTask(result) {
504
602
  const content = response || '';
505
603
  return { content, summary };
506
604
  }
605
+ // =============================================================================
606
+ // Plan Formatters
607
+ // =============================================================================
608
+ function formatPlanGet(result) {
609
+ const plan = result.plan;
610
+ if (!plan) {
611
+ const message = result.message;
612
+ return { content: '', summary: message || 'Plan not found' };
613
+ }
614
+ const name = plan.name || 'Unknown';
615
+ const status = plan.status || 'draft';
616
+ const planContent = plan.content || '';
617
+ const workItem = plan.workItem;
618
+ // Build summary
619
+ let summary = `${name} [${status}]`;
620
+ if (workItem) {
621
+ const itemId = workItem.itemId || '';
622
+ summary += ` → ${itemId}`;
623
+ }
624
+ // For content, show a preview of the plan (first 500 chars with section headers visible)
625
+ const lines = planContent.split('\n');
626
+ const previewLines = [];
627
+ let charCount = 0;
628
+ const maxChars = 500;
629
+ for (const line of lines) {
630
+ if (charCount >= maxChars) {
631
+ previewLines.push('...');
632
+ break;
633
+ }
634
+ previewLines.push(line);
635
+ charCount += line.length + 1;
636
+ }
637
+ const content = previewLines.join('\n');
638
+ return { content, summary };
639
+ }
640
+ function formatPlanList(result) {
641
+ const plans = result.plans;
642
+ const count = result.count;
643
+ const statusCounts = result.statusCounts;
644
+ if (!plans?.length) {
645
+ return { content: '', summary: 'No plans found' };
646
+ }
647
+ // Build summary with status counts
648
+ let summary = `${String(count ?? plans.length)} plan(s)`;
649
+ if (statusCounts) {
650
+ const statuses = [];
651
+ if (statusCounts.draft)
652
+ statuses.push(`${String(statusCounts.draft)} draft`);
653
+ if (statusCounts.approved)
654
+ statuses.push(`${String(statusCounts.approved)} approved`);
655
+ if (statusCounts.in_progress)
656
+ statuses.push(`${String(statusCounts.in_progress)} in progress`);
657
+ if (statusCounts.completed)
658
+ statuses.push(`${String(statusCounts.completed)} completed`);
659
+ if (statuses.length)
660
+ summary += ` (${statuses.join(', ')})`;
661
+ }
662
+ // Build content with plan list
663
+ const lines = plans.slice(0, 10).map((p) => {
664
+ const status = p.status ? `[${p.status}]` : '';
665
+ const workItem = p.workItemItemId ? ` → ${p.workItemItemId}` : '';
666
+ return `${p.name || '?'} ${status}${workItem}`;
667
+ });
668
+ if (plans.length > 10) {
669
+ lines.push(`... and ${String(plans.length - 10)} more`);
670
+ }
671
+ return { content: lines.join('\n'), summary };
672
+ }
673
+ function formatPlanCreate(result) {
674
+ const message = result.message;
675
+ const plan = result.plan;
676
+ if (message) {
677
+ return { content: '', summary: message };
678
+ }
679
+ if (plan) {
680
+ const name = plan.name || 'Unknown';
681
+ const id = plan.id;
682
+ return { content: '', summary: `Created plan: ${name}${id ? ` (ID: ${String(id)})` : ''}` };
683
+ }
684
+ return { content: '', summary: 'Plan created' };
685
+ }
686
+ function formatPlanUpdate(result) {
687
+ const message = result.message;
688
+ const plan = result.plan;
689
+ if (message) {
690
+ return { content: '', summary: message };
691
+ }
692
+ if (plan) {
693
+ const name = plan.name || 'Unknown';
694
+ const status = plan.status || '';
695
+ return { content: '', summary: `Updated plan: ${name}${status ? ` [${status}]` : ''}` };
696
+ }
697
+ return { content: '', summary: 'Plan updated' };
698
+ }
699
+ function formatPlanDelete(result) {
700
+ const message = result.message;
701
+ return { content: '', summary: message || 'Plan deleted' };
702
+ }
703
+ // =============================================================================
704
+ // agents-coding Tool Formatters
705
+ // =============================================================================
706
+ function formatGitStash(result) {
707
+ const message = result.message;
708
+ const stashes = result.stashes;
709
+ if (message) {
710
+ return { content: '', summary: message };
711
+ }
712
+ if (stashes?.length) {
713
+ const lines = stashes.slice(0, 5).map((s) => `stash@{${String(s.index ?? 0)}}: ${(s.message || '').slice(0, 50)}`);
714
+ if (stashes.length > 5)
715
+ lines.push(`... and ${String(stashes.length - 5)} more`);
716
+ return { content: lines.join('\n'), summary: `${String(stashes.length)} stash(es)` };
717
+ }
718
+ return { content: '', summary: 'No stashes' };
719
+ }
720
+ function formatGitBlame(result) {
721
+ const lines = result.lines;
722
+ const authors = result.authorSummary;
723
+ if (authors?.length) {
724
+ const topAuthors = authors.slice(0, 3).map((a) => `${a.author || '?'}: ${String(a.lines ?? 0)} lines`).join(', ');
725
+ const summary = `${String(lines?.length ?? 0)} lines, ${topAuthors}`;
726
+ return { content: '', summary };
727
+ }
728
+ return { content: '', summary: `${String(lines?.length ?? 0)} lines analyzed` };
729
+ }
730
+ function formatGitFileHistory(result) {
731
+ const commits = result.commits;
732
+ const file = result.file;
733
+ if (!commits?.length) {
734
+ return { content: '', summary: 'No history found' };
735
+ }
736
+ const summary = `${String(commits.length)} commit(s) for ${file || 'file'}`;
737
+ const lines = commits.slice(0, 5).map((c) => `${c.shortHash || '?'} ${(c.subject || '').slice(0, 50)}`);
738
+ if (commits.length > 5)
739
+ lines.push(`... and ${String(commits.length - 5)} more`);
740
+ return { content: lines.join('\n'), summary };
741
+ }
742
+ function formatRunBuild(result) {
743
+ const success = result.success;
744
+ const command = result.command;
745
+ const stdout = result.stdout;
746
+ const status = success === false ? 'Build failed' : 'Build succeeded';
747
+ const summary = command ? `${status} (${command})` : status;
748
+ return { content: stdout || '', summary };
749
+ }
750
+ function formatRunFormat(result) {
751
+ const filesFormatted = result.filesFormatted;
752
+ const command = result.command;
753
+ if (filesFormatted !== undefined) {
754
+ return { content: '', summary: `Formatted ${String(filesFormatted)} file(s)` };
755
+ }
756
+ return { content: '', summary: command ? `Ran ${command}` : 'Format complete' };
757
+ }
758
+ function formatFindDefinition(result) {
759
+ const definitions = result.definitions;
760
+ if (!definitions?.length) {
761
+ return { content: '', summary: 'No definitions found' };
762
+ }
763
+ const summary = `Found ${String(definitions.length)} definition(s)`;
764
+ const lines = definitions.slice(0, 5).map((d) => `${d.path || '?'}:${String(d.line ?? 0)} [${d.type || '?'}] ${d.name || ''}`);
765
+ if (definitions.length > 5)
766
+ lines.push(`... and ${String(definitions.length - 5)} more`);
767
+ return { content: lines.join('\n'), summary };
768
+ }
769
+ function formatFindReferences(result) {
770
+ const references = result.references;
771
+ const totalCount = result.totalCount;
772
+ const count = totalCount ?? references?.length ?? 0;
773
+ if (count === 0) {
774
+ return { content: '', summary: 'No references found' };
775
+ }
776
+ const summary = `Found ${String(count)} reference(s)`;
777
+ if (references?.length) {
778
+ const lines = references.slice(0, 5).map((r) => `${r.path || '?'}:${String(r.line ?? 0)}`);
779
+ if (references.length > 5)
780
+ lines.push(`... and ${String(references.length - 5)} more`);
781
+ return { content: lines.join('\n'), summary };
782
+ }
783
+ return { content: '', summary };
784
+ }
785
+ function formatFindTodos(result) {
786
+ const todos = result.todos;
787
+ if (!todos?.length) {
788
+ return { content: '', summary: 'No TODOs found' };
789
+ }
790
+ const summary = `Found ${String(todos.length)} TODO(s)`;
791
+ const lines = todos.slice(0, 5).map((t) => `${t.path || '?'}:${String(t.line ?? 0)} [${t.type || 'TODO'}] ${(t.text || '').slice(0, 40)}`);
792
+ if (todos.length > 5)
793
+ lines.push(`... and ${String(todos.length - 5)} more`);
794
+ return { content: lines.join('\n'), summary };
795
+ }
796
+ function formatCheckOutdated(result) {
797
+ const packages = result.packages;
798
+ if (!packages?.length) {
799
+ return { content: '', summary: 'All packages up to date' };
800
+ }
801
+ const summary = `${String(packages.length)} outdated package(s)`;
802
+ const lines = packages.slice(0, 5).map((p) => `${p.name || '?'}: ${p.current || '?'} → ${p.latest || '?'} (${p.type || 'update'})`);
803
+ if (packages.length > 5)
804
+ lines.push(`... and ${String(packages.length - 5)} more`);
805
+ return { content: lines.join('\n'), summary };
806
+ }
807
+ function formatFindVulnerabilities(result) {
808
+ const vulnerabilities = result.vulnerabilities;
809
+ if (!vulnerabilities?.length) {
810
+ return { content: '', summary: 'No vulnerabilities found' };
811
+ }
812
+ // Count by severity
813
+ const bySeverity = {};
814
+ vulnerabilities.forEach((v) => {
815
+ const sev = v.severity || 'unknown';
816
+ bySeverity[sev] = (bySeverity[sev] || 0) + 1;
817
+ });
818
+ const sevParts = Object.entries(bySeverity).map(([k, v]) => `${String(v)} ${k}`).join(', ');
819
+ const summary = `${String(vulnerabilities.length)} vulnerabilities (${sevParts})`;
820
+ const lines = vulnerabilities.slice(0, 5).map((v) => `[${v.severity || '?'}] ${v.name || '?'}: ${(v.title || '').slice(0, 40)}`);
821
+ if (vulnerabilities.length > 5)
822
+ lines.push(`... and ${String(vulnerabilities.length - 5)} more`);
823
+ return { content: lines.join('\n'), summary };
824
+ }
825
+ function formatAnalyzeTestCoverage(result) {
826
+ const summary_data = result.summary;
827
+ const meetsThreshold = result.meetsThreshold;
828
+ if (summary_data) {
829
+ const lineCov = summary_data.lines?.pct ?? summary_data.statements?.pct ?? 0;
830
+ const funcCov = summary_data.functions?.pct ?? 0;
831
+ const branchCov = summary_data.branches?.pct ?? 0;
832
+ const status = meetsThreshold === false ? ' (below threshold)' : '';
833
+ const summary = `Coverage: ${lineCov.toFixed(1)}% lines, ${funcCov.toFixed(1)}% functions, ${branchCov.toFixed(1)}% branches${status}`;
834
+ return { content: '', summary };
835
+ }
836
+ return { content: '', summary: 'Coverage analysis complete' };
837
+ }
838
+ function formatGetFileStructure(result) {
839
+ const classes = result.classes;
840
+ const functions = result.functions;
841
+ const imports = result.imports;
842
+ const exports = result.exports;
843
+ const parts = [];
844
+ if (classes?.length)
845
+ parts.push(`${String(classes.length)} class(es)`);
846
+ if (functions?.length)
847
+ parts.push(`${String(functions.length)} function(s)`);
848
+ if (imports?.length)
849
+ parts.push(`${String(imports.length)} import(s)`);
850
+ if (exports?.length)
851
+ parts.push(`${String(exports.length)} export(s)`);
852
+ const summary = parts.length > 0 ? parts.join(', ') : 'Empty file';
853
+ // Build detailed content
854
+ const lines = [];
855
+ if (classes?.length) {
856
+ lines.push('Classes:');
857
+ classes.slice(0, 5).forEach((c) => lines.push(` - ${c.name || '?'}`));
858
+ if (classes.length > 5)
859
+ lines.push(` ... and ${String(classes.length - 5)} more`);
860
+ }
861
+ if (functions?.length) {
862
+ lines.push('Functions:');
863
+ functions.slice(0, 5).forEach((f) => lines.push(` - ${f.name || '?'}`));
864
+ if (functions.length > 5)
865
+ lines.push(` ... and ${String(functions.length - 5)} more`);
866
+ }
867
+ return { content: lines.join('\n'), summary };
868
+ }
869
+ function formatGetComplexity(result) {
870
+ const files = result.files;
871
+ const functions_data = result.functions;
872
+ if (functions_data?.length) {
873
+ const highComplexity = functions_data.filter((f) => (f.complexity ?? 0) > 10);
874
+ if (highComplexity.length > 0) {
875
+ const summary = `${String(highComplexity.length)} high-complexity function(s)`;
876
+ const lines = highComplexity.slice(0, 5).map((f) => `${f.name || '?'}: complexity ${String(f.complexity ?? 0)}`);
877
+ if (highComplexity.length > 5)
878
+ lines.push(`... and ${String(highComplexity.length - 5)} more`);
879
+ return { content: lines.join('\n'), summary };
880
+ }
881
+ return { content: '', summary: 'All functions within complexity threshold' };
882
+ }
883
+ if (files?.length) {
884
+ const summary = `Analyzed ${String(files.length)} file(s)`;
885
+ return { content: '', summary };
886
+ }
887
+ return { content: '', summary: 'Complexity analysis complete' };
888
+ }
889
+ function formatReadSymbol(result) {
890
+ const name = result.name;
891
+ const kind = result.kind;
892
+ const startLine = result.startLine;
893
+ const endLine = result.endLine;
894
+ const codeContent = result.content;
895
+ const signature = result.signature;
896
+ const container = result.container;
897
+ // Build summary: [kind] name (lines X-Y)
898
+ const kindLabel = kind || 'symbol';
899
+ const lineRange = startLine && endLine ? ` (lines ${String(startLine)}-${String(endLine)})` : '';
900
+ const containerInfo = container ? ` in ${container}` : '';
901
+ const summary = `[${kindLabel}] ${name || '?'}${containerInfo}${lineRange}`;
902
+ // Content is the actual source code
903
+ // Format it nicely with line numbers
904
+ if (codeContent) {
905
+ const lines = codeContent.split('\n');
906
+ const start = startLine ?? 1;
907
+ const numberedLines = lines.map((line, i) => {
908
+ const lineNum = String(start + i).padStart(4, ' ');
909
+ return `${lineNum} │ ${line}`;
910
+ });
911
+ return { content: numberedLines.join('\n'), summary };
912
+ }
913
+ // Fallback to signature if no content
914
+ if (signature) {
915
+ return { content: signature, summary };
916
+ }
917
+ return { content: '', summary };
918
+ }
919
+ function formatTodoClaim(result) {
920
+ const message = result.message;
921
+ return { content: '', summary: message || 'Done' };
922
+ }
923
+ function formatRecallWork(result) {
924
+ const episodes = result.episodes;
925
+ const totalEpisodes = result.totalEpisodes;
926
+ const totalEffort = result.totalEffort;
927
+ const uncommittedCount = result.uncommittedCount;
928
+ if (!episodes?.length) {
929
+ return { content: '', summary: 'No work history' };
930
+ }
931
+ // Summary line
932
+ const uncommittedInfo = uncommittedCount ? `, ${String(uncommittedCount)} uncommitted` : '';
933
+ const summary = `${String(totalEpisodes ?? episodes.length)} episode(s), effort: ${totalEffort || '?'}${uncommittedInfo}`;
934
+ // Build detailed content
935
+ const lines = [];
936
+ for (const ep of episodes.slice(0, 10)) {
937
+ const time = ep.timestamp ? new Date(ep.timestamp).toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' }) : '?';
938
+ const agent = ep.agentId || '?';
939
+ const action = ep.summary || ep.action || '?';
940
+ const effort = ep.effort ? `[${ep.effort}]` : '';
941
+ lines.push(`${time} ${agent} ${effort} ${action}`);
942
+ }
943
+ if (episodes.length > 10) {
944
+ lines.push(`... and ${String(episodes.length - 10)} more`);
945
+ }
946
+ return { content: lines.join('\n'), summary };
947
+ }
948
+ function formatArtifact(toolName, result) {
949
+ const action = toolName.replace('artifact_', '');
950
+ // artifact_list
951
+ if (action === 'list') {
952
+ const content = typeof result.content === 'string' ? result.content : '';
953
+ const lines = content.split('\n').filter((l) => l.length > 0);
954
+ // First line is typically "Found N artifacts:"
955
+ const summary = lines.length > 0 ? lines[0].slice(0, 60) : 'No artifacts';
956
+ return { content: '', summary };
957
+ }
958
+ // artifact_save
959
+ if (action === 'save') {
960
+ const content = typeof result.content === 'string' ? result.content : '';
961
+ const match = /Created artifact "([^"]+)"/.exec(content);
962
+ return { content: '', summary: match ? `Saved: ${match[1]}` : 'Artifact saved' };
963
+ }
964
+ // artifact_get
965
+ if (action === 'get') {
966
+ const content = typeof result.content === 'string' ? result.content : '';
967
+ const match = /Artifact: (.+)/.exec(content);
968
+ return { content, summary: match ? match[1].slice(0, 60) : 'Artifact retrieved' };
969
+ }
970
+ // artifact_delete
971
+ if (action === 'delete') {
972
+ const content = typeof result.content === 'string' ? result.content : '';
973
+ const match = /Deleted artifact "([^"]+)"/.exec(content);
974
+ return { content: '', summary: match ? `Deleted: ${match[1]}` : 'Artifact deleted' };
975
+ }
976
+ // Fallback
977
+ const message = typeof result.content === 'string' ? result.content.split('\n')[0] : '';
978
+ return { content: '', summary: message.slice(0, 60) || 'Done' };
979
+ }
980
+ function formatListTools(result) {
981
+ const count = result.count;
982
+ const tools = result.tools;
983
+ if (tools?.length) {
984
+ const names = tools.slice(0, 8).map((t) => t.name || '?').join(', ');
985
+ const more = tools.length > 8 ? `, +${String(tools.length - 8)} more` : '';
986
+ return { content: '', summary: `${String(count ?? tools.length)} tools: ${names}${more}` };
987
+ }
988
+ return { content: '', summary: count ? `${String(count)} tools available` : 'No tools' };
989
+ }
990
+ function formatGetToolInfo(result) {
991
+ // Compact schema format (SDK 0.1.15+): result is a string like "tool_name(...)\n description"
992
+ if (typeof result === 'string') {
993
+ // Extract tool name from signature line: "tool_name(params...)"
994
+ const parenIdx = result.indexOf('(');
995
+ const toolName = parenIdx > 0 ? result.slice(0, parenIdx) : null;
996
+ if (toolName) {
997
+ return { content: '', summary: `Schema: ${toolName}` };
998
+ }
999
+ return { content: '', summary: result.split('\n')[0].slice(0, 80) };
1000
+ }
1001
+ // Legacy object format: { name, description, parameters }
1002
+ const name = result.name;
1003
+ if (name) {
1004
+ return { content: '', summary: `Schema: ${name}` };
1005
+ }
1006
+ return { content: '', summary: 'Tool info' };
1007
+ }
1008
+ function formatDelegateBackground(result) {
1009
+ const delegated = result.delegated;
1010
+ const delegationId = result.delegationId;
1011
+ const status = result.status;
1012
+ const message = result.message;
1013
+ const error = result.error;
1014
+ if (error) {
1015
+ return { content: '', summary: error };
1016
+ }
1017
+ if (delegated && delegationId) {
1018
+ const shortId = delegationId.replace('del_', '');
1019
+ const statusLabel = status === 'queued' ? 'queued' : 'running';
1020
+ return { content: '', summary: `${shortId} ${statusLabel}` };
1021
+ }
1022
+ return { content: '', summary: message || 'Delegated' };
1023
+ }
1024
+ function formatDelegate(result) {
1025
+ const message = result.message;
1026
+ return { content: '', summary: message || 'Delegated' };
1027
+ }
1028
+ // =============================================================================
1029
+ // Factory Tool Formatters
1030
+ // =============================================================================
1031
+ /**
1032
+ * Unwrap the use_tool envelope to get the actual tool result.
1033
+ * use_tool wraps as: { tool, status, message, result: { success, result: actualData } }
1034
+ */
1035
+ function unwrapToolResult(result) {
1036
+ const inner = result.result;
1037
+ if (inner && typeof inner === 'object' && !Array.isArray(inner)) {
1038
+ const innerObj = inner;
1039
+ // If wrapped by use_tool, the actual data is in innerObj.result
1040
+ if (innerObj.result && typeof innerObj.result === 'object' && !Array.isArray(innerObj.result)) {
1041
+ return innerObj.result;
1042
+ }
1043
+ return innerObj;
1044
+ }
1045
+ return result;
1046
+ }
1047
+ function formatAppModelGet(result) {
1048
+ const data = unwrapToolResult(result);
1049
+ // No model exists
1050
+ if (data.exists === false) {
1051
+ const message = data.message;
1052
+ return { content: '', summary: message || 'No Application Model found' };
1053
+ }
1054
+ // Summary scope
1055
+ if (data.entityCount !== undefined) {
1056
+ const name = data.name || '?';
1057
+ const entityCount = data.entityCount;
1058
+ const toolkit = data.toolkit || '?';
1059
+ const revision = data.revision;
1060
+ const entities = data.entities;
1061
+ const summary = `${name} — ${String(entityCount)} entities, toolkit: ${toolkit}${revision !== undefined ? `, rev ${String(revision)}` : ''}`;
1062
+ const lines = [];
1063
+ if (entities?.length) {
1064
+ for (const e of entities) {
1065
+ const rels = e.relationshipCount > 0 ? `, ${String(e.relationshipCount)} rel` : '';
1066
+ lines.push(` ${e.name} (${String(e.fieldCount)} fields, ${e.views.join('/')})${rels}`);
1067
+ }
1068
+ }
1069
+ const features = data.features;
1070
+ if (features) {
1071
+ const enabled = Object.entries(features).filter(([, v]) => v).map(([k]) => k);
1072
+ if (enabled.length)
1073
+ lines.push(`Features: ${enabled.join(', ')}`);
1074
+ }
1075
+ return { content: lines.join('\n'), summary };
1076
+ }
1077
+ // Single entity scope
1078
+ if (data.entity && typeof data.entity === 'object') {
1079
+ const entity = data.entity;
1080
+ const name = entity.name || '?';
1081
+ const fields = entity.fields;
1082
+ const rels = entity.relationships;
1083
+ const summary = `Entity: ${name} (${String(fields?.length ?? 0)} fields)`;
1084
+ const lines = [];
1085
+ if (fields?.length) {
1086
+ lines.push('Fields:');
1087
+ for (const f of fields)
1088
+ lines.push(` ${f.name}: ${f.type}`);
1089
+ }
1090
+ if (rels?.length) {
1091
+ lines.push('Relationships:');
1092
+ for (const r of rels)
1093
+ lines.push(` ${r.type} → ${r.target}`);
1094
+ }
1095
+ return { content: lines.join('\n'), summary };
1096
+ }
1097
+ // Section scopes (identity, features, layout, theme, techStack)
1098
+ const section = data.identity ?? data.features ?? data.layout ?? data.theme ?? data.techStack;
1099
+ if (section && typeof section === 'object') {
1100
+ const entries = Object.entries(section);
1101
+ const summary = entries.map(([k, v]) => `${k}: ${String(v)}`).join(', ');
1102
+ return { content: '', summary: truncate(summary, 80) };
1103
+ }
1104
+ // Full model fallback
1105
+ const message = data.message;
1106
+ return { content: '', summary: message || 'Application Model' };
1107
+ }
1108
+ function formatAppModelUpdate(result) {
1109
+ const data = unwrapToolResult(result);
1110
+ const op = data.op || '';
1111
+ const revision = data.revision;
1112
+ const message = data.message;
1113
+ const revInfo = revision !== undefined ? ` (rev ${String(revision)})` : '';
1114
+ const summary = message || `${op} applied${revInfo}`;
1115
+ return { content: '', summary: truncate(summary, 80) };
1116
+ }
1117
+ function formatAppModelValidate(result) {
1118
+ const data = unwrapToolResult(result);
1119
+ const valid = data.valid;
1120
+ const errors = data.errors;
1121
+ const revision = data.revision;
1122
+ if (valid) {
1123
+ return { content: '', summary: `Model valid${revision !== undefined ? ` (rev ${String(revision)})` : ''}` };
1124
+ }
1125
+ const errorCount = errors?.length ?? 0;
1126
+ const summary = `${String(errorCount)} validation error(s)`;
1127
+ const lines = errors?.slice(0, 10).map((e) => `${e.path || '?'}: ${e.message || 'error'}`) ?? [];
1128
+ if (errorCount > 10)
1129
+ lines.push(`... and ${String(errorCount - 10)} more`);
1130
+ return { content: lines.join('\n'), summary };
1131
+ }
1132
+ function formatFactoryScaffold(result) {
1133
+ const data = unwrapToolResult(result);
1134
+ const toolkit = data.toolkit || '?';
1135
+ const fileCount = data.fileCount;
1136
+ const files = data.files;
1137
+ const dryRun = data.dryRun;
1138
+ const warnings = data.warnings;
1139
+ const message = data.message;
1140
+ const mode = dryRun ? 'Dry run' : 'Generated';
1141
+ const summary = message || `${mode}: ${String(fileCount ?? 0)} files (${toolkit})`;
1142
+ // Build detailed content with file listing
1143
+ const lines = [];
1144
+ if (files?.length) {
1145
+ // Group files by directory
1146
+ const dirs = new Map();
1147
+ for (const f of files) {
1148
+ const parts = f.split('/');
1149
+ const dir = parts.length > 1 ? parts.slice(0, -1).join('/') : '.';
1150
+ const file = parts[parts.length - 1];
1151
+ const existing = dirs.get(dir);
1152
+ if (existing) {
1153
+ existing.push(file);
1154
+ }
1155
+ else {
1156
+ dirs.set(dir, [file]);
1157
+ }
1158
+ }
1159
+ for (const [dir, dirFiles] of dirs) {
1160
+ lines.push(`${dir}/`);
1161
+ for (const f of dirFiles)
1162
+ lines.push(` ${f}`);
1163
+ }
1164
+ }
1165
+ if (warnings?.length) {
1166
+ lines.push('');
1167
+ lines.push('Warnings:');
1168
+ for (const w of warnings)
1169
+ lines.push(` ! ${w}`);
1170
+ }
1171
+ return { content: lines.join('\n'), summary };
1172
+ }
1173
+ function formatFactoryListToolkits(result) {
1174
+ const data = unwrapToolResult(result);
1175
+ const count = data.count;
1176
+ const toolkits = data.toolkits;
1177
+ if (!toolkits?.length) {
1178
+ return { content: '', summary: 'No toolkits available' };
1179
+ }
1180
+ const summary = `${String(count ?? toolkits.length)} toolkit(s)`;
1181
+ const lines = toolkits.map((t) => {
1182
+ const name = t.name || t.id || '?';
1183
+ const desc = t.description ? ` — ${t.description}` : '';
1184
+ const sections = t.requiredSections?.length ? `\n Requires: ${t.requiredSections.join(', ')}` : '';
1185
+ return `${name}${desc}${sections}`;
1186
+ });
1187
+ return { content: lines.join('\n'), summary };
1188
+ }
507
1189
  function formatGeneric(result) {
508
1190
  const content = typeof result.content === 'string'
509
1191
  ? result.content
@@ -514,3 +1196,16 @@ function formatGeneric(result) {
514
1196
  const summary = lines.length > 0 ? lines[0].slice(0, 60) : 'Completed';
515
1197
  return { content, summary };
516
1198
  }
1199
+ function formatDelegated(toolName, result) {
1200
+ const originalTokens = result._originalTokens;
1201
+ const summaryTokens = result._summaryTokens;
1202
+ const summaryText = result.summary;
1203
+ // Summary line: "Delegated (24,921 → 800 tokens)"
1204
+ const tokenInfo = originalTokens && summaryTokens
1205
+ ? ` (${originalTokens.toLocaleString()} → ${summaryTokens.toLocaleString()} tokens)`
1206
+ : '';
1207
+ const summary = `Delegated${tokenInfo}`;
1208
+ // Content: the summary text (truncated for display, full in Ctrl+O)
1209
+ const content = summaryText || `[${toolName} result was auto-summarized to conserve context]`;
1210
+ return { content, summary, success: true };
1211
+ }