agim-cli 1.3.0 → 1.3.2
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.
- package/CHANGELOG.md +34 -55
- package/README.md +87 -427
- package/README.zh-CN.md +85 -417
- package/dist/cli-ui/tui/app.d.ts +5 -1
- package/dist/cli-ui/tui/app.d.ts.map +1 -1
- package/dist/cli-ui/tui/app.js +243 -63
- package/dist/cli-ui/tui/app.js.map +1 -1
- package/dist/cli-ui/tui/index.d.ts.map +1 -1
- package/dist/cli-ui/tui/index.js +23 -5
- package/dist/cli-ui/tui/index.js.map +1 -1
- package/dist/cli-ui/tui/sessions.d.ts +2 -0
- package/dist/cli-ui/tui/sessions.d.ts.map +1 -1
- package/dist/cli-ui/tui/sessions.js +13 -3
- package/dist/cli-ui/tui/sessions.js.map +1 -1
- package/dist/plugins/agents/pi-native/index.js +1 -1
- package/dist/plugins/agents/pi-native/index.js.map +1 -1
- package/dist/plugins/agents/pi-native/tool-bridge.js +1 -1
- package/dist/plugins/agents/pi-native/tool-bridge.js.map +1 -1
- package/package.json +4 -6
package/README.zh-CN.md
CHANGED
|
@@ -2,467 +2,135 @@
|
|
|
2
2
|
|
|
3
3
|
[English](README.md)
|
|
4
4
|
|
|
5
|
-
**IM 到 AI Agent
|
|
6
|
-
|
|
7
|
-
> **品牌**:英文名 **Agim**(取自 Agent + IM,也有 agile 敏捷的感觉),中文名 **阿吉姆**。
|
|
8
|
-
> npm 包名 **`agim-cli`**(短名 `agim` 被 npm 反 typo-squat 保留),装完后**命令**还是 **`agim`**,
|
|
9
|
-
> 日常打的就是这个。老命令 `agim` 也保留为别名,老的 systemd 单元和 shell 别名不会断。
|
|
10
|
-
> 配置目录新装默认 **`~/.agim/`**,已有 **`~/.agim/`** 的老用户会被自动识别继续沿用。
|
|
11
|
-
> 环境变量(`IMHUB_*`)、HTTP 头(`X-IM-Hub-Token`)、systemd 单元 `im-hub.service` 都保留
|
|
12
|
-
> 原名以兼容 0.x 部署——详见 [迁移](#迁移)。
|
|
13
|
-
|
|
14
|
-
## 亮点
|
|
15
|
-
|
|
16
|
-
- **3 种 IM + 邮件,6 个 Agent** — 微信(图片 / 文件 / 语音)、飞书、钉钉(图片 / 语音,自带服务端 ASR)、Email(SMTP);Claude Code、Codex、OpenCode、Antigravity、**Cursor(v1.2.49+ · `/cs`)**,以及内置 `native` LLM agent(DeepSeek / Kimi / Qwen / OpenAI / Anthropic 兼容 · `/na`)。另支持任意 ACP 端点。
|
|
17
|
-
- **原生 LLM 栈(v1.3.0+,v1.2.48 强化)** — 内置 in-process agent loop(`native` adapter),直连任何 OpenAI / Anthropic 兼容 API(DeepSeek / Kimi / GLM / Qwen / Ollama / vLLM / OpenAI / Anthropic)。v1.2.48 让 native 真正进入生产可用:**角色定义** 通过 `~/.agim-workspaces/native/AGENTS.md`(热加载,无需重启);**多模态**(图片附件 → openai-compat `image_url`);**自动压缩**长对话(>60k 字符 → 由 cheap role 摘要);**Provider 失败链路降级**(5xx/超时自动切下一个 role);**轮级心跳**每 3 分钟一次"⏳ 还在处理"避免多步研究看似卡死;**agent-loop 超时拉到 28 分钟**(旧 5 分钟会切断 multi-hop `call_agent`)。可用作 `memory-distill` / `memory-consolidate` / `intent-llm` 的便宜路由,可作为本地优先的聊天 agent(`/na`),也可作 A2A 的 peer。详见 [`docs/llm-backends.md`](docs/llm-backends.md) 与 [`docs/architecture-bridge-and-native.md`](docs/architecture-bridge-and-native.md)
|
|
18
|
-
- **Native 配置体验(最新)** — 在 `/chat` 或 `/m/chat` 切换 `native` 时,若没有可用 backend,会弹出持久化配置模态框;可直接填写 provider/model/API key 并立刻重试切换。`llmRoles` 角色绑定已改为可选偏好配置,不再阻塞流程。
|
|
19
|
-
- **Skills 多目录扫描(v1.2.48+)** — `IMHUB_SKILLS_MODE=auto`(默认)把 `~/.agim/skills/`(写入目标)与 `~/.claude/skills/`、`~/.config/opencode/skills/`、`~/.codex/skills/` 合并;新装即可看到所有已有 CLI agent 的技能。同名时 workspace 覆盖。Settings → 技能 改成两个子 tab(已安装编辑器 + skillhub 热门);顶部导航条的 `/skills` 已合并进 Settings
|
|
20
|
-
- **跨通道出口告警(v1.2.48+)** — 某条会话 outbox 失败 ≥3 次时(如 wechat session 过期),agim 自动失效 stale 的 context-token,并向你预设的备用通道(`IMHUB_OPERATOR_ALERT_PLATFORM` / `IMHUB_OPERATOR_ALERT_THREAD_ID`)推一条"⚠️ outbox 告警",让你比用户更早发现
|
|
21
|
-
- **会话级长目标(v1.3.0+ · `/goal`)** — 每个 IM 会话最多一个 active 目标,自动注入每条 prompt,确保 Agent 跨多轮不偏题。生命周期:`set / body / progress / pause / resume / complete / cancel / list`。跨会话管理在 `/tasks/goals`。详见 [`docs/goals.md`](docs/goals.md)
|
|
22
|
-
- **Heartbeat 主动节拍(v1.3.0+ · `/heartbeat`)** — 把一个会话绑到周期性「现在有事要做吗?」节拍。每次 tick 走 DECIDE(便宜 LLM)→ EXECUTE(Agent 实际办)→ EVALUATE(通知门评估是否打扰用户)。跨会话管理在 `/tasks/heartbeat`
|
|
23
|
-
- **结构化 Agent→User 选择题(v1.3.0+ · `mcp__imhub__ask_user`)** — Agent 给用户出 N 选 1 选择题,用户按键或文字回复都能可靠回到 Agent,避免「自由聊天里 yes/no 二义性」。等待队列在 `/tasks/asks`。详见 [`docs/ask-user.md`](docs/ask-user.md)
|
|
24
|
-
- **agim Skills 技能引擎(v1.3.0+ · `/skill`)** — 放一个 `SKILL.md` 到 `~/.agim/skills/<name>/`,所有 CLI agent + native 都看得到。3 层渐进披露(name+desc 每轮自动注入;body 按需 `mcp__imhub__read_skill`;scripts/refs 走普通 file-read)。Web 编辑器在 `/settings/agim-skills`。详见 [`docs/skills.md`](docs/skills.md)
|
|
25
|
-
- **`/router compare` A/B 评测(v1.3.0+)** — 同一条 prompt 同时打两个后端(CLI 与 native 可任意组合),一个卡片返回延迟 / token / 输出,方便在改 `defaultAgent` 之前先选个赢家
|
|
26
|
-
- **合规友好默认(v1.2.23+)** — 海外 IM 适配器(Discord、Telegram)以及远程 ACP Agent 入口默认**全部隐藏**(CLI 向导 / Web 后台 / 运行时加载三层都 gate 住),主页面、安装向导、Web 后台都不会暴露。国内部署保持关闭即可。需要跨境通道时再通过 `IMHUB_ENABLE_GLOBAL_IM=1` / `IMHUB_ENABLE_REMOTE_AGENT=1` 显式启用。完整安全控制清单见 [`docs/security-hardening.md`](docs/security-hardening.md)(~30 个 env、敏感路径黑名单、出站脱敏、审计事件表、token 角色、R14 systemctl-aware 生命周期)
|
|
27
|
-
- **Agent 之间互调(A2A)** — Agent 可以在自己的工具循环里直接调另一个 Agent,比如直接说「用 codex 帮我跑 git status」/「让 opencode 跑一下测试」。护栏在 agim 里强制:递归深度限制(默认 3)、禁止自调、工作区白名单、按人预算共享;可观测:`/a2a stats | recent | tree <id>`;`IMHUB_A2A_ENABLED=0` 关闭
|
|
28
|
-
- **A2A 共享文件传递(v1.1.3+)** — caller 可通过 `inputs[]`(`fromAbsolutePath` / `fromCallerOutput` / 内联 `content`)把文件放进 callee 工作区;callee 把产物写到 `~/.agim/artifacts/<jobId>/_agim-output/`,返回的 `outputs[]` 让 caller 按需读。同文件系统优先 hard-link,否则复制。大小上限 env 可调
|
|
29
|
-
- **IM 长内容 viewer(v1.1.6+)** — 微信 / 飞书等对富 markdown 渲染差。Agent 回复超过阈值(行数 / 字符数 / 含表格 / 大段代码)时,agim 把完整 markdown 永久存进本机 `~/.agim/viewer.db`(**永远不离开你的机器**),IM 里只发短摘要 + 链接 `https://<你的域名>/v/<uuid>`。链接背后是 agim 自己的 web console,由你自己反代(cloudflared / caddy / tailscale 任选)。Agent 可显式用 `<im-summary>…</im-summary><full-md>…</full-md>` 包装长回答获得最干净体验。开启:`IMHUB_VIEWER_ENABLED=1` + `IMHUB_VIEWER_PUBLIC_BASE_URL=https://你的域名`
|
|
30
|
-
- **投递不丢消息** — Agent 回复 / 提醒 / 审批卡片 / 重启通知 全部走 SQLite outbox + 指数退避 worker,IM 平台抖动或断连不再丢回复;`/outbox status | list | failed | retry <id>`
|
|
31
|
-
- **崩溃中断可恢复** — 每条入站消息建 inline job;agim 重启时正在跑的会标 `interrupted`,下次启动 10 分钟窗口内通知对应会话。**v1.2.0+** 在飞书等支持的渠道走原生 `🔁 重发 / ✖ 取消` 内联按钮卡片,其余渠道兜底为文字提示。群聊内只有原发起者可点按钮
|
|
32
|
-
- **长期记忆(v1.2.0+)** — 按用户的事实库 + 自动蒸馏的 persona 摘要,每次对话自动注入 prompt。默认 SQLite + FTS5;可选向量召回(本地 BGE via `@xenova/transformers` ONNX,或任意 OpenAI 兼容 `/v1/embeddings` 端点),RRF 融合双路。默认关闭,Settings → 自动化记忆 开启。Web 管理页 `/memory/facts` + `/memory/persona` 可看 / 改 / 导出。**全量数据留本机** `~/.agim/memory.db`
|
|
33
|
-
- **成本与健康仪表盘(v1.2.0+)** — `/observability/health` + `/observability/topn` 基于 audit log 聚合每日成本 / 调用数 / 错误数 / p95 延迟。1/7/30/90 天过滤,按用户 / agent / 平台 top-N,日趋势图带指标切换。Claude 每次调用费用自动从 `--output-format json` 提取
|
|
34
|
-
- **Agent 主动推送(v1.2.0+)** — 新的 `mcp__imhub__push_message` MCP 工具让运行中的 agent 不需要外部触发就把后续消息推回原 IM 会话(长任务通知、定时类提醒)。`POST /api/notify` 同一能力也暴露给 webhook / 外部脚本。每用户限流 + 跨会话开关防刷屏
|
|
35
|
-
- **IM 管理员配置(v1.3+)** — Web 管理员 token 是唯一授权源。任何给 agim 发过消息的 IM 用户都会自动出现在 `设置 → 管理员`,可一键授予/移除管理员(无需 `/setup admin`,无需手填 userId)。`agim admin list` / `agim admin known` 可查看状态
|
|
36
|
-
- **`/remind` 提醒子系统** — 一次性 + 定期(`每天8点喝水`);非 slash 消息 LLM 自动识别意图;LLM 润色投递文本;Agent MCP 工具直接创建;Web `/reminders` 管理页;邮件 + IM 双通道投递
|
|
37
|
-
- **`/memo` 5W1H 持久记忆库** — 通用「what / who / when / where / how / why」记事本,可选 GPS(浏览器地理定位 H5 + 百度地理编码);默认永久保存,临时类(停车、当天会议)单独走 24h 桶;Agent 通过 MCP 工具自动落库 + 检索,闲聊里提到的地点 / 生日 / 待办都能记下
|
|
38
|
-
- **浏览器控制台** — 对话界面;任务面板含 12 个 Tab(Jobs / 后台脚本 / 子任务 / 定时 / 审批 / 健康 / 工作区 / 审计 / 投递队列 / A2A 调用 / **成本与健康 / 记忆**);提醒、备忘、设置页含工作区 CRUD + 管理员白名单 + Safety 卡片(重启 / 停止)。完整中英双语 + 每页语言切换 + 专业名词 `(?)` 帮助弹窗(v1.1.4+)
|
|
39
|
-
- **工具调用人审(HITL)** — Claude 调用工具时暂停,IM 回复 `y`/`n` 或在页面点卡片审批;全平台一致
|
|
40
|
-
- **微信 / 钉钉 富媒体** — 接收图片、文件、视频;语音消息按平台走最佳转写链路:微信 STT、钉钉服务端 ASR、OpenAI Whisper、whisper.cpp
|
|
41
|
-
- **智能路由** — 意图分类(中英文)、Sticky 会话、断路器、限流器
|
|
42
|
-
- **多租户工作区** — 按工作区隔离 Agent 白名单、限流、命令级 ACL
|
|
43
|
-
- **持久化任务与定时** — SQLite 落地,重启不丢,显式 `/job` 30 天 / 自动跟踪的 inline job 24 小时
|
|
44
|
-
- **可观测** — 结构化日志(pino + traceId)、Prometheus 指标、审计日志
|
|
45
|
-
- **安全** — Web 令牌 admin/user 双角色(R13)、敏感路径硬拒(AGENTS.md / `~/.agim/env` / `.env` 等)+ 出站 token 自动脱敏(R13)、记忆 / AGENTS.md prompt-injection 防护(R13)、按 IP WS 限流、常量时鉴权、SSRF 防护、凭证文件 0o600、审批 socket 熵值、持久 `audit_events` 表保留 180 天(R12 ⑤)、25s 优雅退出 + reap 兜底(R14)、启动期 PID 自检(R14)。详见 [`docs/security-hardening.md`](docs/security-hardening.md)
|
|
46
|
-
|
|
47
|
-
完整版本历史见 [CHANGELOG.md](CHANGELOG.md)。
|
|
5
|
+
Agim 是一个 **IM 到 AI Agent 的桥接系统**。
|
|
6
|
+
它强调“可用性与可运维性”:消息不丢、会话可续、审批可控、链路可观测。
|
|
48
7
|
|
|
49
|
-
##
|
|
50
|
-
|
|
51
|
-
```bash
|
|
52
|
-
npm install -g agim-cli # 需要 Node.js ≥ 18(推荐 ≥ 22 LTS)
|
|
53
|
-
|
|
54
|
-
# 配置至少一个 IM
|
|
55
|
-
agim # 交互式向导(推荐)—— 双语,方向键选语言后逐项配置
|
|
56
|
-
# 也可以走老的子命令:
|
|
57
|
-
agim config wechat # 扫码登录
|
|
58
|
-
agim config feishu # 飞书 App ID + Secret,无需 webhook
|
|
59
|
-
agim config dingtalk # 钉钉 ClientID + ClientSecret(Stream 模式机器人)
|
|
60
|
-
|
|
61
|
-
# (可选)通过 ACP 接入远端自定义 Agent
|
|
62
|
-
agim config agent
|
|
63
|
-
|
|
64
|
-
# 启动
|
|
65
|
-
agim start
|
|
66
|
-
```
|
|
67
|
-
|
|
68
|
-
浏览器访问 `http://localhost:3000` — 对话 `/`、任务 `/tasks`、设置 `/settings`。
|
|
8
|
+
## 项目重点
|
|
69
9
|
|
|
70
|
-
|
|
10
|
+
- **桥接优先**:微信 / 飞书 / 钉钉 / 邮件接入多类 Agent。
|
|
11
|
+
- **后端灵活**:Claude Code、Codex、OpenCode、Cursor、Antigravity、native LLM、ACP 远端 Agent。
|
|
12
|
+
- **AI 能力成套**:记忆、技能、长目标、心跳、提醒、备忘、结构化提问。
|
|
13
|
+
- **运行可靠**:SQLite outbox、重启恢复、任务看板、审计日志。
|
|
14
|
+
- **安全默认开启**:token 鉴权、工具审批、敏感路径拦截。
|
|
71
15
|
|
|
72
|
-
|
|
73
|
-
```bash
|
|
74
|
-
npm uninstall -g im-hub
|
|
75
|
-
npm install -g agim-cli
|
|
76
|
-
agim start # 配置、环境变量、Header 全部不变
|
|
77
|
-
```
|
|
16
|
+
## 快速开始
|
|
78
17
|
|
|
79
|
-
#### 从 `agim`(0.x → 1.0)迁移
|
|
80
18
|
```bash
|
|
81
|
-
npm uninstall -g im-hub-pro
|
|
82
19
|
npm install -g agim-cli
|
|
83
|
-
agim
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
npm 包名是 `agim-cli`(短名 `agim` 被 npm 反 typo-squat 保留了);安装后**命令**还是 `agim`,
|
|
87
|
-
日常打命令就是 `agim …`。`agim` 命令也保留为别名,原有的 systemd 单元和别名脚本不用动。
|
|
88
|
-
|
|
89
|
-
## 功能一览
|
|
90
|
-
|
|
91
|
-
| 分类 | 内容 |
|
|
92
|
-
|------|------|
|
|
93
|
-
| **IM 通道** | 微信(iLink — 图片 / 文件 / 语音 / 视频)、飞书(WebSocket)、钉钉(Stream 模式 — 图片 / 语音,自带服务端 ASR)、Email(SMTP,仅推送) |
|
|
94
|
-
| **Agent** | 6 个内置:Claude Code、Codex、OpenCode、Antigravity、Cursor(CLI,统一 `AgentBase`),以及 **`native`**(in-process LLM loop,OpenAI/Anthropic 兼容)。任何 HTTP Agent 通过 ACP 接入——所有 7 类后端走同一份 `AgentAdapter` 接口 |
|
|
95
|
-
| **原生 LLM** | OpenAI / Anthropic 兼容 provider,外挂 MCP 服务器,多轮 agent loop + 策略式审批门,可选角色绑定(`cheap` / `evaluator` / `native-chat`),未绑定时自动回退任意可用 backend |
|
|
96
|
-
| **提醒** | `/remind` slash、LLM 意图识别、LLM 润色投递、Agent MCP 工具(claude-code + opencode)、Web `/reminders` 页面 |
|
|
97
|
-
| **长目标 + 心跳 + 提问** | `/goal` 会话级目标、`/heartbeat` 周期 DECIDE/EXECUTE/EVALUATE 节拍、`mcp__imhub__ask_user` 结构化选择题,跨会话视图在 `/tasks/{goals,heartbeat,asks}` |
|
|
98
|
-
| **技能(Skills)** | `~/.agim/skills/<name>/SKILL.md` 被所有 agent(CLI + native)发现;3 层渐进披露;Web 编辑器在 `/settings/agim-skills` |
|
|
99
|
-
| **Web 控制台** | 流式对话、三态主题(浅 / 深 / 跟随系统)、中英双语(v1.3.0 每个新页面都跟齐)、SSE 实时仪表盘、Settings 子页 LLM / MCP / Native Agent / Skills |
|
|
100
|
-
| **工具人审** | IM 端 + 页面内审批卡;Claude MCP sidecar;native 走 allow-list 策略门 |
|
|
101
|
-
| **任务** | SQLite 持久化 Job Board + cron 调度;批量操作;后台任务读取 |
|
|
102
|
-
| **路由** | 意图分类、断路器、限流、Sticky 会话、LLM 兜底;`/router compare` A/B 评测 |
|
|
103
|
-
| **工作区** | 多租户;Agent 白名单 + 限流;命令级 ACL |
|
|
104
|
-
| **可观测** | pino 结构化日志、traceId、Prometheus `/api/metrics`、SQLite 审计 |
|
|
105
|
-
| **ACP** | 客户端(连接远端 Agent)+ 服务端(阿吉姆自身作为 ACP Agent),统一复用 Web token 鉴权(admin 角色) |
|
|
106
|
-
|
|
107
|
-
## CLI 命令
|
|
108
|
-
|
|
109
|
-
```
|
|
110
|
-
agim # 交互式向导(双语,推荐入口)
|
|
111
|
-
agim start # 启动桥接 + Web 界面(前台)
|
|
112
|
-
agim start --bg # 后台守护进程模式
|
|
113
|
-
agim status # 查看服务状态(systemd / bg / fg)
|
|
114
|
-
agim restart # 重启正在运行的服务
|
|
115
|
-
agim stop # 停止服务
|
|
116
|
-
agim uninstall # 卸载(保留 ~/.agim-workspaces/)
|
|
117
|
-
agim config wechat # 配置微信
|
|
118
|
-
agim config feishu # 配置飞书
|
|
119
|
-
agim config dingtalk # 配置钉钉(Stream 模式企业内部应用)
|
|
120
|
-
agim config claude # 配置 Claude Code
|
|
121
|
-
agim config agent # 接入自定义 ACP Agent
|
|
122
|
-
agim agents # 列出可用 Agent
|
|
123
|
-
agim messengers # 列出可用 IM
|
|
124
|
-
|
|
125
|
-
# v1.3.0+ — 原生 LLM 栈 + 诊断
|
|
126
|
-
agim setup llm # 向导:增/查/删 LLM backend,写 secret,角色绑定可选
|
|
127
|
-
agim setup llm native-enable # 一键启用 `native` agent(前提是已配置 backend)
|
|
128
|
-
agim setup mcp # 向导:增/查/删 外挂 MCP 服务器(stdio / HTTP / SSE)
|
|
129
|
-
agim setup mcp health # 探活全部 MCP 服务器
|
|
130
|
-
agim diag llm # 各 backend ping + 角色绑定表
|
|
131
|
-
agim diag mcp # 连接并列工具
|
|
132
|
-
|
|
133
|
-
# v1.1.10+ — Web 令牌管理
|
|
134
|
-
agim token create [name] # 新发 user/admin token(接 /api/*、/acp/*)
|
|
135
|
-
agim token list # 列出 token(只回显末 4 位)
|
|
136
|
-
agim token revoke <id> # 按 id 撤销
|
|
137
|
-
agim token bootstrap # 输出一次性 web-bootstrap token(`~/.agim/web-bootstrap-token`)
|
|
138
|
-
|
|
139
|
-
# (`agim …` 作为别名继续可用)
|
|
140
|
-
```
|
|
141
|
-
|
|
142
|
-
## 聊天命令
|
|
143
|
-
|
|
144
|
-
| 命令 | 含义 |
|
|
145
|
-
|------|------|
|
|
146
|
-
| 任意文本 | 路由到 Agent(Sticky 会话 + 意图分类) |
|
|
147
|
-
| `/<agent> <内容>` | 切换 Agent — `/cc`、`/oc`、`/cx`、`/co` |
|
|
148
|
-
| `/new` | 开新会话(清空历史) |
|
|
149
|
-
| `/model [id]` / `/models [filter]` | 查看 / 列出 / 切换当前 agent 的模型。支持 opencode(`provider/model` 格式)与 cursor(扁平名,如 `gpt-5.2`、`sonnet-4-thinking`)。v1.2.50+ |
|
|
150
|
-
| `/think on\|off` | 切换深度思考模式 |
|
|
151
|
-
| `/remind …` | 提醒子系统 — 详见 [提醒](#提醒) |
|
|
152
|
-
| `/memo …` | 5W1H 持久记忆库 — 详见 [备忘](#备忘)(别名 `/记`、`/note`)|
|
|
153
|
-
| `/job`、`/cron`、`/audit`、`/stats` | 管理任务、定时、审计、统计(`/schedule` 仍是 `/cron` 别名,v0.4.0 移除) |
|
|
154
|
-
| `/outbox status\|list\|failed\|retry <id>` | 查看与重发 IM 投递队列(v1.1.2+) |
|
|
155
|
-
| `/a2a stats\|recent\|tree <id>` | 查看 Agent 之间互调的统计 / 最近 N 次 / 调用链树(v1.1.2+) |
|
|
156
|
-
| `/router status\|explain` | 查看路由策略 |
|
|
157
|
-
| `/router compare agent:<a> agent:<b> "<内容>"` | A/B 评测——同一 prompt 同时打两个后端,并排展示延迟 / token / 输出(v1.3.0+) |
|
|
158
|
-
| `/goal …` | 会话级长目标——`set / body / progress / pause / resume / complete / cancel / list / show`(v1.3.0+) |
|
|
159
|
-
| `/heartbeat …` | 周期 DECIDE→EXECUTE→EVALUATE 节拍——`bind / unbind / show / pause / resume / status`(v1.3.0+) |
|
|
160
|
-
| `/skill list\|show <name>\|refresh` | 查看从 `~/.agim/skills/` 加载的 agim Skills(v1.3.0+) |
|
|
161
|
-
| `/cc native …` / `/na …` / `/llm …` | 切换到 in-process 原生 LLM agent(v1.3.0+) |
|
|
162
|
-
| `/cs …` / `/cur …` / `/cc cursor …` | 切换到 Cursor CLI agent(v1.2.49+);`/cs plan` 单条进入 plan 模式 |
|
|
163
|
-
| `/agy …` / `/cc antigravity …` | 切换到 Google Antigravity (agy) CLI agent |
|
|
164
|
-
| `y` / `n` / `批准` / `拒绝` | 同意 / 拒绝(工具调用 或 提醒确认卡片) |
|
|
165
|
-
| `1` / `2` | 服务重启后看到「上次消息中断」提示时,回 `1` 重发 / `2` 取消(10 分钟内有效) |
|
|
166
|
-
|
|
167
|
-
## 工具调用人审
|
|
168
|
-
|
|
169
|
-
当 Claude 尝试调用工具时,阿吉姆会暂停并发送审批卡:
|
|
170
|
-
|
|
171
|
-
```
|
|
172
|
-
🔐 工具调用审批请求
|
|
173
|
-
工具:Bash
|
|
174
|
-
入参:{"command":"rm -rf node_modules"}
|
|
175
|
-
回复 y 批准 / n 拒绝(5 分钟内未操作将自动拒绝)
|
|
176
|
-
```
|
|
177
|
-
|
|
178
|
-
在 IM 回复 `y` / `n`,或在 Web 界面点 Allow / Deny。微信、飞书、钉钉 行为一致。`IMHUB_APPROVAL_DISABLED=1` 可关闭。
|
|
179
|
-
|
|
180
|
-
## 提醒
|
|
181
|
-
|
|
182
|
-
内置 `/remind` 子系统——一次性 / 定期,三种创建路径,三种投递增强。
|
|
183
|
-
|
|
184
|
-
```bash
|
|
185
|
-
# 一次性
|
|
186
|
-
/remind 2m 喝水
|
|
187
|
-
/remind 40秒喝水
|
|
188
|
-
/remind 下午6点下班
|
|
189
|
-
/remind 18:30 出门
|
|
190
|
-
|
|
191
|
-
# 定期 🔁
|
|
192
|
-
/remind 每5分钟看屏幕外
|
|
193
|
-
/remind 每天早上8点喝水
|
|
194
|
-
/remind 每周一三五9点站会
|
|
195
|
-
/remind 每个工作日18:00下班
|
|
196
|
-
|
|
197
|
-
# 邮件 ✉️ (需要 SMTP 配置——见 [配置](#配置))
|
|
198
|
-
/remind email me@x.com 8:00 早安
|
|
199
|
-
/remind bindemail me@x.com # 绑定默认邮箱 → /remind email 每天8点 早安
|
|
200
|
-
/remind unbindemail
|
|
201
|
-
|
|
202
|
-
# 管理
|
|
203
|
-
/remind list
|
|
204
|
-
/remind cancel <id>
|
|
205
|
-
/remind clear
|
|
206
|
-
/remind snooze <id> 5m
|
|
207
|
-
/remind aiwatch on|off # 切换 LLM 意图识别
|
|
208
|
-
|
|
209
|
-
# 关掉某条提醒的 LLM 润色
|
|
210
|
-
/remind literal 每5分钟 喝水
|
|
20
|
+
agim # 交互式向导
|
|
21
|
+
agim start
|
|
211
22
|
```
|
|
212
23
|
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
1. **`/remind` slash** — 显式、结构化输入
|
|
216
|
-
2. **LLM 意图识别**(默认开启)— 直接说"明天早上8点提醒我开会",机器人弹"要不要为这件事设个提醒?"卡片,回复 `y` 创建
|
|
217
|
-
3. **Agent MCP 工具** — 在 claude-code / opencode (stdio) 会话里聊到未来事件时,agent 自动调 `create_reminder`。opencode (http) 走单用户 agent-asserted context 路径
|
|
24
|
+
Web 控制台:`http://localhost:3000`
|
|
218
25
|
|
|
219
|
-
|
|
26
|
+
- 对话:`/`
|
|
27
|
+
- 任务:`/tasks`
|
|
28
|
+
- 设置:`/settings`
|
|
220
29
|
|
|
221
|
-
|
|
222
|
-
- **延迟投递标记**:超过 1 小时未投递的提醒前缀加 `⏰ 延迟投递`,让用户知道 bot 离线过
|
|
30
|
+
## 如何选择 Agent 后端
|
|
223
31
|
|
|
224
|
-
|
|
32
|
+
| 场景 | 推荐路径 |
|
|
33
|
+
|---|---|
|
|
34
|
+
| 编码与复杂任务 | `claude-code` / `codex` / `opencode` / `cursor` |
|
|
35
|
+
| 低成本 API 直连 | `native` + `llmBackends` |
|
|
36
|
+
| 自定义远端执行器 | ACP (`acpAgents`) |
|
|
225
37
|
|
|
226
|
-
|
|
38
|
+
native 配置详见:`docs/llm-backends.md`
|
|
227
39
|
|
|
228
|
-
##
|
|
40
|
+
## 核心 AI 能力
|
|
229
41
|
|
|
230
|
-
|
|
42
|
+
| 能力 | 说明 | 文档 |
|
|
43
|
+
|---|---|---|
|
|
44
|
+
| 长期记忆 | facts + persona,可选向量召回 | `docs/memory-and-vector.md` |
|
|
45
|
+
| Skills | `SKILL.md` 统一技能层 | `docs/skills.md` |
|
|
46
|
+
| 长目标 | 会话级持续目标(`/goal`) | `docs/goals.md` |
|
|
47
|
+
| 心跳调度 | 周期性主动执行(`/heartbeat`) | `docs/architecture/reminders.md` |
|
|
48
|
+
| ask_user | Agent 发起结构化选择题 | `docs/ask-user.md` |
|
|
49
|
+
| 提醒 | 一次性/周期性提醒 | `docs/architecture/reminders.md` |
|
|
50
|
+
| 备忘 | 5W1H 持久记录,支持位置信息 | `docs/im-workspaces-guide.md` |
|
|
51
|
+
| A2A | Agent 间调用与可追踪链路 | `CHANGELOG.md` |
|
|
231
52
|
|
|
232
|
-
|
|
233
|
-
# Slash
|
|
234
|
-
/memo # 搜索提示 + 最近的 memo
|
|
235
|
-
/memo list # 最近 10 条
|
|
236
|
-
/memo show <id>
|
|
237
|
-
/memo delete <id>
|
|
238
|
-
/memo search 茶馆
|
|
239
|
-
/memo here [备注] # 一次性 HTTPS 链接 → 浏览器抓 GPS
|
|
240
|
-
/memo 39.9,116.4 家 # 直接给坐标 + label
|
|
241
|
-
|
|
242
|
-
# 别名:/记、/note
|
|
243
|
-
```
|
|
244
|
-
|
|
245
|
-
Agent(claude-code / opencode)能看到 5 个 MCP 工具,遇到值得记的内容**自动调用**——不用打 slash:
|
|
53
|
+
## 安全与合规
|
|
246
54
|
|
|
247
|
-
-
|
|
248
|
-
-
|
|
249
|
-
-
|
|
250
|
-
-
|
|
251
|
-
- `delete_memo`
|
|
55
|
+
- Web 默认开启 token 鉴权。
|
|
56
|
+
- 工具调用默认走审批门。
|
|
57
|
+
- 敏感路径默认拒绝访问。
|
|
58
|
+
- 海外 IM 可按需启用,国内部署可保持关闭。
|
|
252
59
|
|
|
253
|
-
|
|
60
|
+
安全详情:`docs/security-hardening.md`
|
|
254
61
|
|
|
255
|
-
|
|
62
|
+
## 常用 IM 命令
|
|
256
63
|
|
|
257
|
-
|
|
64
|
+
| 命令 | 用途 |
|
|
65
|
+
|---|---|
|
|
66
|
+
| `/cc ...` `/oc ...` `/cx ...` `/cs ...` `/na ...` | 切换/指定 agent |
|
|
67
|
+
| `/new` | 新会话 |
|
|
68
|
+
| `/model` `/models` | 查看/切换模型 |
|
|
69
|
+
| `/goal ...` | 管理长目标 |
|
|
70
|
+
| `/heartbeat ...` | 管理心跳任务 |
|
|
71
|
+
| `/remind ...` | 管理提醒 |
|
|
72
|
+
| `/memo ...` | 管理备忘 |
|
|
73
|
+
| `/job ...` `/cron ...` `/audit ...` `/stats` | 运维命令 |
|
|
74
|
+
| `/outbox ...` | 投递队列操作 |
|
|
75
|
+
| `/a2a ...` | A2A 可观测 |
|
|
258
76
|
|
|
259
|
-
|
|
77
|
+
## 最小配置示例
|
|
260
78
|
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
### 配置文件
|
|
264
|
-
`~/.agim/config.json`(启动时 zod 校验):
|
|
79
|
+
`~/.agim/config.json`
|
|
265
80
|
|
|
266
81
|
```json
|
|
267
82
|
{
|
|
268
|
-
"messengers": ["wechat-ilink"
|
|
269
|
-
"agents": ["claude-code", "
|
|
83
|
+
"messengers": ["wechat-ilink"],
|
|
84
|
+
"agents": ["claude-code", "native"],
|
|
270
85
|
"defaultAgent": "claude-code",
|
|
271
|
-
"
|
|
272
|
-
"acpAgents": [
|
|
86
|
+
"llmBackends": [
|
|
273
87
|
{
|
|
274
|
-
"name": "
|
|
275
|
-
"
|
|
276
|
-
"
|
|
88
|
+
"name": "default-native",
|
|
89
|
+
"provider": "openai-compat",
|
|
90
|
+
"baseUrl": "https://api.openai.com/v1",
|
|
91
|
+
"model": "gpt-4o-mini"
|
|
277
92
|
}
|
|
278
93
|
],
|
|
279
|
-
"
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
"name": "数据团队",
|
|
283
|
-
"agents": ["opencode", "my-agent"],
|
|
284
|
-
"members": ["user-123"],
|
|
285
|
-
"rateLimit": { "rate": 30, "intervalSec": 60, "burst": 60 }
|
|
286
|
-
}
|
|
287
|
-
]
|
|
94
|
+
"llmRoles": {
|
|
95
|
+
"cheap": "default-native"
|
|
96
|
+
}
|
|
288
97
|
}
|
|
289
98
|
```
|
|
290
99
|
|
|
291
|
-
|
|
100
|
+
密钥与配置文件分离存储。
|
|
292
101
|
|
|
293
|
-
|
|
102
|
+
## 运维与架构
|
|
294
103
|
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
export IMHUB_SMTP_PASS=<16位应用专用密码> # 不是登录密码
|
|
300
|
-
|
|
301
|
-
# 可选
|
|
302
|
-
export IMHUB_SMTP_PORT=465 # 默认 465
|
|
303
|
-
export IMHUB_SMTP_FROM=you@gmail.com # 默认 = USER
|
|
304
|
-
export IMHUB_SMTP_SECURE=auto # auto | true | false
|
|
305
|
-
```
|
|
306
|
-
|
|
307
|
-
**常见邮箱配置参考**:
|
|
104
|
+
- 部署:`docs/deployment.md`
|
|
105
|
+
- 运维手册:`docs/runbook.md`
|
|
106
|
+
- 架构立场:`docs/architecture-bridge-and-native.md`
|
|
107
|
+
- 版本记录:`CHANGELOG.md`
|
|
308
108
|
|
|
309
|
-
|
|
310
|
-
|-------|------|------|------|
|
|
311
|
-
| Gmail | `smtp.gmail.com` | 465 | 用 [应用专用密码](https://myaccount.google.com/apppasswords),需先开两步验证 |
|
|
312
|
-
| QQ 邮箱 | `smtp.qq.com` | 465 | 设置 → 账号 → POP3/SMTP 服务 → 授权码 |
|
|
313
|
-
| 163 邮箱 | `smtp.163.com` | 465 | 设置 → POP3/SMTP/IMAP → 授权码 |
|
|
314
|
-
| Outlook | `smtp-mail.outlook.com` | 587 | 设 `IMHUB_SMTP_SECURE=false`(STARTTLS) |
|
|
315
|
-
| 企业邮箱 | 厂商提供 | 任意 | `SECURE` 按厂商文档设 |
|
|
109
|
+
## 文档导航
|
|
316
110
|
|
|
317
|
-
|
|
111
|
+
请从 `docs/README.md` 开始。
|
|
318
112
|
|
|
319
|
-
|
|
320
|
-
```ini
|
|
321
|
-
[Service]
|
|
322
|
-
Environment="IMHUB_SMTP_HOST=smtp.gmail.com"
|
|
323
|
-
Environment="IMHUB_SMTP_USER=you@gmail.com"
|
|
324
|
-
Environment="IMHUB_SMTP_PASS=xxxxxxxxxxxxxxxx"
|
|
325
|
-
```
|
|
113
|
+
## 迁移说明
|
|
326
114
|
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
| 变量 | 默认值 | 作用 |
|
|
330
|
-
|------|--------|------|
|
|
331
|
-
| `IMHUB_WEB_BIND` | `127.0.0.1` | Web UI 监听地址(设 `0.0.0.0` 对外暴露,建议前面挂 HTTPS 反代) |
|
|
332
|
-
| `IMHUB_APPROVAL_DISABLED` | 未设 | 设 `=1` 跳过工具调用人审 |
|
|
333
|
-
| `IMHUB_OPENCODE_DRIVER` | `stdio` | 设 `http` 启用 HTTP driver(更快,但 reminder MCP 路径会走单用户 agent-asserted context) |
|
|
334
|
-
| `IMHUB_OPENCODE_GATE` | `medium` | `strict` / `loose` / `none` — opencode 权限闸 |
|
|
335
|
-
| `IM_HUB_LLM_JUDGE_AGENT` | 未设 | 路由分类失败时用作兜底的 LLM judge agent 名 |
|
|
336
|
-
| `OPENAI_API_KEY` | 未设 | 启用 OpenAI Whisper 做语音转写 |
|
|
337
|
-
| `IMHUB_WHISPERCPP_BIN` + `IMHUB_WHISPERCPP_MODEL` | 未设 | 本地 Whisper.cpp 转写(不走云) |
|
|
338
|
-
| `IMHUB_BAIDU_MAP_AK` | 未设 | 百度地图 AK;启用 `/memo` 地址→坐标 geocoding 路径。不设置时直接给坐标和浏览器抓 GPS 不受影响。 |
|
|
339
|
-
| `IMHUB_LOC_BASE_URL` | `https://agent.iclaw.host` | `/memo here` H5 抓 GPS 链接的公开 HTTPS 域名。自托管时改成自己的域。 |
|
|
340
|
-
| `IMHUB_TZ_OFFSET_HOURS` | `8` | memo 时间戳的 UTC 偏移(默认 Asia/Shanghai)。仅当部署在其他时区时调整。 |
|
|
341
|
-
| `IMHUB_TELEGRAM_COORDS_GCJ02` | 未设 | 设 `1` 对 Telegram 原生位置/venue 消息做 GCJ-02 → WGS-84 转换。默认关(直通),适合 Telegram Desktop / Android-without-China-GMS / 海外用户。如果你的 Telegram 客户端是国内 iOS 设备(Core Location 会加 GCJ 偏移),打开它。 |
|
|
342
|
-
| `IMHUB_H5_COORDS_GCJ02` | 未设 | 设 `1` 对 `/memo here` H5 抓 GPS 的坐标做 GCJ-02 → WGS-84 转换。默认关(直通),匹配微信 X5 / Android Chrome 直给 WGS-84 的常见情况。如果你的用户主要在 iOS Safari / iOS WebKit 国内打开 H5 链接(Apple 会加 GCJ 偏移),打开它。完整每平台策略见 [`src/core/coord-systems.ts`](src/core/coord-systems.ts)。 |
|
|
343
|
-
| `AGIM_HOME` | 自动 | 用户级配置/数据目录。全新安装默认 `~/.agim/`;从 0.x 升级则自动用现有的 `~/.agim/`。如果想固定到具体位置(多机共享、测试场景),显式设置即可。也认旧的 `IMHUB_HOME`。 |
|
|
344
|
-
| `AGIM_WORKSPACES` | 自动 | per-agent 工作区目录。与 `AGIM_HOME` 一样的双探测(优先 `~/.agim-workspaces/`,存在 `~/.agim-workspaces/` 时用它)。也认 `IMHUB_WORKSPACES`。 |
|
|
345
|
-
|
|
346
|
-
## 架构
|
|
115
|
+
历史安装保持兼容:
|
|
347
116
|
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
│ Telegram (grammy + 图片/语音/音频) │
|
|
352
|
-
│ 飞书 (Lark SDK WebSocket) │
|
|
353
|
-
│ 钉钉 (Stream WebSocket + 服务端 ASR) │
|
|
354
|
-
│ Discord (discord.js Gateway) │
|
|
355
|
-
│ Web Chat (浏览器 WebSocket) │
|
|
356
|
-
└───────────────────────┬──────────────────────────┘
|
|
357
|
-
│ MessageContext
|
|
358
|
-
▼
|
|
359
|
-
┌── 路由前置 gates ─────────────────┐
|
|
360
|
-
│ workspace · 限流器 · traceId │
|
|
361
|
-
└────────────────┬──────────────────┘
|
|
362
|
-
▼
|
|
363
|
-
┌── 意图路由 ───────────────────────┐
|
|
364
|
-
│ 命令 → 内置处理 │
|
|
365
|
-
│ /agent → 显式切换 │
|
|
366
|
-
│ 默认 → 分类(正则/关键词/ │
|
|
367
|
-
│ Sticky/LLM 兜底) │
|
|
368
|
-
└────────────────┬──────────────────┘
|
|
369
|
-
▼
|
|
370
|
-
┌── Agent 调用 ─────────────────────┐
|
|
371
|
-
│ 断路器 + spawn stream │
|
|
372
|
-
└───┬──────┬──────┬──────┬──────┬───┘
|
|
373
|
-
▼ ▼ ▼ ▼ ▼
|
|
374
|
-
claude opencode codex ACP
|
|
375
|
-
│
|
|
376
|
-
▼ (工具审批)
|
|
377
|
-
MCP sidecar → approvalBus → IM 会话
|
|
378
|
-
|
|
379
|
-
┌─ Cross-cutting ──────────────────────────────────┐
|
|
380
|
-
│ SQLite(审计 · 任务 · 调度) │
|
|
381
|
-
│ 会话(append-only JSONL) │
|
|
382
|
-
│ Prometheus 指标 · pino 结构化日志 │
|
|
383
|
-
└──────────────────────────────────────────────────┘
|
|
384
|
-
```
|
|
385
|
-
|
|
386
|
-
单进程,零外部依赖——SQLite + 会话文件就是全部持久化层。
|
|
387
|
-
|
|
388
|
-
深入架构详见 [`docs/architecture/current.md`](docs/architecture/current.md)。
|
|
389
|
-
原生 LLM 栈与「CLI agent / in-process loop 都是 `AgentAdapter` 的 peer」的设计立场,详见 [`docs/architecture-bridge-and-native.md`](docs/architecture-bridge-and-native.md);nanobot vs agim 比较计划的 PR 落地顺序见 [`docs/nanobot-comparison-rollout.md`](docs/nanobot-comparison-rollout.md)。
|
|
390
|
-
|
|
391
|
-
## 环境要求
|
|
392
|
-
|
|
393
|
-
- **Node.js ≥ 18**(推荐 ≥ 22 LTS)
|
|
394
|
-
- 至少一个 Agent CLI 或 ACP 端点:
|
|
395
|
-
- `npm i -g @anthropic-ai/claude-code`
|
|
396
|
-
- `npm i -g @openai/codex`
|
|
397
|
-
- `npm i -g opencode-ai`
|
|
117
|
+
- 旧命令别名可继续使用
|
|
118
|
+
- 旧环境变量命名继续兼容
|
|
119
|
+
- 旧数据目录会自动识别
|
|
398
120
|
|
|
399
121
|
## 开发
|
|
400
122
|
|
|
401
123
|
```bash
|
|
402
|
-
git clone https://github.com/benking007/
|
|
403
|
-
|
|
404
|
-
npm
|
|
405
|
-
npm
|
|
406
|
-
npm
|
|
407
|
-
npm run lint
|
|
408
|
-
npm run typecheck
|
|
124
|
+
git clone https://github.com/benking007/agim.git
|
|
125
|
+
cd agim
|
|
126
|
+
npm install --no-package-lock
|
|
127
|
+
npm --prefix src/web-app install
|
|
128
|
+
npm run build
|
|
129
|
+
npm run lint
|
|
130
|
+
npm run typecheck
|
|
131
|
+
npm test
|
|
409
132
|
```
|
|
410
133
|
|
|
411
|
-
## 部署
|
|
412
|
-
|
|
413
|
-
systemd、Docker、nginx、监控、管理员管理、备份、升级详见 [`docs/deployment.md`](docs/deployment.md)。长期记忆 + 向量召回的启用 / 调优 / 隐私见 [`docs/memory-and-vector.md`](docs/memory-and-vector.md)。
|
|
414
|
-
|
|
415
|
-
## 路线图
|
|
416
|
-
|
|
417
|
-
### 已完成
|
|
418
|
-
|
|
419
|
-
| 版本 | 主题 |
|
|
420
|
-
|------|------|
|
|
421
|
-
| v0.1.x | MVP — 微信 + 4 种 Agent + 命令路由 |
|
|
422
|
-
| v0.2.0 | 多 IM — 飞书、Telegram、会话持久化、ACP |
|
|
423
|
-
| v0.2.13 | 基础设施 — 日志、审计、意图、任务、指标、工作区 |
|
|
424
|
-
| v0.2.14 | 工具调用人审(HITL) |
|
|
425
|
-
| v0.2.15 | Discord 适配器 + 任务面板 |
|
|
426
|
-
| v0.2.16–17 | 安全收口 + 可观测 |
|
|
427
|
-
| v0.2.18–19 | IM 重连退避、Codex sandbox、仪表盘过滤 |
|
|
428
|
-
| v0.2.20–23 | Web 控制台 — 主题、审批、SSE、文件、批量操作 |
|
|
429
|
-
| v0.2.30 | 生产硬化 — 会话隔离、WS 串行、回环监听 |
|
|
430
|
-
| v0.2.35 | 微信和 Telegram 富媒体 — 图片 / 文件 / 语音 / 视频 |
|
|
431
|
-
| v0.2.37 | 提醒子系统 — `/remind`、LLM 意图识别 + 润色、Agent MCP 工具、邮件通道、Web `/reminders`、微信 context_token 持久化 |
|
|
432
|
-
| v0.3.0 | `/memo` 5W1H 持久记忆库 — `/location` → `/memo` 改名、地址 geocoding 接百度地图、opencode HTTP driver SSE 修复 |
|
|
433
|
-
| v0.3.1 | Telegram + 飞书原生位置消息接入、所有渠道 GCJ-02 → WGS-84 修正、`memo` 列保存原话 + LLM/启发式 `what` 提取 |
|
|
434
|
-
| v0.4.0 | codex 接入完整 imhub MCP 工具表(reminder + memo);Telegram + 飞书位置消息改走 agent-driven 决策(对齐微信 H5 架构) |
|
|
435
|
-
| v0.5.0–0.5.2 | `agim` 双语方向键向导(当时叫 `im-hub-pro`);按渠道独立配置(微信扫码、飞书 / Telegram / Discord 凭据输入;agent CLI 安装态实时探测);systemd unit env fallback;完整服务生命周期命令(`status / start --bg / restart / stop / uninstall`) |
|
|
436
|
-
| v0.6.0 | 钉钉 Stream 模式适配器——WebSocket 双向桥、图片消息(`messageFiles/download` → claude-code 多模态 Read)、语音消息(钉钉服务端 ASR `recognition`,whisper.cpp 兜底) |
|
|
437
|
-
| v0.6.3 | 各平台原生位置消息的坐标系按来源处理(Telegram 改为 WGS 直通;H5 改为 WGS 直通解决微信 X5 的偏移;钉钉 link 中的百度地图 URL 走 BD-09→WGS) |
|
|
438
|
-
| **v1.0.0** | 品牌升级为 **Agim · 阿吉姆**。新主命令 `agim`,老命令 `im-hub-pro` 保留为废弃别名。配置目录 / 环境变量 / HTTP 头 / systemd 单元名都保留以兼容 0.x 部署。 |
|
|
439
|
-
| v1.1.2–1.1.3 | A2A L1(调用链可视化)+ L2(Agent 之间共享 artifact 池) |
|
|
440
|
-
| v1.1.4 | Web 仪表盘双语 + 专业名词 (?) 帮助弹窗 |
|
|
441
|
-
| v1.1.6–1.1.8 | IM 长消息 viewer + cloudflared 自动开隧道 |
|
|
442
|
-
| v1.1.10 | Web 控制台 token 鉴权(cookie + Bearer + loopback 旁路);重启消息顺序修复 |
|
|
443
|
-
| v1.1.11 | Viewer 暗黑模式可读性修复 |
|
|
444
|
-
| **v1.2.0** | **长期记忆**(SQLite + FTS5 + 记忆画像 + 4 个 MCP 工具 + 自动蒸馏 + Web 管理 Tab);**向量召回**(本地 BGE / OpenAI 兼容、RRF 融合);**成本与健康仪表盘**;**Agent 主动推送**(`mcp__imhub__push_message`);带原生内联按钮的崩溃恢复卡片 |
|
|
445
|
-
| v1.2.1 | 向量后端重启后自动加载;Memory + Cost tab 中文 i18n |
|
|
446
|
-
| v1.2.2 | `agim admin invite` 通过 IM 邀请新管理员;向量后端 boot 时主动 warm;consolidate 改异步(jobId + 轮询) |
|
|
447
|
-
| v1.2.27–v1.2.32 | R14/R15 生命周期加固——25s 优雅退出硬截止、端口先释放、reap stray agim 进程、`findAgimProcesses` argv-strict /proc 扫描、每次成功 start 都写 PID 文件、CLI 向导新增 "Web bind+port" 段、ACP 端口 gate(`IMHUB_ENABLE_REMOTE_AGENT`) |
|
|
448
|
-
| **v1.3.0** | **nanobot vs agim 比较计划全量落地** —— `native` in-process AgentAdapter(LLM client + agent loop + 外挂 MCP + 策略式审批门,OpenAI/Anthropic 兼容);`llmBackends` + `llmRoles` + `~/.agim/llm-secrets.json` 配置;`/goal` 会话级长目标(P0 #2);`/heartbeat` 3 阶段调度(P0 #1);`mcp__imhub__ask_user` 结构化选择题(P0 #5);agim Skills 3 层引擎(Stage 3 + P0 #3);记忆事实行内年龄注释(P0 #4);`mcp__imhub__push_message` 的通知评估门(P0 #9);`/router compare` A/B 评测(Stage 5);`tryIntrospectChain` fallback 助手;Web 后台 `/settings/{llm,mcp,native-agent,agim-skills}` + `/tasks/{heartbeat,goals,asks}` 全新页面;CLI 向导 `agim setup {llm,mcp}` + 诊断 `agim diag {llm,mcp}` + `agim setup llm native-enable` 快捷通道;CLI + Web 所有新增面板的中英 i18n;`acp-token` 与 `web-token` 分离;`agim token bootstrap` 输出器;`gen-endpoints --check` drift guard。详见 [`docs/nanobot-comparison-rollout.md`](docs/nanobot-comparison-rollout.md) |
|
|
449
|
-
|
|
450
|
-
### 接下来
|
|
451
|
-
|
|
452
|
-
- [ ] Slack 适配器
|
|
453
|
-
- [ ] 钉钉卡片按钮版审批(飞书已完成)
|
|
454
|
-
- [ ] 多实例事件总线(Redis Streams / NATS)
|
|
455
|
-
- [ ] 工作区成员选择 UI
|
|
456
|
-
- [ ] 记忆 consolidation:boot 后 5 分钟先跑一次(当前要等满 24h)
|
|
457
|
-
|
|
458
|
-
## 社区
|
|
459
|
-
|
|
460
|
-
<p align="center">
|
|
461
|
-
<a href="https://deepseek.club/community/imhub">
|
|
462
|
-
<img src="https://deepseek.club/assets/logo-DH6LfKkF.png" style="width: 150px; height: auto;" alt="DeepSeek">
|
|
463
|
-
</a>
|
|
464
|
-
</p>
|
|
465
|
-
|
|
466
134
|
## 许可证
|
|
467
135
|
|
|
468
136
|
MIT
|
package/dist/cli-ui/tui/app.d.ts
CHANGED
|
@@ -13,11 +13,15 @@ interface AppProps {
|
|
|
13
13
|
id: string;
|
|
14
14
|
agent?: string;
|
|
15
15
|
messages: ChatMessage[];
|
|
16
|
+
createdAt?: string;
|
|
17
|
+
agentSessions?: Record<string, string>;
|
|
16
18
|
};
|
|
17
19
|
/** Stable session id — generated upstream and printed on exit so
|
|
18
20
|
* user can `agim tui --resume <id>` next time. */
|
|
19
21
|
sessionId: string;
|
|
22
|
+
/** Notify entry so exit hint prints the latest in-app session id. */
|
|
23
|
+
onSessionIdChange?: (id: string) => void;
|
|
20
24
|
}
|
|
21
|
-
export declare function TuiApp({ initialAgent, resumed, sessionId }: AppProps): JSX.Element;
|
|
25
|
+
export declare function TuiApp({ initialAgent, resumed, sessionId, onSessionIdChange }: AppProps): JSX.Element;
|
|
22
26
|
export {};
|
|
23
27
|
//# sourceMappingURL=app.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../../../src/cli-ui/tui/app.tsx"],"names":[],"mappings":"AAqCA,MAAM,WAAW,WAAW;IAC1B,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,QAAQ,CAAA;IACrC,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;
|
|
1
|
+
{"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../../../src/cli-ui/tui/app.tsx"],"names":[],"mappings":"AAqCA,MAAM,WAAW,WAAW;IAC1B,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,QAAQ,CAAA;IACrC,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AA4ED,UAAU,QAAQ;IAChB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,uDAAuD;IACvD,OAAO,CAAC,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,WAAW,EAAE,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE,CAAA;IAC7H;uDACmD;IACnD,SAAS,EAAE,MAAM,CAAA;IACjB,qEAAqE;IACrE,iBAAiB,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAA;CACzC;AAkDD,wBAAgB,MAAM,CAAC,EAAE,YAAY,EAAE,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,EAAE,QAAQ,GAAG,GAAG,CAAC,OAAO,CAsxBrG"}
|