@compilr-dev/cli 0.4.0 → 0.5.1

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 (634) hide show
  1. package/README.md +254 -68
  2. package/dist/.tsbuildinfo.app +1 -0
  3. package/dist/.tsbuildinfo.data +1 -0
  4. package/dist/.tsbuildinfo.domain +1 -0
  5. package/dist/.tsbuildinfo.foundation +1 -0
  6. package/dist/agent.d.ts +134 -4
  7. package/dist/agent.js +345 -166
  8. package/dist/anchors/index.d.ts +9 -0
  9. package/dist/anchors/index.js +9 -0
  10. package/dist/anchors/project-anchors.d.ts +79 -0
  11. package/dist/anchors/project-anchors.js +202 -0
  12. package/dist/auth/api-client.d.ts +124 -0
  13. package/dist/auth/api-client.js +261 -0
  14. package/dist/auth/index.d.ts +172 -0
  15. package/dist/auth/index.js +545 -0
  16. package/dist/auth/storage.d.ts +52 -0
  17. package/dist/auth/storage.js +118 -0
  18. package/dist/changelog/index.d.ts +16 -0
  19. package/dist/changelog/index.js +24 -0
  20. package/dist/changelog/releases.d.ts +17 -0
  21. package/dist/changelog/releases.js +63 -0
  22. package/dist/commands/index.d.ts +2 -1
  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.d.ts +13 -0
  28. package/dist/commands-v2/handlers/context.js +533 -0
  29. package/dist/commands-v2/handlers/core.d.ts +14 -0
  30. package/dist/commands-v2/handlers/core.js +290 -0
  31. package/dist/commands-v2/handlers/debug.d.ts +11 -0
  32. package/dist/commands-v2/handlers/debug.js +177 -0
  33. package/dist/commands-v2/handlers/delegations.d.ts +8 -0
  34. package/dist/commands-v2/handlers/delegations.js +29 -0
  35. package/dist/commands-v2/handlers/files.d.ts +8 -0
  36. package/dist/commands-v2/handlers/files.js +162 -0
  37. package/dist/commands-v2/handlers/filter.d.ts +9 -0
  38. package/dist/commands-v2/handlers/filter.js +130 -0
  39. package/dist/commands-v2/handlers/games.d.ts +7 -0
  40. package/dist/commands-v2/handlers/games.js +57 -0
  41. package/dist/commands-v2/handlers/index.d.ts +25 -0
  42. package/dist/commands-v2/handlers/index.js +63 -0
  43. package/dist/commands-v2/handlers/mcp.d.ts +8 -0
  44. package/dist/commands-v2/handlers/mcp.js +39 -0
  45. package/dist/commands-v2/handlers/notifications.d.ts +9 -0
  46. package/dist/commands-v2/handlers/notifications.js +34 -0
  47. package/dist/commands-v2/handlers/project.d.ts +22 -0
  48. package/dist/commands-v2/handlers/project.js +1035 -0
  49. package/dist/commands-v2/handlers/reset.d.ts +11 -0
  50. package/dist/commands-v2/handlers/reset.js +118 -0
  51. package/dist/commands-v2/handlers/session.d.ts +161 -0
  52. package/dist/commands-v2/handlers/session.js +805 -0
  53. package/dist/commands-v2/handlers/settings.d.ts +17 -0
  54. package/dist/commands-v2/handlers/settings.js +417 -0
  55. package/dist/commands-v2/handlers/tasks.d.ts +5 -0
  56. package/dist/commands-v2/handlers/tasks.js +36 -0
  57. package/dist/commands-v2/handlers/team.d.ts +9 -0
  58. package/dist/commands-v2/handlers/team.js +549 -0
  59. package/dist/commands-v2/handlers/terminals.d.ts +9 -0
  60. package/dist/commands-v2/handlers/terminals.js +34 -0
  61. package/dist/commands-v2/index.d.ts +14 -0
  62. package/dist/commands-v2/index.js +18 -0
  63. package/dist/commands-v2/registry.d.ts +52 -0
  64. package/dist/commands-v2/registry.js +114 -0
  65. package/dist/commands-v2/types.d.ts +153 -0
  66. package/dist/commands-v2/types.js +7 -0
  67. package/dist/commands.js +123 -7
  68. package/dist/compilr-diff-companion.vsix +0 -0
  69. package/dist/db/index.js +98 -4
  70. package/dist/db/repositories/document-repository.d.ts +2 -0
  71. package/dist/db/repositories/document-repository.js +5 -1
  72. package/dist/db/repositories/index.d.ts +2 -0
  73. package/dist/db/repositories/index.js +1 -0
  74. package/dist/db/repositories/plan-repository.d.ts +101 -0
  75. package/dist/db/repositories/plan-repository.js +275 -0
  76. package/dist/db/repositories/project-repository.d.ts +6 -0
  77. package/dist/db/repositories/project-repository.js +41 -0
  78. package/dist/db/repositories/work-item-repository.d.ts +15 -0
  79. package/dist/db/repositories/work-item-repository.js +69 -4
  80. package/dist/db/schema.d.ts +40 -3
  81. package/dist/db/schema.js +66 -3
  82. package/dist/episodes/index.d.ts +20 -0
  83. package/dist/episodes/index.js +27 -0
  84. package/dist/episodes/recorder.d.ts +51 -0
  85. package/dist/episodes/recorder.js +195 -0
  86. package/dist/episodes/significant-work.d.ts +21 -0
  87. package/dist/episodes/significant-work.js +56 -0
  88. package/dist/episodes/store.d.ts +38 -0
  89. package/dist/episodes/store.js +199 -0
  90. package/dist/episodes/types.d.ts +35 -0
  91. package/dist/episodes/types.js +6 -0
  92. package/dist/episodes/work-at-risk.d.ts +12 -0
  93. package/dist/episodes/work-at-risk.js +38 -0
  94. package/dist/episodes/work-summary-anchor.d.ts +23 -0
  95. package/dist/episodes/work-summary-anchor.js +73 -0
  96. package/dist/games/coins.d.ts +66 -0
  97. package/dist/games/coins.js +165 -0
  98. package/dist/games/game-base.d.ts +84 -0
  99. package/dist/games/game-base.js +204 -0
  100. package/dist/games/index.d.ts +16 -0
  101. package/dist/games/index.js +49 -0
  102. package/dist/games/scores.d.ts +69 -0
  103. package/dist/games/scores.js +191 -0
  104. package/dist/games/tetris/board.d.ts +59 -0
  105. package/dist/games/tetris/board.js +170 -0
  106. package/dist/games/tetris/index.d.ts +109 -0
  107. package/dist/games/tetris/index.js +610 -0
  108. package/dist/games/tetris/pieces.d.ts +44 -0
  109. package/dist/games/tetris/pieces.js +271 -0
  110. package/dist/games/tetris/renderer.d.ts +26 -0
  111. package/dist/games/tetris/renderer.js +77 -0
  112. package/dist/guide/guide-content.d.ts +23 -0
  113. package/dist/guide/guide-content.js +196 -0
  114. package/dist/guide/index.d.ts +8 -0
  115. package/dist/guide/index.js +7 -0
  116. package/dist/guide/shared-content.d.ts +37 -0
  117. package/dist/guide/shared-content.js +1272 -0
  118. package/dist/guide/tutorial-helpers.d.ts +57 -0
  119. package/dist/guide/tutorial-helpers.js +147 -0
  120. package/dist/handlers/ask-user-handlers.d.ts +32 -0
  121. package/dist/handlers/ask-user-handlers.js +104 -0
  122. package/dist/handlers/delegation-handlers.d.ts +34 -0
  123. package/dist/handlers/delegation-handlers.js +291 -0
  124. package/dist/handlers/permission-handler.d.ts +30 -0
  125. package/dist/handlers/permission-handler.js +205 -0
  126. package/dist/index.d.ts +11 -1
  127. package/dist/index.js +615 -179
  128. package/dist/input-handlers/index.d.ts +7 -0
  129. package/dist/input-handlers/index.js +7 -0
  130. package/dist/input-handlers/memory-handler.d.ts +26 -0
  131. package/dist/input-handlers/memory-handler.js +69 -0
  132. package/dist/models/index.d.ts +10 -0
  133. package/dist/models/index.js +12 -0
  134. package/dist/models/model-registry.d.ts +38 -0
  135. package/dist/models/model-registry.js +69 -0
  136. package/dist/models/model-tiers.d.ts +28 -0
  137. package/dist/models/model-tiers.js +71 -0
  138. package/dist/models/model-validation.d.ts +25 -0
  139. package/dist/models/model-validation.js +291 -0
  140. package/dist/models/ollama-models.d.ts +73 -0
  141. package/dist/models/ollama-models.js +178 -0
  142. package/dist/models/provider-types.d.ts +6 -0
  143. package/dist/models/provider-types.js +1 -0
  144. package/dist/models/providers.d.ts +35 -0
  145. package/dist/models/providers.js +58 -0
  146. package/dist/models/types.d.ts +4 -0
  147. package/dist/models/types.js +4 -0
  148. package/dist/multi-agent/activity.d.ts +21 -0
  149. package/dist/multi-agent/activity.js +34 -0
  150. package/dist/multi-agent/agent-selection.d.ts +55 -0
  151. package/dist/multi-agent/agent-selection.js +90 -0
  152. package/dist/multi-agent/artifacts.d.ts +197 -0
  153. package/dist/multi-agent/artifacts.js +379 -0
  154. package/dist/multi-agent/checkpointer.d.ts +138 -0
  155. package/dist/multi-agent/checkpointer.js +471 -0
  156. package/dist/multi-agent/collision-utils.d.ts +16 -0
  157. package/dist/multi-agent/collision-utils.js +28 -0
  158. package/dist/multi-agent/context-resolver.d.ts +97 -0
  159. package/dist/multi-agent/context-resolver.js +316 -0
  160. package/dist/multi-agent/custom-agents.d.ts +83 -0
  161. package/dist/multi-agent/custom-agents.js +227 -0
  162. package/dist/multi-agent/delegation-tracker.d.ts +157 -0
  163. package/dist/multi-agent/delegation-tracker.js +243 -0
  164. package/dist/multi-agent/file-lock-hook.d.ts +29 -0
  165. package/dist/multi-agent/file-lock-hook.js +97 -0
  166. package/dist/multi-agent/file-locks.d.ts +58 -0
  167. package/dist/multi-agent/file-locks.js +194 -0
  168. package/dist/multi-agent/index.d.ts +24 -0
  169. package/dist/multi-agent/index.js +30 -0
  170. package/dist/multi-agent/mention-parser.d.ts +64 -0
  171. package/dist/multi-agent/mention-parser.js +146 -0
  172. package/dist/multi-agent/notification-manager.d.ts +84 -0
  173. package/dist/multi-agent/notification-manager.js +224 -0
  174. package/dist/multi-agent/pending-requests.d.ts +122 -0
  175. package/dist/multi-agent/pending-requests.js +155 -0
  176. package/dist/multi-agent/session-registry.d.ts +139 -0
  177. package/dist/multi-agent/session-registry.js +514 -0
  178. package/dist/multi-agent/shared-context.d.ts +293 -0
  179. package/dist/multi-agent/shared-context.js +671 -0
  180. package/dist/multi-agent/skill-requirements.d.ts +66 -0
  181. package/dist/multi-agent/skill-requirements.js +178 -0
  182. package/dist/multi-agent/task-assignment.d.ts +69 -0
  183. package/dist/multi-agent/task-assignment.js +123 -0
  184. package/dist/multi-agent/task-suggestion.d.ts +31 -0
  185. package/dist/multi-agent/task-suggestion.js +72 -0
  186. package/dist/multi-agent/team-agent.d.ts +201 -0
  187. package/dist/multi-agent/team-agent.js +488 -0
  188. package/dist/multi-agent/team.d.ts +286 -0
  189. package/dist/multi-agent/team.js +610 -0
  190. package/dist/multi-agent/tool-config.d.ts +110 -0
  191. package/dist/multi-agent/tool-config.js +661 -0
  192. package/dist/multi-agent/types.d.ts +211 -0
  193. package/dist/multi-agent/types.js +617 -0
  194. package/dist/prompts/plan-mode-prompt.d.ts +11 -0
  195. package/dist/prompts/plan-mode-prompt.js +95 -0
  196. package/dist/repl-helpers.d.ts +63 -0
  197. package/dist/repl-helpers.js +319 -0
  198. package/dist/repl-v2.d.ts +554 -0
  199. package/dist/repl-v2.js +3286 -0
  200. package/dist/session/index.d.ts +6 -0
  201. package/dist/session/index.js +6 -0
  202. package/dist/session/project-session-manager.d.ts +158 -0
  203. package/dist/session/project-session-manager.js +650 -0
  204. package/dist/settings/index.d.ts +156 -13
  205. package/dist/settings/index.js +377 -24
  206. package/dist/settings/mcp-config.d.ts +76 -0
  207. package/dist/settings/mcp-config.js +143 -0
  208. package/dist/settings/paths.d.ts +114 -0
  209. package/dist/settings/paths.js +270 -0
  210. package/dist/shared-handlers.d.ts +62 -0
  211. package/dist/shared-handlers.js +48 -0
  212. package/dist/system-prompt/builder.d.ts +5 -0
  213. package/dist/system-prompt/builder.js +4 -0
  214. package/dist/system-prompt/index.d.ts +18 -0
  215. package/dist/system-prompt/index.js +18 -0
  216. package/dist/system-prompt/modules.d.ts +5 -0
  217. package/dist/system-prompt/modules.js +4 -0
  218. package/dist/tabbed-menu.js +2 -1
  219. package/dist/templates/compilr-md-import.d.ts +16 -0
  220. package/dist/templates/compilr-md-import.js +241 -0
  221. package/dist/templates/compilr-md.js +10 -58
  222. package/dist/templates/config-json.d.ts +1 -25
  223. package/dist/templates/index.d.ts +2 -0
  224. package/dist/templates/index.js +35 -75
  225. package/dist/themes/colors.js +3 -1
  226. package/dist/themes/registry.d.ts +5 -36
  227. package/dist/themes/registry.js +11 -95
  228. package/dist/themes/types.d.ts +3 -38
  229. package/dist/themes/types.js +2 -2
  230. package/dist/tool-names.d.ts +108 -0
  231. package/dist/tool-names.js +227 -0
  232. package/dist/tools/anchor-tools.d.ts +31 -0
  233. package/dist/tools/anchor-tools.js +255 -0
  234. package/dist/tools/artifact-tools.d.ts +42 -0
  235. package/dist/tools/artifact-tools.js +328 -0
  236. package/dist/tools/ask-user-simple.d.ts +1 -1
  237. package/dist/tools/ask-user-simple.js +2 -1
  238. package/dist/tools/ask-user.d.ts +1 -1
  239. package/dist/tools/ask-user.js +2 -1
  240. package/dist/tools/backlog-wrappers.d.ts +56 -0
  241. package/dist/tools/backlog-wrappers.js +353 -0
  242. package/dist/tools/backlog.d.ts +2 -2
  243. package/dist/tools/backlog.js +2 -2
  244. package/dist/tools/db-tools.d.ts +12 -0
  245. package/dist/tools/db-tools.js +14 -0
  246. package/dist/tools/delegate-background.d.ts +27 -0
  247. package/dist/tools/delegate-background.js +115 -0
  248. package/dist/tools/delegate.d.ts +22 -0
  249. package/dist/tools/delegate.js +97 -0
  250. package/dist/tools/delegation-status.d.ts +16 -0
  251. package/dist/tools/delegation-status.js +128 -0
  252. package/dist/tools/document-db.d.ts +43 -0
  253. package/dist/tools/document-db.js +220 -0
  254. package/dist/tools/guide-tool.d.ts +12 -0
  255. package/dist/tools/guide-tool.js +59 -0
  256. package/dist/tools/handoff.d.ts +25 -0
  257. package/dist/tools/handoff.js +99 -0
  258. package/dist/tools/meta-tools.d.ts +26 -0
  259. package/dist/tools/meta-tools.js +47 -0
  260. package/dist/tools/plan-tools.d.ts +54 -0
  261. package/dist/tools/plan-tools.js +338 -0
  262. package/dist/tools/platform-adapter.d.ts +29 -0
  263. package/dist/tools/platform-adapter.js +394 -0
  264. package/dist/tools/project-db.d.ts +34 -0
  265. package/dist/tools/project-db.js +39 -0
  266. package/dist/tools/recall-work-tool.d.ts +18 -0
  267. package/dist/tools/recall-work-tool.js +82 -0
  268. package/dist/tools/workitem-db.d.ts +135 -0
  269. package/dist/tools/workitem-db.js +730 -0
  270. package/dist/tools.d.ts +67 -2
  271. package/dist/tools.js +238 -38
  272. package/dist/ui/ask-user-overlay.d.ts +2 -2
  273. package/dist/ui/ask-user-overlay.js +443 -535
  274. package/dist/ui/ask-user-simple-overlay.d.ts +2 -2
  275. package/dist/ui/ask-user-simple-overlay.js +182 -209
  276. package/dist/ui/autocomplete-controller.d.ts +42 -0
  277. package/dist/ui/autocomplete-controller.js +384 -0
  278. package/dist/ui/base/index.d.ts +26 -0
  279. package/dist/ui/base/index.js +33 -0
  280. package/dist/ui/base/inline-overlay-utils.d.ts +217 -0
  281. package/dist/ui/base/inline-overlay-utils.js +320 -0
  282. package/dist/ui/base/inline-overlay.d.ts +159 -0
  283. package/dist/ui/base/inline-overlay.js +257 -0
  284. package/dist/ui/base/key-utils.d.ts +15 -0
  285. package/dist/ui/base/key-utils.js +30 -0
  286. package/dist/ui/base/overlay-base-v2.d.ts +203 -0
  287. package/dist/ui/base/overlay-base-v2.js +260 -0
  288. package/dist/ui/base/overlay-base.d.ts +156 -0
  289. package/dist/ui/base/overlay-base.js +238 -0
  290. package/dist/ui/base/overlay-lifecycle.d.ts +65 -0
  291. package/dist/ui/base/overlay-lifecycle.js +159 -0
  292. package/dist/ui/base/overlay-types.d.ts +185 -0
  293. package/dist/ui/base/overlay-types.js +7 -0
  294. package/dist/ui/base/render-utils.d.ts +27 -0
  295. package/dist/ui/base/render-utils.js +36 -0
  296. package/dist/ui/base/screen-stack.d.ts +148 -0
  297. package/dist/ui/base/screen-stack.js +184 -0
  298. package/dist/ui/base/tabbed-list-overlay-v2.d.ts +118 -0
  299. package/dist/ui/base/tabbed-list-overlay-v2.js +335 -0
  300. package/dist/ui/base/tabbed-list-overlay.d.ts +153 -0
  301. package/dist/ui/base/tabbed-list-overlay.js +369 -0
  302. package/dist/ui/constants/labels.d.ts +14 -0
  303. package/dist/ui/constants/labels.js +51 -0
  304. package/dist/ui/conversation-store.d.ts +55 -0
  305. package/dist/ui/conversation-store.js +107 -0
  306. package/dist/ui/conversation.d.ts +75 -4
  307. package/dist/ui/conversation.js +376 -165
  308. package/dist/ui/diff.d.ts +7 -1
  309. package/dist/ui/diff.js +85 -48
  310. package/dist/ui/ephemeral.d.ts +1 -1
  311. package/dist/ui/ephemeral.js +4 -10
  312. package/dist/ui/features/index.d.ts +34 -0
  313. package/dist/ui/features/index.js +34 -0
  314. package/dist/ui/features/input-feature.d.ts +85 -0
  315. package/dist/ui/features/input-feature.js +238 -0
  316. package/dist/ui/features/list-feature.d.ts +155 -0
  317. package/dist/ui/features/list-feature.js +244 -0
  318. package/dist/ui/features/pagination-feature.d.ts +154 -0
  319. package/dist/ui/features/pagination-feature.js +238 -0
  320. package/dist/ui/features/search-feature.d.ts +148 -0
  321. package/dist/ui/features/search-feature.js +185 -0
  322. package/dist/ui/features/tab-feature.d.ts +194 -0
  323. package/dist/ui/features/tab-feature.js +307 -0
  324. package/dist/ui/file-autocomplete.d.ts +24 -0
  325. package/dist/ui/file-autocomplete.js +56 -0
  326. package/dist/ui/footer-renderer.d.ts +69 -0
  327. package/dist/ui/footer-renderer.js +431 -0
  328. package/dist/ui/footer.d.ts +181 -7
  329. package/dist/ui/footer.js +523 -74
  330. package/dist/ui/guardrail-overlay.d.ts +29 -0
  331. package/dist/ui/guardrail-overlay.js +145 -0
  332. package/dist/ui/index.d.ts +1 -1
  333. package/dist/ui/index.js +1 -3
  334. package/dist/ui/input-controller.d.ts +51 -0
  335. package/dist/ui/input-controller.js +176 -0
  336. package/dist/ui/input-prompt.d.ts +135 -33
  337. package/dist/ui/input-prompt.js +728 -337
  338. package/dist/ui/iteration-limit-overlay.d.ts +2 -2
  339. package/dist/ui/iteration-limit-overlay.js +92 -128
  340. package/dist/ui/keyboard-handler.d.ts +57 -0
  341. package/dist/ui/keyboard-handler.js +557 -0
  342. package/dist/ui/keys-overlay.d.ts +1 -0
  343. package/dist/ui/keys-overlay.js +203 -141
  344. package/dist/ui/line-utils.d.ts +88 -0
  345. package/dist/ui/line-utils.js +150 -0
  346. package/dist/ui/live-region-facade.d.ts +42 -0
  347. package/dist/ui/live-region-facade.js +205 -0
  348. package/dist/ui/live-region.d.ts +157 -0
  349. package/dist/ui/live-region.js +379 -0
  350. package/dist/ui/mascot/expressions.d.ts +32 -0
  351. package/dist/ui/mascot/expressions.js +213 -0
  352. package/dist/ui/mascot/index.d.ts +8 -0
  353. package/dist/ui/mascot/index.js +8 -0
  354. package/dist/ui/mascot/renderer.d.ts +19 -0
  355. package/dist/ui/mascot/renderer.js +132 -0
  356. package/dist/ui/overlay/data/tutorial-content.d.ts +9 -0
  357. package/dist/ui/overlay/data/tutorial-content.js +9 -0
  358. package/dist/ui/overlay/data/tutorial-registry.d.ts +12 -0
  359. package/dist/ui/overlay/data/tutorial-registry.js +116 -0
  360. package/dist/ui/overlay/data/tutorial-types.d.ts +35 -0
  361. package/dist/ui/overlay/data/tutorial-types.js +6 -0
  362. package/dist/ui/overlay/data/tutorials/basics/first-conversation.d.ts +7 -0
  363. package/dist/ui/overlay/data/tutorials/basics/first-conversation.js +220 -0
  364. package/dist/ui/overlay/data/tutorials/basics/first-project.d.ts +7 -0
  365. package/dist/ui/overlay/data/tutorials/basics/first-project.js +284 -0
  366. package/dist/ui/overlay/data/tutorials/basics/navigation.d.ts +8 -0
  367. package/dist/ui/overlay/data/tutorials/basics/navigation.js +22 -0
  368. package/dist/ui/overlay/data/tutorials/basics/welcome.d.ts +7 -0
  369. package/dist/ui/overlay/data/tutorials/basics/welcome.js +174 -0
  370. package/dist/ui/overlay/data/tutorials/config/context-management.d.ts +7 -0
  371. package/dist/ui/overlay/data/tutorials/config/context-management.js +158 -0
  372. package/dist/ui/overlay/data/tutorials/config/mcp-servers.d.ts +8 -0
  373. package/dist/ui/overlay/data/tutorials/config/mcp-servers.js +155 -0
  374. package/dist/ui/overlay/data/tutorials/config/model-selection.d.ts +7 -0
  375. package/dist/ui/overlay/data/tutorials/config/model-selection.js +162 -0
  376. package/dist/ui/overlay/data/tutorials/config/permissions-safety.d.ts +7 -0
  377. package/dist/ui/overlay/data/tutorials/config/permissions-safety.js +163 -0
  378. package/dist/ui/overlay/data/tutorials/config/settings-config.d.ts +7 -0
  379. package/dist/ui/overlay/data/tutorials/config/settings-config.js +166 -0
  380. package/dist/ui/overlay/data/tutorials/planning/arch.d.ts +7 -0
  381. package/dist/ui/overlay/data/tutorials/planning/arch.js +168 -0
  382. package/dist/ui/overlay/data/tutorials/planning/backlog.d.ts +7 -0
  383. package/dist/ui/overlay/data/tutorials/planning/backlog.js +103 -0
  384. package/dist/ui/overlay/data/tutorials/planning/build.d.ts +7 -0
  385. package/dist/ui/overlay/data/tutorials/planning/build.js +173 -0
  386. package/dist/ui/overlay/data/tutorials/planning/design.d.ts +7 -0
  387. package/dist/ui/overlay/data/tutorials/planning/design.js +205 -0
  388. package/dist/ui/overlay/data/tutorials/planning/docs.d.ts +7 -0
  389. package/dist/ui/overlay/data/tutorials/planning/docs.js +143 -0
  390. package/dist/ui/overlay/data/tutorials/planning/prd.d.ts +7 -0
  391. package/dist/ui/overlay/data/tutorials/planning/prd.js +173 -0
  392. package/dist/ui/overlay/data/tutorials/planning/scaffold.d.ts +7 -0
  393. package/dist/ui/overlay/data/tutorials/planning/scaffold.js +164 -0
  394. package/dist/ui/overlay/data/tutorials/planning/sketch.d.ts +7 -0
  395. package/dist/ui/overlay/data/tutorials/planning/sketch.js +58 -0
  396. package/dist/ui/overlay/data/tutorials/projects/anchors.d.ts +7 -0
  397. package/dist/ui/overlay/data/tutorials/projects/anchors.js +248 -0
  398. package/dist/ui/overlay/data/tutorials/projects/import-project.d.ts +7 -0
  399. package/dist/ui/overlay/data/tutorials/projects/import-project.js +172 -0
  400. package/dist/ui/overlay/data/tutorials/projects/managing-projects.d.ts +8 -0
  401. package/dist/ui/overlay/data/tutorials/projects/managing-projects.js +212 -0
  402. package/dist/ui/overlay/data/tutorials/projects/new-project.d.ts +7 -0
  403. package/dist/ui/overlay/data/tutorials/projects/new-project.js +251 -0
  404. package/dist/ui/overlay/data/tutorials/projects/session-management.d.ts +7 -0
  405. package/dist/ui/overlay/data/tutorials/projects/session-management.js +169 -0
  406. package/dist/ui/overlay/data/tutorials/teams/background-execution.d.ts +7 -0
  407. package/dist/ui/overlay/data/tutorials/teams/background-execution.js +171 -0
  408. package/dist/ui/overlay/data/tutorials/teams/multi-terminal.d.ts +8 -0
  409. package/dist/ui/overlay/data/tutorials/teams/multi-terminal.js +147 -0
  410. package/dist/ui/overlay/data/tutorials/teams/task-assignment.d.ts +7 -0
  411. package/dist/ui/overlay/data/tutorials/teams/task-assignment.js +204 -0
  412. package/dist/ui/overlay/data/tutorials/teams/team-overview.d.ts +7 -0
  413. package/dist/ui/overlay/data/tutorials/teams/team-overview.js +165 -0
  414. package/dist/ui/overlay/data/tutorials/teams/working-with-agents.d.ts +7 -0
  415. package/dist/ui/overlay/data/tutorials/teams/working-with-agents.js +172 -0
  416. package/dist/ui/overlay/impl/agents-overlay-v2.d.ts +45 -0
  417. package/dist/ui/overlay/impl/agents-overlay-v2.js +814 -0
  418. package/dist/ui/overlay/impl/anchors-overlay-v2.d.ts +47 -0
  419. package/dist/ui/overlay/impl/anchors-overlay-v2.js +749 -0
  420. package/dist/ui/overlay/impl/arch-type-overlay-v2.d.ts +37 -0
  421. package/dist/ui/overlay/impl/arch-type-overlay-v2.js +240 -0
  422. package/dist/ui/overlay/impl/artifact-detail-overlay-v2.d.ts +43 -0
  423. package/dist/ui/overlay/impl/artifact-detail-overlay-v2.js +232 -0
  424. package/dist/ui/overlay/impl/artifact-overlay-v2.d.ts +40 -0
  425. package/dist/ui/overlay/impl/artifact-overlay-v2.js +115 -0
  426. package/dist/ui/overlay/impl/ask-user-overlay-v2.d.ts +72 -0
  427. package/dist/ui/overlay/impl/ask-user-overlay-v2.js +581 -0
  428. package/dist/ui/overlay/impl/ask-user-simple-overlay-v2.d.ts +46 -0
  429. package/dist/ui/overlay/impl/ask-user-simple-overlay-v2.js +204 -0
  430. package/dist/ui/overlay/impl/background-overlay-v2.d.ts +40 -0
  431. package/dist/ui/overlay/impl/background-overlay-v2.js +147 -0
  432. package/dist/ui/overlay/impl/backlog-overlay-v2.d.ts +52 -0
  433. package/dist/ui/overlay/impl/backlog-overlay-v2.js +681 -0
  434. package/dist/ui/overlay/impl/changelog-overlay-v2.d.ts +44 -0
  435. package/dist/ui/overlay/impl/changelog-overlay-v2.js +165 -0
  436. package/dist/ui/overlay/impl/commands-overlay-v2.d.ts +33 -0
  437. package/dist/ui/overlay/impl/commands-overlay-v2.js +439 -0
  438. package/dist/ui/overlay/impl/config-overlay-v2.d.ts +111 -0
  439. package/dist/ui/overlay/impl/config-overlay-v2.js +718 -0
  440. package/dist/ui/overlay/impl/custom-agent-form-overlay-v2.d.ts +83 -0
  441. package/dist/ui/overlay/impl/custom-agent-form-overlay-v2.js +711 -0
  442. package/dist/ui/overlay/impl/dashboard-overlay-v2.d.ts +57 -0
  443. package/dist/ui/overlay/impl/dashboard-overlay-v2.js +382 -0
  444. package/dist/ui/overlay/impl/delegations-overlay-v2.d.ts +28 -0
  445. package/dist/ui/overlay/impl/delegations-overlay-v2.js +279 -0
  446. package/dist/ui/overlay/impl/docs-overlay-v2.d.ts +45 -0
  447. package/dist/ui/overlay/impl/docs-overlay-v2.js +117 -0
  448. package/dist/ui/overlay/impl/document-detail-overlay-v2.d.ts +84 -0
  449. package/dist/ui/overlay/impl/document-detail-overlay-v2.js +1112 -0
  450. package/dist/ui/overlay/impl/filter-overlay-v2.d.ts +41 -0
  451. package/dist/ui/overlay/impl/filter-overlay-v2.js +110 -0
  452. package/dist/ui/overlay/impl/games-overlay-v2.d.ts +31 -0
  453. package/dist/ui/overlay/impl/games-overlay-v2.js +135 -0
  454. package/dist/ui/overlay/impl/guardrail-overlay-v2.d.ts +43 -0
  455. package/dist/ui/overlay/impl/guardrail-overlay-v2.js +114 -0
  456. package/dist/ui/overlay/impl/help-overlay-v2.d.ts +57 -0
  457. package/dist/ui/overlay/impl/help-overlay-v2.js +287 -0
  458. package/dist/ui/overlay/impl/init-setup-overlay-v2.d.ts +25 -0
  459. package/dist/ui/overlay/impl/init-setup-overlay-v2.js +97 -0
  460. package/dist/ui/overlay/impl/iteration-limit-overlay-v2.d.ts +35 -0
  461. package/dist/ui/overlay/impl/iteration-limit-overlay-v2.js +105 -0
  462. package/dist/ui/overlay/impl/keys-overlay-v2.d.ts +41 -0
  463. package/dist/ui/overlay/impl/keys-overlay-v2.js +248 -0
  464. package/dist/ui/overlay/impl/login-overlay-v2.d.ts +49 -0
  465. package/dist/ui/overlay/impl/login-overlay-v2.js +277 -0
  466. package/dist/ui/overlay/impl/mascot-overlay-v2.d.ts +41 -0
  467. package/dist/ui/overlay/impl/mascot-overlay-v2.js +138 -0
  468. package/dist/ui/overlay/impl/mcp-overlay-v2.d.ts +63 -0
  469. package/dist/ui/overlay/impl/mcp-overlay-v2.js +907 -0
  470. package/dist/ui/overlay/impl/model-overlay-v2.d.ts +93 -0
  471. package/dist/ui/overlay/impl/model-overlay-v2.js +1143 -0
  472. package/dist/ui/overlay/impl/model-warning-overlay-v2.d.ts +46 -0
  473. package/dist/ui/overlay/impl/model-warning-overlay-v2.js +132 -0
  474. package/dist/ui/overlay/impl/new-overlay-v2.d.ts +108 -0
  475. package/dist/ui/overlay/impl/new-overlay-v2.js +1243 -0
  476. package/dist/ui/overlay/impl/notifications-overlay-v2.d.ts +20 -0
  477. package/dist/ui/overlay/impl/notifications-overlay-v2.js +116 -0
  478. package/dist/ui/overlay/impl/onboarding-wizard-overlay-v2.d.ts +76 -0
  479. package/dist/ui/overlay/impl/onboarding-wizard-overlay-v2.js +728 -0
  480. package/dist/ui/overlay/impl/pending-overlay-v2.d.ts +51 -0
  481. package/dist/ui/overlay/impl/pending-overlay-v2.js +445 -0
  482. package/dist/ui/overlay/impl/permission-overlay-v2.d.ts +36 -0
  483. package/dist/ui/overlay/impl/permission-overlay-v2.js +380 -0
  484. package/dist/ui/overlay/impl/permissions-overlay-v2.d.ts +85 -0
  485. package/dist/ui/overlay/impl/permissions-overlay-v2.js +820 -0
  486. package/dist/ui/overlay/impl/plan-approval-overlay-v2.d.ts +35 -0
  487. package/dist/ui/overlay/impl/plan-approval-overlay-v2.js +181 -0
  488. package/dist/ui/overlay/impl/project-edit-overlay-v2.d.ts +36 -0
  489. package/dist/ui/overlay/impl/project-edit-overlay-v2.js +195 -0
  490. package/dist/ui/overlay/impl/projects-overlay-v2.d.ts +37 -0
  491. package/dist/ui/overlay/impl/projects-overlay-v2.js +733 -0
  492. package/dist/ui/overlay/impl/reset-overlay-v2.d.ts +39 -0
  493. package/dist/ui/overlay/impl/reset-overlay-v2.js +107 -0
  494. package/dist/ui/overlay/impl/resume-overlay-v2.d.ts +60 -0
  495. package/dist/ui/overlay/impl/resume-overlay-v2.js +414 -0
  496. package/dist/ui/overlay/impl/session-mode-overlay-v2.d.ts +43 -0
  497. package/dist/ui/overlay/impl/session-mode-overlay-v2.js +124 -0
  498. package/dist/ui/overlay/impl/tasks-overlay-v2.d.ts +28 -0
  499. package/dist/ui/overlay/impl/tasks-overlay-v2.js +283 -0
  500. package/dist/ui/overlay/impl/team-overlay-v2.d.ts +86 -0
  501. package/dist/ui/overlay/impl/team-overlay-v2.js +692 -0
  502. package/dist/ui/overlay/impl/terminals-overlay-v2.d.ts +26 -0
  503. package/dist/ui/overlay/impl/terminals-overlay-v2.js +217 -0
  504. package/dist/ui/overlay/impl/theme-overlay-v2.d.ts +42 -0
  505. package/dist/ui/overlay/impl/theme-overlay-v2.js +135 -0
  506. package/dist/ui/overlay/impl/tools-overlay-v2.d.ts +47 -0
  507. package/dist/ui/overlay/impl/tools-overlay-v2.js +214 -0
  508. package/dist/ui/overlay/impl/tutorial-overlay-v2.d.ts +45 -0
  509. package/dist/ui/overlay/impl/tutorial-overlay-v2.js +212 -0
  510. package/dist/ui/overlay/impl/workflow-overlay-v2.d.ts +80 -0
  511. package/dist/ui/overlay/impl/workflow-overlay-v2.js +641 -0
  512. package/dist/ui/overlay/index.d.ts +52 -0
  513. package/dist/ui/overlay/index.js +54 -0
  514. package/dist/ui/overlay/key-utils.d.ts +6 -0
  515. package/dist/ui/overlay/key-utils.js +6 -0
  516. package/dist/ui/overlay/types.d.ts +140 -0
  517. package/dist/ui/overlay/types.js +22 -0
  518. package/dist/ui/overlay-manager.d.ts +43 -0
  519. package/dist/ui/overlay-manager.js +238 -0
  520. package/dist/ui/overlays.d.ts +0 -4
  521. package/dist/ui/overlays.js +4 -460
  522. package/dist/ui/permission-overlay.d.ts +1 -1
  523. package/dist/ui/permission-overlay.js +189 -300
  524. package/dist/ui/providers/types.d.ts +178 -0
  525. package/dist/ui/providers/types.js +9 -0
  526. package/dist/ui/render-modes.d.ts +36 -0
  527. package/dist/ui/render-modes.js +44 -0
  528. package/dist/ui/startup-menu.d.ts +36 -0
  529. package/dist/ui/startup-menu.js +236 -0
  530. package/dist/ui/status-bar-controller.d.ts +33 -0
  531. package/dist/ui/status-bar-controller.js +99 -0
  532. package/dist/ui/subagent-renderer.d.ts +117 -0
  533. package/dist/ui/subagent-renderer.js +318 -0
  534. package/dist/ui/terminal-autocomplete-utils.d.ts +23 -0
  535. package/dist/ui/terminal-autocomplete-utils.js +83 -0
  536. package/dist/ui/terminal-codes.d.ts +94 -0
  537. package/dist/ui/terminal-codes.js +124 -0
  538. package/dist/ui/terminal-line-builders.d.ts +17 -0
  539. package/dist/ui/terminal-line-builders.js +42 -0
  540. package/dist/ui/terminal-render-item.d.ts +16 -0
  541. package/dist/ui/terminal-render-item.js +267 -0
  542. package/dist/ui/terminal-renderer.d.ts +220 -0
  543. package/dist/ui/terminal-renderer.js +750 -0
  544. package/dist/ui/terminal-types.d.ts +179 -0
  545. package/dist/ui/terminal-types.js +34 -0
  546. package/dist/ui/terminal-ui.d.ts +331 -0
  547. package/dist/ui/terminal-ui.js +819 -0
  548. package/dist/ui/terminal.d.ts +20 -0
  549. package/dist/ui/terminal.js +72 -0
  550. package/dist/ui/todo-zone.d.ts +19 -1
  551. package/dist/ui/todo-zone.js +124 -38
  552. package/dist/ui/tool-formatters.d.ts +16 -0
  553. package/dist/ui/tool-formatters.js +1027 -0
  554. package/dist/ui/turn-metrics.d.ts +56 -0
  555. package/dist/ui/turn-metrics.js +75 -0
  556. package/dist/ui/types.d.ts +28 -0
  557. package/dist/ui/types.js +1 -0
  558. package/dist/ui/vscode-diff-ipc.d.ts +102 -0
  559. package/dist/ui/vscode-diff-ipc.js +385 -0
  560. package/dist/utils/credentials.d.ts +24 -5
  561. package/dist/utils/credentials.js +123 -9
  562. package/dist/utils/debug-log.d.ts +28 -0
  563. package/dist/utils/debug-log.js +57 -0
  564. package/dist/utils/format-tokens.d.ts +13 -0
  565. package/dist/utils/format-tokens.js +18 -0
  566. package/dist/utils/git-config.d.ts +26 -0
  567. package/dist/utils/git-config.js +54 -0
  568. package/dist/utils/message-utils.d.ts +61 -0
  569. package/dist/utils/message-utils.js +72 -0
  570. package/dist/utils/model-tiers.d.ts +8 -1
  571. package/dist/utils/model-tiers.js +39 -17
  572. package/dist/utils/open-browser.d.ts +5 -0
  573. package/dist/utils/open-browser.js +32 -0
  574. package/dist/utils/path-safety.d.ts +56 -0
  575. package/dist/utils/path-safety.js +240 -0
  576. package/dist/utils/project-detection.d.ts +58 -0
  577. package/dist/utils/project-detection.js +424 -0
  578. package/dist/utils/project-memory.js +2 -1
  579. package/dist/utils/project-status.d.ts +2 -2
  580. package/dist/utils/startup-perf.d.ts +18 -0
  581. package/dist/utils/startup-perf.js +60 -0
  582. package/dist/utils/token-tracker.d.ts +62 -0
  583. package/dist/utils/token-tracker.js +150 -0
  584. package/dist/utils/token-types.d.ts +23 -0
  585. package/dist/utils/token-types.js +18 -0
  586. package/dist/utils/types/config-types.d.ts +32 -0
  587. package/dist/utils/types/config-types.js +8 -0
  588. package/dist/utils/update-checker.d.ts +28 -0
  589. package/dist/utils/update-checker.js +106 -0
  590. package/dist/utils/version.d.ts +7 -0
  591. package/dist/utils/version.js +10 -0
  592. package/dist/utils/vscode-detect.d.ts +39 -0
  593. package/dist/utils/vscode-detect.js +137 -0
  594. package/dist/workflow/guided-mode-injector.d.ts +42 -0
  595. package/dist/workflow/guided-mode-injector.js +191 -0
  596. package/dist/workflow/index.d.ts +8 -0
  597. package/dist/workflow/index.js +8 -0
  598. package/dist/workflow/step-criteria.d.ts +62 -0
  599. package/dist/workflow/step-criteria.js +150 -0
  600. package/dist/workflow/step-tracker.d.ts +92 -0
  601. package/dist/workflow/step-tracker.js +141 -0
  602. package/package.json +32 -12
  603. package/dist/index.old.d.ts +0 -7
  604. package/dist/index.old.js +0 -1014
  605. package/dist/repl.d.ts +0 -121
  606. package/dist/repl.js +0 -1878
  607. package/dist/templates/claude-md.d.ts +0 -7
  608. package/dist/templates/claude-md.js +0 -189
  609. package/dist/test-autocomplete.d.ts +0 -7
  610. package/dist/test-autocomplete.js +0 -85
  611. package/dist/test-tabbed-menu.d.ts +0 -7
  612. package/dist/test-tabbed-menu.js +0 -25
  613. package/dist/tool-selector.d.ts +0 -71
  614. package/dist/tool-selector.js +0 -184
  615. package/dist/ui/agents-overlay.d.ts +0 -12
  616. package/dist/ui/agents-overlay.js +0 -501
  617. package/dist/ui/arch-type-overlay.d.ts +0 -20
  618. package/dist/ui/arch-type-overlay.js +0 -229
  619. package/dist/ui/backlog-overlay.d.ts +0 -17
  620. package/dist/ui/backlog-overlay.js +0 -786
  621. package/dist/ui/commands-overlay.d.ts +0 -11
  622. package/dist/ui/commands-overlay.js +0 -410
  623. package/dist/ui/config-overlay.d.ts +0 -34
  624. package/dist/ui/config-overlay.js +0 -977
  625. package/dist/ui/init-overlay.d.ts +0 -24
  626. package/dist/ui/init-overlay.js +0 -525
  627. package/dist/ui/input-prompt-v2.d.ts +0 -179
  628. package/dist/ui/input-prompt-v2.js +0 -991
  629. package/dist/ui/model-warning-overlay.d.ts +0 -30
  630. package/dist/ui/model-warning-overlay.js +0 -171
  631. package/dist/ui/tools-overlay.d.ts +0 -26
  632. package/dist/ui/tools-overlay.js +0 -278
  633. package/dist/ui/tutorial-overlay.d.ts +0 -10
  634. package/dist/ui/tutorial-overlay.js +0 -936
