agim-cli 1.2.45 → 1.2.49

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 (434) hide show
  1. package/CHANGELOG.md +340 -0
  2. package/README.md +40 -6
  3. package/README.zh-CN.md +40 -6
  4. package/dist/cli-ui/config-wizard.js +16 -2
  5. package/dist/cli-ui/config-wizard.js.map +1 -1
  6. package/dist/cli-ui/diag.d.ts +29 -0
  7. package/dist/cli-ui/diag.d.ts.map +1 -0
  8. package/dist/cli-ui/diag.js +135 -0
  9. package/dist/cli-ui/diag.js.map +1 -0
  10. package/dist/cli-ui/i18n.d.ts +38 -0
  11. package/dist/cli-ui/i18n.d.ts.map +1 -1
  12. package/dist/cli-ui/i18n.js +101 -0
  13. package/dist/cli-ui/i18n.js.map +1 -1
  14. package/dist/cli-ui/setup-llm.d.ts +30 -0
  15. package/dist/cli-ui/setup-llm.d.ts.map +1 -0
  16. package/dist/cli-ui/setup-llm.js +460 -0
  17. package/dist/cli-ui/setup-llm.js.map +1 -0
  18. package/dist/cli-ui/setup-mcp.d.ts +19 -0
  19. package/dist/cli-ui/setup-mcp.d.ts.map +1 -0
  20. package/dist/cli-ui/setup-mcp.js +308 -0
  21. package/dist/cli-ui/setup-mcp.js.map +1 -0
  22. package/dist/cli-ui/token-menu.js +2 -2
  23. package/dist/cli-ui/token-menu.js.map +1 -1
  24. package/dist/cli.js +121 -22
  25. package/dist/cli.js.map +1 -1
  26. package/dist/core/access-token.d.ts +16 -5
  27. package/dist/core/access-token.d.ts.map +1 -1
  28. package/dist/core/access-token.js +82 -13
  29. package/dist/core/access-token.js.map +1 -1
  30. package/dist/core/agent-cwd.d.ts.map +1 -1
  31. package/dist/core/agent-cwd.js +74 -0
  32. package/dist/core/agent-cwd.js.map +1 -1
  33. package/dist/core/approval-bus.d.ts +22 -0
  34. package/dist/core/approval-bus.d.ts.map +1 -1
  35. package/dist/core/approval-bus.js +93 -0
  36. package/dist/core/approval-bus.js.map +1 -1
  37. package/dist/core/ask-user-router.d.ts +24 -0
  38. package/dist/core/ask-user-router.d.ts.map +1 -0
  39. package/dist/core/ask-user-router.js +84 -0
  40. package/dist/core/ask-user-router.js.map +1 -0
  41. package/dist/core/ask-user-rpc.d.ts +80 -0
  42. package/dist/core/ask-user-rpc.d.ts.map +1 -0
  43. package/dist/core/ask-user-rpc.js +388 -0
  44. package/dist/core/ask-user-rpc.js.map +1 -0
  45. package/dist/core/audit-log.d.ts +1 -1
  46. package/dist/core/audit-log.d.ts.map +1 -1
  47. package/dist/core/audit-log.js.map +1 -1
  48. package/dist/core/commands/builtin.d.ts.map +1 -1
  49. package/dist/core/commands/builtin.js +21 -5
  50. package/dist/core/commands/builtin.js.map +1 -1
  51. package/dist/core/commands/goal.d.ts +3 -0
  52. package/dist/core/commands/goal.d.ts.map +1 -0
  53. package/dist/core/commands/goal.js +240 -0
  54. package/dist/core/commands/goal.js.map +1 -0
  55. package/dist/core/commands/heartbeat.d.ts +3 -0
  56. package/dist/core/commands/heartbeat.d.ts.map +1 -0
  57. package/dist/core/commands/heartbeat.js +219 -0
  58. package/dist/core/commands/heartbeat.js.map +1 -0
  59. package/dist/core/commands/router-compare.d.ts +3 -0
  60. package/dist/core/commands/router-compare.d.ts.map +1 -0
  61. package/dist/core/commands/router-compare.js +81 -0
  62. package/dist/core/commands/router-compare.js.map +1 -0
  63. package/dist/core/commands/router.d.ts.map +1 -1
  64. package/dist/core/commands/router.js +9 -1
  65. package/dist/core/commands/router.js.map +1 -1
  66. package/dist/core/commands/skill.d.ts +3 -0
  67. package/dist/core/commands/skill.d.ts.map +1 -0
  68. package/dist/core/commands/skill.js +91 -0
  69. package/dist/core/commands/skill.js.map +1 -0
  70. package/dist/core/config-schema.d.ts +28 -0
  71. package/dist/core/config-schema.d.ts.map +1 -1
  72. package/dist/core/config-schema.js +124 -0
  73. package/dist/core/config-schema.js.map +1 -1
  74. package/dist/core/goals.d.ts +81 -0
  75. package/dist/core/goals.d.ts.map +1 -0
  76. package/dist/core/goals.js +361 -0
  77. package/dist/core/goals.js.map +1 -0
  78. package/dist/core/heartbeat-store.d.ts +90 -0
  79. package/dist/core/heartbeat-store.d.ts.map +1 -0
  80. package/dist/core/heartbeat-store.js +302 -0
  81. package/dist/core/heartbeat-store.js.map +1 -0
  82. package/dist/core/heartbeat.d.ts +35 -0
  83. package/dist/core/heartbeat.d.ts.map +1 -0
  84. package/dist/core/heartbeat.js +332 -0
  85. package/dist/core/heartbeat.js.map +1 -0
  86. package/dist/core/intent-llm.d.ts +9 -0
  87. package/dist/core/intent-llm.d.ts.map +1 -1
  88. package/dist/core/intent-llm.js +77 -32
  89. package/dist/core/intent-llm.js.map +1 -1
  90. package/dist/core/llm/agent-loop.d.ts +112 -0
  91. package/dist/core/llm/agent-loop.d.ts.map +1 -0
  92. package/dist/core/llm/agent-loop.js +313 -0
  93. package/dist/core/llm/agent-loop.js.map +1 -0
  94. package/dist/core/llm/anthropic-provider.d.ts +53 -0
  95. package/dist/core/llm/anthropic-provider.d.ts.map +1 -0
  96. package/dist/core/llm/anthropic-provider.js +339 -0
  97. package/dist/core/llm/anthropic-provider.js.map +1 -0
  98. package/dist/core/llm/auto-compact.d.ts +35 -0
  99. package/dist/core/llm/auto-compact.d.ts.map +1 -0
  100. package/dist/core/llm/auto-compact.js +149 -0
  101. package/dist/core/llm/auto-compact.js.map +1 -0
  102. package/dist/core/llm/builtin-dispatcher.d.ts +21 -0
  103. package/dist/core/llm/builtin-dispatcher.d.ts.map +1 -0
  104. package/dist/core/llm/builtin-dispatcher.js +196 -0
  105. package/dist/core/llm/builtin-dispatcher.js.map +1 -0
  106. package/dist/core/llm/imhub-dispatcher.d.ts +27 -0
  107. package/dist/core/llm/imhub-dispatcher.d.ts.map +1 -0
  108. package/dist/core/llm/imhub-dispatcher.js +308 -0
  109. package/dist/core/llm/imhub-dispatcher.js.map +1 -0
  110. package/dist/core/llm/index.d.ts +11 -0
  111. package/dist/core/llm/index.d.ts.map +1 -0
  112. package/dist/core/llm/index.js +16 -0
  113. package/dist/core/llm/index.js.map +1 -0
  114. package/dist/core/llm/introspection.d.ts +73 -0
  115. package/dist/core/llm/introspection.d.ts.map +1 -0
  116. package/dist/core/llm/introspection.js +90 -0
  117. package/dist/core/llm/introspection.js.map +1 -0
  118. package/dist/core/llm/mcp-client.d.ts +80 -0
  119. package/dist/core/llm/mcp-client.d.ts.map +1 -0
  120. package/dist/core/llm/mcp-client.js +270 -0
  121. package/dist/core/llm/mcp-client.js.map +1 -0
  122. package/dist/core/llm/mcp-registry.d.ts +57 -0
  123. package/dist/core/llm/mcp-registry.d.ts.map +1 -0
  124. package/dist/core/llm/mcp-registry.js +155 -0
  125. package/dist/core/llm/mcp-registry.js.map +1 -0
  126. package/dist/core/llm/openai-compat-provider.d.ts +65 -0
  127. package/dist/core/llm/openai-compat-provider.d.ts.map +1 -0
  128. package/dist/core/llm/openai-compat-provider.js +451 -0
  129. package/dist/core/llm/openai-compat-provider.js.map +1 -0
  130. package/dist/core/llm/policy-approval-gate.d.ts +30 -0
  131. package/dist/core/llm/policy-approval-gate.d.ts.map +1 -0
  132. package/dist/core/llm/policy-approval-gate.js +86 -0
  133. package/dist/core/llm/policy-approval-gate.js.map +1 -0
  134. package/dist/core/llm/provider-base.d.ts +302 -0
  135. package/dist/core/llm/provider-base.d.ts.map +1 -0
  136. package/dist/core/llm/provider-base.js +222 -0
  137. package/dist/core/llm/provider-base.js.map +1 -0
  138. package/dist/core/llm/registry.d.ts +44 -0
  139. package/dist/core/llm/registry.d.ts.map +1 -0
  140. package/dist/core/llm/registry.js +160 -0
  141. package/dist/core/llm/registry.js.map +1 -0
  142. package/dist/core/llm/secrets.d.ts +46 -0
  143. package/dist/core/llm/secrets.d.ts.map +1 -0
  144. package/dist/core/llm/secrets.js +157 -0
  145. package/dist/core/llm/secrets.js.map +1 -0
  146. package/dist/core/llm/tool-dispatcher.d.ts +37 -0
  147. package/dist/core/llm/tool-dispatcher.d.ts.map +1 -0
  148. package/dist/core/llm/tool-dispatcher.js +85 -0
  149. package/dist/core/llm/tool-dispatcher.js.map +1 -0
  150. package/dist/core/memory-consolidate.d.ts.map +1 -1
  151. package/dist/core/memory-consolidate.js +38 -23
  152. package/dist/core/memory-consolidate.js.map +1 -1
  153. package/dist/core/memory-distill.d.ts.map +1 -1
  154. package/dist/core/memory-distill.js +51 -25
  155. package/dist/core/memory-distill.js.map +1 -1
  156. package/dist/core/memory-rpc.d.ts.map +1 -1
  157. package/dist/core/memory-rpc.js +6 -0
  158. package/dist/core/memory-rpc.js.map +1 -1
  159. package/dist/core/message-sink.d.ts.map +1 -1
  160. package/dist/core/message-sink.js +76 -0
  161. package/dist/core/message-sink.js.map +1 -1
  162. package/dist/core/notification-evaluator.d.ts +49 -0
  163. package/dist/core/notification-evaluator.d.ts.map +1 -0
  164. package/dist/core/notification-evaluator.js +232 -0
  165. package/dist/core/notification-evaluator.js.map +1 -0
  166. package/dist/core/onboarding.d.ts.map +1 -1
  167. package/dist/core/onboarding.js +10 -0
  168. package/dist/core/onboarding.js.map +1 -1
  169. package/dist/core/persona.d.ts +10 -0
  170. package/dist/core/persona.d.ts.map +1 -1
  171. package/dist/core/persona.js +28 -14
  172. package/dist/core/persona.js.map +1 -1
  173. package/dist/core/push-rpc.d.ts +8 -0
  174. package/dist/core/push-rpc.d.ts.map +1 -1
  175. package/dist/core/push-rpc.js +41 -1
  176. package/dist/core/push-rpc.js.map +1 -1
  177. package/dist/core/registry.d.ts.map +1 -1
  178. package/dist/core/registry.js +11 -0
  179. package/dist/core/registry.js.map +1 -1
  180. package/dist/core/render-router.d.ts.map +1 -1
  181. package/dist/core/render-router.js +23 -6
  182. package/dist/core/render-router.js.map +1 -1
  183. package/dist/core/router-compare.d.ts +76 -0
  184. package/dist/core/router-compare.d.ts.map +1 -0
  185. package/dist/core/router-compare.js +253 -0
  186. package/dist/core/router-compare.js.map +1 -0
  187. package/dist/core/router.d.ts.map +1 -1
  188. package/dist/core/router.js +25 -1
  189. package/dist/core/router.js.map +1 -1
  190. package/dist/core/skills/builtin/agim-self/SKILL.md +81 -0
  191. package/dist/core/skills/loader.d.ts +120 -0
  192. package/dist/core/skills/loader.d.ts.map +1 -0
  193. package/dist/core/skills/loader.js +577 -0
  194. package/dist/core/skills/loader.js.map +1 -0
  195. package/dist/core/skills-rpc.d.ts +44 -0
  196. package/dist/core/skills-rpc.d.ts.map +1 -0
  197. package/dist/core/skills-rpc.js +71 -0
  198. package/dist/core/skills-rpc.js.map +1 -0
  199. package/dist/core/types.d.ts +35 -0
  200. package/dist/core/types.d.ts.map +1 -1
  201. package/dist/core/util/format-age.d.ts +20 -0
  202. package/dist/core/util/format-age.d.ts.map +1 -0
  203. package/dist/core/util/format-age.js +86 -0
  204. package/dist/core/util/format-age.js.map +1 -0
  205. package/dist/plugins/agents/acp/acp-adapter.d.ts +3 -0
  206. package/dist/plugins/agents/acp/acp-adapter.d.ts.map +1 -1
  207. package/dist/plugins/agents/acp/acp-adapter.js +12 -0
  208. package/dist/plugins/agents/acp/acp-adapter.js.map +1 -1
  209. package/dist/plugins/agents/antigravity/index.d.ts +1 -0
  210. package/dist/plugins/agents/antigravity/index.d.ts.map +1 -1
  211. package/dist/plugins/agents/antigravity/index.js +1 -0
  212. package/dist/plugins/agents/antigravity/index.js.map +1 -1
  213. package/dist/plugins/agents/claude-code/index.d.ts +1 -0
  214. package/dist/plugins/agents/claude-code/index.d.ts.map +1 -1
  215. package/dist/plugins/agents/claude-code/index.js +1 -0
  216. package/dist/plugins/agents/claude-code/index.js.map +1 -1
  217. package/dist/plugins/agents/claude-code/mcp-approval-server.d.ts +22 -0
  218. package/dist/plugins/agents/claude-code/mcp-approval-server.d.ts.map +1 -1
  219. package/dist/plugins/agents/claude-code/mcp-approval-server.js +157 -0
  220. package/dist/plugins/agents/claude-code/mcp-approval-server.js.map +1 -1
  221. package/dist/plugins/agents/codex/index.d.ts +1 -0
  222. package/dist/plugins/agents/codex/index.d.ts.map +1 -1
  223. package/dist/plugins/agents/codex/index.js +1 -0
  224. package/dist/plugins/agents/codex/index.js.map +1 -1
  225. package/dist/plugins/agents/cursor/ensure-mcp-config.d.ts +43 -0
  226. package/dist/plugins/agents/cursor/ensure-mcp-config.d.ts.map +1 -0
  227. package/dist/plugins/agents/cursor/ensure-mcp-config.js +99 -0
  228. package/dist/plugins/agents/cursor/ensure-mcp-config.js.map +1 -0
  229. package/dist/plugins/agents/cursor/index.d.ts +28 -0
  230. package/dist/plugins/agents/cursor/index.d.ts.map +1 -0
  231. package/dist/plugins/agents/cursor/index.js +290 -0
  232. package/dist/plugins/agents/cursor/index.js.map +1 -0
  233. package/dist/plugins/agents/native/index.d.ts +34 -0
  234. package/dist/plugins/agents/native/index.d.ts.map +1 -0
  235. package/dist/plugins/agents/native/index.js +598 -0
  236. package/dist/plugins/agents/native/index.js.map +1 -0
  237. package/dist/plugins/agents/opencode/opencode-stdio-adapter.d.ts +1 -0
  238. package/dist/plugins/agents/opencode/opencode-stdio-adapter.d.ts.map +1 -1
  239. package/dist/plugins/agents/opencode/opencode-stdio-adapter.js +1 -0
  240. package/dist/plugins/agents/opencode/opencode-stdio-adapter.js.map +1 -1
  241. package/dist/plugins/messengers/wechat/ilink-adapter.d.ts +4 -0
  242. package/dist/plugins/messengers/wechat/ilink-adapter.d.ts.map +1 -1
  243. package/dist/plugins/messengers/wechat/ilink-adapter.js +26 -1
  244. package/dist/plugins/messengers/wechat/ilink-adapter.js.map +1 -1
  245. package/dist/web/agim-skills-api.d.ts +4 -0
  246. package/dist/web/agim-skills-api.d.ts.map +1 -0
  247. package/dist/web/agim-skills-api.js +150 -0
  248. package/dist/web/agim-skills-api.js.map +1 -0
  249. package/dist/web/background-tasks-api.d.ts +7 -0
  250. package/dist/web/background-tasks-api.d.ts.map +1 -0
  251. package/dist/web/background-tasks-api.js +225 -0
  252. package/dist/web/background-tasks-api.js.map +1 -0
  253. package/dist/web/llm-api.d.ts +8 -0
  254. package/dist/web/llm-api.d.ts.map +1 -0
  255. package/dist/web/llm-api.js +300 -0
  256. package/dist/web/llm-api.js.map +1 -0
  257. package/dist/web/mcp-api.d.ts +8 -0
  258. package/dist/web/mcp-api.d.ts.map +1 -0
  259. package/dist/web/mcp-api.js +205 -0
  260. package/dist/web/mcp-api.js.map +1 -0
  261. package/dist/web/public/assets/{a2a-Cdl8iY0e.js → a2a-06bnQicA.js} +3 -3
  262. package/dist/web/public/assets/{a2a-Cdl8iY0e.js.map → a2a-06bnQicA.js.map} +1 -1
  263. package/dist/web/public/assets/{activity-DXahuK1C.js → activity-Bhc6Esfy.js} +2 -2
  264. package/dist/web/public/assets/{activity-DXahuK1C.js.map → activity-Bhc6Esfy.js.map} +1 -1
  265. package/dist/web/public/assets/{admins-C8fJsuHC.js → admins-BVpnOw3o.js} +3 -3
  266. package/dist/web/public/assets/{admins-C8fJsuHC.js.map → admins-BVpnOw3o.js.map} +1 -1
  267. package/dist/web/public/assets/agents-Cn7D3UMz.js +7 -0
  268. package/dist/web/public/assets/agents-Cn7D3UMz.js.map +1 -0
  269. package/dist/web/public/assets/{approvals-CpyL90ef.js → approvals-BJiLyoLf.js} +3 -3
  270. package/dist/web/public/assets/{approvals-CpyL90ef.js.map → approvals-BJiLyoLf.js.map} +1 -1
  271. package/dist/web/public/assets/asks-C7gKbna1.js +7 -0
  272. package/dist/web/public/assets/asks-C7gKbna1.js.map +1 -0
  273. package/dist/web/public/assets/{audit-DDqpiC3z.js → audit-DgWZD8l5.js} +2 -2
  274. package/dist/web/public/assets/{audit-DDqpiC3z.js.map → audit-DgWZD8l5.js.map} +1 -1
  275. package/dist/web/public/assets/bell-pWZT2wlM.js +7 -0
  276. package/dist/web/public/assets/bell-pWZT2wlM.js.map +1 -0
  277. package/dist/web/public/assets/{bgjobs-CAFV-I4I.js → bgjobs-DkAJdzHf.js} +2 -2
  278. package/dist/web/public/assets/{bgjobs-CAFV-I4I.js.map → bgjobs-DkAJdzHf.js.map} +1 -1
  279. package/dist/web/public/assets/{brain-CJyZe3Oa.js → brain-B0mM-ro_.js} +2 -2
  280. package/dist/web/public/assets/{brain-CJyZe3Oa.js.map → brain-B0mM-ro_.js.map} +1 -1
  281. package/dist/web/public/assets/{briefcase-DcLbQF2I.js → briefcase-CUQlj33_.js} +2 -2
  282. package/dist/web/public/assets/{briefcase-DcLbQF2I.js.map → briefcase-CUQlj33_.js.map} +1 -1
  283. package/dist/web/public/assets/{chevron-right-BhKELKvM.js → chevron-right-CJuDP_fx.js} +2 -2
  284. package/dist/web/public/assets/{chevron-right-BhKELKvM.js.map → chevron-right-CJuDP_fx.js.map} +1 -1
  285. package/dist/web/public/assets/{circle-check-D1qST9RS.js → circle-check-CYse8LRx.js} +2 -2
  286. package/dist/web/public/assets/{circle-check-D1qST9RS.js.map → circle-check-CYse8LRx.js.map} +1 -1
  287. package/dist/web/public/assets/{circle-check-big-EKe3o9y1.js → circle-check-big-9NpJLA1Z.js} +2 -2
  288. package/dist/web/public/assets/{circle-check-big-EKe3o9y1.js.map → circle-check-big-9NpJLA1Z.js.map} +1 -1
  289. package/dist/web/public/assets/{circle-x-DtePUX5x.js → circle-x-BxZ24SVG.js} +2 -2
  290. package/dist/web/public/assets/{circle-x-DtePUX5x.js.map → circle-x-BxZ24SVG.js.map} +1 -1
  291. package/dist/web/public/assets/{confirm-dialog-CCfCf6BG.js → confirm-dialog-CmHeZ7ei.js} +2 -2
  292. package/dist/web/public/assets/{confirm-dialog-CCfCf6BG.js.map → confirm-dialog-CmHeZ7ei.js.map} +1 -1
  293. package/dist/web/public/assets/{data-table-BRLUxacD.js → data-table-tu4BIahS.js} +5 -5
  294. package/dist/web/public/assets/{data-table-BRLUxacD.js.map → data-table-tu4BIahS.js.map} +1 -1
  295. package/dist/web/public/assets/{dialog-By4YA8bm.js → dialog-D8QAkLhI.js} +3 -3
  296. package/dist/web/public/assets/{dialog-By4YA8bm.js.map → dialog-D8QAkLhI.js.map} +1 -1
  297. package/dist/web/public/assets/{download-CiTB2sCh.js → download-DBS0ZPTh.js} +2 -2
  298. package/dist/web/public/assets/{download-CiTB2sCh.js.map → download-DBS0ZPTh.js.map} +1 -1
  299. package/dist/web/public/assets/{email-H-b2AExg.js → email-DgbAEEvZ.js} +3 -3
  300. package/dist/web/public/assets/{email-H-b2AExg.js.map → email-DgbAEEvZ.js.map} +1 -1
  301. package/dist/web/public/assets/{empty-state-DZJTUlvz.js → empty-state-B1S_EYNJ.js} +2 -2
  302. package/dist/web/public/assets/{empty-state-DZJTUlvz.js.map → empty-state-B1S_EYNJ.js.map} +1 -1
  303. package/dist/web/public/assets/{external-link-CfU6Rttn.js → external-link-Dkmwlv6p.js} +2 -2
  304. package/dist/web/public/assets/{external-link-CfU6Rttn.js.map → external-link-Dkmwlv6p.js.map} +1 -1
  305. package/dist/web/public/assets/{eye-BvWcd0pJ.js → eye-Ch0DLviZ.js} +4 -4
  306. package/dist/web/public/assets/{eye-BvWcd0pJ.js.map → eye-Ch0DLviZ.js.map} +1 -1
  307. package/dist/web/public/assets/{facts-BRDbQLSI.js → facts-C3YV1Mkp.js} +2 -2
  308. package/dist/web/public/assets/{facts-BRDbQLSI.js.map → facts-C3YV1Mkp.js.map} +1 -1
  309. package/dist/web/public/assets/goals-DEt5gGry.js +17 -0
  310. package/dist/web/public/assets/goals-DEt5gGry.js.map +1 -0
  311. package/dist/web/public/assets/{health-DJPFOiKw.js → health-DuB9uNiZ.js} +2 -2
  312. package/dist/web/public/assets/{health-DJPFOiKw.js.map → health-DuB9uNiZ.js.map} +1 -1
  313. package/dist/web/public/assets/heart-pulse-CD8xNAGs.js +7 -0
  314. package/dist/web/public/assets/heart-pulse-CD8xNAGs.js.map +1 -0
  315. package/dist/web/public/assets/heartbeat-DbR8VwmG.js +7 -0
  316. package/dist/web/public/assets/heartbeat-DbR8VwmG.js.map +1 -0
  317. package/dist/web/public/assets/hot-izk3vGQB.js +17 -0
  318. package/dist/web/public/assets/hot-izk3vGQB.js.map +1 -0
  319. package/dist/web/public/assets/index-B7QRVy9N.css +1 -0
  320. package/dist/web/public/assets/index-BY1vfCja.js +166 -0
  321. package/dist/web/public/assets/index-BY1vfCja.js.map +1 -0
  322. package/dist/web/public/assets/installed-BXB3-YIy.js +31 -0
  323. package/dist/web/public/assets/installed-BXB3-YIy.js.map +1 -0
  324. package/dist/web/public/assets/{jobs-DdWaBgOh.js → jobs-DkbM4mIQ.js} +2 -2
  325. package/dist/web/public/assets/{jobs-DdWaBgOh.js.map → jobs-DkbM4mIQ.js.map} +1 -1
  326. package/dist/web/public/assets/{layout-Dr12u0W_.js → layout-5ePj6Bek.js} +2 -2
  327. package/dist/web/public/assets/{layout-Dr12u0W_.js.map → layout-5ePj6Bek.js.map} +1 -1
  328. package/dist/web/public/assets/layout-B5Dzy_Zc.js +2 -0
  329. package/dist/web/public/assets/layout-B5Dzy_Zc.js.map +1 -0
  330. package/dist/web/public/assets/layout-BZpbNQFb.js +2 -0
  331. package/dist/web/public/assets/layout-BZpbNQFb.js.map +1 -0
  332. package/dist/web/public/assets/layout-DY9Xq34u.js +2 -0
  333. package/dist/web/public/assets/layout-DY9Xq34u.js.map +1 -0
  334. package/dist/web/public/assets/{layout-BybpkTy0.js → layout-DxzBaeTv.js} +2 -2
  335. package/dist/web/public/assets/{layout-BybpkTy0.js.map → layout-DxzBaeTv.js.map} +1 -1
  336. package/dist/web/public/assets/llm-Dg4W7eRM.js +7 -0
  337. package/dist/web/public/assets/llm-Dg4W7eRM.js.map +1 -0
  338. package/dist/web/public/assets/{loader-circle-BiR4Xs-3.js → loader-circle-pGNYdPoE.js} +2 -2
  339. package/dist/web/public/assets/{loader-circle-BiR4Xs-3.js.map → loader-circle-pGNYdPoE.js.map} +1 -1
  340. package/dist/web/public/assets/{map-pin-B8hea8yW.js → map-pin-D1UX9mg7.js} +2 -2
  341. package/dist/web/public/assets/{map-pin-B8hea8yW.js.map → map-pin-D1UX9mg7.js.map} +1 -1
  342. package/dist/web/public/assets/mcp-uoOzu4_J.js +7 -0
  343. package/dist/web/public/assets/mcp-uoOzu4_J.js.map +1 -0
  344. package/dist/web/public/assets/{memos-C0_I1Uzt.js → memos-CAWASHg5.js} +2 -2
  345. package/dist/web/public/assets/{memos-C0_I1Uzt.js.map → memos-CAWASHg5.js.map} +1 -1
  346. package/dist/web/public/assets/{messengers-DuS5_JlE.js → messengers-B1-mZms8.js} +3 -3
  347. package/dist/web/public/assets/{messengers-DuS5_JlE.js.map → messengers-B1-mZms8.js.map} +1 -1
  348. package/dist/web/public/assets/native-agent-UuVvvzsW.js +7 -0
  349. package/dist/web/public/assets/native-agent-UuVvvzsW.js.map +1 -0
  350. package/dist/web/public/assets/{network-CpkocMHV.js → network-DpjSgAwW.js} +2 -2
  351. package/dist/web/public/assets/{network-CpkocMHV.js.map → network-DpjSgAwW.js.map} +1 -1
  352. package/dist/web/public/assets/{outbox-mGqTV2Ex.js → outbox-DeAgiXkY.js} +3 -3
  353. package/dist/web/public/assets/{outbox-mGqTV2Ex.js.map → outbox-DeAgiXkY.js.map} +1 -1
  354. package/dist/web/public/assets/{pagination-BAYvy11u.js → pagination-5GD_he3L.js} +3 -3
  355. package/dist/web/public/assets/{pagination-BAYvy11u.js.map → pagination-5GD_he3L.js.map} +1 -1
  356. package/dist/web/public/assets/{persona-CM0TLPJa.js → persona-BhkDCmeB.js} +2 -2
  357. package/dist/web/public/assets/{persona-CM0TLPJa.js.map → persona-BhkDCmeB.js.map} +1 -1
  358. package/dist/web/public/assets/{play-DMgMpe7N.js → play-B7o6cJ8W.js} +2 -2
  359. package/dist/web/public/assets/{play-DMgMpe7N.js.map → play-B7o6cJ8W.js.map} +1 -1
  360. package/dist/web/public/assets/plus-C5d4C6Zp.js +7 -0
  361. package/dist/web/public/assets/plus-C5d4C6Zp.js.map +1 -0
  362. package/dist/web/public/assets/policy-Ct_sKm3Y.js +2 -0
  363. package/dist/web/public/assets/{policy-Ch-xirrA.js.map → policy-Ct_sKm3Y.js.map} +1 -1
  364. package/dist/web/public/assets/{refresh-ccw-D8mc4hxU.js → refresh-ccw-BlXMN3UX.js} +2 -2
  365. package/dist/web/public/assets/{refresh-ccw-D8mc4hxU.js.map → refresh-ccw-BlXMN3UX.js.map} +1 -1
  366. package/dist/web/public/assets/{reminders-Dbe7Rc4h.js → reminders-gb1Y0S3t.js} +4 -9
  367. package/dist/web/public/assets/reminders-gb1Y0S3t.js.map +1 -0
  368. package/dist/web/public/assets/{save-1aALBaZc.js → save-DAFuApnY.js} +2 -2
  369. package/dist/web/public/assets/{save-1aALBaZc.js.map → save-DAFuApnY.js.map} +1 -1
  370. package/dist/web/public/assets/{schedules-BBQ2wcnS.js → schedules-CtFumT2B.js} +3 -3
  371. package/dist/web/public/assets/{schedules-BBQ2wcnS.js.map → schedules-CtFumT2B.js.map} +1 -1
  372. package/dist/web/public/assets/{search-DDYjsJ7-.js → search-BWuZE0YD.js} +2 -2
  373. package/dist/web/public/assets/{search-DDYjsJ7-.js.map → search-BWuZE0YD.js.map} +1 -1
  374. package/dist/web/public/assets/{service-DMp11TKF.js → service-lah7RWEc.js} +3 -3
  375. package/dist/web/public/assets/{service-DMp11TKF.js.map → service-lah7RWEc.js.map} +1 -1
  376. package/dist/web/public/assets/{status-badge-Cvj81JKi.js → status-badge-BgmFa_8z.js} +2 -2
  377. package/dist/web/public/assets/{status-badge-Cvj81JKi.js.map → status-badge-BgmFa_8z.js.map} +1 -1
  378. package/dist/web/public/assets/{subtasks-BC3Pf7OZ.js → subtasks-CgqrOGhl.js} +3 -3
  379. package/dist/web/public/assets/{subtasks-BC3Pf7OZ.js.map → subtasks-CgqrOGhl.js.map} +1 -1
  380. package/dist/web/public/assets/{table-B6nK6k3L.js → table-BhDzIBvB.js} +2 -2
  381. package/dist/web/public/assets/{table-B6nK6k3L.js.map → table-BhDzIBvB.js.map} +1 -1
  382. package/dist/web/public/assets/{topn-BwFh2jKv.js → topn-DXgTCdM_.js} +3 -3
  383. package/dist/web/public/assets/{topn-BwFh2jKv.js.map → topn-DXgTCdM_.js.map} +1 -1
  384. package/dist/web/public/assets/{trash-2-CqpMjbu5.js → trash-2-i4F_Rzh3.js} +3 -3
  385. package/dist/web/public/assets/{trash-2-CqpMjbu5.js.map → trash-2-i4F_Rzh3.js.map} +1 -1
  386. package/dist/web/public/assets/use-background-tasks-Cq2D7JQJ.js +2 -0
  387. package/dist/web/public/assets/use-background-tasks-Cq2D7JQJ.js.map +1 -0
  388. package/dist/web/public/assets/use-llm-admin-BzOVXSjz.js +2 -0
  389. package/dist/web/public/assets/use-llm-admin-BzOVXSjz.js.map +1 -0
  390. package/dist/web/public/assets/{use-memory-jxZdt-RL.js → use-memory-B_RQWQyG.js} +2 -2
  391. package/dist/web/public/assets/{use-memory-jxZdt-RL.js.map → use-memory-B_RQWQyG.js.map} +1 -1
  392. package/dist/web/public/assets/{use-observability-9TDgLO9y.js → use-observability-CCTN-a71.js} +2 -2
  393. package/dist/web/public/assets/{use-observability-9TDgLO9y.js.map → use-observability-CCTN-a71.js.map} +1 -1
  394. package/dist/web/public/assets/{use-settings-DFB_c2pr.js → use-settings-D4EdDLiK.js} +2 -2
  395. package/dist/web/public/assets/{use-settings-DFB_c2pr.js.map → use-settings-D4EdDLiK.js.map} +1 -1
  396. package/dist/web/public/assets/{use-workspace-C-Eg6yWa.js → use-workspace-BhTEp_QH.js} +2 -2
  397. package/dist/web/public/assets/{use-workspace-C-Eg6yWa.js.map → use-workspace-BhTEp_QH.js.map} +1 -1
  398. package/dist/web/public/assets/useQuery-DmoWKLw3.js +2 -0
  399. package/dist/web/public/assets/{useQuery-rLmHxFp4.js.map → useQuery-DmoWKLw3.js.map} +1 -1
  400. package/dist/web/public/assets/{vector-D9UqmLi6.js → vector-By-cheMu.js} +2 -2
  401. package/dist/web/public/assets/{vector-D9UqmLi6.js.map → vector-By-cheMu.js.map} +1 -1
  402. package/dist/web/public/assets/{viewer-_OpObeWr.js → viewer-CJNrz2iw.js} +3 -3
  403. package/dist/web/public/assets/{viewer-_OpObeWr.js.map → viewer-CJNrz2iw.js.map} +1 -1
  404. package/dist/web/public/assets/{workspace-DSHRdspq.js → workspace-DvYlIAhu.js} +4 -4
  405. package/dist/web/public/assets/{workspace-DSHRdspq.js.map → workspace-DvYlIAhu.js.map} +1 -1
  406. package/dist/web/public/assets/{workspaces-CsBdhbXz.js → workspaces-2pn73O-K.js} +3 -3
  407. package/dist/web/public/assets/{workspaces-CsBdhbXz.js.map → workspaces-2pn73O-K.js.map} +1 -1
  408. package/dist/web/public/assets/{x-D1re-vBd.js → x-5Z_de5zo.js} +2 -2
  409. package/dist/web/public/assets/{x-D1re-vBd.js.map → x-5Z_de5zo.js.map} +1 -1
  410. package/dist/web/public/index.html +2 -2
  411. package/dist/web/server.d.ts.map +1 -1
  412. package/dist/web/server.js +45 -0
  413. package/dist/web/server.js.map +1 -1
  414. package/package.json +2 -2
  415. package/dist/web/public/assets/agents-lrzFDGgX.js +0 -12
  416. package/dist/web/public/assets/agents-lrzFDGgX.js.map +0 -1
  417. package/dist/web/public/assets/hot-CFGHGkqL.js +0 -17
  418. package/dist/web/public/assets/hot-CFGHGkqL.js.map +0 -1
  419. package/dist/web/public/assets/index-C4hk1i67.js +0 -166
  420. package/dist/web/public/assets/index-C4hk1i67.js.map +0 -1
  421. package/dist/web/public/assets/index-Cvacw7Jg.css +0 -1
  422. package/dist/web/public/assets/installed-UONWfKHS.js +0 -7
  423. package/dist/web/public/assets/installed-UONWfKHS.js.map +0 -1
  424. package/dist/web/public/assets/layout-C8_IQRGM.js +0 -2
  425. package/dist/web/public/assets/layout-C8_IQRGM.js.map +0 -1
  426. package/dist/web/public/assets/layout-CxRHLqvi.js +0 -2
  427. package/dist/web/public/assets/layout-CxRHLqvi.js.map +0 -1
  428. package/dist/web/public/assets/layout-LC5zjw1h.js +0 -2
  429. package/dist/web/public/assets/layout-LC5zjw1h.js.map +0 -1
  430. package/dist/web/public/assets/policy-Ch-xirrA.js +0 -2
  431. package/dist/web/public/assets/reminders-Dbe7Rc4h.js.map +0 -1
  432. package/dist/web/public/assets/use-skills-OZKB5x-S.js +0 -2
  433. package/dist/web/public/assets/use-skills-OZKB5x-S.js.map +0 -1
  434. package/dist/web/public/assets/useQuery-rLmHxFp4.js +0 -2
