agim-cli 1.4.9 → 1.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (659) hide show
  1. package/CHANGELOG.md +437 -402
  2. package/README.md +43 -7
  3. package/README.zh-CN.md +42 -7
  4. package/bin/agim_rpc.py +12 -12
  5. package/dist/cli-ui/cmd-handlers.d.ts +25 -4
  6. package/dist/cli-ui/cmd-handlers.d.ts.map +1 -1
  7. package/dist/cli-ui/cmd-handlers.js +315 -59
  8. package/dist/cli-ui/cmd-handlers.js.map +1 -1
  9. package/dist/cli-ui/config-wizard.d.ts +13 -1
  10. package/dist/cli-ui/config-wizard.d.ts.map +1 -1
  11. package/dist/cli-ui/config-wizard.js +120 -48
  12. package/dist/cli-ui/config-wizard.js.map +1 -1
  13. package/dist/cli-ui/doctor.d.ts +15 -0
  14. package/dist/cli-ui/doctor.d.ts.map +1 -0
  15. package/dist/cli-ui/doctor.js +151 -0
  16. package/dist/cli-ui/doctor.js.map +1 -0
  17. package/dist/cli-ui/entry-menu.d.ts +6 -0
  18. package/dist/cli-ui/entry-menu.d.ts.map +1 -1
  19. package/dist/cli-ui/entry-menu.js +67 -30
  20. package/dist/cli-ui/entry-menu.js.map +1 -1
  21. package/dist/cli-ui/env-file.d.ts +4 -4
  22. package/dist/cli-ui/env-file.js +13 -13
  23. package/dist/cli-ui/env-file.js.map +1 -1
  24. package/dist/cli-ui/i18n.d.ts +17 -8
  25. package/dist/cli-ui/i18n.d.ts.map +1 -1
  26. package/dist/cli-ui/i18n.js +39 -21
  27. package/dist/cli-ui/i18n.js.map +1 -1
  28. package/dist/cli-ui/lang-picker.js +1 -1
  29. package/dist/cli-ui/lang-picker.js.map +1 -1
  30. package/dist/cli-ui/paths.d.ts.map +1 -1
  31. package/dist/cli-ui/paths.js +2 -4
  32. package/dist/cli-ui/paths.js.map +1 -1
  33. package/dist/cli-ui/quickstart.d.ts +3 -0
  34. package/dist/cli-ui/quickstart.d.ts.map +1 -0
  35. package/dist/cli-ui/quickstart.js +108 -0
  36. package/dist/cli-ui/quickstart.js.map +1 -0
  37. package/dist/cli-ui/readiness.d.ts +10 -0
  38. package/dist/cli-ui/readiness.d.ts.map +1 -0
  39. package/dist/cli-ui/readiness.js +75 -0
  40. package/dist/cli-ui/readiness.js.map +1 -0
  41. package/dist/cli-ui/service.d.ts +30 -7
  42. package/dist/cli-ui/service.d.ts.map +1 -1
  43. package/dist/cli-ui/service.js +171 -77
  44. package/dist/cli-ui/service.js.map +1 -1
  45. package/dist/cli-ui/tui/app.js +2 -2
  46. package/dist/cli-ui/tui/app.js.map +1 -1
  47. package/dist/cli-ui/tui/index.js +6 -6
  48. package/dist/cli-ui/tui/index.js.map +1 -1
  49. package/dist/cli-ui/tui/mouse-stdin.js +1 -1
  50. package/dist/cli-ui/tui/mouse-stdin.js.map +1 -1
  51. package/dist/cli-ui/tui/stream-reveal.d.ts +2 -2
  52. package/dist/cli-ui/tui/stream-reveal.d.ts.map +1 -1
  53. package/dist/cli-ui/tui/stream-reveal.js +4 -4
  54. package/dist/cli-ui/tui/stream-reveal.js.map +1 -1
  55. package/dist/cli.js +118 -436
  56. package/dist/cli.js.map +1 -1
  57. package/dist/core/a2a-notify.js +5 -5
  58. package/dist/core/a2a-notify.js.map +1 -1
  59. package/dist/core/a2a.d.ts +2 -2
  60. package/dist/core/a2a.d.ts.map +1 -1
  61. package/dist/core/a2a.js +12 -12
  62. package/dist/core/a2a.js.map +1 -1
  63. package/dist/core/access-token.d.ts +1 -1
  64. package/dist/core/access-token.js +7 -7
  65. package/dist/core/access-token.js.map +1 -1
  66. package/dist/core/acp-server.d.ts.map +1 -1
  67. package/dist/core/acp-server.js +21 -7
  68. package/dist/core/acp-server.js.map +1 -1
  69. package/dist/core/admin-allowlist.js +5 -5
  70. package/dist/core/admin-allowlist.js.map +1 -1
  71. package/dist/core/agent-base.d.ts +1 -1
  72. package/dist/core/agent-base.js +3 -3
  73. package/dist/core/agent-base.js.map +1 -1
  74. package/dist/core/agent-cwd.d.ts +13 -6
  75. package/dist/core/agent-cwd.d.ts.map +1 -1
  76. package/dist/core/agent-cwd.js +72 -23
  77. package/dist/core/agent-cwd.js.map +1 -1
  78. package/dist/core/agim-paths.d.ts +1 -4
  79. package/dist/core/agim-paths.d.ts.map +1 -1
  80. package/dist/core/agim-paths.js +18 -35
  81. package/dist/core/agim-paths.js.map +1 -1
  82. package/dist/core/approval-bus.d.ts +4 -4
  83. package/dist/core/approval-bus.d.ts.map +1 -1
  84. package/dist/core/approval-bus.js +14 -14
  85. package/dist/core/approval-bus.js.map +1 -1
  86. package/dist/core/approval-router.js +2 -2
  87. package/dist/core/artifacts.js +3 -3
  88. package/dist/core/artifacts.js.map +1 -1
  89. package/dist/core/ask-user-rpc.js +1 -1
  90. package/dist/core/ask-user-rpc.js.map +1 -1
  91. package/dist/core/audit-log.js +2 -2
  92. package/dist/core/audit-log.js.map +1 -1
  93. package/dist/core/bgjob-reader.d.ts +1 -1
  94. package/dist/core/bgjob-reader.js +4 -4
  95. package/dist/core/bgjob-reader.js.map +1 -1
  96. package/dist/core/commands/approval.js +2 -2
  97. package/dist/core/commands/approval.js.map +1 -1
  98. package/dist/core/commands/builtin.d.ts.map +1 -1
  99. package/dist/core/commands/builtin.js +12 -2
  100. package/dist/core/commands/builtin.js.map +1 -1
  101. package/dist/core/commands/heartbeat.js +2 -2
  102. package/dist/core/commands/heartbeat.js.map +1 -1
  103. package/dist/core/commands/memo.js +1 -1
  104. package/dist/core/commands/memo.js.map +1 -1
  105. package/dist/core/commands/model.d.ts.map +1 -1
  106. package/dist/core/commands/model.js +32 -3
  107. package/dist/core/commands/model.js.map +1 -1
  108. package/dist/core/commands/plan.js +3 -3
  109. package/dist/core/commands/plan.js.map +1 -1
  110. package/dist/core/commands/router-compare.js +3 -3
  111. package/dist/core/commands/router-compare.js.map +1 -1
  112. package/dist/core/commands/service.d.ts.map +1 -1
  113. package/dist/core/commands/service.js +1 -3
  114. package/dist/core/commands/service.js.map +1 -1
  115. package/dist/core/commands/sessions.js +4 -4
  116. package/dist/core/commands/sessions.js.map +1 -1
  117. package/dist/core/commands/skill.js +1 -1
  118. package/dist/core/commands/skill.js.map +1 -1
  119. package/dist/core/commands/stats.js +1 -1
  120. package/dist/core/commands/stats.js.map +1 -1
  121. package/dist/core/commands/web.js +5 -5
  122. package/dist/core/commands/web.js.map +1 -1
  123. package/dist/core/config-schema.js +1 -1
  124. package/dist/core/coord-systems.d.ts +1 -1
  125. package/dist/core/coord-systems.js +4 -4
  126. package/dist/core/coord-systems.js.map +1 -1
  127. package/dist/core/event-bus.d.ts +5 -5
  128. package/dist/core/event-bus.d.ts.map +1 -1
  129. package/dist/core/event-bus.js +3 -3
  130. package/dist/core/event-bus.js.map +1 -1
  131. package/dist/core/feature-flags.d.ts +2 -2
  132. package/dist/core/feature-flags.js +4 -4
  133. package/dist/core/feature-flags.js.map +1 -1
  134. package/dist/core/goal-rpc.js +2 -2
  135. package/dist/core/goal-rpc.js.map +1 -1
  136. package/dist/core/goals.d.ts +1 -1
  137. package/dist/core/goals.js +3 -3
  138. package/dist/core/goals.js.map +1 -1
  139. package/dist/core/heartbeat-store.d.ts +1 -1
  140. package/dist/core/heartbeat-store.d.ts.map +1 -1
  141. package/dist/core/heartbeat-store.js +3 -3
  142. package/dist/core/heartbeat-store.js.map +1 -1
  143. package/dist/core/heartbeat.js +4 -4
  144. package/dist/core/heartbeat.js.map +1 -1
  145. package/dist/core/intent-llm.d.ts +2 -2
  146. package/dist/core/intent-llm.js +5 -5
  147. package/dist/core/intent-llm.js.map +1 -1
  148. package/dist/core/job-board.d.ts +5 -5
  149. package/dist/core/job-board.d.ts.map +1 -1
  150. package/dist/core/job-board.js +17 -17
  151. package/dist/core/job-board.js.map +1 -1
  152. package/dist/core/llm/agent-loop.d.ts +3 -3
  153. package/dist/core/llm/agent-loop.js +14 -14
  154. package/dist/core/llm/agent-loop.js.map +1 -1
  155. package/dist/core/llm/{imhub-dispatcher.d.ts → agim-dispatcher.d.ts} +4 -4
  156. package/dist/core/llm/agim-dispatcher.d.ts.map +1 -0
  157. package/dist/core/llm/{imhub-dispatcher.js → agim-dispatcher.js} +43 -43
  158. package/dist/core/llm/agim-dispatcher.js.map +1 -0
  159. package/dist/core/llm/agim-rpc-server.js +17 -17
  160. package/dist/core/llm/agim-rpc-server.js.map +1 -1
  161. package/dist/core/llm/anthropic-provider.js +2 -1
  162. package/dist/core/llm/anthropic-provider.js.map +1 -1
  163. package/dist/core/llm/auto-compact.d.ts +3 -3
  164. package/dist/core/llm/auto-compact.d.ts.map +1 -1
  165. package/dist/core/llm/auto-compact.js +5 -5
  166. package/dist/core/llm/auto-compact.js.map +1 -1
  167. package/dist/core/llm/builtin-dispatcher.js +3 -3
  168. package/dist/core/llm/builtin-dispatcher.js.map +1 -1
  169. package/dist/core/llm/exec-dispatcher.d.ts +2 -2
  170. package/dist/core/llm/exec-dispatcher.d.ts.map +1 -1
  171. package/dist/core/llm/exec-dispatcher.js +20 -22
  172. package/dist/core/llm/exec-dispatcher.js.map +1 -1
  173. package/dist/core/llm/fs-dispatcher.js +8 -8
  174. package/dist/core/llm/fs-dispatcher.js.map +1 -1
  175. package/dist/core/llm/goal-critic.js +4 -4
  176. package/dist/core/llm/goal-critic.js.map +1 -1
  177. package/dist/core/llm/hallucination-detector.js +2 -2
  178. package/dist/core/llm/hallucination-detector.js.map +1 -1
  179. package/dist/core/llm/mcp-client.d.ts +1 -1
  180. package/dist/core/llm/mcp-client.js +3 -3
  181. package/dist/core/llm/mcp-client.js.map +1 -1
  182. package/dist/core/llm/mcp-registry.js +3 -3
  183. package/dist/core/llm/mcp-registry.js.map +1 -1
  184. package/dist/core/llm/openai-compat-provider.d.ts +1 -1
  185. package/dist/core/llm/openai-compat-provider.js +5 -4
  186. package/dist/core/llm/openai-compat-provider.js.map +1 -1
  187. package/dist/core/llm/provider-base.d.ts +5 -5
  188. package/dist/core/llm/provider-base.d.ts.map +1 -1
  189. package/dist/core/llm/provider-base.js +1 -1
  190. package/dist/core/llm/provider-base.js.map +1 -1
  191. package/dist/core/llm/secrets.d.ts +2 -2
  192. package/dist/core/llm/secrets.d.ts.map +1 -1
  193. package/dist/core/llm/tool-dispatcher.d.ts +1 -1
  194. package/dist/core/llm/web-dispatcher.d.ts +1 -1
  195. package/dist/core/llm/web-dispatcher.js +15 -15
  196. package/dist/core/llm/web-dispatcher.js.map +1 -1
  197. package/dist/core/logger.d.ts +1 -1
  198. package/dist/core/logger.js +3 -3
  199. package/dist/core/logger.js.map +1 -1
  200. package/dist/core/memo-rpc.js +3 -3
  201. package/dist/core/memo-rpc.js.map +1 -1
  202. package/dist/core/memory-consolidate.js +4 -4
  203. package/dist/core/memory-consolidate.js.map +1 -1
  204. package/dist/core/memory-distill.js +4 -4
  205. package/dist/core/memory-distill.js.map +1 -1
  206. package/dist/core/memory-distiller.js +9 -9
  207. package/dist/core/memory-distiller.js.map +1 -1
  208. package/dist/core/memory-vector.js +9 -9
  209. package/dist/core/memory-vector.js.map +1 -1
  210. package/dist/core/memory.js +2 -2
  211. package/dist/core/memory.js.map +1 -1
  212. package/dist/core/memos.js +6 -6
  213. package/dist/core/memos.js.map +1 -1
  214. package/dist/core/message-sink.js +13 -13
  215. package/dist/core/message-sink.js.map +1 -1
  216. package/dist/core/notification-evaluator.d.ts +2 -2
  217. package/dist/core/notification-evaluator.js +4 -4
  218. package/dist/core/notification-evaluator.js.map +1 -1
  219. package/dist/core/onboarding.js +3 -3
  220. package/dist/core/onboarding.js.map +1 -1
  221. package/dist/core/outbox.js +2 -2
  222. package/dist/core/outbox.js.map +1 -1
  223. package/dist/core/persona.d.ts +1 -1
  224. package/dist/core/persona.d.ts.map +1 -1
  225. package/dist/core/persona.js +2 -2
  226. package/dist/core/persona.js.map +1 -1
  227. package/dist/core/plan-history.js +1 -1
  228. package/dist/core/plan-history.js.map +1 -1
  229. package/dist/core/plan-intent.js +5 -5
  230. package/dist/core/plan-intent.js.map +1 -1
  231. package/dist/core/plan-mode-state.d.ts +1 -1
  232. package/dist/core/plan-mode-state.js +4 -4
  233. package/dist/core/plan-mode-state.js.map +1 -1
  234. package/dist/core/push-rpc.d.ts +1 -1
  235. package/dist/core/push-rpc.js +6 -6
  236. package/dist/core/push-rpc.js.map +1 -1
  237. package/dist/core/registry.d.ts +4 -4
  238. package/dist/core/registry.js +10 -10
  239. package/dist/core/registry.js.map +1 -1
  240. package/dist/core/reminders.js +1 -1
  241. package/dist/core/reminders.js.map +1 -1
  242. package/dist/core/restart-flow.d.ts.map +1 -1
  243. package/dist/core/restart-flow.js +5 -7
  244. package/dist/core/restart-flow.js.map +1 -1
  245. package/dist/core/router.d.ts +1 -1
  246. package/dist/core/router.js +5 -5
  247. package/dist/core/router.js.map +1 -1
  248. package/dist/core/schedule.d.ts +2 -2
  249. package/dist/core/schedule.js +4 -4
  250. package/dist/core/schedule.js.map +1 -1
  251. package/dist/core/self-protect.js +3 -3
  252. package/dist/core/self-protect.js.map +1 -1
  253. package/dist/core/sender-allowlist.js +7 -7
  254. package/dist/core/sender-allowlist.js.map +1 -1
  255. package/dist/core/sensitive-paths.d.ts.map +1 -1
  256. package/dist/core/sensitive-paths.js +1 -2
  257. package/dist/core/sensitive-paths.js.map +1 -1
  258. package/dist/core/session.js +2 -2
  259. package/dist/core/session.js.map +1 -1
  260. package/dist/core/skills/builtin/ECC_NOTICE.md +1 -1
  261. package/dist/core/skills/builtin/agim-memory/SKILL.md +1 -1
  262. package/dist/core/skills/builtin/agim-reminders/SKILL.md +2 -2
  263. package/dist/core/skills/builtin/agim-self/SKILL.md +9 -9
  264. package/dist/core/skills/builtin/agim-skill-discovery/SKILL.md +5 -5
  265. package/dist/core/skills/builtin/image-generation/SKILL.md +2 -2
  266. package/dist/core/skills/builtin/long-goal/SKILL.md +7 -7
  267. package/dist/core/skills/builtin/my/SKILL.md +2 -2
  268. package/dist/core/skills/builtin/skill-creator/SKILL.md +2 -2
  269. package/dist/core/skills/loader.d.ts +4 -4
  270. package/dist/core/skills/loader.js +22 -22
  271. package/dist/core/skills/loader.js.map +1 -1
  272. package/dist/core/skills-rpc.js +1 -1
  273. package/dist/core/skills-rpc.js.map +1 -1
  274. package/dist/core/transcribe.js +13 -13
  275. package/dist/core/transcribe.js.map +1 -1
  276. package/dist/core/tunnel.js +1 -1
  277. package/dist/core/tunnel.js.map +1 -1
  278. package/dist/core/types.d.ts +2 -2
  279. package/dist/core/types.d.ts.map +1 -1
  280. package/dist/core/user-coord-prefs.js +1 -1
  281. package/dist/core/user-coord-prefs.js.map +1 -1
  282. package/dist/core/viewer-config.d.ts +8 -8
  283. package/dist/core/viewer-config.js +17 -17
  284. package/dist/core/viewer-config.js.map +1 -1
  285. package/dist/core/viewer-local.js +4 -4
  286. package/dist/core/viewer-local.js.map +1 -1
  287. package/dist/core/viewer-remote.js +1 -1
  288. package/dist/core/viewer-remote.js.map +1 -1
  289. package/dist/plugins/agents/acp/url-guard.d.ts +1 -1
  290. package/dist/plugins/agents/acp/url-guard.js +2 -2
  291. package/dist/plugins/agents/acp/url-guard.js.map +1 -1
  292. package/dist/plugins/agents/antigravity/ensure-mcp-config.d.ts +6 -6
  293. package/dist/plugins/agents/antigravity/ensure-mcp-config.d.ts.map +1 -1
  294. package/dist/plugins/agents/antigravity/ensure-mcp-config.js +12 -12
  295. package/dist/plugins/agents/antigravity/ensure-mcp-config.js.map +1 -1
  296. package/dist/plugins/agents/antigravity/index.js +10 -10
  297. package/dist/plugins/agents/antigravity/index.js.map +1 -1
  298. package/dist/plugins/agents/claude-code/index.d.ts +2 -2
  299. package/dist/plugins/agents/claude-code/index.js +16 -16
  300. package/dist/plugins/agents/claude-code/index.js.map +1 -1
  301. package/dist/plugins/agents/claude-code/mcp-approval-server.js +13 -13
  302. package/dist/plugins/agents/claude-code/mcp-approval-server.js.map +1 -1
  303. package/dist/plugins/agents/codex/build-mcp-cli-args.d.ts +4 -4
  304. package/dist/plugins/agents/codex/build-mcp-cli-args.js +14 -14
  305. package/dist/plugins/agents/codex/build-mcp-cli-args.js.map +1 -1
  306. package/dist/plugins/agents/codex/index.d.ts +3 -3
  307. package/dist/plugins/agents/codex/index.js +14 -14
  308. package/dist/plugins/agents/codex/index.js.map +1 -1
  309. package/dist/plugins/agents/cursor/ensure-mcp-config.d.ts +5 -5
  310. package/dist/plugins/agents/cursor/ensure-mcp-config.d.ts.map +1 -1
  311. package/dist/plugins/agents/cursor/ensure-mcp-config.js +11 -11
  312. package/dist/plugins/agents/cursor/ensure-mcp-config.js.map +1 -1
  313. package/dist/plugins/agents/cursor/index.d.ts +1 -1
  314. package/dist/plugins/agents/cursor/index.js +12 -12
  315. package/dist/plugins/agents/cursor/index.js.map +1 -1
  316. package/dist/plugins/agents/native/index.d.ts +1 -0
  317. package/dist/plugins/agents/native/index.d.ts.map +1 -1
  318. package/dist/plugins/agents/native/index.js +28 -14
  319. package/dist/plugins/agents/native/index.js.map +1 -1
  320. package/dist/plugins/agents/native/tool-registry.d.ts +3 -3
  321. package/dist/plugins/agents/native/tool-registry.d.ts.map +1 -1
  322. package/dist/plugins/agents/native/tool-registry.js +5 -5
  323. package/dist/plugins/agents/native/tool-registry.js.map +1 -1
  324. package/dist/plugins/agents/opencode/ensure-mcp-config.d.ts +1 -1
  325. package/dist/plugins/agents/opencode/ensure-mcp-config.js +9 -9
  326. package/dist/plugins/agents/opencode/ensure-mcp-config.js.map +1 -1
  327. package/dist/plugins/agents/opencode/index.js +3 -3
  328. package/dist/plugins/agents/opencode/index.js.map +1 -1
  329. package/dist/plugins/agents/opencode/opencode-http-adapter.d.ts +4 -0
  330. package/dist/plugins/agents/opencode/opencode-http-adapter.d.ts.map +1 -1
  331. package/dist/plugins/agents/opencode/opencode-http-adapter.js +16 -12
  332. package/dist/plugins/agents/opencode/opencode-http-adapter.js.map +1 -1
  333. package/dist/plugins/agents/opencode/opencode-stdio-adapter.d.ts +2 -2
  334. package/dist/plugins/agents/opencode/opencode-stdio-adapter.d.ts.map +1 -1
  335. package/dist/plugins/agents/opencode/opencode-stdio-adapter.js +7 -5
  336. package/dist/plugins/agents/opencode/opencode-stdio-adapter.js.map +1 -1
  337. package/dist/plugins/agents/opencode/serve-manager.d.ts +1 -1
  338. package/dist/plugins/agents/opencode/serve-manager.d.ts.map +1 -1
  339. package/dist/plugins/agents/opencode/serve-manager.js +10 -10
  340. package/dist/plugins/agents/opencode/serve-manager.js.map +1 -1
  341. package/dist/plugins/agents/pi-native/factory.d.ts.map +1 -1
  342. package/dist/plugins/agents/pi-native/factory.js +29 -13
  343. package/dist/plugins/agents/pi-native/factory.js.map +1 -1
  344. package/dist/plugins/agents/pi-native/index.d.ts +14 -3
  345. package/dist/plugins/agents/pi-native/index.d.ts.map +1 -1
  346. package/dist/plugins/agents/pi-native/index.js +58 -4
  347. package/dist/plugins/agents/pi-native/index.js.map +1 -1
  348. package/dist/plugins/agents/pi-native/provider-resolver.d.ts +2 -0
  349. package/dist/plugins/agents/pi-native/provider-resolver.d.ts.map +1 -1
  350. package/dist/plugins/agents/pi-native/provider-resolver.js +9 -1
  351. package/dist/plugins/agents/pi-native/provider-resolver.js.map +1 -1
  352. package/dist/plugins/agents/pi-native/tool-bridge.js +1 -1
  353. package/dist/plugins/agents/pi-native/tool-bridge.js.map +1 -1
  354. package/dist/plugins/agents/pi-native/tools.js +4 -4
  355. package/dist/plugins/agents/pi-native/tools.js.map +1 -1
  356. package/dist/plugins/messengers/dingtalk/dingtalk-adapter.d.ts +1 -1
  357. package/dist/plugins/messengers/dingtalk/dingtalk-adapter.js +2 -2
  358. package/dist/plugins/messengers/dingtalk/dingtalk-adapter.js.map +1 -1
  359. package/dist/plugins/messengers/email/email-adapter.js +15 -15
  360. package/dist/plugins/messengers/email/email-adapter.js.map +1 -1
  361. package/dist/plugins/messengers/telegram/media-download.d.ts +1 -1
  362. package/dist/plugins/messengers/telegram/media-download.js +4 -4
  363. package/dist/plugins/messengers/telegram/media-download.js.map +1 -1
  364. package/dist/plugins/messengers/telegram/telegram-adapter.d.ts +1 -1
  365. package/dist/plugins/messengers/telegram/telegram-adapter.js +3 -3
  366. package/dist/plugins/messengers/telegram/telegram-adapter.js.map +1 -1
  367. package/dist/plugins/messengers/wechat/context-store.js +1 -1
  368. package/dist/plugins/messengers/wechat/context-store.js.map +1 -1
  369. package/dist/plugins/messengers/wechat/ilink-adapter.js +1 -1
  370. package/dist/plugins/messengers/wechat/ilink-adapter.js.map +1 -1
  371. package/dist/plugins/messengers/wechat/ilink-client.js +1 -1
  372. package/dist/plugins/messengers/wechat/ilink-client.js.map +1 -1
  373. package/dist/plugins/messengers/wechat/media-download.js +1 -1
  374. package/dist/plugins/messengers/wechat/media-download.js.map +1 -1
  375. package/dist/scripts/migrate-gcj02-to-wgs84.js +1 -1
  376. package/dist/scripts/migrate-gcj02-to-wgs84.js.map +1 -1
  377. package/dist/web/public/assets/a2a-CTsDMefo.js +7 -0
  378. package/dist/web/public/assets/a2a-CTsDMefo.js.map +1 -0
  379. package/dist/web/public/assets/{activity-BnlFGipw.js → activity-ul8Os7Pz.js} +2 -2
  380. package/dist/web/public/assets/{activity-BnlFGipw.js.map → activity-ul8Os7Pz.js.map} +1 -1
  381. package/dist/web/public/assets/{admins-CH84Rw1d.js → admins-ByMAuquy.js} +3 -3
  382. package/dist/web/public/assets/{admins-CH84Rw1d.js.map → admins-ByMAuquy.js.map} +1 -1
  383. package/dist/web/public/assets/agents-Ds1zyxBj.js +2 -0
  384. package/dist/web/public/assets/agents-Ds1zyxBj.js.map +1 -0
  385. package/dist/web/public/assets/{approvals-DnzjbDR6.js → approvals-DOWlWI7Z.js} +3 -3
  386. package/dist/web/public/assets/{approvals-DnzjbDR6.js.map → approvals-DOWlWI7Z.js.map} +1 -1
  387. package/dist/web/public/assets/{arrow-down-DxlRHrs8.js → arrow-down-7i0xwCI2.js} +2 -2
  388. package/dist/web/public/assets/{arrow-down-DxlRHrs8.js.map → arrow-down-7i0xwCI2.js.map} +1 -1
  389. package/dist/web/public/assets/arrow-right-A889Wof8.js +7 -0
  390. package/dist/web/public/assets/arrow-right-A889Wof8.js.map +1 -0
  391. package/dist/web/public/assets/{arrow-up-CAiQ2jy-.js → arrow-up-Dm0U4-6U.js} +2 -2
  392. package/dist/web/public/assets/{arrow-up-CAiQ2jy-.js.map → arrow-up-Dm0U4-6U.js.map} +1 -1
  393. package/dist/web/public/assets/{asks-DyUQopay.js → asks-DGuBsrJ7.js} +3 -3
  394. package/dist/web/public/assets/{asks-DyUQopay.js.map → asks-DGuBsrJ7.js.map} +1 -1
  395. package/dist/web/public/assets/{audit-BVHTMS82.js → audit-BRXsplJ2.js} +2 -2
  396. package/dist/web/public/assets/{audit-BVHTMS82.js.map → audit-BRXsplJ2.js.map} +1 -1
  397. package/dist/web/public/assets/{bell-D7iS7ctN.js → bell-B-UdeJsp.js} +2 -2
  398. package/dist/web/public/assets/{bell-D7iS7ctN.js.map → bell-B-UdeJsp.js.map} +1 -1
  399. package/dist/web/public/assets/bgjobs-CcRiffyJ.js +2 -0
  400. package/dist/web/public/assets/bgjobs-CcRiffyJ.js.map +1 -0
  401. package/dist/web/public/assets/book-open-CSCq5cjL.js +7 -0
  402. package/dist/web/public/assets/book-open-CSCq5cjL.js.map +1 -0
  403. package/dist/web/public/assets/{brain-CCF25Egu.js → brain-Dl4DF5kX.js} +2 -2
  404. package/dist/web/public/assets/{brain-CCF25Egu.js.map → brain-Dl4DF5kX.js.map} +1 -1
  405. package/dist/web/public/assets/{briefcase-BMLMD8nM.js → briefcase-CeKUkFSq.js} +2 -2
  406. package/dist/web/public/assets/{briefcase-BMLMD8nM.js.map → briefcase-CeKUkFSq.js.map} +1 -1
  407. package/dist/web/public/assets/chat-rLJMdJBk.js +12 -0
  408. package/dist/web/public/assets/chat-rLJMdJBk.js.map +1 -0
  409. package/dist/web/public/assets/{chevron-left-BDO3vw8G.js → chevron-left-01fAFVpo.js} +2 -2
  410. package/dist/web/public/assets/{chevron-left-BDO3vw8G.js.map → chevron-left-01fAFVpo.js.map} +1 -1
  411. package/dist/web/public/assets/{chevron-right-5ZUC2opg.js → chevron-right-CFRb-SM_.js} +3 -3
  412. package/dist/web/public/assets/{chevron-right-5ZUC2opg.js.map → chevron-right-CFRb-SM_.js.map} +1 -1
  413. package/dist/web/public/assets/{circle-check-big-DHAHqUlS.js → circle-check-big-DBg2BD6o.js} +2 -2
  414. package/dist/web/public/assets/{circle-check-big-DHAHqUlS.js.map → circle-check-big-DBg2BD6o.js.map} +1 -1
  415. package/dist/web/public/assets/{circle-x-7VaoZ7dY.js → circle-x-CqFMzO-x.js} +2 -2
  416. package/dist/web/public/assets/{circle-x-7VaoZ7dY.js.map → circle-x-CqFMzO-x.js.map} +1 -1
  417. package/dist/web/public/assets/clipboard-list-lnqdk2_J.js +7 -0
  418. package/dist/web/public/assets/clipboard-list-lnqdk2_J.js.map +1 -0
  419. package/dist/web/public/assets/{clock-ZPVXnd6V.js → clock-4hd1joQe.js} +3 -3
  420. package/dist/web/public/assets/{clock-ZPVXnd6V.js.map → clock-4hd1joQe.js.map} +1 -1
  421. package/dist/web/public/assets/confirm-dialog-BDb0NLny.js +2 -0
  422. package/dist/web/public/assets/{confirm-dialog-CgpJL9oN.js.map → confirm-dialog-BDb0NLny.js.map} +1 -1
  423. package/dist/web/public/assets/{copy-BaZl52tH.js → copy-CD4A7VD8.js} +3 -3
  424. package/dist/web/public/assets/{copy-BaZl52tH.js.map → copy-CD4A7VD8.js.map} +1 -1
  425. package/dist/web/public/assets/dashboard-CG3WiG7h.js +2 -0
  426. package/dist/web/public/assets/dashboard-CG3WiG7h.js.map +1 -0
  427. package/dist/web/public/assets/{data-table-BLYG79TX.js → data-table-BkUshOZz.js} +2 -2
  428. package/dist/web/public/assets/{data-table-BLYG79TX.js.map → data-table-BkUshOZz.js.map} +1 -1
  429. package/dist/web/public/assets/database-lQzk64rV.js +7 -0
  430. package/dist/web/public/assets/database-lQzk64rV.js.map +1 -0
  431. package/dist/web/public/assets/distill-CPurVW3v.js +7 -0
  432. package/dist/web/public/assets/distill-CPurVW3v.js.map +1 -0
  433. package/dist/web/public/assets/{download-bzCepctg.js → download-CVZnHcwj.js} +2 -2
  434. package/dist/web/public/assets/{download-bzCepctg.js.map → download-CVZnHcwj.js.map} +1 -1
  435. package/dist/web/public/assets/dropdown-menu-BNH5SrVb.js +7 -0
  436. package/dist/web/public/assets/dropdown-menu-BNH5SrVb.js.map +1 -0
  437. package/dist/web/public/assets/email-YlI4MWLp.js +7 -0
  438. package/dist/web/public/assets/email-YlI4MWLp.js.map +1 -0
  439. package/dist/web/public/assets/{empty-state-96qpPTNg.js → empty-state-CuiqdZiB.js} +2 -2
  440. package/dist/web/public/assets/{empty-state-96qpPTNg.js.map → empty-state-CuiqdZiB.js.map} +1 -1
  441. package/dist/web/public/assets/{external-link-J4nIlCem.js → external-link-1WPpVvdu.js} +2 -2
  442. package/dist/web/public/assets/{external-link-J4nIlCem.js.map → external-link-1WPpVvdu.js.map} +1 -1
  443. package/dist/web/public/assets/{eye-BvsBLK42.js → eye-BfPyNFzk.js} +2 -2
  444. package/dist/web/public/assets/{eye-BvsBLK42.js.map → eye-BfPyNFzk.js.map} +1 -1
  445. package/dist/web/public/assets/{facts-DMucDXYd.js → facts-xT_24pH8.js} +2 -2
  446. package/dist/web/public/assets/{facts-DMucDXYd.js.map → facts-xT_24pH8.js.map} +1 -1
  447. package/dist/web/public/assets/file-text-BxfdLM0-.js +7 -0
  448. package/dist/web/public/assets/file-text-BxfdLM0-.js.map +1 -0
  449. package/dist/web/public/assets/{goals-B9ETHgL0.js → goals-C8ZQfbhj.js} +3 -3
  450. package/dist/web/public/assets/{goals-B9ETHgL0.js.map → goals-C8ZQfbhj.js.map} +1 -1
  451. package/dist/web/public/assets/health-A2StNEfn.js +2 -0
  452. package/dist/web/public/assets/{health-DLzZ7KHc.js.map → health-A2StNEfn.js.map} +1 -1
  453. package/dist/web/public/assets/{heart-pulse-CVEeD2sz.js → heart-pulse-DXlE9oic.js} +2 -2
  454. package/dist/web/public/assets/{heart-pulse-CVEeD2sz.js.map → heart-pulse-DXlE9oic.js.map} +1 -1
  455. package/dist/web/public/assets/{heartbeat-B1BEBHge.js → heartbeat-ClO5gJrj.js} +3 -3
  456. package/dist/web/public/assets/{heartbeat-B1BEBHge.js.map → heartbeat-ClO5gJrj.js.map} +1 -1
  457. package/dist/web/public/assets/hot-bfTA-V_z.js +7 -0
  458. package/dist/web/public/assets/{hot-Yc7iad0D.js.map → hot-bfTA-V_z.js.map} +1 -1
  459. package/dist/web/public/assets/index-Bi2qWb-u.css +1 -0
  460. package/dist/web/public/assets/index-DCfdN5R7.js +244 -0
  461. package/dist/web/public/assets/index-DCfdN5R7.js.map +1 -0
  462. package/dist/web/public/assets/{injection-Ca-9gbo0.js → injection-omvCR6-p.js} +2 -2
  463. package/dist/web/public/assets/{injection-Ca-9gbo0.js.map → injection-omvCR6-p.js.map} +1 -1
  464. package/dist/web/public/assets/{installed-Zz34apdi.js → installed-DL6r3ktm.js} +4 -9
  465. package/dist/web/public/assets/installed-DL6r3ktm.js.map +1 -0
  466. package/dist/web/public/assets/jobs-Biy5lYd4.js +2 -0
  467. package/dist/web/public/assets/jobs-Biy5lYd4.js.map +1 -0
  468. package/dist/web/public/assets/layout-BLm6NJ3V.js +2 -0
  469. package/dist/web/public/assets/layout-BLm6NJ3V.js.map +1 -0
  470. package/dist/web/public/assets/layout-BTKafRVZ.js +2 -0
  471. package/dist/web/public/assets/layout-BTKafRVZ.js.map +1 -0
  472. package/dist/web/public/assets/layout-Bm-2s2fp.js +2 -0
  473. package/dist/web/public/assets/layout-Bm-2s2fp.js.map +1 -0
  474. package/dist/web/public/assets/layout-DsZ8eR4i.js +2 -0
  475. package/dist/web/public/assets/layout-DsZ8eR4i.js.map +1 -0
  476. package/dist/web/public/assets/{layout-CtDc2i7w.js → layout-sxvovjEH.js} +2 -2
  477. package/dist/web/public/assets/{layout-CtDc2i7w.js.map → layout-sxvovjEH.js.map} +1 -1
  478. package/dist/web/public/assets/llm-JjZDbBvJ.js +37 -0
  479. package/dist/web/public/assets/llm-JjZDbBvJ.js.map +1 -0
  480. package/dist/web/public/assets/loader-circle-DDdmcH0k.js +7 -0
  481. package/dist/web/public/assets/{loader-circle-D8L1w9c1.js.map → loader-circle-DDdmcH0k.js.map} +1 -1
  482. package/dist/web/public/assets/{map-pin--GMunU9n.js → map-pin-C_jAxukI.js} +2 -2
  483. package/dist/web/public/assets/{map-pin--GMunU9n.js.map → map-pin-C_jAxukI.js.map} +1 -1
  484. package/dist/web/public/assets/{mcp-DhnXhO9B.js → mcp-vKajK1F8.js} +3 -3
  485. package/dist/web/public/assets/{mcp-DhnXhO9B.js.map → mcp-vKajK1F8.js.map} +1 -1
  486. package/dist/web/public/assets/memos-DAt4k3DO.js +7 -0
  487. package/dist/web/public/assets/memos-DAt4k3DO.js.map +1 -0
  488. package/dist/web/public/assets/messengers-GYVTFlAj.js +2 -0
  489. package/dist/web/public/assets/messengers-GYVTFlAj.js.map +1 -0
  490. package/dist/web/public/assets/{mobile-CUZ359rQ.js → mobile-VUyTo40E.js} +3 -3
  491. package/dist/web/public/assets/{mobile-CUZ359rQ.js.map → mobile-VUyTo40E.js.map} +1 -1
  492. package/dist/web/public/assets/{network-BBdRdrH_.js → network-BUeWK3bs.js} +2 -2
  493. package/dist/web/public/assets/{network-BBdRdrH_.js.map → network-BUeWK3bs.js.map} +1 -1
  494. package/dist/web/public/assets/outbox-CEE0rwN3.js +2 -0
  495. package/dist/web/public/assets/outbox-CEE0rwN3.js.map +1 -0
  496. package/dist/web/public/assets/overview-BSOZ5gTD.js +12 -0
  497. package/dist/web/public/assets/overview-BSOZ5gTD.js.map +1 -0
  498. package/dist/web/public/assets/overview-COop5K2Y.js +12 -0
  499. package/dist/web/public/assets/overview-COop5K2Y.js.map +1 -0
  500. package/dist/web/public/assets/overview-DeH5ud6d.js +2 -0
  501. package/dist/web/public/assets/overview-DeH5ud6d.js.map +1 -0
  502. package/dist/web/public/assets/{pagination-DcsgDXXM.js → pagination-BBicLzXP.js} +3 -3
  503. package/dist/web/public/assets/{pagination-DcsgDXXM.js.map → pagination-BBicLzXP.js.map} +1 -1
  504. package/dist/web/public/assets/persona-CElXQZ4p.js +2 -0
  505. package/dist/web/public/assets/{persona-ig2ac4mY.js.map → persona-CElXQZ4p.js.map} +1 -1
  506. package/dist/web/public/assets/{plans-Bzbk8eUr.js → plans-Bo5LlLeH.js} +3 -8
  507. package/dist/web/public/assets/plans-Bo5LlLeH.js.map +1 -0
  508. package/dist/web/public/assets/{play-Di1jqulh.js → play-DX5wp4WH.js} +2 -2
  509. package/dist/web/public/assets/{play-Di1jqulh.js.map → play-DX5wp4WH.js.map} +1 -1
  510. package/dist/web/public/assets/{plus-C2zyJ1mF.js → plus-DH4J_YhN.js} +2 -2
  511. package/dist/web/public/assets/{plus-C2zyJ1mF.js.map → plus-DH4J_YhN.js.map} +1 -1
  512. package/dist/web/public/assets/policy-BrgOuDt_.js +2 -0
  513. package/dist/web/public/assets/policy-BrgOuDt_.js.map +1 -0
  514. package/dist/web/public/assets/{qr-code-C-ACsKv_.js → qr-code-YrEuhMPC.js} +2 -2
  515. package/dist/web/public/assets/{qr-code-C-ACsKv_.js.map → qr-code-YrEuhMPC.js.map} +1 -1
  516. package/dist/web/public/assets/{refresh-ccw-7HdadG5V.js → refresh-ccw-DlAd-eTQ.js} +2 -2
  517. package/dist/web/public/assets/{refresh-ccw-7HdadG5V.js.map → refresh-ccw-DlAd-eTQ.js.map} +1 -1
  518. package/dist/web/public/assets/{reminders-BDeiVYTC.js → reminders-DBEE0zXG.js} +3 -3
  519. package/dist/web/public/assets/{reminders-BDeiVYTC.js.map → reminders-DBEE0zXG.js.map} +1 -1
  520. package/dist/web/public/assets/{save-BYFmz9gD.js → save-BDOtZrfp.js} +2 -2
  521. package/dist/web/public/assets/{save-BYFmz9gD.js.map → save-BDOtZrfp.js.map} +1 -1
  522. package/dist/web/public/assets/schedules-DAyhVI8-.js +2 -0
  523. package/dist/web/public/assets/schedules-DAyhVI8-.js.map +1 -0
  524. package/dist/web/public/assets/search-55mtgHrB.js +17 -0
  525. package/dist/web/public/assets/search-55mtgHrB.js.map +1 -0
  526. package/dist/web/public/assets/{search-DxkvV-8p.js → search-CAICU3aU.js} +2 -2
  527. package/dist/web/public/assets/{search-DxkvV-8p.js.map → search-CAICU3aU.js.map} +1 -1
  528. package/dist/web/public/assets/security-CbP4QgVp.js +2 -0
  529. package/dist/web/public/assets/security-CbP4QgVp.js.map +1 -0
  530. package/dist/web/public/assets/server-Dg4e8pvm.js +7 -0
  531. package/dist/web/public/assets/server-Dg4e8pvm.js.map +1 -0
  532. package/dist/web/public/assets/service-gWZa3sup.js +7 -0
  533. package/dist/web/public/assets/service-gWZa3sup.js.map +1 -0
  534. package/dist/web/public/assets/{shield-alert-DXGk9Rak.js → shield-alert-DOKK9EnJ.js} +2 -2
  535. package/dist/web/public/assets/{shield-alert-DXGk9Rak.js.map → shield-alert-DOKK9EnJ.js.map} +1 -1
  536. package/dist/web/public/assets/sparkles-G0QIs9nP.js +7 -0
  537. package/dist/web/public/assets/sparkles-G0QIs9nP.js.map +1 -0
  538. package/dist/web/public/assets/start-D-abhl3q.js +2 -0
  539. package/dist/web/public/assets/start-D-abhl3q.js.map +1 -0
  540. package/dist/web/public/assets/{status-badge-D0nbFSom.js → status-badge-CyLdpsXq.js} +2 -2
  541. package/dist/web/public/assets/{status-badge-D0nbFSom.js.map → status-badge-CyLdpsXq.js.map} +1 -1
  542. package/dist/web/public/assets/{subtasks-DFiAXvDp.js → subtasks-BnEjSGUR.js} +3 -3
  543. package/dist/web/public/assets/{subtasks-DFiAXvDp.js.map → subtasks-BnEjSGUR.js.map} +1 -1
  544. package/dist/web/public/assets/{table-_WsrnZ_T.js → table-sCMZBe_Z.js} +2 -2
  545. package/dist/web/public/assets/{table-_WsrnZ_T.js.map → table-sCMZBe_Z.js.map} +1 -1
  546. package/dist/web/public/assets/terminal-_pXeEjXG.js +7 -0
  547. package/dist/web/public/assets/terminal-_pXeEjXG.js.map +1 -0
  548. package/dist/web/public/assets/{topn-C2PHE4tX.js → topn-D1B-gS1M.js} +3 -3
  549. package/dist/web/public/assets/{topn-C2PHE4tX.js.map → topn-D1B-gS1M.js.map} +1 -1
  550. package/dist/web/public/assets/{trash-2-1Km439fW.js → trash-2-D2x2UPuZ.js} +2 -2
  551. package/dist/web/public/assets/{trash-2-1Km439fW.js.map → trash-2-D2x2UPuZ.js.map} +1 -1
  552. package/dist/web/public/assets/use-a2a-C98e2Via.js +2 -0
  553. package/dist/web/public/assets/use-a2a-C98e2Via.js.map +1 -0
  554. package/dist/web/public/assets/{use-agim-skills-COSqZrdH.js → use-agim-skills-BbuJP3NT.js} +2 -2
  555. package/dist/web/public/assets/{use-agim-skills-COSqZrdH.js.map → use-agim-skills-BbuJP3NT.js.map} +1 -1
  556. package/dist/web/public/assets/use-background-tasks-CwFmOokw.js +2 -0
  557. package/dist/web/public/assets/{use-background-tasks-wCL7jn68.js.map → use-background-tasks-CwFmOokw.js.map} +1 -1
  558. package/dist/web/public/assets/use-jobs-BJjeJ5lh.js +2 -0
  559. package/dist/web/public/assets/use-jobs-BJjeJ5lh.js.map +1 -0
  560. package/dist/web/public/assets/use-memory-CXDwKCco.js +2 -0
  561. package/dist/web/public/assets/{use-memory-B9oRyQC8.js.map → use-memory-CXDwKCco.js.map} +1 -1
  562. package/dist/web/public/assets/use-observability-CY5ZUPrC.js +2 -0
  563. package/dist/web/public/assets/{use-observability-DGkN80qa.js.map → use-observability-CY5ZUPrC.js.map} +1 -1
  564. package/dist/web/public/assets/use-outbox-DT_XWB_7.js +7 -0
  565. package/dist/web/public/assets/use-outbox-DT_XWB_7.js.map +1 -0
  566. package/dist/web/public/assets/use-schedules-D4W8fMwo.js +7 -0
  567. package/dist/web/public/assets/use-schedules-D4W8fMwo.js.map +1 -0
  568. package/dist/web/public/assets/use-settings-DGIjmUX0.js +2 -0
  569. package/dist/web/public/assets/use-settings-DGIjmUX0.js.map +1 -0
  570. package/dist/web/public/assets/use-skills-D2bMM580.js +7 -0
  571. package/dist/web/public/assets/use-skills-D2bMM580.js.map +1 -0
  572. package/dist/web/public/assets/use-vector-BYOFwjU0.js +2 -0
  573. package/dist/web/public/assets/use-vector-BYOFwjU0.js.map +1 -0
  574. package/dist/web/public/assets/use-workspace-CuytyHwb.js +2 -0
  575. package/dist/web/public/assets/{use-workspace-BDXP5XO1.js.map → use-workspace-CuytyHwb.js.map} +1 -1
  576. package/dist/web/public/assets/vector-CL8ezpSR.js +2 -0
  577. package/dist/web/public/assets/vector-CL8ezpSR.js.map +1 -0
  578. package/dist/web/public/assets/viewer-CD0iEfPU.js +7 -0
  579. package/dist/web/public/assets/viewer-CD0iEfPU.js.map +1 -0
  580. package/dist/web/public/assets/workspace-BA1_hso3.js +17 -0
  581. package/dist/web/public/assets/workspace-BA1_hso3.js.map +1 -0
  582. package/dist/web/public/assets/workspaces-DyGLJUgB.js +7 -0
  583. package/dist/web/public/assets/workspaces-DyGLJUgB.js.map +1 -0
  584. package/dist/web/public/index.html +2 -2
  585. package/dist/web/public/loc.html +1 -1
  586. package/dist/web/public/login.html +2 -2
  587. package/dist/web/server.d.ts +2 -5
  588. package/dist/web/server.d.ts.map +1 -1
  589. package/dist/web/server.js +256 -122
  590. package/dist/web/server.js.map +1 -1
  591. package/package.json +2 -3
  592. package/dist/core/llm/imhub-dispatcher.d.ts.map +0 -1
  593. package/dist/core/llm/imhub-dispatcher.js.map +0 -1
  594. package/dist/web/public/assets/a2a-CZxwvgvh.js +0 -7
  595. package/dist/web/public/assets/a2a-CZxwvgvh.js.map +0 -1
  596. package/dist/web/public/assets/agents-CFB4Uj6b.js +0 -7
  597. package/dist/web/public/assets/agents-CFB4Uj6b.js.map +0 -1
  598. package/dist/web/public/assets/bgjobs-BYCQhd_1.js +0 -7
  599. package/dist/web/public/assets/bgjobs-BYCQhd_1.js.map +0 -1
  600. package/dist/web/public/assets/chat-DPkKy5y_.js +0 -17
  601. package/dist/web/public/assets/chat-DPkKy5y_.js.map +0 -1
  602. package/dist/web/public/assets/circle-check-COhM5JsK.js +0 -7
  603. package/dist/web/public/assets/circle-check-COhM5JsK.js.map +0 -1
  604. package/dist/web/public/assets/confirm-dialog-CgpJL9oN.js +0 -2
  605. package/dist/web/public/assets/distill-D9p8O8Jf.js +0 -7
  606. package/dist/web/public/assets/distill-D9p8O8Jf.js.map +0 -1
  607. package/dist/web/public/assets/email-Douv-rZ5.js +0 -7
  608. package/dist/web/public/assets/email-Douv-rZ5.js.map +0 -1
  609. package/dist/web/public/assets/health-DLzZ7KHc.js +0 -2
  610. package/dist/web/public/assets/hot-Yc7iad0D.js +0 -12
  611. package/dist/web/public/assets/index-DY2Zglku.js +0 -209
  612. package/dist/web/public/assets/index-DY2Zglku.js.map +0 -1
  613. package/dist/web/public/assets/index-DknVjPYB.css +0 -1
  614. package/dist/web/public/assets/installed-Zz34apdi.js.map +0 -1
  615. package/dist/web/public/assets/jobs-CtVRpl0r.js +0 -2
  616. package/dist/web/public/assets/jobs-CtVRpl0r.js.map +0 -1
  617. package/dist/web/public/assets/layout-BTCLgkgN.js +0 -2
  618. package/dist/web/public/assets/layout-BTCLgkgN.js.map +0 -1
  619. package/dist/web/public/assets/layout-Cxch59sI.js +0 -2
  620. package/dist/web/public/assets/layout-Cxch59sI.js.map +0 -1
  621. package/dist/web/public/assets/layout-DnANw2Q2.js +0 -2
  622. package/dist/web/public/assets/layout-DnANw2Q2.js.map +0 -1
  623. package/dist/web/public/assets/layout-yIZG87fq.js +0 -2
  624. package/dist/web/public/assets/layout-yIZG87fq.js.map +0 -1
  625. package/dist/web/public/assets/llm-CMMa85Ig.js +0 -27
  626. package/dist/web/public/assets/llm-CMMa85Ig.js.map +0 -1
  627. package/dist/web/public/assets/loader-circle-D8L1w9c1.js +0 -7
  628. package/dist/web/public/assets/memos-DQZc7llR.js +0 -12
  629. package/dist/web/public/assets/memos-DQZc7llR.js.map +0 -1
  630. package/dist/web/public/assets/messengers-DwSmauLs.js +0 -2
  631. package/dist/web/public/assets/messengers-DwSmauLs.js.map +0 -1
  632. package/dist/web/public/assets/outbox-CmN0U35l.js +0 -7
  633. package/dist/web/public/assets/outbox-CmN0U35l.js.map +0 -1
  634. package/dist/web/public/assets/persona-ig2ac4mY.js +0 -2
  635. package/dist/web/public/assets/plans-Bzbk8eUr.js.map +0 -1
  636. package/dist/web/public/assets/policy-yD1c2Pcn.js +0 -2
  637. package/dist/web/public/assets/policy-yD1c2Pcn.js.map +0 -1
  638. package/dist/web/public/assets/schedules-BddzBrxI.js +0 -7
  639. package/dist/web/public/assets/schedules-BddzBrxI.js.map +0 -1
  640. package/dist/web/public/assets/search-B8PlbtLg.js +0 -17
  641. package/dist/web/public/assets/search-B8PlbtLg.js.map +0 -1
  642. package/dist/web/public/assets/security-DpOGp3nS.js +0 -2
  643. package/dist/web/public/assets/security-DpOGp3nS.js.map +0 -1
  644. package/dist/web/public/assets/service-BsY8CaNG.js +0 -7
  645. package/dist/web/public/assets/service-BsY8CaNG.js.map +0 -1
  646. package/dist/web/public/assets/use-background-tasks-wCL7jn68.js +0 -2
  647. package/dist/web/public/assets/use-memory-B9oRyQC8.js +0 -2
  648. package/dist/web/public/assets/use-observability-DGkN80qa.js +0 -2
  649. package/dist/web/public/assets/use-settings-Co-iafXD.js +0 -2
  650. package/dist/web/public/assets/use-settings-Co-iafXD.js.map +0 -1
  651. package/dist/web/public/assets/use-workspace-BDXP5XO1.js +0 -2
  652. package/dist/web/public/assets/vector-BfIEx8xX.js +0 -2
  653. package/dist/web/public/assets/vector-BfIEx8xX.js.map +0 -1
  654. package/dist/web/public/assets/viewer-BPMZkT05.js +0 -12
  655. package/dist/web/public/assets/viewer-BPMZkT05.js.map +0 -1
  656. package/dist/web/public/assets/workspace-BbCchiHE.js +0 -17
  657. package/dist/web/public/assets/workspace-BbCchiHE.js.map +0 -1
  658. package/dist/web/public/assets/workspaces-5HE7pjdA.js +0 -7
  659. package/dist/web/public/assets/workspaces-5HE7pjdA.js.map +0 -1