@@ -0,0 +1,1027 @@
1
+ /**
2
+ * Tool Result Formatters
3
+ *
4
+ * Extracts content, summary, and success from tool results.
5
+ * Each tool type has its own formatter to produce human-readable output.
6
+ */
7
+ import { truncate } from './base/index.js';
8
+ /**
9
+ * Format tool result for display.
10
+ * Handles the agent's structured result format.
11
+ */
12
+ export function formatToolResult(toolName, result) {
13
+ // Handle structured results from @compilr-dev/agents
14
+ // Format: { success: boolean, result: { content: string, ... } }
15
+ if (typeof result === 'object' && result !== null) {
16
+ const obj = result;
17
+ // Check for success/result wrapper
18
+ const success = obj.success !== false;
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
+ }
24
+ // Extract content based on tool type
25
+ let content = '';
26
+ let summary = '';
27
+ const toolLower = toolName.toLowerCase();
28
+ if (toolLower === 'bash' || toolLower === 'bash_output') {
29
+ ({ content, summary } = formatBash(innerResult));
30
+ }
31
+ else if (toolLower === 'read_file' || toolLower === 'read') {
32
+ ({ content, summary } = formatReadFile(innerResult));
33
+ }
34
+ else if (toolLower === 'write_file' || toolLower === 'write') {
35
+ ({ content, summary } = formatWriteFile());
36
+ }
37
+ else if (toolLower === 'edit') {
38
+ ({ content, summary } = formatEdit(innerResult));
39
+ }
40
+ else if (toolLower === 'glob') {
41
+ ({ content, summary } = formatGlob(innerResult));
42
+ }
43
+ else if (toolLower === 'grep') {
44
+ ({ content, summary } = formatGrep(innerResult));
45
+ }
46
+ else if (toolLower === 'backlog_read' || toolLower === 'workitem_query') {
47
+ ({ content, summary } = formatBacklogRead(innerResult));
48
+ }
49
+ else if (toolLower === 'git_status') {
50
+ ({ content, summary } = formatGitStatus(innerResult));
51
+ }
52
+ else if (toolLower === 'git_diff') {
53
+ ({ content, summary } = formatGitDiff(innerResult));
54
+ }
55
+ else if (toolLower === 'git_commit') {
56
+ ({ content, summary } = formatGitCommit(innerResult));
57
+ }
58
+ else if (toolLower === 'git_log') {
59
+ ({ content, summary } = formatGitLog(innerResult));
60
+ }
61
+ else if (toolLower === 'git_branch') {
62
+ ({ content, summary } = formatGitBranch(innerResult));
63
+ }
64
+ else if (toolLower === 'run_tests') {
65
+ ({ content, summary } = formatRunTests(innerResult));
66
+ }
67
+ else if (toolLower === 'run_lint') {
68
+ ({ content, summary } = formatRunLint(innerResult));
69
+ }
70
+ else if (toolLower === 'detect_project') {
71
+ ({ content, summary } = formatDetectProject(innerResult));
72
+ }
73
+ else if (toolLower === 'find_project_root') {
74
+ ({ content, summary } = formatFindProjectRoot(innerResult));
75
+ }
76
+ else if (toolLower === 'backlog_write' || toolLower.startsWith('workitem_')) {
77
+ ({ content, summary } = formatBacklogWrite(innerResult));
78
+ }
79
+ else if (toolLower.startsWith('anchor_')) {
80
+ ({ content, summary } = formatAnchor(innerResult));
81
+ }
82
+ else if (toolLower === 'kill_shell') {
83
+ ({ content, summary } = formatKillShell(innerResult));
84
+ }
85
+ else if (toolLower === 'project_get') {
86
+ ({ content, summary } = formatProjectGet(innerResult));
87
+ }
88
+ else if (toolLower === 'project_create') {
89
+ ({ content, summary } = formatProjectCreate(innerResult));
90
+ }
91
+ else if (toolLower === 'project_update') {
92
+ ({ content, summary } = formatProjectUpdate(innerResult));
93
+ }
94
+ else if (toolLower === 'project_list') {
95
+ ({ content, summary } = formatProjectList(innerResult));
96
+ }
97
+ else if (toolLower.startsWith('project_document_')) {
98
+ ({ content, summary } = formatProjectDocument(toolLower, innerResult));
99
+ }
100
+ else if (toolLower === 'task') {
101
+ ({ content, summary } = formatTask(innerResult));
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 === 'list_tools') {
134
+ ({ content, summary } = formatListTools(innerResult));
135
+ }
136
+ else if (toolLower === 'get_tool_info') {
137
+ ({ content, summary } = formatGetToolInfo(innerResult));
138
+ }
139
+ else if (toolLower === 'git_stash') {
140
+ ({ content, summary } = formatGitStash(innerResult));
141
+ }
142
+ else if (toolLower === 'git_blame') {
143
+ ({ content, summary } = formatGitBlame(innerResult));
144
+ }
145
+ else if (toolLower === 'git_file_history') {
146
+ ({ content, summary } = formatGitFileHistory(innerResult));
147
+ }
148
+ else if (toolLower === 'run_build') {
149
+ ({ content, summary } = formatRunBuild(innerResult));
150
+ }
151
+ else if (toolLower === 'run_format') {
152
+ ({ content, summary } = formatRunFormat(innerResult));
153
+ }
154
+ else if (toolLower === 'find_definition') {
155
+ ({ content, summary } = formatFindDefinition(innerResult));
156
+ }
157
+ else if (toolLower === 'find_references') {
158
+ ({ content, summary } = formatFindReferences(innerResult));
159
+ }
160
+ else if (toolLower === 'find_todos') {
161
+ ({ content, summary } = formatFindTodos(innerResult));
162
+ }
163
+ else if (toolLower === 'check_outdated') {
164
+ ({ content, summary } = formatCheckOutdated(innerResult));
165
+ }
166
+ else if (toolLower === 'find_vulnerabilities') {
167
+ ({ content, summary } = formatFindVulnerabilities(innerResult));
168
+ }
169
+ else if (toolLower === 'analyze_test_coverage') {
170
+ ({ content, summary } = formatAnalyzeTestCoverage(innerResult));
171
+ }
172
+ else if (toolLower === 'get_file_structure') {
173
+ ({ content, summary } = formatGetFileStructure(innerResult));
174
+ }
175
+ else if (toolLower === 'get_complexity') {
176
+ ({ content, summary } = formatGetComplexity(innerResult));
177
+ }
178
+ else if (toolLower === 'read_function' || toolLower === 'read_class' || toolLower === 'read_type') {
179
+ ({ content, summary } = formatReadSymbol(innerResult));
180
+ }
181
+ else {
182
+ // Generic handling
183
+ ({ content, summary } = formatGeneric(innerResult));
184
+ }
185
+ return { content, summary, success };
186
+ }
187
+ // Fallback for string results
188
+ const content = String(result);
189
+ const lines = content.split('\n').filter((l) => l.length > 0);
190
+ return {
191
+ content,
192
+ summary: lines.length > 0 ? lines[0].slice(0, 60) : 'Completed',
193
+ success: true,
194
+ };
195
+ }
196
+ // =============================================================================
197
+ // Individual Formatters
198
+ // =============================================================================
199
+ function formatBash(result) {
200
+ const rawStdout = result.stdout;
201
+ const rawStderr = result.stderr;
202
+ const stdout = (typeof rawStdout === 'string' ? rawStdout : '').trim();
203
+ const stderr = (typeof rawStderr === 'string' ? rawStderr : '').trim();
204
+ const exitCode = typeof result.exitCode === 'number' ? result.exitCode : 0;
205
+ // Filter out common locale warnings from stderr
206
+ const filteredStderr = stderr.split('\n')
207
+ .filter((line) => !line.includes('setlocale') && !line.includes('LC_ALL'))
208
+ .join('\n').trim();
209
+ const content = stdout || filteredStderr;
210
+ const lines = content.split('\n').filter((l) => l.length > 0);
211
+ let summary;
212
+ if (exitCode !== 0) {
213
+ summary = `Exit code: ${String(exitCode)}`;
214
+ }
215
+ else if (lines.length > 0) {
216
+ summary = lines.length === 1 ? lines[0].slice(0, 60) : `${String(lines.length)} lines`;
217
+ }
218
+ else {
219
+ summary = 'Completed';
220
+ }
221
+ return { content, summary };
222
+ }
223
+ function formatReadFile(result) {
224
+ const rawContent = result.content;
225
+ const content = typeof rawContent === 'string' ? rawContent : '';
226
+ const lines = content.split('\n').filter((l) => l.length > 0);
227
+ return { content, summary: `Read ${String(lines.length)} lines` };
228
+ }
229
+ function formatWriteFile() {
230
+ return { content: '', summary: 'File written' };
231
+ }
232
+ function formatEdit(result) {
233
+ const rawDiff = result.diff;
234
+ const rawContent = result.content;
235
+ const content = typeof rawDiff === 'string' ? rawDiff : typeof rawContent === 'string' ? rawContent : '';
236
+ return { content, summary: 'File edited' };
237
+ }
238
+ function formatGlob(result) {
239
+ const rawFiles = result.files ?? result.content;
240
+ if (Array.isArray(rawFiles)) {
241
+ const content = rawFiles.join('\n');
242
+ return { content, summary: `Found ${String(rawFiles.length)} files` };
243
+ }
244
+ else if (typeof rawFiles === 'string') {
245
+ const content = rawFiles;
246
+ const count = content.split('\n').filter((l) => l.length > 0).length;
247
+ return { content, summary: `Found ${String(count)} files` };
248
+ }
249
+ return { content: '', summary: 'No files found' };
250
+ }
251
+ function formatGrep(result) {
252
+ const rawMatches = result.matches ?? result.content;
253
+ if (Array.isArray(rawMatches)) {
254
+ const content = rawMatches.join('\n');
255
+ return { content, summary: `Found ${String(rawMatches.length)} matches` };
256
+ }
257
+ else if (typeof rawMatches === 'string') {
258
+ const content = rawMatches;
259
+ const count = content.split('\n').filter((l) => l.length > 0).length;
260
+ return { content, summary: `Found ${String(count)} matches` };
261
+ }
262
+ return { content: '', summary: 'No matches found' };
263
+ }
264
+ function formatBacklogRead(result) {
265
+ const items = result.items;
266
+ const total = result.total;
267
+ if (Array.isArray(items)) {
268
+ if (items.length === 0) {
269
+ return { content: '', summary: 'No items' };
270
+ }
271
+ // Build content with item summaries
272
+ const itemLines = items.slice(0, 10).map((item) => {
273
+ const id = item.id || '?';
274
+ const title = (item.title || 'Untitled').slice(0, 50);
275
+ const status = item.status || '?';
276
+ const priority = item.priority ? ` [${item.priority}]` : '';
277
+ return `${id}: ${title} (${status})${priority}`;
278
+ });
279
+ if (items.length > 10) {
280
+ itemLines.push(`... and ${String(items.length - 10)} more`);
281
+ }
282
+ return { content: itemLines.join('\n'), summary: `${String(total ?? items.length)} items` };
283
+ }
284
+ return { content: '', summary: 'No items' };
285
+ }
286
+ function formatGitStatus(result) {
287
+ const branch = result.branch;
288
+ const isClean = result.isClean;
289
+ const staged = result.staged;
290
+ const modified = result.modified;
291
+ const untracked = result.untracked;
292
+ if (isClean) {
293
+ return { content: '', summary: `${branch || 'unknown'} (clean)` };
294
+ }
295
+ const parts = [];
296
+ if (staged?.length)
297
+ parts.push(`${String(staged.length)} staged`);
298
+ if (modified?.length)
299
+ parts.push(`${String(modified.length)} modified`);
300
+ if (untracked?.length)
301
+ parts.push(`${String(untracked.length)} untracked`);
302
+ const summary = `${branch || 'unknown'}: ${parts.join(', ')}`;
303
+ // Build detailed content
304
+ const lines = [];
305
+ if (staged?.length) {
306
+ lines.push('Staged:');
307
+ staged.slice(0, 5).forEach((f) => lines.push(` + ${f.path}`));
308
+ if (staged.length > 5)
309
+ lines.push(` ... and ${String(staged.length - 5)} more`);
310
+ }
311
+ if (modified?.length) {
312
+ lines.push('Modified:');
313
+ modified.slice(0, 5).forEach((f) => lines.push(` M ${f.path}`));
314
+ if (modified.length > 5)
315
+ lines.push(` ... and ${String(modified.length - 5)} more`);
316
+ }
317
+ if (untracked?.length) {
318
+ lines.push('Untracked:');
319
+ untracked.slice(0, 5).forEach((f) => lines.push(` ? ${f.path}`));
320
+ if (untracked.length > 5)
321
+ lines.push(` ... and ${String(untracked.length - 5)} more`);
322
+ }
323
+ return { content: lines.join('\n'), summary };
324
+ }
325
+ function formatGitDiff(result) {
326
+ const files = result.files;
327
+ const stats = result.stats;
328
+ const diff = result.diff;
329
+ if (!files?.length) {
330
+ return { content: '', summary: 'No changes' };
331
+ }
332
+ const ins = stats?.insertions ?? 0;
333
+ const del = stats?.deletions ?? 0;
334
+ const summary = `${String(files.length)} file(s), +${String(ins)} -${String(del)}`;
335
+ const content = diff || files.map((f) => f.path).join('\n');
336
+ return { content, summary };
337
+ }
338
+ function formatGitCommit(result) {
339
+ const shortHash = result.shortHash;
340
+ const branch = result.branch;
341
+ const filesCount = result.filesCommitted;
342
+ const message = result.message;
343
+ const msgPreview = (message || '').slice(0, 40);
344
+ const filesInfo = filesCount ? ` (${String(filesCount)} files)` : '';
345
+ const summary = `[${branch || '?'}] ${shortHash || '?'}: ${msgPreview}${filesInfo}`;
346
+ return { content: '', summary };
347
+ }
348
+ function formatGitLog(result) {
349
+ const commits = result.commits;
350
+ if (!commits?.length) {
351
+ return { content: '', summary: 'No commits' };
352
+ }
353
+ const summary = `${String(commits.length)} commit(s)`;
354
+ const lines = commits.slice(0, 10).map((c) => `${c.shortHash || '?'} ${(c.subject || '').slice(0, 50)}`);
355
+ if (commits.length > 10)
356
+ lines.push(`... and ${String(commits.length - 10)} more`);
357
+ return { content: lines.join('\n'), summary };
358
+ }
359
+ function formatGitBranch(result) {
360
+ const current = result.current;
361
+ const branches = result.branches;
362
+ const message = result.message;
363
+ if (message) {
364
+ return { content: '', summary: message };
365
+ }
366
+ if (branches?.length) {
367
+ const summary = `${String(branches.length)} branch(es), current: ${current || '?'}`;
368
+ const content = branches.map((b) => `${b.current ? '* ' : ' '}${b.name}`).join('\n');
369
+ return { content, summary };
370
+ }
371
+ return { content: '', summary: current ? `On branch ${current}` : 'Unknown' };
372
+ }
373
+ function formatRunTests(result) {
374
+ const exitCode = result.exitCode;
375
+ const passed = result.passed;
376
+ const failed = result.failed;
377
+ const skipped = result.skipped;
378
+ const framework = result.framework;
379
+ const output = result.output;
380
+ const parts = [];
381
+ if (passed !== undefined)
382
+ parts.push(`${String(passed)} passed`);
383
+ if (failed !== undefined)
384
+ parts.push(`${String(failed)} failed`);
385
+ if (skipped !== undefined)
386
+ parts.push(`${String(skipped)} skipped`);
387
+ let summary;
388
+ if (parts.length > 0) {
389
+ summary = parts.join(', ');
390
+ }
391
+ else {
392
+ summary = exitCode === 0 ? 'Tests passed' : `Tests failed (exit ${String(exitCode)})`;
393
+ }
394
+ if (framework)
395
+ summary = `[${framework}] ${summary}`;
396
+ return { content: output || '', summary };
397
+ }
398
+ function formatRunLint(result) {
399
+ const exitCode = result.exitCode;
400
+ const errors = result.errors;
401
+ const warnings = result.warnings;
402
+ const linter = result.linter;
403
+ const output = result.output;
404
+ const parts = [];
405
+ if (errors !== undefined)
406
+ parts.push(`${String(errors)} error(s)`);
407
+ if (warnings !== undefined)
408
+ parts.push(`${String(warnings)} warning(s)`);
409
+ let summary;
410
+ if (parts.length > 0) {
411
+ summary = parts.join(', ');
412
+ }
413
+ else {
414
+ summary = exitCode === 0 ? 'Lint passed' : `Lint failed (exit ${String(exitCode)})`;
415
+ }
416
+ if (linter)
417
+ summary = `[${linter}] ${summary}`;
418
+ return { content: output || '', summary };
419
+ }
420
+ function formatDetectProject(result) {
421
+ const primary = result.primary;
422
+ const types = result.types;
423
+ const packageManager = result.packageManager;
424
+ const testFramework = result.testFramework;
425
+ const summary = primary || (types?.length ? types.join(', ') : 'Unknown project');
426
+ const details = [];
427
+ if (packageManager)
428
+ details.push(`Package manager: ${packageManager}`);
429
+ if (testFramework)
430
+ details.push(`Test framework: ${testFramework}`);
431
+ if (result.linter)
432
+ details.push(`Linter: ${result.linter}`);
433
+ if (result.buildTool)
434
+ details.push(`Build tool: ${result.buildTool}`);
435
+ return { content: details.join('\n'), summary };
436
+ }
437
+ function formatFindProjectRoot(result) {
438
+ const root = result.root;
439
+ const foundMarker = result.foundMarker;
440
+ const summary = root || 'Not found';
441
+ const content = foundMarker ? `Found via: ${foundMarker}` : '';
442
+ return { content, summary };
443
+ }
444
+ function formatBacklogWrite(result) {
445
+ const action = result.action;
446
+ const itemId = result.itemId;
447
+ const message = result.message;
448
+ const summary = message || (itemId ? `${action || 'Done'}: ${itemId}` : (action || 'Done'));
449
+ return { content: '', summary };
450
+ }
451
+ function formatAnchor(result) {
452
+ const message = result.message;
453
+ const id = result.id;
454
+ const anchors = result.anchors;
455
+ let summary;
456
+ if (message) {
457
+ summary = message;
458
+ }
459
+ else if (id) {
460
+ summary = `Anchor: ${id}`;
461
+ }
462
+ else if (anchors?.length) {
463
+ summary = `${String(anchors.length)} anchor(s)`;
464
+ }
465
+ else {
466
+ summary = 'Done';
467
+ }
468
+ const content = anchors ? anchors.map((a) => `[${a.id}] ${a.content.slice(0, 50)}`).join('\n') : '';
469
+ return { content, summary };
470
+ }
471
+ function formatKillShell(result) {
472
+ const message = result.message;
473
+ return { content: '', summary: message || 'Shell terminated' };
474
+ }
475
+ function formatProjectGet(result) {
476
+ const project = result.project;
477
+ if (!project) {
478
+ const message = result.message;
479
+ return { content: '', summary: message || 'No project found' };
480
+ }
481
+ const name = project.displayName || project.name || 'Unknown';
482
+ const status = project.status || '';
483
+ const type = project.type || '';
484
+ const path = project.path || '';
485
+ const summary = `${name} (${type || 'project'})`;
486
+ const details = [];
487
+ if (status)
488
+ details.push(`Status: ${status}`);
489
+ if (path)
490
+ details.push(`Path: ${path}`);
491
+ if (project.lifecycleState)
492
+ details.push(`Stage: ${project.lifecycleState}`);
493
+ if (project.framework)
494
+ details.push(`Framework: ${project.framework}`);
495
+ if (project.language)
496
+ details.push(`Language: ${project.language}`);
497
+ return { content: details.join('\n'), summary };
498
+ }
499
+ function formatProjectCreate(result) {
500
+ const project = result.project;
501
+ const message = result.message;
502
+ if (project) {
503
+ const name = project.displayName || project.name || 'Unknown';
504
+ return { content: '', summary: message || `Created project: ${name}` };
505
+ }
506
+ return { content: '', summary: message || 'Project created' };
507
+ }
508
+ function formatProjectUpdate(result) {
509
+ const project = result.project;
510
+ const message = result.message;
511
+ if (project) {
512
+ const name = project.displayName || project.name || 'Unknown';
513
+ return { content: '', summary: message || `Updated project: ${name}` };
514
+ }
515
+ return { content: '', summary: message || 'Project updated' };
516
+ }
517
+ function formatProjectList(result) {
518
+ const projects = result.projects;
519
+ const total = result.total;
520
+ if (!projects?.length) {
521
+ return { content: '', summary: 'No projects found' };
522
+ }
523
+ const summary = `${String(total ?? projects.length)} project(s)`;
524
+ const lines = projects.slice(0, 10).map((p) => {
525
+ const name = p.displayName || p.name || '?';
526
+ const status = p.status ? ` [${p.status}]` : '';
527
+ const type = p.type ? ` (${p.type})` : '';
528
+ return `${name}${type}${status}`;
529
+ });
530
+ if (projects.length > 10)
531
+ lines.push(`... and ${String(projects.length - 10)} more`);
532
+ return { content: lines.join('\n'), summary };
533
+ }
534
+ function formatProjectDocument(toolName, result) {
535
+ const action = toolName.replace('project_document_', '');
536
+ // Handle document_get - return the document
537
+ if (action === 'get') {
538
+ const document = result.document;
539
+ if (!document) {
540
+ return { content: '', summary: 'Document not found' };
541
+ }
542
+ const docType = document.docType || 'unknown';
543
+ const content = document.content || '';
544
+ const preview = truncate(content, 200);
545
+ return { content: preview, summary: `Document: ${docType}` };
546
+ }
547
+ // Handle document_list - return list of documents
548
+ if (action === 'list') {
549
+ const documents = result.documents;
550
+ if (!documents?.length) {
551
+ return { content: '', summary: 'No documents found' };
552
+ }
553
+ const summary = `${String(documents.length)} document(s)`;
554
+ const lines = documents.map((d) => d.docType || '?');
555
+ return { content: lines.join('\n'), summary };
556
+ }
557
+ // Handle document_add/delete - simple confirmation
558
+ const message = result.message;
559
+ const docType = result.docType;
560
+ if (message) {
561
+ return { content: '', summary: message };
562
+ }
563
+ if (action === 'add') {
564
+ return { content: '', summary: docType ? `Added document: ${docType}` : 'Document added' };
565
+ }
566
+ if (action === 'delete') {
567
+ return { content: '', summary: docType ? `Deleted document: ${docType}` : 'Document deleted' };
568
+ }
569
+ return { content: '', summary: 'Done' };
570
+ }
571
+ function formatTask(result) {
572
+ const response = result.response;
573
+ const agentType = result.agentType;
574
+ const iterations = result.iterations;
575
+ const toolCalls = result.toolCalls;
576
+ // Build summary: [agentType] N iterations, M tool calls
577
+ const parts = [];
578
+ if (iterations !== undefined) {
579
+ parts.push(`${String(iterations)} iteration${iterations === 1 ? '' : 's'}`);
580
+ }
581
+ if (toolCalls !== undefined) {
582
+ parts.push(`${String(toolCalls)} tool call${toolCalls === 1 ? '' : 's'}`);
583
+ }
584
+ let summary = agentType ? `[${agentType}] ` : '';
585
+ summary += parts.length > 0 ? parts.join(', ') : 'Done';
586
+ // Content is the response text
587
+ const content = response || '';
588
+ return { content, summary };
589
+ }
590
+ // =============================================================================
591
+ // Plan Formatters
592
+ // =============================================================================
593
+ function formatPlanGet(result) {
594
+ const plan = result.plan;
595
+ if (!plan) {
596
+ const message = result.message;
597
+ return { content: '', summary: message || 'Plan not found' };
598
+ }
599
+ const name = plan.name || 'Unknown';
600
+ const status = plan.status || 'draft';
601
+ const planContent = plan.content || '';
602
+ const workItem = plan.workItem;
603
+ // Build summary
604
+ let summary = `${name} [${status}]`;
605
+ if (workItem) {
606
+ const itemId = workItem.itemId || '';
607
+ summary += ` → ${itemId}`;
608
+ }
609
+ // For content, show a preview of the plan (first 500 chars with section headers visible)
610
+ const lines = planContent.split('\n');
611
+ const previewLines = [];
612
+ let charCount = 0;
613
+ const maxChars = 500;
614
+ for (const line of lines) {
615
+ if (charCount >= maxChars) {
616
+ previewLines.push('...');
617
+ break;
618
+ }
619
+ previewLines.push(line);
620
+ charCount += line.length + 1;
621
+ }
622
+ const content = previewLines.join('\n');
623
+ return { content, summary };
624
+ }
625
+ function formatPlanList(result) {
626
+ const plans = result.plans;
627
+ const count = result.count;
628
+ const statusCounts = result.statusCounts;
629
+ if (!plans?.length) {
630
+ return { content: '', summary: 'No plans found' };
631
+ }
632
+ // Build summary with status counts
633
+ let summary = `${String(count ?? plans.length)} plan(s)`;
634
+ if (statusCounts) {
635
+ const statuses = [];
636
+ if (statusCounts.draft)
637
+ statuses.push(`${String(statusCounts.draft)} draft`);
638
+ if (statusCounts.approved)
639
+ statuses.push(`${String(statusCounts.approved)} approved`);
640
+ if (statusCounts.in_progress)
641
+ statuses.push(`${String(statusCounts.in_progress)} in progress`);
642
+ if (statusCounts.completed)
643
+ statuses.push(`${String(statusCounts.completed)} completed`);
644
+ if (statuses.length)
645
+ summary += ` (${statuses.join(', ')})`;
646
+ }
647
+ // Build content with plan list
648
+ const lines = plans.slice(0, 10).map((p) => {
649
+ const status = p.status ? `[${p.status}]` : '';
650
+ const workItem = p.workItemItemId ? ` → ${p.workItemItemId}` : '';
651
+ return `${p.name || '?'} ${status}${workItem}`;
652
+ });
653
+ if (plans.length > 10) {
654
+ lines.push(`... and ${String(plans.length - 10)} more`);
655
+ }
656
+ return { content: lines.join('\n'), summary };
657
+ }
658
+ function formatPlanCreate(result) {
659
+ const message = result.message;
660
+ const plan = result.plan;
661
+ if (message) {
662
+ return { content: '', summary: message };
663
+ }
664
+ if (plan) {
665
+ const name = plan.name || 'Unknown';
666
+ const id = plan.id;
667
+ return { content: '', summary: `Created plan: ${name}${id ? ` (ID: ${String(id)})` : ''}` };
668
+ }
669
+ return { content: '', summary: 'Plan created' };
670
+ }
671
+ function formatPlanUpdate(result) {
672
+ const message = result.message;
673
+ const plan = result.plan;
674
+ if (message) {
675
+ return { content: '', summary: message };
676
+ }
677
+ if (plan) {
678
+ const name = plan.name || 'Unknown';
679
+ const status = plan.status || '';
680
+ return { content: '', summary: `Updated plan: ${name}${status ? ` [${status}]` : ''}` };
681
+ }
682
+ return { content: '', summary: 'Plan updated' };
683
+ }
684
+ function formatPlanDelete(result) {
685
+ const message = result.message;
686
+ return { content: '', summary: message || 'Plan deleted' };
687
+ }
688
+ // =============================================================================
689
+ // agents-coding Tool Formatters
690
+ // =============================================================================
691
+ function formatGitStash(result) {
692
+ const message = result.message;
693
+ const stashes = result.stashes;
694
+ if (message) {
695
+ return { content: '', summary: message };
696
+ }
697
+ if (stashes?.length) {
698
+ const lines = stashes.slice(0, 5).map((s) => `stash@{${String(s.index ?? 0)}}: ${(s.message || '').slice(0, 50)}`);
699
+ if (stashes.length > 5)
700
+ lines.push(`... and ${String(stashes.length - 5)} more`);
701
+ return { content: lines.join('\n'), summary: `${String(stashes.length)} stash(es)` };
702
+ }
703
+ return { content: '', summary: 'No stashes' };
704
+ }
705
+ function formatGitBlame(result) {
706
+ const lines = result.lines;
707
+ const authors = result.authorSummary;
708
+ if (authors?.length) {
709
+ const topAuthors = authors.slice(0, 3).map((a) => `${a.author || '?'}: ${String(a.lines ?? 0)} lines`).join(', ');
710
+ const summary = `${String(lines?.length ?? 0)} lines, ${topAuthors}`;
711
+ return { content: '', summary };
712
+ }
713
+ return { content: '', summary: `${String(lines?.length ?? 0)} lines analyzed` };
714
+ }
715
+ function formatGitFileHistory(result) {
716
+ const commits = result.commits;
717
+ const file = result.file;
718
+ if (!commits?.length) {
719
+ return { content: '', summary: 'No history found' };
720
+ }
721
+ const summary = `${String(commits.length)} commit(s) for ${file || 'file'}`;
722
+ const lines = commits.slice(0, 5).map((c) => `${c.shortHash || '?'} ${(c.subject || '').slice(0, 50)}`);
723
+ if (commits.length > 5)
724
+ lines.push(`... and ${String(commits.length - 5)} more`);
725
+ return { content: lines.join('\n'), summary };
726
+ }
727
+ function formatRunBuild(result) {
728
+ const success = result.success;
729
+ const command = result.command;
730
+ const stdout = result.stdout;
731
+ const status = success === false ? 'Build failed' : 'Build succeeded';
732
+ const summary = command ? `${status} (${command})` : status;
733
+ return { content: stdout || '', summary };
734
+ }
735
+ function formatRunFormat(result) {
736
+ const filesFormatted = result.filesFormatted;
737
+ const command = result.command;
738
+ if (filesFormatted !== undefined) {
739
+ return { content: '', summary: `Formatted ${String(filesFormatted)} file(s)` };
740
+ }
741
+ return { content: '', summary: command ? `Ran ${command}` : 'Format complete' };
742
+ }
743
+ function formatFindDefinition(result) {
744
+ const definitions = result.definitions;
745
+ if (!definitions?.length) {
746
+ return { content: '', summary: 'No definitions found' };
747
+ }
748
+ const summary = `Found ${String(definitions.length)} definition(s)`;
749
+ const lines = definitions.slice(0, 5).map((d) => `${d.path || '?'}:${String(d.line ?? 0)} [${d.type || '?'}] ${d.name || ''}`);
750
+ if (definitions.length > 5)
751
+ lines.push(`... and ${String(definitions.length - 5)} more`);
752
+ return { content: lines.join('\n'), summary };
753
+ }
754
+ function formatFindReferences(result) {
755
+ const references = result.references;
756
+ const totalCount = result.totalCount;
757
+ const count = totalCount ?? references?.length ?? 0;
758
+ if (count === 0) {
759
+ return { content: '', summary: 'No references found' };
760
+ }
761
+ const summary = `Found ${String(count)} reference(s)`;
762
+ if (references?.length) {
763
+ const lines = references.slice(0, 5).map((r) => `${r.path || '?'}:${String(r.line ?? 0)}`);
764
+ if (references.length > 5)
765
+ lines.push(`... and ${String(references.length - 5)} more`);
766
+ return { content: lines.join('\n'), summary };
767
+ }
768
+ return { content: '', summary };
769
+ }
770
+ function formatFindTodos(result) {
771
+ const todos = result.todos;
772
+ if (!todos?.length) {
773
+ return { content: '', summary: 'No TODOs found' };
774
+ }
775
+ const summary = `Found ${String(todos.length)} TODO(s)`;
776
+ const lines = todos.slice(0, 5).map((t) => `${t.path || '?'}:${String(t.line ?? 0)} [${t.type || 'TODO'}] ${(t.text || '').slice(0, 40)}`);
777
+ if (todos.length > 5)
778
+ lines.push(`... and ${String(todos.length - 5)} more`);
779
+ return { content: lines.join('\n'), summary };
780
+ }
781
+ function formatCheckOutdated(result) {
782
+ const packages = result.packages;
783
+ if (!packages?.length) {
784
+ return { content: '', summary: 'All packages up to date' };
785
+ }
786
+ const summary = `${String(packages.length)} outdated package(s)`;
787
+ const lines = packages.slice(0, 5).map((p) => `${p.name || '?'}: ${p.current || '?'} → ${p.latest || '?'} (${p.type || 'update'})`);
788
+ if (packages.length > 5)
789
+ lines.push(`... and ${String(packages.length - 5)} more`);
790
+ return { content: lines.join('\n'), summary };
791
+ }
792
+ function formatFindVulnerabilities(result) {
793
+ const vulnerabilities = result.vulnerabilities;
794
+ if (!vulnerabilities?.length) {
795
+ return { content: '', summary: 'No vulnerabilities found' };
796
+ }
797
+ // Count by severity
798
+ const bySeverity = {};
799
+ vulnerabilities.forEach((v) => {
800
+ const sev = v.severity || 'unknown';
801
+ bySeverity[sev] = (bySeverity[sev] || 0) + 1;
802
+ });
803
+ const sevParts = Object.entries(bySeverity).map(([k, v]) => `${String(v)} ${k}`).join(', ');
804
+ const summary = `${String(vulnerabilities.length)} vulnerabilities (${sevParts})`;
805
+ const lines = vulnerabilities.slice(0, 5).map((v) => `[${v.severity || '?'}] ${v.name || '?'}: ${(v.title || '').slice(0, 40)}`);
806
+ if (vulnerabilities.length > 5)
807
+ lines.push(`... and ${String(vulnerabilities.length - 5)} more`);
808
+ return { content: lines.join('\n'), summary };
809
+ }
810
+ function formatAnalyzeTestCoverage(result) {
811
+ const summary_data = result.summary;
812
+ const meetsThreshold = result.meetsThreshold;
813
+ if (summary_data) {
814
+ const lineCov = summary_data.lines?.pct ?? summary_data.statements?.pct ?? 0;
815
+ const funcCov = summary_data.functions?.pct ?? 0;
816
+ const branchCov = summary_data.branches?.pct ?? 0;
817
+ const status = meetsThreshold === false ? ' (below threshold)' : '';
818
+ const summary = `Coverage: ${lineCov.toFixed(1)}% lines, ${funcCov.toFixed(1)}% functions, ${branchCov.toFixed(1)}% branches${status}`;
819
+ return { content: '', summary };
820
+ }
821
+ return { content: '', summary: 'Coverage analysis complete' };
822
+ }
823
+ function formatGetFileStructure(result) {
824
+ const classes = result.classes;
825
+ const functions = result.functions;
826
+ const imports = result.imports;
827
+ const exports = result.exports;
828
+ const parts = [];
829
+ if (classes?.length)
830
+ parts.push(`${String(classes.length)} class(es)`);
831
+ if (functions?.length)
832
+ parts.push(`${String(functions.length)} function(s)`);
833
+ if (imports?.length)
834
+ parts.push(`${String(imports.length)} import(s)`);
835
+ if (exports?.length)
836
+ parts.push(`${String(exports.length)} export(s)`);
837
+ const summary = parts.length > 0 ? parts.join(', ') : 'Empty file';
838
+ // Build detailed content
839
+ const lines = [];
840
+ if (classes?.length) {
841
+ lines.push('Classes:');
842
+ classes.slice(0, 5).forEach((c) => lines.push(` - ${c.name || '?'}`));
843
+ if (classes.length > 5)
844
+ lines.push(` ... and ${String(classes.length - 5)} more`);
845
+ }
846
+ if (functions?.length) {
847
+ lines.push('Functions:');
848
+ functions.slice(0, 5).forEach((f) => lines.push(` - ${f.name || '?'}`));
849
+ if (functions.length > 5)
850
+ lines.push(` ... and ${String(functions.length - 5)} more`);
851
+ }
852
+ return { content: lines.join('\n'), summary };
853
+ }
854
+ function formatGetComplexity(result) {
855
+ const files = result.files;
856
+ const functions_data = result.functions;
857
+ if (functions_data?.length) {
858
+ const highComplexity = functions_data.filter((f) => (f.complexity ?? 0) > 10);
859
+ if (highComplexity.length > 0) {
860
+ const summary = `${String(highComplexity.length)} high-complexity function(s)`;
861
+ const lines = highComplexity.slice(0, 5).map((f) => `${f.name || '?'}: complexity ${String(f.complexity ?? 0)}`);
862
+ if (highComplexity.length > 5)
863
+ lines.push(`... and ${String(highComplexity.length - 5)} more`);
864
+ return { content: lines.join('\n'), summary };
865
+ }
866
+ return { content: '', summary: 'All functions within complexity threshold' };
867
+ }
868
+ if (files?.length) {
869
+ const summary = `Analyzed ${String(files.length)} file(s)`;
870
+ return { content: '', summary };
871
+ }
872
+ return { content: '', summary: 'Complexity analysis complete' };
873
+ }
874
+ function formatReadSymbol(result) {
875
+ const name = result.name;
876
+ const kind = result.kind;
877
+ const startLine = result.startLine;
878
+ const endLine = result.endLine;
879
+ const codeContent = result.content;
880
+ const signature = result.signature;
881
+ const container = result.container;
882
+ // Build summary: [kind] name (lines X-Y)
883
+ const kindLabel = kind || 'symbol';
884
+ const lineRange = startLine && endLine ? ` (lines ${String(startLine)}-${String(endLine)})` : '';
885
+ const containerInfo = container ? ` in ${container}` : '';
886
+ const summary = `[${kindLabel}] ${name || '?'}${containerInfo}${lineRange}`;
887
+ // Content is the actual source code
888
+ // Format it nicely with line numbers
889
+ if (codeContent) {
890
+ const lines = codeContent.split('\n');
891
+ const start = startLine ?? 1;
892
+ const numberedLines = lines.map((line, i) => {
893
+ const lineNum = String(start + i).padStart(4, ' ');
894
+ return `${lineNum} │ ${line}`;
895
+ });
896
+ return { content: numberedLines.join('\n'), summary };
897
+ }
898
+ // Fallback to signature if no content
899
+ if (signature) {
900
+ return { content: signature, summary };
901
+ }
902
+ return { content: '', summary };
903
+ }
904
+ function formatTodoClaim(result) {
905
+ const message = result.message;
906
+ return { content: '', summary: message || 'Done' };
907
+ }
908
+ function formatRecallWork(result) {
909
+ const episodes = result.episodes;
910
+ const totalEpisodes = result.totalEpisodes;
911
+ const totalEffort = result.totalEffort;
912
+ const uncommittedCount = result.uncommittedCount;
913
+ if (!episodes?.length) {
914
+ return { content: '', summary: 'No work history' };
915
+ }
916
+ // Summary line
917
+ const uncommittedInfo = uncommittedCount ? `, ${String(uncommittedCount)} uncommitted` : '';
918
+ const summary = `${String(totalEpisodes ?? episodes.length)} episode(s), effort: ${totalEffort || '?'}${uncommittedInfo}`;
919
+ // Build detailed content
920
+ const lines = [];
921
+ for (const ep of episodes.slice(0, 10)) {
922
+ const time = ep.timestamp ? new Date(ep.timestamp).toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' }) : '?';
923
+ const agent = ep.agentId || '?';
924
+ const action = ep.summary || ep.action || '?';
925
+ const effort = ep.effort ? `[${ep.effort}]` : '';
926
+ lines.push(`${time} ${agent} ${effort} ${action}`);
927
+ }
928
+ if (episodes.length > 10) {
929
+ lines.push(`... and ${String(episodes.length - 10)} more`);
930
+ }
931
+ return { content: lines.join('\n'), summary };
932
+ }
933
+ function formatArtifact(toolName, result) {
934
+ const action = toolName.replace('artifact_', '');
935
+ // artifact_list
936
+ if (action === 'list') {
937
+ const content = typeof result.content === 'string' ? result.content : '';
938
+ const lines = content.split('\n').filter((l) => l.length > 0);
939
+ // First line is typically "Found N artifacts:"
940
+ const summary = lines.length > 0 ? lines[0].slice(0, 60) : 'No artifacts';
941
+ return { content: '', summary };
942
+ }
943
+ // artifact_save
944
+ if (action === 'save') {
945
+ const content = typeof result.content === 'string' ? result.content : '';
946
+ const match = /Created artifact "([^"]+)"/.exec(content);
947
+ return { content: '', summary: match ? `Saved: ${match[1]}` : 'Artifact saved' };
948
+ }
949
+ // artifact_get
950
+ if (action === 'get') {
951
+ const content = typeof result.content === 'string' ? result.content : '';
952
+ const match = /Artifact: (.+)/.exec(content);
953
+ return { content, summary: match ? match[1].slice(0, 60) : 'Artifact retrieved' };
954
+ }
955
+ // artifact_delete
956
+ if (action === 'delete') {
957
+ const content = typeof result.content === 'string' ? result.content : '';
958
+ const match = /Deleted artifact "([^"]+)"/.exec(content);
959
+ return { content: '', summary: match ? `Deleted: ${match[1]}` : 'Artifact deleted' };
960
+ }
961
+ // Fallback
962
+ const message = typeof result.content === 'string' ? result.content.split('\n')[0] : '';
963
+ return { content: '', summary: message.slice(0, 60) || 'Done' };
964
+ }
965
+ function formatListTools(result) {
966
+ const count = result.count;
967
+ const tools = result.tools;
968
+ if (tools?.length) {
969
+ const names = tools.slice(0, 8).map((t) => t.name || '?').join(', ');
970
+ const more = tools.length > 8 ? `, +${String(tools.length - 8)} more` : '';
971
+ return { content: '', summary: `${String(count ?? tools.length)} tools: ${names}${more}` };
972
+ }
973
+ return { content: '', summary: count ? `${String(count)} tools available` : 'No tools' };
974
+ }
975
+ function formatGetToolInfo(result) {
976
+ const name = result.name;
977
+ const description = result.description;
978
+ if (name && description) {
979
+ // First sentence of description
980
+ const firstSentence = description.split('.')[0].slice(0, 60);
981
+ return { content: '', summary: `${name}: ${firstSentence}` };
982
+ }
983
+ return { content: '', summary: name || 'Tool info' };
984
+ }
985
+ function formatDelegateBackground(result) {
986
+ const delegated = result.delegated;
987
+ const delegationId = result.delegationId;
988
+ const status = result.status;
989
+ const message = result.message;
990
+ const error = result.error;
991
+ if (error) {
992
+ return { content: '', summary: error };
993
+ }
994
+ if (delegated && delegationId) {
995
+ const shortId = delegationId.replace('del_', '');
996
+ const statusLabel = status === 'queued' ? 'queued' : 'running';
997
+ return { content: '', summary: `${shortId} ${statusLabel}` };
998
+ }
999
+ return { content: '', summary: message || 'Delegated' };
1000
+ }
1001
+ function formatDelegate(result) {
1002
+ const message = result.message;
1003
+ return { content: '', summary: message || 'Delegated' };
1004
+ }
1005
+ function formatGeneric(result) {
1006
+ const content = typeof result.content === 'string'
1007
+ ? result.content
1008
+ : typeof result.output === 'string'
1009
+ ? result.output
1010
+ : JSON.stringify(result);
1011
+ const lines = content.split('\n').filter((l) => l.length > 0);
1012
+ const summary = lines.length > 0 ? lines[0].slice(0, 60) : 'Completed';
1013
+ return { content, summary };
1014
+ }
1015
+ function formatDelegated(toolName, result) {
1016
+ const originalTokens = result._originalTokens;
1017
+ const summaryTokens = result._summaryTokens;
1018
+ const summaryText = result.summary;
1019
+ // Summary line: "Delegated (24,921 → 800 tokens)"
1020
+ const tokenInfo = originalTokens && summaryTokens
1021
+ ? ` (${originalTokens.toLocaleString()} → ${summaryTokens.toLocaleString()} tokens)`
1022
+ : '';
1023
+ const summary = `Delegated${tokenInfo}`;
1024
+ // Content: the summary text (truncated for display, full in Ctrl+O)
1025
+ const content = summaryText || `[${toolName} result was auto-summarized to conserve context]`;
1026
+ return { content, summary, success: true };
1027
+ }