chivgent 0.7.0 → 0.9.0

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 (64) hide show
  1. package/README.md +96 -3
  2. package/README.zh-CN.md +88 -3
  3. package/dist/agent.d.ts +14 -0
  4. package/dist/agent.d.ts.map +1 -1
  5. package/dist/agent.js +33 -1
  6. package/dist/agent.js.map +1 -1
  7. package/dist/auth/credentials.d.ts +26 -0
  8. package/dist/auth/credentials.d.ts.map +1 -0
  9. package/dist/auth/credentials.js +29 -0
  10. package/dist/auth/credentials.js.map +1 -0
  11. package/dist/auth/env-credentials.d.ts +10 -0
  12. package/dist/auth/env-credentials.d.ts.map +1 -0
  13. package/dist/auth/env-credentials.js +18 -0
  14. package/dist/auth/env-credentials.js.map +1 -0
  15. package/dist/auth/file-credentials.d.ts +25 -0
  16. package/dist/auth/file-credentials.d.ts.map +1 -0
  17. package/dist/auth/file-credentials.js +94 -0
  18. package/dist/auth/file-credentials.js.map +1 -0
  19. package/dist/auth/runtime-credentials.d.ts +10 -0
  20. package/dist/auth/runtime-credentials.d.ts.map +1 -0
  21. package/dist/auth/runtime-credentials.js +15 -0
  22. package/dist/auth/runtime-credentials.js.map +1 -0
  23. package/dist/cli-options.d.ts +16 -9
  24. package/dist/cli-options.d.ts.map +1 -1
  25. package/dist/cli-options.js +72 -26
  26. package/dist/cli-options.js.map +1 -1
  27. package/dist/cli.js +14 -42
  28. package/dist/cli.js.map +1 -1
  29. package/dist/context/compaction.d.ts +39 -0
  30. package/dist/context/compaction.d.ts.map +1 -0
  31. package/dist/context/compaction.js +141 -0
  32. package/dist/context/compaction.js.map +1 -0
  33. package/dist/context/context-manager.d.ts +72 -0
  34. package/dist/context/context-manager.d.ts.map +1 -0
  35. package/dist/context/context-manager.js +129 -0
  36. package/dist/context/context-manager.js.map +1 -0
  37. package/dist/context/token-estimator.d.ts +22 -0
  38. package/dist/context/token-estimator.d.ts.map +1 -0
  39. package/dist/context/token-estimator.js +43 -0
  40. package/dist/context/token-estimator.js.map +1 -0
  41. package/dist/providers/client.d.ts +7 -0
  42. package/dist/providers/client.d.ts.map +1 -0
  43. package/dist/providers/client.js +48 -0
  44. package/dist/providers/client.js.map +1 -0
  45. package/dist/providers/definitions.d.ts +25 -0
  46. package/dist/providers/definitions.d.ts.map +1 -0
  47. package/dist/providers/definitions.js +97 -0
  48. package/dist/providers/definitions.js.map +1 -0
  49. package/dist/providers/registry.d.ts +15 -0
  50. package/dist/providers/registry.d.ts.map +1 -0
  51. package/dist/providers/registry.js +34 -0
  52. package/dist/providers/registry.js.map +1 -0
  53. package/dist/workspace/read.d.ts +2 -0
  54. package/dist/workspace/read.d.ts.map +1 -1
  55. package/dist/workspace/read.js +5 -1
  56. package/dist/workspace/read.js.map +1 -1
  57. package/dist/workspace/text.d.ts +15 -0
  58. package/dist/workspace/text.d.ts.map +1 -1
  59. package/dist/workspace/text.js +21 -2
  60. package/dist/workspace/text.js.map +1 -1
  61. package/dist/workspace/write.d.ts.map +1 -1
  62. package/dist/workspace/write.js +38 -11
  63. package/dist/workspace/write.js.map +1 -1
  64. package/package.json +1 -1
package/README.md CHANGED
@@ -24,11 +24,14 @@ to study before adding production-harness complexity.
24
24
 
25
25
  - A real multi-turn agent loop: model -> tool call -> tool result -> model.
26
26
  - Provider-independent runtime messages and tool contracts.
27
+ - A Provider registry: adding a Provider is a declaration, not a CLI change.
28
+ - API keys resolved from `--api-key`, the environment, then an optional file.
27
29
  - OpenAI support through the Responses API.
28
30
  - DeepSeek support through a reusable OpenAI-compatible Chat Completions client.
29
31
  - Custom OpenAI-compatible endpoints through environment-only configuration.
30
32
  - An interactive session with slash commands, or a single-shot question.
31
33
  - Sessions that persist as JSON lines and can be resumed in a later process.
34
+ - A context manager that summarises old turns to stay inside the window.
32
35
  - A `--json` event stream for scripting and other front ends.
33
36
  - Streamed answers rendered from a typed runtime event stream.
34
37
  - Interruptible runs: Ctrl+C ends the current run without losing the transcript.
@@ -37,6 +40,7 @@ to study before adding production-harness complexity.
37
40
  - Ranged `read_file` output with continuation hints and bounded tool results.
38
41
  - Read-only by default; `--allow-writes` adds `write_file` and `edit_file`.
39
42
  - Exact-match `edit_file` that refuses missing or ambiguous edits.
43
+ - Edits preserve the file's own byte order mark and CRLF line endings.
40
44
  - Atomic writes: a crash mid-write leaves the original file intact.
