agim-cli 1.2.44 → 1.2.48

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 (432) hide show
  1. package/CHANGELOG.md +295 -0
  2. package/README.md +39 -5
  3. package/README.zh-CN.md +40 -6
  4. package/dist/cli-ui/config-wizard.js +15 -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 +36 -0
  11. package/dist/cli-ui/i18n.d.ts.map +1 -1
  12. package/dist/cli-ui/i18n.js +97 -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 +100 -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 +46 -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 +6 -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/core/viewer-config.d.ts +15 -7
  206. package/dist/core/viewer-config.d.ts.map +1 -1
  207. package/dist/core/viewer-config.js +18 -12
  208. package/dist/core/viewer-config.js.map +1 -1
  209. package/dist/plugins/agents/acp/acp-adapter.d.ts +3 -0
  210. package/dist/plugins/agents/acp/acp-adapter.d.ts.map +1 -1
  211. package/dist/plugins/agents/acp/acp-adapter.js +12 -0
  212. package/dist/plugins/agents/acp/acp-adapter.js.map +1 -1
  213. package/dist/plugins/agents/antigravity/index.d.ts +1 -0
  214. package/dist/plugins/agents/antigravity/index.d.ts.map +1 -1
  215. package/dist/plugins/agents/antigravity/index.js +1 -0
  216. package/dist/plugins/agents/antigravity/index.js.map +1 -1
  217. package/dist/plugins/agents/claude-code/index.d.ts +1 -0
  218. package/dist/plugins/agents/claude-code/index.d.ts.map +1 -1
  219. package/dist/plugins/agents/claude-code/index.js +1 -0
  220. package/dist/plugins/agents/claude-code/index.js.map +1 -1
  221. package/dist/plugins/agents/claude-code/mcp-approval-server.d.ts +22 -0
  222. package/dist/plugins/agents/claude-code/mcp-approval-server.d.ts.map +1 -1
  223. package/dist/plugins/agents/claude-code/mcp-approval-server.js +157 -0
  224. package/dist/plugins/agents/claude-code/mcp-approval-server.js.map +1 -1
  225. package/dist/plugins/agents/codex/index.d.ts +1 -0
  226. package/dist/plugins/agents/codex/index.d.ts.map +1 -1
  227. package/dist/plugins/agents/codex/index.js +1 -0
  228. package/dist/plugins/agents/codex/index.js.map +1 -1
  229. package/dist/plugins/agents/native/index.d.ts +34 -0
  230. package/dist/plugins/agents/native/index.d.ts.map +1 -0
  231. package/dist/plugins/agents/native/index.js +598 -0
  232. package/dist/plugins/agents/native/index.js.map +1 -0
  233. package/dist/plugins/agents/opencode/opencode-stdio-adapter.d.ts +1 -0
  234. package/dist/plugins/agents/opencode/opencode-stdio-adapter.d.ts.map +1 -1
  235. package/dist/plugins/agents/opencode/opencode-stdio-adapter.js +1 -0
  236. package/dist/plugins/agents/opencode/opencode-stdio-adapter.js.map +1 -1
  237. package/dist/plugins/messengers/wechat/ilink-adapter.d.ts +4 -0
  238. package/dist/plugins/messengers/wechat/ilink-adapter.d.ts.map +1 -1
  239. package/dist/plugins/messengers/wechat/ilink-adapter.js +26 -1
  240. package/dist/plugins/messengers/wechat/ilink-adapter.js.map +1 -1
  241. package/dist/web/agim-skills-api.d.ts +4 -0
  242. package/dist/web/agim-skills-api.d.ts.map +1 -0
  243. package/dist/web/agim-skills-api.js +150 -0
  244. package/dist/web/agim-skills-api.js.map +1 -0
  245. package/dist/web/background-tasks-api.d.ts +7 -0
  246. package/dist/web/background-tasks-api.d.ts.map +1 -0
  247. package/dist/web/background-tasks-api.js +225 -0
  248. package/dist/web/background-tasks-api.js.map +1 -0
  249. package/dist/web/llm-api.d.ts +8 -0
  250. package/dist/web/llm-api.d.ts.map +1 -0
  251. package/dist/web/llm-api.js +300 -0
  252. package/dist/web/llm-api.js.map +1 -0
  253. package/dist/web/mcp-api.d.ts +8 -0
  254. package/dist/web/mcp-api.d.ts.map +1 -0
  255. package/dist/web/mcp-api.js +205 -0
  256. package/dist/web/mcp-api.js.map +1 -0
  257. package/dist/web/public/assets/{a2a-Bg_mT0z1.js → a2a-Mke0F7ZM.js} +3 -3
  258. package/dist/web/public/assets/{a2a-Bg_mT0z1.js.map → a2a-Mke0F7ZM.js.map} +1 -1
  259. package/dist/web/public/assets/{activity-U9AaNlDt.js → activity-0zGnf1_m.js} +2 -2
  260. package/dist/web/public/assets/{activity-U9AaNlDt.js.map → activity-0zGnf1_m.js.map} +1 -1
  261. package/dist/web/public/assets/{admins-BTC_YEK9.js → admins-DSi3KRky.js} +3 -3
  262. package/dist/web/public/assets/{admins-BTC_YEK9.js.map → admins-DSi3KRky.js.map} +1 -1
  263. package/dist/web/public/assets/agents-BLWe20EJ.js +7 -0
  264. package/dist/web/public/assets/agents-BLWe20EJ.js.map +1 -0
  265. package/dist/web/public/assets/{approvals-Boj7iXz4.js → approvals-Cu_JdM-8.js} +3 -3
  266. package/dist/web/public/assets/{approvals-Boj7iXz4.js.map → approvals-Cu_JdM-8.js.map} +1 -1
  267. package/dist/web/public/assets/asks-DfV8vxey.js +7 -0
  268. package/dist/web/public/assets/asks-DfV8vxey.js.map +1 -0
  269. package/dist/web/public/assets/{audit-MprCFoy_.js → audit-2EVhhvGV.js} +2 -2
  270. package/dist/web/public/assets/{audit-MprCFoy_.js.map → audit-2EVhhvGV.js.map} +1 -1
  271. package/dist/web/public/assets/bell-Wz_wuOa_.js +7 -0
  272. package/dist/web/public/assets/bell-Wz_wuOa_.js.map +1 -0
  273. package/dist/web/public/assets/{bgjobs-B6XvxURz.js → bgjobs-DXROZFAW.js} +2 -2
  274. package/dist/web/public/assets/{bgjobs-B6XvxURz.js.map → bgjobs-DXROZFAW.js.map} +1 -1
  275. package/dist/web/public/assets/{brain-C5HejASN.js → brain-Dh5VOzRL.js} +2 -2
  276. package/dist/web/public/assets/{brain-C5HejASN.js.map → brain-Dh5VOzRL.js.map} +1 -1
  277. package/dist/web/public/assets/{briefcase-DkCTxO1A.js → briefcase-DfxbvM9i.js} +2 -2
  278. package/dist/web/public/assets/{briefcase-DkCTxO1A.js.map → briefcase-DfxbvM9i.js.map} +1 -1
  279. package/dist/web/public/assets/{chevron-right-DEyrYFz4.js → chevron-right-DU8Xla1M.js} +2 -2
  280. package/dist/web/public/assets/{chevron-right-DEyrYFz4.js.map → chevron-right-DU8Xla1M.js.map} +1 -1
  281. package/dist/web/public/assets/{circle-check-bADFEXGw.js → circle-check-Be_S993G.js} +2 -2
  282. package/dist/web/public/assets/{circle-check-bADFEXGw.js.map → circle-check-Be_S993G.js.map} +1 -1
  283. package/dist/web/public/assets/{circle-check-big-U4xrkHiS.js → circle-check-big-CsQkLR1u.js} +2 -2
  284. package/dist/web/public/assets/{circle-check-big-U4xrkHiS.js.map → circle-check-big-CsQkLR1u.js.map} +1 -1
  285. package/dist/web/public/assets/{circle-x-C6qY5UUl.js → circle-x-qkQu1Swu.js} +2 -2
  286. package/dist/web/public/assets/{circle-x-C6qY5UUl.js.map → circle-x-qkQu1Swu.js.map} +1 -1
  287. package/dist/web/public/assets/{confirm-dialog-B53cbWzX.js → confirm-dialog-Bm6MsLXZ.js} +2 -2
  288. package/dist/web/public/assets/{confirm-dialog-B53cbWzX.js.map → confirm-dialog-Bm6MsLXZ.js.map} +1 -1
  289. package/dist/web/public/assets/{data-table-BKTemkw9.js → data-table-Dw4Df09-.js} +5 -5
  290. package/dist/web/public/assets/{data-table-BKTemkw9.js.map → data-table-Dw4Df09-.js.map} +1 -1
  291. package/dist/web/public/assets/{dialog-Cevi7KvQ.js → dialog-CNsc4COh.js} +3 -3
  292. package/dist/web/public/assets/{dialog-Cevi7KvQ.js.map → dialog-CNsc4COh.js.map} +1 -1
  293. package/dist/web/public/assets/{download-DwJNwdwV.js → download-Bnhk_vDY.js} +2 -2
  294. package/dist/web/public/assets/{download-DwJNwdwV.js.map → download-Bnhk_vDY.js.map} +1 -1
  295. package/dist/web/public/assets/{email-CZVaRhG_.js → email-jgAX8liM.js} +3 -3
  296. package/dist/web/public/assets/{email-CZVaRhG_.js.map → email-jgAX8liM.js.map} +1 -1
  297. package/dist/web/public/assets/{empty-state-C87S9Wor.js → empty-state-D8QXQ5y9.js} +2 -2
  298. package/dist/web/public/assets/{empty-state-C87S9Wor.js.map → empty-state-D8QXQ5y9.js.map} +1 -1
  299. package/dist/web/public/assets/{external-link-CIM1wjHP.js → external-link-C8AYvhBb.js} +2 -2
  300. package/dist/web/public/assets/{external-link-CIM1wjHP.js.map → external-link-C8AYvhBb.js.map} +1 -1
  301. package/dist/web/public/assets/{eye-TUAOhz72.js → eye-pmI_4E8x.js} +4 -4
  302. package/dist/web/public/assets/{eye-TUAOhz72.js.map → eye-pmI_4E8x.js.map} +1 -1
  303. package/dist/web/public/assets/{facts-ByM1VHCp.js → facts-BRHLLX2u.js} +2 -2
  304. package/dist/web/public/assets/{facts-ByM1VHCp.js.map → facts-BRHLLX2u.js.map} +1 -1
  305. package/dist/web/public/assets/goals-p7cNp01l.js +17 -0
  306. package/dist/web/public/assets/goals-p7cNp01l.js.map +1 -0
  307. package/dist/web/public/assets/{health-B4GF06J-.js → health-CuGIXg8C.js} +2 -2
  308. package/dist/web/public/assets/{health-B4GF06J-.js.map → health-CuGIXg8C.js.map} +1 -1
  309. package/dist/web/public/assets/heart-pulse-D0AHQl1d.js +7 -0
  310. package/dist/web/public/assets/heart-pulse-D0AHQl1d.js.map +1 -0
  311. package/dist/web/public/assets/heartbeat-DJRDS2GQ.js +7 -0
  312. package/dist/web/public/assets/heartbeat-DJRDS2GQ.js.map +1 -0
  313. package/dist/web/public/assets/hot-B1qKTiGD.js +17 -0
  314. package/dist/web/public/assets/hot-B1qKTiGD.js.map +1 -0
  315. package/dist/web/public/assets/index-B7QRVy9N.css +1 -0
  316. package/dist/web/public/assets/index-XJngV1gH.js +166 -0
  317. package/dist/web/public/assets/index-XJngV1gH.js.map +1 -0
  318. package/dist/web/public/assets/installed-Dz4-KevJ.js +31 -0
  319. package/dist/web/public/assets/installed-Dz4-KevJ.js.map +1 -0
  320. package/dist/web/public/assets/{jobs-DwA9Ip87.js → jobs-kwOypiWd.js} +2 -2
  321. package/dist/web/public/assets/{jobs-DwA9Ip87.js.map → jobs-kwOypiWd.js.map} +1 -1
  322. package/dist/web/public/assets/layout-01n3Aibo.js +2 -0
  323. package/dist/web/public/assets/layout-01n3Aibo.js.map +1 -0
  324. package/dist/web/public/assets/layout-CVYe2vN8.js +2 -0
  325. package/dist/web/public/assets/layout-CVYe2vN8.js.map +1 -0
  326. package/dist/web/public/assets/{layout-CR5gLapT.js → layout-CbHxH58i.js} +2 -2
  327. package/dist/web/public/assets/{layout-CR5gLapT.js.map → layout-CbHxH58i.js.map} +1 -1
  328. package/dist/web/public/assets/layout-DD1Dei48.js +2 -0
  329. package/dist/web/public/assets/layout-DD1Dei48.js.map +1 -0
  330. package/dist/web/public/assets/{layout-zotlJ5fW.js → layout-s11iwkL-.js} +2 -2
  331. package/dist/web/public/assets/{layout-zotlJ5fW.js.map → layout-s11iwkL-.js.map} +1 -1
  332. package/dist/web/public/assets/llm-DPlK10Lg.js +7 -0
  333. package/dist/web/public/assets/llm-DPlK10Lg.js.map +1 -0
  334. package/dist/web/public/assets/{loader-circle-BFp6Oc8_.js → loader-circle-DymEG5Cl.js} +2 -2
  335. package/dist/web/public/assets/{loader-circle-BFp6Oc8_.js.map → loader-circle-DymEG5Cl.js.map} +1 -1
  336. package/dist/web/public/assets/{map-pin-DPqnsBIG.js → map-pin-CyZg1-Jk.js} +2 -2
  337. package/dist/web/public/assets/{map-pin-DPqnsBIG.js.map → map-pin-CyZg1-Jk.js.map} +1 -1
  338. package/dist/web/public/assets/mcp-CiifW_qp.js +7 -0
  339. package/dist/web/public/assets/mcp-CiifW_qp.js.map +1 -0
  340. package/dist/web/public/assets/{memos-DCACQN26.js → memos-Bsiq64qW.js} +2 -2
  341. package/dist/web/public/assets/{memos-DCACQN26.js.map → memos-Bsiq64qW.js.map} +1 -1
  342. package/dist/web/public/assets/{messengers-CwWP1qI4.js → messengers-alGJK9dO.js} +3 -3
  343. package/dist/web/public/assets/{messengers-CwWP1qI4.js.map → messengers-alGJK9dO.js.map} +1 -1
  344. package/dist/web/public/assets/native-agent-CgzcqRsU.js +7 -0
  345. package/dist/web/public/assets/native-agent-CgzcqRsU.js.map +1 -0
  346. package/dist/web/public/assets/{network-CrMEVz4-.js → network-BSRJfeGk.js} +2 -2
  347. package/dist/web/public/assets/{network-CrMEVz4-.js.map → network-BSRJfeGk.js.map} +1 -1
  348. package/dist/web/public/assets/{outbox-C7FpZzwS.js → outbox-DSDls9xU.js} +3 -3
  349. package/dist/web/public/assets/{outbox-C7FpZzwS.js.map → outbox-DSDls9xU.js.map} +1 -1
  350. package/dist/web/public/assets/{pagination-Cgt8W6EX.js → pagination-DVXNZ2ti.js} +3 -3
  351. package/dist/web/public/assets/{pagination-Cgt8W6EX.js.map → pagination-DVXNZ2ti.js.map} +1 -1
  352. package/dist/web/public/assets/{persona-Bjty6uqM.js → persona-BB1gIwTX.js} +2 -2
  353. package/dist/web/public/assets/{persona-Bjty6uqM.js.map → persona-BB1gIwTX.js.map} +1 -1
  354. package/dist/web/public/assets/{play-CEoS1N8t.js → play-CcECAHfL.js} +2 -2
  355. package/dist/web/public/assets/{play-CEoS1N8t.js.map → play-CcECAHfL.js.map} +1 -1
  356. package/dist/web/public/assets/plus-DrStBHss.js +7 -0
  357. package/dist/web/public/assets/plus-DrStBHss.js.map +1 -0
  358. package/dist/web/public/assets/policy-BgDYTxy7.js +2 -0
  359. package/dist/web/public/assets/{policy-DwI-ov9J.js.map → policy-BgDYTxy7.js.map} +1 -1
  360. package/dist/web/public/assets/{refresh-ccw-CPSYEbgh.js → refresh-ccw-BBRPVLH8.js} +2 -2
  361. package/dist/web/public/assets/{refresh-ccw-CPSYEbgh.js.map → refresh-ccw-BBRPVLH8.js.map} +1 -1
  362. package/dist/web/public/assets/{reminders-X-QFSWvZ.js → reminders-jwy196Xw.js} +4 -9
  363. package/dist/web/public/assets/reminders-jwy196Xw.js.map +1 -0
  364. package/dist/web/public/assets/{save-tS3IBPf3.js → save-iBtyruco.js} +2 -2
  365. package/dist/web/public/assets/{save-tS3IBPf3.js.map → save-iBtyruco.js.map} +1 -1
  366. package/dist/web/public/assets/{schedules-CfCNvhCV.js → schedules-DDl_Sr5r.js} +3 -3
  367. package/dist/web/public/assets/{schedules-CfCNvhCV.js.map → schedules-DDl_Sr5r.js.map} +1 -1
  368. package/dist/web/public/assets/{search-BPvPCccn.js → search-Yb1S22sv.js} +2 -2
  369. package/dist/web/public/assets/{search-BPvPCccn.js.map → search-Yb1S22sv.js.map} +1 -1
  370. package/dist/web/public/assets/{service-DSitDFzD.js → service-jrg0kMtK.js} +3 -3
  371. package/dist/web/public/assets/{service-DSitDFzD.js.map → service-jrg0kMtK.js.map} +1 -1
  372. package/dist/web/public/assets/{status-badge-HSHkhdur.js → status-badge-Arxyw3TL.js} +2 -2
  373. package/dist/web/public/assets/{status-badge-HSHkhdur.js.map → status-badge-Arxyw3TL.js.map} +1 -1
  374. package/dist/web/public/assets/{subtasks-eKq_P0v6.js → subtasks-CkyuMv_X.js} +3 -3
  375. package/dist/web/public/assets/{subtasks-eKq_P0v6.js.map → subtasks-CkyuMv_X.js.map} +1 -1
  376. package/dist/web/public/assets/{table-BBISYTH-.js → table-BKdG9tsY.js} +2 -2
  377. package/dist/web/public/assets/{table-BBISYTH-.js.map → table-BKdG9tsY.js.map} +1 -1
  378. package/dist/web/public/assets/{topn-JA8llaUI.js → topn-BpX8BKWS.js} +3 -3
  379. package/dist/web/public/assets/{topn-JA8llaUI.js.map → topn-BpX8BKWS.js.map} +1 -1
  380. package/dist/web/public/assets/{trash-2-D8F96aYm.js → trash-2-DxKJo_-6.js} +3 -3
  381. package/dist/web/public/assets/{trash-2-D8F96aYm.js.map → trash-2-DxKJo_-6.js.map} +1 -1
  382. package/dist/web/public/assets/use-background-tasks-vqoDXiAq.js +2 -0
  383. package/dist/web/public/assets/use-background-tasks-vqoDXiAq.js.map +1 -0
  384. package/dist/web/public/assets/use-llm-admin-D4snixaM.js +2 -0
  385. package/dist/web/public/assets/use-llm-admin-D4snixaM.js.map +1 -0
  386. package/dist/web/public/assets/{use-memory-BDa1R8Tf.js → use-memory-Cqf3xywK.js} +2 -2
  387. package/dist/web/public/assets/{use-memory-BDa1R8Tf.js.map → use-memory-Cqf3xywK.js.map} +1 -1
  388. package/dist/web/public/assets/{use-observability-XgxLMQsY.js → use-observability-Thh7LWoE.js} +2 -2
  389. package/dist/web/public/assets/{use-observability-XgxLMQsY.js.map → use-observability-Thh7LWoE.js.map} +1 -1
  390. package/dist/web/public/assets/{use-settings-Bc4s-JUD.js → use-settings-DRhH8owt.js} +2 -2
  391. package/dist/web/public/assets/{use-settings-Bc4s-JUD.js.map → use-settings-DRhH8owt.js.map} +1 -1
  392. package/dist/web/public/assets/{use-workspace-JalfqH6H.js → use-workspace-iLKz-h_7.js} +2 -2
  393. package/dist/web/public/assets/{use-workspace-JalfqH6H.js.map → use-workspace-iLKz-h_7.js.map} +1 -1
  394. package/dist/web/public/assets/useQuery-gnz30xMJ.js +2 -0
  395. package/dist/web/public/assets/{useQuery-DFryK9Pn.js.map → useQuery-gnz30xMJ.js.map} +1 -1
  396. package/dist/web/public/assets/{vector-G2dN_aut.js → vector-COjljy_4.js} +2 -2
  397. package/dist/web/public/assets/{vector-G2dN_aut.js.map → vector-COjljy_4.js.map} +1 -1
  398. package/dist/web/public/assets/viewer-AQHSc8hZ.js +12 -0
  399. package/dist/web/public/assets/viewer-AQHSc8hZ.js.map +1 -0
  400. package/dist/web/public/assets/{workspace-BaLZIgGn.js → workspace-DRtSCbx5.js} +4 -4
  401. package/dist/web/public/assets/{workspace-BaLZIgGn.js.map → workspace-DRtSCbx5.js.map} +1 -1
  402. package/dist/web/public/assets/{workspaces-cX_rV523.js → workspaces-BLR5ZBu6.js} +3 -3
  403. package/dist/web/public/assets/{workspaces-cX_rV523.js.map → workspaces-BLR5ZBu6.js.map} +1 -1
  404. package/dist/web/public/assets/{x-D5196-9X.js → x-DGQ0qjhc.js} +2 -2
  405. package/dist/web/public/assets/{x-D5196-9X.js.map → x-DGQ0qjhc.js.map} +1 -1
  406. package/dist/web/public/index.html +2 -2
  407. package/dist/web/server.d.ts.map +1 -1
  408. package/dist/web/server.js +45 -0
  409. package/dist/web/server.js.map +1 -1
  410. package/package.json +2 -2
  411. package/dist/web/public/assets/agents-o9odac79.js +0 -12
  412. package/dist/web/public/assets/agents-o9odac79.js.map +0 -1
  413. package/dist/web/public/assets/hot-O9Z19xXa.js +0 -17
  414. package/dist/web/public/assets/hot-O9Z19xXa.js.map +0 -1
  415. package/dist/web/public/assets/index-CITyis5g.js +0 -166
  416. package/dist/web/public/assets/index-CITyis5g.js.map +0 -1
  417. package/dist/web/public/assets/index-Cvacw7Jg.css +0 -1
  418. package/dist/web/public/assets/installed-CM34mlDU.js +0 -7
  419. package/dist/web/public/assets/installed-CM34mlDU.js.map +0 -1
  420. package/dist/web/public/assets/layout-BxrFilDN.js +0 -2
  421. package/dist/web/public/assets/layout-BxrFilDN.js.map +0 -1
  422. package/dist/web/public/assets/layout-CcJQxFci.js +0 -2
  423. package/dist/web/public/assets/layout-CcJQxFci.js.map +0 -1
  424. package/dist/web/public/assets/layout-DRRveTaR.js +0 -2
  425. package/dist/web/public/assets/layout-DRRveTaR.js.map +0 -1
  426. package/dist/web/public/assets/policy-DwI-ov9J.js +0 -2
  427. package/dist/web/public/assets/reminders-X-QFSWvZ.js.map +0 -1
  428. package/dist/web/public/assets/use-skills-DCOYAQ8s.js +0 -2
  429. package/dist/web/public/assets/use-skills-DCOYAQ8s.js.map +0 -1
  430. package/dist/web/public/assets/useQuery-DFryK9Pn.js +0 -2
  431. package/dist/web/public/assets/viewer-DliYQkQQ.js +0 -12
  432. package/dist/web/public/assets/viewer-DliYQkQQ.js.map +0 -1
