@offerpilot/axiomruntime 0.0.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.
- package/README.md +185 -0
- package/dist/cli/commands/add.js +29 -0
- package/dist/cli/commands/context.js +29 -0
- package/dist/cli/commands/doctor.js +62 -0
- package/dist/cli/commands/edit.js +85 -0
- package/dist/cli/commands/help.js +16 -0
- package/dist/cli/commands/list.js +25 -0
- package/dist/cli/commands/log.js +63 -0
- package/dist/cli/commands/memory.js +241 -0
- package/dist/cli/commands/report.js +35 -0
- package/dist/cli/commands/session.js +74 -0
- package/dist/cli/commands/setup.js +86 -0
- package/dist/cli/commands/status.js +50 -0
- package/dist/cli/commands/telegram.js +701 -0
- package/dist/cli/commands/use.js +108 -0
- package/dist/cli/commands/version.js +12 -0
- package/dist/cli/index.js +276 -0
- package/dist/cli/output/table.js +22 -0
- package/dist/cli/prompts/prompt.js +37 -0
- package/dist/cli/registry.js +16 -0
- package/dist/core/config/cache-store.js +193 -0
- package/dist/core/config/json-store.js +114 -0
- package/dist/core/config/paths.js +85 -0
- package/dist/core/config/providers-store.js +89 -0
- package/dist/core/config/schema.js +60 -0
- package/dist/core/config/session-store.js +30 -0
- package/dist/core/config/usage-store.js +18 -0
- package/dist/core/context/context-service.js +186 -0
- package/dist/core/integrations/integration-state.js +105 -0
- package/dist/core/logs/log-service.js +56 -0
- package/dist/core/memory/embedding-check.js +121 -0
- package/dist/core/memory/memory-config.js +122 -0
- package/dist/core/models/model-discovery.js +430 -0
- package/dist/core/models/model-filter.js +13 -0
- package/dist/core/providers/provider-service.js +212 -0
- package/dist/core/reports/report-service.js +166 -0
- package/dist/core/runner/command-resolver.js +60 -0
- package/dist/core/runner/engine-registry.js +93 -0
- package/dist/core/runner/fallback.js +114 -0
- package/dist/core/runner/openai-usage-http.js +82 -0
- package/dist/core/runner/openai-usage-proxy.js +1 -0
- package/dist/core/runner/openai-usage-recording.js +172 -0
- package/dist/core/runner/openai-usage-responses.js +469 -0
- package/dist/core/runner/openai-usage-server.js +319 -0
- package/dist/core/runner/openai-usage-types.js +1 -0
- package/dist/core/runner/tool-runner.js +138 -0
- package/dist/core/sessions/session-service.js +47 -0
- package/dist/core/status/doctor-service.js +391 -0
- package/dist/core/status/status-service.js +60 -0
- package/dist/core/types.js +1 -0
- package/dist/core/usage/pricing.js +113 -0
- package/dist/core/usage/usage-service.js +30 -0
- package/dist/core/utils/is-record.js +3 -0
- package/dist/server/index.js +28 -0
- package/dist/server/runtime-server.js +430 -0
- package/dist/telegram/bot-registry.js +80 -0
- package/dist/telegram/bot.js +128 -0
- package/dist/telegram/config.js +235 -0
- package/dist/telegram/engine/claude-engine.js +240 -0
- package/dist/telegram/engine/codex-engine.js +437 -0
- package/dist/telegram/engine/engine-utils.js +67 -0
- package/dist/telegram/engine/process-utils.js +132 -0
- package/dist/telegram/engine/registry.js +31 -0
- package/dist/telegram/engine/types.js +1 -0
- package/dist/telegram/handler-registry.js +28 -0
- package/dist/telegram/handlers/callback.js +311 -0
- package/dist/telegram/handlers/command.js +272 -0
- package/dist/telegram/handlers/document.js +108 -0
- package/dist/telegram/handlers/memory.js +305 -0
- package/dist/telegram/handlers/message.js +701 -0
- package/dist/telegram/handlers/provider.js +332 -0
- package/dist/telegram/handlers/setup.js +527 -0
- package/dist/telegram/handlers/usage.js +124 -0
- package/dist/telegram/index.js +93 -0
- package/dist/telegram/interaction/approval.js +108 -0
- package/dist/telegram/interaction/command-menu.js +253 -0
- package/dist/telegram/interaction/formatter.js +487 -0
- package/dist/telegram/interaction/keyboards.js +145 -0
- package/dist/telegram/interaction/progress-reporter.js +160 -0
- package/dist/telegram/interaction/prompt-middleware.js +168 -0
- package/dist/telegram/interaction/result-store.js +41 -0
- package/dist/telegram/interaction/token-budget.js +21 -0
- package/dist/telegram/interaction/tool-name.js +41 -0
- package/dist/telegram/lifecycle-registry.js +47 -0
- package/dist/telegram/log.js +46 -0
- package/dist/telegram/memory/memory-inject.js +52 -0
- package/dist/telegram/memory/memory-service.js +413 -0
- package/dist/telegram/memory/memory-store.js +216 -0
- package/dist/telegram/memory/types.js +1 -0
- package/dist/telegram/network-retry.js +22 -0
- package/dist/telegram/network.js +53 -0
- package/dist/telegram/session/manager.js +229 -0
- package/dist/telegram/session/store.js +363 -0
- package/dist/telegram/session/types.js +1 -0
- package/dist/telegram/supervisor.js +57 -0
- package/dist/telegram/templates/messages.js +1 -0
- package/docs/README.md +98 -0
- package/docs/USAGE.html +853 -0
- package/package.json +57 -0
package/docs/USAGE.html
ADDED
|
@@ -0,0 +1,853 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html lang="zh-CN">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="utf-8" />
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
6
|
+
<title>AI Runtime 命令参考(Gateway 基础层)</title>
|
|
7
|
+
<style>
|
|
8
|
+
:root {
|
|
9
|
+
color-scheme: light;
|
|
10
|
+
--bg: #f5f6f8;
|
|
11
|
+
--surface: #ffffff;
|
|
12
|
+
--surface-soft: #f9fafb;
|
|
13
|
+
--text: #172033;
|
|
14
|
+
--muted: #687386;
|
|
15
|
+
--line: #d9dee7;
|
|
16
|
+
--line-strong: #c7ceda;
|
|
17
|
+
--code: #0f172a;
|
|
18
|
+
--code-bg: #eef2f6;
|
|
19
|
+
--accent: #2563eb;
|
|
20
|
+
--accent-soft: #e8f0ff;
|
|
21
|
+
--ok: #0f766e;
|
|
22
|
+
--warn: #b45309;
|
|
23
|
+
--shadow: 0 12px 36px rgba(15, 23, 42, 0.08);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
* {
|
|
27
|
+
box-sizing: border-box;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
html {
|
|
31
|
+
scroll-behavior: smooth;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
body {
|
|
35
|
+
margin: 0;
|
|
36
|
+
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
|
|
37
|
+
background: var(--bg);
|
|
38
|
+
color: var(--text);
|
|
39
|
+
line-height: 1.55;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
a {
|
|
43
|
+
color: inherit;
|
|
44
|
+
text-decoration: none;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
code,
|
|
48
|
+
pre {
|
|
49
|
+
font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
code {
|
|
53
|
+
color: var(--code);
|
|
54
|
+
background: var(--code-bg);
|
|
55
|
+
border: 1px solid var(--line);
|
|
56
|
+
border-radius: 5px;
|
|
57
|
+
padding: 1px 5px;
|
|
58
|
+
font-size: 0.92em;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
pre {
|
|
62
|
+
margin: 8px 0 12px;
|
|
63
|
+
padding: 12px;
|
|
64
|
+
overflow-x: auto;
|
|
65
|
+
color: var(--code);
|
|
66
|
+
background: var(--code-bg);
|
|
67
|
+
border: 1px solid var(--line);
|
|
68
|
+
border-radius: 6px;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
header {
|
|
72
|
+
background: var(--surface);
|
|
73
|
+
border-bottom: 1px solid var(--line);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
.topbar {
|
|
77
|
+
width: min(1280px, calc(100% - 32px));
|
|
78
|
+
margin: 0 auto;
|
|
79
|
+
padding: 24px 0 20px;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
h1 {
|
|
83
|
+
margin: 0 0 6px;
|
|
84
|
+
font-size: 28px;
|
|
85
|
+
line-height: 1.2;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
.subtitle {
|
|
89
|
+
margin: 0;
|
|
90
|
+
color: var(--muted);
|
|
91
|
+
font-size: 15px;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
.layout {
|
|
95
|
+
display: grid;
|
|
96
|
+
grid-template-columns: 248px minmax(0, 1fr);
|
|
97
|
+
gap: 20px;
|
|
98
|
+
width: min(1280px, calc(100% - 32px));
|
|
99
|
+
margin: 0 auto;
|
|
100
|
+
padding: 20px 0 48px;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
nav {
|
|
104
|
+
position: sticky;
|
|
105
|
+
top: 16px;
|
|
106
|
+
align-self: start;
|
|
107
|
+
background: var(--surface);
|
|
108
|
+
border: 1px solid var(--line);
|
|
109
|
+
border-radius: 8px;
|
|
110
|
+
box-shadow: var(--shadow);
|
|
111
|
+
overflow: hidden;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
.nav-title {
|
|
115
|
+
padding: 13px 14px 8px;
|
|
116
|
+
color: var(--muted);
|
|
117
|
+
font-size: 12px;
|
|
118
|
+
font-weight: 700;
|
|
119
|
+
text-transform: uppercase;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
.nav-link {
|
|
123
|
+
display: flex;
|
|
124
|
+
justify-content: space-between;
|
|
125
|
+
gap: 12px;
|
|
126
|
+
padding: 9px 14px;
|
|
127
|
+
border-top: 1px solid var(--line);
|
|
128
|
+
font-size: 14px;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
.nav-link:hover {
|
|
132
|
+
background: var(--surface-soft);
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
.nav-count {
|
|
136
|
+
color: var(--muted);
|
|
137
|
+
font-size: 12px;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
main {
|
|
141
|
+
min-width: 0;
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
.panel {
|
|
145
|
+
min-width: 0;
|
|
146
|
+
background: var(--surface);
|
|
147
|
+
border: 1px solid var(--line);
|
|
148
|
+
border-radius: 8px;
|
|
149
|
+
box-shadow: var(--shadow);
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
.finder {
|
|
153
|
+
padding: 16px;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
.finder-header {
|
|
157
|
+
display: flex;
|
|
158
|
+
align-items: flex-start;
|
|
159
|
+
justify-content: space-between;
|
|
160
|
+
gap: 16px;
|
|
161
|
+
margin-bottom: 12px;
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
h2 {
|
|
165
|
+
margin: 0 0 4px;
|
|
166
|
+
font-size: 18px;
|
|
167
|
+
line-height: 1.35;
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
h3 {
|
|
171
|
+
margin: 0 0 10px;
|
|
172
|
+
font-size: 16px;
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
p {
|
|
176
|
+
margin: 0 0 10px;
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
.hint {
|
|
180
|
+
margin: 0;
|
|
181
|
+
color: var(--muted);
|
|
182
|
+
font-size: 13px;
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
.search {
|
|
186
|
+
width: min(420px, 100%);
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
.search input {
|
|
190
|
+
width: 100%;
|
|
191
|
+
height: 38px;
|
|
192
|
+
padding: 0 12px;
|
|
193
|
+
border: 1px solid var(--line-strong);
|
|
194
|
+
border-radius: 6px;
|
|
195
|
+
color: var(--text);
|
|
196
|
+
background: var(--surface-soft);
|
|
197
|
+
font: inherit;
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
.search input:focus {
|
|
201
|
+
border-color: var(--accent);
|
|
202
|
+
outline: 3px solid var(--accent-soft);
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
.chips {
|
|
206
|
+
display: flex;
|
|
207
|
+
flex-wrap: wrap;
|
|
208
|
+
gap: 8px;
|
|
209
|
+
margin: 0 0 14px;
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
.chip {
|
|
213
|
+
border: 1px solid var(--line);
|
|
214
|
+
border-radius: 999px;
|
|
215
|
+
padding: 5px 10px;
|
|
216
|
+
color: var(--muted);
|
|
217
|
+
background: var(--surface-soft);
|
|
218
|
+
font-size: 13px;
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
.command-table {
|
|
222
|
+
width: 100%;
|
|
223
|
+
border-collapse: collapse;
|
|
224
|
+
border: 1px solid var(--line);
|
|
225
|
+
border-radius: 8px;
|
|
226
|
+
overflow: hidden;
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
.command-table th,
|
|
230
|
+
.command-table td {
|
|
231
|
+
padding: 10px 12px;
|
|
232
|
+
text-align: left;
|
|
233
|
+
border-bottom: 1px solid var(--line);
|
|
234
|
+
vertical-align: top;
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
.command-table th {
|
|
238
|
+
background: #eef2f7;
|
|
239
|
+
color: #374151;
|
|
240
|
+
font-size: 13px;
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
.command-table tr:last-child td {
|
|
244
|
+
border-bottom: 0;
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
.command-table tbody tr:hover {
|
|
248
|
+
background: var(--surface-soft);
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
.cmd {
|
|
252
|
+
display: inline-block;
|
|
253
|
+
white-space: nowrap;
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
.group-label {
|
|
257
|
+
display: inline-block;
|
|
258
|
+
min-width: 70px;
|
|
259
|
+
color: var(--muted);
|
|
260
|
+
font-size: 13px;
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
.tag {
|
|
264
|
+
display: inline-flex;
|
|
265
|
+
align-items: center;
|
|
266
|
+
height: 22px;
|
|
267
|
+
padding: 0 8px;
|
|
268
|
+
border-radius: 999px;
|
|
269
|
+
color: var(--ok);
|
|
270
|
+
background: #e6f5f3;
|
|
271
|
+
font-size: 12px;
|
|
272
|
+
font-weight: 600;
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
.tag.warn {
|
|
276
|
+
color: var(--warn);
|
|
277
|
+
background: #fff4e5;
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
.sections {
|
|
281
|
+
display: grid;
|
|
282
|
+
gap: 14px;
|
|
283
|
+
min-width: 0;
|
|
284
|
+
margin-top: 18px;
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
section.panel {
|
|
288
|
+
padding: 16px;
|
|
289
|
+
scroll-margin-top: 18px;
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
.section-grid {
|
|
293
|
+
display: grid;
|
|
294
|
+
grid-template-columns: repeat(2, minmax(0, 1fr));
|
|
295
|
+
gap: 14px;
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
.note {
|
|
299
|
+
min-width: 0;
|
|
300
|
+
padding: 12px;
|
|
301
|
+
border: 1px solid var(--line);
|
|
302
|
+
border-radius: 8px;
|
|
303
|
+
background: var(--surface-soft);
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
.note p:last-child {
|
|
307
|
+
margin-bottom: 0;
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
details {
|
|
311
|
+
border: 1px solid var(--line);
|
|
312
|
+
border-radius: 8px;
|
|
313
|
+
background: var(--surface-soft);
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
details + details {
|
|
317
|
+
margin-top: 8px;
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
summary {
|
|
321
|
+
cursor: pointer;
|
|
322
|
+
padding: 10px 12px;
|
|
323
|
+
font-weight: 700;
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
details[open] summary {
|
|
327
|
+
border-bottom: 1px solid var(--line);
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
.detail-body {
|
|
331
|
+
padding: 12px;
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
ul {
|
|
335
|
+
margin: 8px 0 0;
|
|
336
|
+
padding-left: 20px;
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
li + li {
|
|
340
|
+
margin-top: 4px;
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
.empty {
|
|
344
|
+
display: none;
|
|
345
|
+
padding: 18px;
|
|
346
|
+
text-align: center;
|
|
347
|
+
color: var(--muted);
|
|
348
|
+
border: 1px dashed var(--line-strong);
|
|
349
|
+
border-radius: 8px;
|
|
350
|
+
background: var(--surface-soft);
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
@media (max-width: 940px) {
|
|
354
|
+
.layout {
|
|
355
|
+
grid-template-columns: 1fr;
|
|
356
|
+
}
|
|
357
|
+
|
|
358
|
+
nav {
|
|
359
|
+
position: static;
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
.finder-header {
|
|
363
|
+
display: block;
|
|
364
|
+
}
|
|
365
|
+
|
|
366
|
+
.search {
|
|
367
|
+
width: 100%;
|
|
368
|
+
margin-top: 12px;
|
|
369
|
+
}
|
|
370
|
+
|
|
371
|
+
.section-grid {
|
|
372
|
+
grid-template-columns: 1fr;
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
|
|
376
|
+
@media (max-width: 720px) {
|
|
377
|
+
.topbar,
|
|
378
|
+
.layout {
|
|
379
|
+
width: min(100% - 24px, 1280px);
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
h1 {
|
|
383
|
+
font-size: 24px;
|
|
384
|
+
}
|
|
385
|
+
|
|
386
|
+
.command-table,
|
|
387
|
+
.command-table thead,
|
|
388
|
+
.command-table tbody,
|
|
389
|
+
.command-table tr,
|
|
390
|
+
.command-table th,
|
|
391
|
+
.command-table td {
|
|
392
|
+
display: block;
|
|
393
|
+
}
|
|
394
|
+
|
|
395
|
+
.command-table thead {
|
|
396
|
+
display: none;
|
|
397
|
+
}
|
|
398
|
+
|
|
399
|
+
.command-table tr {
|
|
400
|
+
border-bottom: 1px solid var(--line);
|
|
401
|
+
padding: 10px 0;
|
|
402
|
+
}
|
|
403
|
+
|
|
404
|
+
.command-table tr:last-child {
|
|
405
|
+
border-bottom: 0;
|
|
406
|
+
}
|
|
407
|
+
|
|
408
|
+
.command-table td {
|
|
409
|
+
border-bottom: 0;
|
|
410
|
+
padding: 4px 12px;
|
|
411
|
+
}
|
|
412
|
+
|
|
413
|
+
.group-label {
|
|
414
|
+
min-width: 0;
|
|
415
|
+
}
|
|
416
|
+
|
|
417
|
+
.cmd {
|
|
418
|
+
white-space: normal;
|
|
419
|
+
overflow-wrap: anywhere;
|
|
420
|
+
word-break: break-word;
|
|
421
|
+
}
|
|
422
|
+
|
|
423
|
+
code {
|
|
424
|
+
overflow-wrap: anywhere;
|
|
425
|
+
word-break: break-word;
|
|
426
|
+
}
|
|
427
|
+
|
|
428
|
+
pre {
|
|
429
|
+
white-space: pre-wrap;
|
|
430
|
+
overflow-wrap: anywhere;
|
|
431
|
+
}
|
|
432
|
+
}
|
|
433
|
+
</style>
|
|
434
|
+
</head>
|
|
435
|
+
<body>
|
|
436
|
+
<header>
|
|
437
|
+
<div class="topbar">
|
|
438
|
+
<h1>AI Runtime 命令参考</h1>
|
|
439
|
+
<p class="subtitle">当前 Gateway 基础层的命令索引:Provider、Claude/Codex、Telegram、会话与诊断。</p>
|
|
440
|
+
</div>
|
|
441
|
+
</header>
|
|
442
|
+
|
|
443
|
+
<div class="layout">
|
|
444
|
+
<nav aria-label="页面导航">
|
|
445
|
+
<div class="nav-title">分类</div>
|
|
446
|
+
<a class="nav-link" href="#install"><span>安装</span><span class="nav-count">npm</span></a>
|
|
447
|
+
<a class="nav-link" href="#commands"><span>命令索引</span><span class="nav-count">常用入口</span></a>
|
|
448
|
+
<a class="nav-link" href="#use"><span>使用模型</span><span class="nav-count">use / last</span></a>
|
|
449
|
+
<a class="nav-link" href="#providers"><span>Provider</span><span class="nav-count">add / edit / delete</span></a>
|
|
450
|
+
<a class="nav-link" href="#memory"><span>Memory</span><span class="nav-count">embedding</span></a>
|
|
451
|
+
<a class="nav-link" href="#telegram"><span>Telegram</span><span class="nav-count">Bot</span></a>
|
|
452
|
+
<a class="nav-link" href="#status"><span>状态诊断</span><span class="nav-count">status / doctor</span></a>
|
|
453
|
+
<a class="nav-link" href="#sessions"><span>会话报告</span><span class="nav-count">session / report</span></a>
|
|
454
|
+
<a class="nav-link" href="#files"><span>配置文件</span><span class="nav-count">路径</span></a>
|
|
455
|
+
</nav>
|
|
456
|
+
|
|
457
|
+
<main>
|
|
458
|
+
<section id="install" class="panel">
|
|
459
|
+
<h2>通过 npm 安装</h2>
|
|
460
|
+
<div class="detail-body">
|
|
461
|
+
<pre>npm install --global @offerpilot/axiomruntime
|
|
462
|
+
ai --version
|
|
463
|
+
ai setup</pre>
|
|
464
|
+
<p>npm 包名是 <code>@offerpilot/axiomruntime</code>,安装后注册的可执行命令是 <code>ai</code>。需要 Node.js <code>22.19.0+</code>。</p>
|
|
465
|
+
<p><code>ai --version</code> 无副作用地验证安装;<code>ai setup</code> 初始化 Runtime,并可在确认后安装缺失的 Claude Code/Codex。</p>
|
|
466
|
+
<pre>brew tap offerpilot/tap
|
|
467
|
+
brew install axiomruntime
|
|
468
|
+
ai --version
|
|
469
|
+
ai setup</pre>
|
|
470
|
+
<p>Homebrew Formula 复用同版本 npm tarball并校验 SHA256,固定使用 Homebrew <code>node@22</code>。非 GitHub Tap 首次添加时需提供公开 Git URL。</p>
|
|
471
|
+
</div>
|
|
472
|
+
</section>
|
|
473
|
+
|
|
474
|
+
<section id="commands" class="panel finder">
|
|
475
|
+
<div class="finder-header">
|
|
476
|
+
<div>
|
|
477
|
+
<h2>命令索引</h2>
|
|
478
|
+
<p class="hint">输入命令、场景或关键字过滤;点击左侧分类查看详细规则。</p>
|
|
479
|
+
</div>
|
|
480
|
+
<label class="search">
|
|
481
|
+
<input id="commandSearch" type="search" placeholder="搜索:provider、doctor、telegram..." />
|
|
482
|
+
</label>
|
|
483
|
+
</div>
|
|
484
|
+
|
|
485
|
+
<div class="chips" aria-label="常用筛选提示">
|
|
486
|
+
<span class="chip">需要 Node.js <code>22.19.0+</code></span>
|
|
487
|
+
<span class="chip">Provider 统一在 <code>ai provider</code></span>
|
|
488
|
+
<span class="chip">Telegram /model 只显示 AI Gateway 管理的 provider</span>
|
|
489
|
+
</div>
|
|
490
|
+
|
|
491
|
+
<table class="command-table" id="commandTable">
|
|
492
|
+
<thead>
|
|
493
|
+
<tr>
|
|
494
|
+
<th>分类</th>
|
|
495
|
+
<th>命令</th>
|
|
496
|
+
<th>用途</th>
|
|
497
|
+
<th>备注</th>
|
|
498
|
+
</tr>
|
|
499
|
+
</thead>
|
|
500
|
+
<tbody>
|
|
501
|
+
<tr data-search="interactive ai help usage">
|
|
502
|
+
<td><span class="group-label">基础</span></td>
|
|
503
|
+
<td><code class="cmd">ai</code></td>
|
|
504
|
+
<td>进入交互模式。</td>
|
|
505
|
+
<td><span class="tag">推荐入口</span></td>
|
|
506
|
+
</tr>
|
|
507
|
+
<tr data-search="version install npm">
|
|
508
|
+
<td><span class="group-label">基础</span></td>
|
|
509
|
+
<td><code class="cmd">ai --version</code><br /><code class="cmd">ai version</code></td>
|
|
510
|
+
<td>输出当前安装版本。</td>
|
|
511
|
+
<td>不创建配置或日志。</td>
|
|
512
|
+
</tr>
|
|
513
|
+
<tr data-search="setup install repair provider claude codex">
|
|
514
|
+
<td><span class="group-label">基础</span></td>
|
|
515
|
+
<td><code class="cmd">ai setup</code><br /><code class="cmd">ai setup --yes --install-tools</code></td>
|
|
516
|
+
<td>初始化 Runtime、引导 Provider,并经授权安装缺失的外部 CLI。</td>
|
|
517
|
+
<td><code>--yes</code> 本身不授权安装第三方工具。</td>
|
|
518
|
+
</tr>
|
|
519
|
+
<tr data-search="help usage html docs">
|
|
520
|
+
<td><span class="group-label">基础</span></td>
|
|
521
|
+
<td><code class="cmd">ai help</code></td>
|
|
522
|
+
<td>打开本页面。</td>
|
|
523
|
+
<td></td>
|
|
524
|
+
</tr>
|
|
525
|
+
<tr data-search="use claude codex provider model fallback">
|
|
526
|
+
<td><span class="group-label">使用</span></td>
|
|
527
|
+
<td><code class="cmd">ai use claude</code><br /><code class="cmd">ai use codex</code></td>
|
|
528
|
+
<td>用默认 provider 和默认模型启动 Claude Code 或 Codex。</td>
|
|
529
|
+
<td>不指定时使用 <code>level: 1</code>。</td>
|
|
530
|
+
</tr>
|
|
531
|
+
<tr data-search="use provider model named">
|
|
532
|
+
<td><span class="group-label">使用</span></td>
|
|
533
|
+
<td><code class="cmd">ai use claude 51talk claude-opus-4-6</code><br /><code class="cmd">ai use codex 51talk gpt-5.5</code></td>
|
|
534
|
+
<td>指定 provider 和模型启动工具。</td>
|
|
535
|
+
<td>provider 不可用时按 level 降级。</td>
|
|
536
|
+
</tr>
|
|
537
|
+
<tr data-search="last resume previous selection">
|
|
538
|
+
<td><span class="group-label">使用</span></td>
|
|
539
|
+
<td><code class="cmd">ai last</code></td>
|
|
540
|
+
<td>继续上次选择的工具、provider 和模型。</td>
|
|
541
|
+
<td></td>
|
|
542
|
+
</tr>
|
|
543
|
+
<tr data-search="provider add create import key">
|
|
544
|
+
<td><span class="group-label">Provider</span></td>
|
|
545
|
+
<td><code class="cmd">ai provider add</code><br /><code class="cmd">ai provider add 51talk https://example.com sk-xxx</code></td>
|
|
546
|
+
<td>添加 provider,探测连通性和模型。</td>
|
|
547
|
+
<td>也可用旧入口 <code>ai add</code>。</td>
|
|
548
|
+
</tr>
|
|
549
|
+
<tr data-search="provider list">
|
|
550
|
+
<td><span class="group-label">Provider</span></td>
|
|
551
|
+
<td><code class="cmd">ai provider list</code></td>
|
|
552
|
+
<td>列出 provider 配置。</td>
|
|
553
|
+
<td>只读配置,不刷新健康度。</td>
|
|
554
|
+
</tr>
|
|
555
|
+
<tr data-search="provider edit rename baseUrl apiKey level model mode">
|
|
556
|
+
<td><span class="group-label">Provider</span></td>
|
|
557
|
+
<td><code class="cmd">ai provider edit</code><br /><code class="cmd">ai provider edit 51talk</code></td>
|
|
558
|
+
<td>修改 name、baseUrl、凭证、mode、level、model。</td>
|
|
559
|
+
<td>凭证写入 SecretStore,配置只保存 apiKeyRef;编辑时不回显原值。</td>
|
|
560
|
+
</tr>
|
|
561
|
+
<tr data-search="provider delete remove fallback">
|
|
562
|
+
<td><span class="group-label">Provider</span></td>
|
|
563
|
+
<td><code class="cmd">ai provider delete</code><br /><code class="cmd">ai provider delete 51talk</code></td>
|
|
564
|
+
<td>删除 provider 和模型缓存。</td>
|
|
565
|
+
<td>后续执行会按优先级重新选择 provider。</td>
|
|
566
|
+
</tr>
|
|
567
|
+
<tr data-search="memory embedding vector jina retrieval config">
|
|
568
|
+
<td><span class="group-label">Memory</span></td>
|
|
569
|
+
<td><code class="cmd">ai memory embedding</code><br /><code class="cmd">ai memory embedding set</code><br /><code class="cmd">ai memory embedding test</code><br /><code class="cmd">ai memory embedding clear</code></td>
|
|
570
|
+
<td>交互配置记忆检索专用 embedding 模型。</td>
|
|
571
|
+
<td>独立于聊天 provider,保存到 <code>memory.json</code>。</td>
|
|
572
|
+
</tr>
|
|
573
|
+
<tr data-search="telegram bot start stop status config logs claude codex remote">
|
|
574
|
+
<td><span class="group-label">Telegram</span></td>
|
|
575
|
+
<td><code class="cmd">ai telegram</code><br /><code class="cmd">ai telegram list</code><br /><code class="cmd">ai telegram edit --bot ops</code><br /><code class="cmd">ai telegram start --bot ops</code><br /><code class="cmd">ai telegram status --all</code></td>
|
|
576
|
+
<td>交互式或按 <code>--bot</code> 精确配置并管理多个 Telegram Bot。</td>
|
|
577
|
+
<td>复用顶层 provider。</td>
|
|
578
|
+
</tr>
|
|
579
|
+
<tr data-search="status health provider model token usage">
|
|
580
|
+
<td><span class="group-label">诊断</span></td>
|
|
581
|
+
<td><code class="cmd">ai status</code></td>
|
|
582
|
+
<td>轻量刷新 provider 健康度和模型缓存。</td>
|
|
583
|
+
<td>默认不发送真实对话请求。</td>
|
|
584
|
+
</tr>
|
|
585
|
+
<tr data-search="doctor deep local strict fix diagnose cli provider token">
|
|
586
|
+
<td><span class="group-label">诊断</span></td>
|
|
587
|
+
<td><code class="cmd">ai doctor</code><br /><code class="cmd">ai doctor --local</code><br /><code class="cmd">ai doctor --deep --tool codex</code></td>
|
|
588
|
+
<td>诊断并安全修复 Runtime 环境;deep 验证真实推理链路。</td>
|
|
589
|
+
<td>不修改项目源码或自动覆盖 Provider;<span class="tag warn">deep 可能消耗 token</span></td>
|
|
590
|
+
</tr>
|
|
591
|
+
<tr data-search="log context project">
|
|
592
|
+
<td><span class="group-label">诊断</span></td>
|
|
593
|
+
<td><code class="cmd">ai log</code><br /><code class="cmd">ai log --print</code><br /><code class="cmd">ai context</code></td>
|
|
594
|
+
<td>打开日志、打印日志、生成项目上下文。</td>
|
|
595
|
+
<td></td>
|
|
596
|
+
</tr>
|
|
597
|
+
<tr data-search="session report clear">
|
|
598
|
+
<td><span class="group-label">会话</span></td>
|
|
599
|
+
<td><code class="cmd">ai session</code><br /><code class="cmd">ai session list</code><br /><code class="cmd">ai session clear</code><br /><code class="cmd">ai report</code></td>
|
|
600
|
+
<td>管理 session 记录并生成报告。</td>
|
|
601
|
+
<td></td>
|
|
602
|
+
</tr>
|
|
603
|
+
<tr data-search="web dashboard panel planned">
|
|
604
|
+
<td><span class="group-label">其它</span></td>
|
|
605
|
+
<td><code class="cmd">ai web</code></td>
|
|
606
|
+
<td>规划中的 Web 控制面板。</td>
|
|
607
|
+
<td>当前基础版会提示暂未实现。</td>
|
|
608
|
+
</tr>
|
|
609
|
+
</tbody>
|
|
610
|
+
</table>
|
|
611
|
+
<div class="empty" id="emptyState">没有匹配的命令。试试搜索 provider、status、doctor 或 session。</div>
|
|
612
|
+
</section>
|
|
613
|
+
|
|
614
|
+
<div class="sections">
|
|
615
|
+
<section id="use" class="panel">
|
|
616
|
+
<h2>使用模型</h2>
|
|
617
|
+
<div class="section-grid">
|
|
618
|
+
<div class="note">
|
|
619
|
+
<h3>启动 Claude Code 或 Codex</h3>
|
|
620
|
+
<pre>ai use claude
|
|
621
|
+
ai use codex
|
|
622
|
+
ai use claude 51talk
|
|
623
|
+
ai use codex 51talk gpt-5.5</pre>
|
|
624
|
+
<p>不指定 provider 时使用 <code>level: 1</code>;不指定模型时使用 provider 默认 <code>model</code>。</p>
|
|
625
|
+
</div>
|
|
626
|
+
<div class="note">
|
|
627
|
+
<h3>运行规则</h3>
|
|
628
|
+
<ul>
|
|
629
|
+
<li>provider 不可用时按 <code>level</code> 自动降级。</li>
|
|
630
|
+
<li>Claude Code 使用临时 <code>--settings</code> 注入环境变量,不修改用户 settings。</li>
|
|
631
|
+
<li>Codex 使用本次子进程的 <code>-c model_provider=...</code> 固定所选 provider,并通过 <code>env_key = "OPENAI_API_KEY"</code> 使用 AI Gateway 注入的 Key;不会修改 Codex 全局认证或配置。</li>
|
|
632
|
+
<li>provider 的 <code>mode</code> 为 <code>auto</code> 时,Claude Code 会追加 <code>--dangerously-skip-permissions</code>;<code>ask</code> 模式不会追加,并会在启动前确认。</li>
|
|
633
|
+
<li>OpenAI 兼容地址用于 Codex 时会使用 <code>/v1</code>,用于 Claude 时会去掉 <code>/v1</code>。</li>
|
|
634
|
+
<li>日志只记录 Key 指纹,不记录完整 API Key。</li>
|
|
635
|
+
</ul>
|
|
636
|
+
</div>
|
|
637
|
+
</div>
|
|
638
|
+
</section>
|
|
639
|
+
|
|
640
|
+
<section id="memory" class="panel">
|
|
641
|
+
<h2>Memory 配置</h2>
|
|
642
|
+
<details open>
|
|
643
|
+
<summary>向量检索模型</summary>
|
|
644
|
+
<div class="detail-body">
|
|
645
|
+
<pre>ai memory embedding
|
|
646
|
+
ai memory embedding set
|
|
647
|
+
ai memory embedding set jina https://api.jina.ai/v1 jina_xxx jina-embeddings-v3 --type jina
|
|
648
|
+
ai memory embedding test "ping"
|
|
649
|
+
ai memory embedding clear</pre>
|
|
650
|
+
<ul>
|
|
651
|
+
<li><code>ai memory embedding</code> 会进入交互菜单,可查看、设置、测试或清空 embedding 配置。</li>
|
|
652
|
+
<li>这组配置只服务记忆检索,不参与 Claude Code / Codex 聊天 provider 选择。</li>
|
|
653
|
+
<li>Jina 会默认写入 <code>retrieval.query</code> 和 <code>retrieval.passage</code>,后续向量查询和记忆入库可分别使用。</li>
|
|
654
|
+
<li><code>set</code> 后会调用 embeddings 接口做一次轻量验证;需要跳过时可加 <code>--skip-test</code>。</li>
|
|
655
|
+
<li>API Key 只保存在本机 <code>~/.ai-gateway/memory.json</code>,日志会脱敏。</li>
|
|
656
|
+
</ul>
|
|
657
|
+
</div>
|
|
658
|
+
</details>
|
|
659
|
+
</section>
|
|
660
|
+
|
|
661
|
+
<section id="providers" class="panel">
|
|
662
|
+
<h2>Provider 管理</h2>
|
|
663
|
+
<details open>
|
|
664
|
+
<summary>添加、编辑、删除</summary>
|
|
665
|
+
<div class="detail-body">
|
|
666
|
+
<pre>ai provider add
|
|
667
|
+
ai provider add 51talk https://example.com sk-xxx
|
|
668
|
+
ai provider edit
|
|
669
|
+
ai provider edit 51talk
|
|
670
|
+
ai provider delete
|
|
671
|
+
ai provider delete 51talk
|
|
672
|
+
ai provider list</pre>
|
|
673
|
+
<ul>
|
|
674
|
+
<li><code>mode</code> 可选 <code>ask</code> 或 <code>auto</code>。</li>
|
|
675
|
+
<li><code>level</code> 是优先级;如果目标等级已占用,会和对应 provider 交换。</li>
|
|
676
|
+
<li><code>model</code> 从已探测模型中选择,不手动输入。</li>
|
|
677
|
+
<li>删除 provider 会清理模型缓存;后续执行会按 <code>level</code> 从剩余 provider 中重新选择。</li>
|
|
678
|
+
</ul>
|
|
679
|
+
</div>
|
|
680
|
+
</details>
|
|
681
|
+
</section>
|
|
682
|
+
|
|
683
|
+
<section id="telegram" class="panel">
|
|
684
|
+
<h2>Telegram Bot</h2>
|
|
685
|
+
<details open>
|
|
686
|
+
<summary>配置和进程管理</summary>
|
|
687
|
+
<div class="detail-body">
|
|
688
|
+
<pre>ai telegram # 交互选择操作,再选择目标 Bot
|
|
689
|
+
ai telegram --bot ops # 预选 ops,再进入交互菜单
|
|
690
|
+
ai telegram add ops
|
|
691
|
+
ai telegram add support
|
|
692
|
+
ai telegram list
|
|
693
|
+
|
|
694
|
+
ai telegram config show --bot ops
|
|
695
|
+
ai telegram config set token <bot-token> --bot ops
|
|
696
|
+
ai telegram config set allowedUserIds 123456789,987654321 --bot ops
|
|
697
|
+
ai telegram config set defaultEngine codex --bot ops
|
|
698
|
+
ai telegram config set defaultCwd /workspace/ops --bot ops
|
|
699
|
+
ai telegram edit --bot ops
|
|
700
|
+
|
|
701
|
+
ai telegram start --bot ops
|
|
702
|
+
ai telegram stop --bot ops
|
|
703
|
+
ai telegram status --bot ops
|
|
704
|
+
ai telegram logs --bot ops -f
|
|
705
|
+
ai telegram doctor --bot ops
|
|
706
|
+
ai telegram delete --bot ops
|
|
707
|
+
|
|
708
|
+
ai telegram start --all
|
|
709
|
+
ai telegram stop --all
|
|
710
|
+
ai telegram status --all</pre>
|
|
711
|
+
<ul>
|
|
712
|
+
<li><code>--bot=<name></code> 与 <code>--bot <name></code> 等价。旧位置参数写法继续兼容;新脚本推荐显式指定 <code>--bot</code> 或 <code>--all</code>。</li>
|
|
713
|
+
<li>裸 <code>ai telegram</code> 会先选操作再列出 Bot;生命周期菜单可选 <code>all bots</code>,删除菜单会二次确认。带 <code>--bot</code> 进入交互菜单时会跳过 Bot 选择。</li>
|
|
714
|
+
<li><code>edit</code> 交互式编辑指定 Bot;<code>delete</code> 先停止目标 Bot,再删除该 Bot 的 config、PID、log 和 SQLite 文件。旧 <code>remove</code> 是兼容别名。</li>
|
|
715
|
+
<li>删除迁移得到的 <code>default</code> Bot 时,同时清理 legacy <code>telegram.json</code> 与数据库,避免后续迁移重新创建绑定。</li>
|
|
716
|
+
<li><code>config set ... --bot <name></code> 只修改指定 Bot,不影响全局或其他 Bot;token 不会出现在命令日志或终端输出中。</li>
|
|
717
|
+
<li>命名 Bot 的配置、PID、日志和会话保存在 <code>~/.ai-gateway/telegram/bots/<name>.json|.pid|.log|.sqlite</code>。</li>
|
|
718
|
+
<li>为保持兼容,存在命名 Bot 时,无目标 <code>start</code>、<code>stop</code>、<code>status</code> 仍作用于全部命名 Bot。</li>
|
|
719
|
+
<li>默认只有 <code>allowedUserIds</code> 中的 Telegram 用户可以访问 Bot;如需开放给所有用户,显式设置 <code>allowAllUsers: true</code>。</li>
|
|
720
|
+
<li>远程执行复用 AI Gateway 顶层 provider;不配置固定 provider/model 时按优先级自动选择。</li>
|
|
721
|
+
<li><code>/start</code> 或 <code>/reset</code> 先选择 Provider/Model,再直接以按钮列出历史绝对路径,末尾可选择“自定义”,不再先点击“已存在”。</li>
|
|
722
|
+
<li><code>/provider</code> 以按钮列出全部 AI Provider,可编辑名称、Base URL、API Key、默认模型、模式和优先级,二次确认后删除,或从列表底部添加。操作复用 <code>ai provider</code> 的核心 CRUD 和检查逻辑。</li>
|
|
723
|
+
<li>Provider API Key 在详情中只显示“已配置”,不会写入 Bot 应用日志;输入后 Bot 会尽力立即删除该 Telegram 消息。未完成表单在 Bot 重启后需要重新开始。</li>
|
|
724
|
+
<li>Telegram Codex 执行会自动走本地 OpenAI 兼容代理记录 provider usage;<code>/usage</code> 有 provider cost 时直接展示,否则按 <code>model-pricing.json</code> 估算。</li>
|
|
725
|
+
<li>如果本机不能直连 <code>api.telegram.org</code>,设置 <code>proxyUrl</code> 或环境变量 <code>HTTPS_PROXY</code> / <code>ALL_PROXY</code>。</li>
|
|
726
|
+
</ul>
|
|
727
|
+
</div>
|
|
728
|
+
</details>
|
|
729
|
+
<details>
|
|
730
|
+
<summary>Bot 命令</summary>
|
|
731
|
+
<div class="detail-body">
|
|
732
|
+
<pre>/claude prompt
|
|
733
|
+
/codex prompt
|
|
734
|
+
/reset
|
|
735
|
+
/fresh
|
|
736
|
+
/cwd /path/to/project
|
|
737
|
+
/config
|
|
738
|
+
/provider
|
|
739
|
+
/usage
|
|
740
|
+
/pin
|
|
741
|
+
/unpin
|
|
742
|
+
/terminal ls -la
|
|
743
|
+
/restart
|
|
744
|
+
/help</pre>
|
|
745
|
+
<ul>
|
|
746
|
+
<li>普通文本会发送给当前会话的默认引擎。</li>
|
|
747
|
+
<li>基础菜单同时提供 Memory、上下文固定、终端和重启命令;选择 CLI 后,会在当前 chat 的 <code>/</code> 菜单追加该 CLI 的 slash 命令映射。</li>
|
|
748
|
+
<li>CLI slash 命令不会以消息列表形式额外刷屏,点击菜单项后会转发给当前 CLI 执行。</li>
|
|
749
|
+
<li>会话按 1400 token budget 动态选择最近上下文;回复 Bot 回答并发送 <code>/pin</code> 可固定最多 3 个关键 turn,<code>/unpin</code> 可撤销。</li>
|
|
750
|
+
<li>回复文字或 caption 会注入转义后的引用上下文;编辑最新普通 prompt 会停止旧任务、清除旧 native session 后重跑。</li>
|
|
751
|
+
<li>下一条请求最多消费 8 个附件:UTF-8 文本单文件 ≤2MB、图片单文件 ≤10MB;Codex 图片使用 <code>--image</code>。</li>
|
|
752
|
+
<li>进度消息按至少 1500ms 节流显示阶段、工具和有界回答预览;最终结果替换同一条消息。</li>
|
|
753
|
+
<li><code>/terminal</code> 最长运行 60 秒且高风险命令必须确认;<code>/restart</code> 会优雅停止并启动 replacement process。</li>
|
|
754
|
+
<li>Claude 失败会显示 terminal error,不再把 <code>system/init</code> JSON 当作主错误。</li>
|
|
755
|
+
<li><code>full-auto</code> 会映射到 Claude/Codex 的跳过审批模式,但高风险命令文本仍会在 Telegram 侧强制确认。</li>
|
|
756
|
+
</ul>
|
|
757
|
+
</div>
|
|
758
|
+
</details>
|
|
759
|
+
</section>
|
|
760
|
+
|
|
761
|
+
<section id="status" class="panel">
|
|
762
|
+
<h2>状态和诊断</h2>
|
|
763
|
+
<div class="section-grid">
|
|
764
|
+
<div class="note">
|
|
765
|
+
<h3>轻量检查</h3>
|
|
766
|
+
<pre>ai status
|
|
767
|
+
ai provider list
|
|
768
|
+
ai log
|
|
769
|
+
ai log --print
|
|
770
|
+
ai context</pre>
|
|
771
|
+
<p><code>status</code> 会刷新 provider 健康度和模型缓存,展示 Claude/Codex 各自实际 baseUrl、兼容模型、token 使用量和使用占比。</p>
|
|
772
|
+
</div>
|
|
773
|
+
<div class="note">
|
|
774
|
+
<h3>诊断与自动修复</h3>
|
|
775
|
+
<pre>ai doctor
|
|
776
|
+
ai doctor --local
|
|
777
|
+
ai doctor --no-fix
|
|
778
|
+
ai doctor --strict
|
|
779
|
+
ai doctor --deep --tool codex
|
|
780
|
+
ai doctor --deep --tool claude</pre>
|
|
781
|
+
<p>默认创建缺失的 Runtime 状态文件,并备份后重建损坏的可再生文件;不会读取或修改项目源码,也不会自动覆盖 <code>providers.json</code>。<code>--deep</code> 可能消耗 token。</p>
|
|
782
|
+
</div>
|
|
783
|
+
</div>
|
|
784
|
+
</section>
|
|
785
|
+
|
|
786
|
+
<section id="sessions" class="panel">
|
|
787
|
+
<h2>会话和报告</h2>
|
|
788
|
+
<div class="section-grid">
|
|
789
|
+
<div class="note">
|
|
790
|
+
<h3>Session</h3>
|
|
791
|
+
<pre>ai session
|
|
792
|
+
ai session list
|
|
793
|
+
ai session clear</pre>
|
|
794
|
+
<p><code>session</code> 进入最近 session 选择列表;<code>session clear</code> 清空 AI Gateway 记录。</p>
|
|
795
|
+
</div>
|
|
796
|
+
<div class="note">
|
|
797
|
+
<h3>Report</h3>
|
|
798
|
+
<pre>ai report</pre>
|
|
799
|
+
<p>选择 session 生成 Markdown 报告,包含 context、真实 token、模型、provider 快照和画像信息。</p>
|
|
800
|
+
</div>
|
|
801
|
+
</div>
|
|
802
|
+
</section>
|
|
803
|
+
|
|
804
|
+
<section id="files" class="panel">
|
|
805
|
+
<h2>配置文件</h2>
|
|
806
|
+
<details open>
|
|
807
|
+
<summary>用户可编辑</summary>
|
|
808
|
+
<div class="detail-body">
|
|
809
|
+
<pre>~/.ai-gateway/providers.json
|
|
810
|
+
~/.ai-gateway/memory.json
|
|
811
|
+
~/.ai-gateway/model-pricing.json</pre>
|
|
812
|
+
<p><code>providers.json</code> 保存聊天 provider 与 <code>apiKeyRef</code>;<code>memory.json</code> 保存记忆检索 embedding 模型与 secret ref;实际凭证进入 SecretStore。<code>model-pricing.json</code> 保存美元 / 百万 token 的模型价格。</p>
|
|
813
|
+
</div>
|
|
814
|
+
</details>
|
|
815
|
+
<details>
|
|
816
|
+
<summary>内部状态</summary>
|
|
817
|
+
<div class="detail-body">
|
|
818
|
+
<pre>~/.ai-gateway/.ai-cache.json
|
|
819
|
+
~/.ai-gateway/usage.json
|
|
820
|
+
~/.ai-gateway/sessions.json
|
|
821
|
+
~/.ai-gateway/telegram.json
|
|
822
|
+
~/.ai-gateway/telegram.sqlite
|
|
823
|
+
~/.ai-gateway/telegram.log
|
|
824
|
+
~/.ai-gateway/reports/
|
|
825
|
+
~/.ai-gateway/exports/
|
|
826
|
+
~/.ai-gateway/.ai-gateway.log</pre>
|
|
827
|
+
<p>除非调试问题,否则不要手动修改内部文件。</p>
|
|
828
|
+
</div>
|
|
829
|
+
</details>
|
|
830
|
+
</section>
|
|
831
|
+
</div>
|
|
832
|
+
</main>
|
|
833
|
+
</div>
|
|
834
|
+
|
|
835
|
+
<script>
|
|
836
|
+
const search = document.getElementById("commandSearch");
|
|
837
|
+
const rows = Array.from(document.querySelectorAll("#commandTable tbody tr"));
|
|
838
|
+
const emptyState = document.getElementById("emptyState");
|
|
839
|
+
|
|
840
|
+
search.addEventListener("input", () => {
|
|
841
|
+
const query = search.value.trim().toLowerCase();
|
|
842
|
+
let visible = 0;
|
|
843
|
+
for (const row of rows) {
|
|
844
|
+
const haystack = `${row.textContent} ${row.dataset.search || ""}`.toLowerCase();
|
|
845
|
+
const match = !query || haystack.includes(query);
|
|
846
|
+
row.style.display = match ? "" : "none";
|
|
847
|
+
if (match) visible += 1;
|
|
848
|
+
}
|
|
849
|
+
emptyState.style.display = visible ? "none" : "block";
|
|
850
|
+
});
|
|
851
|
+
</script>
|
|
852
|
+
</body>
|
|
853
|
+
</html>
|