41
45
  - Safe workspace access with traversal and symlink-escape protection.
42
46
  - Root `.gitignore`, generated-directory, and sensitive-path filtering.
@@ -130,8 +134,11 @@ Options:
130
134
  --json Write the run as JSON lines instead of rendered text
131
135
  -c, --continue Resume the most recent session for this workspace
132
136
  --resume ID Resume a specific session
137
+ --api-key KEY API key for this run; prefer an environment variable
133
138
  --sessions List recorded sessions and exit
134
139
  --allow-writes Let the agent create and change files (default: read-only)
140
+ --context-window N Token budget for the context (default: 128000)
141
+ --no-compaction Send the whole transcript instead of summarising old turns
135
142
  --no-session Do not record this run
136
143
  -h, --help Show help
137
144
  -v, --version Show version
@@ -151,12 +158,45 @@ reached, `130` interrupted with Ctrl+C.
151
158
  | OpenAI | `OPENAI_API_KEY` | `OPENAI_MODEL` | `gpt-5.6` | Responses API |
152
159
  | DeepSeek | `DEEPSEEK_API_KEY` | `DEEPSEEK_MODEL` | `deepseek-v4-flash` | OpenAI-compatible Chat Completions |
153
160
  | Custom compatible | `OPENAI_API_KEY` | `OPENAI_MODEL` | Required | OpenAI-compatible Chat Completions |
161
+ | OpenRouter | `OPENROUTER_API_KEY` | `OPENROUTER_MODEL` | Required | OpenAI-compatible Chat Completions |
162
+ | Groq | `GROQ_API_KEY` | `GROQ_MODEL` | Required | OpenAI-compatible Chat Completions |
163
+ | xAI | `XAI_API_KEY` | `XAI_MODEL` | Required | OpenAI-compatible Chat Completions |
164
+ | Moonshot | `MOONSHOT_API_KEY` | `MOONSHOT_MODEL` | Required | OpenAI-compatible Chat Completions |
154
165
 
155
166
  An explicit `--model` value takes precedence over the Provider-specific model
156
167
  environment variable. Custom compatible Providers also require
157
168
  `OPENAI_BASE_URL`. Sessions are written under `CHIVGENT_HOME` (default
158
169
  `~/.chivgent`).
159
170
 