package/dist/cli.js CHANGED
@@ -1,16 +1,9 @@
1
1
  #!/usr/bin/env node
2
- // Agim (阿吉姆) CLI — rebranded from im-hub-pro at v1.0.0.
2
+ // Agim (阿吉姆) CLI.
3
3
  //
4
- // Brand: "Agim" (English) / "阿吉姆" (Chinese). Binary is `agim`; the
5
- // legacy `im-hub-pro` bin name is kept as an alias for systemd units +
6
- // shell aliases users have already wired up.
7
- //
8
- // On-disk paths (~/.im-hub/, ~/.im-hub-workspaces/), env vars (IMHUB_*),
9
- // HTTP headers (X-IM-Hub-Token), and the systemd unit `im-hub.service`
10
- // keep their legacy "im-hub" identifier for drop-in compatibility with
11
- // existing installations. Do not "fix" them — millions of bytes of user
12
- // data + every existing deployment's systemd config depend on those
13
- // names being stable. The rename is a brand surface only.
4
+ // Brand: "Agim" (English) / "阿吉姆" (Chinese). Public runtime surfaces use
5
+ // the `agim` binary, `~/.agim/` state, `~/.agim-workspaces/` workspaces,
6
+ // `AGIM_*` env vars, `X-Agim-Token` headers, and `agim.service`.
14
7
  import { program } from 'commander';
