@offerpilot/axiomruntime 0.0.4 → 0.0.5
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/README.md +233 -111
- package/dist/core/integrations/codex-provider-config.js +7 -3
- package/docs/USAGE.html +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -1,183 +1,305 @@
|
|
|
1
|
-
# AxiomRuntime
|
|
1
|
+
# AxiomRuntime
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
> 一条命令管理 Claude Code 和 Codex CLI 的多 Provider 运行环境。
|
|
4
4
|
|
|
5
|
-
Runtime
|
|
5
|
+
AxiomRuntime 是一个以 CLI 为核心的本地 AI Runtime 基础层。它不提供模型,也不替代 Claude Code 或 Codex CLI,而是把多个 Provider(官方 API、中转站或其他兼容服务)集中管理,再以**每次进程独立注入**的方式启动原生 CLI。
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
它最适合这样的工作方式:同时开多个终端窗口,每个窗口使用不同的 Provider 或模型;需要时再从 Telegram 远程启动任务。窗口之间互不覆盖配置,AxiomRuntime 也不会接管你的原生 Claude Code / Codex 配置。
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
## 先看实现状态
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
README 需要区分“已经能用”和“只是规划”。下面的状态以当前仓库代码和 npm `0.0.5` 为准:
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
| 标记 | 含义 |
|
|
14
|
+
|---|---|
|
|
15
|
+
| ✅ | 已实现,并随 npm `0.0.5` 提供 |
|
|
16
|
+
| 🟡 | 有可用实现,但能力范围或接入面仍有限制 |
|
|
17
|
+
| 🚧 | 尚未实现,仅代表后续方向 |
|
|
14
18
|
|
|
15
|
-
|
|
|
16
|
-
|
|
17
|
-
|
|
|
18
|
-
|
|
|
19
|
-
|
|
|
19
|
+
| 能力 | npm `0.0.5` | 当前源码 | 说明 |
|
|
20
|
+
|---|---:|---:|---|
|
|
21
|
+
| Provider 增删改查、模型发现、优先级 | ✅ | ✅ | `ai provider`、`ai status` |
|
|
22
|
+
| Claude Code / Codex 启动与运行时 fallback | ✅ | ✅ | 按健康度、兼容模型和 `level` 选择 |
|
|
23
|
+
| 多窗口使用不同 Provider,互不影响 | ✅ | ✅ | 配置只注入对应子进程 |
|
|
24
|
+
| 不修改原生 Claude / Codex 配置 | ✅ | ✅ | `ai use` 的默认行为 |
|
|
25
|
+
| 用量统计、成本展示、会话和报告 | ✅ | ✅ | 记录新产生的请求,不补录历史 |
|
|
26
|
+
| Telegram 远程执行与多 Bot 隔离 | ✅ | ✅ | 带进度、审批、附件和 Provider 管理 |
|
|
27
|
+
| 图片生成 | ✅ | ✅ | OpenAI-compatible Images API |
|
|
28
|
+
| `ai set codex` 持久配置 Codex App | ✅ | ✅ | 这是显式修改原生配置的命令 |
|
|
29
|
+
| 本地 HTTP Runtime API | ✅ | ✅ | Bearer 鉴权,适合本机集成 |
|
|
30
|
+
| Telegram 显式记忆 | 🟡 | 🟡 | `/remember` 等命令可用,普通聊天不会自动记忆 |
|
|
31
|
+
| 自动记忆、向量检索、终端记忆 | 🚧 | 🚧 | embedding 配置已就绪,入库和召回尚未接入 |
|
|
32
|
+
| 加密凭证、Skill 沉淀、学习治理、插件和 Web 界面 | 🚧 | 🚧 | 仍是后续路线,不要按已实现能力使用 |
|
|
20
33
|
|
|
21
|
-
|
|
34
|
+
如果你通过 npm 安装,实际可用的是 npm `0.0.5` 那一列;README 会随功能发布同步更新。
|
|
22
35
|
|
|
23
|
-
|
|
36
|
+
## 它解决什么问题
|
|
24
37
|
|
|
25
|
-
|
|
38
|
+
### 1. Provider 管理从“手改配置”变成一条命令
|
|
26
39
|
|
|
27
|
-
|
|
28
|
-
- 演进中:统一 Runtime 执行上下文、自动学习与记忆治理、Skill/Capability 生命周期、插件体系。
|
|
29
|
-
- 长期方向:组织与租户隔离、能力注册与共享、外部系统集成、Web/Desktop/API 治理界面。
|
|
40
|
+
你可以把多个 API Provider 放进统一配置中,记录名称、Base URL、API Key、默认模型、模式和优先级:
|
|
30
41
|
|
|
31
|
-
|
|
42
|
+
```bash
|
|
43
|
+
ai provider add main https://api.example.com sk-xxx
|
|
44
|
+
ai provider add backup https://backup.example.com sk-yyy
|
|
45
|
+
ai provider list
|
|
46
|
+
ai status
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
添加时会测试连通性、探测模型并建立缓存。`ai use` 会根据 Provider 健康状态、当前 CLI 可兼容的模型和 `level` 顺序选择候选;实际子进程非零退出时,还会继续尝试下一个 Provider。
|
|
32
50
|
|
|
33
|
-
|
|
51
|
+
### 2. 多开窗口,每个窗口使用不同 Provider
|
|
34
52
|
|
|
35
|
-
|
|
53
|
+
这是 AxiomRuntime 的核心使用体验:
|
|
36
54
|
|
|
37
55
|
```bash
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
56
|
+
# 窗口 A:主力 Provider
|
|
57
|
+
ai use claude main
|
|
58
|
+
|
|
59
|
+
# 窗口 B:备用 Provider + 指定模型
|
|
60
|
+
ai use claude backup claude-opus-4-6
|
|
61
|
+
|
|
62
|
+
# 窗口 C:Codex 使用另一家 Provider
|
|
63
|
+
ai use codex fenno gpt-5.5
|
|
42
64
|
```
|
|
43
65
|
|
|
44
|
-
|
|
66
|
+
每次 `ai use` 都为对应子进程单独准备路由和凭证。不同窗口的 Provider、模型和运行状态不会互相覆盖;并行数量只受本机资源和上游额度影响。
|
|
67
|
+
|
|
68
|
+
### 3. 与 Claude Code、Codex 的原生配置保持独立
|
|
45
69
|
|
|
46
|
-
`ai
|
|
70
|
+
`ai use` 是临时注入,不是全局切换:
|
|
47
71
|
|
|
48
|
-
|
|
72
|
+
- **Claude Code**:生成临时 `--settings` 文件,注入 `ANTHROPIC_BASE_URL`、`ANTHROPIC_API_KEY` 和模型,进程结束后清理;不修改 `~/.claude/settings.json`。
|
|
73
|
+
- **Codex CLI**:通过本次进程的 `-c model_provider=...`、Provider 的 `base_url` 和 `env_key`,配合进程级 `OPENAI_API_KEY` 环境变量完成路由;不修改全局 `auth.json` 或 `config.toml`。Codex 本身也支持环境变量,AxiomRuntime 只是把它们限制在当前进程内。
|
|
74
|
+
- **直接运行原生命令**:你仍然可以直接执行 `claude` 或 `codex`,它们继续使用自己的原生配置,不受 `ai use` 影响。
|
|
49
75
|
|
|
50
|
-
|
|
76
|
+
只有明确执行 `ai set codex` 时,AxiomRuntime 才会按你的选择持久写入 Codex 配置。这个命令与日常的临时启动是两条不同路径。
|
|
51
77
|
|
|
52
|
-
|
|
78
|
+
### 4. Telegram 远程控制
|
|
53
79
|
|
|
54
|
-
|
|
80
|
+
在手机上发一条消息,让本机的 Claude Code 或 Codex 执行任务,并把进度、结果、文件和图片发回 Telegram。它不是完成通知,而是一个真正的远程执行入口:
|
|
81
|
+
|
|
82
|
+
- 多 Bot 配置、进程、日志、会话数据库相互隔离
|
|
83
|
+
- 默认白名单鉴权;高风险 `/terminal` 命令必须二次确认
|
|
84
|
+
- 长任务编辑同一条进度消息,显示阶段、工具和回答预览
|
|
85
|
+
- 支持附件、图片、最近对话、引用和固定上下文
|
|
86
|
+
- `/provider` 可直接在手机上查看、添加、编辑、删除和检查 Provider
|
|
87
|
+
- Telegram 使用同一套顶层 Provider 配置和用量账本,不维护另一套路由规则
|
|
88
|
+
|
|
89
|
+
### 5. 看见用量,而不是凭感觉猜成本
|
|
90
|
+
|
|
91
|
+
Claude Code 和 Codex 的请求会经过本次执行专属的本地用量代理。Runtime 读取 Provider 返回的真实 token 和成本,写入同一份 `usage.json`:
|
|
92
|
+
|
|
93
|
+
- 有 Provider 返回的 `cost_usd` 时优先使用真实成本
|
|
94
|
+
- 只有 token、没有成本时,才按 `model-pricing.json` 估算
|
|
95
|
+
- 没有价格配置时显示未知,不伪造精确数字
|
|
96
|
+
- 安装 AxiomRuntime 之前产生的历史请求不会被扫描补录
|
|
97
|
+
|
|
98
|
+
## 已发布功能
|
|
99
|
+
|
|
100
|
+
### 安装与初始化
|
|
101
|
+
|
|
102
|
+
运行环境要求 Node.js `22.19.0` 或更高版本,Node.js 20 不支持。Claude Code 和 Codex CLI 是外部依赖,不会被打包进 AxiomRuntime。
|
|
55
103
|
|
|
56
104
|
```bash
|
|
57
|
-
|
|
58
|
-
|
|
105
|
+
node --version
|
|
106
|
+
npm install --global @offerpilot/axiomruntime
|
|
59
107
|
ai --version
|
|
60
108
|
ai setup
|
|
61
109
|
```
|
|
62
110
|
|
|
63
|
-
|
|
111
|
+
`ai setup` 会创建 `~/.ai-gateway/`,引导添加第一个 Provider,测试连通性、探测模型,并询问是否安装缺失的 Claude Code / Codex。
|
|
64
112
|
|
|
65
|
-
|
|
113
|
+
无人值守场景可以使用:
|
|
66
114
|
|
|
67
115
|
```bash
|
|
68
|
-
|
|
116
|
+
ai setup --yes --skip-tools
|
|
117
|
+
ai setup --yes --install-tools
|
|
118
|
+
ai setup --skip-provider
|
|
69
119
|
```
|
|
70
120
|
|
|
71
|
-
|
|
121
|
+
如果 npm 报 `EBADENGINE`,请先升级 Node.js,再重新安装,不要忽略警告继续运行。
|
|
72
122
|
|
|
73
|
-
|
|
123
|
+
### Provider、启动与诊断
|
|
74
124
|
|
|
75
|
-
|
|
125
|
+
```bash
|
|
126
|
+
ai add # 交互式添加 Provider
|
|
127
|
+
ai provider add <name> <base-url> <api-key>
|
|
128
|
+
ai provider list # 只读配置,不联网
|
|
129
|
+
ai provider edit
|
|
130
|
+
ai provider delete <name>
|
|
131
|
+
|
|
132
|
+
ai status # 刷新健康度、模型缓存和用量
|
|
133
|
+
ai use claude [provider] [model]
|
|
134
|
+
ai use codex [provider] [model]
|
|
135
|
+
ai last # 沿用上次选择
|
|
136
|
+
ai doctor # 检查并安全修复内部状态
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
`ai status` 默认只做连通性和模型检查,不发真实对话请求。`ai doctor` 可以重建缺失或损坏的缓存、用量和会话文件,但 Provider 配置无效时只报告,不会覆盖凭证。
|
|
140
|
+
|
|
141
|
+
### 会话、日志、上下文与图片
|
|
76
142
|
|
|
77
143
|
```bash
|
|
78
|
-
ai
|
|
79
|
-
ai
|
|
144
|
+
ai session list
|
|
145
|
+
ai session resume <session-id>
|
|
146
|
+
ai session clear
|
|
147
|
+
ai report
|
|
148
|
+
ai report --print <session-id>
|
|
149
|
+
ai log --print 100
|
|
150
|
+
ai context --print
|
|
151
|
+
|
|
152
|
+
ai image # 交互选择 Provider、模型和提示词
|
|
153
|
+
ai image <provider> "一只戴墨镜的猫"
|
|
154
|
+
ai image <provider> <model> "数字插画"
|
|
80
155
|
```
|
|
81
156
|
|
|
82
|
-
|
|
157
|
+
图片生成调用已配置 Provider 的 OpenAI-compatible `/v1/images/generations`。`b64_json` 会以 `0600` 权限保存到当前目录;远程 `https` 图片只输出 URL,不会自动下载不受信任的地址。图片请求最长等待 120 秒,失败后会尝试下一个兼容 Provider。
|
|
158
|
+
|
|
159
|
+
### Codex App 的持久配置
|
|
160
|
+
|
|
161
|
+
如果需要让 Codex App 或直接执行的 `codex` 持续使用某个 Provider,显式运行:
|
|
83
162
|
|
|
84
163
|
```bash
|
|
85
|
-
|
|
164
|
+
ai set codex provider <provider> <gpt-model>
|
|
165
|
+
ai set codex provider <provider>
|
|
166
|
+
ai set codex chatgpt
|
|
167
|
+
ai set codex proxy 127.0.0.1:7890
|
|
168
|
+
ai set codex proxy off
|
|
86
169
|
```
|
|
87
170
|
|
|
88
|
-
|
|
171
|
+
这条命令会原子更新 Codex 的 `config.toml` / `auth.json`,保留无关配置,失败时回滚;macOS 上会尝试重启 Codex App,并清理重启进程继承的 `OPENAI_API_KEY`,避免旧凭证覆盖刚选择的 Provider。切换到自定义 Provider 会替换当前 ChatGPT token,切回官方账号时需要重新登录。
|
|
172
|
+
|
|
173
|
+
### Telegram Bot
|
|
89
174
|
|
|
90
175
|
```bash
|
|
91
|
-
|
|
176
|
+
ai telegram add ops
|
|
177
|
+
ai telegram config set token <bot-token> --bot ops
|
|
178
|
+
ai telegram config set allowedUserIds <telegram-user-id> --bot ops
|
|
179
|
+
ai telegram start --bot ops
|
|
92
180
|
```
|
|
93
181
|
|
|
94
|
-
|
|
182
|
+
常用管理命令:
|
|
95
183
|
|
|
96
|
-
|
|
184
|
+
```bash
|
|
185
|
+
ai telegram list
|
|
186
|
+
ai telegram status --bot ops
|
|
187
|
+
ai telegram logs --bot ops -f
|
|
188
|
+
ai telegram edit --bot ops
|
|
189
|
+
ai telegram stop --bot ops
|
|
190
|
+
ai telegram delete --bot ops
|
|
191
|
+
```
|
|
97
192
|
|
|
98
|
-
|
|
99
|
-
- `POST /v1/agent/runs`:复用 Telegram 背后的 Claude/Codex Engine。只接受受控 `workspace_id`,默认 `read_only`,服务端限制并发和超时。
|
|
100
|
-
- `GET /health/live`、`/health/ready`:不含 Secret 的存活与就绪检查;其他接口必须使用 Bearer Token。
|
|
193
|
+
Bot 中可使用 `/claude`、`/codex`、`/reset`、`/fresh`、`/cwd`、`/config`、`/provider`、`/usage`、`/remember`、`/forget`、`/memories`、`/pin`、`/unpin`、`/terminal`、`/restart` 和 `/help`。如果本机无法直连 Telegram API,可设置:
|
|
101
194
|
|
|
102
195
|
```bash
|
|
103
|
-
|
|
104
|
-
AI_GATEWAY_SERVER_TOKEN='replace-me' npm run server
|
|
196
|
+
ai telegram config set proxyUrl http://127.0.0.1:7890 --bot ops
|
|
105
197
|
```
|
|
106
198
|
|
|
107
|
-
|
|
199
|
+
## 🟡 记忆:现在能做什么、不能做什么
|
|
108
200
|
|
|
109
|
-
|
|
201
|
+
当前记忆能力只接入 Telegram,且以**显式操作**为主:
|
|
110
202
|
|
|
111
|
-
```
|
|
112
|
-
|
|
203
|
+
```text
|
|
204
|
+
/remember 记住:这个项目使用 pnpm
|
|
205
|
+
/memories
|
|
206
|
+
/forget <memory-id>
|
|
113
207
|
```
|
|
114
208
|
|
|
115
|
-
|
|
209
|
+
已经实现:
|
|
210
|
+
|
|
211
|
+
- Telegram 中的 `global` / `bot` 两级 scope
|
|
212
|
+
- 显式新增、查看、删除和固定记忆
|
|
213
|
+
- 最近会话与可见记忆注入当前 Telegram prompt
|
|
214
|
+
- SQLite 存储和短期记忆 TTL
|
|
215
|
+
- embedding Provider 的配置和连通性检查
|
|
216
|
+
|
|
217
|
+
尚未实现:
|
|
218
|
+
|
|
219
|
+
- 普通聊天自动抽取和自动写入
|
|
220
|
+
- 终端 `ai use` 的记忆接入
|
|
221
|
+
- 向量入库、向量召回和语义搜索
|
|
222
|
+
- Claim / Evidence 权威账本、多源召回、冲突与时序处理
|
|
223
|
+
- credential 类记忆的安全存储
|
|
224
|
+
|
|
225
|
+
因此,`ai memory embedding` 目前只是为未来检索准备模型配置;它不会让当前记忆自动变成向量搜索。
|
|
226
|
+
|
|
227
|
+
## 本地 Runtime API
|
|
228
|
+
|
|
229
|
+
从源码构建后,可以启动带 Bearer 鉴权的本地 HTTP 服务:
|
|
116
230
|
|
|
117
231
|
```bash
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
ai help
|
|
122
|
-
ai provider add
|
|
123
|
-
ai provider list
|
|
124
|
-
ai provider edit
|
|
125
|
-
ai provider delete
|
|
126
|
-
ai set codex chatgpt
|
|
127
|
-
ai set codex provider 51talk-cq gpt-5.6-sol
|
|
128
|
-
ai set codex provider 51talk-cq
|
|
129
|
-
ai set codex proxy 127.0.0.1:7890
|
|
130
|
-
ai telegram
|
|
131
|
-
ai telegram list
|
|
132
|
-
ai telegram start --bot ops
|
|
133
|
-
ai telegram status --bot ops
|
|
134
|
-
ai status
|
|
135
|
-
ai log
|
|
136
|
-
ai log --print
|
|
137
|
-
ai context
|
|
138
|
-
ai context --print
|
|
139
|
-
ai session
|
|
140
|
-
ai session list
|
|
141
|
-
ai session clear
|
|
142
|
-
ai report
|
|
143
|
-
ai doctor
|
|
232
|
+
npm install
|
|
233
|
+
npm run build
|
|
234
|
+
AI_GATEWAY_SERVER_TOKEN='replace-me' npm run server
|
|
144
235
|
```
|
|
145
236
|
|
|
146
|
-
|
|
237
|
+
已实现路由:
|
|
238
|
+
|
|
239
|
+
| 路由 | 用途 |
|
|
240
|
+
|---|---|
|
|
241
|
+
| `POST /v1/chat/completions` | OpenAI 兼容对话 |
|
|
242
|
+
| `POST /v1/responses` | OpenAI Responses 协议 |
|
|
243
|
+
| `POST /v1/embeddings` | 向量化接口 |
|
|
244
|
+
| `GET /v1/models` | 当前模型列表 |
|
|
245
|
+
| `POST /v1/agent/runs` | 受控的 Claude/Codex Agent Run |
|
|
246
|
+
|
|
247
|
+
服务只接受受控 `workspace_id`,默认只读,限制请求体、并发和执行时长;不提供任意目录访问,也不提供 `bypassPermissions`。
|
|
147
248
|
|
|
148
|
-
|
|
249
|
+
## 配置文件与安全边界
|
|
250
|
+
|
|
251
|
+
默认配置目录是 `~/.ai-gateway/`,可以用 `AI_GATEWAY_HOME` 覆盖:
|
|
149
252
|
|
|
150
253
|
```text
|
|
151
|
-
~/.ai-gateway/providers.json
|
|
152
|
-
~/.ai-gateway/.ai-cache.json
|
|
153
|
-
~/.ai-gateway/usage.json
|
|
154
|
-
~/.ai-gateway/model-pricing.json
|
|
155
|
-
~/.ai-gateway/sessions.json
|
|
156
|
-
~/.ai-gateway/
|
|
157
|
-
~/.ai-gateway/
|
|
158
|
-
~/.ai-gateway/telegram
|
|
159
|
-
~/.ai-gateway/reports/
|
|
160
|
-
~/.ai-gateway
|
|
161
|
-
~/.ai-gateway/.ai-gateway.log
|
|
254
|
+
~/.ai-gateway/providers.json Provider 配置
|
|
255
|
+
~/.ai-gateway/.ai-cache.json 模型缓存、健康状态和上次选择
|
|
256
|
+
~/.ai-gateway/usage.json 用量账本
|
|
257
|
+
~/.ai-gateway/model-pricing.json 本地成本估算价格
|
|
258
|
+
~/.ai-gateway/sessions.json CLI 会话记录
|
|
259
|
+
~/.ai-gateway/memory.json embedding 配置
|
|
260
|
+
~/.ai-gateway/memory.sqlite Telegram 记忆
|
|
261
|
+
~/.ai-gateway/telegram/bots/ 多 Bot 配置、PID、日志和数据库
|
|
262
|
+
~/.ai-gateway/reports/ 会话报告
|
|
263
|
+
~/.ai-gateway/.ai-gateway.log 结构化日志
|
|
162
264
|
```
|
|
163
265
|
|
|
164
|
-
|
|
266
|
+
请注意:
|
|
267
|
+
|
|
268
|
+
- `providers.json` 和 `memory.json` 中的 API Key 当前仍是明文保存。请限制目录权限,绝不要提交到仓库;加密凭证库尚未实现。
|
|
269
|
+
- `ai use` 的临时注入文件会在进程结束后清理;`ai set codex` 是例外,因为它就是明确的持久配置操作。
|
|
270
|
+
- 配置写入使用文件锁、临时文件和原子重命名,降低 CLI 与 Telegram 并发写入时损坏文件的风险。
|
|
271
|
+
- 日志不会记录完整 API Key,但会记录脱敏指纹;Provider 名称、模型和部分运行元数据会进入日志。
|
|
272
|
+
- root 用户运行 Claude 的自动权限模式时,Runtime 会收紧权限,不会传递官方禁止 root 使用的危险参数。
|
|
273
|
+
- Telegram 默认只允许白名单用户;如果显式开启 `allowAllUsers`,任何能访问 Bot 的人都可能在你的机器上执行命令。
|
|
165
274
|
|
|
166
|
-
|
|
275
|
+
## 🚧 尚未实现与未来路线
|
|
276
|
+
|
|
277
|
+
以下内容不要按当前功能使用:
|
|
278
|
+
|
|
279
|
+
1. **更完整的记忆**:自动抽取、向量检索、终端接入、Claim / Evidence、冲突和时序治理。
|
|
280
|
+
2. **可复用能力沉淀**:把经过验证的重复流程沉淀为 Skill 或 Workflow,并支持评测、激活和回滚。
|
|
281
|
+
3. **统一 Runtime 契约**:统一 CLI、Telegram、HTTP 的身份、权限、事件、取消、幂等和恢复语义。
|
|
282
|
+
4. **更完整的安全能力**:加密凭证、登录态托管、细粒度策略和可审计的权限决策。
|
|
283
|
+
5. **更多接入面**:Web、桌面、调度和插件体系。当前 `ai web` 只是占位命令。
|
|
284
|
+
|
|
285
|
+
这些是产品路线,不是已经发布的功能。README、使用指南和产品文档会继续按 🟢 / 🟡 / 🔴 状态同步。
|
|
286
|
+
|
|
287
|
+
## 开发
|
|
288
|
+
|
|
289
|
+
```bash
|
|
290
|
+
npm install
|
|
291
|
+
npm run build
|
|
292
|
+
npm test
|
|
293
|
+
npm link
|
|
294
|
+
```
|
|
167
295
|
|
|
168
|
-
|
|
296
|
+
完整命令说明见:
|
|
169
297
|
|
|
170
|
-
-
|
|
171
|
-
-
|
|
172
|
-
-
|
|
173
|
-
-
|
|
174
|
-
- Bot 会记录选择过的工作路径;自定义路径会按 `~/输入名称` 创建或复用。
|
|
175
|
-
- Telegram 默认命令菜单只保留 `/claude`、`/codex`、`/reset`、`/cwd` 和 `/help`;选择 CLI 后,会在当前 chat 的 `/` 菜单追加该 CLI 的 slash 命令映射。
|
|
176
|
-
- Telegram 远程执行复用 AI Gateway 顶层 provider,不维护另一套 provider 配置。
|
|
177
|
-
- Telegram Codex 执行会自动走本地 OpenAI 兼容代理记录 provider usage;`/usage` 有 provider cost 时直接展示,否则按 `model-pricing.json` 估算。
|
|
298
|
+
- [使用指南](./docs/usage.md)
|
|
299
|
+
- [技术架构](./docs/architecture.md)
|
|
300
|
+
- [产品需求文档](./docs/prd.md)
|
|
301
|
+
- [HTML 命令手册](./docs/USAGE.html)
|
|
178
302
|
|
|
179
|
-
|
|
303
|
+
## 许可
|
|
180
304
|
|
|
181
|
-
|
|
182
|
-
- [docs/USAGE.html](./docs/USAGE.html)
|
|
183
|
-
- [docs/prd.md](./docs/prd.md) 的「已知限制」一节
|
|
305
|
+
本项目当前未在 README 中声明开源许可证。使用前请以仓库中的许可证文件和项目发布说明为准。
|
|
@@ -255,7 +255,11 @@ export async function scheduleCodexAppRestart(options = {}) {
|
|
|
255
255
|
" setTimeout(() => spawnSync('/usr/bin/open', [appPath], { stdio: 'ignore' }), 1000);",
|
|
256
256
|
"}, 750);"
|
|
257
257
|
].join("\n");
|
|
258
|
-
|
|
258
|
+
const restartEnvironment = { ...process.env };
|
|
259
|
+
delete restartEnvironment.OPENAI_API_KEY;
|
|
260
|
+
(options.spawnDetached ?? defaultSpawnDetached)(process.execPath, ["-e", helper], {
|
|
261
|
+
env: restartEnvironment
|
|
262
|
+
});
|
|
259
263
|
return { scheduled: true, appPath };
|
|
260
264
|
}
|
|
261
265
|
async function configureChatGpt(configPath, authPath, codexHome, runner) {
|
|
@@ -517,8 +521,8 @@ async function fileExists(filePath) {
|
|
|
517
521
|
return false;
|
|
518
522
|
}
|
|
519
523
|
}
|
|
520
|
-
function defaultSpawnDetached(command, args) {
|
|
521
|
-
const child = spawn(command, args, { detached: true, stdio: "ignore" });
|
|
524
|
+
function defaultSpawnDetached(command, args, options = {}) {
|
|
525
|
+
const child = spawn(command, args, { detached: true, stdio: "ignore", ...options });
|
|
522
526
|
child.unref();
|
|
523
527
|
}
|
|
524
528
|
function runProcess(command, args) {
|
package/docs/USAGE.html
CHANGED
|
@@ -682,7 +682,7 @@ ai set codex proxy off</pre>
|
|
|
682
682
|
<li>写入 <code>config.toml</code> 前会规范化 <code>base_url</code>:末尾没有 <code>/v1</code> 时自动补上,已有时不重复追加。</li>
|
|
683
683
|
<li>原有 project、MCP、plugin、feature 设置会保留;任一步失败会恢复原 <code>config.toml</code> 和 <code>auth.json</code>。</li>
|
|
684
684
|
<li>切换自定义 provider 会替换当前 ChatGPT token;切回 ChatGPT 时需重新登录。</li>
|
|
685
|
-
<li>成功后 macOS 会重启 <code>Codex.app</code> 或当前名称的 <code>ChatGPT.app</code>;无法自动重启时按提示手动操作。</li>
|
|
685
|
+
<li>成功后 macOS 会重启 <code>Codex.app</code> 或当前名称的 <code>ChatGPT.app</code>,并清理重启进程继承的 <code>OPENAI_API_KEY</code>,确保客户端读取刚写入的 <code>auth.json</code>;无法自动重启时按提示手动操作。</li>
|
|
686
686
|
<li><code>proxy</code> 把裸 <code>host:port</code> 规范化为 HTTP origin,只更新 <code>shell_environment_policy.set</code> 的大小写 HTTP(S)/ALL proxy keys;<code>off</code> 清除这些 managed keys,不修改 <code>auth.json</code>。</li>
|
|
687
687
|
<li>Proxy URL 禁止包含账号密码、path、query 或 fragment,command usage log 会整体脱敏。macOS 会同步当前登录会话的 user launchd environment;失败时恢复原 config 且不重启,注销或重启 macOS 后需重新运行本命令。</li>
|
|
688
688
|
</ul>
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@offerpilot/axiomruntime",
|
|
3
|
-
"version": "0.0.
|
|
4
|
-
"description": "CLI-first
|
|
3
|
+
"version": "0.0.5",
|
|
4
|
+
"description": "CLI-first local AI Runtime for isolated multi-provider Claude Code and Codex execution with Telegram remote control.",
|
|
5
5
|
"homepage": "https://gitlab.com/linlangli/agent-router",
|
|
6
6
|
"repository": {
|
|
7
7
|
"type": "git",
|