171
+ Providers are declared in a registry rather than branched on in the CLI, so
172
+ `--help` and `--provider` validation are generated from the same list that
173
+ creates the client.
174
+
175
+ #### API key resolution
176
+
177
+ Keys are resolved in this order, first match wins:
178
+
179
+ 1. `--api-key` for a single run
180
+ 2. the Provider's environment variable
181
+ 3. `<CHIVGENT_HOME>/auth.json`
182
+
183
+ An environment variable deliberately beats the stored file, matching the
184
+ convention other CLIs use, so a stored key can be overridden for one run
185
+ without editing anything.
186
+
187
+ `auth.json` is optional and holds literal keys only:
188
+
189
+ ```json
190
+ {
191
+ "openai": { "type": "api_key", "key": "sk-..." },
192
+ "deepseek": "sk-..."
193
+ }
194
+ ```
195
+
196
+ Neither `$VAR` expansion nor `!command` substitution is supported: letting a
197
+ config file spawn a process is a large attack surface for a small convenience.
198
+ chivgent warns when the file is readable by other users; keep it at `chmod 600`.
199
+
160
200
  ```bash
161
201
  chivgent --provider openai --model gpt-5.6 "Explain package.json"
162
202
  chivgent --provider deepseek --model deepseek-v4-pro "Explain package.json"
@@ -186,6 +226,42 @@ AssistantMessage <- normalized result
186
226
  This prevents the Agent, tools, and CLI from depending on one vendor's message
187
227
  format.
188
228
 
229
+ ### Context management
230
+
231
+ A session records everything that happened. The context manager decides what
232
+ is worth sending for one request. Keeping those apart is what lets a long
233
+ session stay inside a fixed context window.
234
+
235
+ ```text
236
+ Full transcript ──────────────→ Session store (what happened)
237
+
238
+
239
+ ContextManager
240
+ │ token estimate vs. contextWindow - reserveTokens
241
+
242
+ summary + recent messages ────→ Provider (what the model sees)
243
+ ```
244
+
245
+ When the estimate exceeds the budget, older messages are summarised into a
246
+ single message and recent turns are kept verbatim. Three details matter:
247
+
248
+ - **File lists are derived from tool calls, not from the summary.** A summary
249
+ can forget or invent a path. For a coding agent, "which files did I read and
250
+ change" is the part that most needs to survive intact, so it is collected
251
+ from the `read_file`, `write_file`, and `edit_file` calls themselves.
252
+ - **Tool calls are never separated from their results.** A split point that
253
+ would orphan a tool result moves forward past the whole group.
254
+ - **Compaction discards the Provider continuation.** A Provider that chains
255
+ history server-side replays its own copy and ignores the messages sent with
256
+ it, so keeping the continuation would send back the history just removed.
257
+
258
+ Token counts are estimated from character length rather than with a real
259
+ tokenizer, which would be model-specific and a large dependency for a number
260
+ that only decides *when* to compact. The reserve budget absorbs the error.
261
+
262
+ A single tool result larger than the whole budget cannot be compacted away;
263
+ bound tool output instead. Compaction is disabled with `--no-compaction`.
264
+
189
265
  ### Runtime events
190
266
 
191
267
  The Agent Loop reports what it is doing through a typed event stream instead of
@@ -251,6 +327,11 @@ inside thin Provider adapters rather than leaking them into the Agent loop.
251
327
  src/
252
328
  cli.ts CLI entry point and process boundary
253
329
  cli-options.ts Argument and Provider configuration
330
+ auth/
331
+ credentials.ts Credential contract and resolution order
332
+ runtime-credentials.ts --api-key override
333
+ env-credentials.ts Environment variable lookup
334
+ file-credentials.ts Optional auth.json store
254
335
  agent.ts Agent loop and run state
255
336
  events.ts Runtime event model
256
337
  render.ts Terminal renderer for runtime events
@@ -260,6 +341,10 @@ src/
260
341
  session.ts Conversation state and event fan-out
261
342
  session-store.ts JSONL session log and resume support
262
343
  repl.ts Interactive prompt and slash commands
344
+ context/
345
+ context-manager.ts Builds the messages for one request
346
+ compaction.ts Summarises old history and tracks files
347
+ token-estimator.ts Character-based token approximation
263
348
  workspace.ts Workspace configuration and the read-only default
264
349
  workspace/
265
350
  types.ts Limits, errors, and the Workspace contract
@@ -271,6 +356,9 @@ src/
271
356
  search.ts Literal text search
272
357
  write.ts Atomic whole-file writes and exact edits
273
358
  providers/
359
+ registry.ts Provider registry
360
+ definitions.ts Built-in Provider declarations
361
+ client.ts Credential resolution into an LLM client
274
362
  openai.ts OpenAI Responses adapter
275
363
  openai-compatible-chat.ts Shared Chat Completions adapter
276
364
  deepseek.ts DeepSeek configuration wrapper
@@ -313,7 +401,12 @@ manual so the default test suite never consumes credits.
313
401
 
314
402
  ## Security model
315
403
 
316
- - API keys are read from environment variables and must never be committed.
404
+ - API keys come from `--api-key`, an environment variable, or an optional
405
+ `auth.json`, in that order, and must never be committed.
406
+ - `auth.json` stores keys in plain text. It is opt-in for that reason, and
407
+ chivgent warns when its permissions let other users read it.
408
+ - The auth file accepts literal keys only; it cannot expand environment
409
+ variables or run shell commands.
317
410
  - A custom `OPENAI_BASE_URL` receives the configured API key and prompts; use
318
411
  only endpoints you trust.
319
412
  - Workspace tools are read-only unless `--allow-writes` is passed; `write_file`
@@ -352,11 +445,11 @@ a sensitive project.
352
445
  - [x] Project discovery tools: `list_files`, `search_text`, and ranged `read_file`
353
446
  - [x] Streaming output and runtime events
354
447
  - [x] Persistent multi-turn sessions
355
- - [ ] Context-window management and compaction
448
+ - [x] Context-window management and compaction
356
449
  - [x] Opt-in `write_file` and `edit_file` behind `--allow-writes`
357
450
  - [ ] Per-edit confirmation prompts and an undo log
358
451
  - [ ] Permission-gated shell tools
359
- - [ ] Provider registry and user configuration file
452
+ - [x] Provider registry and credential resolution chain
360
453
  - [ ] TUI, extensions, telemetry, and evals
361
454
 
362
455
  ## Documentation
package/README.zh-CN.md CHANGED
@@ -21,6 +21,8 @@
21
21
 
22
22
  - 完整的多轮 Agent Loop:模型 -> Tool Call -> Tool Result -> 模型。
23
23
  - Provider 无关的运行时消息和工具契约。
24
+ - Provider 注册表:新增 Provider 只是一条声明,不需要改 CLI。
25
+ - API Key 依次从 `--api-key`、环境变量、可选文件解析。
24
26
  - 通过 Responses API 支持 OpenAI。
25
27
  - 通过通用 OpenAI-compatible Chat Completions 客户端支持 DeepSeek。
26
28
  - 无需修改代码即可配置自定义 OpenAI-compatible API。
@@ -28,12 +30,14 @@
28
30
  - Session 以 JSON Lines 持久化,可以在之后的进程中恢复。
29
31
  - 提供 `--json` 事件流,便于脚本和其他前端消费。
30
32
  - 基于类型化运行时事件流的流式输出。
33
+ - 上下文管理器:压缩较早的轮次以待在窗口内。
31
34
  - 可中断的运行:Ctrl+C 结束当前运行,且不会丢失已产生的 transcript。
32
35
  - Provider 调用具备单次超时和有上限的指数退避重试。
33
36
  - 通过 `list_files` 和字面量 `search_text` 确定性地发现项目内容。
34
37
  - 支持带续读提示的分段 `read_file`,所有工具结果都有容量上限。
35
38
  - 默认只读;`--allow-writes` 才会启用 `write_file` 和 `edit_file`。
36
39
  - 精确匹配的 `edit_file`,命中缺失或不唯一时拒绝执行。
40
+ - 编辑会保留文件原有的 BOM 和 CRLF 换行符。
37
41
  - 原子写入:写入中途崩溃不会损坏原文件。
38
42
  - 安全的工作区访问,阻止路径穿越和符号链接逃逸。
39
43
  - 支持根 `.gitignore`、生成目录和敏感路径过滤。
@@ -126,8 +130,11 @@ chivgent [选项] 进入交互式会话
126
130
  --json 以 JSON Lines 输出整次运行,而不是渲染文本
127
131
  -c, --continue 恢复当前工作区最近的一次 Session
128
132
  --resume ID 恢复指定 Session
133
+ --api-key KEY 本次运行使用的 API Key;更推荐用环境变量
129
134
  --sessions 列出已记录的 Session 并退出
130
135
  --allow-writes 允许 Agent 创建和修改文件(默认只读)
136
+ --context-window N 上下文的 Token 预算(默认:128000)
137
+ --no-compaction 发送完整 transcript,不压缩较早的轮次
131
138
  --no-session 不记录本次运行
132
139
  -h, --help 显示帮助
133
140
  -v, --version 显示版本
@@ -146,10 +153,41 @@ Ctrl+C 中断。
146
153
  | OpenAI | `OPENAI_API_KEY` | `OPENAI_MODEL` | `gpt-5.6` | Responses API |
147
154
  | DeepSeek | `DEEPSEEK_API_KEY` | `DEEPSEEK_MODEL` | `deepseek-v4-flash` | OpenAI-compatible Chat Completions |
148
155
  | 自定义兼容供应商 | `OPENAI_API_KEY` | `OPENAI_MODEL` | 必填 | OpenAI-compatible Chat Completions |
156
+ | OpenRouter | `OPENROUTER_API_KEY` | `OPENROUTER_MODEL` | 必填 | OpenAI-compatible Chat Completions |
157
+ | Groq | `GROQ_API_KEY` | `GROQ_MODEL` | 必填 | OpenAI-compatible Chat Completions |
158
+ | xAI | `XAI_API_KEY` | `XAI_MODEL` | 必填 | OpenAI-compatible Chat Completions |
159
+ | Moonshot | `MOONSHOT_API_KEY` | `MOONSHOT_MODEL` | 必填 | OpenAI-compatible Chat Completions |
149
160
 
150
161
  显式传入的 `--model` 优先于 Provider 对应的模型环境变量。自定义兼容供应商还必须
151
162
  配置 `OPENAI_BASE_URL`。Session 记录在 `CHIVGENT_HOME`(默认 `~/.chivgent`)下。
152
163
 
164
+ Provider 通过注册表声明,而不是在 CLI 里分支判断,因此 `--help` 的内容、
165
+ `--provider` 的校验和实际创建 Client 用的是同一份清单。
166
+
167
+ #### API Key 解析顺序
168
+
169
+ 按以下顺序解析,命中即停:
170
+
171
+ 1. `--api-key`(仅本次运行)
172
+ 2. Provider 对应的环境变量
173
+ 3. `<CHIVGENT_HOME>/auth.json`
174
+
175
+ 环境变量刻意排在文件之前,与其他 CLI 的惯例一致,这样已存储的 Key 可以被
176
+ 一次性的环境变量临时覆盖,而不必改文件。
177
+
178
+ `auth.json` 是可选的,只接受字面量 Key:
179
+
180
+ ```json
181
+ {
182
+ "openai": { "type": "api_key", "key": "sk-..." },
183
+ "deepseek": "sk-..."
184
+ }
185
+ ```
186
+
187
+ 不支持 `$VAR` 展开,也不支持 `!command` 替换:让配置文件能够启动进程,
188
+ 是用很小的便利换很大的攻击面。当该文件可被其他用户读取时 chivgent 会告警,
189
+ 请保持 `chmod 600`。
190
+
153
191
  ```bash
