@evalops/maestro 0.10.50 → 0.10.53

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 (1825) hide show
  1. package/README.md +1 -3
  2. package/dist/agent/agent-outcome.d.ts +54 -0
  3. package/dist/agent/agent-outcome.d.ts.map +1 -0
  4. package/dist/agent/agent-outcome.js +142 -0
  5. package/dist/agent/agent-outcome.js.map +1 -0
  6. package/dist/agent/agent-resume.d.ts.map +1 -1
  7. package/dist/agent/agent-resume.js +3 -3
  8. package/dist/agent/agent-resume.js.map +1 -1
  9. package/dist/agent/agent-run-summary.d.ts +37 -0
  10. package/dist/agent/agent-run-summary.d.ts.map +1 -0
  11. package/dist/agent/agent-run-summary.js +15 -0
  12. package/dist/agent/agent-run-summary.js.map +1 -0
  13. package/dist/agent/agent-work-board.d.ts +82 -0
  14. package/dist/agent/agent-work-board.d.ts.map +1 -0
  15. package/dist/agent/agent-work-board.js +312 -0
  16. package/dist/agent/agent-work-board.js.map +1 -0
  17. package/dist/agent/agent.d.ts.map +1 -1
  18. package/dist/agent/agent.js.map +1 -1
  19. package/dist/agent/auto-compaction.d.ts +7 -2
  20. package/dist/agent/auto-compaction.d.ts.map +1 -1
  21. package/dist/agent/auto-compaction.js +23 -10
  22. package/dist/agent/auto-compaction.js.map +1 -1
  23. package/dist/agent/compaction.d.ts.map +1 -1
  24. package/dist/agent/compaction.js +1 -1
  25. package/dist/agent/compaction.js.map +1 -1
  26. package/dist/agent/context-handoff.d.ts.map +1 -1
  27. package/dist/agent/context-handoff.js +2 -1
  28. package/dist/agent/context-handoff.js.map +1 -1
  29. package/dist/agent/index.d.ts +8 -1
  30. package/dist/agent/index.d.ts.map +1 -1
  31. package/dist/agent/index.js +8 -1
  32. package/dist/agent/index.js.map +1 -1
  33. package/dist/agent/mission-artifacts.d.ts +62 -0
  34. package/dist/agent/mission-artifacts.d.ts.map +1 -0
  35. package/dist/agent/mission-artifacts.js +438 -0
  36. package/dist/agent/mission-artifacts.js.map +1 -0
  37. package/dist/agent/mission-manifest.d.ts +139 -3
  38. package/dist/agent/mission-manifest.d.ts.map +1 -1
  39. package/dist/agent/mission-manifest.js +549 -3
  40. package/dist/agent/mission-manifest.js.map +1 -1
  41. package/dist/agent/mission-store.d.ts +80 -0
  42. package/dist/agent/mission-store.d.ts.map +1 -0
  43. package/dist/agent/mission-store.js +603 -0
  44. package/dist/agent/mission-store.js.map +1 -0
  45. package/dist/agent/modes.d.ts +3 -3
  46. package/dist/agent/modes.d.ts.map +1 -1
  47. package/dist/agent/modes.js +66 -3
  48. package/dist/agent/modes.js.map +1 -1
  49. package/dist/agent/oracle-consultation-policy.d.ts +22 -0
  50. package/dist/agent/oracle-consultation-policy.d.ts.map +1 -0
  51. package/dist/agent/oracle-consultation-policy.js +72 -0
  52. package/dist/agent/oracle-consultation-policy.js.map +1 -0
  53. package/dist/agent/oracle-policy-experiment.d.ts +27 -0
  54. package/dist/agent/oracle-policy-experiment.d.ts.map +1 -0
  55. package/dist/agent/oracle-policy-experiment.js +59 -0
  56. package/dist/agent/oracle-policy-experiment.js.map +1 -0
  57. package/dist/agent/oracle-policy-rollout.d.ts +42 -0
  58. package/dist/agent/oracle-policy-rollout.d.ts.map +1 -0
  59. package/dist/agent/oracle-policy-rollout.js +80 -0
  60. package/dist/agent/oracle-policy-rollout.js.map +1 -0
  61. package/dist/agent/plugin-agent-api.d.ts +13 -0
  62. package/dist/agent/plugin-agent-api.d.ts.map +1 -0
  63. package/dist/agent/plugin-agent-api.js +11 -0
  64. package/dist/agent/plugin-agent-api.js.map +1 -0
  65. package/dist/agent/plugin-agent-loader.d.ts +17 -0
  66. package/dist/agent/plugin-agent-loader.d.ts.map +1 -0
  67. package/dist/agent/plugin-agent-loader.js +81 -0
  68. package/dist/agent/plugin-agent-loader.js.map +1 -0
  69. package/dist/agent/plugin-agent-registry.d.ts +62 -0
  70. package/dist/agent/plugin-agent-registry.d.ts.map +1 -0
  71. package/dist/agent/plugin-agent-registry.js +109 -0
  72. package/dist/agent/plugin-agent-registry.js.map +1 -0
  73. package/dist/agent/profile-loader.d.ts +7 -0
  74. package/dist/agent/profile-loader.d.ts.map +1 -0
  75. package/dist/agent/profile-loader.js +115 -0
  76. package/dist/agent/profile-loader.js.map +1 -0
  77. package/dist/agent/profiles.d.ts +30 -0
  78. package/dist/agent/profiles.d.ts.map +1 -0
  79. package/dist/agent/profiles.js +146 -0
  80. package/dist/agent/profiles.js.map +1 -0
  81. package/dist/agent/prompt-cache.d.ts +0 -4
  82. package/dist/agent/prompt-cache.d.ts.map +1 -1
  83. package/dist/agent/prompt-cache.js +1 -7
  84. package/dist/agent/prompt-cache.js.map +1 -1
  85. package/dist/agent/providers/codex-app-server.d.ts.map +1 -1
  86. package/dist/agent/providers/codex-app-server.js +1 -3
  87. package/dist/agent/providers/codex-app-server.js.map +1 -1
  88. package/dist/agent/providers/google-gemini-cli.js +204 -107
  89. package/dist/agent/providers/google.js +101 -41
  90. package/dist/agent/providers/scripted.d.ts.map +1 -1
  91. package/dist/agent/providers/scripted.js +1 -3
  92. package/dist/agent/providers/scripted.js.map +1 -1
  93. package/dist/agent/providers/validation.d.ts.map +1 -1
  94. package/dist/agent/providers/validation.js +1 -3
  95. package/dist/agent/providers/validation.js.map +1 -1
  96. package/dist/agent/providers/vertex.js +204 -107
  97. package/dist/agent/routing-receipt.d.ts +34 -0
  98. package/dist/agent/routing-receipt.d.ts.map +1 -0
  99. package/dist/agent/routing-receipt.js +55 -0
  100. package/dist/agent/routing-receipt.js.map +1 -0
  101. package/dist/agent/skill-artifact-metadata.d.ts +14 -0
  102. package/dist/agent/skill-artifact-metadata.d.ts.map +1 -0
  103. package/dist/agent/skill-artifact-metadata.js +49 -0
  104. package/dist/agent/skill-artifact-metadata.js.map +1 -0
  105. package/dist/agent/snapshot-store.d.ts +32 -0
  106. package/dist/agent/snapshot-store.d.ts.map +1 -0
  107. package/dist/agent/snapshot-store.js +195 -0
  108. package/dist/agent/snapshot-store.js.map +1 -0
  109. package/dist/agent/specialist-profiles.d.ts +36 -0
  110. package/dist/agent/specialist-profiles.d.ts.map +1 -0
  111. package/dist/agent/specialist-profiles.js +159 -0
  112. package/dist/agent/specialist-profiles.js.map +1 -0
  113. package/dist/agent/subagent-specs.d.ts +5 -2
  114. package/dist/agent/subagent-specs.d.ts.map +1 -1
  115. package/dist/agent/subagent-specs.js +83 -10
  116. package/dist/agent/subagent-specs.js.map +1 -1
  117. package/dist/agent/swarm/coverage-gate.d.ts +37 -0
  118. package/dist/agent/swarm/coverage-gate.d.ts.map +1 -0
  119. package/dist/agent/swarm/coverage-gate.js +48 -0
  120. package/dist/agent/swarm/coverage-gate.js.map +1 -0
  121. package/dist/agent/swarm/executor.d.ts +1 -0
  122. package/dist/agent/swarm/executor.d.ts.map +1 -1
  123. package/dist/agent/swarm/executor.js +151 -15
  124. package/dist/agent/swarm/executor.js.map +1 -1
  125. package/dist/agent/swarm/orchestrator-prompt.d.ts +25 -0
  126. package/dist/agent/swarm/orchestrator-prompt.d.ts.map +1 -0
  127. package/dist/agent/swarm/orchestrator-prompt.js +48 -0
  128. package/dist/agent/swarm/orchestrator-prompt.js.map +1 -0
  129. package/dist/agent/swarm/plan-parser.d.ts.map +1 -1
  130. package/dist/agent/swarm/plan-parser.js +27 -2
  131. package/dist/agent/swarm/plan-parser.js.map +1 -1
  132. package/dist/agent/swarm/types.d.ts +17 -0
  133. package/dist/agent/swarm/types.d.ts.map +1 -1
  134. package/dist/agent/swarm/types.js.map +1 -1
  135. package/dist/agent/swarm/validation-directive.d.ts +21 -0
  136. package/dist/agent/swarm/validation-directive.d.ts.map +1 -0
  137. package/dist/agent/swarm/validation-directive.js +25 -0
  138. package/dist/agent/swarm/validation-directive.js.map +1 -0
  139. package/dist/agent/token-counter.d.ts +40 -0
  140. package/dist/agent/token-counter.d.ts.map +1 -0
  141. package/dist/agent/token-counter.js +74 -0
  142. package/dist/agent/token-counter.js.map +1 -0
  143. package/dist/agent/transport/events.d.ts +1 -1
  144. package/dist/agent/transport/events.d.ts.map +1 -1
  145. package/dist/agent/transport/events.js +1 -1
  146. package/dist/agent/transport/events.js.map +1 -1
  147. package/dist/agent/transport/tool-execution-bridge.d.ts.map +1 -1
  148. package/dist/agent/transport/tool-execution-bridge.js +4 -1
  149. package/dist/agent/transport/tool-execution-bridge.js.map +1 -1
  150. package/dist/agent/types.d.ts +4 -2
  151. package/dist/agent/types.d.ts.map +1 -1
  152. package/dist/agent/types.js.map +1 -1
  153. package/dist/api/enterprise-routes.d.ts.map +1 -1
  154. package/dist/api/enterprise-routes.js +87 -10
  155. package/dist/api/enterprise-routes.js.map +1 -1
  156. package/dist/api/org-settings-merge.d.ts +12 -0
  157. package/dist/api/org-settings-merge.d.ts.map +1 -0
  158. package/dist/api/org-settings-merge.js +38 -0
  159. package/dist/api/org-settings-merge.js.map +1 -0
  160. package/dist/api/user-settings-merge.d.ts +16 -0
  161. package/dist/api/user-settings-merge.d.ts.map +1 -0
  162. package/dist/api/user-settings-merge.js +37 -0
  163. package/dist/api/user-settings-merge.js.map +1 -0
  164. package/dist/app-server/daemon-lifecycle-api.d.ts.map +1 -1
  165. package/dist/app-server/daemon-lifecycle-api.js +1 -3
  166. package/dist/app-server/daemon-lifecycle-api.js.map +1 -1
  167. package/dist/app-server/external-agent-import-api.d.ts.map +1 -1
  168. package/dist/app-server/external-agent-import-api.js +1 -3
  169. package/dist/app-server/external-agent-import-api.js.map +1 -1
  170. package/dist/app-server/network-governance-api.d.ts.map +1 -1
  171. package/dist/app-server/network-governance-api.js +1 -3
  172. package/dist/app-server/network-governance-api.js.map +1 -1
  173. package/dist/app-server/plugin-bundle-api.d.ts.map +1 -1
  174. package/dist/app-server/plugin-bundle-api.js +2 -3
  175. package/dist/app-server/plugin-bundle-api.js.map +1 -1
  176. package/dist/app-server/policy-control-api.d.ts.map +1 -1
  177. package/dist/app-server/policy-control-api.js +1 -3
  178. package/dist/app-server/policy-control-api.js.map +1 -1
  179. package/dist/app-server/protocol-modes-api.d.ts.map +1 -1
  180. package/dist/app-server/protocol-modes-api.js +1 -3
  181. package/dist/app-server/protocol-modes-api.js.map +1 -1
  182. package/dist/app-server/session-api.d.ts.map +1 -1
  183. package/dist/app-server/session-api.js +15 -2
  184. package/dist/app-server/session-api.js.map +1 -1
  185. package/dist/audit/logger.d.ts +5 -5
  186. package/dist/cli/args.d.ts +4 -0
  187. package/dist/cli/args.d.ts.map +1 -1
  188. package/dist/cli/args.js +33 -1
  189. package/dist/cli/args.js.map +1 -1
  190. package/dist/cli/commands/a2a.d.ts.map +1 -1
  191. package/dist/cli/commands/a2a.js +1 -3
  192. package/dist/cli/commands/a2a.js.map +1 -1
  193. package/dist/cli/commands/mission.d.ts +4 -0
  194. package/dist/cli/commands/mission.d.ts.map +1 -0
  195. package/dist/cli/commands/mission.js +196 -0
  196. package/dist/cli/commands/mission.js.map +1 -0
  197. package/dist/cli/commands/value.d.ts +10 -0
  198. package/dist/cli/commands/value.d.ts.map +1 -0
  199. package/dist/cli/commands/value.js +33 -0
  200. package/dist/cli/commands/value.js.map +1 -0
  201. package/dist/cli/direct-runtime-command.d.ts +1 -0
  202. package/dist/cli/direct-runtime-command.d.ts.map +1 -1
  203. package/dist/cli/direct-runtime-command.js +25 -3
  204. package/dist/cli/direct-runtime-command.js.map +1 -1
  205. package/dist/cli/headless-protocol.d.ts.map +1 -1
  206. package/dist/cli/headless-protocol.js +1 -3
  207. package/dist/cli/headless-protocol.js.map +1 -1
  208. package/dist/cli/headless.d.ts +3 -19
  209. package/dist/cli/headless.d.ts.map +1 -1
  210. package/dist/cli/headless.js +8 -619
  211. package/dist/cli/headless.js.map +1 -1
  212. package/dist/cli/help.d.ts.map +1 -1
  213. package/dist/cli/help.js +13 -0
  214. package/dist/cli/help.js.map +1 -1
  215. package/dist/cli/native-tui-launcher.d.ts +126 -0
  216. package/dist/cli/native-tui-launcher.d.ts.map +1 -0
  217. package/dist/cli/native-tui-launcher.js +425 -0
  218. package/dist/cli/native-tui-launcher.js.map +1 -0
  219. package/dist/cli/rpc-mode.d.ts +3 -27
  220. package/dist/cli/rpc-mode.d.ts.map +1 -1
  221. package/dist/cli/rpc-mode.js +8 -177
  222. package/dist/cli/rpc-mode.js.map +1 -1
  223. package/dist/cli/session.d.ts +11 -19
  224. package/dist/cli/session.d.ts.map +1 -1
  225. package/dist/cli/session.js +6 -64
  226. package/dist/cli/session.js.map +1 -1
  227. package/dist/cli/system-prompt.d.ts.map +1 -1
  228. package/dist/cli/system-prompt.js +38 -7
  229. package/dist/cli/system-prompt.js.map +1 -1
  230. package/dist/cli-command-runtime.d.ts.map +1 -1
  231. package/dist/cli-command-runtime.js +26 -24
  232. package/dist/cli-command-runtime.js.map +1 -1
  233. package/dist/cli-runtime.js +41729 -121859
  234. package/dist/codex/app-server-client.d.ts.map +1 -1
  235. package/dist/codex/app-server-client.js +1 -3
  236. package/dist/codex/app-server-client.js.map +1 -1
  237. package/dist/codex/compatibility.d.ts.map +1 -1
  238. package/dist/codex/compatibility.js +1 -3
  239. package/dist/codex/compatibility.js.map +1 -1
  240. package/dist/codex/subagent-dispatch-table.d.ts +8 -0
  241. package/dist/codex/subagent-dispatch-table.d.ts.map +1 -1
  242. package/dist/codex/subagent-dispatch-table.js +23 -0
  243. package/dist/codex/subagent-dispatch-table.js.map +1 -1
  244. package/dist/config/env-vars.d.ts +12 -0
  245. package/dist/config/env-vars.d.ts.map +1 -1
  246. package/dist/config/env-vars.js +12 -0
  247. package/dist/config/env-vars.js.map +1 -1
  248. package/dist/config/ui-state.d.ts +32 -0
  249. package/dist/config/ui-state.d.ts.map +1 -0
  250. package/dist/config/ui-state.js +88 -0
  251. package/dist/config/ui-state.js.map +1 -0
  252. package/dist/context/manifest.d.ts.map +1 -1
  253. package/dist/context/manifest.js +1 -3
  254. package/dist/context/manifest.js.map +1 -1
  255. package/dist/context/repo-map.d.ts.map +1 -1
  256. package/dist/context/repo-map.js +1 -7
  257. package/dist/context/repo-map.js.map +1 -1
  258. package/dist/context/token-optimizer.d.ts.map +1 -1
  259. package/dist/context/token-optimizer.js +1 -8
  260. package/dist/context/token-optimizer.js.map +1 -1
  261. package/dist/conversation/render-model.d.ts +0 -36
  262. package/dist/conversation/render-model.d.ts.map +1 -1
  263. package/dist/conversation/render-model.js +1 -3
  264. package/dist/conversation/render-model.js.map +1 -1
  265. package/dist/customer-value/ambient-learning.d.ts +75 -0
  266. package/dist/customer-value/ambient-learning.d.ts.map +1 -0
  267. package/dist/customer-value/ambient-learning.js +472 -0
  268. package/dist/customer-value/ambient-learning.js.map +1 -0
  269. package/dist/customer-value/internal-helpers.d.ts +13 -0
  270. package/dist/customer-value/internal-helpers.d.ts.map +1 -0
  271. package/dist/customer-value/internal-helpers.js +70 -0
  272. package/dist/customer-value/internal-helpers.js.map +1 -0
  273. package/dist/customer-value/report.d.ts +282 -0
  274. package/dist/customer-value/report.d.ts.map +1 -0
  275. package/dist/customer-value/report.js +2085 -0
  276. package/dist/customer-value/report.js.map +1 -0
  277. package/dist/db/schema.d.ts +7 -3
  278. package/dist/db/schema.d.ts.map +1 -1
  279. package/dist/db/schema.js.map +1 -1
  280. package/dist/evalops/agent-bootstrap.d.ts.map +1 -1
  281. package/dist/evalops/agent-bootstrap.js +1 -3
  282. package/dist/evalops/agent-bootstrap.js.map +1 -1
  283. package/dist/evalops/agent-mcp-metadata.d.ts.map +1 -1
  284. package/dist/evalops/agent-mcp-metadata.js +1 -3
  285. package/dist/evalops/agent-mcp-metadata.js.map +1 -1
  286. package/dist/hooks/notification-hooks.d.ts +1 -1
  287. package/dist/hooks/notification-hooks.d.ts.map +1 -1
  288. package/dist/hooks/notification-hooks.js.map +1 -1
  289. package/dist/hooks/tui-surface.d.ts +35 -0
  290. package/dist/hooks/tui-surface.d.ts.map +1 -0
  291. package/dist/hooks/tui-surface.js +11 -0
  292. package/dist/hooks/tui-surface.js.map +1 -0
  293. package/dist/hooks/types.d.ts +2 -1
  294. package/dist/hooks/types.d.ts.map +1 -1
  295. package/dist/hooks/types.js.map +1 -1
  296. package/dist/hooks/typescript-loader.d.ts.map +1 -1
  297. package/dist/hooks/typescript-loader.js.map +1 -1
  298. package/dist/hooks/ui-context.d.ts.map +1 -1
  299. package/dist/hooks/ui-context.js.map +1 -1
  300. package/dist/index.d.ts +1 -0
  301. package/dist/index.d.ts.map +1 -1
  302. package/dist/index.js +1 -0
  303. package/dist/index.js.map +1 -1
  304. package/dist/installers/maestro-review-workflow.d.ts +38 -0
  305. package/dist/installers/maestro-review-workflow.d.ts.map +1 -0
  306. package/dist/installers/maestro-review-workflow.js +163 -0
  307. package/dist/installers/maestro-review-workflow.js.map +1 -0
  308. package/dist/load-env.d.ts.map +1 -1
  309. package/dist/load-env.js +2 -1
  310. package/dist/load-env.js.map +1 -1
  311. package/dist/main.d.ts.map +1 -1
  312. package/dist/main.js +201 -840
  313. package/dist/main.js.map +1 -1
  314. package/dist/mcp/config.d.ts.map +1 -1
  315. package/dist/mcp/config.js +1 -3
  316. package/dist/mcp/config.js.map +1 -1
  317. package/dist/mcp/elicitation.d.ts.map +1 -1
  318. package/dist/mcp/elicitation.js +1 -3
  319. package/dist/mcp/elicitation.js.map +1 -1
  320. package/dist/mcp/official-registry.d.ts.map +1 -1
  321. package/dist/mcp/official-registry.js +1 -3
  322. package/dist/mcp/official-registry.js.map +1 -1
  323. package/dist/mcp/workspace-trust.d.ts.map +1 -1
  324. package/dist/mcp/workspace-trust.js +1 -3
  325. package/dist/mcp/workspace-trust.js.map +1 -1
  326. package/dist/memory/service-client.d.ts.map +1 -1
  327. package/dist/memory/service-client.js +1 -3
  328. package/dist/memory/service-client.js.map +1 -1
  329. package/dist/models/config-loader.d.ts +5 -5
  330. package/dist/models/config-loader.d.ts.map +1 -1
  331. package/dist/models/config-loader.js +1 -3
  332. package/dist/models/config-loader.js.map +1 -1
  333. package/dist/node_modules/@evalops/contracts/dist/index.d.ts +46 -0
  334. package/dist/node_modules/@evalops/contracts/dist/index.d.ts.map +1 -1
  335. package/dist/node_modules/@evalops/contracts/dist/index.js +3 -0
  336. package/dist/node_modules/@evalops/contracts/dist/index.js.map +1 -1
  337. package/dist/node_modules/@evalops/contracts/dist/maestro-app-server.d.ts +284 -0
  338. package/dist/node_modules/@evalops/contracts/dist/maestro-app-server.d.ts.map +1 -1
  339. package/dist/node_modules/@evalops/contracts/dist/maestro-app-server.js +41 -0
  340. package/dist/node_modules/@evalops/contracts/dist/maestro-app-server.js.map +1 -1
  341. package/dist/node_modules/@evalops/contracts/dist/maestro-settings.d.ts +61 -0
  342. package/dist/node_modules/@evalops/contracts/dist/maestro-settings.d.ts.map +1 -0
  343. package/dist/node_modules/@evalops/contracts/dist/maestro-settings.js +183 -0
  344. package/dist/node_modules/@evalops/contracts/dist/maestro-settings.js.map +1 -0
  345. package/dist/node_modules/@evalops/contracts/dist/schemas.d.ts +986 -0
  346. package/dist/node_modules/@evalops/contracts/dist/schemas.d.ts.map +1 -1
  347. package/dist/node_modules/@evalops/contracts/dist/schemas.js +49 -0
  348. package/dist/node_modules/@evalops/contracts/dist/schemas.js.map +1 -1
  349. package/dist/node_modules/@evalops/contracts/dist/token-estimation.d.ts +56 -0
  350. package/dist/node_modules/@evalops/contracts/dist/token-estimation.d.ts.map +1 -0
  351. package/dist/node_modules/@evalops/contracts/dist/token-estimation.js +86 -0
  352. package/dist/node_modules/@evalops/contracts/dist/token-estimation.js.map +1 -0
  353. package/dist/node_modules/@evalops/contracts/package.json +1 -1
  354. package/dist/oauth/connectors.d.ts.map +1 -1
  355. package/dist/oauth/connectors.js +1 -3
  356. package/dist/oauth/connectors.js.map +1 -1
  357. package/dist/oauth/evalops.d.ts.map +1 -1
  358. package/dist/oauth/evalops.js +1 -3
  359. package/dist/oauth/evalops.js.map +1 -1
  360. package/dist/packages/discovery.d.ts.map +1 -1
  361. package/dist/packages/discovery.js +1 -0
  362. package/dist/packages/discovery.js.map +1 -1
  363. package/dist/packages/inspection.d.ts.map +1 -1
  364. package/dist/packages/inspection.js +7 -1
  365. package/dist/packages/inspection.js.map +1 -1
  366. package/dist/packages/loader.d.ts.map +1 -1
  367. package/dist/packages/loader.js +8 -1
  368. package/dist/packages/loader.js.map +1 -1
  369. package/dist/packages/runtime.d.ts +1 -0
  370. package/dist/packages/runtime.d.ts.map +1 -1
  371. package/dist/packages/runtime.js +9 -1
  372. package/dist/packages/runtime.js.map +1 -1
  373. package/dist/packages/types.d.ts +6 -0
  374. package/dist/packages/types.d.ts.map +1 -1
  375. package/dist/packages/types.js.map +1 -1
  376. package/dist/platform/a2a-client.d.ts.map +1 -1
  377. package/dist/platform/a2a-client.js +1 -3
  378. package/dist/platform/a2a-client.js.map +1 -1
  379. package/dist/platform/a2a-cockpit.d.ts +1 -0
  380. package/dist/platform/a2a-cockpit.d.ts.map +1 -1
  381. package/dist/platform/a2a-cockpit.js +42 -11
  382. package/dist/platform/a2a-cockpit.js.map +1 -1
  383. package/dist/platform/a2a-completion-audit.d.ts +1 -1
  384. package/dist/platform/a2a-completion-audit.d.ts.map +1 -1
  385. package/dist/platform/a2a-completion-audit.js +7 -11
  386. package/dist/platform/a2a-completion-audit.js.map +1 -1
  387. package/dist/platform/a2a-maestro-peer.js +16 -0
  388. package/dist/platform/a2a-maestro-peer.js.map +1 -1
  389. package/dist/platform/a2a-peer-pairing.d.ts.map +1 -1
  390. package/dist/platform/a2a-peer-pairing.js +1 -3
  391. package/dist/platform/a2a-peer-pairing.js.map +1 -1
  392. package/dist/platform/a2a-peer-registry.d.ts.map +1 -1
  393. package/dist/platform/a2a-peer-registry.js +1 -3
  394. package/dist/platform/a2a-peer-registry.js.map +1 -1
  395. package/dist/platform/a2a-task-ledger.d.ts +20 -0
  396. package/dist/platform/a2a-task-ledger.d.ts.map +1 -1
  397. package/dist/platform/a2a-task-ledger.js +207 -11
  398. package/dist/platform/a2a-task-ledger.js.map +1 -1
  399. package/dist/platform/a2a-work-graph.d.ts.map +1 -1
  400. package/dist/platform/a2a-work-graph.js +1 -3
  401. package/dist/platform/a2a-work-graph.js.map +1 -1
  402. package/dist/platform/operating-layer.d.ts.map +1 -1
  403. package/dist/platform/operating-layer.js +14 -8
  404. package/dist/platform/operating-layer.js.map +1 -1
  405. package/dist/platform/tool-execution-client.d.ts.map +1 -1
  406. package/dist/platform/tool-execution-client.js +19 -2
  407. package/dist/platform/tool-execution-client.js.map +1 -1
  408. package/dist/providers/auth.d.ts.map +1 -1
  409. package/dist/providers/auth.js +1 -3
  410. package/dist/providers/auth.js.map +1 -1
  411. package/dist/runtime/agent-runtime.d.ts +22 -6
  412. package/dist/runtime/agent-runtime.d.ts.map +1 -1
  413. package/dist/runtime/agent-runtime.js +1 -1
  414. package/dist/runtime/agent-runtime.js.map +1 -1
  415. package/dist/runtime/env.d.ts +10 -1
  416. package/dist/runtime/env.d.ts.map +1 -1
  417. package/dist/runtime/env.js +64 -1
  418. package/dist/runtime/env.js.map +1 -1
  419. package/dist/runtime/prompt-queue.d.ts.map +1 -0
  420. package/dist/runtime/prompt-queue.js.map +1 -0
  421. package/dist/safety/policy.d.ts.map +1 -1
  422. package/dist/safety/policy.js +1 -4
  423. package/dist/safety/policy.js.map +1 -1
  424. package/dist/sandbox/docker-sandbox.d.ts.map +1 -1
  425. package/dist/sandbox/docker-sandbox.js +6 -1
  426. package/dist/sandbox/docker-sandbox.js.map +1 -1
  427. package/dist/server/handlers/chat-ws.d.ts +2 -1
  428. package/dist/server/handlers/chat-ws.d.ts.map +1 -1
  429. package/dist/server/handlers/chat-ws.js +150 -5
  430. package/dist/server/handlers/chat-ws.js.map +1 -1
  431. package/dist/server/handlers/chat.d.ts.map +1 -1
  432. package/dist/server/handlers/chat.js +78 -5
  433. package/dist/server/handlers/chat.js.map +1 -1
  434. package/dist/server/handlers/hosted-runner-drain.d.ts.map +1 -1
  435. package/dist/server/handlers/hosted-runner-drain.js +1 -3
  436. package/dist/server/handlers/hosted-runner-drain.js.map +1 -1
  437. package/dist/server/handlers/package.d.ts.map +1 -1
  438. package/dist/server/handlers/package.js +1 -0
  439. package/dist/server/handlers/package.js.map +1 -1
  440. package/dist/server/handlers/platform-a2a-push.d.ts.map +1 -1
  441. package/dist/server/handlers/platform-a2a-push.js +53 -2
  442. package/dist/server/handlers/platform-a2a-push.js.map +1 -1
  443. package/dist/server/handlers/queue.js +1 -1
  444. package/dist/server/handlers/queue.js.map +1 -1
  445. package/dist/server/handlers/runtime-app-server-ws.d.ts.map +1 -1
  446. package/dist/server/handlers/runtime-app-server-ws.js +1 -3
  447. package/dist/server/handlers/runtime-app-server-ws.js.map +1 -1
  448. package/dist/server/handlers/ui.js +1 -1
  449. package/dist/server/handlers/ui.js.map +1 -1
  450. package/dist/server/handlers/zen.js +1 -1
  451. package/dist/server/handlers/zen.js.map +1 -1
  452. package/dist/server/headless-runtime-service.d.ts +16 -0
  453. package/dist/server/headless-runtime-service.d.ts.map +1 -1
  454. package/dist/server/headless-runtime-service.js +232 -206
  455. package/dist/server/headless-runtime-service.js.map +1 -1
  456. package/dist/server/hosted-agent-runtime-progress.d.ts.map +1 -1
  457. package/dist/server/hosted-agent-runtime-progress.js +12 -3
  458. package/dist/server/hosted-agent-runtime-progress.js.map +1 -1
  459. package/dist/server/hosted-session-manager.d.ts +3 -0
  460. package/dist/server/hosted-session-manager.d.ts.map +1 -1
  461. package/dist/server/hosted-session-manager.js +26 -0
  462. package/dist/server/hosted-session-manager.js.map +1 -1
  463. package/dist/server/model-selection.d.ts +1 -0
  464. package/dist/server/model-selection.d.ts.map +1 -1
  465. package/dist/server/model-selection.js +4 -0
  466. package/dist/server/model-selection.js.map +1 -1
  467. package/dist/server/pending-request-payload.d.ts.map +1 -1
  468. package/dist/server/pending-request-payload.js +1 -3
  469. package/dist/server/pending-request-payload.js.map +1 -1
  470. package/dist/server/route-auth.d.ts.map +1 -1
  471. package/dist/server/route-auth.js +2 -0
  472. package/dist/server/route-auth.js.map +1 -1
  473. package/dist/server/session-serialization.d.ts.map +1 -1
  474. package/dist/server/session-serialization.js +4 -3
  475. package/dist/server/session-serialization.js.map +1 -1
  476. package/dist/server/session-timeline.d.ts.map +1 -1
  477. package/dist/server/session-timeline.js +1 -1
  478. package/dist/server/session-timeline.js.map +1 -1
  479. package/dist/server/sse-session.d.ts +2 -0
  480. package/dist/server/sse-session.d.ts.map +1 -1
  481. package/dist/server/sse-session.js +3 -0
  482. package/dist/server/sse-session.js.map +1 -1
  483. package/dist/server/stores/ui-store.d.ts +1 -1
  484. package/dist/server/stores/ui-store.d.ts.map +1 -1
  485. package/dist/server/stores/ui-store.js.map +1 -1
  486. package/dist/server/utils/token-estimator.d.ts +2 -2
  487. package/dist/server/utils/token-estimator.d.ts.map +1 -1
  488. package/dist/server/utils/token-estimator.js +2 -12
  489. package/dist/server/utils/token-estimator.js.map +1 -1
  490. package/dist/server/validation.d.ts +54 -0
  491. package/dist/server/validation.d.ts.map +1 -1
  492. package/dist/services/compliance/normalize.d.ts.map +1 -1
  493. package/dist/services/compliance/normalize.js +1 -3
  494. package/dist/services/compliance/normalize.js.map +1 -1
  495. package/dist/services/image-providers/cost.d.ts +70 -0
  496. package/dist/services/image-providers/cost.d.ts.map +1 -0
  497. package/dist/services/image-providers/cost.js +164 -0
  498. package/dist/services/image-providers/cost.js.map +1 -0
  499. package/dist/services/image-providers/flux.d.ts +40 -0
  500. package/dist/services/image-providers/flux.d.ts.map +1 -0
  501. package/dist/services/image-providers/flux.js +99 -0
  502. package/dist/services/image-providers/flux.js.map +1 -0
  503. package/dist/services/image-providers/index.d.ts +24 -0
  504. package/dist/services/image-providers/index.d.ts.map +1 -0
  505. package/dist/services/image-providers/index.js +27 -0
  506. package/dist/services/image-providers/index.js.map +1 -0
  507. package/dist/services/image-providers/masks.d.ts +51 -0
  508. package/dist/services/image-providers/masks.d.ts.map +1 -0
  509. package/dist/services/image-providers/masks.js +132 -0
  510. package/dist/services/image-providers/masks.js.map +1 -0
  511. package/dist/services/image-providers/openai.d.ts +35 -0
  512. package/dist/services/image-providers/openai.d.ts.map +1 -0
  513. package/dist/services/image-providers/openai.js +93 -0
  514. package/dist/services/image-providers/openai.js.map +1 -0
  515. package/dist/services/image-providers/types.d.ts +61 -0
  516. package/dist/services/image-providers/types.d.ts.map +1 -0
  517. package/dist/services/image-providers/types.js +17 -0
  518. package/dist/services/image-providers/types.js.map +1 -0
  519. package/dist/services/intelligent-router/index.d.ts +1 -0
  520. package/dist/services/intelligent-router/index.d.ts.map +1 -1
  521. package/dist/services/intelligent-router/index.js +1 -0
  522. package/dist/services/intelligent-router/index.js.map +1 -1
  523. package/dist/services/intelligent-router/normalize.d.ts +1 -0
  524. package/dist/services/intelligent-router/normalize.d.ts.map +1 -1
  525. package/dist/services/intelligent-router/normalize.js +18 -3
  526. package/dist/services/intelligent-router/normalize.js.map +1 -1
  527. package/dist/services/intelligent-router/outcome.d.ts +19 -0
  528. package/dist/services/intelligent-router/outcome.d.ts.map +1 -0
  529. package/dist/services/intelligent-router/outcome.js +51 -0
  530. package/dist/services/intelligent-router/outcome.js.map +1 -0
  531. package/dist/services/intelligent-router/recorder.d.ts +2 -0
  532. package/dist/services/intelligent-router/recorder.d.ts.map +1 -1
  533. package/dist/services/intelligent-router/recorder.js +72 -1
  534. package/dist/services/intelligent-router/recorder.js.map +1 -1
  535. package/dist/services/intelligent-router/service.d.ts +1 -0
  536. package/dist/services/intelligent-router/service.d.ts.map +1 -1
  537. package/dist/services/intelligent-router/service.js +60 -11
  538. package/dist/services/intelligent-router/service.js.map +1 -1
  539. package/dist/services/intelligent-router/types.d.ts +18 -0
  540. package/dist/services/intelligent-router/types.d.ts.map +1 -1
  541. package/dist/services/intelligent-router/types.js.map +1 -1
  542. package/dist/services/revenue-attribution/normalize.d.ts.map +1 -1
  543. package/dist/services/revenue-attribution/normalize.js +1 -3
  544. package/dist/services/revenue-attribution/normalize.js.map +1 -1
  545. package/dist/services/traces/normalize.d.ts.map +1 -1
  546. package/dist/services/traces/normalize.js +1 -3
  547. package/dist/services/traces/normalize.js.map +1 -1
  548. package/dist/services/workspace-config/middleware.d.ts +2 -0
  549. package/dist/services/workspace-config/middleware.d.ts.map +1 -1
  550. package/dist/services/workspace-config/middleware.js +25 -28
  551. package/dist/services/workspace-config/middleware.js.map +1 -1
  552. package/dist/services/workspace-config/normalize.d.ts.map +1 -1
  553. package/dist/services/workspace-config/normalize.js +1 -3
  554. package/dist/services/workspace-config/normalize.js.map +1 -1
  555. package/dist/session/agent-lineage-projection.d.ts +30 -0
  556. package/dist/session/agent-lineage-projection.d.ts.map +1 -0
  557. package/dist/session/agent-lineage-projection.js +109 -0
  558. package/dist/session/agent-lineage-projection.js.map +1 -0
  559. package/dist/session/manager.d.ts +3 -0
  560. package/dist/session/manager.d.ts.map +1 -1
  561. package/dist/session/manager.js +24 -0
  562. package/dist/session/manager.js.map +1 -1
  563. package/dist/session/session-graph-projection.d.ts +11 -0
  564. package/dist/session/session-graph-projection.d.ts.map +1 -1
  565. package/dist/session/session-graph-projection.js +28 -0
  566. package/dist/session/session-graph-projection.js.map +1 -1
  567. package/dist/session/types.d.ts +2 -0
  568. package/dist/session/types.d.ts.map +1 -1
  569. package/dist/session/types.js.map +1 -1
  570. package/dist/telemetry/agent-workforce-native-event.d.ts.map +1 -1
  571. package/dist/telemetry/agent-workforce-native-event.js +1 -3
  572. package/dist/telemetry/agent-workforce-native-event.js.map +1 -1
  573. package/dist/telemetry/maestro-event-bus.d.ts +1 -1
  574. package/dist/telemetry/maestro-event-bus.d.ts.map +1 -1
  575. package/dist/telemetry/maestro-event-bus.js +42 -81
  576. package/dist/telemetry/maestro-event-bus.js.map +1 -1
  577. package/dist/telemetry/maestro-platform-replay-fixture.d.ts.map +1 -1
  578. package/dist/telemetry/maestro-platform-replay-fixture.js +1 -3
  579. package/dist/telemetry/maestro-platform-replay-fixture.js.map +1 -1
  580. package/dist/telemetry/maestro-publisher-conformance-fixture.js.map +1 -1
  581. package/dist/telemetry/oracle-policy.d.ts +6 -0
  582. package/dist/telemetry/oracle-policy.d.ts.map +1 -0
  583. package/dist/telemetry/oracle-policy.js +17 -0
  584. package/dist/telemetry/oracle-policy.js.map +1 -0
  585. package/dist/telemetry/wide-events.d.ts +1 -1
  586. package/dist/telemetry/wide-events.d.ts.map +1 -1
  587. package/dist/telemetry/wide-events.js.map +1 -1
  588. package/dist/telemetry.d.ts.map +1 -1
  589. package/dist/telemetry.js +54 -43
  590. package/dist/telemetry.js.map +1 -1
  591. package/dist/theme/theme-loader.d.ts.map +1 -1
  592. package/dist/theme/theme-loader.js +1 -3
  593. package/dist/theme/theme-loader.js.map +1 -1
  594. package/dist/theme/theme.d.ts +2 -8
  595. package/dist/theme/theme.d.ts.map +1 -1
  596. package/dist/theme/theme.js +7 -0
  597. package/dist/theme/theme.js.map +1 -1
  598. package/dist/theme/tui-theme-helpers.d.ts +2 -1
  599. package/dist/theme/tui-theme-helpers.d.ts.map +1 -1
  600. package/dist/theme/tui-theme-helpers.js.map +1 -1
  601. package/dist/theme/tui-theme-types.d.ts +39 -0
  602. package/dist/theme/tui-theme-types.d.ts.map +1 -0
  603. package/dist/theme/tui-theme-types.js +10 -0
  604. package/dist/theme/tui-theme-types.js.map +1 -0
  605. package/dist/tools/apply-patch.d.ts.map +1 -1
  606. package/dist/tools/apply-patch.js +76 -8
  607. package/dist/tools/apply-patch.js.map +1 -1
  608. package/dist/tools/diff-preview.d.ts.map +1 -1
  609. package/dist/tools/diff-preview.js +10 -1
  610. package/dist/tools/diff-preview.js.map +1 -1
  611. package/dist/tools/edit.d.ts.map +1 -1
  612. package/dist/tools/edit.js +17 -0
  613. package/dist/tools/edit.js.map +1 -1
  614. package/dist/tools/index.d.ts +199 -160
  615. package/dist/tools/index.d.ts.map +1 -1
  616. package/dist/tools/index.js +4 -0
  617. package/dist/tools/index.js.map +1 -1
  618. package/dist/tools/lazy-registry.d.ts.map +1 -1
  619. package/dist/tools/lazy-registry.js +1 -0
  620. package/dist/tools/lazy-registry.js.map +1 -1
  621. package/dist/tools/oracle.d.ts +9 -0
  622. package/dist/tools/oracle.d.ts.map +1 -1
  623. package/dist/tools/oracle.js +26 -24
  624. package/dist/tools/oracle.js.map +1 -1
  625. package/dist/tools/painter.d.ts +73 -0
  626. package/dist/tools/painter.d.ts.map +1 -0
  627. package/dist/tools/painter.js +283 -0
  628. package/dist/tools/painter.js.map +1 -0
  629. package/dist/tools/typebox-tool.d.ts.map +1 -1
  630. package/dist/tools/typebox-tool.js +1 -1
  631. package/dist/tools/typebox-tool.js.map +1 -1
  632. package/dist/tools/write.d.ts.map +1 -1
  633. package/dist/tools/write.js +9 -0
  634. package/dist/tools/write.js.map +1 -1
  635. package/dist/undo/tracker.d.ts +5 -0
  636. package/dist/undo/tracker.d.ts.map +1 -1
  637. package/dist/undo/tracker.js +13 -0
  638. package/dist/undo/tracker.js.map +1 -1
  639. package/dist/utils/fs.d.ts +1 -1
  640. package/dist/utils/fs.d.ts.map +1 -1
  641. package/dist/utils/fs.js +29 -2
  642. package/dist/utils/fs.js.map +1 -1
  643. package/dist/utils/git-stash.d.ts.map +1 -1
  644. package/dist/utils/git-stash.js +15 -8
  645. package/dist/utils/git-stash.js.map +1 -1
  646. package/dist/utils/json.d.ts +11 -0
  647. package/dist/utils/json.d.ts.map +1 -1
  648. package/dist/utils/json.js +9 -0
  649. package/dist/utils/json.js.map +1 -1
  650. package/dist/utils/shell-env.d.ts.map +1 -1
  651. package/dist/utils/shell-env.js +2 -0
  652. package/dist/utils/shell-env.js.map +1 -1
  653. package/dist/utils/terminal-image.d.ts +52 -0
  654. package/dist/utils/terminal-image.d.ts.map +1 -0
  655. package/dist/utils/terminal-image.js +95 -0
  656. package/dist/utils/terminal-image.js.map +1 -0
  657. package/dist/utils/terminal-text.d.ts +11 -0
  658. package/dist/utils/terminal-text.d.ts.map +1 -0
  659. package/dist/utils/terminal-text.js +21 -0
  660. package/dist/utils/terminal-text.js.map +1 -0
  661. package/dist/utils/url-extractor-git.d.ts +26 -0
  662. package/dist/utils/url-extractor-git.d.ts.map +1 -0
  663. package/dist/utils/url-extractor-git.js +259 -0
  664. package/dist/utils/url-extractor-git.js.map +1 -0
  665. package/dist/utils/url-extractor.d.ts.map +1 -1
  666. package/dist/utils/url-extractor.js +23 -251
  667. package/dist/utils/url-extractor.js.map +1 -1
  668. package/dist/version.json +2 -2
  669. package/dist/web-server.d.ts.map +1 -1
  670. package/dist/web-server.js +24 -2
  671. package/dist/web-server.js.map +1 -1
  672. package/package.json +312 -306
  673. package/skills/incident-triage/SKILL.md +20 -1
  674. package/skills/install-code-review/SKILL.md +69 -0
  675. package/skills/security-review/SKILL.md +68 -0
  676. package/skills/security-review/reference/rubric.md +85 -0
  677. package/dist/cli/commands/agents.d.ts +0 -20
  678. package/dist/cli/commands/agents.d.ts.map +0 -1
  679. package/dist/cli/commands/agents.js +0 -280
  680. package/dist/cli/commands/agents.js.map +0 -1
  681. package/dist/cli/commands/anthropic.d.ts +0 -2
  682. package/dist/cli/commands/anthropic.d.ts.map +0 -1
  683. package/dist/cli/commands/anthropic.js +0 -6
  684. package/dist/cli/commands/anthropic.js.map +0 -1
  685. package/dist/cli/commands/cost.d.ts +0 -13
  686. package/dist/cli/commands/cost.d.ts.map +0 -1
  687. package/dist/cli/commands/cost.js +0 -143
  688. package/dist/cli/commands/cost.js.map +0 -1
  689. package/dist/cli/commands/exec-constants.d.ts +0 -3
  690. package/dist/cli/commands/exec-constants.d.ts.map +0 -1
  691. package/dist/cli/commands/exec-constants.js +0 -3
  692. package/dist/cli/commands/exec-constants.js.map +0 -1
  693. package/dist/cli/commands/exec.d.ts +0 -19
  694. package/dist/cli/commands/exec.d.ts.map +0 -1
  695. package/dist/cli/commands/exec.js +0 -207
  696. package/dist/cli/commands/exec.js.map +0 -1
  697. package/dist/cli/commands/hooks.d.ts +0 -2
  698. package/dist/cli/commands/hooks.d.ts.map +0 -1
  699. package/dist/cli/commands/hooks.js +0 -25
  700. package/dist/cli/commands/hooks.js.map +0 -1
  701. package/dist/cli/commands/hosted-runner.d.ts +0 -25
  702. package/dist/cli/commands/hosted-runner.d.ts.map +0 -1
  703. package/dist/cli/commands/hosted-runner.js +0 -278
  704. package/dist/cli/commands/hosted-runner.js.map +0 -1
  705. package/dist/cli/commands/memory.d.ts +0 -2
  706. package/dist/cli/commands/memory.d.ts.map +0 -1
  707. package/dist/cli/commands/memory.js +0 -208
  708. package/dist/cli/commands/memory.js.map +0 -1
  709. package/dist/cli/commands/models.d.ts +0 -3
  710. package/dist/cli/commands/models.d.ts.map +0 -1
  711. package/dist/cli/commands/models.js +0 -154
  712. package/dist/cli/commands/models.js.map +0 -1
  713. package/dist/cli/commands/modes.d.ts +0 -8
  714. package/dist/cli/commands/modes.d.ts.map +0 -1
  715. package/dist/cli/commands/modes.js +0 -151
  716. package/dist/cli/commands/modes.js.map +0 -1
  717. package/dist/cli/commands/openai.d.ts +0 -2
  718. package/dist/cli/commands/openai.d.ts.map +0 -1
  719. package/dist/cli/commands/openai.js +0 -116
  720. package/dist/cli/commands/openai.js.map +0 -1
  721. package/dist/cli/commands/session-transfer.d.ts +0 -5
  722. package/dist/cli/commands/session-transfer.d.ts.map +0 -1
  723. package/dist/cli/commands/session-transfer.js +0 -43
  724. package/dist/cli/commands/session-transfer.js.map +0 -1
  725. package/dist/cli/commands/sessions.d.ts +0 -8
  726. package/dist/cli/commands/sessions.d.ts.map +0 -1
  727. package/dist/cli/commands/sessions.js +0 -152
  728. package/dist/cli/commands/sessions.js.map +0 -1
  729. package/dist/cli/commands/skill.d.ts +0 -10
  730. package/dist/cli/commands/skill.d.ts.map +0 -1
  731. package/dist/cli/commands/skill.js +0 -303
  732. package/dist/cli/commands/skill.js.map +0 -1
  733. package/dist/cli/commands/stats.d.ts +0 -7
  734. package/dist/cli/commands/stats.d.ts.map +0 -1
  735. package/dist/cli/commands/stats.js +0 -167
  736. package/dist/cli/commands/stats.js.map +0 -1
  737. package/dist/cli/commands/status.d.ts +0 -2
  738. package/dist/cli/commands/status.d.ts.map +0 -1
  739. package/dist/cli/commands/status.js +0 -11
  740. package/dist/cli/commands/status.js.map +0 -1
  741. package/dist/cli/commands/update.d.ts +0 -12
  742. package/dist/cli/commands/update.d.ts.map +0 -1
  743. package/dist/cli/commands/update.js +0 -148
  744. package/dist/cli/commands/update.js.map +0 -1
  745. package/dist/cli-tui/about-view.d.ts +0 -48
  746. package/dist/cli-tui/about-view.d.ts.map +0 -1
  747. package/dist/cli-tui/about-view.js +0 -206
  748. package/dist/cli-tui/about-view.js.map +0 -1
  749. package/dist/cli-tui/agent-event-router.d.ts +0 -28
  750. package/dist/cli-tui/agent-event-router.d.ts.map +0 -1
  751. package/dist/cli-tui/agent-event-router.js +0 -126
  752. package/dist/cli-tui/agent-event-router.js.map +0 -1
  753. package/dist/cli-tui/approval/approval-controller.d.ts +0 -28
  754. package/dist/cli-tui/approval/approval-controller.d.ts.map +0 -1
  755. package/dist/cli-tui/approval/approval-controller.js +0 -99
  756. package/dist/cli-tui/approval/approval-controller.js.map +0 -1
  757. package/dist/cli-tui/approval/approval-modal.d.ts +0 -26
  758. package/dist/cli-tui/approval/approval-modal.d.ts.map +0 -1
  759. package/dist/cli-tui/approval/approval-modal.js +0 -143
  760. package/dist/cli-tui/approval/approval-modal.js.map +0 -1
  761. package/dist/cli-tui/assistant-message.d.ts +0 -41
  762. package/dist/cli-tui/assistant-message.d.ts.map +0 -1
  763. package/dist/cli-tui/assistant-message.js +0 -236
  764. package/dist/cli-tui/assistant-message.js.map +0 -1
  765. package/dist/cli-tui/auth-state.d.ts +0 -7
  766. package/dist/cli-tui/auth-state.d.ts.map +0 -1
  767. package/dist/cli-tui/auth-state.js +0 -46
  768. package/dist/cli-tui/auth-state.js.map +0 -1
  769. package/dist/cli-tui/background/background-tasks-controller.d.ts +0 -31
  770. package/dist/cli-tui/background/background-tasks-controller.d.ts.map +0 -1
  771. package/dist/cli-tui/background/background-tasks-controller.js +0 -84
  772. package/dist/cli-tui/background/background-tasks-controller.js.map +0 -1
  773. package/dist/cli-tui/base-view.d.ts +0 -111
  774. package/dist/cli-tui/base-view.d.ts.map +0 -1
  775. package/dist/cli-tui/base-view.js +0 -145
  776. package/dist/cli-tui/base-view.js.map +0 -1
  777. package/dist/cli-tui/bash/background-launcher.d.ts +0 -14
  778. package/dist/cli-tui/bash/background-launcher.d.ts.map +0 -1
  779. package/dist/cli-tui/bash/background-launcher.js +0 -50
  780. package/dist/cli-tui/bash/background-launcher.js.map +0 -1
  781. package/dist/cli-tui/bash/bash-autocomplete.d.ts +0 -40
  782. package/dist/cli-tui/bash/bash-autocomplete.d.ts.map +0 -1
  783. package/dist/cli-tui/bash/bash-autocomplete.js +0 -347
  784. package/dist/cli-tui/bash/bash-autocomplete.js.map +0 -1
  785. package/dist/cli-tui/bash/bash-history.d.ts +0 -21
  786. package/dist/cli-tui/bash/bash-history.d.ts.map +0 -1
  787. package/dist/cli-tui/bash/bash-history.js +0 -72
  788. package/dist/cli-tui/bash/bash-history.js.map +0 -1
  789. package/dist/cli-tui/bash/bash-syntax.d.ts +0 -5
  790. package/dist/cli-tui/bash/bash-syntax.d.ts.map +0 -1
  791. package/dist/cli-tui/bash/bash-syntax.js +0 -176
  792. package/dist/cli-tui/bash/bash-syntax.js.map +0 -1
  793. package/dist/cli-tui/bash/index.d.ts +0 -4
  794. package/dist/cli-tui/bash/index.d.ts.map +0 -1
  795. package/dist/cli-tui/bash/index.js +0 -4
  796. package/dist/cli-tui/bash/index.js.map +0 -1
  797. package/dist/cli-tui/bash-mode-view.d.ts +0 -86
  798. package/dist/cli-tui/bash-mode-view.d.ts.map +0 -1
  799. package/dist/cli-tui/bash-mode-view.js +0 -560
  800. package/dist/cli-tui/bash-mode-view.js.map +0 -1
  801. package/dist/cli-tui/bash-shell-block.d.ts +0 -50
  802. package/dist/cli-tui/bash-shell-block.d.ts.map +0 -1
  803. package/dist/cli-tui/bash-shell-block.js +0 -119
  804. package/dist/cli-tui/bash-shell-block.js.map +0 -1
  805. package/dist/cli-tui/changelog-view.d.ts +0 -13
  806. package/dist/cli-tui/changelog-view.d.ts.map +0 -1
  807. package/dist/cli-tui/changelog-view.js +0 -34
  808. package/dist/cli-tui/changelog-view.js.map +0 -1
  809. package/dist/cli-tui/clean-mode.d.ts +0 -13
  810. package/dist/cli-tui/clean-mode.d.ts.map +0 -1
  811. package/dist/cli-tui/clean-mode.js +0 -32
  812. package/dist/cli-tui/clean-mode.js.map +0 -1
  813. package/dist/cli-tui/client-tools/client-tool-controller.d.ts +0 -41
  814. package/dist/cli-tui/client-tools/client-tool-controller.d.ts.map +0 -1
  815. package/dist/cli-tui/client-tools/client-tool-controller.js +0 -862
  816. package/dist/cli-tui/client-tools/client-tool-controller.js.map +0 -1
  817. package/dist/cli-tui/client-tools/local-client-tool-service.d.ts +0 -33
  818. package/dist/cli-tui/client-tools/local-client-tool-service.d.ts.map +0 -1
  819. package/dist/cli-tui/client-tools/local-client-tool-service.js +0 -94
  820. package/dist/cli-tui/client-tools/local-client-tool-service.js.map +0 -1
  821. package/dist/cli-tui/commands/a2a-handlers.d.ts +0 -7
  822. package/dist/cli-tui/commands/a2a-handlers.d.ts.map +0 -1
  823. package/dist/cli-tui/commands/a2a-handlers.js +0 -215
  824. package/dist/cli-tui/commands/a2a-handlers.js.map +0 -1
  825. package/dist/cli-tui/commands/access-command.d.ts +0 -3
  826. package/dist/cli-tui/commands/access-command.d.ts.map +0 -1
  827. package/dist/cli-tui/commands/access-command.js +0 -89
  828. package/dist/cli-tui/commands/access-command.js.map +0 -1
  829. package/dist/cli-tui/commands/argument-parser.d.ts +0 -12
  830. package/dist/cli-tui/commands/argument-parser.d.ts.map +0 -1
  831. package/dist/cli-tui/commands/argument-parser.js +0 -135
  832. package/dist/cli-tui/commands/argument-parser.js.map +0 -1
  833. package/dist/cli-tui/commands/audit-command.d.ts +0 -5
  834. package/dist/cli-tui/commands/audit-command.d.ts.map +0 -1
  835. package/dist/cli-tui/commands/audit-command.js +0 -35
  836. package/dist/cli-tui/commands/audit-command.js.map +0 -1
  837. package/dist/cli-tui/commands/background-handlers.d.ts +0 -14
  838. package/dist/cli-tui/commands/background-handlers.d.ts.map +0 -1
  839. package/dist/cli-tui/commands/background-handlers.js +0 -115
  840. package/dist/cli-tui/commands/background-handlers.js.map +0 -1
  841. package/dist/cli-tui/commands/command-catalog.d.ts +0 -29
  842. package/dist/cli-tui/commands/command-catalog.d.ts.map +0 -1
  843. package/dist/cli-tui/commands/command-catalog.js +0 -666
  844. package/dist/cli-tui/commands/command-catalog.js.map +0 -1
  845. package/dist/cli-tui/commands/command-registry-adapter.d.ts +0 -12
  846. package/dist/cli-tui/commands/command-registry-adapter.d.ts.map +0 -1
  847. package/dist/cli-tui/commands/command-registry-adapter.js +0 -129
  848. package/dist/cli-tui/commands/command-registry-adapter.js.map +0 -1
  849. package/dist/cli-tui/commands/command-suite-catalog.d.ts +0 -14
  850. package/dist/cli-tui/commands/command-suite-catalog.d.ts.map +0 -1
  851. package/dist/cli-tui/commands/command-suite-catalog.js +0 -147
  852. package/dist/cli-tui/commands/command-suite-catalog.js.map +0 -1
  853. package/dist/cli-tui/commands/command-suite-handlers.d.ts +0 -111
  854. package/dist/cli-tui/commands/command-suite-handlers.d.ts.map +0 -1
  855. package/dist/cli-tui/commands/command-suite-handlers.js +0 -110
  856. package/dist/cli-tui/commands/command-suite-handlers.js.map +0 -1
  857. package/dist/cli-tui/commands/composer-handlers.d.ts +0 -8
  858. package/dist/cli-tui/commands/composer-handlers.d.ts.map +0 -1
  859. package/dist/cli-tui/commands/composer-handlers.js +0 -90
  860. package/dist/cli-tui/commands/composer-handlers.js.map +0 -1
  861. package/dist/cli-tui/commands/framework-handlers.d.ts +0 -18
  862. package/dist/cli-tui/commands/framework-handlers.d.ts.map +0 -1
  863. package/dist/cli-tui/commands/framework-handlers.js +0 -57
  864. package/dist/cli-tui/commands/framework-handlers.js.map +0 -1
  865. package/dist/cli-tui/commands/guardian-handlers.d.ts +0 -20
  866. package/dist/cli-tui/commands/guardian-handlers.d.ts.map +0 -1
  867. package/dist/cli-tui/commands/guardian-handlers.js +0 -48
  868. package/dist/cli-tui/commands/guardian-handlers.js.map +0 -1
  869. package/dist/cli-tui/commands/handlers/mode-handler.d.ts +0 -32
  870. package/dist/cli-tui/commands/handlers/mode-handler.d.ts.map +0 -1
  871. package/dist/cli-tui/commands/handlers/mode-handler.js +0 -153
  872. package/dist/cli-tui/commands/handlers/mode-handler.js.map +0 -1
  873. package/dist/cli-tui/commands/hotkeys-command.d.ts +0 -8
  874. package/dist/cli-tui/commands/hotkeys-command.d.ts.map +0 -1
  875. package/dist/cli-tui/commands/hotkeys-command.js +0 -61
  876. package/dist/cli-tui/commands/hotkeys-command.js.map +0 -1
  877. package/dist/cli-tui/commands/limits-command.d.ts +0 -3
  878. package/dist/cli-tui/commands/limits-command.d.ts.map +0 -1
  879. package/dist/cli-tui/commands/limits-command.js +0 -88
  880. package/dist/cli-tui/commands/limits-command.js.map +0 -1
  881. package/dist/cli-tui/commands/mcp-handlers.d.ts +0 -12
  882. package/dist/cli-tui/commands/mcp-handlers.d.ts.map +0 -1
  883. package/dist/cli-tui/commands/mcp-handlers.js +0 -1306
  884. package/dist/cli-tui/commands/mcp-handlers.js.map +0 -1
  885. package/dist/cli-tui/commands/memory-handlers.d.ts +0 -28
  886. package/dist/cli-tui/commands/memory-handlers.d.ts.map +0 -1
  887. package/dist/cli-tui/commands/memory-handlers.js +0 -414
  888. package/dist/cli-tui/commands/memory-handlers.js.map +0 -1
  889. package/dist/cli-tui/commands/otel-handlers.d.ts +0 -11
  890. package/dist/cli-tui/commands/otel-handlers.d.ts.map +0 -1
  891. package/dist/cli-tui/commands/otel-handlers.js +0 -20
  892. package/dist/cli-tui/commands/otel-handlers.js.map +0 -1
  893. package/dist/cli-tui/commands/package-handlers.d.ts +0 -30
  894. package/dist/cli-tui/commands/package-handlers.d.ts.map +0 -1
  895. package/dist/cli-tui/commands/package-handlers.js +0 -499
  896. package/dist/cli-tui/commands/package-handlers.js.map +0 -1
  897. package/dist/cli-tui/commands/pii-command.d.ts +0 -3
  898. package/dist/cli-tui/commands/pii-command.d.ts.map +0 -1
  899. package/dist/cli-tui/commands/pii-command.js +0 -54
  900. package/dist/cli-tui/commands/pii-command.js.map +0 -1
  901. package/dist/cli-tui/commands/registry.d.ts +0 -3
  902. package/dist/cli-tui/commands/registry.d.ts.map +0 -1
  903. package/dist/cli-tui/commands/registry.js +0 -36
  904. package/dist/cli-tui/commands/registry.js.map +0 -1
  905. package/dist/cli-tui/commands/safety-handlers.d.ts +0 -36
  906. package/dist/cli-tui/commands/safety-handlers.d.ts.map +0 -1
  907. package/dist/cli-tui/commands/safety-handlers.js +0 -62
  908. package/dist/cli-tui/commands/safety-handlers.js.map +0 -1
  909. package/dist/cli-tui/commands/subcommands/auth-commands.d.ts +0 -26
  910. package/dist/cli-tui/commands/subcommands/auth-commands.d.ts.map +0 -1
  911. package/dist/cli-tui/commands/subcommands/auth-commands.js +0 -79
  912. package/dist/cli-tui/commands/subcommands/auth-commands.js.map +0 -1
  913. package/dist/cli-tui/commands/subcommands/config-commands.d.ts +0 -23
  914. package/dist/cli-tui/commands/subcommands/config-commands.d.ts.map +0 -1
  915. package/dist/cli-tui/commands/subcommands/config-commands.js +0 -61
  916. package/dist/cli-tui/commands/subcommands/config-commands.js.map +0 -1
  917. package/dist/cli-tui/commands/subcommands/diag-commands.d.ts +0 -46
  918. package/dist/cli-tui/commands/subcommands/diag-commands.d.ts.map +0 -1
  919. package/dist/cli-tui/commands/subcommands/diag-commands.js +0 -163
  920. package/dist/cli-tui/commands/subcommands/diag-commands.js.map +0 -1
  921. package/dist/cli-tui/commands/subcommands/git-commands.d.ts +0 -18
  922. package/dist/cli-tui/commands/subcommands/git-commands.d.ts.map +0 -1
  923. package/dist/cli-tui/commands/subcommands/git-commands.js +0 -50
  924. package/dist/cli-tui/commands/subcommands/git-commands.js.map +0 -1
  925. package/dist/cli-tui/commands/subcommands/index.d.ts +0 -18
  926. package/dist/cli-tui/commands/subcommands/index.d.ts.map +0 -1
  927. package/dist/cli-tui/commands/subcommands/index.js +0 -18
  928. package/dist/cli-tui/commands/subcommands/index.js.map +0 -1
  929. package/dist/cli-tui/commands/subcommands/safety-commands.d.ts +0 -26
  930. package/dist/cli-tui/commands/subcommands/safety-commands.d.ts.map +0 -1
  931. package/dist/cli-tui/commands/subcommands/safety-commands.js +0 -149
  932. package/dist/cli-tui/commands/subcommands/safety-commands.js.map +0 -1
  933. package/dist/cli-tui/commands/subcommands/session-commands.d.ts +0 -36
  934. package/dist/cli-tui/commands/subcommands/session-commands.d.ts.map +0 -1
  935. package/dist/cli-tui/commands/subcommands/session-commands.js +0 -112
  936. package/dist/cli-tui/commands/subcommands/session-commands.js.map +0 -1
  937. package/dist/cli-tui/commands/subcommands/tools-commands.d.ts +0 -27
  938. package/dist/cli-tui/commands/subcommands/tools-commands.d.ts.map +0 -1
  939. package/dist/cli-tui/commands/subcommands/tools-commands.js +0 -80
  940. package/dist/cli-tui/commands/subcommands/tools-commands.js.map +0 -1
  941. package/dist/cli-tui/commands/subcommands/ui-commands.d.ts +0 -30
  942. package/dist/cli-tui/commands/subcommands/ui-commands.d.ts.map +0 -1
  943. package/dist/cli-tui/commands/subcommands/ui-commands.js +0 -74
  944. package/dist/cli-tui/commands/subcommands/ui-commands.js.map +0 -1
  945. package/dist/cli-tui/commands/subcommands/undo-commands.d.ts +0 -25
  946. package/dist/cli-tui/commands/subcommands/undo-commands.d.ts.map +0 -1
  947. package/dist/cli-tui/commands/subcommands/undo-commands.js +0 -74
  948. package/dist/cli-tui/commands/subcommands/undo-commands.js.map +0 -1
  949. package/dist/cli-tui/commands/subcommands/usage-commands.d.ts +0 -19
  950. package/dist/cli-tui/commands/subcommands/usage-commands.d.ts.map +0 -1
  951. package/dist/cli-tui/commands/subcommands/usage-commands.js +0 -63
  952. package/dist/cli-tui/commands/subcommands/usage-commands.js.map +0 -1
  953. package/dist/cli-tui/commands/subcommands/utils.d.ts +0 -127
  954. package/dist/cli-tui/commands/subcommands/utils.d.ts.map +0 -1
  955. package/dist/cli-tui/commands/subcommands/utils.js +0 -395
  956. package/dist/cli-tui/commands/subcommands/utils.js.map +0 -1
  957. package/dist/cli-tui/commands/types.d.ts +0 -105
  958. package/dist/cli-tui/commands/types.d.ts.map +0 -1
  959. package/dist/cli-tui/commands/types.js +0 -2
  960. package/dist/cli-tui/commands/types.js.map +0 -1
  961. package/dist/cli-tui/commands/undo-handlers.d.ts +0 -29
  962. package/dist/cli-tui/commands/undo-handlers.d.ts.map +0 -1
  963. package/dist/cli-tui/commands/undo-handlers.js +0 -300
  964. package/dist/cli-tui/commands/undo-handlers.js.map +0 -1
  965. package/dist/cli-tui/commands/utility-handlers.d.ts +0 -55
  966. package/dist/cli-tui/commands/utility-handlers.d.ts.map +0 -1
  967. package/dist/cli-tui/commands/utility-handlers.js +0 -137
  968. package/dist/cli-tui/commands/utility-handlers.js.map +0 -1
  969. package/dist/cli-tui/commands/workflow-handlers.d.ts +0 -22
  970. package/dist/cli-tui/commands/workflow-handlers.d.ts.map +0 -1
  971. package/dist/cli-tui/commands/workflow-handlers.js +0 -227
  972. package/dist/cli-tui/commands/workflow-handlers.js.map +0 -1
  973. package/dist/cli-tui/compact-boundary-message.d.ts +0 -9
  974. package/dist/cli-tui/compact-boundary-message.d.ts.map +0 -1
  975. package/dist/cli-tui/compact-boundary-message.js +0 -18
  976. package/dist/cli-tui/compact-boundary-message.js.map +0 -1
  977. package/dist/cli-tui/compaction-recovery.d.ts +0 -6
  978. package/dist/cli-tui/compaction-recovery.d.ts.map +0 -1
  979. package/dist/cli-tui/compaction-recovery.js +0 -13
  980. package/dist/cli-tui/compaction-recovery.js.map +0 -1
  981. package/dist/cli-tui/config-view.d.ts +0 -30
  982. package/dist/cli-tui/config-view.d.ts.map +0 -1
  983. package/dist/cli-tui/config-view.js +0 -255
  984. package/dist/cli-tui/config-view.js.map +0 -1
  985. package/dist/cli-tui/context-view.d.ts +0 -20
  986. package/dist/cli-tui/context-view.d.ts.map +0 -1
  987. package/dist/cli-tui/context-view.js +0 -191
  988. package/dist/cli-tui/context-view.js.map +0 -1
  989. package/dist/cli-tui/custom-editor.d.ts +0 -25
  990. package/dist/cli-tui/custom-editor.d.ts.map +0 -1
  991. package/dist/cli-tui/custom-editor.js +0 -241
  992. package/dist/cli-tui/custom-editor.js.map +0 -1
  993. package/dist/cli-tui/editor-view.d.ts +0 -34
  994. package/dist/cli-tui/editor-view.d.ts.map +0 -1
  995. package/dist/cli-tui/editor-view.js +0 -102
  996. package/dist/cli-tui/editor-view.js.map +0 -1
  997. package/dist/cli-tui/feedback-view.d.ts +0 -35
  998. package/dist/cli-tui/feedback-view.d.ts.map +0 -1
  999. package/dist/cli-tui/feedback-view.js +0 -271
  1000. package/dist/cli-tui/feedback-view.js.map +0 -1
  1001. package/dist/cli-tui/footer.d.ts +0 -56
  1002. package/dist/cli-tui/footer.d.ts.map +0 -1
  1003. package/dist/cli-tui/footer.js +0 -228
  1004. package/dist/cli-tui/footer.js.map +0 -1
  1005. package/dist/cli-tui/git/commit-modal.d.ts +0 -14
  1006. package/dist/cli-tui/git/commit-modal.d.ts.map +0 -1
  1007. package/dist/cli-tui/git/commit-modal.js +0 -56
  1008. package/dist/cli-tui/git/commit-modal.js.map +0 -1
  1009. package/dist/cli-tui/git/git-preview-modal.d.ts +0 -40
  1010. package/dist/cli-tui/git/git-preview-modal.d.ts.map +0 -1
  1011. package/dist/cli-tui/git/git-preview-modal.js +0 -123
  1012. package/dist/cli-tui/git/git-preview-modal.js.map +0 -1
  1013. package/dist/cli-tui/git/git-view.d.ts +0 -65
  1014. package/dist/cli-tui/git/git-view.d.ts.map +0 -1
  1015. package/dist/cli-tui/git/git-view.js +0 -529
  1016. package/dist/cli-tui/git/git-view.js.map +0 -1
  1017. package/dist/cli-tui/history/history-config.d.ts +0 -7
  1018. package/dist/cli-tui/history/history-config.d.ts.map +0 -1
  1019. package/dist/cli-tui/history/history-config.js +0 -49
  1020. package/dist/cli-tui/history/history-config.js.map +0 -1
  1021. package/dist/cli-tui/history/prompt-history.d.ts +0 -33
  1022. package/dist/cli-tui/history/prompt-history.d.ts.map +0 -1
  1023. package/dist/cli-tui/history/prompt-history.js +0 -185
  1024. package/dist/cli-tui/history/prompt-history.js.map +0 -1
  1025. package/dist/cli-tui/history/tool-history.d.ts +0 -50
  1026. package/dist/cli-tui/history/tool-history.d.ts.map +0 -1
  1027. package/dist/cli-tui/history/tool-history.js +0 -253
  1028. package/dist/cli-tui/history/tool-history.js.map +0 -1
  1029. package/dist/cli-tui/hook-message.d.ts +0 -13
  1030. package/dist/cli-tui/hook-message.d.ts.map +0 -1
  1031. package/dist/cli-tui/hook-message.js +0 -56
  1032. package/dist/cli-tui/hook-message.js.map +0 -1
  1033. package/dist/cli-tui/hooks/hook-input-modal.d.ts +0 -22
  1034. package/dist/cli-tui/hooks/hook-input-modal.d.ts.map +0 -1
  1035. package/dist/cli-tui/hooks/hook-input-modal.js +0 -63
  1036. package/dist/cli-tui/hooks/hook-input-modal.js.map +0 -1
  1037. package/dist/cli-tui/hotkeys-view.d.ts +0 -13
  1038. package/dist/cli-tui/hotkeys-view.d.ts.map +0 -1
  1039. package/dist/cli-tui/hotkeys-view.js +0 -96
  1040. package/dist/cli-tui/hotkeys-view.js.map +0 -1
  1041. package/dist/cli-tui/import-view.d.ts +0 -28
  1042. package/dist/cli-tui/import-view.d.ts.map +0 -1
  1043. package/dist/cli-tui/import-view.js +0 -184
  1044. package/dist/cli-tui/import-view.js.map +0 -1
  1045. package/dist/cli-tui/info-view.d.ts +0 -18
  1046. package/dist/cli-tui/info-view.d.ts.map +0 -1
  1047. package/dist/cli-tui/info-view.js +0 -107
  1048. package/dist/cli-tui/info-view.js.map +0 -1
  1049. package/dist/cli-tui/instruction-panel.d.ts +0 -11
  1050. package/dist/cli-tui/instruction-panel.d.ts.map +0 -1
  1051. package/dist/cli-tui/instruction-panel.js +0 -86
  1052. package/dist/cli-tui/instruction-panel.js.map +0 -1
  1053. package/dist/cli-tui/interrupt-controller.d.ts +0 -78
  1054. package/dist/cli-tui/interrupt-controller.d.ts.map +0 -1
  1055. package/dist/cli-tui/interrupt-controller.js +0 -104
  1056. package/dist/cli-tui/interrupt-controller.js.map +0 -1
  1057. package/dist/cli-tui/keybindings-config.d.ts +0 -27
  1058. package/dist/cli-tui/keybindings-config.d.ts.map +0 -1
  1059. package/dist/cli-tui/keybindings-config.js +0 -372
  1060. package/dist/cli-tui/keybindings-config.js.map +0 -1
  1061. package/dist/cli-tui/keybindings-watcher.d.ts +0 -8
  1062. package/dist/cli-tui/keybindings-watcher.d.ts.map +0 -1
  1063. package/dist/cli-tui/keybindings-watcher.js +0 -56
  1064. package/dist/cli-tui/keybindings-watcher.js.map +0 -1
  1065. package/dist/cli-tui/keybindings.d.ts +0 -13
  1066. package/dist/cli-tui/keybindings.d.ts.map +0 -1
  1067. package/dist/cli-tui/keybindings.js +0 -223
  1068. package/dist/cli-tui/keybindings.js.map +0 -1
  1069. package/dist/cli-tui/loader/loader-stage-manager.d.ts +0 -43
  1070. package/dist/cli-tui/loader/loader-stage-manager.d.ts.map +0 -1
  1071. package/dist/cli-tui/loader/loader-stage-manager.js +0 -241
  1072. package/dist/cli-tui/loader/loader-stage-manager.js.map +0 -1
  1073. package/dist/cli-tui/loader/loader-stage-telemetry.d.ts +0 -14
  1074. package/dist/cli-tui/loader/loader-stage-telemetry.d.ts.map +0 -1
  1075. package/dist/cli-tui/loader/loader-stage-telemetry.js +0 -34
  1076. package/dist/cli-tui/loader/loader-stage-telemetry.js.map +0 -1
  1077. package/dist/cli-tui/loader/loader-view.d.ts +0 -41
  1078. package/dist/cli-tui/loader/loader-view.d.ts.map +0 -1
  1079. package/dist/cli-tui/loader/loader-view.js +0 -162
  1080. package/dist/cli-tui/loader/loader-view.js.map +0 -1
  1081. package/dist/cli-tui/lsp-view.d.ts +0 -21
  1082. package/dist/cli-tui/lsp-view.d.ts.map +0 -1
  1083. package/dist/cli-tui/lsp-view.js +0 -183
  1084. package/dist/cli-tui/lsp-view.js.map +0 -1
  1085. package/dist/cli-tui/mermaid-renderer.d.ts +0 -2
  1086. package/dist/cli-tui/mermaid-renderer.d.ts.map +0 -1
  1087. package/dist/cli-tui/mermaid-renderer.js +0 -391
  1088. package/dist/cli-tui/mermaid-renderer.js.map +0 -1
  1089. package/dist/cli-tui/message-view.d.ts +0 -27
  1090. package/dist/cli-tui/message-view.d.ts.map +0 -1
  1091. package/dist/cli-tui/message-view.js +0 -169
  1092. package/dist/cli-tui/message-view.js.map +0 -1
  1093. package/dist/cli-tui/modal-manager.d.ts +0 -77
  1094. package/dist/cli-tui/modal-manager.d.ts.map +0 -1
  1095. package/dist/cli-tui/modal-manager.js +0 -131
  1096. package/dist/cli-tui/modal-manager.js.map +0 -1
  1097. package/dist/cli-tui/notification-view.d.ts +0 -16
  1098. package/dist/cli-tui/notification-view.d.ts.map +0 -1
  1099. package/dist/cli-tui/notification-view.js +0 -53
  1100. package/dist/cli-tui/notification-view.js.map +0 -1
  1101. package/dist/cli-tui/oauth/index.d.ts +0 -2
  1102. package/dist/cli-tui/oauth/index.d.ts.map +0 -1
  1103. package/dist/cli-tui/oauth/index.js +0 -2
  1104. package/dist/cli-tui/oauth/index.js.map +0 -1
  1105. package/dist/cli-tui/oauth/oauth-flow-controller.d.ts +0 -65
  1106. package/dist/cli-tui/oauth/oauth-flow-controller.d.ts.map +0 -1
  1107. package/dist/cli-tui/oauth/oauth-flow-controller.js +0 -400
  1108. package/dist/cli-tui/oauth/oauth-flow-controller.js.map +0 -1
  1109. package/dist/cli-tui/ollama-view.d.ts +0 -38
  1110. package/dist/cli-tui/ollama-view.d.ts.map +0 -1
  1111. package/dist/cli-tui/ollama-view.js +0 -395
  1112. package/dist/cli-tui/ollama-view.js.map +0 -1
  1113. package/dist/cli-tui/paste/index.d.ts +0 -2
  1114. package/dist/cli-tui/paste/index.d.ts.map +0 -1
  1115. package/dist/cli-tui/paste/index.js +0 -2
  1116. package/dist/cli-tui/paste/index.js.map +0 -1
  1117. package/dist/cli-tui/paste/paste-handler.d.ts +0 -54
  1118. package/dist/cli-tui/paste/paste-handler.d.ts.map +0 -1
  1119. package/dist/cli-tui/paste/paste-handler.js +0 -128
  1120. package/dist/cli-tui/paste/paste-handler.js.map +0 -1
  1121. package/dist/cli-tui/plan/plan-controller.d.ts +0 -28
  1122. package/dist/cli-tui/plan/plan-controller.d.ts.map +0 -1
  1123. package/dist/cli-tui/plan/plan-controller.js +0 -66
  1124. package/dist/cli-tui/plan/plan-controller.js.map +0 -1
  1125. package/dist/cli-tui/plan-panel-modal.d.ts +0 -28
  1126. package/dist/cli-tui/plan-panel-modal.d.ts.map +0 -1
  1127. package/dist/cli-tui/plan-panel-modal.js +0 -193
  1128. package/dist/cli-tui/plan-panel-modal.js.map +0 -1
  1129. package/dist/cli-tui/plan-view.d.ts +0 -57
  1130. package/dist/cli-tui/plan-view.d.ts.map +0 -1
  1131. package/dist/cli-tui/plan-view.js +0 -404
  1132. package/dist/cli-tui/plan-view.js.map +0 -1
  1133. package/dist/cli-tui/prompt-queue.d.ts.map +0 -1
  1134. package/dist/cli-tui/prompt-queue.js.map +0 -1
  1135. package/dist/cli-tui/queue/follow-up-shortcut.d.ts +0 -6
  1136. package/dist/cli-tui/queue/follow-up-shortcut.d.ts.map +0 -1
  1137. package/dist/cli-tui/queue/follow-up-shortcut.js +0 -12
  1138. package/dist/cli-tui/queue/follow-up-shortcut.js.map +0 -1
  1139. package/dist/cli-tui/queue/index.d.ts +0 -3
  1140. package/dist/cli-tui/queue/index.d.ts.map +0 -1
  1141. package/dist/cli-tui/queue/index.js +0 -3
  1142. package/dist/cli-tui/queue/index.js.map +0 -1
  1143. package/dist/cli-tui/queue/queue-controller.d.ts +0 -109
  1144. package/dist/cli-tui/queue/queue-controller.d.ts.map +0 -1
  1145. package/dist/cli-tui/queue/queue-controller.js +0 -327
  1146. package/dist/cli-tui/queue/queue-controller.js.map +0 -1
  1147. package/dist/cli-tui/queue/queue-panel-controller.d.ts +0 -34
  1148. package/dist/cli-tui/queue/queue-panel-controller.d.ts.map +0 -1
  1149. package/dist/cli-tui/queue/queue-panel-controller.js +0 -163
  1150. package/dist/cli-tui/queue/queue-panel-controller.js.map +0 -1
  1151. package/dist/cli-tui/queue/queued-follow-up-edit-binding.d.ts +0 -7
  1152. package/dist/cli-tui/queue/queued-follow-up-edit-binding.d.ts.map +0 -1
  1153. package/dist/cli-tui/queue/queued-follow-up-edit-binding.js +0 -14
  1154. package/dist/cli-tui/queue/queued-follow-up-edit-binding.js.map +0 -1
  1155. package/dist/cli-tui/queue-panel-modal.d.ts +0 -26
  1156. package/dist/cli-tui/queue-panel-modal.d.ts.map +0 -1
  1157. package/dist/cli-tui/queue-panel-modal.js +0 -159
  1158. package/dist/cli-tui/queue-panel-modal.js.map +0 -1
  1159. package/dist/cli-tui/run/run-command-view.d.ts +0 -17
  1160. package/dist/cli-tui/run/run-command-view.d.ts.map +0 -1
  1161. package/dist/cli-tui/run/run-command-view.js +0 -62
  1162. package/dist/cli-tui/run/run-command-view.js.map +0 -1
  1163. package/dist/cli-tui/run/run-controller.d.ts +0 -24
  1164. package/dist/cli-tui/run/run-controller.d.ts.map +0 -1
  1165. package/dist/cli-tui/run/run-controller.js +0 -38
  1166. package/dist/cli-tui/run/run-controller.js.map +0 -1
  1167. package/dist/cli-tui/run/run-shell-command.d.ts +0 -13
  1168. package/dist/cli-tui/run/run-shell-command.d.ts.map +0 -1
  1169. package/dist/cli-tui/run/run-shell-command.js +0 -51
  1170. package/dist/cli-tui/run/run-shell-command.js.map +0 -1
  1171. package/dist/cli-tui/run/streaming-shell-command.d.ts +0 -19
  1172. package/dist/cli-tui/run/streaming-shell-command.d.ts.map +0 -1
  1173. package/dist/cli-tui/run/streaming-shell-command.js +0 -107
  1174. package/dist/cli-tui/run/streaming-shell-command.js.map +0 -1
  1175. package/dist/cli-tui/search/file-search-view.d.ts +0 -22
  1176. package/dist/cli-tui/search/file-search-view.d.ts.map +0 -1
  1177. package/dist/cli-tui/search/file-search-view.js +0 -68
  1178. package/dist/cli-tui/search/file-search-view.js.map +0 -1
  1179. package/dist/cli-tui/search/file-search.d.ts +0 -13
  1180. package/dist/cli-tui/search/file-search.d.ts.map +0 -1
  1181. package/dist/cli-tui/search/file-search.js +0 -52
  1182. package/dist/cli-tui/search/file-search.js.map +0 -1
  1183. package/dist/cli-tui/security-status.d.ts +0 -83
  1184. package/dist/cli-tui/security-status.d.ts.map +0 -1
  1185. package/dist/cli-tui/security-status.js +0 -214
  1186. package/dist/cli-tui/security-status.js.map +0 -1
  1187. package/dist/cli-tui/selectors/base-selector.d.ts +0 -27
  1188. package/dist/cli-tui/selectors/base-selector.d.ts.map +0 -1
  1189. package/dist/cli-tui/selectors/base-selector.js +0 -47
  1190. package/dist/cli-tui/selectors/base-selector.js.map +0 -1
  1191. package/dist/cli-tui/selectors/branch-summary-modal.d.ts +0 -18
  1192. package/dist/cli-tui/selectors/branch-summary-modal.d.ts.map +0 -1
  1193. package/dist/cli-tui/selectors/branch-summary-modal.js +0 -24
  1194. package/dist/cli-tui/selectors/branch-summary-modal.js.map +0 -1
  1195. package/dist/cli-tui/selectors/model-selector-view.d.ts +0 -22
  1196. package/dist/cli-tui/selectors/model-selector-view.d.ts.map +0 -1
  1197. package/dist/cli-tui/selectors/model-selector-view.js +0 -31
  1198. package/dist/cli-tui/selectors/model-selector-view.js.map +0 -1
  1199. package/dist/cli-tui/selectors/model-selector.d.ts +0 -30
  1200. package/dist/cli-tui/selectors/model-selector.d.ts.map +0 -1
  1201. package/dist/cli-tui/selectors/model-selector.js +0 -218
  1202. package/dist/cli-tui/selectors/model-selector.js.map +0 -1
  1203. package/dist/cli-tui/selectors/oauth-selector-view.d.ts +0 -20
  1204. package/dist/cli-tui/selectors/oauth-selector-view.d.ts.map +0 -1
  1205. package/dist/cli-tui/selectors/oauth-selector-view.js +0 -28
  1206. package/dist/cli-tui/selectors/oauth-selector-view.js.map +0 -1
  1207. package/dist/cli-tui/selectors/oauth-selector.d.ts +0 -19
  1208. package/dist/cli-tui/selectors/oauth-selector.d.ts.map +0 -1
  1209. package/dist/cli-tui/selectors/oauth-selector.js +0 -120
  1210. package/dist/cli-tui/selectors/oauth-selector.js.map +0 -1
  1211. package/dist/cli-tui/selectors/queue-mode-selector-view.d.ts +0 -19
  1212. package/dist/cli-tui/selectors/queue-mode-selector-view.d.ts.map +0 -1
  1213. package/dist/cli-tui/selectors/queue-mode-selector-view.js +0 -29
  1214. package/dist/cli-tui/selectors/queue-mode-selector-view.js.map +0 -1
  1215. package/dist/cli-tui/selectors/queue-mode-selector.d.ts +0 -5
  1216. package/dist/cli-tui/selectors/queue-mode-selector.d.ts.map +0 -1
  1217. package/dist/cli-tui/selectors/queue-mode-selector.js +0 -34
  1218. package/dist/cli-tui/selectors/queue-mode-selector.js.map +0 -1
  1219. package/dist/cli-tui/selectors/report-selector-view.d.ts +0 -17
  1220. package/dist/cli-tui/selectors/report-selector-view.d.ts.map +0 -1
  1221. package/dist/cli-tui/selectors/report-selector-view.js +0 -29
  1222. package/dist/cli-tui/selectors/report-selector-view.js.map +0 -1
  1223. package/dist/cli-tui/selectors/report-selector.d.ts +0 -7
  1224. package/dist/cli-tui/selectors/report-selector.d.ts.map +0 -1
  1225. package/dist/cli-tui/selectors/report-selector.js +0 -31
  1226. package/dist/cli-tui/selectors/report-selector.js.map +0 -1
  1227. package/dist/cli-tui/selectors/theme-selector-view.d.ts +0 -19
  1228. package/dist/cli-tui/selectors/theme-selector-view.d.ts.map +0 -1
  1229. package/dist/cli-tui/selectors/theme-selector-view.js +0 -41
  1230. package/dist/cli-tui/selectors/theme-selector-view.js.map +0 -1
  1231. package/dist/cli-tui/selectors/theme-selector.d.ts +0 -14
  1232. package/dist/cli-tui/selectors/theme-selector.d.ts.map +0 -1
  1233. package/dist/cli-tui/selectors/theme-selector.js +0 -46
  1234. package/dist/cli-tui/selectors/theme-selector.js.map +0 -1
  1235. package/dist/cli-tui/selectors/thinking-selector-view.d.ts +0 -20
  1236. package/dist/cli-tui/selectors/thinking-selector-view.d.ts.map +0 -1
  1237. package/dist/cli-tui/selectors/thinking-selector-view.js +0 -31
  1238. package/dist/cli-tui/selectors/thinking-selector-view.js.map +0 -1
  1239. package/dist/cli-tui/selectors/thinking-selector.d.ts +0 -9
  1240. package/dist/cli-tui/selectors/thinking-selector.d.ts.map +0 -1
  1241. package/dist/cli-tui/selectors/thinking-selector.js +0 -47
  1242. package/dist/cli-tui/selectors/thinking-selector.js.map +0 -1
  1243. package/dist/cli-tui/selectors/tree-selector-view.d.ts +0 -32
  1244. package/dist/cli-tui/selectors/tree-selector-view.d.ts.map +0 -1
  1245. package/dist/cli-tui/selectors/tree-selector-view.js +0 -407
  1246. package/dist/cli-tui/selectors/tree-selector-view.js.map +0 -1
  1247. package/dist/cli-tui/selectors/tree-selector.d.ts +0 -27
  1248. package/dist/cli-tui/selectors/tree-selector.d.ts.map +0 -1
  1249. package/dist/cli-tui/selectors/tree-selector.js +0 -194
  1250. package/dist/cli-tui/selectors/tree-selector.js.map +0 -1
  1251. package/dist/cli-tui/selectors/user-message-selector-view.d.ts +0 -25
  1252. package/dist/cli-tui/selectors/user-message-selector-view.d.ts.map +0 -1
  1253. package/dist/cli-tui/selectors/user-message-selector-view.js +0 -101
  1254. package/dist/cli-tui/selectors/user-message-selector-view.js.map +0 -1
  1255. package/dist/cli-tui/selectors/user-message-selector.d.ts +0 -30
  1256. package/dist/cli-tui/selectors/user-message-selector.d.ts.map +0 -1
  1257. package/dist/cli-tui/selectors/user-message-selector.js +0 -114
  1258. package/dist/cli-tui/selectors/user-message-selector.js.map +0 -1
  1259. package/dist/cli-tui/session/branch-controller.d.ts +0 -65
  1260. package/dist/cli-tui/session/branch-controller.d.ts.map +0 -1
  1261. package/dist/cli-tui/session/branch-controller.js +0 -125
  1262. package/dist/cli-tui/session/branch-controller.js.map +0 -1
  1263. package/dist/cli-tui/session/conversation-compactor.d.ts +0 -64
  1264. package/dist/cli-tui/session/conversation-compactor.d.ts.map +0 -1
  1265. package/dist/cli-tui/session/conversation-compactor.js +0 -77
  1266. package/dist/cli-tui/session/conversation-compactor.js.map +0 -1
  1267. package/dist/cli-tui/session/session-context.d.ts +0 -59
  1268. package/dist/cli-tui/session/session-context.d.ts.map +0 -1
  1269. package/dist/cli-tui/session/session-context.js +0 -79
  1270. package/dist/cli-tui/session/session-context.js.map +0 -1
  1271. package/dist/cli-tui/session/session-data-provider.d.ts +0 -23
  1272. package/dist/cli-tui/session/session-data-provider.d.ts.map +0 -1
  1273. package/dist/cli-tui/session/session-data-provider.js +0 -22
  1274. package/dist/cli-tui/session/session-data-provider.js.map +0 -1
  1275. package/dist/cli-tui/session/session-list.d.ts +0 -18
  1276. package/dist/cli-tui/session/session-list.d.ts.map +0 -1
  1277. package/dist/cli-tui/session/session-list.js +0 -103
  1278. package/dist/cli-tui/session/session-list.js.map +0 -1
  1279. package/dist/cli-tui/session/session-selector.d.ts +0 -12
  1280. package/dist/cli-tui/session/session-selector.d.ts.map +0 -1
  1281. package/dist/cli-tui/session/session-selector.js +0 -37
  1282. package/dist/cli-tui/session/session-selector.js.map +0 -1
  1283. package/dist/cli-tui/session/session-summary-controller.d.ts +0 -24
  1284. package/dist/cli-tui/session/session-summary-controller.d.ts.map +0 -1
  1285. package/dist/cli-tui/session/session-summary-controller.js +0 -96
  1286. package/dist/cli-tui/session/session-summary-controller.js.map +0 -1
  1287. package/dist/cli-tui/session/session-switcher-view.d.ts +0 -20
  1288. package/dist/cli-tui/session/session-switcher-view.d.ts.map +0 -1
  1289. package/dist/cli-tui/session/session-switcher-view.js +0 -43
  1290. package/dist/cli-tui/session/session-switcher-view.js.map +0 -1
  1291. package/dist/cli-tui/session/session-switcher.d.ts +0 -38
  1292. package/dist/cli-tui/session/session-switcher.d.ts.map +0 -1
  1293. package/dist/cli-tui/session/session-switcher.js +0 -204
  1294. package/dist/cli-tui/session/session-switcher.js.map +0 -1
  1295. package/dist/cli-tui/session/session-view.d.ts +0 -46
  1296. package/dist/cli-tui/session/session-view.d.ts.map +0 -1
  1297. package/dist/cli-tui/session/session-view.js +0 -311
  1298. package/dist/cli-tui/session/session-view.js.map +0 -1
  1299. package/dist/cli-tui/slash/index.d.ts +0 -2
  1300. package/dist/cli-tui/slash/index.d.ts.map +0 -1
  1301. package/dist/cli-tui/slash/index.js +0 -2
  1302. package/dist/cli-tui/slash/index.js.map +0 -1
  1303. package/dist/cli-tui/slash/slash-command-matcher.d.ts +0 -55
  1304. package/dist/cli-tui/slash/slash-command-matcher.d.ts.map +0 -1
  1305. package/dist/cli-tui/slash/slash-command-matcher.js +0 -113
  1306. package/dist/cli-tui/slash/slash-command-matcher.js.map +0 -1
  1307. package/dist/cli-tui/smart-autocomplete-provider.d.ts +0 -5
  1308. package/dist/cli-tui/smart-autocomplete-provider.d.ts.map +0 -1
  1309. package/dist/cli-tui/smart-autocomplete-provider.js +0 -44
  1310. package/dist/cli-tui/smart-autocomplete-provider.js.map +0 -1
  1311. package/dist/cli-tui/startup-announcements.d.ts +0 -15
  1312. package/dist/cli-tui/startup-announcements.d.ts.map +0 -1
  1313. package/dist/cli-tui/startup-announcements.js +0 -75
  1314. package/dist/cli-tui/startup-announcements.js.map +0 -1
  1315. package/dist/cli-tui/status/cost-view.d.ts +0 -27
  1316. package/dist/cli-tui/status/cost-view.d.ts.map +0 -1
  1317. package/dist/cli-tui/status/cost-view.js +0 -212
  1318. package/dist/cli-tui/status/cost-view.js.map +0 -1
  1319. package/dist/cli-tui/status/diagnostics-templates.d.ts +0 -34
  1320. package/dist/cli-tui/status/diagnostics-templates.d.ts.map +0 -1
  1321. package/dist/cli-tui/status/diagnostics-templates.js +0 -167
  1322. package/dist/cli-tui/status/diagnostics-templates.js.map +0 -1
  1323. package/dist/cli-tui/status/diagnostics-view.d.ts +0 -48
  1324. package/dist/cli-tui/status/diagnostics-view.d.ts.map +0 -1
  1325. package/dist/cli-tui/status/diagnostics-view.js +0 -249
  1326. package/dist/cli-tui/status/diagnostics-view.js.map +0 -1
  1327. package/dist/cli-tui/status/diagnostics.d.ts +0 -39
  1328. package/dist/cli-tui/status/diagnostics.d.ts.map +0 -1
  1329. package/dist/cli-tui/status/diagnostics.js +0 -286
  1330. package/dist/cli-tui/status/diagnostics.js.map +0 -1
  1331. package/dist/cli-tui/status/health-snapshot.d.ts +0 -17
  1332. package/dist/cli-tui/status/health-snapshot.d.ts.map +0 -1
  1333. package/dist/cli-tui/status/health-snapshot.js +0 -28
  1334. package/dist/cli-tui/status/health-snapshot.js.map +0 -1
  1335. package/dist/cli-tui/status/quota-view.d.ts +0 -37
  1336. package/dist/cli-tui/status/quota-view.d.ts.map +0 -1
  1337. package/dist/cli-tui/status/quota-view.js +0 -309
  1338. package/dist/cli-tui/status/quota-view.js.map +0 -1
  1339. package/dist/cli-tui/status/telemetry-view.d.ts +0 -23
  1340. package/dist/cli-tui/status/telemetry-view.d.ts.map +0 -1
  1341. package/dist/cli-tui/status/telemetry-view.js +0 -77
  1342. package/dist/cli-tui/status/telemetry-view.js.map +0 -1
  1343. package/dist/cli-tui/status/training-view.d.ts +0 -23
  1344. package/dist/cli-tui/status/training-view.d.ts.map +0 -1
  1345. package/dist/cli-tui/status/training-view.js +0 -71
  1346. package/dist/cli-tui/status/training-view.js.map +0 -1
  1347. package/dist/cli-tui/streaming-view.d.ts +0 -43
  1348. package/dist/cli-tui/streaming-view.d.ts.map +0 -1
  1349. package/dist/cli-tui/streaming-view.js +0 -176
  1350. package/dist/cli-tui/streaming-view.js.map +0 -1
  1351. package/dist/cli-tui/terminal/index.d.ts +0 -2
  1352. package/dist/cli-tui/terminal/index.d.ts.map +0 -1
  1353. package/dist/cli-tui/terminal/index.js +0 -2
  1354. package/dist/cli-tui/terminal/index.js.map +0 -1
  1355. package/dist/cli-tui/terminal/terminal-utils.d.ts +0 -44
  1356. package/dist/cli-tui/terminal/terminal-utils.d.ts.map +0 -1
  1357. package/dist/cli-tui/terminal/terminal-utils.js +0 -145
  1358. package/dist/cli-tui/terminal/terminal-utils.js.map +0 -1
  1359. package/dist/cli-tui/tips/tip-scheduler.d.ts +0 -19
  1360. package/dist/cli-tui/tips/tip-scheduler.d.ts.map +0 -1
  1361. package/dist/cli-tui/tips/tip-scheduler.js +0 -135
  1362. package/dist/cli-tui/tips/tip-scheduler.js.map +0 -1
  1363. package/dist/cli-tui/tool-execution.d.ts +0 -76
  1364. package/dist/cli-tui/tool-execution.d.ts.map +0 -1
  1365. package/dist/cli-tui/tool-execution.js +0 -217
  1366. package/dist/cli-tui/tool-execution.js.map +0 -1
  1367. package/dist/cli-tui/tool-output-view.d.ts +0 -22
  1368. package/dist/cli-tui/tool-output-view.d.ts.map +0 -1
  1369. package/dist/cli-tui/tool-output-view.js +0 -71
  1370. package/dist/cli-tui/tool-output-view.js.map +0 -1
  1371. package/dist/cli-tui/tool-renderers/index.d.ts +0 -4
  1372. package/dist/cli-tui/tool-renderers/index.d.ts.map +0 -1
  1373. package/dist/cli-tui/tool-renderers/index.js +0 -19
  1374. package/dist/cli-tui/tool-renderers/index.js.map +0 -1
  1375. package/dist/cli-tui/tool-renderers/render-bash.d.ts +0 -6
  1376. package/dist/cli-tui/tool-renderers/render-bash.d.ts.map +0 -1
  1377. package/dist/cli-tui/tool-renderers/render-bash.js +0 -90
  1378. package/dist/cli-tui/tool-renderers/render-bash.js.map +0 -1
  1379. package/dist/cli-tui/tool-renderers/render-batch.d.ts +0 -12
  1380. package/dist/cli-tui/tool-renderers/render-batch.d.ts.map +0 -1
  1381. package/dist/cli-tui/tool-renderers/render-batch.js +0 -133
  1382. package/dist/cli-tui/tool-renderers/render-batch.js.map +0 -1
  1383. package/dist/cli-tui/tool-renderers/render-edit.d.ts +0 -6
  1384. package/dist/cli-tui/tool-renderers/render-edit.d.ts.map +0 -1
  1385. package/dist/cli-tui/tool-renderers/render-edit.js +0 -125
  1386. package/dist/cli-tui/tool-renderers/render-edit.js.map +0 -1
  1387. package/dist/cli-tui/tool-renderers/render-generic.d.ts +0 -6
  1388. package/dist/cli-tui/tool-renderers/render-generic.d.ts.map +0 -1
  1389. package/dist/cli-tui/tool-renderers/render-generic.js +0 -66
  1390. package/dist/cli-tui/tool-renderers/render-generic.js.map +0 -1
  1391. package/dist/cli-tui/tool-renderers/render-read.d.ts +0 -9
  1392. package/dist/cli-tui/tool-renderers/render-read.d.ts.map +0 -1
  1393. package/dist/cli-tui/tool-renderers/render-read.js +0 -108
  1394. package/dist/cli-tui/tool-renderers/render-read.js.map +0 -1
  1395. package/dist/cli-tui/tool-renderers/render-style.d.ts +0 -21
  1396. package/dist/cli-tui/tool-renderers/render-style.d.ts.map +0 -1
  1397. package/dist/cli-tui/tool-renderers/render-style.js +0 -51
  1398. package/dist/cli-tui/tool-renderers/render-style.js.map +0 -1
  1399. package/dist/cli-tui/tool-renderers/render-write.d.ts +0 -5
  1400. package/dist/cli-tui/tool-renderers/render-write.d.ts.map +0 -1
  1401. package/dist/cli-tui/tool-renderers/render-write.js +0 -60
  1402. package/dist/cli-tui/tool-renderers/render-write.js.map +0 -1
  1403. package/dist/cli-tui/tool-renderers/types.d.ts +0 -20
  1404. package/dist/cli-tui/tool-renderers/types.d.ts.map +0 -1
  1405. package/dist/cli-tui/tool-renderers/types.js +0 -2
  1406. package/dist/cli-tui/tool-renderers/types.js.map +0 -1
  1407. package/dist/cli-tui/tool-retry/tool-retry-controller.d.ts +0 -29
  1408. package/dist/cli-tui/tool-retry/tool-retry-controller.d.ts.map +0 -1
  1409. package/dist/cli-tui/tool-retry/tool-retry-controller.js +0 -110
  1410. package/dist/cli-tui/tool-retry/tool-retry-controller.js.map +0 -1
  1411. package/dist/cli-tui/tool-retry/tool-retry-modal.d.ts +0 -27
  1412. package/dist/cli-tui/tool-retry/tool-retry-modal.d.ts.map +0 -1
  1413. package/dist/cli-tui/tool-retry/tool-retry-modal.js +0 -118
  1414. package/dist/cli-tui/tool-retry/tool-retry-modal.js.map +0 -1
  1415. package/dist/cli-tui/tool-status-view.d.ts +0 -32
  1416. package/dist/cli-tui/tool-status-view.d.ts.map +0 -1
  1417. package/dist/cli-tui/tool-status-view.js +0 -86
  1418. package/dist/cli-tui/tool-status-view.js.map +0 -1
  1419. package/dist/cli-tui/tui-renderer/agent-event-bridge.d.ts +0 -59
  1420. package/dist/cli-tui/tui-renderer/agent-event-bridge.d.ts.map +0 -1
  1421. package/dist/cli-tui/tui-renderer/agent-event-bridge.js +0 -129
  1422. package/dist/cli-tui/tui-renderer/agent-event-bridge.js.map +0 -1
  1423. package/dist/cli-tui/tui-renderer/approval-setup.d.ts +0 -13
  1424. package/dist/cli-tui/tui-renderer/approval-setup.d.ts.map +0 -1
  1425. package/dist/cli-tui/tui-renderer/approval-setup.js +0 -5
  1426. package/dist/cli-tui/tui-renderer/approval-setup.js.map +0 -1
  1427. package/dist/cli-tui/tui-renderer/attachment-controller.d.ts +0 -54
  1428. package/dist/cli-tui/tui-renderer/attachment-controller.d.ts.map +0 -1
  1429. package/dist/cli-tui/tui-renderer/attachment-controller.js +0 -160
  1430. package/dist/cli-tui/tui-renderer/attachment-controller.js.map +0 -1
  1431. package/dist/cli-tui/tui-renderer/background-tasks-setup.d.ts +0 -9
  1432. package/dist/cli-tui/tui-renderer/background-tasks-setup.d.ts.map +0 -1
  1433. package/dist/cli-tui/tui-renderer/background-tasks-setup.js +0 -7
  1434. package/dist/cli-tui/tui-renderer/background-tasks-setup.js.map +0 -1
  1435. package/dist/cli-tui/tui-renderer/branch-controller.d.ts +0 -41
  1436. package/dist/cli-tui/tui-renderer/branch-controller.d.ts.map +0 -1
  1437. package/dist/cli-tui/tui-renderer/branch-controller.js +0 -102
  1438. package/dist/cli-tui/tui-renderer/branch-controller.js.map +0 -1
  1439. package/dist/cli-tui/tui-renderer/clear-controller.d.ts +0 -75
  1440. package/dist/cli-tui/tui-renderer/clear-controller.d.ts.map +0 -1
  1441. package/dist/cli-tui/tui-renderer/clear-controller.js +0 -75
  1442. package/dist/cli-tui/tui-renderer/clear-controller.js.map +0 -1
  1443. package/dist/cli-tui/tui-renderer/client-tools-setup.d.ts +0 -14
  1444. package/dist/cli-tui/tui-renderer/client-tools-setup.d.ts.map +0 -1
  1445. package/dist/cli-tui/tui-renderer/client-tools-setup.js +0 -5
  1446. package/dist/cli-tui/tui-renderer/client-tools-setup.js.map +0 -1
  1447. package/dist/cli-tui/tui-renderer/command-registry-options.d.ts +0 -111
  1448. package/dist/cli-tui/tui-renderer/command-registry-options.d.ts.map +0 -1
  1449. package/dist/cli-tui/tui-renderer/command-registry-options.js +0 -163
  1450. package/dist/cli-tui/tui-renderer/command-registry-options.js.map +0 -1
  1451. package/dist/cli-tui/tui-renderer/command-registry.d.ts +0 -16
  1452. package/dist/cli-tui/tui-renderer/command-registry.d.ts.map +0 -1
  1453. package/dist/cli-tui/tui-renderer/command-registry.js +0 -23
  1454. package/dist/cli-tui/tui-renderer/command-registry.js.map +0 -1
  1455. package/dist/cli-tui/tui-renderer/command-suite-wiring.d.ts +0 -29
  1456. package/dist/cli-tui/tui-renderer/command-suite-wiring.d.ts.map +0 -1
  1457. package/dist/cli-tui/tui-renderer/command-suite-wiring.js +0 -108
  1458. package/dist/cli-tui/tui-renderer/command-suite-wiring.js.map +0 -1
  1459. package/dist/cli-tui/tui-renderer/compaction-controller.d.ts +0 -100
  1460. package/dist/cli-tui/tui-renderer/compaction-controller.d.ts.map +0 -1
  1461. package/dist/cli-tui/tui-renderer/compaction-controller.js +0 -160
  1462. package/dist/cli-tui/tui-renderer/compaction-controller.js.map +0 -1
  1463. package/dist/cli-tui/tui-renderer/custom-commands-controller.d.ts +0 -42
  1464. package/dist/cli-tui/tui-renderer/custom-commands-controller.d.ts.map +0 -1
  1465. package/dist/cli-tui/tui-renderer/custom-commands-controller.js +0 -106
  1466. package/dist/cli-tui/tui-renderer/custom-commands-controller.js.map +0 -1
  1467. package/dist/cli-tui/tui-renderer/delegating-command-handlers.d.ts +0 -37
  1468. package/dist/cli-tui/tui-renderer/delegating-command-handlers.d.ts.map +0 -1
  1469. package/dist/cli-tui/tui-renderer/delegating-command-handlers.js +0 -139
  1470. package/dist/cli-tui/tui-renderer/delegating-command-handlers.js.map +0 -1
  1471. package/dist/cli-tui/tui-renderer/editor-bindings.d.ts +0 -21
  1472. package/dist/cli-tui/tui-renderer/editor-bindings.d.ts.map +0 -1
  1473. package/dist/cli-tui/tui-renderer/editor-bindings.js +0 -76
  1474. package/dist/cli-tui/tui-renderer/editor-bindings.js.map +0 -1
  1475. package/dist/cli-tui/tui-renderer/footer-hints-controller.d.ts +0 -90
  1476. package/dist/cli-tui/tui-renderer/footer-hints-controller.d.ts.map +0 -1
  1477. package/dist/cli-tui/tui-renderer/footer-hints-controller.js +0 -152
  1478. package/dist/cli-tui/tui-renderer/footer-hints-controller.js.map +0 -1
  1479. package/dist/cli-tui/tui-renderer/history-controller.d.ts +0 -35
  1480. package/dist/cli-tui/tui-renderer/history-controller.d.ts.map +0 -1
  1481. package/dist/cli-tui/tui-renderer/history-controller.js +0 -153
  1482. package/dist/cli-tui/tui-renderer/history-controller.js.map +0 -1
  1483. package/dist/cli-tui/tui-renderer/hook-ui-controller.d.ts +0 -83
  1484. package/dist/cli-tui/tui-renderer/hook-ui-controller.d.ts.map +0 -1
  1485. package/dist/cli-tui/tui-renderer/hook-ui-controller.js +0 -309
  1486. package/dist/cli-tui/tui-renderer/hook-ui-controller.js.map +0 -1
  1487. package/dist/cli-tui/tui-renderer/initial-preferences.d.ts +0 -19
  1488. package/dist/cli-tui/tui-renderer/initial-preferences.d.ts.map +0 -1
  1489. package/dist/cli-tui/tui-renderer/initial-preferences.js +0 -54
  1490. package/dist/cli-tui/tui-renderer/initial-preferences.js.map +0 -1
  1491. package/dist/cli-tui/tui-renderer/input-controller.d.ts +0 -56
  1492. package/dist/cli-tui/tui-renderer/input-controller.d.ts.map +0 -1
  1493. package/dist/cli-tui/tui-renderer/input-controller.js +0 -104
  1494. package/dist/cli-tui/tui-renderer/input-controller.js.map +0 -1
  1495. package/dist/cli-tui/tui-renderer/interrupt-setup.d.ts +0 -19
  1496. package/dist/cli-tui/tui-renderer/interrupt-setup.d.ts.map +0 -1
  1497. package/dist/cli-tui/tui-renderer/interrupt-setup.js +0 -18
  1498. package/dist/cli-tui/tui-renderer/interrupt-setup.js.map +0 -1
  1499. package/dist/cli-tui/tui-renderer/loader-setup.d.ts +0 -14
  1500. package/dist/cli-tui/tui-renderer/loader-setup.d.ts.map +0 -1
  1501. package/dist/cli-tui/tui-renderer/loader-setup.js +0 -13
  1502. package/dist/cli-tui/tui-renderer/loader-setup.js.map +0 -1
  1503. package/dist/cli-tui/tui-renderer/mcp-events-setup.d.ts +0 -55
  1504. package/dist/cli-tui/tui-renderer/mcp-events-setup.d.ts.map +0 -1
  1505. package/dist/cli-tui/tui-renderer/mcp-events-setup.js +0 -143
  1506. package/dist/cli-tui/tui-renderer/mcp-events-setup.js.map +0 -1
  1507. package/dist/cli-tui/tui-renderer/misc-handlers.d.ts +0 -59
  1508. package/dist/cli-tui/tui-renderer/misc-handlers.d.ts.map +0 -1
  1509. package/dist/cli-tui/tui-renderer/misc-handlers.js +0 -143
  1510. package/dist/cli-tui/tui-renderer/misc-handlers.js.map +0 -1
  1511. package/dist/cli-tui/tui-renderer/oauth-setup.d.ts +0 -14
  1512. package/dist/cli-tui/tui-renderer/oauth-setup.d.ts.map +0 -1
  1513. package/dist/cli-tui/tui-renderer/oauth-setup.js +0 -26
  1514. package/dist/cli-tui/tui-renderer/oauth-setup.js.map +0 -1
  1515. package/dist/cli-tui/tui-renderer/plan-setup.d.ts +0 -19
  1516. package/dist/cli-tui/tui-renderer/plan-setup.d.ts.map +0 -1
  1517. package/dist/cli-tui/tui-renderer/plan-setup.js +0 -23
  1518. package/dist/cli-tui/tui-renderer/plan-setup.js.map +0 -1
  1519. package/dist/cli-tui/tui-renderer/prompt-template-slash-commands.d.ts +0 -21
  1520. package/dist/cli-tui/tui-renderer/prompt-template-slash-commands.d.ts.map +0 -1
  1521. package/dist/cli-tui/tui-renderer/prompt-template-slash-commands.js +0 -64
  1522. package/dist/cli-tui/tui-renderer/prompt-template-slash-commands.js.map +0 -1
  1523. package/dist/cli-tui/tui-renderer/queue-setup.d.ts +0 -18
  1524. package/dist/cli-tui/tui-renderer/queue-setup.d.ts.map +0 -1
  1525. package/dist/cli-tui/tui-renderer/queue-setup.js +0 -42
  1526. package/dist/cli-tui/tui-renderer/queue-setup.js.map +0 -1
  1527. package/dist/cli-tui/tui-renderer/quick-settings-controller.d.ts +0 -53
  1528. package/dist/cli-tui/tui-renderer/quick-settings-controller.d.ts.map +0 -1
  1529. package/dist/cli-tui/tui-renderer/quick-settings-controller.js +0 -100
  1530. package/dist/cli-tui/tui-renderer/quick-settings-controller.js.map +0 -1
  1531. package/dist/cli-tui/tui-renderer/session-setup.d.ts +0 -31
  1532. package/dist/cli-tui/tui-renderer/session-setup.d.ts.map +0 -1
  1533. package/dist/cli-tui/tui-renderer/session-setup.js +0 -45
  1534. package/dist/cli-tui/tui-renderer/session-setup.js.map +0 -1
  1535. package/dist/cli-tui/tui-renderer/session-state-controller.d.ts +0 -66
  1536. package/dist/cli-tui/tui-renderer/session-state-controller.d.ts.map +0 -1
  1537. package/dist/cli-tui/tui-renderer/session-state-controller.js +0 -139
  1538. package/dist/cli-tui/tui-renderer/session-state-controller.js.map +0 -1
  1539. package/dist/cli-tui/tui-renderer/skills-controller.d.ts +0 -70
  1540. package/dist/cli-tui/tui-renderer/skills-controller.d.ts.map +0 -1
  1541. package/dist/cli-tui/tui-renderer/skills-controller.js +0 -411
  1542. package/dist/cli-tui/tui-renderer/skills-controller.js.map +0 -1
  1543. package/dist/cli-tui/tui-renderer/slash-hint-controller.d.ts +0 -90
  1544. package/dist/cli-tui/tui-renderer/slash-hint-controller.d.ts.map +0 -1
  1545. package/dist/cli-tui/tui-renderer/slash-hint-controller.js +0 -131
  1546. package/dist/cli-tui/tui-renderer/slash-hint-controller.js.map +0 -1
  1547. package/dist/cli-tui/tui-renderer/tool-retry-setup.d.ts +0 -13
  1548. package/dist/cli-tui/tui-renderer/tool-retry-setup.d.ts.map +0 -1
  1549. package/dist/cli-tui/tui-renderer/tool-retry-setup.js +0 -5
  1550. package/dist/cli-tui/tui-renderer/tool-retry-setup.js.map +0 -1
  1551. package/dist/cli-tui/tui-renderer/tooling-views-setup.d.ts +0 -38
  1552. package/dist/cli-tui/tui-renderer/tooling-views-setup.d.ts.map +0 -1
  1553. package/dist/cli-tui/tui-renderer/tooling-views-setup.js +0 -48
  1554. package/dist/cli-tui/tui-renderer/tooling-views-setup.js.map +0 -1
  1555. package/dist/cli-tui/tui-renderer/ui-state-controller.d.ts +0 -70
  1556. package/dist/cli-tui/tui-renderer/ui-state-controller.d.ts.map +0 -1
  1557. package/dist/cli-tui/tui-renderer/ui-state-controller.js +0 -184
  1558. package/dist/cli-tui/tui-renderer/ui-state-controller.js.map +0 -1
  1559. package/dist/cli-tui/tui-renderer/ui-state-setup.d.ts +0 -13
  1560. package/dist/cli-tui/tui-renderer/ui-state-setup.d.ts.map +0 -1
  1561. package/dist/cli-tui/tui-renderer/ui-state-setup.js +0 -11
  1562. package/dist/cli-tui/tui-renderer/ui-state-setup.js.map +0 -1
  1563. package/dist/cli-tui/tui-renderer/utility-views-setup.d.ts +0 -26
  1564. package/dist/cli-tui/tui-renderer/utility-views-setup.d.ts.map +0 -1
  1565. package/dist/cli-tui/tui-renderer/utility-views-setup.js +0 -23
  1566. package/dist/cli-tui/tui-renderer/utility-views-setup.js.map +0 -1
  1567. package/dist/cli-tui/tui-renderer/viewport-controller.d.ts +0 -33
  1568. package/dist/cli-tui/tui-renderer/viewport-controller.d.ts.map +0 -1
  1569. package/dist/cli-tui/tui-renderer/viewport-controller.js +0 -98
  1570. package/dist/cli-tui/tui-renderer/viewport-controller.js.map +0 -1
  1571. package/dist/cli-tui/tui-renderer.d.ts +0 -268
  1572. package/dist/cli-tui/tui-renderer.d.ts.map +0 -1
  1573. package/dist/cli-tui/tui-renderer.js +0 -2131
  1574. package/dist/cli-tui/tui-renderer.js.map +0 -1
  1575. package/dist/cli-tui/ui-state.d.ts +0 -27
  1576. package/dist/cli-tui/ui-state.d.ts.map +0 -1
  1577. package/dist/cli-tui/ui-state.js +0 -88
  1578. package/dist/cli-tui/ui-state.js.map +0 -1
  1579. package/dist/cli-tui/update-view.d.ts +0 -16
  1580. package/dist/cli-tui/update-view.d.ts.map +0 -1
  1581. package/dist/cli-tui/update-view.js +0 -45
  1582. package/dist/cli-tui/update-view.js.map +0 -1
  1583. package/dist/cli-tui/user-message.d.ts +0 -17
  1584. package/dist/cli-tui/user-message.d.ts.map +0 -1
  1585. package/dist/cli-tui/user-message.js +0 -83
  1586. package/dist/cli-tui/user-message.js.map +0 -1
  1587. package/dist/cli-tui/utils/borders.d.ts +0 -131
  1588. package/dist/cli-tui/utils/borders.d.ts.map +0 -1
  1589. package/dist/cli-tui/utils/borders.js +0 -254
  1590. package/dist/cli-tui/utils/borders.js.map +0 -1
  1591. package/dist/cli-tui/utils/commands/command-palette-view.d.ts +0 -22
  1592. package/dist/cli-tui/utils/commands/command-palette-view.d.ts.map +0 -1
  1593. package/dist/cli-tui/utils/commands/command-palette-view.js +0 -31
  1594. package/dist/cli-tui/utils/commands/command-palette-view.js.map +0 -1
  1595. package/dist/cli-tui/utils/commands/command-palette.d.ts +0 -29
  1596. package/dist/cli-tui/utils/commands/command-palette.d.ts.map +0 -1
  1597. package/dist/cli-tui/utils/commands/command-palette.js +0 -213
  1598. package/dist/cli-tui/utils/commands/command-palette.js.map +0 -1
  1599. package/dist/cli-tui/utils/commands/command-registry-builder.d.ts +0 -8
  1600. package/dist/cli-tui/utils/commands/command-registry-builder.d.ts.map +0 -1
  1601. package/dist/cli-tui/utils/commands/command-registry-builder.js +0 -9
  1602. package/dist/cli-tui/utils/commands/command-registry-builder.js.map +0 -1
  1603. package/dist/cli-tui/utils/commands/review-prompt.d.ts +0 -10
  1604. package/dist/cli-tui/utils/commands/review-prompt.d.ts.map +0 -1
  1605. package/dist/cli-tui/utils/commands/review-prompt.js +0 -90
  1606. package/dist/cli-tui/utils/commands/review-prompt.js.map +0 -1
  1607. package/dist/cli-tui/utils/commands/slash-hint-bar.d.ts +0 -15
  1608. package/dist/cli-tui/utils/commands/slash-hint-bar.d.ts.map +0 -1
  1609. package/dist/cli-tui/utils/commands/slash-hint-bar.js +0 -106
  1610. package/dist/cli-tui/utils/commands/slash-hint-bar.js.map +0 -1
  1611. package/dist/cli-tui/utils/env-detect.d.ts +0 -11
  1612. package/dist/cli-tui/utils/env-detect.d.ts.map +0 -1
  1613. package/dist/cli-tui/utils/env-detect.js +0 -107
  1614. package/dist/cli-tui/utils/env-detect.js.map +0 -1
  1615. package/dist/cli-tui/utils/external-editor.d.ts +0 -7
  1616. package/dist/cli-tui/utils/external-editor.d.ts.map +0 -1
  1617. package/dist/cli-tui/utils/external-editor.js +0 -53
  1618. package/dist/cli-tui/utils/external-editor.js.map +0 -1
  1619. package/dist/cli-tui/utils/footer-utils.d.ts +0 -169
  1620. package/dist/cli-tui/utils/footer-utils.d.ts.map +0 -1
  1621. package/dist/cli-tui/utils/footer-utils.js +0 -716
  1622. package/dist/cli-tui/utils/footer-utils.js.map +0 -1
  1623. package/dist/cli-tui/utils/footer-visual-widgets.d.ts +0 -38
  1624. package/dist/cli-tui/utils/footer-visual-widgets.d.ts.map +0 -1
  1625. package/dist/cli-tui/utils/footer-visual-widgets.js +0 -141
  1626. package/dist/cli-tui/utils/footer-visual-widgets.js.map +0 -1
  1627. package/dist/cli-tui/utils/git-branch-tracker.d.ts +0 -38
  1628. package/dist/cli-tui/utils/git-branch-tracker.d.ts.map +0 -1
  1629. package/dist/cli-tui/utils/git-branch-tracker.js +0 -90
  1630. package/dist/cli-tui/utils/git-branch-tracker.js.map +0 -1
  1631. package/dist/cli-tui/utils/glyphs.d.ts +0 -207
  1632. package/dist/cli-tui/utils/glyphs.d.ts.map +0 -1
  1633. package/dist/cli-tui/utils/glyphs.js +0 -249
  1634. package/dist/cli-tui/utils/glyphs.js.map +0 -1
  1635. package/dist/cli-tui/utils/layout.d.ts +0 -77
  1636. package/dist/cli-tui/utils/layout.d.ts.map +0 -1
  1637. package/dist/cli-tui/utils/layout.js +0 -83
  1638. package/dist/cli-tui/utils/layout.js.map +0 -1
  1639. package/dist/cli-tui/utils/links.d.ts +0 -2
  1640. package/dist/cli-tui/utils/links.d.ts.map +0 -1
  1641. package/dist/cli-tui/utils/links.js +0 -14
  1642. package/dist/cli-tui/utils/links.js.map +0 -1
  1643. package/dist/cli-tui/utils/motion.d.ts +0 -4
  1644. package/dist/cli-tui/utils/motion.d.ts.map +0 -1
  1645. package/dist/cli-tui/utils/motion.js +0 -28
  1646. package/dist/cli-tui/utils/motion.js.map +0 -1
  1647. package/dist/cli-tui/utils/runtime-badges.d.ts +0 -26
  1648. package/dist/cli-tui/utils/runtime-badges.d.ts.map +0 -1
  1649. package/dist/cli-tui/utils/runtime-badges.js +0 -178
  1650. package/dist/cli-tui/utils/runtime-badges.js.map +0 -1
  1651. package/dist/cli-tui/utils/shimmer.d.ts +0 -12
  1652. package/dist/cli-tui/utils/shimmer.d.ts.map +0 -1
  1653. package/dist/cli-tui/utils/shimmer.js +0 -57
  1654. package/dist/cli-tui/utils/shimmer.js.map +0 -1
  1655. package/dist/cli-tui/utils/stage-labels.d.ts +0 -9
  1656. package/dist/cli-tui/utils/stage-labels.d.ts.map +0 -1
  1657. package/dist/cli-tui/utils/stage-labels.js +0 -65
  1658. package/dist/cli-tui/utils/stage-labels.js.map +0 -1
  1659. package/dist/cli-tui/utils/text-formatting.d.ts +0 -13
  1660. package/dist/cli-tui/utils/text-formatting.d.ts.map +0 -1
  1661. package/dist/cli-tui/utils/text-formatting.js +0 -109
  1662. package/dist/cli-tui/utils/text-formatting.js.map +0 -1
  1663. package/dist/cli-tui/utils/text-preview.d.ts +0 -10
  1664. package/dist/cli-tui/utils/text-preview.d.ts.map +0 -1
  1665. package/dist/cli-tui/utils/text-preview.js +0 -26
  1666. package/dist/cli-tui/utils/text-preview.js.map +0 -1
  1667. package/dist/cli-tui/utils/tool-text-utils.d.ts +0 -42
  1668. package/dist/cli-tui/utils/tool-text-utils.d.ts.map +0 -1
  1669. package/dist/cli-tui/utils/tool-text-utils.js +0 -361
  1670. package/dist/cli-tui/utils/tool-text-utils.js.map +0 -1
  1671. package/dist/cli-tui/welcome-animation.d.ts +0 -24
  1672. package/dist/cli-tui/welcome-animation.d.ts.map +0 -1
  1673. package/dist/cli-tui/welcome-animation.js +0 -99
  1674. package/dist/cli-tui/welcome-animation.js.map +0 -1
  1675. package/dist/cli-tui/welcome-colors.d.ts +0 -3
  1676. package/dist/cli-tui/welcome-colors.d.ts.map +0 -1
  1677. package/dist/cli-tui/welcome-colors.js +0 -39
  1678. package/dist/cli-tui/welcome-colors.js.map +0 -1
  1679. package/dist/node_modules/@evalops/tui/dist/autocomplete.d.ts +0 -304
  1680. package/dist/node_modules/@evalops/tui/dist/autocomplete.d.ts.map +0 -1
  1681. package/dist/node_modules/@evalops/tui/dist/autocomplete.js +0 -712
  1682. package/dist/node_modules/@evalops/tui/dist/autocomplete.js.map +0 -1
  1683. package/dist/node_modules/@evalops/tui/dist/components/editor.d.ts +0 -185
  1684. package/dist/node_modules/@evalops/tui/dist/components/editor.d.ts.map +0 -1
  1685. package/dist/node_modules/@evalops/tui/dist/components/editor.js +0 -1460
  1686. package/dist/node_modules/@evalops/tui/dist/components/editor.js.map +0 -1
  1687. package/dist/node_modules/@evalops/tui/dist/components/input.d.ts +0 -117
  1688. package/dist/node_modules/@evalops/tui/dist/components/input.d.ts.map +0 -1
  1689. package/dist/node_modules/@evalops/tui/dist/components/input.js +0 -391
  1690. package/dist/node_modules/@evalops/tui/dist/components/input.js.map +0 -1
  1691. package/dist/node_modules/@evalops/tui/dist/components/layout.d.ts +0 -256
  1692. package/dist/node_modules/@evalops/tui/dist/components/layout.d.ts.map +0 -1
  1693. package/dist/node_modules/@evalops/tui/dist/components/layout.js +0 -478
  1694. package/dist/node_modules/@evalops/tui/dist/components/layout.js.map +0 -1
  1695. package/dist/node_modules/@evalops/tui/dist/components/loader.d.ts +0 -199
  1696. package/dist/node_modules/@evalops/tui/dist/components/loader.d.ts.map +0 -1
  1697. package/dist/node_modules/@evalops/tui/dist/components/loader.js +0 -374
  1698. package/dist/node_modules/@evalops/tui/dist/components/loader.js.map +0 -1
  1699. package/dist/node_modules/@evalops/tui/dist/components/markdown.d.ts +0 -65
  1700. package/dist/node_modules/@evalops/tui/dist/components/markdown.d.ts.map +0 -1
  1701. package/dist/node_modules/@evalops/tui/dist/components/markdown.js +0 -562
  1702. package/dist/node_modules/@evalops/tui/dist/components/markdown.js.map +0 -1
  1703. package/dist/node_modules/@evalops/tui/dist/components/scroll-container.d.ts +0 -262
  1704. package/dist/node_modules/@evalops/tui/dist/components/scroll-container.d.ts.map +0 -1
  1705. package/dist/node_modules/@evalops/tui/dist/components/scroll-container.js +0 -575
  1706. package/dist/node_modules/@evalops/tui/dist/components/scroll-container.js.map +0 -1
  1707. package/dist/node_modules/@evalops/tui/dist/components/select-list.d.ts +0 -131
  1708. package/dist/node_modules/@evalops/tui/dist/components/select-list.d.ts.map +0 -1
  1709. package/dist/node_modules/@evalops/tui/dist/components/select-list.js +0 -257
  1710. package/dist/node_modules/@evalops/tui/dist/components/select-list.js.map +0 -1
  1711. package/dist/node_modules/@evalops/tui/dist/components/spacer.d.ts +0 -11
  1712. package/dist/node_modules/@evalops/tui/dist/components/spacer.d.ts.map +0 -1
  1713. package/dist/node_modules/@evalops/tui/dist/components/spacer.js +0 -19
  1714. package/dist/node_modules/@evalops/tui/dist/components/spacer.js.map +0 -1
  1715. package/dist/node_modules/@evalops/tui/dist/components/status-bar.d.ts +0 -22
  1716. package/dist/node_modules/@evalops/tui/dist/components/status-bar.d.ts.map +0 -1
  1717. package/dist/node_modules/@evalops/tui/dist/components/status-bar.js +0 -44
  1718. package/dist/node_modules/@evalops/tui/dist/components/status-bar.js.map +0 -1
  1719. package/dist/node_modules/@evalops/tui/dist/components/text.d.ts +0 -26
  1720. package/dist/node_modules/@evalops/tui/dist/components/text.d.ts.map +0 -1
  1721. package/dist/node_modules/@evalops/tui/dist/components/text.js +0 -181
  1722. package/dist/node_modules/@evalops/tui/dist/components/text.js.map +0 -1
  1723. package/dist/node_modules/@evalops/tui/dist/components/truncated-text.d.ts +0 -15
  1724. package/dist/node_modules/@evalops/tui/dist/components/truncated-text.d.ts.map +0 -1
  1725. package/dist/node_modules/@evalops/tui/dist/components/truncated-text.js +0 -84
  1726. package/dist/node_modules/@evalops/tui/dist/components/truncated-text.js.map +0 -1
  1727. package/dist/node_modules/@evalops/tui/dist/index.d.ts +0 -87
  1728. package/dist/node_modules/@evalops/tui/dist/index.d.ts.map +0 -1
  1729. package/dist/node_modules/@evalops/tui/dist/index.js +0 -85
  1730. package/dist/node_modules/@evalops/tui/dist/index.js.map +0 -1
  1731. package/dist/node_modules/@evalops/tui/dist/keymap.d.ts +0 -189
  1732. package/dist/node_modules/@evalops/tui/dist/keymap.d.ts.map +0 -1
  1733. package/dist/node_modules/@evalops/tui/dist/keymap.js +0 -363
  1734. package/dist/node_modules/@evalops/tui/dist/keymap.js.map +0 -1
  1735. package/dist/node_modules/@evalops/tui/dist/mermaid-renderer.d.ts +0 -25
  1736. package/dist/node_modules/@evalops/tui/dist/mermaid-renderer.d.ts.map +0 -1
  1737. package/dist/node_modules/@evalops/tui/dist/mermaid-renderer.js +0 -828
  1738. package/dist/node_modules/@evalops/tui/dist/mermaid-renderer.js.map +0 -1
  1739. package/dist/node_modules/@evalops/tui/dist/style/code-highlighter.d.ts +0 -40
  1740. package/dist/node_modules/@evalops/tui/dist/style/code-highlighter.d.ts.map +0 -1
  1741. package/dist/node_modules/@evalops/tui/dist/style/code-highlighter.js +0 -474
  1742. package/dist/node_modules/@evalops/tui/dist/style/code-highlighter.js.map +0 -1
  1743. package/dist/node_modules/@evalops/tui/dist/terminal.d.ts +0 -201
  1744. package/dist/node_modules/@evalops/tui/dist/terminal.d.ts.map +0 -1
  1745. package/dist/node_modules/@evalops/tui/dist/terminal.js +0 -241
  1746. package/dist/node_modules/@evalops/tui/dist/terminal.js.map +0 -1
  1747. package/dist/node_modules/@evalops/tui/dist/tui.d.ts +0 -263
  1748. package/dist/node_modules/@evalops/tui/dist/tui.d.ts.map +0 -1
  1749. package/dist/node_modules/@evalops/tui/dist/tui.js +0 -694
  1750. package/dist/node_modules/@evalops/tui/dist/tui.js.map +0 -1
  1751. package/dist/node_modules/@evalops/tui/dist/utils/terminal-features.d.ts +0 -14
  1752. package/dist/node_modules/@evalops/tui/dist/utils/terminal-features.d.ts.map +0 -1
  1753. package/dist/node_modules/@evalops/tui/dist/utils/terminal-features.js +0 -44
  1754. package/dist/node_modules/@evalops/tui/dist/utils/terminal-features.js.map +0 -1
  1755. package/dist/node_modules/@evalops/tui/dist/utils.d.ts +0 -32
  1756. package/dist/node_modules/@evalops/tui/dist/utils.d.ts.map +0 -1
  1757. package/dist/node_modules/@evalops/tui/dist/utils.js +0 -556
  1758. package/dist/node_modules/@evalops/tui/dist/utils.js.map +0 -1
  1759. package/dist/node_modules/@evalops/tui/package.json +0 -58
  1760. package/dist/skills/artifact-metadata.d.ts +0 -16
  1761. package/dist/skills/artifact-metadata.d.ts.map +0 -1
  1762. package/dist/skills/artifact-metadata.js +0 -86
  1763. package/dist/skills/artifact-metadata.js.map +0 -1
  1764. package/dist/skills/composer-diagnostics.d.ts +0 -69
  1765. package/dist/skills/composer-diagnostics.d.ts.map +0 -1
  1766. package/dist/skills/composer-diagnostics.js +0 -78
  1767. package/dist/skills/composer-diagnostics.js.map +0 -1
  1768. package/dist/skills/composer.d.ts +0 -19
  1769. package/dist/skills/composer.d.ts.map +0 -1
  1770. package/dist/skills/composer.js +0 -52
  1771. package/dist/skills/composer.js.map +0 -1
  1772. package/dist/skills/eval-harness.d.ts +0 -38
  1773. package/dist/skills/eval-harness.d.ts.map +0 -1
  1774. package/dist/skills/eval-harness.js +0 -112
  1775. package/dist/skills/eval-harness.js.map +0 -1
  1776. package/dist/skills/index.d.ts +0 -40
  1777. package/dist/skills/index.d.ts.map +0 -1
  1778. package/dist/skills/index.js +0 -40
  1779. package/dist/skills/index.js.map +0 -1
  1780. package/dist/skills/linter.d.ts +0 -36
  1781. package/dist/skills/linter.d.ts.map +0 -1
  1782. package/dist/skills/linter.js +0 -399
  1783. package/dist/skills/linter.js.map +0 -1
  1784. package/dist/skills/loader.d.ts +0 -252
  1785. package/dist/skills/loader.d.ts.map +0 -1
  1786. package/dist/skills/loader.js +0 -957
  1787. package/dist/skills/loader.js.map +0 -1
  1788. package/dist/skills/package-contract.d.ts +0 -45
  1789. package/dist/skills/package-contract.d.ts.map +0 -1
  1790. package/dist/skills/package-contract.js +0 -153
  1791. package/dist/skills/package-contract.js.map +0 -1
  1792. package/dist/skills/runtime-activation.d.ts +0 -68
  1793. package/dist/skills/runtime-activation.d.ts.map +0 -1
  1794. package/dist/skills/runtime-activation.js +0 -228
  1795. package/dist/skills/runtime-activation.js.map +0 -1
  1796. package/dist/skills/scaffold-from-template.d.ts +0 -58
  1797. package/dist/skills/scaffold-from-template.d.ts.map +0 -1
  1798. package/dist/skills/scaffold-from-template.js +0 -72
  1799. package/dist/skills/scaffold-from-template.js.map +0 -1
  1800. package/dist/skills/scaffolder.d.ts +0 -65
  1801. package/dist/skills/scaffolder.d.ts.map +0 -1
  1802. package/dist/skills/scaffolder.js +0 -167
  1803. package/dist/skills/scaffolder.js.map +0 -1
  1804. package/dist/skills/service-client.d.ts +0 -56
  1805. package/dist/skills/service-client.d.ts.map +0 -1
  1806. package/dist/skills/service-client.js +0 -266
  1807. package/dist/skills/service-client.js.map +0 -1
  1808. package/dist/skills/skill-templates.d.ts +0 -70
  1809. package/dist/skills/skill-templates.d.ts.map +0 -1
  1810. package/dist/skills/skill-templates.js +0 -154
  1811. package/dist/skills/skill-templates.js.map +0 -1
  1812. package/dist/skills/tool.d.ts +0 -21
  1813. package/dist/skills/tool.d.ts.map +0 -1
  1814. package/dist/skills/tool.js +0 -334
  1815. package/dist/skills/tool.js.map +0 -1
  1816. package/dist/skills/trust-cache.d.ts +0 -58
  1817. package/dist/skills/trust-cache.d.ts.map +0 -1
  1818. package/dist/skills/trust-cache.js +0 -130
  1819. package/dist/skills/trust-cache.js.map +0 -1
  1820. package/dist/skills/types.d.ts +0 -91
  1821. package/dist/skills/types.d.ts.map +0 -1
  1822. package/dist/skills/types.js +0 -8
  1823. package/dist/skills/types.js.map +0 -1
  1824. /package/dist/{cli-tui → runtime}/prompt-queue.d.ts +0 -0
  1825. /package/dist/{cli-tui → runtime}/prompt-queue.js +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"repo-map.js","sourceRoot":"","sources":["../../src/context/repo-map.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC9D,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,MAAM,MAAM,GAAG,YAAY,CAAC,kBAAkB,CAAC,CAAC;AA6DhD;;GAEG;AACH,MAAM,YAAY,GAA2B;IAC5C,KAAK,EAAE,YAAY;IACnB,MAAM,EAAE,YAAY;IACpB,KAAK,EAAE,YAAY;IACnB,MAAM,EAAE,YAAY;IACpB,KAAK,EAAE,QAAQ;IACf,KAAK,EAAE,MAAM;IACb,KAAK,EAAE,IAAI;IACX,KAAK,EAAE,MAAM;IACb,OAAO,EAAE,MAAM;IACf,KAAK,EAAE,QAAQ;IACf,QAAQ,EAAE,OAAO;IACjB,IAAI,EAAE,GAAG;IACT,MAAM,EAAE,KAAK;IACb,IAAI,EAAE,GAAG;IACT,MAAM,EAAE,KAAK;IACb,KAAK,EAAE,QAAQ;IACf,MAAM,EAAE,KAAK;IACb,MAAM,EAAE,KAAK;IACb,SAAS,EAAE,QAAQ;IACnB,KAAK,EAAE,UAAU;IACjB,OAAO,EAAE,MAAM;IACf,OAAO,EAAE,MAAM;IACf,MAAM,EAAE,MAAM;IACd,OAAO,EAAE,MAAM;IACf,MAAM,EAAE,KAAK;IACb,KAAK,EAAE,OAAO;IACd,OAAO,EAAE,OAAO;CAChB,CAAC;AAEF;;GAEG;AACH,MAAM,kBAAkB,GAAG;IAC1B,wCAAwC;IACxC,kDAAkD;IAClD,0CAA0C;IAC1C,WAAW;IACX,8BAA8B;IAC9B,8BAA8B;IAC9B,gBAAgB;IAChB,gBAAgB;IAChB,gBAAgB;CAChB,CAAC;AAEF;;GAEG;AACH,MAAM,eAAe,GAAG;IACvB,cAAc;IACd,OAAO;IACP,QAAQ;IACR,SAAS;IACT,UAAU;IACV,SAAS;IACT,YAAY;IACZ,aAAa;IACb,QAAQ;IACR,eAAe;IACf,QAAQ;IACR,SAAS;IACT,qBAAqB;IACrB,aAAa;CACb,CAAC;AAEF;;GAEG;AACH,SAAS,gBAAgB,CAAC,OAAe;IACxC,MAAM,OAAO,GAAsB,EAAE,CAAC;IACtC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAElC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACvC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAC5B,MAAM,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC;QAEtB,UAAU;QACV,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAC5B,+CAA+C,CAC/C,CAAC;QACF,IAAI,UAAU,EAAE,CAAC;YAChB,OAAO,CAAC,IAAI,CAAC;gBACZ,IAAI,EAAE,UAAU,CAAC,CAAC,CAAE;gBACpB,IAAI,EAAE,OAAO;gBACb,IAAI,EAAE,OAAO;gBACb,QAAQ,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;aACzB,CAAC,CAAC;YACH,SAAS;QACV,CAAC;QAED,YAAY;QACZ,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,0CAA0C,CAAC,CAAC;QACzE,IAAI,SAAS,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CAAC;gBACZ,IAAI,EAAE,SAAS,CAAC,CAAC,CAAE;gBACnB,IAAI,EAAE,UAAU;gBAChB,IAAI,EAAE,OAAO;gBACb,QAAQ,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;aACxB,CAAC,CAAC;YACH,SAAS;QACV,CAAC;QAED,oCAAoC;QACpC,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAC5B,gDAAgD,CAChD,CAAC;QACF,IAAI,UAAU,EAAE,CAAC;YAChB,OAAO,CAAC,IAAI,CAAC;gBACZ,IAAI,EAAE,UAAU,CAAC,CAAC,CAAE;gBACpB,IAAI,EAAE,UAAU;gBAChB,IAAI,EAAE,OAAO;gBACb,QAAQ,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;aACzB,CAAC,CAAC;YACH,SAAS;QACV,CAAC;QAED,aAAa;QACb,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;QACpE,IAAI,cAAc,EAAE,CAAC;YACpB,OAAO,CAAC,IAAI,CAAC;gBACZ,IAAI,EAAE,cAAc,CAAC,CAAC,CAAE;gBACxB,IAAI,EAAE,WAAW;gBACjB,IAAI,EAAE,OAAO;gBACb,QAAQ,EAAE,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC;aAC7B,CAAC,CAAC;YACH,SAAS;QACV,CAAC;QAED,QAAQ;QACR,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;QAC1D,IAAI,SAAS,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CAAC;gBACZ,IAAI,EAAE,SAAS,CAAC,CAAC,CAAE;gBACnB,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,OAAO;gBACb,QAAQ,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;aACxB,CAAC,CAAC;YACH,SAAS;QACV,CAAC;QAED,kBAAkB;QAClB,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;QACzD,IAAI,UAAU,EAAE,CAAC;YAChB,OAAO,CAAC,IAAI,CAAC;gBACZ,IAAI,EAAE,UAAU,CAAC,CAAC,CAAE;gBACpB,IAAI,EAAE,OAAO;gBACb,IAAI,EAAE,OAAO;gBACb,QAAQ,EAAE,IAAI;aACd,CAAC,CAAC;QACJ,CAAC;IACF,CAAC;IAED,OAAO,OAAO,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,SAAS,gBAAgB,CAAC,OAAe;IACxC,MAAM,OAAO,GAAsB,EAAE,CAAC;IACtC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAElC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACvC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAC5B,MAAM,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC;QAEtB,UAAU;QACV,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;QAChD,IAAI,UAAU,EAAE,CAAC;YAChB,OAAO,CAAC,IAAI,CAAC;gBACZ,IAAI,EAAE,UAAU,CAAC,CAAC,CAAE;gBACpB,IAAI,EAAE,OAAO;gBACb,IAAI,EAAE,OAAO;gBACb,QAAQ,EAAE,CAAC,UAAU,CAAC,CAAC,CAAE,CAAC,UAAU,CAAC,GAAG,CAAC;aACzC,CAAC,CAAC;YACH,SAAS;QACV,CAAC;QAED,6BAA6B;QAC7B,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;QACxD,IAAI,SAAS,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CAAC;gBACZ,IAAI,EAAE,SAAS,CAAC,CAAC,CAAE;gBACnB,IAAI,EAAE,UAAU;gBAChB,IAAI,EAAE,OAAO;gBACb,QAAQ,EAAE,CAAC,SAAS,CAAC,CAAC,CAAE,CAAC,UAAU,CAAC,GAAG,CAAC;aACxC,CAAC,CAAC;QACJ,CAAC;IACF,CAAC;IAED,OAAO,OAAO,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,SAAS,mBAAmB,CAC3B,YAAoB,EACpB,OAA0B,EAC1B,UAAoB;IAEpB,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,MAAM,QAAQ,GAAG,QAAQ,CAAC,YAAY,CAAC,CAAC;IAExC,2BAA2B;IAC3B,KAAK,MAAM,OAAO,IAAI,kBAAkB,EAAE,CAAC;QAC1C,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC5B,KAAK,IAAI,EAAE,CAAC;YACZ,MAAM;QACP,CAAC;IACF,CAAC;IAED,mCAAmC;IACnC,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACtD,KAAK,IAAI,EAAE,CAAC;IACb,CAAC;IAED,uCAAuC;IACvC,MAAM,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC;IAC/D,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,aAAa,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;IAEzC,kDAAkD;IAClD,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7C,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IAE5B,oCAAoC;IACpC,IAAI,YAAY,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,YAAY,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QACxE,KAAK,IAAI,CAAC,CAAC;IACZ,CAAC;IAED,wCAAwC;IACxC,IAAI,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QACpE,KAAK,IAAI,CAAC,CAAC;IACZ,CAAC;IAED,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AAC3B,CAAC;AAED;;GAEG;AACH,SAAS,cAAc,CAAC,IAAY;IACnC,0CAA0C;IAC1C,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACnC,CAAC;AAED;;GAEG;AACH,MAAM,gBAAgB;IACrB;;OAEG;IACH,KAAK,CAAC,QAAQ,CAAC,MAAqB;QACnC,MAAM,EACL,OAAO,EACP,SAAS,GAAG,IAAI,EAChB,UAAU,GAAG,EAAE,EACf,eAAe,GAAG,EAAE,EACpB,eAAe,GAAG,KAAK,EACvB,cAAc,GAAG,IAAI,GACrB,GAAG,MAAM,CAAC;QAEX,MAAM,UAAU,GAAG;YAClB,GAAG,eAAe;YAClB,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC;SAC5C,CAAC;QACF,MAAM,OAAO,GAAmB,EAAE,CAAC;QAEnC,6BAA6B;QAC7B,MAAM,OAAO,GAAG,CAAC,GAAW,EAAQ,EAAE;YACrC,IAAI,CAAC;gBACJ,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;gBAE/B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;oBAC1B,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;oBACjC,MAAM,YAAY,GAAG,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;oBAEjD,mBAAmB;oBACnB,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC;wBAC9D,SAAS;oBACV,CAAC;oBAED,IAAI,CAAC;wBACJ,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;wBAEhC,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;4BACxB,OAAO,CAAC,QAAQ,CAAC,CAAC;wBACnB,CAAC;6BAAM,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;4BAC1B,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;4BAC1B,MAAM,QAAQ,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;4BAEnC,IAAI,CAAC,QAAQ;gCAAE,SAAS;4BAExB,MAAM,OAAO,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;4BAChD,IAAI,OAAO,GAAsB,EAAE,CAAC;4BAEpC,oCAAoC;4BACpC,IAAI,QAAQ,KAAK,YAAY,IAAI,QAAQ,KAAK,YAAY,EAAE,CAAC;gCAC5D,OAAO,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;4BACrC,CAAC;iCAAM,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;gCAClC,OAAO,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;4BACrC,CAAC;4BAED,MAAM,UAAU,GAAG,mBAAmB,CACrC,YAAY,EACZ,OAAO,EACP,UAAU,CACV,CAAC;4BAEF,MAAM,KAAK,GAAiB;gCAC3B,IAAI,EAAE,QAAQ;gCACd,YAAY;gCACZ,IAAI,EAAE,IAAI,CAAC,IAAI;gCACf,QAAQ;gCACR,OAAO;gCACP,UAAU;6BACV,CAAC;4BAEF,8CAA8C;4BAC9C,IACC,eAAe;gCACf,IAAI,CAAC,IAAI,IAAI,cAAc;gCAC3B,UAAU,GAAG,EAAE,EACd,CAAC;gCACF,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC;4BAClD,CAAC;4BAED,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;wBACrB,CAAC;oBACF,CAAC;oBAAC,MAAM,CAAC;wBACR,2BAA2B;oBAC5B,CAAC;gBACF,CAAC;YACF,CAAC;YAAC,MAAM,CAAC;gBACR,iCAAiC;YAClC,CAAC;QACF,CAAC,CAAC;QAEF,OAAO,CAAC,OAAO,CAAC,CAAC;QAEjB,qBAAqB;QACrB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC;QAEpD,+BAA+B;QAC/B,IAAI,WAAW,GAAG,CAAC,CAAC;QACpB,MAAM,gBAAgB,GAAmB,EAAE,CAAC;QAE5C,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC7B,MAAM,WAAW,GAAG,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;YACpD,IAAI,WAAW,GAAG,WAAW,GAAG,SAAS,EAAE,CAAC;gBAC3C,MAAM;YACP,CAAC;YACD,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC7B,WAAW,IAAI,WAAW,CAAC;QAC5B,CAAC;QAED,MAAM,GAAG,GAAY;YACpB,OAAO;YACP,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACrC,UAAU,EAAE,OAAO,CAAC,MAAM;YAC1B,OAAO,EAAE,gBAAgB;YACzB,OAAO,EAAE,IAAI,CAAC,eAAe,CAAC,gBAAgB,EAAE,OAAO,CAAC,MAAM,CAAC;SAC/D,CAAC;QAEF,MAAM,CAAC,IAAI,CAAC,oBAAoB,EAAE;YACjC,UAAU,EAAE,OAAO,CAAC,MAAM;YAC1B,aAAa,EAAE,gBAAgB,CAAC,MAAM;YACtC,eAAe,EAAE,WAAW;SAC5B,CAAC,CAAC;QAEH,OAAO,GAAG,CAAC;IACZ,CAAC;IAED;;OAEG;IACK,mBAAmB,CAAC,KAAmB;QAC9C,IAAI,IAAI,GAAG,KAAK,CAAC,YAAY,CAAC;QAC9B,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAClE,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YACnB,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC;QACvB,CAAC;QACD,OAAO,cAAc,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;IAED;;OAEG;IACK,eAAe,CAAC,OAAuB,EAAE,UAAkB;QAClE,MAAM,SAAS,GAAG,IAAI,GAAG,EAAkB,CAAC;QAC5C,IAAI,YAAY,GAAG,CAAC,CAAC;QAErB,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC7B,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACxE,YAAY,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;QACtC,CAAC;QAED,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;aACjD,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;aAC3B,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;aACX,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,KAAK,KAAK,EAAE,CAAC;aAC3C,IAAI,CAAC,IAAI,CAAC,CAAC;QAEb,OAAO,GAAG,OAAO,CAAC,MAAM,IAAI,UAAU,kBAAkB,YAAY,wBAAwB,WAAW,EAAE,CAAC;IAC3G,CAAC;IAED;;OAEG;IACH,gBAAgB,CAAC,GAAY;QAC5B,MAAM,KAAK,GAAa;YACvB,yBAAyB;YACzB,EAAE;YACF,GAAG,CAAC,OAAO;YACX,EAAE;YACF,eAAe;YACf,EAAE;SACF,CAAC;QAEF,qBAAqB;QACrB,MAAM,KAAK,GAAG,IAAI,GAAG,EAA0B,CAAC;QAChD,KAAK,MAAM,KAAK,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;YACjC,MAAM,GAAG,GAAG,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC;YACxE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBACrB,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YACpB,CAAC;YACD,KAAK,CAAC,GAAG,CAAC,GAAG,CAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC7B,CAAC;QAED,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YAC9C,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC;YAC1B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBAC1B,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;gBAC7C,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO;qBAClC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC;qBACzB,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;qBACX,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;gBAErB,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAChC,KAAK,CAAC,IAAI,CAAC,KAAK,QAAQ,KAAK,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBAC5D,CAAC;qBAAM,CAAC;oBACP,KAAK,CAAC,IAAI,CAAC,KAAK,QAAQ,EAAE,CAAC,CAAC;gBAC7B,CAAC;YACF,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAChB,CAAC;QAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzB,CAAC;IAED;;OAEG;IACH,gBAAgB,CAAC,GAAY,EAAE,KAAa;QAC3C,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;QACvC,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAEtC,OAAO,GAAG,CAAC,OAAO;aAChB,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE;YACjB,MAAM,UAAU,GAAG;gBAClB,KAAK,CAAC,YAAY;gBAClB,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;aACnC;iBACC,IAAI,CAAC,GAAG,CAAC;iBACT,WAAW,EAAE,CAAC;YAEhB,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;QACxD,CAAC,CAAC;aACD,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAChB,CAAC;CACD;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,IAAI,gBAAgB,EAAE,CAAC;AAE9C;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACxC,OAAe,EACf,UAAqB,EACrB,SAAS,GAAG,IAAI;IAEhB,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC;QAClC,OAAO;QACP,UAAU;QACV,SAAS;KACT,CAAC,CAAC;IACH,OAAO,OAAO,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;AACtC,CAAC","sourcesContent":["/**\n * Repository Map Generator\n *\n * Generates a structural overview of the codebase to provide better context\n * to the model. Inspired by Aider's repo-map feature.\n *\n * ## Features\n *\n * - Extracts file structure with important symbols\n * - Identifies key files (entry points, configs, types)\n * - Ranks files by importance and relevance\n * - Generates concise summaries within token budgets\n *\n * ## Usage\n *\n * ```typescript\n * import { repoMap } from \"./repo-map.js\";\n *\n * // Generate map for current directory\n * const map = await repoMap.generate({\n * rootDir: process.cwd(),\n * maxTokens: 4000,\n * focusFiles: [\"src/main.ts\"],\n * });\n *\n * // Get map as context string\n * const context = repoMap.formatForContext(map);\n * ```\n */\n\nimport { readFileSync, readdirSync, statSync } from \"node:fs\";\nimport { basename, extname, join, relative } from \"node:path\";\nimport { createLogger } from \"../utils/logger.js\";\n\nconst logger = createLogger(\"context:repo-map\");\n\n/**\n * Symbol extracted from a file\n */\nexport interface ExtractedSymbol {\n\tname: string;\n\tkind:\n\t\t| \"class\"\n\t\t| \"function\"\n\t\t| \"interface\"\n\t\t| \"type\"\n\t\t| \"const\"\n\t\t| \"export\"\n\t\t| \"import\";\n\tline: number;\n\texported: boolean;\n}\n\n/**\n * File entry in the repo map\n */\nexport interface RepoMapEntry {\n\tpath: string;\n\trelativePath: string;\n\tsize: number;\n\tlanguage: string;\n\tsymbols: ExtractedSymbol[];\n\timportance: number;\n\tsummary?: string;\n}\n\n/**\n * Repo map configuration\n */\nexport interface RepoMapConfig {\n\t/** Root directory to map */\n\trootDir: string;\n\t/** Maximum tokens for the map */\n\tmaxTokens?: number;\n\t/** Files to focus on (boost importance) */\n\tfocusFiles?: string[];\n\t/** File patterns to exclude */\n\texcludePatterns?: string[];\n\t/** Include file contents for small files */\n\tincludeContents?: boolean;\n\t/** Max file size to include contents (bytes) */\n\tmaxContentSize?: number;\n}\n\n/**\n * Generated repo map\n */\nexport interface RepoMap {\n\trootDir: string;\n\tgeneratedAt: string;\n\ttotalFiles: number;\n\tentries: RepoMapEntry[];\n\tsummary: string;\n}\n\n/**\n * Language detection by extension\n */\nconst LANGUAGE_MAP: Record<string, string> = {\n\t\".ts\": \"typescript\",\n\t\".tsx\": \"typescript\",\n\t\".js\": \"javascript\",\n\t\".jsx\": \"javascript\",\n\t\".py\": \"python\",\n\t\".rb\": \"ruby\",\n\t\".go\": \"go\",\n\t\".rs\": \"rust\",\n\t\".java\": \"java\",\n\t\".kt\": \"kotlin\",\n\t\".swift\": \"swift\",\n\t\".c\": \"c\",\n\t\".cpp\": \"cpp\",\n\t\".h\": \"c\",\n\t\".hpp\": \"cpp\",\n\t\".cs\": \"csharp\",\n\t\".php\": \"php\",\n\t\".vue\": \"vue\",\n\t\".svelte\": \"svelte\",\n\t\".md\": \"markdown\",\n\t\".json\": \"json\",\n\t\".yaml\": \"yaml\",\n\t\".yml\": \"yaml\",\n\t\".toml\": \"toml\",\n\t\".sql\": \"sql\",\n\t\".sh\": \"shell\",\n\t\".bash\": \"shell\",\n};\n\n/**\n * Important file patterns (boost importance score)\n */\nconst IMPORTANT_PATTERNS = [\n\t/^(main|index|app|server|cli)\\.[jt]sx?$/,\n\t/^(package|cargo|go\\.mod|requirements|Gemfile).*$/,\n\t/^(tsconfig|webpack|vite|rollup).*\\.json$/,\n\t/^\\.env.*$/,\n\t/^(Dockerfile|docker-compose)/,\n\t/^(README|CHANGELOG|LICENSE)/i,\n\t/types?\\.[jt]s$/,\n\t/schema\\.[jt]s$/,\n\t/config\\.[jt]s$/,\n];\n\n/**\n * Patterns to exclude from mapping\n */\nconst DEFAULT_EXCLUDE = [\n\t/node_modules/,\n\t/\\.git/,\n\t/dist\\//,\n\t/build\\//,\n\t/\\.next\\//,\n\t/\\.cache/,\n\t/coverage\\//,\n\t/__pycache__/,\n\t/\\.pyc$/,\n\t/\\.min\\.[jt]s$/,\n\t/\\.map$/,\n\t/\\.lock$/,\n\t/package-lock\\.json$/,\n\t/yarn\\.lock$/,\n];\n\n/**\n * Extract symbols from TypeScript/JavaScript content\n */\nfunction extractTSSymbols(content: string): ExtractedSymbol[] {\n\tconst symbols: ExtractedSymbol[] = [];\n\tconst lines = content.split(\"\\n\");\n\n\tfor (let i = 0; i < lines.length; i++) {\n\t\tconst line = lines[i] || \"\";\n\t\tconst lineNum = i + 1;\n\n\t\t// Classes\n\t\tconst classMatch = line.match(\n\t\t\t/^(export\\s+)?(class|abstract\\s+class)\\s+(\\w+)/,\n\t\t);\n\t\tif (classMatch) {\n\t\t\tsymbols.push({\n\t\t\t\tname: classMatch[3]!,\n\t\t\t\tkind: \"class\",\n\t\t\t\tline: lineNum,\n\t\t\t\texported: !!classMatch[1],\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Functions\n\t\tconst funcMatch = line.match(/^(export\\s+)?(async\\s+)?function\\s+(\\w+)/);\n\t\tif (funcMatch) {\n\t\t\tsymbols.push({\n\t\t\t\tname: funcMatch[3]!,\n\t\t\t\tkind: \"function\",\n\t\t\t\tline: lineNum,\n\t\t\t\texported: !!funcMatch[1],\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Arrow functions assigned to const\n\t\tconst arrowMatch = line.match(\n\t\t\t/^(export\\s+)?const\\s+(\\w+)\\s*=\\s*(async\\s+)?\\(/,\n\t\t);\n\t\tif (arrowMatch) {\n\t\t\tsymbols.push({\n\t\t\t\tname: arrowMatch[2]!,\n\t\t\t\tkind: \"function\",\n\t\t\t\tline: lineNum,\n\t\t\t\texported: !!arrowMatch[1],\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Interfaces\n\t\tconst interfaceMatch = line.match(/^(export\\s+)?interface\\s+(\\w+)/);\n\t\tif (interfaceMatch) {\n\t\t\tsymbols.push({\n\t\t\t\tname: interfaceMatch[2]!,\n\t\t\t\tkind: \"interface\",\n\t\t\t\tline: lineNum,\n\t\t\t\texported: !!interfaceMatch[1],\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Types\n\t\tconst typeMatch = line.match(/^(export\\s+)?type\\s+(\\w+)/);\n\t\tif (typeMatch) {\n\t\t\tsymbols.push({\n\t\t\t\tname: typeMatch[2]!,\n\t\t\t\tkind: \"type\",\n\t\t\t\tline: lineNum,\n\t\t\t\texported: !!typeMatch[1],\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Exported consts\n\t\tconst constMatch = line.match(/^export\\s+const\\s+(\\w+)/);\n\t\tif (constMatch) {\n\t\t\tsymbols.push({\n\t\t\t\tname: constMatch[1]!,\n\t\t\t\tkind: \"const\",\n\t\t\t\tline: lineNum,\n\t\t\t\texported: true,\n\t\t\t});\n\t\t}\n\t}\n\n\treturn symbols;\n}\n\n/**\n * Extract symbols from Python content\n */\nfunction extractPySymbols(content: string): ExtractedSymbol[] {\n\tconst symbols: ExtractedSymbol[] = [];\n\tconst lines = content.split(\"\\n\");\n\n\tfor (let i = 0; i < lines.length; i++) {\n\t\tconst line = lines[i] || \"\";\n\t\tconst lineNum = i + 1;\n\n\t\t// Classes\n\t\tconst classMatch = line.match(/^class\\s+(\\w+)/);\n\t\tif (classMatch) {\n\t\t\tsymbols.push({\n\t\t\t\tname: classMatch[1]!,\n\t\t\t\tkind: \"class\",\n\t\t\t\tline: lineNum,\n\t\t\t\texported: !classMatch[1]!.startsWith(\"_\"),\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Functions (top-level only)\n\t\tconst funcMatch = line.match(/^(async\\s+)?def\\s+(\\w+)/);\n\t\tif (funcMatch) {\n\t\t\tsymbols.push({\n\t\t\t\tname: funcMatch[2]!,\n\t\t\t\tkind: \"function\",\n\t\t\t\tline: lineNum,\n\t\t\t\texported: !funcMatch[2]!.startsWith(\"_\"),\n\t\t\t});\n\t\t}\n\t}\n\n\treturn symbols;\n}\n\n/**\n * Calculate importance score for a file\n */\nfunction calculateImportance(\n\trelativePath: string,\n\tsymbols: ExtractedSymbol[],\n\tfocusFiles: string[],\n): number {\n\tlet score = 0;\n\tconst filename = basename(relativePath);\n\n\t// Check important patterns\n\tfor (const pattern of IMPORTANT_PATTERNS) {\n\t\tif (pattern.test(filename)) {\n\t\t\tscore += 10;\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Focus files get highest priority\n\tif (focusFiles.some((f) => relativePath.includes(f))) {\n\t\tscore += 50;\n\t}\n\n\t// Exported symbols increase importance\n\tconst exportedCount = symbols.filter((s) => s.exported).length;\n\tscore += Math.min(exportedCount * 2, 20);\n\n\t// Depth penalty (deeper files are less important)\n\tconst depth = relativePath.split(\"/\").length;\n\tscore -= Math.min(depth, 5);\n\n\t// Boost for entry-point directories\n\tif (relativePath.startsWith(\"src/\") || relativePath.startsWith(\"lib/\")) {\n\t\tscore += 5;\n\t}\n\n\t// Boost for test files (useful context)\n\tif (relativePath.includes(\"test\") || relativePath.includes(\"spec\")) {\n\t\tscore += 3;\n\t}\n\n\treturn Math.max(score, 0);\n}\n\n/**\n * Estimate tokens for a string (rough approximation)\n */\nfunction estimateTokens(text: string): number {\n\t// Rough estimate: ~4 characters per token\n\treturn Math.ceil(text.length / 4);\n}\n\n/**\n * Repo map generator class\n */\nclass RepoMapGenerator {\n\t/**\n\t * Generate a repo map\n\t */\n\tasync generate(config: RepoMapConfig): Promise<RepoMap> {\n\t\tconst {\n\t\t\trootDir,\n\t\t\tmaxTokens = 4000,\n\t\t\tfocusFiles = [],\n\t\t\texcludePatterns = [],\n\t\t\tincludeContents = false,\n\t\t\tmaxContentSize = 2000,\n\t\t} = config;\n\n\t\tconst allExclude = [\n\t\t\t...DEFAULT_EXCLUDE,\n\t\t\t...excludePatterns.map((p) => new RegExp(p)),\n\t\t];\n\t\tconst entries: RepoMapEntry[] = [];\n\n\t\t// Recursively scan directory\n\t\tconst scanDir = (dir: string): void => {\n\t\t\ttry {\n\t\t\t\tconst items = readdirSync(dir);\n\n\t\t\t\tfor (const item of items) {\n\t\t\t\t\tconst fullPath = join(dir, item);\n\t\t\t\t\tconst relativePath = relative(rootDir, fullPath);\n\n\t\t\t\t\t// Check exclusions\n\t\t\t\t\tif (allExclude.some((pattern) => pattern.test(relativePath))) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst stat = statSync(fullPath);\n\n\t\t\t\t\t\tif (stat.isDirectory()) {\n\t\t\t\t\t\t\tscanDir(fullPath);\n\t\t\t\t\t\t} else if (stat.isFile()) {\n\t\t\t\t\t\t\tconst ext = extname(item);\n\t\t\t\t\t\t\tconst language = LANGUAGE_MAP[ext];\n\n\t\t\t\t\t\t\tif (!language) continue;\n\n\t\t\t\t\t\t\tconst content = readFileSync(fullPath, \"utf-8\");\n\t\t\t\t\t\t\tlet symbols: ExtractedSymbol[] = [];\n\n\t\t\t\t\t\t\t// Extract symbols based on language\n\t\t\t\t\t\t\tif (language === \"typescript\" || language === \"javascript\") {\n\t\t\t\t\t\t\t\tsymbols = extractTSSymbols(content);\n\t\t\t\t\t\t\t} else if (language === \"python\") {\n\t\t\t\t\t\t\t\tsymbols = extractPySymbols(content);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tconst importance = calculateImportance(\n\t\t\t\t\t\t\t\trelativePath,\n\t\t\t\t\t\t\t\tsymbols,\n\t\t\t\t\t\t\t\tfocusFiles,\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\tconst entry: RepoMapEntry = {\n\t\t\t\t\t\t\t\tpath: fullPath,\n\t\t\t\t\t\t\t\trelativePath,\n\t\t\t\t\t\t\t\tsize: stat.size,\n\t\t\t\t\t\t\t\tlanguage,\n\t\t\t\t\t\t\t\tsymbols,\n\t\t\t\t\t\t\t\timportance,\n\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t// Include contents for small, important files\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\tincludeContents &&\n\t\t\t\t\t\t\t\tstat.size <= maxContentSize &&\n\t\t\t\t\t\t\t\timportance > 10\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tentry.summary = content.slice(0, maxContentSize);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tentries.push(entry);\n\t\t\t\t\t\t}\n\t\t\t\t\t} catch {\n\t\t\t\t\t\t// Skip files we can't read\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch {\n\t\t\t\t// Skip directories we can't read\n\t\t\t}\n\t\t};\n\n\t\tscanDir(rootDir);\n\n\t\t// Sort by importance\n\t\tentries.sort((a, b) => b.importance - a.importance);\n\n\t\t// Truncate to fit token budget\n\t\tlet totalTokens = 0;\n\t\tconst truncatedEntries: RepoMapEntry[] = [];\n\n\t\tfor (const entry of entries) {\n\t\t\tconst entryTokens = this.estimateEntryTokens(entry);\n\t\t\tif (totalTokens + entryTokens > maxTokens) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\ttruncatedEntries.push(entry);\n\t\t\ttotalTokens += entryTokens;\n\t\t}\n\n\t\tconst map: RepoMap = {\n\t\t\trootDir,\n\t\t\tgeneratedAt: new Date().toISOString(),\n\t\t\ttotalFiles: entries.length,\n\t\t\tentries: truncatedEntries,\n\t\t\tsummary: this.generateSummary(truncatedEntries, entries.length),\n\t\t};\n\n\t\tlogger.info(\"Repo map generated\", {\n\t\t\ttotalFiles: entries.length,\n\t\t\tincludedFiles: truncatedEntries.length,\n\t\t\testimatedTokens: totalTokens,\n\t\t});\n\n\t\treturn map;\n\t}\n\n\t/**\n\t * Estimate tokens for an entry\n\t */\n\tprivate estimateEntryTokens(entry: RepoMapEntry): number {\n\t\tlet text = entry.relativePath;\n\t\ttext += entry.symbols.map((s) => `${s.kind} ${s.name}`).join(\" \");\n\t\tif (entry.summary) {\n\t\t\ttext += entry.summary;\n\t\t}\n\t\treturn estimateTokens(text);\n\t}\n\n\t/**\n\t * Generate summary text\n\t */\n\tprivate generateSummary(entries: RepoMapEntry[], totalFiles: number): string {\n\t\tconst languages = new Map<string, number>();\n\t\tlet totalSymbols = 0;\n\n\t\tfor (const entry of entries) {\n\t\t\tlanguages.set(entry.language, (languages.get(entry.language) || 0) + 1);\n\t\t\ttotalSymbols += entry.symbols.length;\n\t\t}\n\n\t\tconst langSummary = Array.from(languages.entries())\n\t\t\t.sort((a, b) => b[1] - a[1])\n\t\t\t.slice(0, 5)\n\t\t\t.map(([lang, count]) => `${lang}: ${count}`)\n\t\t\t.join(\", \");\n\n\t\treturn `${entries.length}/${totalFiles} files mapped, ${totalSymbols} symbols. Languages: ${langSummary}`;\n\t}\n\n\t/**\n\t * Format repo map for use as context\n\t */\n\tformatForContext(map: RepoMap): string {\n\t\tconst lines: string[] = [\n\t\t\t\"## Repository Structure\",\n\t\t\t\"\",\n\t\t\tmap.summary,\n\t\t\t\"\",\n\t\t\t\"### Key Files\",\n\t\t\t\"\",\n\t\t];\n\n\t\t// Group by directory\n\t\tconst byDir = new Map<string, RepoMapEntry[]>();\n\t\tfor (const entry of map.entries) {\n\t\t\tconst dir = entry.relativePath.split(\"/\").slice(0, -1).join(\"/\") || \".\";\n\t\t\tif (!byDir.has(dir)) {\n\t\t\t\tbyDir.set(dir, []);\n\t\t\t}\n\t\t\tbyDir.get(dir)!.push(entry);\n\t\t}\n\n\t\tfor (const [dir, files] of Array.from(byDir)) {\n\t\t\tlines.push(`**${dir}/**`);\n\t\t\tfor (const file of files) {\n\t\t\t\tconst filename = basename(file.relativePath);\n\t\t\t\tconst exportedSymbols = file.symbols\n\t\t\t\t\t.filter((s) => s.exported)\n\t\t\t\t\t.slice(0, 5)\n\t\t\t\t\t.map((s) => s.name);\n\n\t\t\t\tif (exportedSymbols.length > 0) {\n\t\t\t\t\tlines.push(`- ${filename}: ${exportedSymbols.join(\", \")}`);\n\t\t\t\t} else {\n\t\t\t\t\tlines.push(`- ${filename}`);\n\t\t\t\t}\n\t\t\t}\n\t\t\tlines.push(\"\");\n\t\t}\n\n\t\treturn lines.join(\"\\n\");\n\t}\n\n\t/**\n\t * Get relevant files for a query\n\t */\n\tgetRelevantFiles(map: RepoMap, query: string): RepoMapEntry[] {\n\t\tconst queryLower = query.toLowerCase();\n\t\tconst terms = queryLower.split(/\\s+/);\n\n\t\treturn map.entries\n\t\t\t.filter((entry) => {\n\t\t\t\tconst searchText = [\n\t\t\t\t\tentry.relativePath,\n\t\t\t\t\t...entry.symbols.map((s) => s.name),\n\t\t\t\t]\n\t\t\t\t\t.join(\" \")\n\t\t\t\t\t.toLowerCase();\n\n\t\t\t\treturn terms.some((term) => searchText.includes(term));\n\t\t\t})\n\t\t\t.slice(0, 10);\n\t}\n}\n\n/**\n * Global repo map generator instance\n */\nexport const repoMap = new RepoMapGenerator();\n\n/**\n * Quick function to generate context for a directory\n */\nexport async function generateRepoContext(\n\trootDir: string,\n\tfocusFiles?: string[],\n\tmaxTokens = 4000,\n): Promise<string> {\n\tconst map = await repoMap.generate({\n\t\trootDir,\n\t\tfocusFiles,\n\t\tmaxTokens,\n\t});\n\treturn repoMap.formatForContext(map);\n}\n"]}