@@ -0,0 +1,30 @@
1
+ import { listConfiguredBackends } from '../core/llm/secrets.js';
2
+ /** Top-level entry point. Subcommand-dispatching shell — keeps the
3
+ * wizard branches small + testable in isolation. */
4
+ export declare function runSetupLlm(argv: string[]): Promise<number>;
5
+ declare function suggestBackendName(provider: string, preset: {
6
+ label: string;
7
+ }): string;
8
+ declare function envSuffix(name: string): string;
9
+ /** Exported only for unit tests; lets us verify the suggestBackendName
10
+ * derivation without spinning up readline. */
11
+ export declare const _internal: {
12
+ suggestBackendName: typeof suggestBackendName;
13
+ envSuffix: typeof envSuffix;
14
+ KNOWN_ROLES: readonly ["cheap", "evaluator", "native-chat"];
15
+ PROVIDER_PRESETS: {
16
+ label: string;
17
+ provider: "openai-compat" | "anthropic";
18
+ baseUrl: string;
19
+ modelHint: string;
20
+ apiKeyDoc: string;
21
+ }[];
22
+ };
23
+ /** Re-export of the public secrets helpers so tests can confirm
24
+ * saveSecret was wired correctly without importing the secrets
25
+ * module twice. */
26
+ export declare const _wired: {
27
+ listConfiguredBackends: typeof listConfiguredBackends;
28
+ };
29
+ export {};
30
+ //# sourceMappingURL=setup-llm.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup-llm.d.ts","sourceRoot":"","sources":["../../src/cli-ui/setup-llm.ts"],"names":[],"mappings":"AA0BA,OAAO,EAA4B,sBAAsB,EAAwB,MAAM,wBAAwB,CAAA;AA8D/G;qDACqD;AACrD,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAiBjE;AAoUD,iBAAS,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAI/E;AAED,iBAAS,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEvC;AAuBD;+CAC+C;AAC/C,eAAO,MAAM,SAAS;;;;;eA1ab,MAAM;kBACH,eAAe,GAAG,WAAW;iBAC9B,MAAM;mBACJ,MAAM;mBACN,MAAM;;CA2alB,CAAA;AAED;;oBAEoB;AACpB,eAAO,MAAM,MAAM;;CAA6B,CAAA"}
@@ -0,0 +1,460 @@
1
+ // setup-llm — interactive wizard for adding / editing native LLM
2
+ // backends (Stage 4 of the nanobot vs agim comparison plan).
3
+ //
4
+ // Why this exists: editing `~/.agim/config.json` by hand to set up
5
+ // `llmBackends` + `llmRoles` + secrets is a multi-file dance:
6
+ //
7
+ // 1. add an entry to `config.json` `llmBackends` with the right
8
+ // provider / model / baseUrl shape
9
+ // 2. decide which roles (cheap / evaluator / native-chat / custom)
10
+ // should target the new backend and update `llmRoles`
11
+ // 3. save the API key to `~/.agim/llm-secrets.json` with 0600
12
+ // permissions (or set the equivalent env var)
13
+ //
14
+ // This wizard walks the operator through all three in one go and
15
+ // validates the result by ROUNDTRIPPING through configSchema before
16
+ // writing. Cancel-safe at every prompt — Ctrl-C / empty answer aborts
17
+ // without touching disk.
18
+ //
19
+ // Invoked as `agim setup llm` (or `agim setup llm add`, `agim setup
20
+ // llm role`, etc. — subcommands documented in cli.ts).
21
+ import { readFile, writeFile, mkdir, chmod, stat } from 'node:fs/promises';
22
+ import { join } from 'node:path';
23
+ import { createInterface } from 'node:readline';
24
+ import { AGIM_HOME } from '../core/agim-paths.js';
25
+ import { configSchema } from '../core/config-schema.js';
26
+ import { saveSecret, removeSecret, listConfiguredBackends, describeSecretSource } from '../core/llm/secrets.js';
27
+ const CONFIG_FILE = join(AGIM_HOME, 'config.json');
28
+ /** All roles we currently inject into. New roles can be invented
29
+ * ad-hoc (the schema allows any string), but the wizard surfaces the
30
+ * blessed three by default. */
31
+ const KNOWN_ROLES = ['cheap', 'evaluator', 'native-chat'];
32
+ /** Curated provider quick-picks. Operators can still type
33
+ * "openai-compat" or "anthropic" manually for anything else. */
34
+ const PROVIDER_PRESETS = [
35
+ { label: 'DeepSeek (cheap+fast, recommended for cheap role)',
36
+ provider: 'openai-compat', baseUrl: 'https://api.deepseek.com/v1',
37
+ modelHint: 'deepseek-chat',
38
+ apiKeyDoc: 'platform.deepseek.com → API Keys' },
39
+ { label: 'Moonshot Kimi',
40
+ provider: 'openai-compat', baseUrl: 'https://api.moonshot.cn/v1',
41
+ modelHint: 'moonshot-v1-8k',
42
+ apiKeyDoc: 'platform.moonshot.cn → API Keys' },
43
+ { label: 'Zhipu GLM',
44
+ provider: 'openai-compat', baseUrl: 'https://open.bigmodel.cn/api/paas/v4',
45
+ modelHint: 'glm-4-air',
46
+ apiKeyDoc: 'open.bigmodel.cn' },
47
+ { label: 'OpenAI',
48
+ provider: 'openai-compat', baseUrl: 'https://api.openai.com/v1',
49
+ modelHint: 'gpt-4o-mini',
50
+ apiKeyDoc: 'platform.openai.com → API keys' },
51
+ { label: 'Anthropic (native)',
52
+ provider: 'anthropic', baseUrl: 'https://api.anthropic.com/v1',
53
+ modelHint: 'claude-3-5-sonnet-20241022',
54
+ apiKeyDoc: 'console.anthropic.com → API Keys' },
55
+ { label: 'Custom / other openai-compatible',
56
+ provider: 'openai-compat', baseUrl: '',
57
+ modelHint: '',
58
+ apiKeyDoc: '' },
59
+ ];
60
+ /** Top-level entry point. Subcommand-dispatching shell — keeps the
61
+ * wizard branches small + testable in isolation. */
62
+ export async function runSetupLlm(argv) {
63
+ const sub = (argv[0] || '').toLowerCase();
64
+ try {
65
+ if (sub === '' || sub === 'help' || sub === '-h' || sub === '--help')
66
+ return showHelp();
67
+ if (sub === 'list' || sub === 'ls')
68
+ return await listAction();
69
+ if (sub === 'add')
70
+ return await addAction();
71
+ if (sub === 'remove' || sub === 'rm')
72
+ return await removeAction(argv[1]);
73
+ if (sub === 'role' || sub === 'roles')
74
+ return await roleAction();
75
+ if (sub === 'secret')
76
+ return await secretAction(argv[1]);
77
+ if (sub === 'native-enable' || sub === 'enable-native') {
78
+ return await nativeEnableAction(argv[1]);
79
+ }
80
+ return showHelp(`unknown subcommand: ${sub}`);
81
+ }
82
+ catch (err) {
83
+ process.stderr.write(`\n❌ wizard failed: ${err instanceof Error ? err.message : String(err)}\n`);
84
+ return 1;
85
+ }
86
+ }
87
+ function showHelp(error) {
88
+ if (error)
89
+ process.stderr.write(`${error}\n\n`);
90
+ process.stdout.write(`
91
+ agim setup llm — manage native LLM backends interactively.
92
+
93
+ Subcommands:
94
+ list show configured backends and role bindings
95
+ add add a new backend (provider preset → name → model → API key → role binding)
96
+ remove [<name>] remove a backend (also clears the API key)
97
+ role edit role → backend mapping (cheap / evaluator / native-chat / custom)
98
+ secret <name> (re)set the API key for an existing backend
99
+ native-enable [<name>] one-walk wizard: bind native-chat role + cheap (optional)
100
+ + defaultAgent: 'native' so the in-process agent is the
101
+ default backend for unrouted IM traffic
102
+
103
+ Notes:
104
+ · Backends live in ~/.agim/config.json under "llmBackends".
105
+ · Role bindings live in the same file under "llmRoles".
106
+ · API keys live in ~/.agim/llm-secrets.json (0600). The env var
107
+ AGIM_LLM_SECRET_<UPPER_NAME> overrides what's on disk.
108
+ `);
109
+ return error ? 1 : 0;
110
+ }
111
+ // ─── subcommands ────────────────────────────────────────────────────
112
+ async function listAction() {
113
+ const cfg = await readConfig();
114
+ const backends = cfg.llmBackends ?? [];
115
+ const roles = cfg.llmRoles ?? {};
116
+ if (backends.length === 0) {
117
+ process.stdout.write('(no LLM backends configured — run `agim setup llm add`)\n');
118
+ }
119
+ else {
120
+ process.stdout.write('\nConfigured backends:\n');
121
+ for (const b of backends) {
122
+ const src = describeSecretSource(b.name);
123
+ const keyStr = src.source === 'none' ? 'key: ⚠️ missing' : `key: ✅ ${src.source}`;
124
+ process.stdout.write(` · ${b.name} → ${b.provider} ${b.model} @ ${b.baseUrl} [${keyStr}]\n`);
125
+ }
126
+ }
127
+ process.stdout.write('\nRole bindings:\n');
128
+ for (const role of KNOWN_ROLES) {
129
+ const bound = roles[role];
130
+ process.stdout.write(` · ${role.padEnd(12)} → ${bound ? bound : '(unset)'}\n`);
131
+ }
132
+ for (const [role, name] of Object.entries(roles)) {
133
+ if (KNOWN_ROLES.includes(role))
134
+ continue;
135
+ process.stdout.write(` · ${role.padEnd(12)} → ${name} (custom)\n`);
136
+ }
137
+ return 0;
138
+ }
139
+ async function addAction() {
140
+ const rl = readline();
141
+ try {
142
+ process.stdout.write('\n── agim setup llm add ──\n');
143
+ process.stdout.write('Pick a provider:\n');
144
+ PROVIDER_PRESETS.forEach((p, i) => { process.stdout.write(` ${i + 1}. ${p.label}\n`); });
145
+ const choice = await ask(rl, `Choice [1-${PROVIDER_PRESETS.length}]: `);
146
+ const idx = parseInt(choice, 10) - 1;
147
+ if (!Number.isFinite(idx) || idx < 0 || idx >= PROVIDER_PRESETS.length) {
148
+ return cancel('not a valid choice');
149
+ }
150
+ const preset = PROVIDER_PRESETS[idx];
151
+ const provider = preset.provider;
152
+ let baseUrl = preset.baseUrl;
153
+ if (!baseUrl) {
154
+ baseUrl = (await ask(rl, 'Base URL (e.g. https://api.example.com/v1): ')).trim();
155
+ if (!baseUrl)
156
+ return cancel('empty base URL');
157
+ }
158
+ const defaultName = suggestBackendName(provider, preset);
159
+ const name = (await ask(rl, `Backend name [${defaultName}]: `)).trim() || defaultName;
160
+ if (!/^[a-z0-9][a-z0-9-]*$/i.test(name)) {
161
+ return cancel('name must match [A-Za-z0-9][A-Za-z0-9-]*');
162
+ }
163
+ const modelDefault = preset.modelHint;
164
+ const model = (await ask(rl, `Model${modelDefault ? ` [${modelDefault}]` : ''}: `)).trim() || modelDefault;
165
+ if (!model)
166
+ return cancel('empty model');
167
+ if (preset.apiKeyDoc) {
168
+ process.stdout.write(`(API key: get one at ${preset.apiKeyDoc})\n`);
169
+ }
170
+ const apiKey = (await ask(rl, 'Paste API key (empty to skip): ', { silent: true })).trim();
171
+ const cfg = await readConfig();
172
+ const backends = cfg.llmBackends ?? [];
173
+ if (backends.some((b) => b.name === name)) {
174
+ return cancel(`backend "${name}" already exists — use \`agim setup llm remove ${name}\` first`);
175
+ }
176
+ backends.push({ name, provider, baseUrl, model });
177
+ cfg.llmBackends = backends;
178
+ // Validate via Zod so a typo in the wizard input shape is caught
179
+ // BEFORE we write to disk and BEFORE we stash the secret.
180
+ const result = configSchema.safeParse(cfg);
181
+ if (!result.success) {
182
+ return cancel(`config validation failed: ${result.error.issues.map((i) => i.message).join('; ')}`);
183
+ }
184
+ await writeConfig(cfg);
185
+ if (apiKey)
186
+ saveSecret(name, apiKey);
187
+ process.stdout.write(`\n✅ Saved backend "${name}" (${provider} / ${model}).\n`);
188
+ if (!apiKey) {
189
+ process.stdout.write(`⚠️ No API key stored. Set env var AGIM_LLM_SECRET_${envSuffix(name)} ` +
190
+ `or rerun \`agim setup llm secret ${name}\` to add one.\n`);
191
+ }
192
+ process.stdout.write('\nBind to which role(s)? (comma-separated, empty to skip)\n');
193
+ process.stdout.write(` Known roles: ${KNOWN_ROLES.join(', ')}\n`);
194
+ const roleAns = (await ask(rl, 'Roles: ')).trim();
195
+ if (roleAns) {
196
+ const roles = roleAns.split(/[,\s]+/).map((r) => r.trim()).filter(Boolean);
197
+ cfg.llmRoles = cfg.llmRoles ?? {};
198
+ for (const r of roles)
199
+ cfg.llmRoles[r] = name;
200
+ await writeConfig(cfg);
201
+ process.stdout.write(`✅ Bound roles: ${roles.join(', ')} → ${name}\n`);
202
+ }
203
+ return 0;
204
+ }
205
+ finally {
206
+ rl.close();
207
+ }
208
+ }
209
+ async function removeAction(maybeName) {
210
+ const cfg = await readConfig();
211
+ const backends = cfg.llmBackends ?? [];
212
+ if (backends.length === 0) {
213
+ process.stdout.write('(no backends to remove)\n');
214
+ return 0;
215
+ }
216
+ let name = (maybeName ?? '').trim();
217
+ if (!name) {
218
+ const rl = readline();
219
+ try {
220
+ process.stdout.write('\nWhich backend?\n');
221
+ backends.forEach((b, i) => { process.stdout.write(` ${i + 1}. ${b.name}\n`); });
222
+ const choice = await ask(rl, `Choice [1-${backends.length}]: `);
223
+ const idx = parseInt(choice, 10) - 1;
224
+ if (!Number.isFinite(idx) || idx < 0 || idx >= backends.length)
225
+ return cancel('not a valid choice');
226
+ name = backends[idx].name;
227
+ }
228
+ finally {
229
+ rl.close();
230
+ }
231
+ }
232
+ const next = backends.filter((b) => b.name !== name);
233
+ if (next.length === backends.length) {
234
+ return cancel(`no backend named "${name}"`);
235
+ }
236
+ cfg.llmBackends = next;
237
+ // Drop any role binding still pointing at it.
238
+ const roles = cfg.llmRoles ?? {};
239
+ const cleanedRoles = {};
240
+ let droppedRoles = 0;
241
+ for (const [r, b] of Object.entries(roles)) {
242
+ if (b === name) {
243
+ droppedRoles++;
244
+ continue;
245
+ }
246
+ cleanedRoles[r] = b;
247
+ }
248
+ cfg.llmRoles = cleanedRoles;
249
+ await writeConfig(cfg);
250
+ removeSecret(name);
251
+ process.stdout.write(`✅ Removed backend "${name}" (cleared ${droppedRoles} role binding(s) and the on-disk API key).\n`);
252
+ return 0;
253
+ }
254
+ async function roleAction() {
255
+ const cfg = await readConfig();
256
+ const backends = cfg.llmBackends ?? [];
257
+ if (backends.length === 0) {
258
+ return cancel('add a backend first: `agim setup llm add`');
259
+ }
260
+ const rl = readline();
261
+ try {
262
+ process.stdout.write('\nAvailable backends:\n');
263
+ backends.forEach((b, i) => { process.stdout.write(` ${i + 1}. ${b.name}\n`); });
264
+ process.stdout.write(' 0. (unbind)\n\n');
265
+ cfg.llmRoles = cfg.llmRoles ?? {};
266
+ for (const role of KNOWN_ROLES) {
267
+ const current = cfg.llmRoles[role] ?? '(unset)';
268
+ const ans = (await ask(rl, `${role} [current: ${current}] → backend # (Enter = keep): `)).trim();
269
+ if (!ans)
270
+ continue;
271
+ const n = parseInt(ans, 10);
272
+ if (n === 0) {
273
+ delete cfg.llmRoles[role];
274
+ continue;
275
+ }
276
+ const idx = n - 1;
277
+ if (!Number.isFinite(idx) || idx < 0 || idx >= backends.length) {
278
+ process.stdout.write(` ⚠ skipped "${role}" (invalid choice)\n`);
279
+ continue;
280
+ }
281
+ cfg.llmRoles[role] = backends[idx].name;
282
+ }
283
+ await writeConfig(cfg);
284
+ process.stdout.write('\n✅ Role bindings updated.\n');
285
+ return 0;
286
+ }
287
+ finally {
288
+ rl.close();
289
+ }
290
+ }
291
+ async function secretAction(maybeName) {
292
+ const cfg = await readConfig();
293
+ const backends = cfg.llmBackends ?? [];
294
+ if (backends.length === 0)
295
+ return cancel('no backends configured');
296
+ let name = (maybeName ?? '').trim();
297
+ if (!name) {
298
+ const rl = readline();
299
+ try {
300
+ process.stdout.write('\nWhich backend?\n');
301
+ backends.forEach((b, i) => { process.stdout.write(` ${i + 1}. ${b.name}\n`); });
302
+ const choice = await ask(rl, `Choice [1-${backends.length}]: `);
303
+ const idx = parseInt(choice, 10) - 1;
304
+ if (!Number.isFinite(idx) || idx < 0 || idx >= backends.length)
305
+ return cancel('not a valid choice');
306
+ name = backends[idx].name;
307
+ }
308
+ finally {
309
+ rl.close();
310
+ }
311
+ }
312
+ else if (!backends.some((b) => b.name === name)) {
313
+ return cancel(`no backend named "${name}"`);
314
+ }
315
+ const rl = readline();
316
+ try {
317
+ const key = (await ask(rl, `Paste API key for "${name}" (empty to abort): `, { silent: true })).trim();
318
+ if (!key)
319
+ return cancel('empty key');
320
+ saveSecret(name, key);
321
+ process.stdout.write(`✅ Saved API key for "${name}".\n`);
322
+ return 0;
323
+ }
324
+ finally {
325
+ rl.close();
326
+ }
327
+ }
328
+ async function nativeEnableAction(maybeBackendName) {
329
+ const cfg = await readConfig();
330
+ const backends = cfg.llmBackends ?? [];
331
+ if (backends.length === 0) {
332
+ process.stdout.write('\n(no LLM backends configured yet)\n');
333
+ process.stdout.write('Run `agim setup llm add` first to set one up, then re-run this.\n');
334
+ return 1;
335
+ }
336
+ let name = (maybeBackendName ?? '').trim();
337
+ if (!name) {
338
+ const rl = readline();
339
+ try {
340
+ process.stdout.write('\nPick the backend that powers the native agent:\n');
341
+ backends.forEach((b, i) => { process.stdout.write(` ${i + 1}. ${b.name} (${b.provider} / ${b.model})\n`); });
342
+ const choice = await ask(rl, `Choice [1-${backends.length}]: `);
343
+ const idx = parseInt(choice, 10) - 1;
344
+ if (!Number.isFinite(idx) || idx < 0 || idx >= backends.length) {
345
+ return cancel('not a valid choice');
346
+ }
347
+ name = backends[idx].name;
348
+ }
349
+ finally {
350
+ rl.close();
351
+ }
352
+ }
353
+ else if (!backends.some((b) => b.name === name)) {
354
+ return cancel(`no backend named "${name}"`);
355
+ }
356
+ // Mutate config: bind role + set defaultAgent. Always validate
357
+ // through configSchema before writing.
358
+ cfg.llmRoles = cfg.llmRoles ?? {};
359
+ cfg.llmRoles['native-chat'] = name;
360
+ const rl = readline();
361
+ try {
362
+ const bindCheap = (await ask(rl, `Also bind cheap role to "${name}"? [Y/n]: `)).trim().toLowerCase();
363
+ if (bindCheap === '' || bindCheap === 'y' || bindCheap === 'yes') {
364
+ cfg.llmRoles['cheap'] = name;
365
+ }
366
+ const setDefault = (await ask(rl, `Set defaultAgent: "native" (in-process agent handles unrouted IM)? [Y/n]: `))
367
+ .trim().toLowerCase();
368
+ if (setDefault === '' || setDefault === 'y' || setDefault === 'yes') {
369
+ cfg.defaultAgent = 'native';
370
+ }
371
+ }
372
+ finally {
373
+ rl.close();
374
+ }
375
+ const parsed = configSchema.safeParse(cfg);
376
+ if (!parsed.success) {
377
+ return cancel(`config validation failed: ${parsed.error.issues.map((i) => i.message).join('; ')}`);
378
+ }
379
+ await writeConfig(cfg);
380
+ process.stdout.write(`\n✅ Native agent enabled.\n`);
381
+ process.stdout.write(` native-chat -> ${cfg.llmRoles['native-chat']}\n`);
382
+ if (cfg.llmRoles['cheap']) {
383
+ process.stdout.write(` cheap -> ${cfg.llmRoles['cheap']}\n`);
384
+ }
385
+ const def = cfg.defaultAgent;
386
+ if (typeof def === 'string') {
387
+ process.stdout.write(` defaultAgent: ${def}\n`);
388
+ }
389
+ const src = describeSecretSource(name);
390
+ if (src.source === 'none') {
391
+ process.stdout.write(`⚠️ No API key for "${name}". Run \`agim setup llm secret ${name}\` to add one.\n`);
392
+ }
393
+ process.stdout.write(`\nTry it: in any IM thread, send \`/na hello\` (or just chat if you set defaultAgent above).\n`);
394
+ return 0;
395
+ }
396
+ // ─── helpers ────────────────────────────────────────────────────────
397
+ async function readConfig() {
398
+ try {
399
+ const raw = await readFile(CONFIG_FILE, 'utf-8');
400
+ const parsed = JSON.parse(raw);
401
+ return parsed;
402
+ }
403
+ catch (err) {
404
+ if (err.code === 'ENOENT') {
405
+ return { messengers: [], agents: [], defaultAgent: 'claude-code' };
406
+ }
407
+ throw err;
408
+ }
409
+ }
410
+ async function writeConfig(cfg) {
411
+ await mkdir(AGIM_HOME, { recursive: true, mode: 0o700 });
412
+ await writeFile(CONFIG_FILE, JSON.stringify(cfg, null, 2), { mode: 0o600 });
413
+ // Best-effort chmod; on Windows it's a no-op.
414
+ try {
415
+ await chmod(CONFIG_FILE, 0o600);
416
+ }
417
+ catch { /* ignore */ }
418
+ // Surface the path so testers see exactly what got written.
419
+ try {
420
+ const s = await stat(CONFIG_FILE);
421
+ process.stdout.write(` (wrote ${CONFIG_FILE} — ${s.size} bytes)\n`);
422
+ }
423
+ catch { /* ignore */ }
424
+ }
425
+ function suggestBackendName(provider, preset) {
426
+ // "DeepSeek (cheap+fast, recommended for cheap role)" → "deepseek"
427
+ const head = preset.label.split(/[\s(]/)[0]?.toLowerCase() ?? provider;
428
+ return head.replace(/[^a-z0-9-]/g, '');
429
+ }
430
+ function envSuffix(name) {
431
+ return name.replace(/[^A-Za-z0-9]+/g, '_').toUpperCase();
432
+ }
433
+ function readline() {
434
+ return createInterface({ input: process.stdin, output: process.stdout });
435
+ }
436
+ function ask(rl, prompt, opts = {}) {
437
+ // We don't implement silent input here — the cli context expects a
438
+ // TTY and we'd need raw mode to mask. The function exists so we can
439
+ // upgrade to masked input later without changing call sites.
440
+ void opts;
441
+ return new Promise((resolve) => rl.question(prompt, resolve));
442
+ }
443
+ function cancel(reason) {
444
+ process.stdout.write(`\n✖ aborted: ${reason}\n`);
445
+ return 1;
446
+ }
447
+ // ─── test hooks ─────────────────────────────────────────────────────
448
+ /** Exported only for unit tests; lets us verify the suggestBackendName
449
+ * derivation without spinning up readline. */
450
+ export const _internal = {
451
+ suggestBackendName,
452
+ envSuffix,
453
+ KNOWN_ROLES,
454
+ PROVIDER_PRESETS,
455
+ };
456
+ /** Re-export of the public secrets helpers so tests can confirm
457
+ * saveSecret was wired correctly without importing the secrets
458
+ * module twice. */
459
+ export const _wired = { listConfiguredBackends };
460
+ //# sourceMappingURL=setup-llm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup-llm.js","sourceRoot":"","sources":["../../src/cli-ui/setup-llm.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ /** Common MCP server presets so the operator doesn't have to remember
2
+ * the full @modelcontextprotocol/server-* package names. Add new
3
+ * presets here as the ecosystem grows; '(custom)' is always last. */
4
+ interface ServerPreset {
5
+ label: string;
6
+ transport: 'stdio' | 'http';
7
+ command?: string;
8
+ args?: string[];
9
+ url?: string;
10
+ hint?: string;
11
+ }
12
+ export declare function runSetupMcp(argv: string[]): Promise<number>;
13
+ declare function suggestServerName(preset: ServerPreset): string;
14
+ export declare const _internal: {
15
+ suggestServerName: typeof suggestServerName;
16
+ PRESETS: ServerPreset[];
17
+ };
18
+ export {};
19
+ //# sourceMappingURL=setup-mcp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup-mcp.d.ts","sourceRoot":"","sources":["../../src/cli-ui/setup-mcp.ts"],"names":[],"mappings":"AAmBA;;sEAEsE;AACtE,UAAU,YAAY;IACpB,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,EAAE,OAAO,GAAG,MAAM,CAAA;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;IACf,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAoDD,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAajE;AAqND,iBAAS,iBAAiB,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CAIvD;AAoBD,eAAO,MAAM,SAAS;;;CAGrB,CAAA"}