154
192
  chivgent --provider openai --model gpt-5.6 "解释 package.json"
155
193
  chivgent --provider deepseek --model deepseek-v4-pro "解释 package.json"
@@ -178,6 +216,39 @@ AssistantMessage <- Normalized Result
178
216
 
179
217
  因此 Agent、工具和 CLI 不会依赖任何单一供应商的消息格式。
180
218
 
219
+ ### 上下文管理
220
+
221
+ Session 记录发生过的一切;Context Manager 决定这一次请求值得发送什么。把两者
222
+ 分开,才能让长会话待在固定的上下文窗口内。
223
+
224
+ ```text
225
+ 完整 transcript ──────────────→ Session Store(发生了什么)
226
+
227
+
228
+ ContextManager
229
+ │ token 估算 vs. contextWindow - reserveTokens
230
+
231
+ 摘要 + 最近消息 ──────────────→ Provider(模型看到什么)
232
+ ```
233
+
234
+ 当估算超出预算时,较早的消息会被压缩成一条摘要消息,最近若干轮原样保留。
235
+ 有三个细节值得注意:
236
+
237
+ - **文件清单从工具调用推导,而不是从摘要里提取。** 摘要可能遗漏或者编造路径。
238
+ 对 Coding Agent 来说,「我读过和改过哪些文件」是最需要完整存活的信息,因此
239
+ 它直接从 `read_file`、`write_file`、`edit_file` 的调用参数收集。
240
+ - **工具调用永远不会和它的结果被切开。** 会把 tool result 孤立的切点会向前
241
+ 移动,越过整组消息。
242
+ - **压缩会丢弃 Provider continuation。** 在服务端串联历史的 Provider 会重放
243
+ 它自己那份历史、忽略请求里带的消息,保留 continuation 等于把刚压缩掉的历史
244
+ 又送了回去。
245
+
246
+ Token 数量按字符长度估算,而不是用真正的 tokenizer:后者与模型强相关,为一个
247
+ 只用来决定「何时压缩」的数字引入大依赖并不划算,估算误差由 reserve 预算吸收。
248
+
249
+ 单条超过整个预算的工具结果无法被压缩掉,这种情况应该去限制工具输出本身。
250
+ 用 `--no-compaction` 可以关闭压缩。
251
+
181
252
  ### 运行时事件
