chivgent 0.11.0 → 0.13.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 +125 -1
- package/README.zh-CN.md +113 -1
- package/dist/cli-options.d.ts +6 -0
- package/dist/cli-options.d.ts.map +1 -1
- package/dist/cli-options.js +25 -0
- package/dist/cli-options.js.map +1 -1
- package/dist/cli.js +162 -25
- package/dist/cli.js.map +1 -1
- package/dist/evals/cli.d.ts +3 -0
- package/dist/evals/cli.d.ts.map +1 -0
- package/dist/evals/cli.js +137 -0
- package/dist/evals/cli.js.map +1 -0
- package/dist/evals/fixture.d.ts +13 -0
- package/dist/evals/fixture.d.ts.map +1 -0
- package/dist/evals/fixture.js +18 -0
- package/dist/evals/fixture.js.map +1 -0
- package/dist/evals/graders.d.ts +21 -0
- package/dist/evals/graders.d.ts.map +1 -0
- package/dist/evals/graders.js +175 -0
- package/dist/evals/graders.js.map +1 -0
- package/dist/evals/parse-args.d.ts +18 -0
- package/dist/evals/parse-args.d.ts.map +1 -0
- package/dist/evals/parse-args.js +67 -0
- package/dist/evals/parse-args.js.map +1 -0
- package/dist/evals/report.d.ts +18 -0
- package/dist/evals/report.d.ts.map +1 -0
- package/dist/evals/report.js +103 -0
- package/dist/evals/report.js.map +1 -0
- package/dist/evals/runner.d.ts +43 -0
- package/dist/evals/runner.d.ts.map +1 -0
- package/dist/evals/runner.js +144 -0
- package/dist/evals/runner.js.map +1 -0
- package/dist/evals/task.d.ts +27 -0
- package/dist/evals/task.d.ts.map +1 -0
- package/dist/evals/task.js +116 -0
- package/dist/evals/task.js.map +1 -0
- package/dist/prompts.d.ts +12 -0
- package/dist/prompts.d.ts.map +1 -0
- package/dist/prompts.js +31 -0
- package/dist/prompts.js.map +1 -0
- package/dist/remote/client.d.ts +42 -0
- package/dist/remote/client.d.ts.map +1 -0
- package/dist/remote/client.js +173 -0
- package/dist/remote/client.js.map +1 -0
- package/dist/remote/framing.d.ts +33 -0
- package/dist/remote/framing.d.ts.map +1 -0
- package/dist/remote/framing.js +68 -0
- package/dist/remote/framing.js.map +1 -0
- package/dist/remote/protocol.d.ts +81 -0
- package/dist/remote/protocol.d.ts.map +1 -0
- package/dist/remote/protocol.js +79 -0
- package/dist/remote/protocol.js.map +1 -0
- package/dist/remote/repl.d.ts +18 -0
- package/dist/remote/repl.d.ts.map +1 -0
- package/dist/remote/repl.js +100 -0
- package/dist/remote/repl.js.map +1 -0
- package/dist/remote/server.d.ts +41 -0
- package/dist/remote/server.d.ts.map +1 -0
- package/dist/remote/server.js +214 -0
- package/dist/remote/server.js.map +1 -0
- package/dist/remote/socket-path.d.ts +33 -0
- package/dist/remote/socket-path.d.ts.map +1 -0
- package/dist/remote/socket-path.js +108 -0
- package/dist/remote/socket-path.js.map +1 -0
- package/dist/render.d.ts.map +1 -1
- package/dist/render.js +11 -1
- package/dist/render.js.map +1 -1
- package/package.json +3 -2
package/README.md
CHANGED
|
@@ -40,6 +40,9 @@ to study before adding production-harness complexity.
|
|
|
40
40
|
- Ranged `read_file` output with continuation hints and bounded tool results.
|
|
41
41
|
- Read-only by default; `--allow-writes` adds `write_file` and `edit_file`.
|
|
42
42
|
- An opt-in `bash` tool behind `--allow-shell`, with streamed output.
|
|
43
|
+
- An eval suite that measures whether the agent completes tasks, not just runs.
|
|
44
|
+
- Remote sessions: one process holds a session, others attach over a local socket.
|
|
45
|
+
- Several clients can watch one session; any of them can interrupt the run.
|
|
43
46
|
- Extensions that add tools, slash commands, event handlers and prompt text.
|
|
44
47
|
- Project extensions gated by a per-directory trust decision, taken before any
|
|
45
48
|
module is imported and refused outright when there is no terminal to ask.
|
|
@@ -147,6 +150,9 @@ Options:
|
|
|
147
150
|
--allow-writes Let the agent create and change files (default: read-only)
|
|
148
151
|
--allow-shell Let the agent run shell commands. This implies write access:
|
|
149
152
|
a shell is not bound by the workspace. Unix only.
|
|
153
|
+
--serve Expose this session on a local socket and keep running
|
|
154
|
+
--connect TARGET Attach to a served session, by id or socket path
|
|
155
|
+
--servers List the servers still answering, then exit
|
|
150
156
|
--no-extensions Do not load any extension, and do not ask about trust
|
|
151
157
|
--extensions List loaded extensions and what they register, then exit
|
|
152
158
|
--forget-trust Forget the trust decision covering this workspace, then exit
|
|
@@ -385,6 +391,22 @@ src/
|
|
|
385
391
|
write-file.ts Whole-file create and replace
|
|
386
392
|
edit-file.ts Exact unique-match edit
|
|
387
393
|
bash.ts Shell command execution
|
|
394
|
+
prompts.ts The instructions the agent runs under
|
|
395
|
+
evals/
|
|
396
|
+
task.ts Task definitions and their validation
|
|
397
|
+
fixture.ts A fresh workspace copy per attempt
|
|
398
|
+
graders.ts Deterministic graders
|
|
399
|
+
runner.ts Runs a task N times and aggregates
|
|
400
|
+
report.ts Table and JSON output
|
|
401
|
+
parse-args.ts Eval CLI arguments
|
|
402
|
+
cli.ts npm run eval
|
|
403
|
+
remote/
|
|
404
|
+
protocol.ts Message shapes and version negotiation
|
|
405
|
+
framing.ts JSON Lines framing with a bounded buffer
|
|
406
|
+
server.ts Serves one session on a Unix socket
|
|
407
|
+
client.ts Attaches to a served session
|
|
408
|
+
repl.ts The interactive loop for an attached client
|
|
409
|
+
socket-path.ts Socket paths, staleness, and discovery
|
|
388
410
|
extensions/
|
|
389
411
|
trust.ts Per-directory trust store
|
|
390
412
|
decide-trust.ts The prompt, and the refusal when nobody can answer
|
|
@@ -401,6 +423,7 @@ src/
|
|
|
401
423
|
truncate.ts Tail truncation for command output
|
|
402
424
|
sanitize.ts Control-character filtering
|
|
403
425
|
tests/ Provider, loop, and workspace tests
|
|
426
|
+
evals/ Eval tasks and their fixtures
|
|
404
427
|
docs/ Architecture and learning notes
|
|
405
428
|
```
|
|
406
429
|
|
|
@@ -429,6 +452,98 @@ npm install -g ./chivgent-0.6.0.tgz
|
|
|
429
452
|
Tests use scripted or mocked LLM clients. A real API smoke test is deliberately
|
|
430
453
|
manual so the default test suite never consumes credits.
|
|
431
454
|
|
|
455
|
+
## Evals
|
|
456
|
+
|
|
457
|
+
The 300-odd unit tests check that the code runs the way it was written. They say
|
|
458
|
+
nothing about whether this is a good agent. `npm run eval` answers that:
|
|
459
|
+
|
|
460
|
+
```bash
|
|
461
|
+
npm run eval # every task in evals/
|
|
462
|
+
npm run eval -- --task rename-symbol --attempts 10
|
|
463
|
+
npm run eval -- --allow-writes --allow-shell --json report.json
|
|
464
|
+
```
|
|
465
|
+
|
|
466
|
+
```text
|
|
467
|
+
task pass turns tools p50
|
|
468
|
+
find-auth-logic 4/5 2.0 list_files,search_text,... 6.1s
|
|
469
|
+
rename-symbol 3/5 5.4 read_file,edit_file 9.8s
|
|
470
|
+
|
|
471
|
+
overall 7/10 (70%)
|
|
472
|
+
|
|
473
|
+
rename-symbol attempt 2,5: not-used-tool name="write_file" — called write_file 1 time(s)
|
|
474
|
+
```
|
|
475
|
+
|
|
476
|
+
**An eval is not a test.** A model is nondeterministic, so one run of a task is a
|
|
477
|
+
coin flip: passing and failing are properties of the model-and-harness
|
|
478
|
+
combination, not of that run. The unit is therefore a pass rate over N attempts,
|
|
479
|
+
and evals never gate CI — a merge gate that costs money and goes red six times in
|
|
480
|
+
ten trains everyone to ignore CI. `npm test` stays free, offline and
|
|
481
|
+
deterministic.
|
|
482
|
+
|
|
483
|
+
A task is a directory under `evals/`: a `task.json` and a `fixture/` tree copied
|
|
484
|
+
into a fresh temporary workspace for every attempt.
|
|
485
|
+
|
|
486
|
+
```jsonc
|
|
487
|
+
{
|
|
488
|
+
"prompt": "Rename the function sayHi to greet everywhere, including callers.",
|
|
489
|
+
"capabilities": ["writes"],
|
|
490
|
+
"attempts": 5,
|
|
491
|
+
"graders": [
|
|
492
|
+
{ "type": "file-contains", "path": "src/greet.ts", "text": "export function greet(" },
|
|
493
|
+
{ "type": "file-excludes", "path": "src/greet.ts", "text": "sayHi" },
|
|
494
|
+
{ "type": "used-tool", "name": "edit_file" },
|
|
495
|
+
{ "type": "not-used-tool", "name": "write_file" }
|
|
496
|
+
]
|
|
497
|
+
}
|
|
498
|
+
```
|
|
499
|
+
|
|
500
|
+
Graders are deterministic — file contents, tool calls, answer patterns, turn
|
|
501
|
+
counts. There is no LLM judge: a judge is itself a nondeterministic instrument,
|
|
502
|
+
and measuring a nondeterministic subject with one compounds the error until "the
|
|
503
|
+
agent got worse" cannot be told apart from "the judge felt different today".
|
|
504
|
+
|
|
505
|
+
Those last two graders are the point. Rewriting the whole file also produces the
|
|
506
|
+
right contents, and an eval that scores results alone would give it full marks.
|
|
507
|
+
For a coding agent, tool misuse is the more common and the more interesting
|
|
508
|
+
failure, so tasks assert on how the work was done.
|
|
509
|
+
|
|
510
|
+
## Remote sessions
|
|
511
|
+
|
|
512
|
+
A session normally lives and dies with the terminal that started it. `--serve`
|
|
513
|
+
keeps it in one process and lets others attach:
|
|
514
|
+
|
|
515
|
+
```bash
|
|
516
|
+
# One terminal
|
|
517
|
+
chivgent --serve --allow-writes
|
|
518
|
+
# chivgent 0.12.0 serving session 2026-09-06T...
|
|
519
|
+
# socket: ~/.chivgent/sockets/2026-09-06T....sock
|
|
520
|
+
# capabilities: --allow-writes
|
|
521
|
+
|
|
522
|
+
# Another terminal
|
|
523
|
+
chivgent --servers # list what is running
|
|
524
|
+
chivgent --connect <id> # attach interactively
|
|
525
|
+
chivgent --connect <id> "question" # ask once and leave
|
|
526
|
+
```
|
|
527
|
+
|
|
528
|
+
A client holds no state: it sends prompts and renders the event stream the
|
|
529
|
+
server broadcasts. Several clients can attach at once — the extra ones watch the
|
|
530
|
+
same run as it happens, and any of them can interrupt it, because the run
|
|
531
|
+
belongs to the session rather than to whoever started it. A prompt sent while
|
|
532
|
+
another is running is refused rather than queued, and a client that disconnects
|
|
533
|
+
mid-run does not cancel it.
|
|
534
|
+
|
|
535
|
+
Attaching does not replay history; the session log already holds that. The
|
|
536
|
+
protocol is JSON Lines over a Unix socket, one object per line, the same shape
|
|
537
|
+
`--json` writes.
|
|
538
|
+
|
|
539
|
+
**Whoever can reach the socket has everything the server was started with.** If
|
|
540
|
+
it was started with `--allow-shell`, anyone who can connect can make the model
|
|
541
|
+
run commands, which is why the server prints its capabilities on startup: the
|
|
542
|
+
person attaching cannot see the flags you typed. The boundary is filesystem
|
|
543
|
+
permissions — sockets live in an owner-only directory under `CHIVGENT_HOME` —
|
|
544
|
+
and there is no TCP listener. For another machine, forward the socket over SSH
|
|
545
|
+
so that authentication is SSH's job.
|
|
546
|
+
|
|
432
547
|
## Extensions
|
|
433
548
|
|
|
434
549
|
An extension is an ES module that default-exports a function. It is called once
|
|
@@ -527,6 +642,11 @@ a piped run never loads a checkout's extensions on its own.
|
|
|
527
642
|
directory is your own configuration.
|
|
528
643
|
- Extensions cannot take the name of a built-in tool or command.
|
|
529
644
|
- `trust.json`, like the session log and the auth file, is written owner-only.
|
|
645
|
+
- A served session is reachable by anyone who can open its socket, and they get
|
|
646
|
+
every capability the server was started with. Sockets live in an owner-only
|
|
647
|
+
directory; the directory is the real gate, because a socket file exists
|
|
648
|
+
briefly with default permissions before it can be restricted.
|
|
649
|
+
- chivgent never listens on TCP. Use SSH forwarding to reach another machine.
|
|
530
650
|
- Writes resolve the deepest existing ancestor and reject a symlink at any
|
|
531
651
|
segment, so a planted link cannot redirect a write out of the workspace.
|
|
532
652
|
- Writes are staged in a sibling temp file and renamed into place, so an
|
|
@@ -573,7 +693,9 @@ project.
|
|
|
573
693
|
- [x] Provider registry and credential resolution chain
|
|
574
694
|
- [x] `bash` tool with streaming output, behind `--allow-shell`
|
|
575
695
|
- [x] Extensions and project trust
|
|
576
|
-
- [
|
|
696
|
+
- [x] Remote sessions over a local socket
|
|
697
|
+
- [x] An eval suite with deterministic graders and pass rates
|
|
698
|
+
- [ ] TUI and telemetry
|
|
577
699
|
|
|
578
700
|
Per-command confirmation prompts and command allowlists are deliberately not
|
|
579
701
|
planned. Once a shell tool exists, `bash` can do anything `write_file` can and
|
|
@@ -593,6 +715,8 @@ session-level switches; the real boundary is a container.
|
|
|
593
715
|
- [Stage 7: Context budget and compaction](docs/stage-7-context-management.md)
|
|
594
716
|
- [Stage 8: Shell tool and streaming subprocesses](docs/stage-8-shell-tool.md)
|
|
595
717
|
- [Stage 9: Extensions and project trust](docs/stage-9-extensions.md)
|
|
718
|
+
- [Stage 10: Remote sessions](docs/stage-10-remote-sessions.md)
|
|
719
|
+
- [Stage 11: Evals](docs/stage-11-evals.md)
|
|
596
720
|
- [Release process](docs/releasing.md)
|
|
597
721
|
|
|
598
722
|
## Contributing
|
package/README.zh-CN.md
CHANGED
|
@@ -37,6 +37,9 @@
|
|
|
37
37
|
- 支持带续读提示的分段 `read_file`,所有工具结果都有容量上限。
|
|
38
38
|
- 默认只读;`--allow-writes` 才会启用 `write_file` 和 `edit_file`。
|
|
39
39
|
- 通过 `--allow-shell` 选择性开启的 `bash` 工具,输出边跑边显示。
|
|
40
|
+
- Eval 套件:衡量 Agent 能不能把活干成,而不只是能不能跑起来。
|
|
41
|
+
- 远程会话:一个进程持有会话,其他进程通过本地 socket 接上来。
|
|
42
|
+
- 多个客户端可以同时观察同一个会话,其中任何一个都能中断当前运行。
|
|
40
43
|
- 扩展系统:可以添加工具、斜杠命令、事件订阅和 system prompt 片段。
|
|
41
44
|
- 项目扩展受按目录记录的信任决定门控;判定发生在任何模块被 import 之前,
|
|
42
45
|
没有终端可问时一律拒绝。
|
|
@@ -143,6 +146,9 @@ chivgent [选项] 进入交互式会话
|
|
|
143
146
|
--allow-writes 允许 Agent 创建和修改文件(默认只读)
|
|
144
147
|
--allow-shell 允许 Agent 执行 Shell 命令。它蕴含写权限:Shell 不受工作区
|
|
145
148
|
边界约束。仅支持 Unix。
|
|
149
|
+
--serve 把当前会话暴露在本地 socket 上并常驻
|
|
150
|
+
--connect TARGET 接上一个已服务的会话,可用 id 或 socket 路径
|
|
151
|
+
--servers 列出仍在响应的服务端后退出
|
|
146
152
|
--no-extensions 不加载任何扩展,也不询问信任
|
|
147
153
|
--extensions 列出已加载的扩展及其注册内容后退出
|
|
148
154
|
--forget-trust 忘记覆盖当前工作区的信任决定后退出
|
|
@@ -368,6 +374,22 @@ src/
|
|
|
368
374
|
write-file.ts 整文件创建与替换
|
|
369
375
|
edit-file.ts 精确唯一匹配编辑
|
|
370
376
|
bash.ts Shell 命令执行
|
|
377
|
+
prompts.ts Agent 运行时使用的提示词
|
|
378
|
+
evals/
|
|
379
|
+
task.ts 任务定义与校验
|
|
380
|
+
fixture.ts 每次尝试一份全新的工作区副本
|
|
381
|
+
graders.ts 确定性判定器
|
|
382
|
+
runner.ts 跑 N 次并聚合
|
|
383
|
+
report.ts 表格与 JSON 输出
|
|
384
|
+
parse-args.ts Eval CLI 参数
|
|
385
|
+
cli.ts npm run eval
|
|
386
|
+
remote/
|
|
387
|
+
protocol.ts 消息形状与版本协商
|
|
388
|
+
framing.ts 有界缓冲的 JSON Lines 分帧
|
|
389
|
+
server.ts 在 Unix socket 上服务一个会话
|
|
390
|
+
client.ts 接入一个已服务的会话
|
|
391
|
+
repl.ts 接入端的交互循环
|
|
392
|
+
socket-path.ts socket 路径、陈旧检测与发现
|
|
371
393
|
extensions/
|
|
372
394
|
trust.ts 按目录记录的信任存储
|
|
373
395
|
decide-trust.ts 询问流程,以及无人可问时的拒绝
|
|
@@ -384,6 +406,7 @@ src/
|
|
|
384
406
|
truncate.ts 命令输出的尾部截断
|
|
385
407
|
sanitize.ts 控制字符过滤
|
|
386
408
|
tests/ Provider、Agent Loop 和 Workspace 测试
|
|
409
|
+
evals/ Eval 任务与其 fixture
|
|
387
410
|
docs/ 架构与学习文档
|
|
388
411
|
```
|
|
389
412
|
|
|
@@ -412,6 +435,87 @@ npm install -g ./chivgent-0.6.0.tgz
|
|
|
412
435
|
测试使用脚本化或 Mock LLM Client。真实 API Smoke Test 需要手工执行,因此默认
|
|
413
436
|
测试不会消耗 API 额度。
|
|
414
437
|
|
|
438
|
+
## Evals
|
|
439
|
+
|
|
440
|
+
三百多个单元测试验证的是"代码是否按我写的那样运行",它们对"这是不是一个好用的 Agent"
|
|
441
|
+
一无所知。`npm run eval` 回答后一个问题:
|
|
442
|
+
|
|
443
|
+
```bash
|
|
444
|
+
npm run eval # 跑 evals/ 下全部任务
|
|
445
|
+
npm run eval -- --task rename-symbol --attempts 10
|
|
446
|
+
npm run eval -- --allow-writes --allow-shell --json report.json
|
|
447
|
+
```
|
|
448
|
+
|
|
449
|
+
```text
|
|
450
|
+
task pass turns tools p50
|
|
451
|
+
find-auth-logic 4/5 2.0 list_files,search_text,... 6.1s
|
|
452
|
+
rename-symbol 3/5 5.4 read_file,edit_file 9.8s
|
|
453
|
+
|
|
454
|
+
overall 7/10 (70%)
|
|
455
|
+
|
|
456
|
+
rename-symbol attempt 2,5: not-used-tool name="write_file" — called write_file 1 time(s)
|
|
457
|
+
```
|
|
458
|
+
|
|
459
|
+
**Eval 不是测试。** 模型是不确定的,所以一个任务跑一次就是抛硬币:通过与失败不是这次
|
|
460
|
+
运行的属性,而是"模型 + harness"这个组合的属性。因此 eval 的基本单位是 **N 次尝试的
|
|
461
|
+
通过率**;也因此 **evals 绝不进 CI 门禁**——让 CI 花钱、并且以六成概率变红,两周内就会
|
|
462
|
+
训练所有人忽略 CI。`npm test` 依然免费、离线、确定。
|
|
463
|
+
|
|
464
|
+
一个任务就是 `evals/` 下的一个目录:一份 `task.json` 加一棵 `fixture/` 文件树,
|
|
465
|
+
每次尝试都复制到一个全新的临时工作区。
|
|
466
|
+
|
|
467
|
+
```jsonc
|
|
468
|
+
{
|
|
469
|
+
"prompt": "把 sayHi 重命名成 greet,包括所有调用处。",
|
|
470
|
+
"capabilities": ["writes"],
|
|
471
|
+
"attempts": 5,
|
|
472
|
+
"graders": [
|
|
473
|
+
{ "type": "file-contains", "path": "src/greet.ts", "text": "export function greet(" },
|
|
474
|
+
{ "type": "file-excludes", "path": "src/greet.ts", "text": "sayHi" },
|
|
475
|
+
{ "type": "used-tool", "name": "edit_file" },
|
|
476
|
+
{ "type": "not-used-tool", "name": "write_file" }
|
|
477
|
+
]
|
|
478
|
+
}
|
|
479
|
+
```
|
|
480
|
+
|
|
481
|
+
判定器全部是确定性的——文件内容、工具调用、回答匹配、轮数。**没有 LLM judge**:
|
|
482
|
+
判官本身就是一个不确定的测量仪器,用它去测量不确定的对象,两个误差会叠加,
|
|
483
|
+
最后你无法分辨"Agent 变差了"和"判官今天心情不同"。
|
|
484
|
+
|
|
485
|
+
最后两条判定才是重点。整文件重写同样能得到正确的内容,一个只看结果的 eval 会给它满分。
|
|
486
|
+
对编码 Agent 来说,**工具误用是比答错更常见、也更值得测的失败**,所以任务不仅判定
|
|
487
|
+
"做对了没有",还判定"是怎么做的"。
|
|
488
|
+
|
|
489
|
+
## 远程会话
|
|
490
|
+
|
|
491
|
+
会话通常和启动它的那个终端同生共死。`--serve` 让它留在一个进程里,其他进程可以接上来:
|
|
492
|
+
|
|
493
|
+
```bash
|
|
494
|
+
# 终端 A
|
|
495
|
+
chivgent --serve --allow-writes
|
|
496
|
+
# chivgent 0.12.0 serving session 2026-09-06T...
|
|
497
|
+
# socket: ~/.chivgent/sockets/2026-09-06T....sock
|
|
498
|
+
# capabilities: --allow-writes
|
|
499
|
+
|
|
500
|
+
# 终端 B
|
|
501
|
+
chivgent --servers # 列出正在运行的服务端
|
|
502
|
+
chivgent --connect <id> # 交互式接入
|
|
503
|
+
chivgent --connect <id> "问题" # 问一次就走
|
|
504
|
+
```
|
|
505
|
+
|
|
506
|
+
客户端不持有任何状态:它只负责发 prompt、渲染服务端广播的事件流。可以同时接入多个
|
|
507
|
+
客户端——多出来的那些实时观察同一次运行,并且**任何一个都能中断它**,因为运行属于会话,
|
|
508
|
+
不属于"谁发起的"。运行期间再来一个 prompt 会被拒绝而不是排队;客户端中途断开也不会
|
|
509
|
+
取消正在跑的运行。
|
|
510
|
+
|
|
511
|
+
接入时**不重放历史**——那是会话日志的职责。协议是 Unix socket 上的 JSON Lines,
|
|
512
|
+
一行一个对象,和 `--json` 输出同一种形状。
|
|
513
|
+
|
|
514
|
+
**能连上这个 socket 的人,拥有服务端启动时的全部能力。** 如果它是带 `--allow-shell`
|
|
515
|
+
起来的,那么任何能连上的人都能让模型执行命令——这正是服务端启动时会打印本次能力的原因:
|
|
516
|
+
接入的人看不到你敲了什么参数。边界是文件系统权限(socket 位于 `CHIVGENT_HOME` 下仅
|
|
517
|
+
所有者可访问的目录),并且**不监听 TCP**。要跨机器访问请用 SSH 转发,让认证由 SSH 负责。
|
|
518
|
+
|
|
415
519
|
## 扩展系统
|
|
416
520
|
|
|
417
521
|
一个扩展就是默认导出一个函数的 ES 模块。启动时它会被调用一次,拿到的 API 可以注册
|
|
@@ -492,6 +596,10 @@ CI 任务或管道运行永远不会自作主张去执行一个 clone 里的代
|
|
|
492
596
|
- `<CHIVGENT_HOME>/extensions/` 下的用户级扩展始终加载,那是你自己的配置。
|
|
493
597
|
- 扩展无法占用内置工具或内置命令的名字。
|
|
494
598
|
- `trust.json` 与会话日志、认证文件一样,以仅所有者可读的权限写入。
|
|
599
|
+
- 被服务的会话对任何能打开其 socket 的人可达,且他们获得服务端启动时的全部能力。
|
|
600
|
+
socket 位于仅所有者可访问的目录中;**真正起作用的是目录权限**,因为 socket 文件在
|
|
601
|
+
能被收紧权限之前会短暂地以默认权限存在。
|
|
602
|
+
- chivgent 从不监听 TCP。跨机器访问请使用 SSH 转发。
|
|
495
603
|
- 写入会解析到最深层已存在的祖先目录,路径上任何一段是符号链接都会被拒绝,
|
|
496
604
|
因此预先植入的链接无法把写入重定向到工作区之外。
|
|
497
605
|
- 写入先落到同目录的临时文件再 rename 就位,中断的写入不会截断已有文件。
|
|
@@ -531,7 +639,9 @@ CI 任务或管道运行永远不会自作主张去执行一个 clone 里的代
|
|
|
531
639
|
- [x] Provider Registry 与凭据解析链
|
|
532
640
|
- [x] 通过 `--allow-shell` 开启的 `bash` 工具,带流式输出
|
|
533
641
|
- [x] 扩展系统与 Project Trust
|
|
534
|
-
- [
|
|
642
|
+
- [x] 基于本地 socket 的远程会话
|
|
643
|
+
- [x] 带确定性判定器和通过率的 Eval 套件
|
|
644
|
+
- [ ] TUI 和 Telemetry
|
|
535
645
|
|
|
536
646
|
逐条命令确认和命令白名单是**主动放弃**的方向。有了 Shell 工具之后,`bash` 能做的
|
|
537
647
|
事是 `write_file` 的超集,任何白名单都能被一行 `sh -c` 绕开,而逐条弹确认只会训练
|
|
@@ -549,6 +659,8 @@ CI 任务或管道运行永远不会自作主张去执行一个 clone 里的代
|
|
|
549
659
|
- [Stage 7:上下文预算与压缩](docs/stage-7-context-management.md)
|
|
550
660
|
- [Stage 8:Shell 工具与流式子进程](docs/stage-8-shell-tool.md)
|
|
551
661
|
- [Stage 9:扩展系统与 Project Trust](docs/stage-9-extensions.md)
|
|
662
|
+
- [Stage 10:远程会话](docs/stage-10-remote-sessions.md)
|
|
663
|
+
- [Stage 11:Evals](docs/stage-11-evals.md)
|
|
552
664
|
- [发布流程](docs/releasing.md)
|
|
553
665
|
|
|
554
666
|
## 参与贡献
|
package/dist/cli-options.d.ts
CHANGED
|
@@ -45,6 +45,12 @@ export interface CliOptions {
|
|
|
45
45
|
readonly listExtensions: boolean;
|
|
46
46
|
/** Forget the trust decision covering this workspace and exit. */
|
|
47
47
|
readonly forgetTrust: boolean;
|
|
48
|
+
/** Expose this session on a local socket and stay running. */
|
|
49
|
+
readonly serve: boolean;
|
|
50
|
+
/** Attach to a session served elsewhere; a session id or a socket path. */
|
|
51
|
+
readonly connect?: string;
|
|
52
|
+
/** List the servers that are still answering, then exit. */
|
|
53
|
+
readonly listServers: boolean;
|
|
48
54
|
/** API key supplied for this run only, overriding every other source. */
|
|
49
55
|
readonly apiKey?: string;
|
|
50
56
|
/** Token budget the context is kept inside. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli-options.d.ts","sourceRoot":"","sources":["../src/cli-options.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,OAAO,QAC6D,CAAC;AAElF,OAAO,EAEL,gBAAgB,EACjB,MAAM,yBAAyB,CAAC;AAGjC,2CAA2C;AAC3C,MAAM,MAAM,QAAQ,GAAG,MAAM,CAAC;AAE9B,eAAO,MAAM,iBAAiB,IAAI,CAAC;AACnC;;;;GAIG;AACH,eAAO,MAAM,uBAAuB,KAAK,CAAC;AAI1C;;;GAGG;AACH,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,UAAU,CAAC;AAE/C,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,0EAA0E;IAC1E,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,4DAA4D;IAC5D,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,8BAA8B;IAC9B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,kEAAkE;IAClE,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC;IAClC,uCAAuC;IACvC,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;IAC/B,mEAAmE;IACnE,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAC9B;;;OAGG;IACH,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B,8EAA8E;IAC9E,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B,kEAAkE;IAClE,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;IACjC,kEAAkE;IAClE,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAC9B,yEAAyE;IACzE,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,+CAA+C;IAC/C,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,oEAAoE;IACpE,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC3B;AAED,wBAAgB,YAAY,CAC1B,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,WAAW,EAAE,cAAc,EAC3B,QAAQ,GAAE,gBAA0C,GACnD,UAAU,
|
|
1
|
+
{"version":3,"file":"cli-options.d.ts","sourceRoot":"","sources":["../src/cli-options.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,OAAO,QAC6D,CAAC;AAElF,OAAO,EAEL,gBAAgB,EACjB,MAAM,yBAAyB,CAAC;AAGjC,2CAA2C;AAC3C,MAAM,MAAM,QAAQ,GAAG,MAAM,CAAC;AAE9B,eAAO,MAAM,iBAAiB,IAAI,CAAC;AACnC;;;;GAIG;AACH,eAAO,MAAM,uBAAuB,KAAK,CAAC;AAI1C;;;GAGG;AACH,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,UAAU,CAAC;AAE/C,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,0EAA0E;IAC1E,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,4DAA4D;IAC5D,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,8BAA8B;IAC9B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,kEAAkE;IAClE,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC;IAClC,uCAAuC;IACvC,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;IAC/B,mEAAmE;IACnE,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAC9B;;;OAGG;IACH,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B,8EAA8E;IAC9E,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B,kEAAkE;IAClE,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;IACjC,kEAAkE;IAClE,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAC9B,8DAA8D;IAC9D,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,2EAA2E;IAC3E,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,4DAA4D;IAC5D,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAC9B,yEAAyE;IACzE,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,+CAA+C;IAC/C,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,oEAAoE;IACpE,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC3B;AAED,wBAAgB,YAAY,CAC1B,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,WAAW,EAAE,cAAc,EAC3B,QAAQ,GAAE,gBAA0C,GACnD,UAAU,CAoIZ;AAED,wBAAgB,QAAQ,CACtB,QAAQ,GAAE,gBAA0C,GACnD,MAAM,CAuDR"}
|
package/dist/cli-options.js
CHANGED
|
@@ -30,6 +30,9 @@ export function parseCliArgs(argv, environment, registry = defaultProviderRegist
|
|
|
30
30
|
let allowWrites = false;
|
|
31
31
|
let allowShell = false;
|
|
32
32
|
let extensions = true;
|
|
33
|
+
let serve = false;
|
|
34
|
+
let connect;
|
|
35
|
+
let listServers = false;
|
|
33
36
|
let listExtensions = false;
|
|
34
37
|
let forgetTrust = false;
|
|
35
38
|
let maxTurnsExplicit = false;
|
|
@@ -90,6 +93,16 @@ export function parseCliArgs(argv, environment, registry = defaultProviderRegist
|
|
|
90
93
|
else if (argument === "--allow-shell") {
|
|
91
94
|
allowShell = true;
|
|
92
95
|
}
|
|
96
|
+
else if (argument === "--serve") {
|
|
97
|
+
serve = true;
|
|
98
|
+
}
|
|
99
|
+
else if (argument === "--connect") {
|
|
100
|
+
connect = readOptionValue(argv, index, "--connect");
|
|
101
|
+
index += 1;
|
|
102
|
+
}
|
|
103
|
+
else if (argument === "--servers") {
|
|
104
|
+
listServers = true;
|
|
105
|
+
}
|
|
93
106
|
else if (argument === "--no-extensions") {
|
|
94
107
|
extensions = false;
|
|
95
108
|
}
|
|
@@ -137,6 +150,9 @@ export function parseCliArgs(argv, environment, registry = defaultProviderRegist
|
|
|
137
150
|
allowWrites,
|
|
138
151
|
allowShell,
|
|
139
152
|
extensions,
|
|
153
|
+
serve,
|
|
154
|
+
...(connect === undefined ? {} : { connect }),
|
|
155
|
+
listServers,
|
|
140
156
|
listExtensions,
|
|
141
157
|
forgetTrust,
|
|
142
158
|
...(apiKey === undefined ? {} : { apiKey }),
|
|
@@ -167,6 +183,9 @@ Options:
|
|
|
167
183
|
--allow-writes Let the agent create and change files (default: read-only)
|
|
168
184
|
--allow-shell Let the agent run shell commands. This implies write access:
|
|
169
185
|
a shell is not bound by the workspace. Unix only.
|
|
186
|
+
--serve Expose this session on a local socket and keep running
|
|
187
|
+
--connect TARGET Attach to a served session, by id or socket path
|
|
188
|
+
--servers List the servers still answering, then exit
|
|
170
189
|
--no-extensions Do not load any extension, and do not ask about trust
|
|
171
190
|
--extensions List loaded extensions and what they register, then exit
|
|
172
191
|
--forget-trust Forget the trust decision covering this workspace, then exit
|
|
@@ -188,6 +207,12 @@ Extensions:
|
|
|
188
207
|
as code inside chivgent, with your permissions, and is not
|
|
189
208
|
limited by the workspace.
|
|
190
209
|
|
|
210
|
+
Remote sessions:
|
|
211
|
+
chivgent --serve Hold a session and expose it locally
|
|
212
|
+
chivgent --connect ID Attach from another terminal
|
|
213
|
+
Anyone who can reach the socket gets everything the server was started with.
|
|
214
|
+
Sockets live in <CHIVGENT_HOME>/sockets, an owner-only directory.
|
|
215
|
+
|
|
191
216
|
Environment:
|
|
192
217
|
OPENAI_BASE_URL Required when --provider openai-compatible
|
|
193
218
|
CHIVGENT_HOME Session, auth, trust and extension directory (default: ~/.chivgent)
|
package/dist/cli-options.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli-options.js","sourceRoot":"","sources":["../src/cli-options.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,MAAM,OAAO,GAAG,aAAa,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAmC,CAAC;AAErF,MAAM,CAAC,MAAM,OAAO,GAClB,OAAO,eAAe,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;AAElF,OAAO,EACL,uBAAuB,EACvB,gBAAgB,GACjB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AAKtE,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC;AACnC;;;;GAIG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,EAAE,CAAC;AAC1C,MAAM,kBAAkB,GAAG,KAAK,CAAC;AACjC,MAAM,aAAa,GAAG,GAAG,CAAC;
|
|
1
|
+
{"version":3,"file":"cli-options.js","sourceRoot":"","sources":["../src/cli-options.ts"],"names":[],"mappings":"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"}
|