chivgent 0.7.1 → 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.
- package/README.md +95 -3
- package/README.zh-CN.md +87 -3
- package/dist/agent.d.ts +14 -0
- package/dist/agent.d.ts.map +1 -1
- package/dist/agent.js +33 -1
- package/dist/agent.js.map +1 -1
- package/dist/auth/credentials.d.ts +26 -0
- package/dist/auth/credentials.d.ts.map +1 -0
- package/dist/auth/credentials.js +29 -0
- package/dist/auth/credentials.js.map +1 -0
- package/dist/auth/env-credentials.d.ts +10 -0
- package/dist/auth/env-credentials.d.ts.map +1 -0
- package/dist/auth/env-credentials.js +18 -0
- package/dist/auth/env-credentials.js.map +1 -0
- package/dist/auth/file-credentials.d.ts +25 -0
- package/dist/auth/file-credentials.d.ts.map +1 -0
- package/dist/auth/file-credentials.js +94 -0
- package/dist/auth/file-credentials.js.map +1 -0
- package/dist/auth/runtime-credentials.d.ts +10 -0
- package/dist/auth/runtime-credentials.d.ts.map +1 -0
- package/dist/auth/runtime-credentials.js +15 -0
- package/dist/auth/runtime-credentials.js.map +1 -0
- package/dist/cli-options.d.ts +16 -9
- package/dist/cli-options.d.ts.map +1 -1
- package/dist/cli-options.js +72 -26
- package/dist/cli-options.js.map +1 -1
- package/dist/cli.js +14 -42
- package/dist/cli.js.map +1 -1
- package/dist/context/compaction.d.ts +39 -0
- package/dist/context/compaction.d.ts.map +1 -0
- package/dist/context/compaction.js +141 -0
- package/dist/context/compaction.js.map +1 -0
- package/dist/context/context-manager.d.ts +72 -0
- package/dist/context/context-manager.d.ts.map +1 -0
- package/dist/context/context-manager.js +129 -0
- package/dist/context/context-manager.js.map +1 -0
- package/dist/context/token-estimator.d.ts +22 -0
- package/dist/context/token-estimator.d.ts.map +1 -0
- package/dist/context/token-estimator.js +43 -0
- package/dist/context/token-estimator.js.map +1 -0
- package/dist/providers/client.d.ts +7 -0
- package/dist/providers/client.d.ts.map +1 -0
- package/dist/providers/client.js +48 -0
- package/dist/providers/client.js.map +1 -0
- package/dist/providers/definitions.d.ts +25 -0
- package/dist/providers/definitions.d.ts.map +1 -0
- package/dist/providers/definitions.js +97 -0
- package/dist/providers/definitions.js.map +1 -0
- package/dist/providers/registry.d.ts +15 -0
- package/dist/providers/registry.d.ts.map +1 -0
- package/dist/providers/registry.js +34 -0
- package/dist/providers/registry.js.map +1 -0
- 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.
|
|
@@ -131,8 +134,11 @@ Options:
|
|
|
131
134
|
--json Write the run as JSON lines instead of rendered text
|
|
132
135
|
-c, --continue Resume the most recent session for this workspace
|
|
133
136
|
--resume ID Resume a specific session
|
|
137
|
+
--api-key KEY API key for this run; prefer an environment variable
|
|
134
138
|
--sessions List recorded sessions and exit
|
|
135
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
|
|
136
142
|
--no-session Do not record this run
|
|
137
143
|
-h, --help Show help
|
|
138
144
|
-v, --version Show version
|
|
@@ -152,12 +158,45 @@ reached, `130` interrupted with Ctrl+C.
|
|
|
152
158
|
| OpenAI | `OPENAI_API_KEY` | `OPENAI_MODEL` | `gpt-5.6` | Responses API |
|
|
153
159
|
| DeepSeek | `DEEPSEEK_API_KEY` | `DEEPSEEK_MODEL` | `deepseek-v4-flash` | OpenAI-compatible Chat Completions |
|
|
154
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 |
|
|
155
165
|
|
|
156
166
|
An explicit `--model` value takes precedence over the Provider-specific model
|
|
157
167
|
environment variable. Custom compatible Providers also require
|
|
158
168
|
`OPENAI_BASE_URL`. Sessions are written under `CHIVGENT_HOME` (default
|
|
159
169
|
`~/.chivgent`).
|
|
160
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
|
+
|
|
161
200
|
```bash
|
|
162
201
|
chivgent --provider openai --model gpt-5.6 "Explain package.json"
|
|
163
202
|
chivgent --provider deepseek --model deepseek-v4-pro "Explain package.json"
|
|
@@ -187,6 +226,42 @@ AssistantMessage <- normalized result
|
|
|
187
226
|
This prevents the Agent, tools, and CLI from depending on one vendor's message
|
|
188
227
|
format.
|
|
189
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
|
+
|
|
190
265
|
### Runtime events
|
|
191
266
|
|
|
192
267
|
The Agent Loop reports what it is doing through a typed event stream instead of
|
|
@@ -252,6 +327,11 @@ inside thin Provider adapters rather than leaking them into the Agent loop.
|
|
|
252
327
|
src/
|
|
253
328
|
cli.ts CLI entry point and process boundary
|
|
254
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
|
|
255
335
|
agent.ts Agent loop and run state
|
|
256
336
|
events.ts Runtime event model
|
|
257
337
|
render.ts Terminal renderer for runtime events
|
|
@@ -261,6 +341,10 @@ src/
|
|
|
261
341
|
session.ts Conversation state and event fan-out
|
|
262
342
|
session-store.ts JSONL session log and resume support
|
|
263
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
|
|
264
348
|
workspace.ts Workspace configuration and the read-only default
|
|
265
349
|
workspace/
|
|
266
350
|
types.ts Limits, errors, and the Workspace contract
|
|
@@ -272,6 +356,9 @@ src/
|
|
|
272
356
|
search.ts Literal text search
|
|
273
357
|
write.ts Atomic whole-file writes and exact edits
|
|
274
358
|
providers/
|
|
359
|
+
registry.ts Provider registry
|
|
360
|
+
definitions.ts Built-in Provider declarations
|
|
361
|
+
client.ts Credential resolution into an LLM client
|
|
275
362
|
openai.ts OpenAI Responses adapter
|
|
276
363
|
openai-compatible-chat.ts Shared Chat Completions adapter
|
|
277
364
|
deepseek.ts DeepSeek configuration wrapper
|
|
@@ -314,7 +401,12 @@ manual so the default test suite never consumes credits.
|
|
|
314
401
|
|
|
315
402
|
## Security model
|
|
316
403
|
|
|
317
|
-
- API keys
|
|
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.
|
|
318
410
|
- A custom `OPENAI_BASE_URL` receives the configured API key and prompts; use
|
|
319
411
|
only endpoints you trust.
|
|
320
412
|
- Workspace tools are read-only unless `--allow-writes` is passed; `write_file`
|
|
@@ -353,11 +445,11 @@ a sensitive project.
|
|
|
353
445
|
- [x] Project discovery tools: `list_files`, `search_text`, and ranged `read_file`
|
|
354
446
|
- [x] Streaming output and runtime events
|
|
355
447
|
- [x] Persistent multi-turn sessions
|
|
356
|
-
- [
|
|
448
|
+
- [x] Context-window management and compaction
|
|
357
449
|
- [x] Opt-in `write_file` and `edit_file` behind `--allow-writes`
|
|
358
450
|
- [ ] Per-edit confirmation prompts and an undo log
|
|
359
451
|
- [ ] Permission-gated shell tools
|
|
360
|
-
- [
|
|
452
|
+
- [x] Provider registry and credential resolution chain
|
|
361
453
|
- [ ] TUI, extensions, telemetry, and evals
|
|
362
454
|
|
|
363
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,6 +30,7 @@
|
|
|
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` 确定性地发现项目内容。
|
|
@@ -127,8 +130,11 @@ chivgent [选项] 进入交互式会话
|
|
|
127
130
|
--json 以 JSON Lines 输出整次运行,而不是渲染文本
|
|
128
131
|
-c, --continue 恢复当前工作区最近的一次 Session
|
|
129
132
|
--resume ID 恢复指定 Session
|
|
133
|
+
--api-key KEY 本次运行使用的 API Key;更推荐用环境变量
|
|
130
134
|
--sessions 列出已记录的 Session 并退出
|
|
131
135
|
--allow-writes 允许 Agent 创建和修改文件(默认只读)
|
|
136
|
+
--context-window N 上下文的 Token 预算(默认:128000)
|
|
137
|
+
--no-compaction 发送完整 transcript,不压缩较早的轮次
|
|
132
138
|
--no-session 不记录本次运行
|
|
133
139
|
-h, --help 显示帮助
|
|
134
140
|
-v, --version 显示版本
|
|
@@ -147,10 +153,41 @@ Ctrl+C 中断。
|
|
|
147
153
|
| OpenAI | `OPENAI_API_KEY` | `OPENAI_MODEL` | `gpt-5.6` | Responses API |
|
|
148
154
|
| DeepSeek | `DEEPSEEK_API_KEY` | `DEEPSEEK_MODEL` | `deepseek-v4-flash` | OpenAI-compatible Chat Completions |
|
|
149
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 |
|
|
150
160
|
|
|
151
161
|
显式传入的 `--model` 优先于 Provider 对应的模型环境变量。自定义兼容供应商还必须
|
|
152
162
|
配置 `OPENAI_BASE_URL`。Session 记录在 `CHIVGENT_HOME`(默认 `~/.chivgent`)下。
|
|
153
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
|
+
|
|
154
191
|
```bash
|
|
155
192
|
chivgent --provider openai --model gpt-5.6 "解释 package.json"
|
|
156
193
|
chivgent --provider deepseek --model deepseek-v4-pro "解释 package.json"
|
|
@@ -179,6 +216,39 @@ AssistantMessage <- Normalized Result
|
|
|
179
216
|
|
|
180
217
|
因此 Agent、工具和 CLI 不会依赖任何单一供应商的消息格式。
|
|
181
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
|
+
|
|
182
252
|
### 运行时事件
|
|
183
253
|
|
|
184
254
|
Agent Loop 自己不打印任何内容,而是通过类型化的事件流对外汇报。一次运行会产生:
|
|
@@ -240,6 +310,11 @@ const client = new OpenAICompatibleChatClient({
|
|
|
240
310
|
src/
|
|
241
311
|
cli.ts CLI 入口与进程边界
|
|
242
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 存储
|
|
243
318
|
agent.ts Agent Loop 与运行状态
|
|
244
319
|
events.ts 运行时事件模型
|
|
245
320
|
render.ts 运行时事件的终端渲染
|
|
@@ -249,6 +324,10 @@ src/
|
|
|
249
324
|
session.ts 会话状态与事件分发
|
|
250
325
|
session-store.ts JSONL 会话日志与恢复
|
|
251
326
|
repl.ts 交互式输入与斜杠命令
|
|
327
|
+
context/
|
|
328
|
+
context-manager.ts 构造单次请求的消息
|
|
329
|
+
compaction.ts 压缩历史并跟踪文件
|
|
330
|
+
token-estimator.ts 基于字符的 Token 估算
|
|
252
331
|
workspace.ts 工作区配置与只读默认值
|
|
253
332
|
workspace/
|
|
254
333
|
types.ts 上限、错误类型与 Workspace 契约
|
|
@@ -260,6 +339,9 @@ src/
|
|
|
260
339
|
search.ts 字面量文本搜索
|
|
261
340
|
write.ts 原子整文件写入与精确编辑
|
|
262
341
|
providers/
|
|
342
|
+
registry.ts Provider 注册表
|
|
343
|
+
definitions.ts 内置 Provider 声明
|
|
344
|
+
client.ts 凭据解析并构造 LLM Client
|
|
263
345
|
openai.ts OpenAI Responses Adapter
|
|
264
346
|
openai-compatible-chat.ts 通用 Chat Completions Adapter
|
|
265
347
|
deepseek.ts DeepSeek 配置包装器
|
|
@@ -302,7 +384,9 @@ npm install -g ./chivgent-0.6.0.tgz
|
|
|
302
384
|
|
|
303
385
|
## 安全模型
|
|
304
386
|
|
|
305
|
-
- API Key
|
|
387
|
+
- API Key 依次从 `--api-key`、环境变量、可选的 `auth.json` 解析,绝不能提交到仓库。
|
|
388
|
+
- `auth.json` 以明文保存 Key,因此它是可选的;当文件权限允许其他用户读取时会告警。
|
|
389
|
+
- 该文件只接受字面量 Key,无法展开环境变量或执行 Shell 命令。
|
|
306
390
|
- 自定义 `OPENAI_BASE_URL` 会收到配置的 API Key 和提示词,只能使用可信端点。
|
|
307
391
|
- 不传 `--allow-writes` 时工作区工具全部只读,`write_file` 和 `edit_file` 根本
|
|
308
392
|
不会被注册。
|
|
@@ -336,11 +420,11 @@ npm install -g ./chivgent-0.6.0.tgz
|
|
|
336
420
|
- [x] 项目发现工具:`list_files`、`search_text` 和分段 `read_file`
|
|
337
421
|
- [x] 流式输出和运行时事件
|
|
338
422
|
- [x] 持久化多轮 Session
|
|
339
|
-
- [
|
|
423
|
+
- [x] Context Window 管理和压缩
|
|
340
424
|
- [x] 通过 `--allow-writes` 选择性开启的 `write_file` 和 `edit_file`
|
|
341
425
|
- [ ] 逐次修改确认与撤销日志
|
|
342
426
|
- [ ] 需要权限确认的 Shell 工具
|
|
343
|
-
- [
|
|
427
|
+
- [x] Provider Registry 与凭据解析链
|
|
344
428
|
- [ ] TUI、Extensions、Telemetry 和 Evals
|
|
345
429
|
|
|
346
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;
|
package/dist/agent.d.ts.map
CHANGED
|
@@ -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;
|
|
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
|
|
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"}
|