182
253
 
183
254
  Agent Loop 自己不打印任何内容,而是通过类型化的事件流对外汇报。一次运行会产生:
@@ -239,6 +310,11 @@ const client = new OpenAICompatibleChatClient({
239
310
  src/
240
311
  cli.ts CLI 入口与进程边界
241
312
  cli-options.ts 参数和 Provider 配置
313
+ auth/
314
+ credentials.ts 凭据契约与解析顺序
315
+ runtime-credentials.ts --api-key 覆盖层
316
+ env-credentials.ts 环境变量查找
317
+ file-credentials.ts 可选的 auth.json 存储
242
318
  agent.ts Agent Loop 与运行状态
243
319
  events.ts 运行时事件模型
244
320
  render.ts 运行时事件的终端渲染
@@ -248,6 +324,10 @@ src/
248
324
  session.ts 会话状态与事件分发
249
325
  session-store.ts JSONL 会话日志与恢复
250
326
  repl.ts 交互式输入与斜杠命令
327
+ context/
328
+ context-manager.ts 构造单次请求的消息
329
+ compaction.ts 压缩历史并跟踪文件
330
+ token-estimator.ts 基于字符的 Token 估算
251
331
  workspace.ts 工作区配置与只读默认值
252
332
  workspace/
253
333
  types.ts 上限、错误类型与 Workspace 契约
@@ -259,6 +339,9 @@ src/
259
339
  search.ts 字面量文本搜索
260
340
  write.ts 原子整文件写入与精确编辑
261
341
  providers/
342
+ registry.ts Provider 注册表
343
+ definitions.ts 内置 Provider 声明
344
+ client.ts 凭据解析并构造 LLM Client
262
345
  openai.ts OpenAI Responses Adapter
263
346
  openai-compatible-chat.ts 通用 Chat Completions Adapter
264
347
  deepseek.ts DeepSeek 配置包装器
@@ -301,7 +384,9 @@ npm install -g ./chivgent-0.6.0.tgz
301
384
 
302
385
  ## 安全模型
303
386
 
304
- - API Key 只从环境变量读取,绝不能提交到仓库。
387
+ - API Key 依次从 `--api-key`、环境变量、可选的 `auth.json` 解析,绝不能提交到仓库。
388
+ - `auth.json` 以明文保存 Key,因此它是可选的;当文件权限允许其他用户读取时会告警。
389
+ - 该文件只接受字面量 Key,无法展开环境变量或执行 Shell 命令。
305
390
  - 自定义 `OPENAI_BASE_URL` 会收到配置的 API Key 和提示词,只能使用可信端点。
306
391
  - 不传 `--allow-writes` 时工作区工具全部只读,`write_file` 和 `edit_file` 根本
307
392
  不会被注册。
@@ -335,11 +420,11 @@ npm install -g ./chivgent-0.6.0.tgz
335
420
  - [x] 项目发现工具:`list_files`、`search_text` 和分段 `read_file`
336
421
  - [x] 流式输出和运行时事件
337
422
  - [x] 持久化多轮 Session
338
- - [ ] Context Window 管理和压缩
423
+ - [x] Context Window 管理和压缩
339
424
  - [x] 通过 `--allow-writes` 选择性开启的 `write_file` 和 `edit_file`
340
425
  - [ ] 逐次修改确认与撤销日志
341
426
  - [ ] 需要权限确认的 Shell 工具
342
- - [ ] Provider Registry 和用户配置文件
427
+ - [x] Provider Registry 与凭据解析链
343
428
  - [ ] TUI、Extensions、Telemetry 和 Evals
344
429
 
345
430
  ## 文档
package/dist/agent.d.ts CHANGED
@@ -3,6 +3,7 @@ import { type LLMClient } from "./llm.js";
3
3
  import type { AssistantMessage, Message } from "./messages.js";
4
4
  import type { Tool } from "./tools/tool.js";
5
5
  import type { Workspace } from "./workspace.js";
6
+ import type { ContextManager } from "./context/context-manager.js";
6
7
  export interface AgentOptions {
7
8
  readonly systemPrompt: string;
8
9
  readonly maxTurns: number;
@@ -13,6 +14,10 @@ export interface AgentOptions {
13
14
  readonly onEvent?: AgentEventListener;
14
15
  /** Use the Provider's streaming API when it offers one. Defaults to true. */
15
16
  readonly streaming?: boolean;
17
+ /**
18
+ * Decides what the model sees each turn. Omit to send the whole transcript.
19
+ */
20
+ readonly contextManager?: ContextManager;
16
21
  }
17
22
  export interface AgentRunOptions {
18
23
  /** Cancels the run between turns, during a Provider call, and between tools. */
@@ -45,10 +50,19 @@ export declare class Agent {
45
50
  private readonly workspace;
46
51
  private readonly onEvent?;
47
52
  private readonly streaming;
53
+ private readonly contextManager?;
48
54
  constructor(options: AgentOptions);
49
55
  get toolNames(): readonly string[];
50
56
  run(userInput: string, options?: AgentRunOptions): Promise<AgentRunResult>;
51
57
  private loop;
58
+ /**
59
+ * Produces the messages for one request and records any compaction.
60
+ *
61
+ * A Provider holding a continuation replays its own history and ignores the
62
+ * messages sent with it, so a fresh compaction has to drop the continuation
63
+ * to take effect at all.
64
+ */
65
+ private buildContext;
52
66
  private requestAssistantMessage;
53
67
  private assertUniqueToolCallIds;
54
68
  private executeToolCall;
@@ -1 +1 @@
1
- {"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,kBAAkB,EAExB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAgB,KAAK,SAAS,EAAwB,MAAM,UAAU,CAAC;AAC9E,OAAO,KAAK,EACV,gBAAgB,EAChB,OAAO,EAGR,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EAAE,IAAI,EAA8B,MAAM,iBAAiB,CAAC;AACxE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEhD,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,GAAG,EAAE,SAAS,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,SAAS,IAAI,EAAE,CAAC;IAChC,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAC9B,gEAAgE;IAChE,QAAQ,CAAC,OAAO,CAAC,EAAE,kBAAkB,CAAC;IACtC,6EAA6E;IAC7E,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,MAAM,WAAW,eAAe;IAC9B,gFAAgF;IAChF,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;IAC9B;;;OAGG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,OAAO,EAAE,CAAC;CACvC;AAED,MAAM,MAAM,cAAc,GACtB;IACE,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,QAAQ,CAAC,YAAY,EAAE,gBAAgB,CAAC;IACxC,QAAQ,CAAC,QAAQ,EAAE,SAAS,OAAO,EAAE,CAAC;IACtC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B,GACD;IACE,QAAQ,CAAC,MAAM,EAAE,WAAW,GAAG,SAAS,CAAC;IACzC,QAAQ,CAAC,QAAQ,EAAE,SAAS,OAAO,EAAE,CAAC;IACtC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B,CAAC;AASN,qBAAa,kBAAmB,SAAQ,KAAK;IAC3C,YAAY,OAAO,EAAE,MAAM,EAG1B;CACF;AAED,qBAAa,KAAK;IAChB,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAY;IAChC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA4B;IACrD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAA4B;IAC5D,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAY;IACtC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAqB;IAC9C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAU;IAEpC,YAAY,OAAO,EAAE,YAAY,EAmBhC;IAED,IAAI,SAAS,IAAI,SAAS,MAAM,EAAE,CAEjC;IAEK,GAAG,CACP,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE,eAAoB,GAC5B,OAAO,CAAC,cAAc,CAAC,CAqCzB;YAEa,IAAI;YAuDJ,uBAAuB;IA2BrC,OAAO,CAAC,uBAAuB;YAcjB,eAAe;IA0D7B,OAAO,CAAC,IAAI;IAIZ,OAAO,CAAC,OAAO;CAahB"}
1
+ {"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,kBAAkB,EAExB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAgB,KAAK,SAAS,EAAwB,MAAM,UAAU,CAAC;AAC9E,OAAO,KAAK,EACV,gBAAgB,EAChB,OAAO,EAGR,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EAAE,IAAI,EAA8B,MAAM,iBAAiB,CAAC;AACxE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,EAEV,cAAc,EACf,MAAM,8BAA8B,CAAC;AAEtC,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,GAAG,EAAE,SAAS,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,SAAS,IAAI,EAAE,CAAC;IAChC,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAC9B,gEAAgE;IAChE,QAAQ,CAAC,OAAO,CAAC,EAAE,kBAAkB,CAAC;IACtC,6EAA6E;IAC7E,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IAC7B;;OAEG;IACH,QAAQ,CAAC,cAAc,CAAC,EAAE,cAAc,CAAC;CAC1C;AAED,MAAM,WAAW,eAAe;IAC9B,gFAAgF;IAChF,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;IAC9B;;;OAGG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,OAAO,EAAE,CAAC;CACvC;AAED,MAAM,MAAM,cAAc,GACtB;IACE,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,QAAQ,CAAC,YAAY,EAAE,gBAAgB,CAAC;IACxC,QAAQ,CAAC,QAAQ,EAAE,SAAS,OAAO,EAAE,CAAC;IACtC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B,GACD;IACE,QAAQ,CAAC,MAAM,EAAE,WAAW,GAAG,SAAS,CAAC;IACzC,QAAQ,CAAC,QAAQ,EAAE,SAAS,OAAO,EAAE,CAAC;IACtC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B,CAAC;AAUN,qBAAa,kBAAmB,SAAQ,KAAK;IAC3C,YAAY,OAAO,EAAE,MAAM,EAG1B;CACF;AAED,qBAAa,KAAK;IAChB,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAY;IAChC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA4B;IACrD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAA4B;IAC5D,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAY;IACtC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAqB;IAC9C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAU;IACpC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAiB;IAEjD,YAAY,OAAO,EAAE,YAAY,EAsBhC;IAED,IAAI,SAAS,IAAI,SAAS,MAAM,EAAE,CAEjC;IAEK,GAAG,CACP,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE,eAAoB,GAC5B,OAAO,CAAC,cAAc,CAAC,CAqCzB;YAEa,IAAI;IAuDlB;;;;;;OAMG;YACW,YAAY;YAwBZ,uBAAuB;IA4BrC,OAAO,CAAC,uBAAuB;YAcjB,eAAe;IA0D7B,OAAO,CAAC,IAAI;IAIZ,OAAO,CAAC,OAAO;CAahB"}
package/dist/agent.js CHANGED
@@ -15,6 +15,7 @@ export class Agent {
15
15
  workspace;
16
16
  onEvent;
17
17
  streaming;
18
+ contextManager;
18
19
  constructor(options) {
19
20
  if (!Number.isSafeInteger(options.maxTurns) || options.maxTurns <= 0) {
20
21
  throw new TypeError("maxTurns must be a positive safe integer.");
@@ -33,6 +34,9 @@ export class Agent {
33
34
  this.onEvent = options.onEvent;
34
35
  }
35
36
  this.streaming = options.streaming ?? true;
37
+ if (options.contextManager !== undefined) {
38
+ this.contextManager = options.contextManager;
39
+ }
36
40
  }
37
41
  get toolNames() {
38
42
  return [...this.registry.keys()];
@@ -115,10 +119,38 @@ export class Agent {
115
119
  turnCount: state.turnCount,
116
120
  };
117
121
  }
122
+ /**
123
+ * Produces the messages for one request and records any compaction.
124
+ *
125
+ * A Provider holding a continuation replays its own history and ignores the
126
+ * messages sent with it, so a fresh compaction has to drop the continuation
127
+ * to take effect at all.
128
+ */
129
+ async buildContext(state, signal) {
130
+ const snapshot = snapshotMessages(state.messages);
131
+ if (this.contextManager === undefined) {
132
+ return snapshot;
133
+ }
134
+ const context = await this.contextManager.build(snapshot, {
135
+ ...(state.compaction === undefined ? {} : { previous: state.compaction }),
136
+ ...(signal === undefined ? {} : { signal }),
137
+ });
138
+ if (context.compaction === undefined) {
139
+ delete state.compaction;
140
+ }
141
+ else {
142
+ state.compaction = context.compaction;
143
+ }
144
+ if (context.compacted) {
145
+ delete state.continuation;
146
+ }
147
+ return context.messages;
148
+ }
118
149
  async requestAssistantMessage(state, turn, signal) {
150
+ const messages = await this.buildContext(state, signal);
119
151
  const request = {
120
152
  systemPrompt: this.systemPrompt,
121
- messages: snapshotMessages(state.messages),
153
+ messages,
122
154
  tools: this.toolDefinitions,
123
155
  ...(state.continuation === undefined
124
156
  ? {}
package/dist/agent.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"agent.js","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agent.js","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ import type { ProviderDefinition } from "../providers/definitions.js";
2
+ export interface Credential {
3
+ readonly apiKey: string;
4
+ /** Where the key came from, used in diagnostics. Never contains the key. */
5
+ readonly origin: string;
6
+ }
7
+ export interface CredentialSource {
8
+ readonly name: string;
9
+ read(provider: ProviderDefinition): Promise<Credential | undefined>;
10
+ }
11
+ /**
12
+ * Walks credential sources in order and returns the first hit.
13
+ *
14
+ * The order is deliberate: an explicit `--api-key` beats the environment,
15
+ * and the environment beats the stored file. That matches the convention
16
+ * users already know from other CLIs, and means a stored credential can be
17
+ * overridden for a single run without editing the file.
18
+ */
19
+ export declare class CredentialResolver {
20
+ private readonly sources;
21
+ constructor(sources: readonly CredentialSource[]);
22
+ resolve(provider: ProviderDefinition): Promise<Credential | undefined>;
23
+ /** Explains what the user could set, for the "no credential" error. */
24
+ describeExpectations(provider: ProviderDefinition): string;
25
+ }
26
+ //# sourceMappingURL=credentials.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"credentials.d.ts","sourceRoot":"","sources":["../../src/auth/credentials.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AAEtE,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,4EAA4E;IAC5E,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,IAAI,CAAC,QAAQ,EAAE,kBAAkB,GAAG,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,CAAC;CACrE;AAED;;;;;;;GAOG;AACH,qBAAa,kBAAkB;IACjB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAApC,YAA6B,OAAO,EAAE,SAAS,gBAAgB,EAAE,EAAI;IAE/D,OAAO,CACX,QAAQ,EAAE,kBAAkB,GAC3B,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,CAQjC;IAED,uEAAuE;IACvE,oBAAoB,CAAC,QAAQ,EAAE,kBAAkB,GAAG,MAAM,CAGzD;CACF"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Walks credential sources in order and returns the first hit.
3
+ *
4
+ * The order is deliberate: an explicit `--api-key` beats the environment,
5
+ * and the environment beats the stored file. That matches the convention
6
+ * users already know from other CLIs, and means a stored credential can be
7
+ * overridden for a single run without editing the file.
8
+ */
9
+ export class CredentialResolver {
10
+ sources;
11
+ constructor(sources) {
12
+ this.sources = sources;
13
+ }
14
+ async resolve(provider) {
15
+ for (const source of this.sources) {
16
+ const credential = await source.read(provider);
17
+ if (credential !== undefined && credential.apiKey.length > 0) {
18
+ return credential;
19
+ }
20
+ }
21
+ return undefined;
22
+ }
23
+ /** Explains what the user could set, for the "no credential" error. */
24
+ describeExpectations(provider) {
25
+ const variables = provider.envKeys.join(" or ");
26
+ return `No API key for ${provider.id}. Set ${variables}, pass --api-key, or add "${provider.id}" to the auth file.`;
27
+ }
28
+ }
29
+ //# sourceMappingURL=credentials.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"credentials.js","sourceRoot":"","sources":["../../src/auth/credentials.ts"],"names":[],"mappings":"AAaA;;;;;;;GAOG;AACH,MAAM,OAAO,kBAAkB;IACA,OAAO;IAApC,YAA6B,OAAoC;uBAApC,OAAO;IAAgC,CAAC;IAErE,KAAK,CAAC,OAAO,CACX,QAA4B;QAE5B,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YAClC,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC/C,IAAI,UAAU,KAAK,SAAS,IAAI,UAAU,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC7D,OAAO,UAAU,CAAC;YACpB,CAAC;QACH,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,uEAAuE;IACvE,oBAAoB,CAAC,QAA4B;QAC/C,MAAM,SAAS,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAChD,OAAO,kBAAkB,QAAQ,CAAC,EAAE,SAAS,SAAS,6BAA6B,QAAQ,CAAC,EAAE,qBAAqB,CAAC;IACtH,CAAC;CACF"}
@@ -0,0 +1,10 @@
1
+ import type { ProviderDefinition } from "../providers/definitions.js";
2
+ import type { Credential, CredentialSource } from "./credentials.js";
3
+ /** Reads the Provider's declared environment variables, in declared order. */
4
+ export declare class EnvCredentialSource implements CredentialSource {
5
+ private readonly environment;
6
+ readonly name = "environment";
7
+ constructor(environment?: NodeJS.ProcessEnv);
8
+ read(provider: ProviderDefinition): Promise<Credential | undefined>;
9
+ }
10
+ //# sourceMappingURL=env-credentials.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env-credentials.d.ts","sourceRoot":"","sources":["../../src/auth/env-credentials.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AACtE,OAAO,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAErE,8EAA8E;AAC9E,qBAAa,mBAAoB,YAAW,gBAAgB;IAG9C,OAAO,CAAC,QAAQ,CAAC,WAAW;IAFxC,QAAQ,CAAC,IAAI,iBAAiB;IAE9B,YAA6B,WAAW,GAAE,MAAM,CAAC,UAAwB,EAAI;IAEvE,IAAI,CAAC,QAAQ,EAAE,kBAAkB,GAAG,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,CAQxE;CACF"}
@@ -0,0 +1,18 @@
1
+ /** Reads the Provider's declared environment variables, in declared order. */
2
+ export class EnvCredentialSource {
3
+ environment;
4
+ name = "environment";
5
+ constructor(environment = process.env) {
6
+ this.environment = environment;
7
+ }
8
+ async read(provider) {
9
+ for (const key of provider.envKeys) {
10
+ const value = this.environment[key];
11
+ if (value !== undefined && value.length > 0) {
12
+ return { apiKey: value, origin: key };
13
+ }
14
+ }
15
+ return undefined;
16
+ }
17
+ }
18
+ //# sourceMappingURL=env-credentials.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env-credentials.js","sourceRoot":"","sources":["../../src/auth/env-credentials.ts"],"names":[],"mappings":"AAGA,8EAA8E;AAC9E,MAAM,OAAO,mBAAmB;IAGD,WAAW;IAF/B,IAAI,GAAG,aAAa,CAAC;IAE9B,YAA6B,WAAW,GAAsB,OAAO,CAAC,GAAG;2BAA5C,WAAW;IAAoC,CAAC;IAE7E,KAAK,CAAC,IAAI,CAAC,QAA4B;QACrC,KAAK,MAAM,GAAG,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;YACnC,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;YACpC,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC5C,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;YACxC,CAAC;QACH,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;CACF"}
@@ -0,0 +1,25 @@
1
+ import type { ProviderDefinition } from "../providers/definitions.js";
2
+ import type { Credential, CredentialSource } from "./credentials.js";
3
+ export declare class AuthFileError extends Error {
4
+ constructor(message: string, options?: {
5
+ cause?: unknown;
6
+ });
7
+ }
8
+ export declare function defaultAuthFile(environment?: NodeJS.ProcessEnv): string;
9
+ /**
10
+ * Reads API keys from `<chivgent home>/auth.json`.
11
+ *
12
+ * The file deliberately supports only literal keys. Neither `$VAR` expansion
13
+ * nor `!command` substitution is accepted: letting a config file spawn a
14
+ * process is a large attack surface for a small convenience.
15
+ */
16
+ export declare class FileCredentialSource implements CredentialSource {
17
+ private readonly filePath;
18
+ private readonly onWarning;
19
+ readonly name = "auth file";
20
+ constructor(filePath?: string, onWarning?: (message: string) => void);
21
+ read(provider: ProviderDefinition): Promise<Credential | undefined>;
22
+ private parse;
23
+ private warnOnLoosePermissions;
24
+ }
25
+ //# sourceMappingURL=file-credentials.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-credentials.d.ts","sourceRoot":"","sources":["../../src/auth/file-credentials.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AACtE,OAAO,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAErE,qBAAa,aAAc,SAAQ,KAAK;IACtC,YAAY,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,EAGzD;CACF;AAED,wBAAgB,eAAe,CAC7B,WAAW,GAAE,MAAM,CAAC,UAAwB,GAC3C,MAAM,CAOR;AAED;;;;;;GAMG;AACH,qBAAa,oBAAqB,YAAW,gBAAgB;IAIzD,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAJ5B,QAAQ,CAAC,IAAI,eAAe;IAE5B,YACmB,QAAQ,GAAE,MAA0B,EACpC,SAAS,GAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAsB,EACrE;IAEE,IAAI,CAAC,QAAQ,EAAE,kBAAkB,GAAG,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,CAoBxE;IAED,OAAO,CAAC,KAAK;YA6BC,sBAAsB;CAWrC"}