@@ -0,0 +1,339 @@
1
+ // Anthropic native Messages API provider (Stage 2 D+ — 2026-05-23).
2
+ //
3
+ // Why a separate adapter (vs piping Anthropic through OpenAICompatProvider):
4
+ // - Anthropic's wire format is genuinely different. Messages use a
5
+ // content-blocks array; system prompt is a top-level field; tool
6
+ // calls are `tool_use` blocks embedded in assistant content; tool
7
+ // results are `tool_result` blocks inside a USER message. None of
8
+ // this maps cleanly to OpenAI's flat schema.
9
+ // - Anthropic-specific knobs (`cache_control`, `thinking`, etc.) are
10
+ // wire-level fields we want to use eventually, and wedging them
11
+ // into the generic provider via `providerOptions` quickly gets
12
+ // ugly. Better to own the dialect.
13
+ //
14
+ // What's in this initial cut:
15
+ // - POST /v1/messages with role/content + system + temperature + max_tokens
16
+ // - Tools (input_schema in the Anthropic shape; we accept the same
17
+ // `ToolDef.parameters` JSON Schema that OpenAI takes — Anthropic
18
+ // happens to accept JSON Schema directly under input_schema).
19
+ // - Multi-turn tool calls: serialize assistant tool_use blocks + user
20
+ // tool_result blocks faithfully so multi-iteration agent loops work.
21
+ // - Standard transient-error retry (429, 5xx)
22
+ // - Usage extraction (input_tokens / output_tokens)
23
+ //
24
+ // Out of scope for this PR (Stage 2 sub-PR #1):
25
+ // - Streaming (the buffered path is enough for the agent loop's first
26
+ // iteration; streaming lands when we wire it to the IM "show
27
+ // thinking" feature)
28
+ // - Prompt caching (`cache_control: {type:'ephemeral'}`) — easy
29
+ // follow-up once we have a place to decide which blocks deserve it
30
+ // - Extended thinking blocks — orthogonal feature
31
+ // - Bedrock / Vertex (different transports; future provider class)
32
+ import { LlmProvider, LlmProviderError, } from './provider-base.js';
33
+ const DEFAULT_BASE_URL = 'https://api.anthropic.com';
34
+ const DEFAULT_API_VERSION = '2023-06-01';
35
+ const DEFAULT_RETRY = 1;
36
+ /**
37
+ * Native Anthropic Messages API provider.
38
+ *
39
+ * The constructor takes the same shape as OpenAICompatProvider (caller
40
+ * code stays uniform); the differences live entirely in the wire-format
41
+ * helpers below.
42
+ */
43
+ export class AnthropicProvider extends LlmProvider {
44
+ baseUrl;
45
+ apiVersion;
46
+ extraHeaders;
47
+ retryOnTransient;
48
+ constructor(cfg) {
49
+ super({
50
+ ...cfg,
51
+ providerType: cfg.providerLabel || 'anthropic',
52
+ });
53
+ this.baseUrl = (cfg.baseUrl || DEFAULT_BASE_URL).replace(/\/+$/, '');
54
+ this.apiVersion = cfg.apiVersion || DEFAULT_API_VERSION;
55
+ this.extraHeaders = cfg.extraHeaders || {};
56
+ this.retryOnTransient = Math.max(0, cfg.retryOnTransient ?? DEFAULT_RETRY);
57
+ }
58
+ async _callApi(messages, opts, signal) {
59
+ const body = this._buildBody(messages, opts);
60
+ const json = await this._postJson(body, signal);
61
+ const text = extractTextFromBlocks(json?.content);
62
+ const toolCalls = extractToolUseFromBlocks(json?.content);
63
+ const finishReason = mapStopReason(json?.stop_reason);
64
+ const usage = extractUsage(json);
65
+ return {
66
+ text,
67
+ toolCalls: toolCalls.length > 0 ? toolCalls : undefined,
68
+ usage,
69
+ finishReason,
70
+ modelUsed: typeof json?.model === 'string' ? json.model : opts.model,
71
+ };
72
+ }
73
+ // Streaming not implemented in this PR; LlmProvider's base
74
+ // _callApiStream falls back to buffered + single chunk yield, which
75
+ // is correct for callers that don't need incremental delivery.
76
+ async *_callApiStream(messages, opts, signal) {
77
+ const result = await this._callApi(messages, opts, signal);
78
+ yield {
79
+ textDelta: result.text,
80
+ finishReason: result.finishReason,
81
+ usage: result.usage,
82
+ };
83
+ }
84
+ /**
85
+ * Compose the Anthropic Messages body. Differences vs OpenAI:
86
+ * - `system` is a top-level field, NOT a message
87
+ * - `messages[*].content` may be a string OR a content-block array
88
+ * - tool calls live inside assistant content as `{type:'tool_use',...}`
89
+ * - tool results live inside user content as `{type:'tool_result',...}`
90
+ * - `tools` use `input_schema` (we pass our ToolDef.parameters JSON
91
+ * Schema directly — Anthropic accepts the same dialect)
92
+ */
93
+ _buildBody(messages, opts) {
94
+ const { system, msgs } = splitSystemPrompt(messages);
95
+ const body = {
96
+ model: opts.model,
97
+ max_tokens: opts.maxTokens,
98
+ temperature: opts.temperature,
99
+ messages: msgs.map(serializeMessage),
100
+ };
101
+ if (system)
102
+ body.system = system;
103
+ if (opts.tools && opts.tools.length > 0) {
104
+ body.tools = opts.tools.map(serializeToolDef);
105
+ const tc = serializeToolChoice(opts.toolChoice);
106
+ if (tc !== undefined)
107
+ body.tool_choice = tc;
108
+ }
109
+ for (const [k, v] of Object.entries(opts.providerOptions)) {
110
+ if (v !== undefined)
111
+ body[k] = v;
112
+ }
113
+ return body;
114
+ }
115
+ async _postJson(body, signal) {
116
+ const url = `${this.baseUrl}/v1/messages`;
117
+ const resp = await this._fetchWithRetry(url, body, signal);
118
+ try {
119
+ return (await resp.json());
120
+ }
121
+ catch (err) {
122
+ throw new LlmProviderError(this.name, 'failed to parse JSON response', {
123
+ httpStatus: resp.status,
124
+ cause: err,
125
+ });
126
+ }
127
+ }
128
+ /**
129
+ * fetch + transient retry. Mirrors OpenAICompatProvider's logic on
130
+ * purpose so the two providers feel the same to operators reading
131
+ * logs.
132
+ */
133
+ async _fetchWithRetry(url, body, signal) {
134
+ let lastErr;
135
+ let attempts = 0;
136
+ const maxAttempts = this.retryOnTransient + 1;
137
+ while (attempts < maxAttempts) {
138
+ attempts++;
139
+ try {
140
+ const headers = {
141
+ 'content-type': 'application/json',
142
+ 'anthropic-version': this.apiVersion,
143
+ 'user-agent': 'agim-cli/llm-client',
144
+ ...this.extraHeaders,
145
+ };
146
+ if (this.apiKey)
147
+ headers['x-api-key'] = this.apiKey;
148
+ const resp = await fetch(url, {
149
+ method: 'POST',
150
+ headers,
151
+ body: JSON.stringify(body),
152
+ signal,
153
+ });
154
+ if (resp.ok)
155
+ return resp;
156
+ const transient = resp.status === 429 || resp.status === 408 ||
157
+ (resp.status >= 500 && resp.status < 600);
158
+ let bodyText = '';
159
+ try {
160
+ bodyText = (await resp.text()).slice(0, 500);
161
+ }
162
+ catch { /* ignore */ }
163
+ if (!transient || attempts >= maxAttempts) {
164
+ throw new LlmProviderError(this.name, `HTTP ${resp.status} from ${this.providerType}: ${bodyText || '(no body)'}`, { httpStatus: resp.status, transient });
165
+ }
166
+ await sleep(250 * attempts, signal);
167
+ }
168
+ catch (err) {
169
+ if (isAbortError(err))
170
+ throw err;
171
+ lastErr = err;
172
+ if (attempts < maxAttempts) {
173
+ await sleep(250 * attempts, signal);
174
+ }
175
+ }
176
+ }
177
+ if (lastErr instanceof LlmProviderError)
178
+ throw lastErr;
179
+ throw new LlmProviderError(this.name, `transport error: ${lastErr?.message ?? String(lastErr)}`, { transient: true, cause: lastErr });
180
+ }
181
+ }
182
+ // ─── Serializers (LlmMessage → Anthropic wire) ──────────────────────
183
+ function splitSystemPrompt(messages) {
184
+ // Anthropic wants system as a top-level field. We pull every leading
185
+ // system message out, join them with double newlines, and emit the
186
+ // rest as-is. Mid-list system messages are RARE but valid in our
187
+ // generic schema; we coalesce them too rather than reject the batch.
188
+ const systemParts = [];
189
+ const rest = [];
190
+ for (const m of messages) {
191
+ if (m.role === 'system') {
192
+ if (m.content)
193
+ systemParts.push(m.content);
194
+ }
195
+ else {
196
+ rest.push(m);
197
+ }
198
+ }
199
+ return { system: systemParts.join('\n\n'), msgs: rest };
200
+ }
201
+ function serializeMessage(m) {
202
+ // ── tool result → user message with tool_result block ────────────
203
+ if (m.role === 'tool') {
204
+ return {
205
+ role: 'user',
206
+ content: [{
207
+ type: 'tool_result',
208
+ tool_use_id: m.toolCallId ?? '',
209
+ content: m.content,
210
+ }],
211
+ };
212
+ }
213
+ // ── assistant with tool_use calls → content blocks ───────────────
214
+ if (m.role === 'assistant' && m.toolCalls && m.toolCalls.length > 0) {
215
+ const blocks = [];
216
+ if (m.content)
217
+ blocks.push({ type: 'text', text: m.content });
218
+ for (const tc of m.toolCalls) {
219
+ blocks.push({ type: 'tool_use', id: tc.id, name: tc.name, input: tc.arguments });
220
+ }
221
+ return { role: 'assistant', content: blocks };
222
+ }
223
+ // ── plain user/assistant turn → string content (cheap path) ──────
224
+ return { role: m.role, content: m.content };
225
+ }
226
+ function serializeToolDef(t) {
227
+ return {
228
+ name: t.name,
229
+ description: t.description,
230
+ input_schema: t.parameters,
231
+ };
232
+ }
233
+ function serializeToolChoice(choice) {
234
+ if (!choice)
235
+ return undefined;
236
+ if (choice === 'auto')
237
+ return { type: 'auto' };
238
+ if (choice === 'required')
239
+ return { type: 'any' };
240
+ if (choice === 'none') {
241
+ // Anthropic doesn't have a first-class "none"; the standard trick
242
+ // is to pass `tool_choice: {type:'auto', disable_parallel_tool_use:true}`
243
+ // plus drop the tools list. Since `tools` is a separate body field,
244
+ // the caller wanting `none` should pass tools=[] instead. We surface
245
+ // undefined here so the request omits tool_choice — same as not
246
+ // specifying tools at all. If the caller insisted on both, log a
247
+ // warning and let the API decide.
248
+ return undefined;
249
+ }
250
+ if (typeof choice === 'object' && choice.type === 'tool') {
251
+ return { type: 'tool', name: choice.name };
252
+ }
253
+ return undefined;
254
+ }
255
+ // ─── Deserializers (Anthropic wire → ChatResult) ────────────────────
256
+ function extractTextFromBlocks(content) {
257
+ if (!Array.isArray(content))
258
+ return '';
259
+ const out = [];
260
+ for (const block of content) {
261
+ if (block?.type === 'text' && typeof block.text === 'string') {
262
+ out.push(block.text);
263
+ }
264
+ }
265
+ return out.join('');
266
+ }
267
+ function extractToolUseFromBlocks(content) {
268
+ if (!Array.isArray(content))
269
+ return [];
270
+ const out = [];
271
+ for (const block of content) {
272
+ if (block?.type !== 'tool_use')
273
+ continue;
274
+ const tu = block;
275
+ if (!tu.id || !tu.name)
276
+ continue;
277
+ const args = tu.input && typeof tu.input === 'object' && !Array.isArray(tu.input)
278
+ ? tu.input
279
+ : {};
280
+ out.push({ id: tu.id, name: tu.name, arguments: args });
281
+ }
282
+ return out;
283
+ }
284
+ function extractUsage(json) {
285
+ const u = json?.usage;
286
+ if (!u)
287
+ return {};
288
+ const input = typeof u.input_tokens === 'number' ? u.input_tokens : undefined;
289
+ const output = typeof u.output_tokens === 'number' ? u.output_tokens : undefined;
290
+ const total = input !== undefined && output !== undefined ? input + output : undefined;
291
+ return {
292
+ promptTokens: input,
293
+ completionTokens: output,
294
+ totalTokens: total,
295
+ };
296
+ }
297
+ function mapStopReason(raw) {
298
+ switch (raw) {
299
+ case 'end_turn': return 'stop';
300
+ case 'stop_sequence': return 'stop';
301
+ case 'tool_use': return 'tool_use';
302
+ case 'max_tokens': return 'length';
303
+ case 'refusal':
304
+ case 'content_filtered': return 'content_filter';
305
+ case null:
306
+ case undefined:
307
+ case '': return 'unknown';
308
+ default: return 'unknown';
309
+ }
310
+ }
311
+ // ─── Tiny utility duplicates (kept inline to avoid an internal helper
312
+ // module; the alternative is moving these into provider-base.ts
313
+ // which would expand its API surface for one file's benefit). ─
314
+ function sleep(ms, signal) {
315
+ return new Promise((resolve, reject) => {
316
+ if (signal.aborted) {
317
+ reject(signal.reason ?? new Error('aborted'));
318
+ return;
319
+ }
320
+ const t = setTimeout(() => {
321
+ signal.removeEventListener('abort', onAbort);
322
+ resolve();
323
+ }, ms);
324
+ const onAbort = () => {
325
+ clearTimeout(t);
326
+ reject(signal.reason ?? new Error('aborted'));
327
+ };
328
+ signal.addEventListener('abort', onAbort, { once: true });
329
+ });
330
+ }
331
+ function isAbortError(err) {
332
+ if (!err)
333
+ return false;
334
+ if (typeof err !== 'object')
335
+ return false;
336
+ const name = err.name;
337
+ return name === 'AbortError';
338
+ }
339
+ //# sourceMappingURL=anthropic-provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"anthropic-provider.js","sourceRoot":"","sources":["../../../src/core/llm/anthropic-provider.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ import type { LlmProvider, LlmMessage } from './provider-base.js';
2
+ export interface CompactOptions {
3
+ /** Total char budget that triggers compaction. Default 60_000
4
+ * (~15k tokens for mixed EN/CN). Set via env IMHUB_NATIVE_COMPACT_TRIGGER_CHARS. */
5
+ triggerChars?: number;
6
+ /** Number of recent user+assistant pairs preserved verbatim.
7
+ * Default 6 (= 12 messages, plus any tool messages between them).
8
+ * Set via env IMHUB_NATIVE_COMPACT_KEEP_TURNS. */
9
+ keepTurns?: number;
10
+ /** Provider to ask for the summary. If omitted, tries evaluator →
11
+ * cheap → native-chat in that order; the first registered wins. */
12
+ summarizer?: LlmProvider;
13
+ /** Hard cap on the summary length (chars) the summarizer is asked
14
+ * to produce. Default 1_500. */
15
+ summaryCharCap?: number;
16
+ }
17
+ export interface CompactResult {
18
+ messages: LlmMessage[];
19
+ compacted: boolean;
20
+ /** When compacted=true, how many of the original messages were
21
+ * collapsed into the synthetic summary entry. */
22
+ collapsedCount: number;
23
+ /** When compacted=true, char count of the summary block (so the
24
+ * caller can log "compacted X chars to Y chars"). */
25
+ summaryChars: number;
26
+ /** Char count of the original message array (sum of content). */
27
+ originalChars: number;
28
+ }
29
+ /**
30
+ * Compact if needed. Returns the (possibly new) message array plus a
31
+ * summary metadata record. Never throws; on failure returns the input
32
+ * unchanged with compacted=false.
33
+ */
34
+ export declare function maybeCompactHistory(messages: LlmMessage[], opts?: CompactOptions): Promise<CompactResult>;
35
+ //# sourceMappingURL=auto-compact.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auto-compact.d.ts","sourceRoot":"","sources":["../../../src/core/llm/auto-compact.ts"],"names":[],"mappings":"AAyBA,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAMjE,MAAM,WAAW,cAAc;IAC7B;yFACqF;IACrF,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB;;uDAEmD;IACnD,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB;wEACoE;IACpE,UAAU,CAAC,EAAE,WAAW,CAAA;IACxB;qCACiC;IACjC,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,UAAU,EAAE,CAAA;IACtB,SAAS,EAAE,OAAO,CAAA;IAClB;sDACkD;IAClD,cAAc,EAAE,MAAM,CAAA;IACtB;0DACsD;IACtD,YAAY,EAAE,MAAM,CAAA;IACpB,iEAAiE;IACjE,aAAa,EAAE,MAAM,CAAA;CACtB;AA+CD;;;;GAIG;AACH,wBAAsB,mBAAmB,CACvC,QAAQ,EAAE,UAAU,EAAE,EACtB,IAAI,GAAE,cAAmB,GACxB,OAAO,CAAC,aAAa,CAAC,CA4ExB"}
@@ -0,0 +1,149 @@
1
+ // auto-compact — shrink long native chat histories before they hit the
2
+ // provider call.
3
+ //
4
+ // Why: native uses single-shot 30-minute IM turns. A user who chats
5
+ // back and forth for hours accumulates many user/assistant pairs (plus
6
+ // any tool messages from earlier mcp__imhub__* calls). Past ~15k
7
+ // tokens the provider call cost climbs linearly and we get closer to
8
+ // the model's context window. Most older content is "settled" — the
9
+ // agent's earlier conclusions, not the live problem — so a 1-2 paragraph
10
+ // summary preserves continuity at a fraction of the tokens.
11
+ //
12
+ // Strategy (intentionally simple):
13
+ // 1. Cheap char-count proxy for tokens (chars ≈ 4 tokens for mixed
14
+ // EN/CN). When total < TRIGGER chars, do nothing.
15
+ // 2. Always keep the original system prompt (caller handles), the
16
+ // last KEEP_TURNS user/assistant pairs verbatim, plus any tool
17
+ // messages that immediately precede them (so tool round-trips
18
+ // stay valid for the provider).
19
+ // 3. Send the older slice to a cheap/evaluator role with a fixed
20
+ // "summarize the prior conversation" instruction. Inject the
21
+ // summary as a synthetic user message at index 0:
22
+ // "[earlier conversation summary]\n<summary>\n[/earlier]"
23
+ // 4. On any failure, log + return the original array. Better a
24
+ // slower turn than a broken one.
25
+ import { getProvider } from './registry.js';
26
+ import { logger as rootLogger } from '../logger.js';
27
+ const log = rootLogger.child({ component: 'auto-compact' });
28
+ function envInt(key, fallback) {
29
+ const raw = process.env[key];
30
+ if (!raw)
31
+ return fallback;
32
+ const n = parseInt(raw, 10);
33
+ return Number.isFinite(n) && n > 0 ? n : fallback;
34
+ }
35
+ function totalChars(messages) {
36
+ let sum = 0;
37
+ for (const m of messages)
38
+ sum += (m.content || '').length;
39
+ return sum;
40
+ }
41
+ function resolveSummarizer() {
42
+ for (const role of ['evaluator', 'cheap', 'native-chat']) {
43
+ const p = getProvider(role);
44
+ if (p)
45
+ return p;
46
+ }
47
+ return null;
48
+ }
49
+ /**
50
+ * Pick the slice index such that messages[idx..] are the "recent" turns
51
+ * we preserve verbatim. The slice MUST start on `role:'user'` so the
52
+ * provider doesn't see an orphan `role:'tool'` whose matching
53
+ * `assistant.toolCalls` was just compacted away (OpenAI / DeepSeek
54
+ * reject the request with HTTP 400 in that case).
55
+ *
56
+ * Strategy: walk backwards counting user messages until we've covered
57
+ * `keepTurns` user turns, then return the index of that user message.
58
+ * If we couldn't find any user message, return 0 (no compaction).
59
+ */
60
+ function pickKeepSliceIndex(messages, keepTurns) {
61
+ let pairs = 0;
62
+ let lastUserIdx = -1;
63
+ for (let i = messages.length - 1; i >= 0; i--) {
64
+ if (messages[i].role === 'user') {
65
+ pairs += 1;
66
+ lastUserIdx = i;
67
+ if (pairs >= keepTurns)
68
+ return i;
69
+ }
70
+ }
71
+ return Math.max(0, lastUserIdx);
72
+ }
73
+ /**
74
+ * Compact if needed. Returns the (possibly new) message array plus a
75
+ * summary metadata record. Never throws; on failure returns the input
76
+ * unchanged with compacted=false.
77
+ */
78
+ export async function maybeCompactHistory(messages, opts = {}) {
79
+ const triggerChars = opts.triggerChars ?? envInt('IMHUB_NATIVE_COMPACT_TRIGGER_CHARS', 60_000);
80
+ const keepTurns = opts.keepTurns ?? envInt('IMHUB_NATIVE_COMPACT_KEEP_TURNS', 6);
81
+ const summaryCharCap = opts.summaryCharCap ?? envInt('IMHUB_NATIVE_COMPACT_SUMMARY_CHARS', 1_500);
82
+ const originalChars = totalChars(messages);
83
+ // Disabled when trigger=0 (operator opt-out).
84
+ if (triggerChars === 0)
85
+ return { messages, compacted: false, collapsedCount: 0, summaryChars: 0, originalChars };
86
+ if (originalChars < triggerChars)
87
+ return { messages, compacted: false, collapsedCount: 0, summaryChars: 0, originalChars };
88
+ const sliceIdx = pickKeepSliceIndex(messages, keepTurns);
89
+ if (sliceIdx === 0) {
90
+ // Nothing to summarise — the recent slice covers everything.
91
+ return { messages, compacted: false, collapsedCount: 0, summaryChars: 0, originalChars };
92
+ }
93
+ const older = messages.slice(0, sliceIdx);
94
+ const recent = messages.slice(sliceIdx);
95
+ const summarizer = opts.summarizer ?? resolveSummarizer();
96
+ if (!summarizer) {
97
+ log.warn({ event: 'auto-compact.no_summarizer', originalChars, sliceIdx });
98
+ return { messages, compacted: false, collapsedCount: 0, summaryChars: 0, originalChars };
99
+ }
100
+ // Render the older slice as a transcript the summarizer can read.
101
+ const transcript = older.map((m) => {
102
+ const tag = m.role === 'tool' ? `tool[${m.toolCallId ?? '?'}]` : m.role;
103
+ return `${tag}: ${m.content}`;
104
+ }).join('\n---\n');
105
+ const summaryPrompt = [
106
+ `You are summarising the earlier part of a chat conversation so it can be dropped from the active context window without losing continuity.`,
107
+ `Keep ${summaryCharCap} characters or fewer. Preserve: user's stated goals, key facts the agent established, important tool results (e.g. lookups, IDs, file paths), and any open questions. Drop: small-talk, retries, intermediate reasoning.`,
108
+ `Output a single paragraph (or short bulleted list) in the user's language — do not address the user directly.`,
109
+ ``,
110
+ `Conversation to summarise:`,
111
+ transcript,
112
+ ].join('\n');
113
+ try {
114
+ const r = await summarizer.chat([{ role: 'user', content: summaryPrompt }], { temperature: 0, maxTokens: Math.max(256, Math.floor(summaryCharCap / 3)) });
115
+ const summary = (r.text || '').trim();
116
+ if (!summary) {
117
+ log.warn({ event: 'auto-compact.empty_summary', backend: summarizer.name });
118
+ return { messages, compacted: false, collapsedCount: 0, summaryChars: 0, originalChars };
119
+ }
120
+ const synthetic = {
121
+ role: 'user',
122
+ content: `[earlier conversation summary — ${older.length} messages compacted]\n${summary}\n[/earlier conversation summary]`,
123
+ };
124
+ log.info({
125
+ event: 'auto-compact.applied',
126
+ backend: summarizer.name,
127
+ originalChars,
128
+ collapsedCount: older.length,
129
+ keptCount: recent.length,
130
+ summaryChars: synthetic.content.length,
131
+ });
132
+ return {
133
+ messages: [synthetic, ...recent],
134
+ compacted: true,
135
+ collapsedCount: older.length,
136
+ summaryChars: synthetic.content.length,
137
+ originalChars,
138
+ };
139
+ }
140
+ catch (err) {
141
+ log.warn({
142
+ event: 'auto-compact.summarizer_failed',
143
+ backend: summarizer.name,
144
+ err: err instanceof Error ? err.message : String(err),
145
+ });
146
+ return { messages, compacted: false, collapsedCount: 0, summaryChars: 0, originalChars };
147
+ }
148
+ }
149
+ //# sourceMappingURL=auto-compact.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auto-compact.js","sourceRoot":"","sources":["../../../src/core/llm/auto-compact.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import type { ToolDef } from './provider-base.js';
2
+ import type { ToolDispatcher } from './tool-dispatcher.js';
3
+ /** Definitions advertised to the LLM. Returned by `getBuiltinTools()`
4
+ * so callers can concat with MCP tools and pass the union to runAgentLoop. */
5
+ export declare function getBuiltinTools(): ToolDef[];
6
+ /** True iff `name` is one of the builtin tool names. Cheap O(1) check
7
+ * the dispatcher uses to decide whether to handle vs pass through. */
8
+ export declare function isBuiltinToolName(name: string): boolean;
9
+ /**
10
+ * Build the built-in dispatcher. Returns a ToolDispatcher compatible
11
+ * with combineDispatchers — i.e. an unknown tool name yields a
12
+ * `{source:'unknown'}` result so the next dispatcher in the chain gets
13
+ * a turn. Combine like this:
14
+ *
15
+ * const dispatch = combineDispatchers(
16
+ * buildBuiltinDispatcher(),
17
+ * buildMcpDispatcher(),
18
+ * )
19
+ */
20
+ export declare function buildBuiltinDispatcher(): ToolDispatcher;
21
+ //# sourceMappingURL=builtin-dispatcher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"builtin-dispatcher.d.ts","sourceRoot":"","sources":["../../../src/core/llm/builtin-dispatcher.ts"],"names":[],"mappings":"AA8BA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,KAAK,EAAoB,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAM5E;+EAC+E;AAC/E,wBAAgB,eAAe,IAAI,OAAO,EAAE,CA6C3C;AAED;uEACuE;AACvE,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAUvD;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,sBAAsB,IAAI,cAAc,CAmBvD"}