15
8
  import { dirname, join } from 'node:path';
16
9
  import { fileURLToPath } from 'node:url';
@@ -21,7 +14,6 @@ import { getDefaultAgent } from './core/live-config.js';
21
14
  import { sessionManager } from './core/session.js';
22
15
  import { runOnThread } from './core/thread-queue.js';
23
16
  import { parseMessage, routeMessage } from './core/router.js';
24
- import { crossSpawn } from './utils/cross-platform.js';
25
17
  import { generateTraceId, createLogger, sanitizeUserText, logger as rootLogger } from './core/logger.js';
26
18
  import { validateConfig } from './core/config-schema.js';
27
19
  import { workspaceRegistry } from './core/workspace.js';
@@ -35,14 +27,10 @@ import { createReminder } from './core/reminders.js';
35
27
  import { setReminderConfirmNotifier } from './core/reminder-rpc.js';
36
28
  import { sink } from './core/message-sink.js';
37
29
  import { createInlineJob, markJobRunning, markJobCompleted, markJobFailed, linkJobOutbox, updateJobAgent, } from './core/job-board.js';
38
- import { checkMessengerConfig, checkAgentAvailability, runMessengerOnboarding, formatAgentInstallHint, formatMessengerStartError, loadConfig as loadOnboardingConfig, saveConfig as saveOnboardingConfig, } from './core/onboarding.js';
30
+ import { checkMessengerConfig, checkAgentAvailability, runMessengerOnboarding, formatMessengerStartError, loadConfig as loadOnboardingConfig, saveConfig as saveOnboardingConfig, } from './core/onboarding.js';
39
31
  import { startWebServer } from './web/server.js';