1
+ {"version":3,"file":"repo-map.js","sourceRoot":"","sources":["../../src/context/repo-map.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Repository Map Generator\n *\n * Generates a structural overview of the codebase to provide better context\n * to the model. Inspired by Aider's repo-map feature.\n *\n * ## Features\n *\n * - Extracts file structure with important symbols\n * - Identifies key files (entry points, configs, types)\n * - Ranks files by importance and relevance\n * - Generates concise summaries within token budgets\n *\n * ## Usage\n *\n * ```typescript\n * import { repoMap } from \"./repo-map.js\";\n *\n * // Generate map for current directory\n * const map = await repoMap.generate({\n * rootDir: process.cwd(),\n * maxTokens: 4000,\n * focusFiles: [\"src/main.ts\"],\n * });\n *\n * // Get map as context string\n * const context = repoMap.formatForContext(map);\n * ```\n */\n\nimport { readFileSync, readdirSync, statSync } from \"node:fs\";\nimport { basename, extname, join, relative } from \"node:path\";\nimport { estimateTokens } from \"@evalops/contracts\";\nimport { createLogger } from \"../utils/logger.js\";\n\nconst logger = createLogger(\"context:repo-map\");\n\n/**\n * Symbol extracted from a file\n */\nexport interface ExtractedSymbol {\n\tname: string;\n\tkind:\n\t\t| \"class\"\n\t\t| \"function\"\n\t\t| \"interface\"\n\t\t| \"type\"\n\t\t| \"const\"\n\t\t| \"export\"\n\t\t| \"import\";\n\tline: number;\n\texported: boolean;\n}\n\n/**\n * File entry in the repo map\n */\nexport interface RepoMapEntry {\n\tpath: string;\n\trelativePath: string;\n\tsize: number;\n\tlanguage: string;\n\tsymbols: ExtractedSymbol[];\n\timportance: number;\n\tsummary?: string;\n}\n\n/**\n * Repo map configuration\n */\nexport interface RepoMapConfig {\n\t/** Root directory to map */\n\trootDir: string;\n\t/** Maximum tokens for the map */\n\tmaxTokens?: number;\n\t/** Files to focus on (boost importance) */\n\tfocusFiles?: string[];\n\t/** File patterns to exclude */\n\texcludePatterns?: string[];\n\t/** Include file contents for small files */\n\tincludeContents?: boolean;\n\t/** Max file size to include contents (bytes) */\n\tmaxContentSize?: number;\n}\n\n/**\n * Generated repo map\n */\nexport interface RepoMap {\n\trootDir: string;\n\tgeneratedAt: string;\n\ttotalFiles: number;\n\tentries: RepoMapEntry[];\n\tsummary: string;\n}\n\n/**\n * Language detection by extension\n */\nconst LANGUAGE_MAP: Record<string, string> = {\n\t\".ts\": \"typescript\",\n\t\".tsx\": \"typescript\",\n\t\".js\": \"javascript\",\n\t\".jsx\": \"javascript\",\n\t\".py\": \"python\",\n\t\".rb\": \"ruby\",\n\t\".go\": \"go\",\n\t\".rs\": \"rust\",\n\t\".java\": \"java\",\n\t\".kt\": \"kotlin\",\n\t\".swift\": \"swift\",\n\t\".c\": \"c\",\n\t\".cpp\": \"cpp\",\n\t\".h\": \"c\",\n\t\".hpp\": \"cpp\",\n\t\".cs\": \"csharp\",\n\t\".php\": \"php\",\n\t\".vue\": \"vue\",\n\t\".svelte\": \"svelte\",\n\t\".md\": \"markdown\",\n\t\".json\": \"json\",\n\t\".yaml\": \"yaml\",\n\t\".yml\": \"yaml\",\n\t\".toml\": \"toml\",\n\t\".sql\": \"sql\",\n\t\".sh\": \"shell\",\n\t\".bash\": \"shell\",\n};\n\n/**\n * Important file patterns (boost importance score)\n */\nconst IMPORTANT_PATTERNS = [\n\t/^(main|index|app|server|cli)\\.[jt]sx?$/,\n\t/^(package|cargo|go\\.mod|requirements|Gemfile).*$/,\n\t/^(tsconfig|webpack|vite|rollup).*\\.json$/,\n\t/^\\.env.*$/,\n\t/^(Dockerfile|docker-compose)/,\n\t/^(README|CHANGELOG|LICENSE)/i,\n\t/types?\\.[jt]s$/,\n\t/schema\\.[jt]s$/,\n\t/config\\.[jt]s$/,\n];\n\n/**\n * Patterns to exclude from mapping\n */\nconst DEFAULT_EXCLUDE = [\n\t/node_modules/,\n\t/\\.git/,\n\t/dist\\//,\n\t/build\\//,\n\t/\\.next\\//,\n\t/\\.cache/,\n\t/coverage\\//,\n\t/__pycache__/,\n\t/\\.pyc$/,\n\t/\\.min\\.[jt]s$/,\n\t/\\.map$/,\n\t/\\.lock$/,\n\t/package-lock\\.json$/,\n\t/yarn\\.lock$/,\n];\n\n/**\n * Extract symbols from TypeScript/JavaScript content\n */\nfunction extractTSSymbols(content: string): ExtractedSymbol[] {\n\tconst symbols: ExtractedSymbol[] = [];\n\tconst lines = content.split(\"\\n\");\n\n\tfor (let i = 0; i < lines.length; i++) {\n\t\tconst line = lines[i] || \"\";\n\t\tconst lineNum = i + 1;\n\n\t\t// Classes\n\t\tconst classMatch = line.match(\n\t\t\t/^(export\\s+)?(class|abstract\\s+class)\\s+(\\w+)/,\n\t\t);\n\t\tif (classMatch) {\n\t\t\tsymbols.push({\n\t\t\t\tname: classMatch[3]!,\n\t\t\t\tkind: \"class\",\n\t\t\t\tline: lineNum,\n\t\t\t\texported: !!classMatch[1],\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Functions\n\t\tconst funcMatch = line.match(/^(export\\s+)?(async\\s+)?function\\s+(\\w+)/);\n\t\tif (funcMatch) {\n\t\t\tsymbols.push({\n\t\t\t\tname: funcMatch[3]!,\n\t\t\t\tkind: \"function\",\n\t\t\t\tline: lineNum,\n\t\t\t\texported: !!funcMatch[1],\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Arrow functions assigned to const\n\t\tconst arrowMatch = line.match(\n\t\t\t/^(export\\s+)?const\\s+(\\w+)\\s*=\\s*(async\\s+)?\\(/,\n\t\t);\n\t\tif (arrowMatch) {\n\t\t\tsymbols.push({\n\t\t\t\tname: arrowMatch[2]!,\n\t\t\t\tkind: \"function\",\n\t\t\t\tline: lineNum,\n\t\t\t\texported: !!arrowMatch[1],\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Interfaces\n\t\tconst interfaceMatch = line.match(/^(export\\s+)?interface\\s+(\\w+)/);\n\t\tif (interfaceMatch) {\n\t\t\tsymbols.push({\n\t\t\t\tname: interfaceMatch[2]!,\n\t\t\t\tkind: \"interface\",\n\t\t\t\tline: lineNum,\n\t\t\t\texported: !!interfaceMatch[1],\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Types\n\t\tconst typeMatch = line.match(/^(export\\s+)?type\\s+(\\w+)/);\n\t\tif (typeMatch) {\n\t\t\tsymbols.push({\n\t\t\t\tname: typeMatch[2]!,\n\t\t\t\tkind: \"type\",\n\t\t\t\tline: lineNum,\n\t\t\t\texported: !!typeMatch[1],\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Exported consts\n\t\tconst constMatch = line.match(/^export\\s+const\\s+(\\w+)/);\n\t\tif (constMatch) {\n\t\t\tsymbols.push({\n\t\t\t\tname: constMatch[1]!,\n\t\t\t\tkind: \"const\",\n\t\t\t\tline: lineNum,\n\t\t\t\texported: true,\n\t\t\t});\n\t\t}\n\t}\n\n\treturn symbols;\n}\n\n/**\n * Extract symbols from Python content\n */\nfunction extractPySymbols(content: string): ExtractedSymbol[] {\n\tconst symbols: ExtractedSymbol[] = [];\n\tconst lines = content.split(\"\\n\");\n\n\tfor (let i = 0; i < lines.length; i++) {\n\t\tconst line = lines[i] || \"\";\n\t\tconst lineNum = i + 1;\n\n\t\t// Classes\n\t\tconst classMatch = line.match(/^class\\s+(\\w+)/);\n\t\tif (classMatch) {\n\t\t\tsymbols.push({\n\t\t\t\tname: classMatch[1]!,\n\t\t\t\tkind: \"class\",\n\t\t\t\tline: lineNum,\n\t\t\t\texported: !classMatch[1]!.startsWith(\"_\"),\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Functions (top-level only)\n\t\tconst funcMatch = line.match(/^(async\\s+)?def\\s+(\\w+)/);\n\t\tif (funcMatch) {\n\t\t\tsymbols.push({\n\t\t\t\tname: funcMatch[2]!,\n\t\t\t\tkind: \"function\",\n\t\t\t\tline: lineNum,\n\t\t\t\texported: !funcMatch[2]!.startsWith(\"_\"),\n\t\t\t});\n\t\t}\n\t}\n\n\treturn symbols;\n}\n\n/**\n * Calculate importance score for a file\n */\nfunction calculateImportance(\n\trelativePath: string,\n\tsymbols: ExtractedSymbol[],\n\tfocusFiles: string[],\n): number {\n\tlet score = 0;\n\tconst filename = basename(relativePath);\n\n\t// Check important patterns\n\tfor (const pattern of IMPORTANT_PATTERNS) {\n\t\tif (pattern.test(filename)) {\n\t\t\tscore += 10;\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Focus files get highest priority\n\tif (focusFiles.some((f) => relativePath.includes(f))) {\n\t\tscore += 50;\n\t}\n\n\t// Exported symbols increase importance\n\tconst exportedCount = symbols.filter((s) => s.exported).length;\n\tscore += Math.min(exportedCount * 2, 20);\n\n\t// Depth penalty (deeper files are less important)\n\tconst depth = relativePath.split(\"/\").length;\n\tscore -= Math.min(depth, 5);\n\n\t// Boost for entry-point directories\n\tif (relativePath.startsWith(\"src/\") || relativePath.startsWith(\"lib/\")) {\n\t\tscore += 5;\n\t}\n\n\t// Boost for test files (useful context)\n\tif (relativePath.includes(\"test\") || relativePath.includes(\"spec\")) {\n\t\tscore += 3;\n\t}\n\n\treturn Math.max(score, 0);\n}\n\n/**\n * Repo map generator class\n */\nclass RepoMapGenerator {\n\t/**\n\t * Generate a repo map\n\t */\n\tasync generate(config: RepoMapConfig): Promise<RepoMap> {\n\t\tconst {\n\t\t\trootDir,\n\t\t\tmaxTokens = 4000,\n\t\t\tfocusFiles = [],\n\t\t\texcludePatterns = [],\n\t\t\tincludeContents = false,\n\t\t\tmaxContentSize = 2000,\n\t\t} = config;\n\n\t\tconst allExclude = [\n\t\t\t...DEFAULT_EXCLUDE,\n\t\t\t...excludePatterns.map((p) => new RegExp(p)),\n\t\t];\n\t\tconst entries: RepoMapEntry[] = [];\n\n\t\t// Recursively scan directory\n\t\tconst scanDir = (dir: string): void => {\n\t\t\ttry {\n\t\t\t\tconst items = readdirSync(dir);\n\n\t\t\t\tfor (const item of items) {\n\t\t\t\t\tconst fullPath = join(dir, item);\n\t\t\t\t\tconst relativePath = relative(rootDir, fullPath);\n\n\t\t\t\t\t// Check exclusions\n\t\t\t\t\tif (allExclude.some((pattern) => pattern.test(relativePath))) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst stat = statSync(fullPath);\n\n\t\t\t\t\t\tif (stat.isDirectory()) {\n\t\t\t\t\t\t\tscanDir(fullPath);\n\t\t\t\t\t\t} else if (stat.isFile()) {\n\t\t\t\t\t\t\tconst ext = extname(item);\n\t\t\t\t\t\t\tconst language = LANGUAGE_MAP[ext];\n\n\t\t\t\t\t\t\tif (!language) continue;\n\n\t\t\t\t\t\t\tconst content = readFileSync(fullPath, \"utf-8\");\n\t\t\t\t\t\t\tlet symbols: ExtractedSymbol[] = [];\n\n\t\t\t\t\t\t\t// Extract symbols based on language\n\t\t\t\t\t\t\tif (language === \"typescript\" || language === \"javascript\") {\n\t\t\t\t\t\t\t\tsymbols = extractTSSymbols(content);\n\t\t\t\t\t\t\t} else if (language === \"python\") {\n\t\t\t\t\t\t\t\tsymbols = extractPySymbols(content);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tconst importance = calculateImportance(\n\t\t\t\t\t\t\t\trelativePath,\n\t\t\t\t\t\t\t\tsymbols,\n\t\t\t\t\t\t\t\tfocusFiles,\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\tconst entry: RepoMapEntry = {\n\t\t\t\t\t\t\t\tpath: fullPath,\n\t\t\t\t\t\t\t\trelativePath,\n\t\t\t\t\t\t\t\tsize: stat.size,\n\t\t\t\t\t\t\t\tlanguage,\n\t\t\t\t\t\t\t\tsymbols,\n\t\t\t\t\t\t\t\timportance,\n\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t// Include contents for small, important files\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\tincludeContents &&\n\t\t\t\t\t\t\t\tstat.size <= maxContentSize &&\n\t\t\t\t\t\t\t\timportance > 10\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tentry.summary = content.slice(0, maxContentSize);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tentries.push(entry);\n\t\t\t\t\t\t}\n\t\t\t\t\t} catch {\n\t\t\t\t\t\t// Skip files we can't read\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch {\n\t\t\t\t// Skip directories we can't read\n\t\t\t}\n\t\t};\n\n\t\tscanDir(rootDir);\n\n\t\t// Sort by importance\n\t\tentries.sort((a, b) => b.importance - a.importance);\n\n\t\t// Truncate to fit token budget\n\t\tlet totalTokens = 0;\n\t\tconst truncatedEntries: RepoMapEntry[] = [];\n\n\t\tfor (const entry of entries) {\n\t\t\tconst entryTokens = this.estimateEntryTokens(entry);\n\t\t\tif (totalTokens + entryTokens > maxTokens) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\ttruncatedEntries.push(entry);\n\t\t\ttotalTokens += entryTokens;\n\t\t}\n\n\t\tconst map: RepoMap = {\n\t\t\trootDir,\n\t\t\tgeneratedAt: new Date().toISOString(),\n\t\t\ttotalFiles: entries.length,\n\t\t\tentries: truncatedEntries,\n\t\t\tsummary: this.generateSummary(truncatedEntries, entries.length),\n\t\t};\n\n\t\tlogger.info(\"Repo map generated\", {\n\t\t\ttotalFiles: entries.length,\n\t\t\tincludedFiles: truncatedEntries.length,\n\t\t\testimatedTokens: totalTokens,\n\t\t});\n\n\t\treturn map;\n\t}\n\n\t/**\n\t * Estimate tokens for an entry\n\t */\n\tprivate estimateEntryTokens(entry: RepoMapEntry): number {\n\t\tlet text = entry.relativePath;\n\t\ttext += entry.symbols.map((s) => `${s.kind} ${s.name}`).join(\" \");\n\t\tif (entry.summary) {\n\t\t\ttext += entry.summary;\n\t\t}\n\t\treturn estimateTokens(text);\n\t}\n\n\t/**\n\t * Generate summary text\n\t */\n\tprivate generateSummary(entries: RepoMapEntry[], totalFiles: number): string {\n\t\tconst languages = new Map<string, number>();\n\t\tlet totalSymbols = 0;\n\n\t\tfor (const entry of entries) {\n\t\t\tlanguages.set(entry.language, (languages.get(entry.language) || 0) + 1);\n\t\t\ttotalSymbols += entry.symbols.length;\n\t\t}\n\n\t\tconst langSummary = Array.from(languages.entries())\n\t\t\t.sort((a, b) => b[1] - a[1])\n\t\t\t.slice(0, 5)\n\t\t\t.map(([lang, count]) => `${lang}: ${count}`)\n\t\t\t.join(\", \");\n\n\t\treturn `${entries.length}/${totalFiles} files mapped, ${totalSymbols} symbols. Languages: ${langSummary}`;\n\t}\n\n\t/**\n\t * Format repo map for use as context\n\t */\n\tformatForContext(map: RepoMap): string {\n\t\tconst lines: string[] = [\n\t\t\t\"## Repository Structure\",\n\t\t\t\"\",\n\t\t\tmap.summary,\n\t\t\t\"\",\n\t\t\t\"### Key Files\",\n\t\t\t\"\",\n\t\t];\n\n\t\t// Group by directory\n\t\tconst byDir = new Map<string, RepoMapEntry[]>();\n\t\tfor (const entry of map.entries) {\n\t\t\tconst dir = entry.relativePath.split(\"/\").slice(0, -1).join(\"/\") || \".\";\n\t\t\tif (!byDir.has(dir)) {\n\t\t\t\tbyDir.set(dir, []);\n\t\t\t}\n\t\t\tbyDir.get(dir)!.push(entry);\n\t\t}\n\n\t\tfor (const [dir, files] of Array.from(byDir)) {\n\t\t\tlines.push(`**${dir}/**`);\n\t\t\tfor (const file of files) {\n\t\t\t\tconst filename = basename(file.relativePath);\n\t\t\t\tconst exportedSymbols = file.symbols\n\t\t\t\t\t.filter((s) => s.exported)\n\t\t\t\t\t.slice(0, 5)\n\t\t\t\t\t.map((s) => s.name);\n\n\t\t\t\tif (exportedSymbols.length > 0) {\n\t\t\t\t\tlines.push(`- ${filename}: ${exportedSymbols.join(\", \")}`);\n\t\t\t\t} else {\n\t\t\t\t\tlines.push(`- ${filename}`);\n\t\t\t\t}\n\t\t\t}\n\t\t\tlines.push(\"\");\n\t\t}\n\n\t\treturn lines.join(\"\\n\");\n\t}\n\n\t/**\n\t * Get relevant files for a query\n\t */\n\tgetRelevantFiles(map: RepoMap, query: string): RepoMapEntry[] {\n\t\tconst queryLower = query.toLowerCase();\n\t\tconst terms = queryLower.split(/\\s+/);\n\n\t\treturn map.entries\n\t\t\t.filter((entry) => {\n\t\t\t\tconst searchText = [\n\t\t\t\t\tentry.relativePath,\n\t\t\t\t\t...entry.symbols.map((s) => s.name),\n\t\t\t\t]\n\t\t\t\t\t.join(\" \")\n\t\t\t\t\t.toLowerCase();\n\n\t\t\t\treturn terms.some((term) => searchText.includes(term));\n\t\t\t})\n\t\t\t.slice(0, 10);\n\t}\n}\n\n/**\n * Global repo map generator instance\n */\nexport const repoMap = new RepoMapGenerator();\n\n/**\n * Quick function to generate context for a directory\n */\nexport async function generateRepoContext(\n\trootDir: string,\n\tfocusFiles?: string[],\n\tmaxTokens = 4000,\n): Promise<string> {\n\tconst map = await repoMap.generate({\n\t\trootDir,\n\t\tfocusFiles,\n\t\tmaxTokens,\n\t});\n\treturn repoMap.formatForContext(map);\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"token-optimizer.d.ts","sourceRoot":"","sources":["../../src/context/token-optimizer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAMH;;GAEG;AACH,MAAM,WAAW,kBAAkB;IAClC,gCAAgC;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mCAAmC;IACnC,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,0BAA0B;IAC1B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,2BAA2B;IAC3B,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,kCAAkC;IAClC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,6BAA6B;IAC7B,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,0CAA0C;IAC1C,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,qDAAqD;IACrD,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,MAAM,EAAE,CAAC;CACrB;AA6LD;;GAEG;AACH,cAAM,cAAc;IACnB,OAAO,CAAC,aAAa,CAQnB;IAEF;;OAEG;IACH,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAIpC;;OAEG;IACH,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,kBAAkB,GAAG,kBAAkB;IA0G1E;;OAEG;IACH,OAAO,CAAC,aAAa;IA8DrB;;OAEG;IACH,aAAa,CACZ,QAAQ,EAAE,MAAM,EAAE,EAClB,cAAc,EAAE,MAAM,EACtB,MAAM,CAAC,EAAE,kBAAkB,GACzB,MAAM,EAAE;IAYX;;OAEG;IACH,mBAAmB,CAClB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,GACf;QACF,cAAc,EAAE,MAAM,CAAC;QACvB,eAAe,EAAE,MAAM,CAAC;QACxB,WAAW,EAAE,MAAM,CAAC;QACpB,gBAAgB,EAAE,MAAM,CAAC;KACzB;CAYD;AAED;;GAEG;AACH,eAAO,MAAM,cAAc,gBAAuB,CAAC;AAEnD;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAE1E"}
1
+ {"version":3,"file":"token-optimizer.d.ts","sourceRoot":"","sources":["../../src/context/token-optimizer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAOH;;GAEG;AACH,MAAM,WAAW,kBAAkB;IAClC,gCAAgC;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mCAAmC;IACnC,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,0BAA0B;IAC1B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,2BAA2B;IAC3B,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,kCAAkC;IAClC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,6BAA6B;IAC7B,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,0CAA0C;IAC1C,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,qDAAqD;IACrD,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,MAAM,EAAE,CAAC;CACrB;AAoLD;;GAEG;AACH,cAAM,cAAc;IACnB,OAAO,CAAC,aAAa,CAQnB;IAEF;;OAEG;IACH,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAIpC;;OAEG;IACH,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,kBAAkB,GAAG,kBAAkB;IA0G1E;;OAEG;IACH,OAAO,CAAC,aAAa;IA8DrB;;OAEG;IACH,aAAa,CACZ,QAAQ,EAAE,MAAM,EAAE,EAClB,cAAc,EAAE,MAAM,EACtB,MAAM,CAAC,EAAE,kBAAkB,GACzB,MAAM,EAAE;IAYX;;OAEG;IACH,mBAAmB,CAClB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,GACf;QACF,cAAc,EAAE,MAAM,CAAC;QACvB,eAAe,EAAE,MAAM,CAAC;QACxB,WAAW,EAAE,MAAM,CAAC;QACpB,gBAAgB,EAAE,MAAM,CAAC;KACzB;CAYD;AAED;;GAEG;AACH,eAAO,MAAM,cAAc,gBAAuB,CAAC;AAEnD;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAE1E"}
@@ -27,6 +27,7 @@
27
27
  * const tokens = tokenOptimizer.estimateTokens(text);
28
28
  * ```
29
29
  */
30
+ import { estimateTokens } from "@evalops/contracts";
30
31
  import { createLogger } from "../utils/logger.js";
31
32
  const logger = createLogger("context:token-optimizer");
32
33
  /**
@@ -57,14 +58,6 @@ const COMMENT_PATTERNS = {
57
58
  html: [/<!--[\s\S]*?-->/g],
58
59
  css: [/\/\*[\s\S]*?\*\//g],
59
60
  };
60
- /**
61
- * Estimate tokens for text (rough approximation)
62
- */
63
- function estimateTokens(text) {
64
- // GPT-style tokenization: roughly 4 chars per token for English
65
- // Code tends to be denser, so we use a slightly lower ratio
66
- return Math.ceil(text.length / 3.5);
67
- }
68
61
  /**
69
62
  * Detect language from content
70
63
  */
@@ -1 +1 @@
1
- {"version":3,"file":"token-optimizer.js","sourceRoot":"","sources":["../../src/context/token-optimizer.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Token Optimizer\n *\n * Reduces token usage in prompts through intelligent compression techniques.\n * Helps fit more context within model limits and reduces API costs.\n *\n * ## Features\n *\n * - Deduplication of repeated content\n * - Summarization of verbose output\n * - Smart truncation preserving important information\n * - Code comment stripping (optional)\n * - Whitespace normalization\n *\n * ## Usage\n *\n * ```typescript\n * import { tokenOptimizer } from \"./token-optimizer.js\";\n *\n * // Optimize a context string\n * const optimized = tokenOptimizer.optimize(context, {\n * maxTokens: 4000,\n * preserveCode: true,\n * });\n *\n * // Estimate tokens\n * const tokens = tokenOptimizer.estimateTokens(text);\n * ```\n */\n\nimport { createLogger } from \"../utils/logger.js\";\n\nconst logger = createLogger(\"context:token-optimizer\");\n\n/**\n * Optimization configuration\n */\nexport interface OptimizationConfig {\n\t/** Maximum tokens for output */\n\tmaxTokens?: number;\n\t/** Preserve code blocks exactly */\n\tpreserveCode?: boolean;\n\t/** Strip code comments */\n\tstripComments?: boolean;\n\t/** Normalize whitespace */\n\tnormalizeWhitespace?: boolean;\n\t/** Deduplicate similar content */\n\tdeduplicate?: boolean;\n\t/** Summarize long outputs */\n\tsummarizeLongOutput?: boolean;\n\t/** Threshold for \"long output\" (lines) */\n\tlongOutputThreshold?: number;\n\t/** Priority sections to preserve (regex patterns) */\n\tpriorityPatterns?: RegExp[];\n}\n\n/**\n * Optimization result\n */\nexport interface OptimizationResult {\n\tcontent: string;\n\toriginalTokens: number;\n\toptimizedTokens: number;\n\treductionPercent: number;\n\ttechniques: string[];\n}\n\n/**\n * Default priority patterns (content to preserve)\n */\nconst DEFAULT_PRIORITY_PATTERNS = [\n\t/error/i,\n\t/exception/i,\n\t/failed/i,\n\t/warning/i,\n\t/critical/i,\n\t/TODO/,\n\t/FIXME/,\n\t/HACK/,\n\t/^\\s*export\\s/m,\n\t/^\\s*import\\s/m,\n\t/^\\s*class\\s/m,\n\t/^\\s*interface\\s/m,\n\t/^\\s*function\\s/m,\n\t/^\\s*const\\s.*=/m,\n];\n\n/**\n * Code comment patterns by language\n */\nconst COMMENT_PATTERNS: Record<string, RegExp[]> = {\n\tjavascript: [/\\/\\/[^\\n]*/g, /\\/\\*[\\s\\S]*?\\*\\//g],\n\tpython: [/#[^\\n]*/g, /'''[\\s\\S]*?'''/g, /\"\"\"[\\s\\S]*?\"\"\"/g],\n\thtml: [/<!--[\\s\\S]*?-->/g],\n\tcss: [/\\/\\*[\\s\\S]*?\\*\\//g],\n};\n\n/**\n * Estimate tokens for text (rough approximation)\n */\nfunction estimateTokens(text: string): number {\n\t// GPT-style tokenization: roughly 4 chars per token for English\n\t// Code tends to be denser, so we use a slightly lower ratio\n\treturn Math.ceil(text.length / 3.5);\n}\n\n/**\n * Detect language from content\n */\nfunction detectLanguage(content: string): string {\n\tif (content.includes(\"import \") || content.includes(\"export \")) {\n\t\treturn \"javascript\";\n\t}\n\tif (content.includes(\"def \") || content.includes(\"import \")) {\n\t\treturn \"python\";\n\t}\n\tif (content.includes(\"<!DOCTYPE\") || content.includes(\"<html\")) {\n\t\treturn \"html\";\n\t}\n\tif (content.includes(\"{\") && content.includes(\":\") && content.includes(\";\")) {\n\t\treturn \"css\";\n\t}\n\treturn \"unknown\";\n}\n\n/**\n * Strip comments from code\n */\nfunction stripComments(content: string, language: string): string {\n\tconst patterns = COMMENT_PATTERNS[language];\n\tif (!patterns) return content;\n\n\tlet result = content;\n\tfor (const pattern of patterns) {\n\t\tresult = result.replace(pattern, \"\");\n\t}\n\treturn result;\n}\n\n/**\n * Normalize whitespace\n */\nfunction normalizeWhitespace(content: string): string {\n\treturn (\n\t\tcontent\n\t\t\t// Collapse multiple blank lines to single\n\t\t\t.replace(/\\n{3,}/g, \"\\n\\n\")\n\t\t\t// Remove trailing whitespace\n\t\t\t.replace(/[ \\t]+$/gm, \"\")\n\t\t\t// Collapse multiple spaces (but preserve indentation)\n\t\t\t.replace(/([^\\n])[ \\t]{2,}/g, \"$1 \")\n\t);\n}\n\n/**\n * Find and deduplicate similar content blocks\n */\nfunction deduplicateContent(content: string): {\n\tcontent: string;\n\tremoved: number;\n} {\n\tconst lines = content.split(\"\\n\");\n\tconst seen = new Map<string, number>();\n\tconst result: string[] = [];\n\tlet removed = 0;\n\n\tfor (const line of lines) {\n\t\tconst normalized = line.trim();\n\t\tif (normalized.length === 0) {\n\t\t\tresult.push(line);\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst count = seen.get(normalized) || 0;\n\t\tif (count >= 2) {\n\t\t\t// Skip if we've seen this exact line more than twice\n\t\t\tremoved++;\n\t\t\tcontinue;\n\t\t}\n\n\t\tseen.set(normalized, count + 1);\n\t\tresult.push(line);\n\t}\n\n\treturn { content: result.join(\"\\n\"), removed };\n}\n\n/**\n * Summarize long output while preserving important lines\n */\nfunction summarizeLongOutput(\n\tcontent: string,\n\tthreshold: number,\n\tpriorityPatterns: RegExp[],\n): string {\n\tconst lines = content.split(\"\\n\");\n\tif (lines.length <= threshold) {\n\t\treturn content;\n\t}\n\n\tconst headCount = Math.floor(threshold * 0.3);\n\tconst tailCount = Math.floor(threshold * 0.4);\n\tconst middleCount = threshold - headCount - tailCount;\n\n\tconst head = lines.slice(0, headCount);\n\tconst tail = lines.slice(-tailCount);\n\tconst middle = lines.slice(headCount, -tailCount);\n\n\t// Extract important lines from middle\n\tconst importantLines: string[] = [];\n\tfor (const line of middle) {\n\t\tif (priorityPatterns.some((p) => p.test(line))) {\n\t\t\timportantLines.push(line);\n\t\t\tif (importantLines.length >= middleCount) break;\n\t\t}\n\t}\n\n\tconst truncatedCount = middle.length - importantLines.length;\n\n\treturn [\n\t\t...head,\n\t\t\"\",\n\t\t`... [${truncatedCount} lines omitted] ...`,\n\t\t\"\",\n\t\t...importantLines,\n\t\t\"\",\n\t\t\"... [continuing to tail] ...\",\n\t\t\"\",\n\t\t...tail,\n\t].join(\"\\n\");\n}\n\n/**\n * Extract code blocks from markdown\n */\nfunction extractCodeBlocks(\n\tcontent: string,\n): Array<{ start: number; end: number; content: string }> {\n\tconst blocks: Array<{ start: number; end: number; content: string }> = [];\n\tconst regex = /```[\\s\\S]*?```/g;\n\tlet match: RegExpExecArray | null = regex.exec(content);\n\n\twhile (match) {\n\t\tblocks.push({\n\t\t\tstart: match.index,\n\t\t\tend: match.index + match[0].length,\n\t\t\tcontent: match[0],\n\t\t});\n\t\tmatch = regex.exec(content);\n\t}\n\n\treturn blocks;\n}\n\n/**\n * Token optimizer class\n */\nclass TokenOptimizer {\n\tprivate defaultConfig: OptimizationConfig = {\n\t\tpreserveCode: true,\n\t\tstripComments: false,\n\t\tnormalizeWhitespace: true,\n\t\tdeduplicate: true,\n\t\tsummarizeLongOutput: true,\n\t\tlongOutputThreshold: 100,\n\t\tpriorityPatterns: DEFAULT_PRIORITY_PATTERNS,\n\t};\n\n\t/**\n\t * Estimate tokens for text\n\t */\n\testimateTokens(text: string): number {\n\t\treturn estimateTokens(text);\n\t}\n\n\t/**\n\t * Optimize content to reduce token usage\n\t */\n\toptimize(content: string, config?: OptimizationConfig): OptimizationResult {\n\t\tconst cfg = { ...this.defaultConfig, ...config };\n\t\tconst techniques: string[] = [];\n\t\tlet result = content;\n\t\tconst originalTokens = estimateTokens(content);\n\n\t\t// Extract code blocks if preserving\n\t\tlet codeBlocks: Array<{ start: number; end: number; content: string }> = [];\n\t\tif (cfg.preserveCode) {\n\t\t\tcodeBlocks = extractCodeBlocks(content);\n\t\t\t// Replace code blocks with placeholders\n\t\t\tfor (let i = codeBlocks.length - 1; i >= 0; i--) {\n\t\t\t\tconst block = codeBlocks[i]!;\n\t\t\t\tresult = `${result.slice(0, block.start)}__CODE_BLOCK_${i}__${result.slice(block.end)}`;\n\t\t\t}\n\t\t}\n\n\t\t// Strip comments if enabled\n\t\tif (cfg.stripComments && !cfg.preserveCode) {\n\t\t\tconst language = detectLanguage(result);\n\t\t\tconst before = result.length;\n\t\t\tresult = stripComments(result, language);\n\t\t\tif (result.length < before) {\n\t\t\t\ttechniques.push(\"comment-stripping\");\n\t\t\t}\n\t\t}\n\n\t\t// Normalize whitespace\n\t\tif (cfg.normalizeWhitespace) {\n\t\t\tconst before = result.length;\n\t\t\tresult = normalizeWhitespace(result);\n\t\t\tif (result.length < before) {\n\t\t\t\ttechniques.push(\"whitespace-normalization\");\n\t\t\t}\n\t\t}\n\n\t\t// Deduplicate content\n\t\tif (cfg.deduplicate) {\n\t\t\tconst { content: deduped, removed } = deduplicateContent(result);\n\t\t\tif (removed > 0) {\n\t\t\t\tresult = deduped;\n\t\t\t\ttechniques.push(`deduplication (${removed} lines)`);\n\t\t\t}\n\t\t}\n\n\t\t// Summarize long output\n\t\tif (cfg.summarizeLongOutput) {\n\t\t\tconst threshold = cfg.longOutputThreshold || 100;\n\t\t\tconst linesBefore = result.split(\"\\n\").length;\n\t\t\tif (linesBefore > threshold) {\n\t\t\t\tresult = summarizeLongOutput(\n\t\t\t\t\tresult,\n\t\t\t\t\tthreshold,\n\t\t\t\t\tcfg.priorityPatterns || DEFAULT_PRIORITY_PATTERNS,\n\t\t\t\t);\n\t\t\t\ttechniques.push(\"long-output-summarization\");\n\t\t\t}\n\t\t}\n\n\t\t// Restore code blocks\n\t\tif (cfg.preserveCode) {\n\t\t\tfor (let i = 0; i < codeBlocks.length; i++) {\n\t\t\t\tconst block = codeBlocks[i]!;\n\t\t\t\tresult = result.replace(`__CODE_BLOCK_${i}__`, block.content);\n\t\t\t}\n\t\t}\n\n\t\t// Truncate to max tokens if specified\n\t\tif (cfg.maxTokens) {\n\t\t\tconst tokens = estimateTokens(result);\n\t\t\tif (tokens > cfg.maxTokens) {\n\t\t\t\tconst ratio = cfg.maxTokens / tokens;\n\t\t\t\tconst targetLength = Math.floor(result.length * ratio * 0.95);\n\t\t\t\tresult = this.smartTruncate(\n\t\t\t\t\tresult,\n\t\t\t\t\ttargetLength,\n\t\t\t\t\tcfg.priorityPatterns || [],\n\t\t\t\t);\n\t\t\t\ttechniques.push(\"smart-truncation\");\n\t\t\t}\n\t\t}\n\n\t\tconst optimizedTokens = estimateTokens(result);\n\t\tconst reductionPercent =\n\t\t\toriginalTokens > 0\n\t\t\t\t? Math.round((1 - optimizedTokens / originalTokens) * 100)\n\t\t\t\t: 0;\n\n\t\tif (techniques.length > 0) {\n\t\t\tlogger.debug(\"Content optimized\", {\n\t\t\t\toriginalTokens,\n\t\t\t\toptimizedTokens,\n\t\t\t\treductionPercent,\n\t\t\t\ttechniques,\n\t\t\t});\n\t\t}\n\n\t\treturn {\n\t\t\tcontent: result,\n\t\t\toriginalTokens,\n\t\t\toptimizedTokens,\n\t\t\treductionPercent,\n\t\t\ttechniques,\n\t\t};\n\t}\n\n\t/**\n\t * Smart truncation preserving important content\n\t */\n\tprivate smartTruncate(\n\t\tcontent: string,\n\t\ttargetLength: number,\n\t\tpriorityPatterns: RegExp[],\n\t): string {\n\t\tif (content.length <= targetLength) {\n\t\t\treturn content;\n\t\t}\n\n\t\tconst lines = content.split(\"\\n\");\n\t\tconst priorityLines: Array<{ index: number; line: string }> = [];\n\t\tconst normalLines: Array<{ index: number; line: string }> = [];\n\n\t\t// Classify lines\n\t\tfor (let i = 0; i < lines.length; i++) {\n\t\t\tconst line = lines[i]!;\n\t\t\tconst isPriority = priorityPatterns.some((p) => p.test(line));\n\t\t\tif (isPriority) {\n\t\t\t\tpriorityLines.push({ index: i, line });\n\t\t\t} else {\n\t\t\t\tnormalLines.push({ index: i, line });\n\t\t\t}\n\t\t}\n\n\t\t// Start with all priority lines\n\t\tconst result = priorityLines.map((l) => l.line).join(\"\\n\");\n\n\t\t// Add normal lines from head and tail until we hit limit\n\t\tconst headLines: string[] = [];\n\t\tconst tailLines: string[] = [];\n\t\tlet currentLength = result.length;\n\n\t\tfor (const { line } of normalLines) {\n\t\t\tif (currentLength + line.length + 1 < targetLength * 0.8) {\n\t\t\t\theadLines.push(line);\n\t\t\t\tcurrentLength += line.length + 1;\n\t\t\t} else {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tfor (let i = normalLines.length - 1; i >= 0; i--) {\n\t\t\tconst { line } = normalLines[i]!;\n\t\t\tif (currentLength + line.length + 1 < targetLength) {\n\t\t\t\ttailLines.unshift(line);\n\t\t\t\tcurrentLength += line.length + 1;\n\t\t\t} else {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\treturn [\n\t\t\t...headLines,\n\t\t\t\"\",\n\t\t\t\"... [content truncated to fit token limit] ...\",\n\t\t\t\"\",\n\t\t\t...priorityLines.map((l) => l.line),\n\t\t\t\"\",\n\t\t\t...tailLines,\n\t\t].join(\"\\n\");\n\t}\n\n\t/**\n\t * Optimize multiple content blocks\n\t */\n\toptimizeBatch(\n\t\tcontents: string[],\n\t\ttotalMaxTokens: number,\n\t\tconfig?: OptimizationConfig,\n\t): string[] {\n\t\tconst tokensPerContent = Math.floor(totalMaxTokens / contents.length);\n\n\t\treturn contents.map(\n\t\t\t(content) =>\n\t\t\t\tthis.optimize(content, {\n\t\t\t\t\t...config,\n\t\t\t\t\tmaxTokens: tokensPerContent,\n\t\t\t\t}).content,\n\t\t);\n\t}\n\n\t/**\n\t * Calculate compression stats\n\t */\n\tgetCompressionStats(\n\t\toriginal: string,\n\t\toptimized: string,\n\t): {\n\t\toriginalTokens: number;\n\t\toptimizedTokens: number;\n\t\tsavedTokens: number;\n\t\tcompressionRatio: number;\n\t} {\n\t\tconst originalTokens = estimateTokens(original);\n\t\tconst optimizedTokens = estimateTokens(optimized);\n\n\t\treturn {\n\t\t\toriginalTokens,\n\t\t\toptimizedTokens,\n\t\t\tsavedTokens: originalTokens - optimizedTokens,\n\t\t\tcompressionRatio:\n\t\t\t\toriginalTokens > 0 ? optimizedTokens / originalTokens : 1,\n\t\t};\n\t}\n}\n\n/**\n * Global token optimizer instance\n */\nexport const tokenOptimizer = new TokenOptimizer();\n\n/**\n * Quick function to optimize content\n */\nexport function optimizeTokens(content: string, maxTokens?: number): string {\n\treturn tokenOptimizer.optimize(content, { maxTokens }).content;\n}\n"]}
1
+ {"version":3,"file":"token-optimizer.js","sourceRoot":"","sources":["../../src/context/token-optimizer.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Token Optimizer\n *\n * Reduces token usage in prompts through intelligent compression techniques.\n * Helps fit more context within model limits and reduces API costs.\n *\n * ## Features\n *\n * - Deduplication of repeated content\n * - Summarization of verbose output\n * - Smart truncation preserving important information\n * - Code comment stripping (optional)\n * - Whitespace normalization\n *\n * ## Usage\n *\n * ```typescript\n * import { tokenOptimizer } from \"./token-optimizer.js\";\n *\n * // Optimize a context string\n * const optimized = tokenOptimizer.optimize(context, {\n * maxTokens: 4000,\n * preserveCode: true,\n * });\n *\n * // Estimate tokens\n * const tokens = tokenOptimizer.estimateTokens(text);\n * ```\n */\n\nimport { estimateTokens } from \"@evalops/contracts\";\nimport { createLogger } from \"../utils/logger.js\";\n\nconst logger = createLogger(\"context:token-optimizer\");\n\n/**\n * Optimization configuration\n */\nexport interface OptimizationConfig {\n\t/** Maximum tokens for output */\n\tmaxTokens?: number;\n\t/** Preserve code blocks exactly */\n\tpreserveCode?: boolean;\n\t/** Strip code comments */\n\tstripComments?: boolean;\n\t/** Normalize whitespace */\n\tnormalizeWhitespace?: boolean;\n\t/** Deduplicate similar content */\n\tdeduplicate?: boolean;\n\t/** Summarize long outputs */\n\tsummarizeLongOutput?: boolean;\n\t/** Threshold for \"long output\" (lines) */\n\tlongOutputThreshold?: number;\n\t/** Priority sections to preserve (regex patterns) */\n\tpriorityPatterns?: RegExp[];\n}\n\n/**\n * Optimization result\n */\nexport interface OptimizationResult {\n\tcontent: string;\n\toriginalTokens: number;\n\toptimizedTokens: number;\n\treductionPercent: number;\n\ttechniques: string[];\n}\n\n/**\n * Default priority patterns (content to preserve)\n */\nconst DEFAULT_PRIORITY_PATTERNS = [\n\t/error/i,\n\t/exception/i,\n\t/failed/i,\n\t/warning/i,\n\t/critical/i,\n\t/TODO/,\n\t/FIXME/,\n\t/HACK/,\n\t/^\\s*export\\s/m,\n\t/^\\s*import\\s/m,\n\t/^\\s*class\\s/m,\n\t/^\\s*interface\\s/m,\n\t/^\\s*function\\s/m,\n\t/^\\s*const\\s.*=/m,\n];\n\n/**\n * Code comment patterns by language\n */\nconst COMMENT_PATTERNS: Record<string, RegExp[]> = {\n\tjavascript: [/\\/\\/[^\\n]*/g, /\\/\\*[\\s\\S]*?\\*\\//g],\n\tpython: [/#[^\\n]*/g, /'''[\\s\\S]*?'''/g, /\"\"\"[\\s\\S]*?\"\"\"/g],\n\thtml: [/<!--[\\s\\S]*?-->/g],\n\tcss: [/\\/\\*[\\s\\S]*?\\*\\//g],\n};\n\n/**\n * Detect language from content\n */\nfunction detectLanguage(content: string): string {\n\tif (content.includes(\"import \") || content.includes(\"export \")) {\n\t\treturn \"javascript\";\n\t}\n\tif (content.includes(\"def \") || content.includes(\"import \")) {\n\t\treturn \"python\";\n\t}\n\tif (content.includes(\"<!DOCTYPE\") || content.includes(\"<html\")) {\n\t\treturn \"html\";\n\t}\n\tif (content.includes(\"{\") && content.includes(\":\") && content.includes(\";\")) {\n\t\treturn \"css\";\n\t}\n\treturn \"unknown\";\n}\n\n/**\n * Strip comments from code\n */\nfunction stripComments(content: string, language: string): string {\n\tconst patterns = COMMENT_PATTERNS[language];\n\tif (!patterns) return content;\n\n\tlet result = content;\n\tfor (const pattern of patterns) {\n\t\tresult = result.replace(pattern, \"\");\n\t}\n\treturn result;\n}\n\n/**\n * Normalize whitespace\n */\nfunction normalizeWhitespace(content: string): string {\n\treturn (\n\t\tcontent\n\t\t\t// Collapse multiple blank lines to single\n\t\t\t.replace(/\\n{3,}/g, \"\\n\\n\")\n\t\t\t// Remove trailing whitespace\n\t\t\t.replace(/[ \\t]+$/gm, \"\")\n\t\t\t// Collapse multiple spaces (but preserve indentation)\n\t\t\t.replace(/([^\\n])[ \\t]{2,}/g, \"$1 \")\n\t);\n}\n\n/**\n * Find and deduplicate similar content blocks\n */\nfunction deduplicateContent(content: string): {\n\tcontent: string;\n\tremoved: number;\n} {\n\tconst lines = content.split(\"\\n\");\n\tconst seen = new Map<string, number>();\n\tconst result: string[] = [];\n\tlet removed = 0;\n\n\tfor (const line of lines) {\n\t\tconst normalized = line.trim();\n\t\tif (normalized.length === 0) {\n\t\t\tresult.push(line);\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst count = seen.get(normalized) || 0;\n\t\tif (count >= 2) {\n\t\t\t// Skip if we've seen this exact line more than twice\n\t\t\tremoved++;\n\t\t\tcontinue;\n\t\t}\n\n\t\tseen.set(normalized, count + 1);\n\t\tresult.push(line);\n\t}\n\n\treturn { content: result.join(\"\\n\"), removed };\n}\n\n/**\n * Summarize long output while preserving important lines\n */\nfunction summarizeLongOutput(\n\tcontent: string,\n\tthreshold: number,\n\tpriorityPatterns: RegExp[],\n): string {\n\tconst lines = content.split(\"\\n\");\n\tif (lines.length <= threshold) {\n\t\treturn content;\n\t}\n\n\tconst headCount = Math.floor(threshold * 0.3);\n\tconst tailCount = Math.floor(threshold * 0.4);\n\tconst middleCount = threshold - headCount - tailCount;\n\n\tconst head = lines.slice(0, headCount);\n\tconst tail = lines.slice(-tailCount);\n\tconst middle = lines.slice(headCount, -tailCount);\n\n\t// Extract important lines from middle\n\tconst importantLines: string[] = [];\n\tfor (const line of middle) {\n\t\tif (priorityPatterns.some((p) => p.test(line))) {\n\t\t\timportantLines.push(line);\n\t\t\tif (importantLines.length >= middleCount) break;\n\t\t}\n\t}\n\n\tconst truncatedCount = middle.length - importantLines.length;\n\n\treturn [\n\t\t...head,\n\t\t\"\",\n\t\t`... [${truncatedCount} lines omitted] ...`,\n\t\t\"\",\n\t\t...importantLines,\n\t\t\"\",\n\t\t\"... [continuing to tail] ...\",\n\t\t\"\",\n\t\t...tail,\n\t].join(\"\\n\");\n}\n\n/**\n * Extract code blocks from markdown\n */\nfunction extractCodeBlocks(\n\tcontent: string,\n): Array<{ start: number; end: number; content: string }> {\n\tconst blocks: Array<{ start: number; end: number; content: string }> = [];\n\tconst regex = /```[\\s\\S]*?```/g;\n\tlet match: RegExpExecArray | null = regex.exec(content);\n\n\twhile (match) {\n\t\tblocks.push({\n\t\t\tstart: match.index,\n\t\t\tend: match.index + match[0].length,\n\t\t\tcontent: match[0],\n\t\t});\n\t\tmatch = regex.exec(content);\n\t}\n\n\treturn blocks;\n}\n\n/**\n * Token optimizer class\n */\nclass TokenOptimizer {\n\tprivate defaultConfig: OptimizationConfig = {\n\t\tpreserveCode: true,\n\t\tstripComments: false,\n\t\tnormalizeWhitespace: true,\n\t\tdeduplicate: true,\n\t\tsummarizeLongOutput: true,\n\t\tlongOutputThreshold: 100,\n\t\tpriorityPatterns: DEFAULT_PRIORITY_PATTERNS,\n\t};\n\n\t/**\n\t * Estimate tokens for text\n\t */\n\testimateTokens(text: string): number {\n\t\treturn estimateTokens(text);\n\t}\n\n\t/**\n\t * Optimize content to reduce token usage\n\t */\n\toptimize(content: string, config?: OptimizationConfig): OptimizationResult {\n\t\tconst cfg = { ...this.defaultConfig, ...config };\n\t\tconst techniques: string[] = [];\n\t\tlet result = content;\n\t\tconst originalTokens = estimateTokens(content);\n\n\t\t// Extract code blocks if preserving\n\t\tlet codeBlocks: Array<{ start: number; end: number; content: string }> = [];\n\t\tif (cfg.preserveCode) {\n\t\t\tcodeBlocks = extractCodeBlocks(content);\n\t\t\t// Replace code blocks with placeholders\n\t\t\tfor (let i = codeBlocks.length - 1; i >= 0; i--) {\n\t\t\t\tconst block = codeBlocks[i]!;\n\t\t\t\tresult = `${result.slice(0, block.start)}__CODE_BLOCK_${i}__${result.slice(block.end)}`;\n\t\t\t}\n\t\t}\n\n\t\t// Strip comments if enabled\n\t\tif (cfg.stripComments && !cfg.preserveCode) {\n\t\t\tconst language = detectLanguage(result);\n\t\t\tconst before = result.length;\n\t\t\tresult = stripComments(result, language);\n\t\t\tif (result.length < before) {\n\t\t\t\ttechniques.push(\"comment-stripping\");\n\t\t\t}\n\t\t}\n\n\t\t// Normalize whitespace\n\t\tif (cfg.normalizeWhitespace) {\n\t\t\tconst before = result.length;\n\t\t\tresult = normalizeWhitespace(result);\n\t\t\tif (result.length < before) {\n\t\t\t\ttechniques.push(\"whitespace-normalization\");\n\t\t\t}\n\t\t}\n\n\t\t// Deduplicate content\n\t\tif (cfg.deduplicate) {\n\t\t\tconst { content: deduped, removed } = deduplicateContent(result);\n\t\t\tif (removed > 0) {\n\t\t\t\tresult = deduped;\n\t\t\t\ttechniques.push(`deduplication (${removed} lines)`);\n\t\t\t}\n\t\t}\n\n\t\t// Summarize long output\n\t\tif (cfg.summarizeLongOutput) {\n\t\t\tconst threshold = cfg.longOutputThreshold || 100;\n\t\t\tconst linesBefore = result.split(\"\\n\").length;\n\t\t\tif (linesBefore > threshold) {\n\t\t\t\tresult = summarizeLongOutput(\n\t\t\t\t\tresult,\n\t\t\t\t\tthreshold,\n\t\t\t\t\tcfg.priorityPatterns || DEFAULT_PRIORITY_PATTERNS,\n\t\t\t\t);\n\t\t\t\ttechniques.push(\"long-output-summarization\");\n\t\t\t}\n\t\t}\n\n\t\t// Restore code blocks\n\t\tif (cfg.preserveCode) {\n\t\t\tfor (let i = 0; i < codeBlocks.length; i++) {\n\t\t\t\tconst block = codeBlocks[i]!;\n\t\t\t\tresult = result.replace(`__CODE_BLOCK_${i}__`, block.content);\n\t\t\t}\n\t\t}\n\n\t\t// Truncate to max tokens if specified\n\t\tif (cfg.maxTokens) {\n\t\t\tconst tokens = estimateTokens(result);\n\t\t\tif (tokens > cfg.maxTokens) {\n\t\t\t\tconst ratio = cfg.maxTokens / tokens;\n\t\t\t\tconst targetLength = Math.floor(result.length * ratio * 0.95);\n\t\t\t\tresult = this.smartTruncate(\n\t\t\t\t\tresult,\n\t\t\t\t\ttargetLength,\n\t\t\t\t\tcfg.priorityPatterns || [],\n\t\t\t\t);\n\t\t\t\ttechniques.push(\"smart-truncation\");\n\t\t\t}\n\t\t}\n\n\t\tconst optimizedTokens = estimateTokens(result);\n\t\tconst reductionPercent =\n\t\t\toriginalTokens > 0\n\t\t\t\t? Math.round((1 - optimizedTokens / originalTokens) * 100)\n\t\t\t\t: 0;\n\n\t\tif (techniques.length > 0) {\n\t\t\tlogger.debug(\"Content optimized\", {\n\t\t\t\toriginalTokens,\n\t\t\t\toptimizedTokens,\n\t\t\t\treductionPercent,\n\t\t\t\ttechniques,\n\t\t\t});\n\t\t}\n\n\t\treturn {\n\t\t\tcontent: result,\n\t\t\toriginalTokens,\n\t\t\toptimizedTokens,\n\t\t\treductionPercent,\n\t\t\ttechniques,\n\t\t};\n\t}\n\n\t/**\n\t * Smart truncation preserving important content\n\t */\n\tprivate smartTruncate(\n\t\tcontent: string,\n\t\ttargetLength: number,\n\t\tpriorityPatterns: RegExp[],\n\t): string {\n\t\tif (content.length <= targetLength) {\n\t\t\treturn content;\n\t\t}\n\n\t\tconst lines = content.split(\"\\n\");\n\t\tconst priorityLines: Array<{ index: number; line: string }> = [];\n\t\tconst normalLines: Array<{ index: number; line: string }> = [];\n\n\t\t// Classify lines\n\t\tfor (let i = 0; i < lines.length; i++) {\n\t\t\tconst line = lines[i]!;\n\t\t\tconst isPriority = priorityPatterns.some((p) => p.test(line));\n\t\t\tif (isPriority) {\n\t\t\t\tpriorityLines.push({ index: i, line });\n\t\t\t} else {\n\t\t\t\tnormalLines.push({ index: i, line });\n\t\t\t}\n\t\t}\n\n\t\t// Start with all priority lines\n\t\tconst result = priorityLines.map((l) => l.line).join(\"\\n\");\n\n\t\t// Add normal lines from head and tail until we hit limit\n\t\tconst headLines: string[] = [];\n\t\tconst tailLines: string[] = [];\n\t\tlet currentLength = result.length;\n\n\t\tfor (const { line } of normalLines) {\n\t\t\tif (currentLength + line.length + 1 < targetLength * 0.8) {\n\t\t\t\theadLines.push(line);\n\t\t\t\tcurrentLength += line.length + 1;\n\t\t\t} else {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tfor (let i = normalLines.length - 1; i >= 0; i--) {\n\t\t\tconst { line } = normalLines[i]!;\n\t\t\tif (currentLength + line.length + 1 < targetLength) {\n\t\t\t\ttailLines.unshift(line);\n\t\t\t\tcurrentLength += line.length + 1;\n\t\t\t} else {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\treturn [\n\t\t\t...headLines,\n\t\t\t\"\",\n\t\t\t\"... [content truncated to fit token limit] ...\",\n\t\t\t\"\",\n\t\t\t...priorityLines.map((l) => l.line),\n\t\t\t\"\",\n\t\t\t...tailLines,\n\t\t].join(\"\\n\");\n\t}\n\n\t/**\n\t * Optimize multiple content blocks\n\t */\n\toptimizeBatch(\n\t\tcontents: string[],\n\t\ttotalMaxTokens: number,\n\t\tconfig?: OptimizationConfig,\n\t): string[] {\n\t\tconst tokensPerContent = Math.floor(totalMaxTokens / contents.length);\n\n\t\treturn contents.map(\n\t\t\t(content) =>\n\t\t\t\tthis.optimize(content, {\n\t\t\t\t\t...config,\n\t\t\t\t\tmaxTokens: tokensPerContent,\n\t\t\t\t}).content,\n\t\t);\n\t}\n\n\t/**\n\t * Calculate compression stats\n\t */\n\tgetCompressionStats(\n\t\toriginal: string,\n\t\toptimized: string,\n\t): {\n\t\toriginalTokens: number;\n\t\toptimizedTokens: number;\n\t\tsavedTokens: number;\n\t\tcompressionRatio: number;\n\t} {\n\t\tconst originalTokens = estimateTokens(original);\n\t\tconst optimizedTokens = estimateTokens(optimized);\n\n\t\treturn {\n\t\t\toriginalTokens,\n\t\t\toptimizedTokens,\n\t\t\tsavedTokens: originalTokens - optimizedTokens,\n\t\t\tcompressionRatio:\n\t\t\t\toriginalTokens > 0 ? optimizedTokens / originalTokens : 1,\n\t\t};\n\t}\n}\n\n/**\n * Global token optimizer instance\n */\nexport const tokenOptimizer = new TokenOptimizer();\n\n/**\n * Quick function to optimize content\n */\nexport function optimizeTokens(content: string, maxTokens?: number): string {\n\treturn tokenOptimizer.optimize(content, { maxTokens }).content;\n}\n"]}
@@ -1,39 +1,3 @@
1
- /**
2
- * Render Model - Transforms raw messages into UI-ready format with content deduplication
3
- *
4
- * This module provides the transformation layer between raw agent messages and the
5
- * renderable structures consumed by the TUI. Its primary responsibilities:
6
- *
7
- * 1. **Message Normalization**: Extracts text, thinking blocks, tool calls, and
8
- * attachments into consistent, typed structures.
9
- *
10
- * 2. **Content Deduplication**: Removes repeated lines that occur during streaming,
11
- * particularly when LLM providers resend cumulative content on each delta.
12
- *
13
- * 3. **Clean Mode Support**: Three levels of content cleaning (off/soft/aggressive)
14
- * to balance rendering accuracy vs visual cleanliness.
15
- *
16
- * ## The Duplicate Line Problem
17
- *
18
- * When streaming responses, some LLM providers (especially for reasoning/thinking
19
- * blocks) resend all previous content with each update rather than just the delta.
20
- * This manifests as:
21
- * - Numbered list items appearing multiple times
22
- * - Paragraph beginnings repeated
23
- * - Code blocks with duplicated lines
24
- *
25
- * ## Deduplication Strategy
26
- *
27
- * We maintain a sliding window of recently-seen lines. Each new line is checked
28
- * against this window; if found, it's collapsed. The window size varies by mode:
29
- * - **Soft mode**: Small window (40 lines) catches local repetition
30
- * - **Aggressive mode**: Large window (120 lines) catches re-sent blocks
31
- *
32
- * Cross-block mode shares history between text blocks in the same message,
33
- * catching duplicates that span the streaming chunk boundaries.
34
- *
35
- * @module conversation/render-model
36
- */
37
1
  import type { AppMessage, AssistantMessage, Attachment, StopReason, ToolResultMessage, UserMessageWithAttachments } from "../agent/types.js";
38
2
  export type RenderableMessage = RenderableUserMessage | RenderableAssistantMessage | RenderableToolResultMessage;
39
3
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"render-model.d.ts","sourceRoot":"","sources":["../../src/conversation/render-model.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"render-model.d.ts","sourceRoot":"","sources":["../../src/conversation/render-model.ts"],"names":[],"mappings":"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"}
@@ -34,6 +34,7 @@
34
34
  *
35
35
  * @module conversation/render-model
36
36
  */
37
+ import { isRecord } from "../utils/json.js";
37
38
  /**
38
39
  * Collapse Duplicate Lines - Removes streaming-induced repetition
39
40
  *
@@ -150,9 +151,6 @@ export function collapseRepeatedLinesWithHistory(text, options = {}) {
150
151
  }
151
152
  return { text: result.join("\n"), changed };
152
153
  }
153
- function isRecord(value) {
154
- return Boolean(value) && typeof value === "object" && !Array.isArray(value);
155
- }
156
154
  function isAssistantContentBlock(value) {
157
155
  if (!isRecord(value)) {
158
156
  return false;
@@ -1 +1 @@
1
- {"version":3,"file":"render-model.js","sourceRoot":"","sources":["../../src/conversation/render-model.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Render Model - Transforms raw messages into UI-ready format with content deduplication\n *\n * This module provides the transformation layer between raw agent messages and the\n * renderable structures consumed by the TUI. Its primary responsibilities:\n *\n * 1. **Message Normalization**: Extracts text, thinking blocks, tool calls, and\n * attachments into consistent, typed structures.\n *\n * 2. **Content Deduplication**: Removes repeated lines that occur during streaming,\n * particularly when LLM providers resend cumulative content on each delta.\n *\n * 3. **Clean Mode Support**: Three levels of content cleaning (off/soft/aggressive)\n * to balance rendering accuracy vs visual cleanliness.\n *\n * ## The Duplicate Line Problem\n *\n * When streaming responses, some LLM providers (especially for reasoning/thinking\n * blocks) resend all previous content with each update rather than just the delta.\n * This manifests as:\n * - Numbered list items appearing multiple times\n * - Paragraph beginnings repeated\n * - Code blocks with duplicated lines\n *\n * ## Deduplication Strategy\n *\n * We maintain a sliding window of recently-seen lines. Each new line is checked\n * against this window; if found, it's collapsed. The window size varies by mode:\n * - **Soft mode**: Small window (40 lines) catches local repetition\n * - **Aggressive mode**: Large window (120 lines) catches re-sent blocks\n *\n * Cross-block mode shares history between text blocks in the same message,\n * catching duplicates that span the streaming chunk boundaries.\n *\n * @module conversation/render-model\n */\n\nimport type {\n\tAppMessage,\n\tAssistantMessage,\n\tAttachment,\n\tStopReason,\n\tToolResultMessage,\n\tUserMessageWithAttachments,\n} from \"../agent/types.js\";\n\nexport type RenderableMessage =\n\t| RenderableUserMessage\n\t| RenderableAssistantMessage\n\t| RenderableToolResultMessage;\n\n/**\n * Content cleaning modes for handling streaming artifacts\n *\n * - `off`: No cleaning, render exactly as received (for debugging)\n * - `soft`: Light deduplication for adjacent duplicate lines\n * - `aggressive`: Heavy deduplication with large sliding window and cross-block history\n */\nexport type CleanMode = \"off\" | \"soft\" | \"aggressive\";\n\nexport interface RenderOptions {\n\tcleanMode?: CleanMode;\n}\n\n/**\n * Collapse Duplicate Lines - Removes streaming-induced repetition\n *\n * Primary entry point for line deduplication. Creates a fresh history array\n * for single-block use, or delegates to the history-sharing variant for\n * cross-block deduplication.\n *\n * @param text - The text content to deduplicate\n * @param options - Configuration for deduplication behavior\n * @param options.windowSize - How many recent lines to remember (default: 1)\n * @param options.crossBlock - If true, initializes shared history for cross-block mode\n * @returns Object with deduplicated text and whether any changes were made\n */\nexport function collapseRepeatedLines(\n\ttext: string,\n\toptions: { windowSize?: number; crossBlock?: boolean } = {},\n): { text: string; changed: boolean } {\n\treturn collapseRepeatedLinesWithHistory(text, {\n\t\t...options,\n\t\tsharedHistory: options.crossBlock ? [] : undefined,\n\t});\n}\n\n/**\n * History-Aware Line Deduplication - Core algorithm with shared state\n *\n * This is the workhorse function that actually performs deduplication. It maintains\n * a sliding window of recently-seen lines and filters out repetitions.\n *\n * ## Algorithm\n *\n * For each line in the input:\n * 1. Normalize by trimming trailing whitespace (leading preserved for code)\n * 2. Collapse consecutive blank lines to single blank\n * 3. Check if line exists in recent history window\n * 4. If duplicate: skip it (and any trailing blank before it)\n * 5. If unique: add to output and update history window\n *\n * ## Window Semantics\n *\n * The `windowSize` parameter controls how far back we look for duplicates:\n * - windowSize=1: Only catches immediately consecutive duplicates\n * - windowSize=40: Catches duplicates within ~40 lines (soft mode)\n * - windowSize=120: Catches duplicates from large re-sent blocks (aggressive)\n *\n * The window is FIFO: oldest lines drop off as new ones are added.\n *\n * ## Cross-Block Mode\n *\n * When `sharedHistory` is provided, the history array persists across multiple\n * calls. This is essential for streaming where content arrives in chunks:\n *\n * Chunk 1: \"1. First item\\n2. Second item\"\n * Chunk 2: \"2. Second item\\n3. Third item\" <- \"2. Second item\" is duplicate\n *\n * Without cross-block mode, chunk 2's duplicate wouldn't be detected since\n * each call would start with empty history.\n *\n * ## Blank Line Handling\n *\n * Blank lines receive special treatment:\n * - Multiple consecutive blanks collapse to one (visual spacing)\n * - Trailing blanks before duplicates are also removed (prevents orphan whitespace)\n * - Empty lines don't enter the history window (they're never \"duplicate content\")\n *\n * @param text - The text content to deduplicate\n * @param options.windowSize - Size of the sliding history window (default: 1)\n * @param options.crossBlock - Whether we're in cross-block mode (affects duplicate check)\n * @param options.sharedHistory - External history array for cross-block persistence\n * @returns Object with deduplicated text and whether any changes were made\n */\nexport function collapseRepeatedLinesWithHistory(\n\ttext: string,\n\toptions: {\n\t\twindowSize?: number;\n\t\tcrossBlock?: boolean;\n\t\tsharedHistory?: string[];\n\t} = {},\n): { text: string; changed: boolean } {\n\t// Split on both Unix and Windows line endings\n\tconst lines = text.split(/\\r?\\n/);\n\tconst result: string[] = [];\n\tconst windowSize = options.windowSize ?? 1;\n\t// Use shared history if provided (cross-block mode), otherwise local array\n\tconst recent: string[] = options.sharedHistory ?? [];\n\tlet changed = false;\n\n\tfor (const line of lines) {\n\t\t// Normalize: trim trailing whitespace but preserve leading (for code indentation)\n\t\tconst normalized = line.trimEnd();\n\t\tconst isEmpty = normalized.length === 0;\n\n\t\t// Rule 1: Collapse runs of blank lines to a single blank\n\t\t// This prevents visual gaps from accumulating during streaming\n\t\tif (\n\t\t\tisEmpty &&\n\t\t\tresult.length > 0 &&\n\t\t\tresult[result.length - 1]!.length === 0\n\t\t) {\n\t\t\tchanged = true;\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Rule 2: Check for duplicate content lines\n\t\t// In cross-block mode: search entire history window\n\t\t// In local mode: only check the immediately previous line\n\t\tconst isDuplicate =\n\t\t\t!isEmpty &&\n\t\t\t(options.crossBlock\n\t\t\t\t? recent.includes(normalized)\n\t\t\t\t: recent.length > 0 && recent[recent.length - 1] === normalized);\n\n\t\tif (isDuplicate) {\n\t\t\t// Clean up trailing blank that precedes the duplicate\n\t\t\t// This prevents orphaned whitespace when duplicates are removed\n\t\t\tif (result.length > 0 && result[result.length - 1]!.length === 0) {\n\t\t\t\tresult.pop();\n\t\t\t}\n\t\t\tchanged = true;\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Line is unique - add to output\n\t\tresult.push(line);\n\n\t\t// Update sliding window history (only for non-empty lines)\n\t\tif (!isEmpty) {\n\t\t\trecent.push(normalized);\n\t\t\t// Maintain window size by dropping oldest entry\n\t\t\tif (recent.length > windowSize) {\n\t\t\t\trecent.shift();\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { text: result.join(\"\\n\"), changed };\n}\n\nexport interface RenderableUserMessage {\n\tkind: \"user\";\n\ttext: string;\n\tattachments: RenderableAttachment[];\n\traw: UserMessageWithAttachments;\n}\n\nexport interface RenderableAssistantMessage {\n\tkind: \"assistant\";\n\ttextBlocks: string[];\n\tthinkingBlocks: string[];\n\ttoolCalls: RenderableToolCall[];\n\tstopReason: StopReason;\n\terrorMessage?: string;\n\tcleaned: boolean;\n\traw: AssistantMessage;\n}\n\nexport interface RenderableToolCall {\n\tid: string;\n\tname: string;\n\targuments: Record<string, unknown>;\n}\n\nexport interface RenderableToolResultMessage {\n\tkind: \"toolResult\";\n\ttoolCallId: string;\n\ttoolName: string;\n\ttextContent: string;\n\timages: RenderableImageContent[];\n\tisError: boolean;\n\tdetails?: unknown;\n\traw: ToolResultMessage;\n}\n\nexport interface RenderableAttachment {\n\tid: string;\n\ttype: Attachment[\"type\"];\n\tfileName: string;\n\tmimeType: string;\n\tsize: number;\n\tpreview?: string;\n}\n\nexport interface RenderableImageContent {\n\tmimeType: string;\n\tdata: string;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction isAssistantContentBlock(\n\tvalue: unknown,\n): value is AssistantMessage[\"content\"][number] {\n\tif (!isRecord(value)) {\n\t\treturn false;\n\t}\n\n\tswitch (value.type) {\n\t\tcase \"text\":\n\t\t\treturn typeof value.text === \"string\";\n\t\tcase \"thinking\":\n\t\t\treturn typeof value.thinking === \"string\";\n\t\tcase \"toolCall\":\n\t\t\treturn (\n\t\t\t\ttypeof value.id === \"string\" &&\n\t\t\t\ttypeof value.name === \"string\" &&\n\t\t\t\tisRecord(value.arguments)\n\t\t\t);\n\t\tdefault:\n\t\t\treturn false;\n\t}\n}\n\nfunction normalizeAssistantContent(\n\tcontent: unknown,\n): AssistantMessage[\"content\"] {\n\tif (typeof content === \"string\") {\n\t\treturn content.trim() ? [{ type: \"text\", text: content }] : [];\n\t}\n\tif (!Array.isArray(content)) {\n\t\treturn [];\n\t}\n\treturn content.filter(isAssistantContentBlock);\n}\n\nfunction isToolResultContentBlock(\n\tvalue: unknown,\n): value is ToolResultMessage[\"content\"][number] {\n\tif (!isRecord(value)) {\n\t\treturn false;\n\t}\n\n\tif (value.type === \"text\") {\n\t\treturn typeof value.text === \"string\";\n\t}\n\tif (value.type === \"image\") {\n\t\treturn typeof value.data === \"string\" && typeof value.mimeType === \"string\";\n\t}\n\treturn false;\n}\n\nfunction normalizeToolResultContent(\n\tcontent: unknown,\n): ToolResultMessage[\"content\"] {\n\tif (typeof content === \"string\") {\n\t\treturn content.trim() ? [{ type: \"text\", text: content }] : [];\n\t}\n\tif (!Array.isArray(content)) {\n\t\treturn [];\n\t}\n\treturn content.filter(isToolResultContentBlock);\n}\n\nfunction collapseProgressiveBlocks(blocks: string[]): {\n\tblocks: string[];\n\tcollapsed: boolean;\n} {\n\tif (blocks.length <= 1) return { blocks, collapsed: false };\n\n\tconst result: string[] = [];\n\tlet current = \"\";\n\tlet collapsed = false;\n\n\tfor (const block of blocks) {\n\t\tif (!current) {\n\t\t\tcurrent = block;\n\t\t\tcontinue;\n\t\t}\n\n\t\t// If the new block is an extension of the current one (progressive snapshot),\n\t\t// keep only the longer block.\n\t\tif (block.startsWith(current)) {\n\t\t\tcurrent = block;\n\t\t\tcollapsed = true;\n\t\t\tcontinue;\n\t\t}\n\n\t\t// If the current block is an extension of the new one, drop the shorter snapshot.\n\t\tif (current.startsWith(block)) {\n\t\t\tcollapsed = true;\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Otherwise the block is distinct – commit the current block and start a new one.\n\t\tresult.push(current);\n\t\tcurrent = block;\n\t}\n\n\tif (current) {\n\t\tresult.push(current);\n\t}\n\n\treturn { blocks: result, collapsed };\n}\n\nexport function toRenderableUserMessage(\n\tmessage: UserMessageWithAttachments,\n): RenderableUserMessage {\n\treturn {\n\t\tkind: \"user\",\n\t\ttext: extractTextFromUserContent(message),\n\t\tattachments:\n\t\t\tmessage.attachments?.map((attachment) => ({\n\t\t\t\tid: attachment.id,\n\t\t\t\ttype: attachment.type,\n\t\t\t\tfileName: attachment.fileName,\n\t\t\t\tmimeType: attachment.mimeType,\n\t\t\t\tsize: attachment.size,\n\t\t\t\tpreview: attachment.preview,\n\t\t\t})) ?? [],\n\t\traw: message,\n\t};\n}\n\nexport function toRenderableAssistantMessage(\n\tmessage: AssistantMessage,\n\toptions: RenderOptions = {},\n): RenderableAssistantMessage {\n\tconst textBlocks: string[] = [];\n\tconst thinkingBlocks: string[] = [];\n\tconst toolCalls: RenderableToolCall[] = [];\n\tconst cleanMode = options.cleanMode ?? \"off\";\n\tlet cleaned = false;\n\t// Share recent-line history across blocks so duplicated numbered items that\n\t// arrive as separate chunks during streaming get collapsed.\n\tconst recentLines: string[] = [];\n\n\tconst cleanText = (value: string): { text: string; changed: boolean } => {\n\t\tif (cleanMode === \"off\") {\n\t\t\treturn { text: value, changed: false };\n\t\t}\n\t\t// Keep a larger recent-line window so we can collapse content when\n\t\t// providers resend cumulative chunks (e.g., entire bullet lists on each\n\t\t// delta). Soft mode gets a generous window; aggressive mode gets an\n\t\t// even larger one, but both are bounded to avoid unbounded growth.\n\t\tconst windowSize = cleanMode === \"aggressive\" ? 120 : 40;\n\t\treturn collapseRepeatedLinesWithHistory(value, {\n\t\t\twindowSize,\n\t\t\tcrossBlock: true,\n\t\t\tsharedHistory: recentLines,\n\t\t});\n\t};\n\n\tfor (const content of normalizeAssistantContent(message.content)) {\n\t\tif (content.type === \"text\" && content.text.trim()) {\n\t\t\tconst { text, changed } = cleanText(content.text.trim());\n\t\t\ttextBlocks.push(text);\n\t\t\tcleaned = cleaned || changed;\n\t\t} else if (content.type === \"thinking\" && content.thinking.trim()) {\n\t\t\tconst { text, changed } = cleanText(content.thinking.trim());\n\t\t\tthinkingBlocks.push(text);\n\t\t\tcleaned = cleaned || changed;\n\t\t} else if (content.type === \"toolCall\") {\n\t\t\ttoolCalls.push({\n\t\t\t\tid: content.id,\n\t\t\t\tname: content.name,\n\t\t\t\targuments: content.arguments,\n\t\t\t});\n\t\t}\n\t}\n\n\tconst collapsedText = collapseProgressiveBlocks(textBlocks);\n\tconst collapsedThinking = collapseProgressiveBlocks(thinkingBlocks);\n\n\treturn {\n\t\tkind: \"assistant\",\n\t\ttextBlocks: collapsedText.blocks,\n\t\tthinkingBlocks: collapsedThinking.blocks,\n\t\ttoolCalls,\n\t\tstopReason: message.stopReason,\n\t\terrorMessage: message.errorMessage,\n\t\tcleaned: cleaned || collapsedText.collapsed || collapsedThinking.collapsed,\n\t\traw: message,\n\t};\n}\n\nfunction maybeCleanText(\n\ttext: string,\n\tmode: CleanMode,\n): { text: string; changed: boolean } {\n\tif (mode === \"off\") {\n\t\treturn { text, changed: false };\n\t}\n\tif (mode === \"soft\") {\n\t\treturn collapseRepeatedLines(text);\n\t}\n\t// aggressive: dedupe within a sliding window across blocks\n\treturn collapseRepeatedLines(text, { windowSize: 8, crossBlock: true });\n}\n\nexport function toRenderableToolResultMessage(\n\tmessage: ToolResultMessage,\n): RenderableToolResultMessage {\n\tconst textContent = extractTextFromToolResult(message);\n\tconst images = normalizeToolResultContent(message.content)\n\t\t.filter((content) => content.type === \"image\")\n\t\t.map((content) => ({\n\t\t\tmimeType: content.mimeType,\n\t\t\tdata: content.data,\n\t\t}));\n\n\treturn {\n\t\tkind: \"toolResult\",\n\t\ttoolCallId: message.toolCallId,\n\t\ttoolName: message.toolName,\n\t\ttextContent,\n\t\timages,\n\t\tisError: message.isError,\n\t\tdetails: message.details,\n\t\traw: message,\n\t};\n}\n\nexport function createRenderableMessage(\n\tmessage: AppMessage,\n\toptions: RenderOptions = {},\n): RenderableMessage | null {\n\tif (message.role === \"user\") {\n\t\treturn toRenderableUserMessage(message as UserMessageWithAttachments);\n\t}\n\tif (message.role === \"assistant\") {\n\t\treturn toRenderableAssistantMessage(message, options);\n\t}\n\tif (message.role === \"toolResult\") {\n\t\treturn toRenderableToolResultMessage(message);\n\t}\n\treturn null;\n}\n\nexport function buildConversationModel(\n\tmessages: AppMessage[],\n\toptions: RenderOptions = {},\n): RenderableMessage[] {\n\tconst renderables: RenderableMessage[] = [];\n\tfor (const message of messages) {\n\t\tconst renderable = createRenderableMessage(message, options);\n\t\tif (renderable) {\n\t\t\trenderables.push(renderable);\n\t\t}\n\t}\n\treturn renderables;\n}\n\nexport function isRenderableUserMessage(\n\tmessage: RenderableMessage,\n): message is RenderableUserMessage {\n\treturn message.kind === \"user\";\n}\n\nexport function isRenderableAssistantMessage(\n\tmessage: RenderableMessage,\n): message is RenderableAssistantMessage {\n\treturn message.kind === \"assistant\";\n}\n\nexport function isRenderableToolResultMessage(\n\tmessage: RenderableMessage,\n): message is RenderableToolResultMessage {\n\treturn message.kind === \"toolResult\";\n}\n\nexport function renderMessageToPlainText(message: RenderableMessage): string {\n\tif (isRenderableUserMessage(message)) {\n\t\tconst attachmentNotes = message.attachments.map(\n\t\t\t(attachment) =>\n\t\t\t\t`[attachment] ${attachment.fileName} (${attachment.mimeType})`,\n\t\t);\n\t\treturn [message.text, ...attachmentNotes]\n\t\t\t.filter((part) => Boolean(part?.trim()))\n\t\t\t.join(\"\\n\")\n\t\t\t.trim();\n\t}\n\tif (isRenderableAssistantMessage(message)) {\n\t\tconst lines: string[] = [];\n\t\tlines.push(...message.textBlocks);\n\t\tlines.push(\n\t\t\t...message.thinkingBlocks.map((thinking) => `[thinking] ${thinking}`),\n\t\t);\n\t\tlines.push(...message.toolCalls.map((call) => `[tool call] ${call.name}`));\n\t\treturn lines.filter((part) => Boolean(part?.trim())).join(\"\\n\");\n\t}\n\tif (isRenderableToolResultMessage(message)) {\n\t\tconst imageLines = message.images.map(\n\t\t\t(image) => `[image] ${image.mimeType || \"attachment\"}`,\n\t\t);\n\t\treturn [message.textContent, ...imageLines]\n\t\t\t.filter((part) => Boolean(part?.trim()))\n\t\t\t.join(\"\\n\")\n\t\t\t.trim();\n\t}\n\treturn \"\";\n}\n\nfunction extractTextFromUserContent(\n\tmessage: UserMessageWithAttachments,\n): string {\n\tif (typeof message.content === \"string\") {\n\t\treturn message.content;\n\t}\n\tif (Array.isArray(message.content)) {\n\t\treturn message.content\n\t\t\t.filter((block) => block.type === \"text\")\n\t\t\t.map((block) => block.text)\n\t\t\t.join(\"\");\n\t}\n\treturn \"\";\n}\n\nfunction extractTextFromToolResult(message: ToolResultMessage): string {\n\treturn normalizeToolResultContent(message.content)\n\t\t.filter((content) => content.type === \"text\")\n\t\t.map((content) => content.text)\n\t\t.join(\"\\n\")\n\t\t.trim();\n}\n"]}
1
+ {"version":3,"file":"render-model.js","sourceRoot":"","sources":["../../src/conversation/render-model.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Render Model - Transforms raw messages into UI-ready format with content deduplication\n *\n * This module provides the transformation layer between raw agent messages and the\n * renderable structures consumed by the TUI. Its primary responsibilities:\n *\n * 1. **Message Normalization**: Extracts text, thinking blocks, tool calls, and\n * attachments into consistent, typed structures.\n *\n * 2. **Content Deduplication**: Removes repeated lines that occur during streaming,\n * particularly when LLM providers resend cumulative content on each delta.\n *\n * 3. **Clean Mode Support**: Three levels of content cleaning (off/soft/aggressive)\n * to balance rendering accuracy vs visual cleanliness.\n *\n * ## The Duplicate Line Problem\n *\n * When streaming responses, some LLM providers (especially for reasoning/thinking\n * blocks) resend all previous content with each update rather than just the delta.\n * This manifests as:\n * - Numbered list items appearing multiple times\n * - Paragraph beginnings repeated\n * - Code blocks with duplicated lines\n *\n * ## Deduplication Strategy\n *\n * We maintain a sliding window of recently-seen lines. Each new line is checked\n * against this window; if found, it's collapsed. The window size varies by mode:\n * - **Soft mode**: Small window (40 lines) catches local repetition\n * - **Aggressive mode**: Large window (120 lines) catches re-sent blocks\n *\n * Cross-block mode shares history between text blocks in the same message,\n * catching duplicates that span the streaming chunk boundaries.\n *\n * @module conversation/render-model\n */\nimport { isRecord } from \"../utils/json.js\";\n\nimport type {\n\tAppMessage,\n\tAssistantMessage,\n\tAttachment,\n\tStopReason,\n\tToolResultMessage,\n\tUserMessageWithAttachments,\n} from \"../agent/types.js\";\n\nexport type RenderableMessage =\n\t| RenderableUserMessage\n\t| RenderableAssistantMessage\n\t| RenderableToolResultMessage;\n\n/**\n * Content cleaning modes for handling streaming artifacts\n *\n * - `off`: No cleaning, render exactly as received (for debugging)\n * - `soft`: Light deduplication for adjacent duplicate lines\n * - `aggressive`: Heavy deduplication with large sliding window and cross-block history\n */\nexport type CleanMode = \"off\" | \"soft\" | \"aggressive\";\n\nexport interface RenderOptions {\n\tcleanMode?: CleanMode;\n}\n\n/**\n * Collapse Duplicate Lines - Removes streaming-induced repetition\n *\n * Primary entry point for line deduplication. Creates a fresh history array\n * for single-block use, or delegates to the history-sharing variant for\n * cross-block deduplication.\n *\n * @param text - The text content to deduplicate\n * @param options - Configuration for deduplication behavior\n * @param options.windowSize - How many recent lines to remember (default: 1)\n * @param options.crossBlock - If true, initializes shared history for cross-block mode\n * @returns Object with deduplicated text and whether any changes were made\n */\nexport function collapseRepeatedLines(\n\ttext: string,\n\toptions: { windowSize?: number; crossBlock?: boolean } = {},\n): { text: string; changed: boolean } {\n\treturn collapseRepeatedLinesWithHistory(text, {\n\t\t...options,\n\t\tsharedHistory: options.crossBlock ? [] : undefined,\n\t});\n}\n\n/**\n * History-Aware Line Deduplication - Core algorithm with shared state\n *\n * This is the workhorse function that actually performs deduplication. It maintains\n * a sliding window of recently-seen lines and filters out repetitions.\n *\n * ## Algorithm\n *\n * For each line in the input:\n * 1. Normalize by trimming trailing whitespace (leading preserved for code)\n * 2. Collapse consecutive blank lines to single blank\n * 3. Check if line exists in recent history window\n * 4. If duplicate: skip it (and any trailing blank before it)\n * 5. If unique: add to output and update history window\n *\n * ## Window Semantics\n *\n * The `windowSize` parameter controls how far back we look for duplicates:\n * - windowSize=1: Only catches immediately consecutive duplicates\n * - windowSize=40: Catches duplicates within ~40 lines (soft mode)\n * - windowSize=120: Catches duplicates from large re-sent blocks (aggressive)\n *\n * The window is FIFO: oldest lines drop off as new ones are added.\n *\n * ## Cross-Block Mode\n *\n * When `sharedHistory` is provided, the history array persists across multiple\n * calls. This is essential for streaming where content arrives in chunks:\n *\n * Chunk 1: \"1. First item\\n2. Second item\"\n * Chunk 2: \"2. Second item\\n3. Third item\" <- \"2. Second item\" is duplicate\n *\n * Without cross-block mode, chunk 2's duplicate wouldn't be detected since\n * each call would start with empty history.\n *\n * ## Blank Line Handling\n *\n * Blank lines receive special treatment:\n * - Multiple consecutive blanks collapse to one (visual spacing)\n * - Trailing blanks before duplicates are also removed (prevents orphan whitespace)\n * - Empty lines don't enter the history window (they're never \"duplicate content\")\n *\n * @param text - The text content to deduplicate\n * @param options.windowSize - Size of the sliding history window (default: 1)\n * @param options.crossBlock - Whether we're in cross-block mode (affects duplicate check)\n * @param options.sharedHistory - External history array for cross-block persistence\n * @returns Object with deduplicated text and whether any changes were made\n */\nexport function collapseRepeatedLinesWithHistory(\n\ttext: string,\n\toptions: {\n\t\twindowSize?: number;\n\t\tcrossBlock?: boolean;\n\t\tsharedHistory?: string[];\n\t} = {},\n): { text: string; changed: boolean } {\n\t// Split on both Unix and Windows line endings\n\tconst lines = text.split(/\\r?\\n/);\n\tconst result: string[] = [];\n\tconst windowSize = options.windowSize ?? 1;\n\t// Use shared history if provided (cross-block mode), otherwise local array\n\tconst recent: string[] = options.sharedHistory ?? [];\n\tlet changed = false;\n\n\tfor (const line of lines) {\n\t\t// Normalize: trim trailing whitespace but preserve leading (for code indentation)\n\t\tconst normalized = line.trimEnd();\n\t\tconst isEmpty = normalized.length === 0;\n\n\t\t// Rule 1: Collapse runs of blank lines to a single blank\n\t\t// This prevents visual gaps from accumulating during streaming\n\t\tif (\n\t\t\tisEmpty &&\n\t\t\tresult.length > 0 &&\n\t\t\tresult[result.length - 1]!.length === 0\n\t\t) {\n\t\t\tchanged = true;\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Rule 2: Check for duplicate content lines\n\t\t// In cross-block mode: search entire history window\n\t\t// In local mode: only check the immediately previous line\n\t\tconst isDuplicate =\n\t\t\t!isEmpty &&\n\t\t\t(options.crossBlock\n\t\t\t\t? recent.includes(normalized)\n\t\t\t\t: recent.length > 0 && recent[recent.length - 1] === normalized);\n\n\t\tif (isDuplicate) {\n\t\t\t// Clean up trailing blank that precedes the duplicate\n\t\t\t// This prevents orphaned whitespace when duplicates are removed\n\t\t\tif (result.length > 0 && result[result.length - 1]!.length === 0) {\n\t\t\t\tresult.pop();\n\t\t\t}\n\t\t\tchanged = true;\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Line is unique - add to output\n\t\tresult.push(line);\n\n\t\t// Update sliding window history (only for non-empty lines)\n\t\tif (!isEmpty) {\n\t\t\trecent.push(normalized);\n\t\t\t// Maintain window size by dropping oldest entry\n\t\t\tif (recent.length > windowSize) {\n\t\t\t\trecent.shift();\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { text: result.join(\"\\n\"), changed };\n}\n\nexport interface RenderableUserMessage {\n\tkind: \"user\";\n\ttext: string;\n\tattachments: RenderableAttachment[];\n\traw: UserMessageWithAttachments;\n}\n\nexport interface RenderableAssistantMessage {\n\tkind: \"assistant\";\n\ttextBlocks: string[];\n\tthinkingBlocks: string[];\n\ttoolCalls: RenderableToolCall[];\n\tstopReason: StopReason;\n\terrorMessage?: string;\n\tcleaned: boolean;\n\traw: AssistantMessage;\n}\n\nexport interface RenderableToolCall {\n\tid: string;\n\tname: string;\n\targuments: Record<string, unknown>;\n}\n\nexport interface RenderableToolResultMessage {\n\tkind: \"toolResult\";\n\ttoolCallId: string;\n\ttoolName: string;\n\ttextContent: string;\n\timages: RenderableImageContent[];\n\tisError: boolean;\n\tdetails?: unknown;\n\traw: ToolResultMessage;\n}\n\nexport interface RenderableAttachment {\n\tid: string;\n\ttype: Attachment[\"type\"];\n\tfileName: string;\n\tmimeType: string;\n\tsize: number;\n\tpreview?: string;\n}\n\nexport interface RenderableImageContent {\n\tmimeType: string;\n\tdata: string;\n}\n\nfunction isAssistantContentBlock(\n\tvalue: unknown,\n): value is AssistantMessage[\"content\"][number] {\n\tif (!isRecord(value)) {\n\t\treturn false;\n\t}\n\n\tswitch (value.type) {\n\t\tcase \"text\":\n\t\t\treturn typeof value.text === \"string\";\n\t\tcase \"thinking\":\n\t\t\treturn typeof value.thinking === \"string\";\n\t\tcase \"toolCall\":\n\t\t\treturn (\n\t\t\t\ttypeof value.id === \"string\" &&\n\t\t\t\ttypeof value.name === \"string\" &&\n\t\t\t\tisRecord(value.arguments)\n\t\t\t);\n\t\tdefault:\n\t\t\treturn false;\n\t}\n}\n\nfunction normalizeAssistantContent(\n\tcontent: unknown,\n): AssistantMessage[\"content\"] {\n\tif (typeof content === \"string\") {\n\t\treturn content.trim() ? [{ type: \"text\", text: content }] : [];\n\t}\n\tif (!Array.isArray(content)) {\n\t\treturn [];\n\t}\n\treturn content.filter(isAssistantContentBlock);\n}\n\nfunction isToolResultContentBlock(\n\tvalue: unknown,\n): value is ToolResultMessage[\"content\"][number] {\n\tif (!isRecord(value)) {\n\t\treturn false;\n\t}\n\n\tif (value.type === \"text\") {\n\t\treturn typeof value.text === \"string\";\n\t}\n\tif (value.type === \"image\") {\n\t\treturn typeof value.data === \"string\" && typeof value.mimeType === \"string\";\n\t}\n\treturn false;\n}\n\nfunction normalizeToolResultContent(\n\tcontent: unknown,\n): ToolResultMessage[\"content\"] {\n\tif (typeof content === \"string\") {\n\t\treturn content.trim() ? [{ type: \"text\", text: content }] : [];\n\t}\n\tif (!Array.isArray(content)) {\n\t\treturn [];\n\t}\n\treturn content.filter(isToolResultContentBlock);\n}\n\nfunction collapseProgressiveBlocks(blocks: string[]): {\n\tblocks: string[];\n\tcollapsed: boolean;\n} {\n\tif (blocks.length <= 1) return { blocks, collapsed: false };\n\n\tconst result: string[] = [];\n\tlet current = \"\";\n\tlet collapsed = false;\n\n\tfor (const block of blocks) {\n\t\tif (!current) {\n\t\t\tcurrent = block;\n\t\t\tcontinue;\n\t\t}\n\n\t\t// If the new block is an extension of the current one (progressive snapshot),\n\t\t// keep only the longer block.\n\t\tif (block.startsWith(current)) {\n\t\t\tcurrent = block;\n\t\t\tcollapsed = true;\n\t\t\tcontinue;\n\t\t}\n\n\t\t// If the current block is an extension of the new one, drop the shorter snapshot.\n\t\tif (current.startsWith(block)) {\n\t\t\tcollapsed = true;\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Otherwise the block is distinct – commit the current block and start a new one.\n\t\tresult.push(current);\n\t\tcurrent = block;\n\t}\n\n\tif (current) {\n\t\tresult.push(current);\n\t}\n\n\treturn { blocks: result, collapsed };\n}\n\nexport function toRenderableUserMessage(\n\tmessage: UserMessageWithAttachments,\n): RenderableUserMessage {\n\treturn {\n\t\tkind: \"user\",\n\t\ttext: extractTextFromUserContent(message),\n\t\tattachments:\n\t\t\tmessage.attachments?.map((attachment) => ({\n\t\t\t\tid: attachment.id,\n\t\t\t\ttype: attachment.type,\n\t\t\t\tfileName: attachment.fileName,\n\t\t\t\tmimeType: attachment.mimeType,\n\t\t\t\tsize: attachment.size,\n\t\t\t\tpreview: attachment.preview,\n\t\t\t})) ?? [],\n\t\traw: message,\n\t};\n}\n\nexport function toRenderableAssistantMessage(\n\tmessage: AssistantMessage,\n\toptions: RenderOptions = {},\n): RenderableAssistantMessage {\n\tconst textBlocks: string[] = [];\n\tconst thinkingBlocks: string[] = [];\n\tconst toolCalls: RenderableToolCall[] = [];\n\tconst cleanMode = options.cleanMode ?? \"off\";\n\tlet cleaned = false;\n\t// Share recent-line history across blocks so duplicated numbered items that\n\t// arrive as separate chunks during streaming get collapsed.\n\tconst recentLines: string[] = [];\n\n\tconst cleanText = (value: string): { text: string; changed: boolean } => {\n\t\tif (cleanMode === \"off\") {\n\t\t\treturn { text: value, changed: false };\n\t\t}\n\t\t// Keep a larger recent-line window so we can collapse content when\n\t\t// providers resend cumulative chunks (e.g., entire bullet lists on each\n\t\t// delta). Soft mode gets a generous window; aggressive mode gets an\n\t\t// even larger one, but both are bounded to avoid unbounded growth.\n\t\tconst windowSize = cleanMode === \"aggressive\" ? 120 : 40;\n\t\treturn collapseRepeatedLinesWithHistory(value, {\n\t\t\twindowSize,\n\t\t\tcrossBlock: true,\n\t\t\tsharedHistory: recentLines,\n\t\t});\n\t};\n\n\tfor (const content of normalizeAssistantContent(message.content)) {\n\t\tif (content.type === \"text\" && content.text.trim()) {\n\t\t\tconst { text, changed } = cleanText(content.text.trim());\n\t\t\ttextBlocks.push(text);\n\t\t\tcleaned = cleaned || changed;\n\t\t} else if (content.type === \"thinking\" && content.thinking.trim()) {\n\t\t\tconst { text, changed } = cleanText(content.thinking.trim());\n\t\t\tthinkingBlocks.push(text);\n\t\t\tcleaned = cleaned || changed;\n\t\t} else if (content.type === \"toolCall\") {\n\t\t\ttoolCalls.push({\n\t\t\t\tid: content.id,\n\t\t\t\tname: content.name,\n\t\t\t\targuments: content.arguments,\n\t\t\t});\n\t\t}\n\t}\n\n\tconst collapsedText = collapseProgressiveBlocks(textBlocks);\n\tconst collapsedThinking = collapseProgressiveBlocks(thinkingBlocks);\n\n\treturn {\n\t\tkind: \"assistant\",\n\t\ttextBlocks: collapsedText.blocks,\n\t\tthinkingBlocks: collapsedThinking.blocks,\n\t\ttoolCalls,\n\t\tstopReason: message.stopReason,\n\t\terrorMessage: message.errorMessage,\n\t\tcleaned: cleaned || collapsedText.collapsed || collapsedThinking.collapsed,\n\t\traw: message,\n\t};\n}\n\nfunction maybeCleanText(\n\ttext: string,\n\tmode: CleanMode,\n): { text: string; changed: boolean } {\n\tif (mode === \"off\") {\n\t\treturn { text, changed: false };\n\t}\n\tif (mode === \"soft\") {\n\t\treturn collapseRepeatedLines(text);\n\t}\n\t// aggressive: dedupe within a sliding window across blocks\n\treturn collapseRepeatedLines(text, { windowSize: 8, crossBlock: true });\n}\n\nexport function toRenderableToolResultMessage(\n\tmessage: ToolResultMessage,\n): RenderableToolResultMessage {\n\tconst textContent = extractTextFromToolResult(message);\n\tconst images = normalizeToolResultContent(message.content)\n\t\t.filter((content) => content.type === \"image\")\n\t\t.map((content) => ({\n\t\t\tmimeType: content.mimeType,\n\t\t\tdata: content.data,\n\t\t}));\n\n\treturn {\n\t\tkind: \"toolResult\",\n\t\ttoolCallId: message.toolCallId,\n\t\ttoolName: message.toolName,\n\t\ttextContent,\n\t\timages,\n\t\tisError: message.isError,\n\t\tdetails: message.details,\n\t\traw: message,\n\t};\n}\n\nexport function createRenderableMessage(\n\tmessage: AppMessage,\n\toptions: RenderOptions = {},\n): RenderableMessage | null {\n\tif (message.role === \"user\") {\n\t\treturn toRenderableUserMessage(message as UserMessageWithAttachments);\n\t}\n\tif (message.role === \"assistant\") {\n\t\treturn toRenderableAssistantMessage(message, options);\n\t}\n\tif (message.role === \"toolResult\") {\n\t\treturn toRenderableToolResultMessage(message);\n\t}\n\treturn null;\n}\n\nexport function buildConversationModel(\n\tmessages: AppMessage[],\n\toptions: RenderOptions = {},\n): RenderableMessage[] {\n\tconst renderables: RenderableMessage[] = [];\n\tfor (const message of messages) {\n\t\tconst renderable = createRenderableMessage(message, options);\n\t\tif (renderable) {\n\t\t\trenderables.push(renderable);\n\t\t}\n\t}\n\treturn renderables;\n}\n\nexport function isRenderableUserMessage(\n\tmessage: RenderableMessage,\n): message is RenderableUserMessage {\n\treturn message.kind === \"user\";\n}\n\nexport function isRenderableAssistantMessage(\n\tmessage: RenderableMessage,\n): message is RenderableAssistantMessage {\n\treturn message.kind === \"assistant\";\n}\n\nexport function isRenderableToolResultMessage(\n\tmessage: RenderableMessage,\n): message is RenderableToolResultMessage {\n\treturn message.kind === \"toolResult\";\n}\n\nexport function renderMessageToPlainText(message: RenderableMessage): string {\n\tif (isRenderableUserMessage(message)) {\n\t\tconst attachmentNotes = message.attachments.map(\n\t\t\t(attachment) =>\n\t\t\t\t`[attachment] ${attachment.fileName} (${attachment.mimeType})`,\n\t\t);\n\t\treturn [message.text, ...attachmentNotes]\n\t\t\t.filter((part) => Boolean(part?.trim()))\n\t\t\t.join(\"\\n\")\n\t\t\t.trim();\n\t}\n\tif (isRenderableAssistantMessage(message)) {\n\t\tconst lines: string[] = [];\n\t\tlines.push(...message.textBlocks);\n\t\tlines.push(\n\t\t\t...message.thinkingBlocks.map((thinking) => `[thinking] ${thinking}`),\n\t\t);\n\t\tlines.push(...message.toolCalls.map((call) => `[tool call] ${call.name}`));\n\t\treturn lines.filter((part) => Boolean(part?.trim())).join(\"\\n\");\n\t}\n\tif (isRenderableToolResultMessage(message)) {\n\t\tconst imageLines = message.images.map(\n\t\t\t(image) => `[image] ${image.mimeType || \"attachment\"}`,\n\t\t);\n\t\treturn [message.textContent, ...imageLines]\n\t\t\t.filter((part) => Boolean(part?.trim()))\n\t\t\t.join(\"\\n\")\n\t\t\t.trim();\n\t}\n\treturn \"\";\n}\n\nfunction extractTextFromUserContent(\n\tmessage: UserMessageWithAttachments,\n): string {\n\tif (typeof message.content === \"string\") {\n\t\treturn message.content;\n\t}\n\tif (Array.isArray(message.content)) {\n\t\treturn message.content\n\t\t\t.filter((block) => block.type === \"text\")\n\t\t\t.map((block) => block.text)\n\t\t\t.join(\"\");\n\t}\n\treturn \"\";\n}\n\nfunction extractTextFromToolResult(message: ToolResultMessage): string {\n\treturn normalizeToolResultContent(message.content)\n\t\t.filter((content) => content.type === \"text\")\n\t\t.map((content) => content.text)\n\t\t.join(\"\\n\")\n\t\t.trim();\n}\n"]}
@@ -0,0 +1,75 @@
1
+ import type { RuntimeEnv } from "../runtime/env.js";
2
+ import type { CustomerValueRange, CustomerValueReport, MultiAgentValue, TrustCard } from "./report.js";
3
+ export declare function ambientLearnerPresenceCommand(learnerPath: string): string;
4
+ export interface AmbientLearnerFlushResult {
5
+ flushed: boolean;
6
+ learnerPath?: string;
7
+ collectionGap?: string;
8
+ }
9
+ export interface AmbientAutomationOpportunity {
10
+ id: "a2a-followup-watchdog" | "failed-tool-digest" | "memory-gap-digest" | "ambient-learner-review";
11
+ customerOutcome: string;
12
+ triggerEvidence: string;
13
+ recommendedCadence: "hourly" | "daily" | "weekly";
14
+ scriptGate: string;
15
+ delivery: string;
16
+ }
17
+ export interface PlaybookLearningOpportunity {
18
+ id: "protect-transient-failures" | "capture-successful-pattern" | "repair-low-success-pattern" | "multi-agent-verification-playbook" | "handoff-memory-playbook";
19
+ customerOutcome: string;
20
+ evidenceSignal: string;
21
+ guardrail: string;
22
+ recommendedArtifact: string;
23
+ }
24
+ export interface AmbientCustomerValue {
25
+ learnerPath: string;
26
+ outcomeCount: number;
27
+ successCount: number;
28
+ failureCount: number;
29
+ successRate: number | null;
30
+ totalCostUsd: number;
31
+ patternCount: number;
32
+ actionablePatternCount: number;
33
+ protectedTransientFailureCount: number;
34
+ automationOpportunities: AmbientAutomationOpportunity[];
35
+ playbookLearningOpportunities: PlaybookLearningOpportunity[];
36
+ collectionGaps: string[];
37
+ }
38
+ interface AmbientLearningSummary {
39
+ learnerPath: string;
40
+ outcomes: AmbientLearnerOutcome[];
41
+ patterns: AmbientLearnerPattern[];
42
+ collectionGaps: string[];
43
+ }
44
+ interface AmbientLearnerOutcome {
45
+ success: boolean;
46
+ failureReason?: string;
47
+ labels: string[];
48
+ repo?: string;
49
+ taskType?: string;
50
+ eventType?: string;
51
+ costUsd: number;
52
+ timestamp?: number;
53
+ }
54
+ interface AmbientLearnerPattern {
55
+ patternType: string;
56
+ key: string;
57
+ successRate: number;
58
+ sampleCount: number;
59
+ successCount: number;
60
+ transientFailureCount: number;
61
+ nonTransientFailureCount: number;
62
+ nonTransientSampleCount: number;
63
+ nonTransientSuccessRate: number | null;
64
+ }
65
+ export declare function flushAmbientLearnerForReport(env: RuntimeEnv, _learnerPath: string, flush: (env: RuntimeEnv) => Promise<AmbientLearnerFlushResult>): Promise<AmbientLearnerFlushResult>;
66
+ export declare function flushAmbientLearnerBeforeRead(env: RuntimeEnv): Promise<AmbientLearnerFlushResult>;
67
+ export declare function summarizeAmbientLearning(learnerPath: string, range: CustomerValueRange, flushResult?: AmbientLearnerFlushResult, requestedLearnerPath?: string): Promise<AmbientLearningSummary>;
68
+ export declare function buildAmbientCustomerValue(input: {
69
+ learning: AmbientLearningSummary;
70
+ multiAgent: MultiAgentValue;
71
+ trustCards: TrustCard[];
72
+ handoffs: CustomerValueReport["handoffs"];
73
+ }): AmbientCustomerValue;
74
+ export {};
75
+ //# sourceMappingURL=ambient-learning.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ambient-learning.d.ts","sourceRoot":"","sources":["../../src/customer-value/ambient-learning.ts"],"names":[],"mappings":"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"}