@clawos-dev/clawd 0.1.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 +98 -0
- package/dist/cli.cjs +17015 -0
- package/dist/cli.cjs.map +1 -0
- package/package.json +42 -0
package/README.md
ADDED
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
# @clawos/clawd
|
|
2
|
+
|
|
3
|
+
独立 clawd daemon——Claude Code(未来包含 Codex 等)会话服务,WebSocket 协议见 `../doc/clawd-protocol.md`。
|
|
4
|
+
|
|
5
|
+
## 安装
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install -g @clawos/clawd
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## 启动
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
clawd # 默认 ws://127.0.0.1:18790,无鉴权直连
|
|
15
|
+
clawd --port 28790 # 自定义端口
|
|
16
|
+
clawd --data-dir /path/to/data # 覆盖默认 ~/.clawd
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
启动成功后 stdout 会打印 `Ready: ws://127.0.0.1:18790`,完整 `{url, pid, ...}` 在 `~/.clawd/state.json`(0600 权限)。
|
|
20
|
+
|
|
21
|
+
> **当前阶段无鉴权**:本机 ws 监听 `127.0.0.1`,所有连接直接放行;未来公开远端 transport 时会再引入鉴权。
|
|
22
|
+
|
|
23
|
+
## CLI 参数
|
|
24
|
+
|
|
25
|
+
- `--port <n>` 监听端口,默认 18790
|
|
26
|
+
- `--data-dir <path>` 数据目录,默认 `~/.clawd`
|
|
27
|
+
- `--config <path>` 配置文件,默认 `<data-dir>/config.json`(若存在)
|
|
28
|
+
- `--log-level <level>` `debug` / `info` / `warn` / `error`(默认 `info`)
|
|
29
|
+
- `--server-url <url>` 反连远端中继(v2,暂未实装)
|
|
30
|
+
- `--help` / `-h`、`--version` / `-v`
|
|
31
|
+
|
|
32
|
+
## 协议
|
|
33
|
+
|
|
34
|
+
完整方法与事件表见 [`../doc/clawd-protocol.md`](../doc/clawd-protocol.md)。
|
|
35
|
+
|
|
36
|
+
- 所有请求帧 `{type, requestId, ...args}`,响应携带同一 `requestId`
|
|
37
|
+
- session 事件默认推给订阅了该 sessionId 的客户端(`session:subscribe`)
|
|
38
|
+
- `session:events({sessionId, afterSeq})` 拉缺口区间,支持刷新/重连后的 gap recovery
|
|
39
|
+
|
|
40
|
+
### Session 控制相关方法差异
|
|
41
|
+
|
|
42
|
+
| RPC | 效果 | 进程存活 | 典型入口 |
|
|
43
|
+
|---|---|---|---|
|
|
44
|
+
| `session:stop` | **SIGTERM** 杀 claude 子进程(5s grace → SIGKILL),丢失 initialize / 预热缓存 | ✖ | 次级菜单("Force Stop Process") / ESC 双击升级确认 |
|
|
45
|
+
| `session:interrupt` | 向 claude stdin 发 `control_request.subtype=interrupt`,取消当前轮次 | ✔ | 键盘 ESC 单次 / 输入框 ⏸ / 权限卡片 ⏸ |
|
|
46
|
+
| `session:rewind` `{userMessageId, dryRun?}` | 发 `control_request.subtype=rewind_files`,回滚到指定 user message。`dryRun=true` 仅预览;`dryRun=false` 真回退并广播 `session:rewound` | ✔ | 历史 user message hover 的 "↶" 按钮 + 预览 Drawer |
|
|
47
|
+
|
|
48
|
+
两个新增事件:
|
|
49
|
+
|
|
50
|
+
- `session:rewound { sessionId, userMessageId, at }` —— rewind apply 成功后广播;订阅该 sessionId 的客户端都会收到
|
|
51
|
+
|
|
52
|
+
## 目录结构
|
|
53
|
+
|
|
54
|
+
```
|
|
55
|
+
~/.clawd/
|
|
56
|
+
├── config.json # 可选配置文件
|
|
57
|
+
├── state.json # 运行时发现文件(启动写,退出删)
|
|
58
|
+
├── clawd.log # 运行日志
|
|
59
|
+
└── sessions/default/*.json # SessionFile 持久化
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
## 架构
|
|
63
|
+
|
|
64
|
+
daemon 内部按 reducer + runner + dispatcher 三层拆分:
|
|
65
|
+
|
|
66
|
+
```
|
|
67
|
+
WS frame / proc stdout
|
|
68
|
+
│
|
|
69
|
+
▼
|
|
70
|
+
SessionManager ─── reduceSession(state, input, deps) → {state', effects[]}
|
|
71
|
+
│ (纯函数,无 side-effect;可 replay)
|
|
72
|
+
│
|
|
73
|
+
├─► Effects runner(执行 spawn / write-stdin / kill / persist-file / emit-frame)
|
|
74
|
+
│
|
|
75
|
+
└─► dispatcher return {response, broadcast[]}
|
|
76
|
+
│
|
|
77
|
+
▼
|
|
78
|
+
transport(local-ws / remote-ws)
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
- `src/session/reducer.ts`:纯函数,接收 `SessionInput`(stdout-line / proc-exit / command.* / permission-decision / tick)→ 返回 `{state, effects}`
|
|
82
|
+
- `src/session/runner.ts`:Effect runner,执行副作用并把结果喂回 reducer
|
|
83
|
+
- `src/session/manager.ts`:对外仅暴露 `handle(cmd): {response, broadcast[]}`;dispatcher 根据返回结果分发
|
|
84
|
+
- `src/permission/permission.ts`:rule match 工具函数,不再有独立的 PermissionManager 类
|
|
85
|
+
- 协议常量 / zod schema / METHOD_NAMES 统一从 `@clawos/clawd-protocol` 导入
|
|
86
|
+
|
|
87
|
+
## 零耦合承诺
|
|
88
|
+
|
|
89
|
+
clawd daemon **不依赖** `openclaw-plugin-clawos`——不 import、不 copy、不共享路径。SessionStore / StreamParser / Permission / History 等均按 `../doc/clawd-protocol.md` 独立实现。
|
|
90
|
+
|
|
91
|
+
## 开发
|
|
92
|
+
|
|
93
|
+
```bash
|
|
94
|
+
pnpm install
|
|
95
|
+
pnpm build # tsc
|
|
96
|
+
pnpm dev # tsx src/cli.ts
|
|
97
|
+
pnpm test # vitest
|
|
98
|
+
```
|