40
32
  import { startACPServer } from './core/acp-server.js';
41
33
  import { AGIM_HOME } from './core/agim-paths.js';
42
- // Helper to format agent install hint for missing agents
43
- function _formatMissingAgentHint(missing) {
44
- return formatAgentInstallHint(missing);
45
- }
46
34
  const CONFIG_DIR = AGIM_HOME;
47
35
  const CONFIG_FILE = join(CONFIG_DIR, 'config.json');
48
36
  const PACKAGE_JSON = join(dirname(fileURLToPath(import.meta.url)), '..', 'package.json');
@@ -67,10 +55,30 @@ function readPackageVersion() {
67
55
  program
68
56
  .name('agim')
69
57
  .description('Universal messenger-to-agent bridge')
70
- .version(readPackageVersion());
58
+ .version(readPackageVersion())
59
+ .addHelpText('afterAll', `
60
+ Common path:
61
+ agim go First run: choose/configure one agent and start Web
62
+ agim web Find the Web console URL, service state, and token hint
63
+ agim web --open Open the Web console in your default browser
64
+ agim web --start --open
65
+ Start the background service and open Web
66
+ agim config Continue setup: Agent, IM, Web port, admins, SMTP
67
+ agim doctor Explain local readiness problems
68
+
69
+ Service:
70
+ agim start --bg Run Agim in the background
71
+ agim status Show runtime state
72
+ agim restart Restart after config changes
73
+ agim stop Stop the service
74
+
75
+ Advanced:
76
+ agim setup llm|mcp
77
+ agim diag llm|mcp
78
+ `);
71
79
  program
72
80
  .command('start')
73
- .description('Start the Agim server (foreground by default; --bg for detached daemon)')
81
+ .description('Start the Agim runtime; use --bg for the normal background service')
74
82
  .option('--bg, --background', 'Start as a detached background daemon (writes pid file + log to ~/.agim/)')
75
83
  .action(async (opts) => {
76
84
  // v1.2.85 — load ~/.agim/env into process.env BEFORE any branch
@@ -197,7 +205,7 @@ program
197
205
  const inSystemd = typeof process.env.INVOCATION_ID === 'string' && process.env.INVOCATION_ID.length > 0;
198
206
  if (!inSystemd) {
199
207
  const { existsSync: _exists2 } = await import('node:fs');
200
- const hasUnit = _exists2('/etc/systemd/system/agim.service') || _exists2('/etc/systemd/system/im-hub.service');
208
+ const hasUnit = _exists2('/etc/systemd/system/agim.service');
201
209
  if (hasUnit) {
202
210
  console.warn();
203
211
  console.warn('⚠️ agim is starting OUTSIDE systemd, but a systemd unit exists on this host.');
@@ -268,8 +276,8 @@ program
268
276
  await sessionManager.start();
269
277
  // Start approval-bus before any agent can spawn — failure here is
270
278
  // non-fatal: claude-code falls back to legacy --permission-mode dontAsk.
271
- if (process.env.IMHUB_APPROVAL_DISABLED === '1') {
272
- console.log('🛑 Approval bus disabled via IMHUB_APPROVAL_DISABLED=1');
279
+ if (process.env.AGIM_APPROVAL_DISABLED === '1') {
280
+ console.log('🛑 Approval bus disabled via AGIM_APPROVAL_DISABLED=1');
273
281
  }
274
282
  else {
275
283
  try {
@@ -287,7 +295,7 @@ program
287
295
  // `env: process.env`) can connect without per-spawn config.
288
296
  // claude-code and opencode stdio still set this per-spawn via
289
297
  // extraEnv — that override wins inside their spawn scope.
290
- process.env.IMHUB_APPROVAL_SOCK = sockPath;
298
+ process.env.AGIM_APPROVAL_SOCK = sockPath;
291
299
  }
292
300
  catch (err) {
293
301
  const msg = err instanceof Error ? err.message : String(err);
@@ -358,20 +366,6 @@ program
358
366
  console.warn(`⚠️ ${cliT(bootLang, 'start.workspace_boot_failed', { message: msg })}`);
359
367
  console.warn(` ${cliT(bootLang, 'start.workspace_fallback')}`);
360
368
  }
361
- // Register the imhub MCP server in opencode's global config so opencode
362
- // (stdio mode) can see the reminder tools. Idempotent; quietly skips if
363
- // opencode isn't installed / no config dir / write fails. HTTP mode
364
- // can't use this — see ensure-mcp-config.ts comments.
365
- try {
366
- const { ensureOpencodeMcpRegistered } = await import('./plugins/agents/opencode/ensure-mcp-config.js');
367
- const wrote = await ensureOpencodeMcpRegistered();
368
- if (wrote)
369
- console.log('🔧 Registered imhub MCP in opencode global config');
370
- }
371
- catch (err) {
372
- const msg = err instanceof Error ? err.message : String(err);
373
- console.warn(`⚠️ opencode MCP registration skipped: ${msg}`);
374
- }
375
369
  // Load ACP (remote) agents from config
376
370
  if (config.acpAgents?.length) {
377
371
  await registry.loadACPAgents(config.acpAgents);
@@ -594,7 +588,7 @@ program
594
588
  }, 'failed to record known IM user; continuing');
595
589
  }
596
590
  // v1.2.66 — sender allowlist gate. When configured (env
597
- // IMHUB_ALLOWED_USERS set), unknown senders get a short refusal
591
+ // AGIM_ALLOWED_USERS set), unknown senders get a short refusal
598
592
  // and the message is dropped before reaching any agent or
599
593
  // tool. When unconfigured, this passes through unchanged
600
594
  // (default-open; boot log warns OPEN_IM_ACCESS).
@@ -623,7 +617,7 @@ program
623
617
  event: 'sender.allowlist.denied',
624
618
  platform: ctx.platform,
625
619
  userId: ctx.message.userId,
626
- }, 'message dropped — sender not on IMHUB_ALLOWED_USERS');
620
+ }, 'message dropped — sender not on AGIM_ALLOWED_USERS');
627
621
  try {
628
622
  await sink.deliver({
629
623
  platform: ctx.platform,
@@ -647,7 +641,7 @@ program
647
641
  ctx.logger.error({
648
642
  event: 'sender.allowlist.error',
649
643
  err: err instanceof Error ? err.message : String(err),
650
- }, 'sender allowlist module failed to load; cannot enforce — review IMHUB_ALLOWED_USERS');
644
+ }, 'sender allowlist module failed to load; cannot enforce — review AGIM_ALLOWED_USERS');
651
645
  }
652
646
  // Phase 3 — interrupted-job recovery reply. If the user has a
653
647
  // pending "retry / cancel" prompt outstanding on this thread AND
@@ -712,7 +706,7 @@ program
712
706
  // the user replies with one of the choice tokens (1 / a / 通过 / …),
713
707
  // we resolve the pending Promise the calling agent is awaiting.
714
708
  // BEFORE this commit, tryHandleAskReply was defined but never
715
- // called from anywhere — so an agent's mcp__imhub__ask_user call
709
+ // called from anywhere — so an agent's mcp__agim__ask_user call
716
710
  // would surface the choice card but the user's typed reply went
717
711
  // straight to the agent as a fresh prompt, leaving the ask
718
712
  // dangling until the configured timeout. Runs BEFORE the approval
@@ -909,12 +903,12 @@ program
909
903
  // started. If we started it earlier, every queued row from a prior run
910
904
  // would fail "messenger not registered" on the first tick and bounce
911
905
  // into backoff — minor but pointless. Worker is single-threaded and
912
- // ticks at IMHUB_OUTBOX_TICK_MS (default 1s).
906
+ // ticks at AGIM_OUTBOX_TICK_MS (default 1s).
913
907
  sink.startWorker();
914
908
  console.log('✅ Message-sink worker started');
915
909
  // Phase 3 — startup recovery scan. Look at jobs.db for inline rows
916
910
  // that got 'interrupted' on the previous shutdown and are still inside
917
- // the recovery window (default 10 min, env IMHUB_RECOVERY_WINDOW_MS).
911
+ // the recovery window (default 10 min, env AGIM_RECOVERY_WINDOW_MS).
918
912
  // For each, send a "回 1 重发 / 2 取消" prompt via sink — outbox will
919
913
  // hold the notification until the messenger is fully connected. Older
920
914
  // interrupted rows transition to 'abandoned' so we don't ask the user
@@ -976,7 +970,7 @@ program
976
970
  // v1.5 — long-term memory consolidator. Runs periodically (default
977
971
  // every 24h) to refresh persona_profile from accumulated facts using
978
972
  // the user's most recently active agent. No-op when
979
- // IMHUB_MEMORY_ENABLED != 1.
973
+ // AGIM_MEMORY_ENABLED != 1.
980
974
  try {
981
975
  const { startMemoryConsolidator } = await import('./core/memory-consolidate.js');
982
976
  startMemoryConsolidator();
@@ -986,7 +980,7 @@ program
986
980
  }
987
981
  // P1 — dream distillation. Background pass that batch-extracts the turns
988
982
  // buffered on the hot path when the system is idle (or past the staleness
989
- // floor). No-op when IMHUB_MEMORY_ENABLED != 1.
983
+ // floor). No-op when AGIM_MEMORY_ENABLED != 1.
990
984
  try {
991
985
  const { startMemoryDistiller } = await import('./core/memory-distiller.js');
992
986
  startMemoryDistiller();
@@ -1306,7 +1300,7 @@ async function handleMessage(ctx, defaultAgent) {
1306
1300
  // Inline-job tracking id (Phase 2). Declared at function scope so the
1307
1301
  // catch block below can mark the row 'failed' on any throw. -1 means
1308
1302
  // "not tracked": either the message didn't reach willInvokeAgent, or
1309
- // createInlineJob fell back to in-memory (DB locked / IMHUB_INLINE_JOB_TRACKING=0).
1303
+ // createInlineJob fell back to in-memory (DB locked / AGIM_INLINE_JOB_TRACKING=0).
1310
1304
  let inlineJobId = -1;
1311
1305
  try {
1312
1306
  if (messenger.sendTyping) {
@@ -1386,7 +1380,7 @@ async function handleMessage(ctx, defaultAgent) {
1386
1380
  // and the Phase 3 startup scan can offer the user a retry. Built-ins
1387
1381
  // (status/audit/router) return string immediately and never touch the
1388
1382
  // agent — no point tracking them. Inline tracking can be killed wholesale
1389
- // via env IMHUB_INLINE_JOB_TRACKING=0 (createInlineJob returns -1, every
1383
+ // via env AGIM_INLINE_JOB_TRACKING=0 (createInlineJob returns -1, every
1390
1384
  // mark*Job helper no-ops on id<=0). createInlineJob itself never throws —
1391
1385
  // if the DB is locked or disk-full we get -1 and the user path runs
1392
1386
  // unchanged on the in-memory fast path.
@@ -1417,7 +1411,7 @@ async function handleMessage(ctx, defaultAgent) {
1417
1411
  }
1418
1412
  // A2A-L1: stash on routeCtx so callAgentWithHistory can forward it
1419
1413
  // through AgentSendOpts → adapter.registerRun → RunContext. When the
1420
- // agent fires mcp__imhub__call_agent the bus then knows what
1414
+ // agent fires mcp__agim__call_agent the bus then knows what
1421
1415
  // parent_id to stamp on the callee inline-job row. User-originated
1422
1416
  // runs are call_depth=0; nested runs (A2A callees) reach this same
1423
1417
  // handler with their own ctx.inlineJobId and ctx.callDepth set.
@@ -1581,364 +1575,32 @@ async function handleMessage(ctx, defaultAgent) {
1581
1575
  }
1582
1576
  program
1583
1577
  .command('config [component]')
1584
- .description('Interactive config wizard (or `config <component>` for the per-component legacy flow)')
1578
+ .description('Unified config wizard; optional shortcuts jump to a section, e.g. `config wechat`')
1585
1579
  .action(async (component) => {
1580
+ const { pickLang } = await import('./cli-ui/lang-picker.js');
1581
+ const { runConfigWizard, sectionForConfigComponent } = await import('./cli-ui/config-wizard.js');
1582
+ const { t: cliT } = await import('./cli-ui/i18n.js');
1583
+ const lang = await pickLang();
1586
1584
  if (!component) {
1587
- // New interactive wizard (since v0.5.0). Falls through to the
1588
- // per-component switch below when an explicit `config wechat` etc.
1589
- // is passed — keeps scripted setups working.
1590
- const { pickLang } = await import('./cli-ui/lang-picker.js');
1591
- const { runConfigWizard } = await import('./cli-ui/config-wizard.js');
1592
- const lang = await pickLang();
1593
1585
  await runConfigWizard(lang);
1594
1586
  return;
1595
1587
  }
1596
- const config = await loadConfig();
1597
- switch (component) {
1598
- case 'wechat': {
1599
- console.log('📱 Configuring WeChat adapter...');
1600
- console.log('Fetching QR code...\n');
1601
- // Import the iLink adapter for QR login
1602
- const { ILinkWeChatAdapter } = await import('./plugins/messengers/wechat/ilink-adapter.js');
1603
- const adapter = new ILinkWeChatAdapter();
1604
- try {
1605
- // Get QR code URL and token
1606
- const { qrUrl, qrToken } = await adapter.startQRLogin();
1607
- console.log('📱 Scan this QR code with WeChat:\n');
1608
- console.log(qrUrl);
1609
- console.log('\n');
1610
- // Poll for login status
1611
- const credentials = await adapter.waitForQRLogin(qrToken, (status) => {
1612
- console.log(`[${new Date().toLocaleTimeString()}] ${status}`);
1613
- });
1614
- if (credentials) {
1615
- console.log(`\n✅ Logged in as ${credentials.userId}`);
1616
- console.log(` Bot ID: ${credentials.accountId}`);
1617
- // Add wechat-ilink to config
1618
- if (!config.messengers.includes('wechat-ilink')) {
1619
- config.messengers.push('wechat-ilink');
1620
- }
1621
- }
1622
- else {
1623
- console.log('\n❌ Login failed or timed out');
1624
- return;
1625
- }
1626
- }
1627
- catch (error) {
1628
- console.error('\n❌ Failed to configure WeChat:', error);
1629
- return;
1630
- }
1631
- break;
1632
- }
1633
- case 'claude': {
1634
- console.log('🤖 Configuring Claude Code agent...');
1635
- // Check if claude CLI is available
1636
- const checkClaude = crossSpawn('claude', ['--version'], { stdio: 'ignore' });
1637
- checkClaude.on('close', (code) => {
1638
- if (code === 0) {
1639
- console.log('✅ Claude Code CLI found!');
1640
- }
1641
- else {
1642
- console.log('❌ Claude Code CLI not found.');
1643
- console.log('Install with: npm install -g @anthropic-ai/claude-code');
1644
- }
1645
- });
1646
- if (!config.agents.includes('claude-code')) {
1647
- config.agents.push('claude-code');
1648
- }
1649
- config.defaultAgent = 'claude-code';
1650
- break;
1651
- }
1652
- case 'codex': {
1653
- console.log('🤖 Configuring Codex agent...');
1654
- const checkCodex = crossSpawn('codex', ['--version'], { stdio: 'ignore' });
1655
- checkCodex.on('close', (code) => {
1656
- if (code === 0) {
1657
- console.log('✅ Codex CLI found!');
1658
- }
1659
- else {
1660
- console.log('❌ Codex CLI not found.');
1661
- console.log('Install with: npm install -g @openai/codex');
1662
- }
1663
- });
1664
- if (!config.agents.includes('codex')) {
1665
- config.agents.push('codex');
1666
- }
1667
- config.defaultAgent = 'codex';
1668
- break;
1669
- }
1670
- case 'telegram': {
1671
- console.log('📱 Configuring Telegram adapter...');
1672
- console.log('To get a bot token:');
1673
- console.log('1. Open Telegram and search for @BotFather');
1674
- console.log('2. Send /newbot and follow instructions');
1675
- console.log('3. Copy the bot token\n');
1676
- const { createInterface } = await import('node:readline');
1677
- const rl = createInterface({
1678
- input: process.stdin,
1679
- output: process.stdout,
1680
- });
1681
- const token = await new Promise((resolve) => {
1682
- rl.question('Enter your bot token: ', (answer) => {
1683
- resolve(answer.trim());
1684
- });
1685
- });
1686
- if (!token) {
1687
- console.log('❌ Bot token is required');
1688
- return;
1689
- }
1690
- const channelId = await new Promise((resolve) => {
1691
- rl.question('Enter channel ID (optional, press Enter for default): ', (answer) => {
1692
- resolve(answer.trim() || 'default');
1693
- });
1694
- });
1695
- rl.close();
1696
- config.telegram = { botToken: token, channelId };
1697
- if (!config.messengers.includes('telegram')) {
1698
- config.messengers.push('telegram');
1699
- }
1700
- console.log('✅ Telegram bot token saved');
1701
- console.log(` Channel ID: ${channelId}`);
1702
- break;
1703
- }
1704
- case 'feishu': {
1705
- console.log('📱 Configuring Feishu adapter (WebSocket long polling mode)...');
1706
- console.log('To create a Feishu bot:');
1707
- console.log('1. Go to https://open.feishu.cn/app');
1708
- console.log('2. Create a custom bot app');
1709
- console.log('3. Enable Bot capability');
1710
- console.log('4. Configure event subscriptions (Subscribe to "im.message.receive_v1" event)');
1711
- console.log('5. Go to Permissions management and enable: im:message, im:message.p2p_msg:readonly, im:message:send_as_bot');
1712
- console.log('6. Create a version and publish it');
1713
- console.log('7. Copy App ID and App Secret\n');
1714
- const { createInterface: createRl } = await import('node:readline');
1715
- const feishuRl = createRl({
1716
- input: process.stdin,
1717
- output: process.stdout,
1718
- });
1719
- const appId = await new Promise((resolve) => {
1720
- feishuRl.question('Enter App ID: ', (answer) => {
1721
- resolve(answer.trim());
1722
- });
1723
- });
1724
- const appSecret = await new Promise((resolve) => {
1725
- feishuRl.question('Enter App Secret: ', (answer) => {
1726
- resolve(answer.trim());
1727
- });
1728
- });
1729
- feishuRl.close();
1730
- if (!appId || !appSecret) {
1731
- console.log('❌ App ID and App Secret are required');
1732
- return;
1733
- }
1734
- config.feishu = {
1735
- appId,
1736
- appSecret
1737
- };
1738
- if (!config.messengers.includes('feishu')) {
1739
- config.messengers.push('feishu');
1740
- }
1741
- console.log('✅ Feishu bot credentials saved');
1742
- console.log(`\n✅ Using WebSocket long polling mode - no webhook configuration needed!`);
1743
- console.log(` The bot will automatically connect to Feishu servers.`);
1744
- break;
1745
- }
1746
- case 'discord': {
1747
- console.log('📱 Configuring Discord adapter...');
1748
- console.log('To create a Discord bot:');
1749
- console.log('1. Go to https://discord.com/developers/applications');
1750
- console.log('2. Click "New Application" and give it a name');
1751
- console.log('3. Go to "Bot" tab and click "Add Bot"');
1752
- console.log('4. IMPORTANT: Enable "MESSAGE CONTENT INTENT" under Privileged Gateway Intents');
1753
- console.log('5. Click "Reset Token" to get your bot token');
1754
- console.log('6. Use OAuth2 URL Generator to invite the bot to your server\n');
1755
- const { createInterface: createDiscordRl } = await import('node:readline');
1756
- const discordRl = createDiscordRl({
1757
- input: process.stdin,
1758
- output: process.stdout,
1759
- });
1760
- const discordToken = await new Promise((resolve) => {
1761
- discordRl.question('Enter your bot token: ', (answer) => {
1762
- resolve(answer.trim());
1763
- });
1764
- });
1765
- if (!discordToken) {
1766
- console.log('❌ Bot token is required');
1767
- discordRl.close();
1768
- return;
1769
- }
1770
- const discordChannelId = await new Promise((resolve) => {
1771
- discordRl.question('Enter channel ID (optional, press Enter for default): ', (answer) => {
1772
- resolve(answer.trim() || 'default');
1773
- });
1774
- });
1775
- const allowedGuilds = await new Promise((resolve) => {
1776
- discordRl.question('Allowed guild IDs (comma-separated, optional): ', (answer) => {
1777
- resolve(answer.trim());
1778
- });
1779
- });
1780
- const allowedChannels = await new Promise((resolve) => {
1781
- discordRl.question('Allowed channel IDs (comma-separated, optional): ', (answer) => {
1782
- resolve(answer.trim());
1783
- });
1784
- });
1785
- discordRl.close();
1786
- config.discord = {
1787
- botToken: discordToken,
1788
- channelId: discordChannelId,
1789
- allowedGuilds: allowedGuilds ? allowedGuilds.split(',').map(s => s.trim()).filter(Boolean) : undefined,
1790
- allowedChannels: allowedChannels ? allowedChannels.split(',').map(s => s.trim()).filter(Boolean) : undefined,
1791
- };
1792
- if (!config.messengers.includes('discord')) {
1793
- config.messengers.push('discord');
1794
- }
1795
- console.log('✅ Discord bot token saved');
1796
- console.log(` Channel ID: ${discordChannelId}`);
1797
- if (config.discord.allowedGuilds?.length) {
1798
- console.log(` Allowed guilds: ${config.discord.allowedGuilds.join(', ')}`);
1799
- }
1800
- if (config.discord.allowedChannels?.length) {
1801
- console.log(` Allowed channels: ${config.discord.allowedChannels.join(', ')}`);
1802
- }
1803
- break;
1804
- }
1805
- case 'cursor': {
1806
- console.log('🤖 Configuring Cursor agent...');
1807
- const cursorAvailable = await new Promise((resolve) => {
1808
- const proc = crossSpawn('cursor-agent', ['--version'], { stdio: 'ignore' });
1809
- proc.on('error', () => resolve(false));
1810
- proc.on('close', (code) => resolve(code === 0));
1811
- });
1812
- if (cursorAvailable) {
1813
- console.log('✅ Cursor CLI found!');
1814
- console.log('\nTo authenticate, run: cursor-agent login (OAuth) or set CURSOR_API_KEY');
1815
- }
1816
- else {
1817
- console.log('❌ Cursor CLI not found.');
1818
- console.log('Install with: curl https://cursor.com/install -fsS | bash');
1819
- }
1820
- if (!config.agents.includes('cursor')) {
1821
- config.agents.push('cursor');
1822
- }
1823
- config.defaultAgent = 'cursor';
1824
- break;
1825
- }
1826
- case 'opencode': {
1827
- console.log('🤖 Configuring OpenCode agent...');
1828
- // Check if opencode CLI is available
1829
- const openCodeAvailable = await new Promise((resolve) => {
1830
- const proc = crossSpawn('opencode', ['--version'], { stdio: 'ignore' });
1831
- proc.on('error', () => resolve(false));
1832
- proc.on('close', (code) => resolve(code === 0));
1833
- });
1834
- if (openCodeAvailable) {
1835
- console.log('✅ OpenCode CLI found!');
1836
- console.log('\nTo authenticate, run: opencode auth login');
1837
- }
1838
- else {
1839
- console.log('❌ OpenCode CLI not found.');
1840
- console.log('Install with: npm i -g opencode-ai@latest');
1841
- console.log('Or visit: https://github.com/anomalyco/opencode');
1842
- }
1843
- if (!config.agents.includes('opencode')) {
1844
- config.agents.push('opencode');
1845
- }
1846
- config.defaultAgent = 'opencode';
1847
- break;
1848
- }
1849
- case 'agent': {
1850
- console.log('🔌 Configuring remote ACP agent...');
1851
- console.log('This adds a remote agent that speaks the Agent Communication Protocol.');
1852
- console.log('ACP is an open standard (https://agentcommunicationprotocol.dev)\n');
1853
- const { createInterface: createAgentRl } = await import('node:readline');
1854
- const agentRl = createAgentRl({ input: process.stdin, output: process.stdout });
1855
- const agentName = await new Promise((resolve) => {
1856
- agentRl.question('Agent name (e.g. openclaw-dev): ', (answer) => resolve(answer.trim()));
1857
- });
1858
- if (!agentName) {
1859
- console.log('❌ Name is required');
1860
- agentRl.close();
1861
- return;
1862
- }
1863
- const agentAlias = await new Promise((resolve) => {
1864
- agentRl.question('Aliases, comma-separated (optional): ', (answer) => resolve(answer.trim()));
1865
- });
1866
- const endpoint = await new Promise((resolve) => {
1867
- agentRl.question('ACP endpoint URL (e.g. http://localhost:8080): ', (answer) => resolve(answer.trim()));
1868
- });
1869
- if (!endpoint) {
1870
- console.log('❌ Endpoint is required');
1871
- agentRl.close();
1872
- return;
1873
- }
1874
- console.log('\nAuthentication type:');
1875
- console.log(' 1. none');
1876
- console.log(' 2. apikey');
1877
- console.log(' 3. bearer');
1878
- const authTypeInput = await new Promise((resolve) => {
1879
- agentRl.question('Choose (1-3, default: none): ', (answer) => resolve(answer.trim() || '1'));
1880
- });
1881
- const authTypeMap = { '1': 'none', '2': 'apikey', '3': 'bearer' };
1882
- const authType = authTypeMap[authTypeInput] || 'none';
1883
- let auth;
1884
- if (authType !== 'none') {
1885
- const token = await new Promise((resolve) => {
1886
- agentRl.question('Auth token: ', (answer) => resolve(answer.trim()));
1887
- });
1888
- if (!token) {
1889
- console.log('❌ Token is required when auth is enabled');
1890
- agentRl.close();
1891
- return;
1892
- }
1893
- auth = { type: authType, token };
1894
- }
1895
- agentRl.close();
1896
- // Validate connection
1897
- console.log('\n🔍 Testing connection...');
1898
- const { ACPClient } = await import('./plugins/agents/acp/acp-client.js');
1899
- const testClient = new ACPClient({ name: agentName, endpoint, auth });
1900
- try {
1901
- const manifest = await testClient.fetchManifest();
1902
- console.log(`✅ Connected! Agent: ${manifest.name}`);
1903
- if (manifest.description)
1904
- console.log(` ${manifest.description}`);
1905
- }
1906
- catch (e) {
1907
- const msg = e instanceof Error ? e.message : String(e);
1908
- console.log(`⚠️ Connection failed: ${msg}`);
1909
- console.log(' Agent will be saved but may not work until endpoint is available.');
1910
- }
1911
- // Save
1912
- if (!config.acpAgents)
1913
- config.acpAgents = [];
1914
- const existing = config.acpAgents.findIndex(a => a.name === agentName);
1915
- const agentConfig = {
1916
- name: agentName,
1917
- aliases: agentAlias?.split(',').map(s => s.trim()).filter(Boolean) || [],
1918
- endpoint,
1919
- auth,
1920
- enabled: true
1921
- };
1922
- if (existing >= 0) {
1923
- config.acpAgents[existing] = agentConfig;
1924
- }
1925
- else {
1926
- config.acpAgents.push(agentConfig);
1927
- }
1928
- break;
1929
- }
1930
- default:
1931
- console.log(`Unknown component: ${component}`);
1932
- console.log('Run "agim config" to see available components.');
1933
- process.exitCode = 1;
1934
- return;
1588
+ const section = sectionForConfigComponent(component);
1589
+ if (!section) {
1590
+ console.log(cliT(lang, 'config.shortcut.unknown', { component }));
1591
+ process.exitCode = 1;
1592
+ return;
1935
1593
  }
1936
- await saveConfig(config);
1937
- console.log(`\n✅ Configuration saved to ${CONFIG_FILE}`);
1594
+ await runConfigWizard(lang, {
1595
+ initialSection: section,
1596
+ initialOnly: true,
1597
+ shortcutLabel: component,
1598
+ });
1599
+ return;
1938
1600
  });
1939
1601
  program
1940
1602
  .command('tui')
1941
- .description('Open the terminal chat UI (Ink-based). Pick an agent + chat in-process.')
1603
+ .description('Open the terminal chat UI for local agent conversations')
1942
1604
  .option('-a, --agent <name>', 'Pre-select an agent by name (e.g. claude-code, codex, native)')
1943
1605
  .option('-r, --resume [id]', 'Resume a saved session by id; "last" or empty picks the most recent')
1944
1606
  .option('--list-sessions', 'Print saved TUI sessions (latest first) and exit')
@@ -1949,7 +1611,29 @@ program
1949
1611
  await runTui({ agent: opts.agent, resume, listSessions: opts.listSessions });
1950
1612
  });
1951
1613
  program
1952
- .command('agents')
1614
+ .command('go')
1615
+ .description('First run: configure one agent, start Web, then continue in `agim web`')
1616
+ .action(async () => {
1617
+ const { runQuickstart } = await import('./cli-ui/quickstart.js');
1618
+ await runQuickstart();
1619
+ });
1620
+ program.addCommand(program.createCommand('quickstart')
1621
+ .description('Compatibility alias for `agim go`')
1622
+ .action(async () => {
1623
+ const { runQuickstart } = await import('./cli-ui/quickstart.js');
1624
+ await runQuickstart();
1625
+ }), { hidden: true });
1626
+ program
1627
+ .command('doctor')
1628
+ .description('Run a local readiness check and suggest the next command')
1629
+ .action(async () => {
1630
+ const { runDoctor } = await import('./cli-ui/doctor.js');
1631
+ const code = await runDoctor();
1632
+ if (code !== 0)
1633
+ process.exit(code);
1634
+ });
1635
+ program
1636
+ .command('agents', { hidden: true })
1953
1637
  .description('List available agents')
1954
1638
  .action(async () => {
1955
1639
  await registry.loadBuiltInPlugins();
@@ -1992,7 +1676,7 @@ program
1992
1676
  }
1993
1677
  });
1994
1678
  program
1995
- .command('messengers')
1679
+ .command('messengers', { hidden: true })
1996
1680
  .description('List available messengers')
1997
1681
  .action(async () => {
1998
1682
  await registry.loadBuiltInPlugins();
@@ -2015,7 +1699,7 @@ program
2015
1699
  // agim diag mcp
2016
1700
  const setupCmd = program
2017
1701
  .command('setup')
2018
- .description('Interactive setup helpers (LLM backends / MCP servers)');
1702
+ .description('Advanced setup helpers for LLM backends and MCP servers');
2019
1703
  setupCmd
2020
1704
  .command('llm [args...]')
2021
1705
  .description('Manage Agim Agent model API backends')
@@ -2036,7 +1720,7 @@ setupCmd
2036
1720
  });
2037
1721
  const diagCmd = program
2038
1722
  .command('diag')
2039
- .description('Run local diagnostics for LLM/MCP configuration');
1723
+ .description('Advanced diagnostics for configured LLM/MCP backends');
2040
1724
  diagCmd
2041
1725
  .command('llm')
2042
1726
  .description('Diagnose configured LLM backends')
@@ -2059,7 +1743,7 @@ diagCmd
2059
1743
  // status / restart / stop / uninstall — all delegate to cli-ui/cmd-handlers.ts.
2060
1744
  program
2061
1745
  .command('status')
2062
- .description('Show whether the bridge is running (systemd / background / foreground)')
1746
+ .description('Show whether Agim is running and where the Web console is')
2063
1747
  .action(async () => {
2064
1748
  const { cmdStatus } = await import('./cli-ui/cmd-handlers.js');
2065
1749
  cmdStatus();
@@ -2179,7 +1863,7 @@ tokenCmd
2179
1863
  process.exit(1);
2180
1864
  });
2181
1865
  // ─── IM admin registry helpers (v2 model) ────────────────────────────
2182
- const adminCmd = program.command('admin').description('Inspect IM admin assignments');
1866
+ const adminCmd = program.command('admin', { hidden: true }).description('Inspect IM admin assignments');
2183
1867
  adminCmd
2184
1868
  .command('list')
2185
1869
  .description('List current IM admins')
@@ -2218,38 +1902,21 @@ adminCmd
2218
1902
  // hint to use IM `/web` instead.
2219
1903
  program
2220
1904
  .command('web')
2221
- .description('Print the URL of this host\'s web console')
2222
- .action(async () => {
2223
- // Pull ~/.agim/env into process.env so IMHUB_VIEWER_* configured via
2224
- // the entry menu is visible when this CLI runs in a fresh shell.
2225
- try {
2226
- const { readEnvFile } = await import('./cli-ui/env-file.js');
2227
- const f = readEnvFile();
2228
- for (const k of ['IMHUB_VIEWER_PUBLIC_BASE_URL', 'IMHUB_VIEWER_TUNNEL_MODE', 'IMHUB_VIEWER_ENABLED']) {
2229
- if (f[k] && !process.env[k])
2230
- process.env[k] = f[k];
2231
- }
2232
- }
2233
- catch { /* ignore */ }
2234
- const { getEffectivePublicBaseUrl, getViewerConfig } = await import('./core/viewer-config.js');
2235
- const cfg = getViewerConfig();
2236
- const url = getEffectivePublicBaseUrl();
2237
- if (url) {
2238
- const source = cfg.publicBaseUrl ? 'IMHUB_VIEWER_PUBLIC_BASE_URL' : 'cloudflared tunnel';
2239
- console.log(url);
2240
- console.log(`(来源: ${source})`);
2241
- return;
2242
- }
2243
- if (cfg.tunnelMode === 'quick') {
2244
- console.log('Web 后台地址当前由 cloudflared 临时隧道提供,但本进程查不到隧道 URL。');
2245
- console.log('请在 IM 内发送 /web 让运行中的 daemon 返回最新地址。');
2246
- process.exit(2);
2247
- }
2248
- console.log('Web 后台地址未配置。');
2249
- console.log('设置以下任一项后重启服务:');
2250
- console.log(' IMHUB_VIEWER_PUBLIC_BASE_URL=https://your-domain (反代 / 自定义域名)');
2251
- console.log(' IMHUB_VIEWER_TUNNEL_MODE=quick (cloudflared 临时隧道)');
2252
- process.exit(2);
1905
+ .description('Show the web console URL, service state, and login hint')
1906
+ .option('--public', 'Print the public/reverse-proxy URL only')
1907
+ .option('--welcome', 'Append the first-run welcome flag to the local URL')
1908
+ .option('--open', 'Open the Web console in the default browser')
1909
+ .option('--start', 'Start Agim in the background first when it is not running')
1910
+ .action(async (opts) => {
1911
+ const { cmdWeb } = await import('./cli-ui/cmd-handlers.js');
1912
+ const code = await cmdWeb({
1913
+ public: opts.public,
1914
+ welcome: opts.welcome,
1915
+ open: opts.open,
1916
+ start: opts.start,
1917
+ });
1918
+ if (code !== 0)
1919
+ process.exit(code);
2253
1920
  });
2254
1921
  // ─── bare `agim` → entry menu (v0.5.0+) ─────────────────────────────
2255
1922
  // If the user invoked us with no args (just `agim`), drop them at
@@ -2265,14 +1932,29 @@ async function maybeRunEntryMenu() {
2265
1932
  if (!process.stdin.isTTY)
2266
1933
  return false; // piped / non-interactive — fall back to commander's help
2267
1934
  const { runEntryMenu } = await import('./cli-ui/entry-menu.js');
2268
- const { cmdStatus, cmdStart, cmdStop, cmdRestart, cmdUninstall } = await import('./cli-ui/cmd-handlers.js');
1935
+ const { cmdStatus, cmdStart, cmdStop, cmdRestart, cmdUninstall, cmdWeb } = await import('./cli-ui/cmd-handlers.js');
2269
1936
  const { action, lang } = await runEntryMenu();
2270
1937
  switch (action.kind) {
2271
1938
  case 'quit':
2272
1939
  return true;
1940
+ case 'quickstart': {
1941
+ const { runQuickstart } = await import('./cli-ui/quickstart.js');
1942
+ await runQuickstart(lang);
1943
+ return true;
1944
+ }
1945
+ case 'doctor': {
1946
+ const { runDoctor } = await import('./cli-ui/doctor.js');
1947
+ const code = await runDoctor();
1948
+ if (code !== 0)
1949
+ process.exitCode = code;
1950
+ return true;
1951
+ }
2273
1952
  case 'status':
2274
1953
  cmdStatus();
2275
1954
  return true;
1955
+ case 'web':
1956
+ await cmdWeb({ welcome: true, start: true, open: true });
1957
+ return true;
2276
1958
  case 'config': {
2277
1959
  // Reuse the lang the user just picked in runEntryMenu — re-prompting
2278
1960
  // here was a v0.5.1 regression (user reported: "已经选过语言不要再问").