@sanqianx/claude-ai-workbench 0.13.2 → 0.13.4
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/LICENSE +201 -201
- package/README.md +156 -156
- package/apps/agent-terminal/app.css +652 -613
- package/apps/agent-terminal/app.js +143 -67
- package/apps/agent-terminal/conversation-composer.js +44 -0
- package/apps/agent-terminal/index.html +172 -170
- package/apps/agent-terminal/panel-host-proof.html +152 -152
- package/apps/agent-terminal/panel-proof-content.html +41 -41
- package/apps/agent-terminal/right-workspace-dock.css +189 -159
- package/apps/agent-terminal/right-workspace-dock.js +652 -521
- package/apps/agent-terminal/user-question-card.js +68 -0
- package/apps/ai-profile-settings-host/index.html +25 -25
- package/apps/ai-profile-settings-host/page.css +1 -1
- package/apps/ai-profile-settings-host/page.js +113 -113
- package/apps/minimal-test-host/README.md +15 -15
- package/apps/minimal-test-host/host.css +2 -2
- package/apps/minimal-test-host/host.js +35 -35
- package/apps/minimal-test-host/index.html +58 -58
- package/apps/minimal-test-host/optional-mock/fault-injection.js +15 -15
- package/docs/sdk/FILE_LAYOUT.md +31 -31
- package/docs/sdk/INTEGRATION.md +126 -126
- package/docs/sdk/README.md +21 -21
- package/docs/sdk/SESSION_EVENTS.md +15 -13
- package/docs/sdk/openapi.yaml +16 -1
- package/package.json +1 -1
- package/packages/client/README.md +29 -29
- package/packages/client/index.d.ts +122 -122
- package/packages/client/index.js +260 -260
- package/packages/client/package.json +2 -2
- package/packages/contracts/README.md +9 -9
- package/packages/contracts/index.d.ts +519 -517
- package/packages/contracts/index.js +312 -312
- package/packages/contracts/package.json +1 -1
- package/packages/core/README.md +8 -8
- package/packages/core/index.d.ts +76 -76
- package/packages/core/index.js +222 -222
- package/packages/core/package.json +2 -2
- package/packages/server/README.md +17 -17
- package/packages/server/bin/agent-terminal-server.js +42 -42
- package/packages/server/bin/claude-workbench.js +225 -225
- package/packages/server/index.d.ts +171 -171
- package/packages/server/index.js +230 -230
- package/packages/server/lib/agent-discovery.js +133 -133
- package/packages/server/lib/agent-registry.js +143 -143
- package/packages/server/lib/agent-spawn-env.js +17 -17
- package/packages/server/lib/attachment-store.js +78 -78
- package/packages/server/lib/bridges/app-server-bridge.js +373 -373
- package/packages/server/lib/bridges/opencode-server-bridge.js +506 -506
- package/packages/server/lib/capture-settings-store.js +35 -35
- package/packages/server/lib/claude-history-recovery.js +87 -87
- package/packages/server/lib/cli-session-recovery.js +28 -28
- package/packages/server/lib/context-resolver.js +55 -55
- package/packages/server/lib/conversation-capture.js +51 -51
- package/packages/server/lib/delegation-phase-store.js +357 -357
- package/packages/server/lib/delegation-store.js +474 -468
- package/packages/server/lib/diagnostics.js +32 -32
- package/packages/server/lib/drivers/cli-json-runner.js +974 -974
- package/packages/server/lib/drivers/codex-driver.js +1461 -1442
- package/packages/server/lib/drivers/opencode-driver.js +1554 -1554
- package/packages/server/lib/drivers/zcode-driver.js +1250 -1250
- package/packages/server/lib/drivers/zcode-profile-runtime.js +71 -71
- package/packages/server/lib/event-stream.js +138 -138
- package/packages/server/lib/folder-picker.js +623 -623
- package/packages/server/lib/http-handler.js +339 -339
- package/packages/server/lib/json-file.js +26 -26
- package/packages/server/lib/knowledge-context.js +33 -33
- package/packages/server/lib/model-detection.js +295 -295
- package/packages/server/lib/parent-context.js +44 -0
- package/packages/server/lib/profile-store.js +283 -283
- package/packages/server/lib/project-store.js +102 -102
- package/packages/server/lib/runtime-loader.js +120 -120
- package/packages/server/lib/session-archive-store.js +53 -53
- package/packages/server/lib/session-history.js +612 -612
- package/packages/server/lib/system-doctor.js +125 -125
- package/packages/server/lib/ui-preferences-store.js +48 -48
- package/packages/server/lib/user-questions.js +67 -0
- package/packages/server/lib/workbench-service.js +1696 -1675
- package/packages/server/package.json +2 -2
- package/packages/ui/README.md +30 -30
- package/packages/ui/ai-profile-settings.d.ts +45 -45
- package/packages/ui/ai-profile-settings.js +283 -283
- package/packages/ui/claude-terminal.d.ts +31 -31
- package/packages/ui/claude-terminal.js +343 -343
- package/packages/ui/index.d.ts +18 -18
- package/packages/ui/index.js +51 -51
- package/packages/ui/package.json +2 -2
- package/packages/ui/theme.css +13 -13
- package/src/assets/claude-prompts.json +21 -21
- package/src/backend/http/ai-profile-routes.js +61 -61
- package/src/backend/http/claude-routes.js +170 -170
- package/src/backend/http/node-helpers.js +45 -45
- package/src/backend/index.js +21 -21
- package/src/backend/lib/ai-adapter.js +144 -144
- package/src/backend/lib/ai-profile-store.js +259 -259
- package/src/backend/lib/ai-vendor-presets.js +83 -83
- package/src/backend/lib/ai-workspace.js +140 -140
- package/src/backend/lib/automation-config.js +253 -253
- package/src/backend/lib/claude-cli-runner.js +2408 -2392
- package/src/backend/lib/data-dir.js +169 -169
- package/src/backend/lib/llm-client.js +176 -176
- package/src/backend/lib/model-context-windows.js +82 -82
- package/src/backend/lib/native-task-control.js +217 -217
- package/src/backend/lib/native-task-history-index.js +475 -475
- package/src/backend/lib/native-task-history-reader.js +526 -526
- package/src/backend/lib/native-task-messages.js +457 -457
- package/src/backend/lib/native-task-registry.js +325 -325
- package/src/backend/lib/native-task-runtime.js +242 -242
- package/src/backend/lib/native-task-trace.js +440 -440
- package/src/backend/lib/native-task-transcript.js +393 -393
- package/src/backend/lib/prompt-registry.js +166 -166
- package/src/backend/lib/runtime-config.js +121 -121
- package/src/backend/lib/sdk-session-stream.js +143 -143
- package/src/backend/lib/sdk-turn-stream.js +16 -16
- package/src/backend/lib/store-scope.js +131 -131
- package/src/backend/lib/task-identity.js +104 -104
- package/src/backend/lib/task-state-projection.js +58 -58
- package/src/index.js +7 -7
- package/src/sdk-wave-a.ts +1 -1
- package/src/sdk-wave-b.ts +1 -1
- package/src/sdk-wave-c.ts +1 -1
- package/src/sdk-wave-d.ts +1 -1
- package/src/sdk-wave-e.ts +1 -1
package/README.md
CHANGED
|
@@ -1,156 +1,156 @@
|
|
|
1
|
-
# Claude AI Workbench
|
|
2
|
-
|
|
3
|
-
面向本地开发工具的 Claude Code 工作台 SDK,提供 AI Profile 管理、凭据隔离、版本化 REST/SSE API、Client SDK 和可嵌入 Web Components。
|
|
4
|
-
|
|
5
|
-
0.3.0 起,仓库同时提供 **Agent Terminal**:一个通用多 Agent 对话终端(Claude Code / Codex / OpenCode / ZCode),带多项目工作区、自定义模型供应商管理、Agent 发现与能力矩阵、推理力度与上下文用量显示。
|
|
6
|
-
|
|
7
|
-
## 作为智脑产品的嵌入模块
|
|
8
|
-
|
|
9
|
-
外壳使用真实 Agent Terminal 页面和 REST/SSE,不重新实现消息流。`embed=1` 与可配置 `apiBase` 隐藏重复品牌/项目管理,并接受同源父窗口的项目、主题与知识范围消息;独立产品行为保持不变。
|
|
10
|
-
|
|
11
|
-
重复收到当前项目的嵌入通知不会取消正在创建的会话;真正切换项目时仍隔离迟到的响应和草稿。项目查找尚未完成时,以最新的选择为准。
|
|
12
|
-
|
|
13
|
-
Agent 发现为异步扫描,最多两个并发、每项 5 秒、整轮 12 秒;`GET /agents` 立即返回缓存及 `scan` 状态、代次和更新时间,`POST /agents/refresh` 强制发起或合并后台扫描并立即返回 202。不确定的超时保留上次探测结果,不误报卸载。界面先绑定控件再独立读取数据,手动重扫、页面重新可见和联网恢复可合并刷新;`kb:visibility` / `kb:refresh` 回执为 `kb:refreshed`,不重载 iframe、不清空草稿或运行会话。嵌入时可用 `transport=live` 选择同源外壳注入的 EventSource 兼容传输;独立运行保留原 SSE。
|
|
14
|
-
|
|
15
|
-
受信任本地外壳通过 `KB_WORKBENCH_RUNTIME_TOKEN`、`KB_EVENT_BRIDGE_URL` 和引擎地址连接后台服务。原生工作台捕获原始用户输入及成功最终回答,通过持久化 outbox 投递到 bridge 的鉴权入口;不捕获系统提示词、注入的知识、工具输出或供应商凭据。`/api/health` 中 `conversationCapture` 展示启用状态、待投递数和错误;已有用户显式关闭的捕获设置不会被覆盖。桥接不可用时保留待投递记录,恢复或重启后继续,不伪造会话。
|
|
16
|
-
|
|
17
|
-
工作台是产品供应商与凭据的活动配置源。后台维护默认模型持久化,不随会话临时模型切换;解析后的凭据只交给鉴权本地服务,不进入浏览器消息。SDK 会话从当前项目登记的工作区恢复,也兼容旧登记文件。
|
|
18
|
-
|
|
19
|
-
四客户端的运行快照使用同目录临时文件原子替换;5000 条实时事件只用于短期回放,不再作为完整会话历史。Workbench 在自己的数据目录 `session-history/` 中独立追加保存历史,并合并连续文字增量;页面先读取近期 20 轮,向上翻阅或点击“加载更早记录”时按轮分页,补入记录与断线恢复均保持阅读位置。浏览器关闭不停止历史采集。磁盘写入失败或记录损坏时保留已有数据,在页面明确提示不完整并写入本地诊断,实时对话不因此中断。
|
|
20
|
-
|
|
21
|
-
旧版已截断的 Claude 会话在原始 CLI 记录仍完整且会话空闲时,可只读恢复用户问答与工具过程,包括沿上下文压缩的逻辑父节点恢复早期记录;不修改原始文件、不调用模型。原始记录不存在、损坏或链路不完整时,只展示实际保存的部分并明确提示,不能凭空补造历史。新历史接口为 `GET /sessions/{sessionId}/history?limit=20&before=<cursor>`,Client SDK 对应 `loadHistory()`;现有快照与 SSE 游标保持兼容。
|
|
22
|
-
|
|
23
|
-
持续输出时,向上的滚轮或翻页键立即停止自动跟随;发送请求的迟到回执不会重新拉回底部。向下滚回底部或点击“回到底部”后恢复跟随,无需切换会话。
|
|
24
|
-
|
|
25
|
-
MiniMax 向量模型使用独立的 `/v1/embeddings` 接口,不复用聊天的 `/anthropic` 路由。官方域名的已知接口后缀在运行期规范化为服务根地址,现有配置文件不被迁移或改写;自定义网关路径保持原样。
|
|
26
|
-
|
|
27
|
-
Windows 上 Claude Code 探测与实际启动使用同一解析结果:失效的 `CLAUDE_CODE_EXECPATH` 不遮住有效安装,npm/CMD/PowerShell 启动脚本解析成实际文件,JavaScript 入口用当前 Node 探测版本。`/system/doctor` 返回实际启动路径、被跳过的失效路径及版本探测错误。发现和会话失败使用 `log/v2`;受外壳守护时写入外壳统一诊断,独立运行保存在工作台数据目录的 `diagnostics.jsonl`,不记录凭据或原始提示词。
|
|
28
|
-
|
|
29
|
-
## 仓库结构
|
|
30
|
-
|
|
31
|
-
- `packages/`:可发布的 SDK 源码。
|
|
32
|
-
- `apps/`:Agent Terminal 整页应用、AI Profile 页面和最小测试宿主。
|
|
33
|
-
- `docs/sdk/`:正式接入文档、文件说明和 OpenAPI;`docs/archive/` 为历史过程文档存档。
|
|
34
|
-
- `tests/`:单元、集成、契约与真实连接测试。
|
|
35
|
-
- `dist/sdk/`:执行打包命令后生成的 `.tgz` 安装包。
|
|
36
|
-
- `src/`、`ui/`:现有运行时与兼容层实现。
|
|
37
|
-
|
|
38
|
-
详细说明见 [SDK 总览](docs/sdk/README.md) 和 [文件布局](docs/sdk/FILE_LAYOUT.md)。
|
|
39
|
-
|
|
40
|
-
## SDK 包
|
|
41
|
-
|
|
42
|
-
- `@claude-ai-workbench/contracts`:公共数据类型,类似 C++ 头文件。
|
|
43
|
-
- `@claude-ai-workbench/client`:HTTP/SSE Client SDK。
|
|
44
|
-
- `@claude-ai-workbench/core`:终端状态机与会话生命周期。
|
|
45
|
-
- `@claude-ai-workbench/ui`:AI Profile Web Components。
|
|
46
|
-
- `@claude-ai-workbench/server`:REST/SSE Server 和命令行程序。
|
|
47
|
-
|
|
48
|
-
五个包使用相同版本号发布。
|
|
49
|
-
|
|
50
|
-
## 独立安装与命令行
|
|
51
|
-
|
|
52
|
-
无需克隆仓库,直接从 npm 安装 @sanqianx/claude-ai-workbench 即可获得 `claude-workbench` 命令(包名 `claude-ai-workbench` 也注册为同一命令的别名,两者等价):
|
|
53
|
-
|
|
54
|
-
```powershell
|
|
55
|
-
npm install -g @sanqianx/claude-ai-workbench
|
|
56
|
-
claude-workbench -v # 打印版本
|
|
57
|
-
claude-workbench # 前台启动(Ctrl+C 停止)
|
|
58
|
-
claude-workbench start -d # 后台启动
|
|
59
|
-
claude-workbench status # 查看运行状态
|
|
60
|
-
claude-workbench stop # 停止运行中的服务
|
|
61
|
-
```
|
|
62
|
-
|
|
63
|
-
启动的是 **Agent Terminal**(当前深色 UI 产品):`http://127.0.0.1:5760/agent-terminal/`(`AGENT_TERMINAL_PORT` / `AGENT_TERMINAL_HOST` 覆盖,`CLAUDE_WORKBENCH_PORT` 兼容),数据目录 `~/.agent-terminal`(`AGENT_TERMINAL_DATA_DIR` 覆盖),与旧工作台数据完全隔离。`stop` 优先按 pid 文件定位进程,pid 文件缺失时按端口探测兜底,因此对经由原始启动脚本拉起的实例同样有效。端口被占用时启动会给出明确提示与处理建议(`claude-workbench stop` 或改端口),而不是抛出原始错误堆栈。
|
|
64
|
-
|
|
65
|
-
## 启动 Agent Terminal(独立产品)
|
|
66
|
-
|
|
67
|
-
```powershell
|
|
68
|
-
npm run start:agent-terminal
|
|
69
|
-
```
|
|
70
|
-
|
|
71
|
-
- 页面:`http://127.0.0.1:5760/agent-terminal/`
|
|
72
|
-
- 数据目录:`~/.agent-terminal`(`AGENT_TERMINAL_DATA_DIR` 覆盖;端口 `AGENT_TERMINAL_PORT`)
|
|
73
|
-
- 首次使用:设置 → 模型供应商 → 添加供应商(Base URL / API Key / 模型列表),然后添加本地项目文件夹即可开聊。
|
|
74
|
-
- Agent 发现自动扫描本机:Claude Code(Agent SDK,支持 Anthropic 兼容端点如 MiniMax)、Codex(app-server,保留 CLI 回退)、OpenCode(serve + SSE,保留 CLI 回退)、ZCode(桌面内置 app-server)。版本探测成功不等于认证或任务执行成功,实际运行失败另写诊断日志。
|
|
75
|
-
- OpenCode 启动健康检查的期限同时约束连接、响应头与 JSON 响应体,超时释放连接及未就绪子进程并按现有策略回退 CLI;不会等待操作系统的长连接超时再把任务误报为模块不可达。
|
|
76
|
-
- ZCode 原生认证使用已有桌面供应商配置,保留显式环境变量覆盖及个人配置;共享 Workbench 模型通过临时本机连接接入,上游 API Key 只在内存中,临时文件仅保存本机访问令牌,关闭时清理。不改写桌面安装资源或用户模型配置。同时支持旧版 runtimeModel 与新版 modelSelection 协议,失败和完成事件均结束当前任务。
|
|
77
|
-
- 零点击模型检测:填好 Base URL 与 API Key 后自动探测 `/v1/models` 并合并 models.dev 能力数据(上下文窗口、模态、推理),保存时自动填充模型列表与上下文大小。
|
|
78
|
-
- 会话内模型切换:切换供应商/模型不换会话,历史跨供应商延续(Claude 保留 resume,CLI 保留线程参数)。
|
|
79
|
-
- 模型目录恢复:`/profiles` 加载失败不视为空目录——保留最近一次成功列表;模型菜单打开时执行一次有界重取(复用在途请求),失败态提供重试入口;迟到响应不会重开已关闭的菜单或改动当前选择/会话。失败提示不回显上游错误文本(仅显示已验证的 4xx/5xx 数字状态);有缓存时刷新失败会明确提示正在使用上次结果并提供重试,后台刷新中仅显示轻量更新提示不阻止选择。
|
|
80
|
-
- 运行时体验对齐:中断不再误报退出码错误、stderr 聚合为单个折叠、上下文用量按轮取最大值而非累计求和。
|
|
81
|
-
- 交互会话不设默认整任务时限,原生 Agent 可以连续工作数小时;任务仍会在正常完成、无法恢复的请求或进程错误、手动中止或服务关闭时结束,不保证永远运行。
|
|
82
|
-
- `profile.timeoutMs` 仍只是单次模型请求超时(Claude 环境变量 `API_TIMEOUT_MS`),不作为任务总时限;知识引擎的后台维护超时不受此改动影响。
|
|
83
|
-
|
|
84
|
-
## 启动开发服务器
|
|
85
|
-
|
|
86
|
-
```powershell
|
|
87
|
-
$env:CLAUDE_AI_WORKBENCH_DATA_DIR = 'D:\data\claude-workbench'
|
|
88
|
-
$env:CLAUDE_WORKBENCH_WORKSPACES = '{"my-project":"D:\repos\my-project"}'
|
|
89
|
-
npm start
|
|
90
|
-
```
|
|
91
|
-
|
|
92
|
-
默认地址:
|
|
93
|
-
|
|
94
|
-
- API:`http://127.0.0.1:5760/api/claude-workbench/v1`
|
|
95
|
-
- AI Profile 示例:`http://127.0.0.1:5760/profile-settings/`
|
|
96
|
-
|
|
97
|
-
- 最小测试宿主:`http://127.0.0.1:5762/test-host/`(通过 `npm run start:test-host` 启动,使用 `%USERPROFILE%\.claude-ai-workbench` 作为稳定产品数据目录,存放 `profiles.v2.json` 与凭据 `credentials.v1.json`)
|
|
98
|
-
|
|
99
|
-
## 真实 Agent 连接测试(可选)
|
|
100
|
-
|
|
101
|
-
```powershell
|
|
102
|
-
$env:AGENT_TERMINAL_REAL = 'claude' # 或 codex / opencode / zcode
|
|
103
|
-
$env:AGENT_TERMINAL_MINIMAX_API_KEY = '<anthropic 兼容端点的 key>'
|
|
104
|
-
npm run test:real
|
|
105
|
-
```
|
|
106
|
-
|
|
107
|
-
## 启动最小测试宿主
|
|
108
|
-
|
|
109
|
-
最小测试宿主是面向真实 Server + Runtime 的验收页面,必须使用稳定产品数据目录(而非临时目录),以便配置和凭据可以反复使用:
|
|
110
|
-
|
|
111
|
-
```powershell
|
|
112
|
-
npm run start:test-host
|
|
113
|
-
```
|
|
114
|
-
|
|
115
|
-
脚本 `scripts/start-test-host.ps1` 默认端口 5762,会设置 `CLAUDE_WORKBENCH_PORT=5762`、`CLAUDE_WORKBENCH_SERVE_HOST=1`,并自动创建数据目录。也可以传入 `-Port` 或 `-DataDir` 自定义。打开 `http://127.0.0.1:5762/test-host/` 即可使用,Profile 元数据写入 `profiles.v2.json`,凭据单独写入 `credentials.v1.json`。
|
|
116
|
-
|
|
117
|
-
## SDK 打包
|
|
118
|
-
|
|
119
|
-
```bash
|
|
120
|
-
npm run sdk:check
|
|
121
|
-
npm run sdk:pack
|
|
122
|
-
```
|
|
123
|
-
|
|
124
|
-
输出位于 `dist/sdk/`,包含四个 npm tarball 和带 SHA-256 的 `manifest.json`。
|
|
125
|
-
|
|
126
|
-
## Web 接入
|
|
127
|
-
|
|
128
|
-
```js
|
|
129
|
-
import "@claude-ai-workbench/ui";
|
|
130
|
-
import "@claude-ai-workbench/ui/theme.css";
|
|
131
|
-
import { createClaudeWorkbenchClient } from "@claude-ai-workbench/client";
|
|
132
|
-
```
|
|
133
|
-
|
|
134
|
-
```html
|
|
135
|
-
<ai-profile-list id="profileList"></ai-profile-list>
|
|
136
|
-
<ai-profile-editor id="profileEditor"></ai-profile-editor>
|
|
137
|
-
```
|
|
138
|
-
|
|
139
|
-
完整事件连接代码见 [接入说明](docs/sdk/INTEGRATION.md)。C++、C# 和 Java 等非 JavaScript 系统直接按照 [OpenAPI](docs/sdk/openapi.yaml) 调用 HTTP JSON API。
|
|
140
|
-
|
|
141
|
-
## 安全边界
|
|
142
|
-
|
|
143
|
-
- Profile 和 Credential 分文件保存。
|
|
144
|
-
- 普通 Profile 响应不返回明文 API Key,只返回配置状态和掩码预览。
|
|
145
|
-
- 临时测试 `/profiles/test` 不保存表单或凭据。
|
|
146
|
-
- 浏览器提供 `workspaceRef`,服务端负责将它解析为白名单工作目录。
|
|
147
|
-
- 默认服务只监听本机;跨机器部署必须增加 HTTPS、认证和访问控制。
|
|
148
|
-
|
|
149
|
-
## 验证
|
|
150
|
-
|
|
151
|
-
```bash
|
|
152
|
-
npm run verify
|
|
153
|
-
npm run test:real
|
|
154
|
-
```
|
|
155
|
-
|
|
156
|
-
普通测试使用可控 Runner 验证契约和生命周期;真实测试需要设置 `CLAUDE_AI_WORKBENCH_DATA_DIR` 与 `CLAUDE_WORKBENCH_REAL_PROFILE_ID`。
|
|
1
|
+
# Claude AI Workbench
|
|
2
|
+
|
|
3
|
+
面向本地开发工具的 Claude Code 工作台 SDK,提供 AI Profile 管理、凭据隔离、版本化 REST/SSE API、Client SDK 和可嵌入 Web Components。
|
|
4
|
+
|
|
5
|
+
0.3.0 起,仓库同时提供 **Agent Terminal**:一个通用多 Agent 对话终端(Claude Code / Codex / OpenCode / ZCode),带多项目工作区、自定义模型供应商管理、Agent 发现与能力矩阵、推理力度与上下文用量显示。
|
|
6
|
+
|
|
7
|
+
## 作为智脑产品的嵌入模块
|
|
8
|
+
|
|
9
|
+
外壳使用真实 Agent Terminal 页面和 REST/SSE,不重新实现消息流。`embed=1` 与可配置 `apiBase` 隐藏重复品牌/项目管理,并接受同源父窗口的项目、主题与知识范围消息;独立产品行为保持不变。
|
|
10
|
+
|
|
11
|
+
重复收到当前项目的嵌入通知不会取消正在创建的会话;真正切换项目时仍隔离迟到的响应和草稿。项目查找尚未完成时,以最新的选择为准。
|
|
12
|
+
|
|
13
|
+
Agent 发现为异步扫描,最多两个并发、每项 5 秒、整轮 12 秒;`GET /agents` 立即返回缓存及 `scan` 状态、代次和更新时间,`POST /agents/refresh` 强制发起或合并后台扫描并立即返回 202。不确定的超时保留上次探测结果,不误报卸载。界面先绑定控件再独立读取数据,手动重扫、页面重新可见和联网恢复可合并刷新;`kb:visibility` / `kb:refresh` 回执为 `kb:refreshed`,不重载 iframe、不清空草稿或运行会话。嵌入时可用 `transport=live` 选择同源外壳注入的 EventSource 兼容传输;独立运行保留原 SSE。
|
|
14
|
+
|
|
15
|
+
受信任本地外壳通过 `KB_WORKBENCH_RUNTIME_TOKEN`、`KB_EVENT_BRIDGE_URL` 和引擎地址连接后台服务。原生工作台捕获原始用户输入及成功最终回答,通过持久化 outbox 投递到 bridge 的鉴权入口;不捕获系统提示词、注入的知识、工具输出或供应商凭据。`/api/health` 中 `conversationCapture` 展示启用状态、待投递数和错误;已有用户显式关闭的捕获设置不会被覆盖。桥接不可用时保留待投递记录,恢复或重启后继续,不伪造会话。
|
|
16
|
+
|
|
17
|
+
工作台是产品供应商与凭据的活动配置源。后台维护默认模型持久化,不随会话临时模型切换;解析后的凭据只交给鉴权本地服务,不进入浏览器消息。SDK 会话从当前项目登记的工作区恢复,也兼容旧登记文件。
|
|
18
|
+
|
|
19
|
+
四客户端的运行快照使用同目录临时文件原子替换;5000 条实时事件只用于短期回放,不再作为完整会话历史。Workbench 在自己的数据目录 `session-history/` 中独立追加保存历史,并合并连续文字增量;页面先读取近期 20 轮,向上翻阅或点击“加载更早记录”时按轮分页,补入记录与断线恢复均保持阅读位置。浏览器关闭不停止历史采集。磁盘写入失败或记录损坏时保留已有数据,在页面明确提示不完整并写入本地诊断,实时对话不因此中断。
|
|
20
|
+
|
|
21
|
+
旧版已截断的 Claude 会话在原始 CLI 记录仍完整且会话空闲时,可只读恢复用户问答与工具过程,包括沿上下文压缩的逻辑父节点恢复早期记录;不修改原始文件、不调用模型。原始记录不存在、损坏或链路不完整时,只展示实际保存的部分并明确提示,不能凭空补造历史。新历史接口为 `GET /sessions/{sessionId}/history?limit=20&before=<cursor>`,Client SDK 对应 `loadHistory()`;现有快照与 SSE 游标保持兼容。
|
|
22
|
+
|
|
23
|
+
持续输出时,向上的滚轮或翻页键立即停止自动跟随;发送请求的迟到回执不会重新拉回底部。向下滚回底部或点击“回到底部”后恢复跟随,无需切换会话。
|
|
24
|
+
|
|
25
|
+
MiniMax 向量模型使用独立的 `/v1/embeddings` 接口,不复用聊天的 `/anthropic` 路由。官方域名的已知接口后缀在运行期规范化为服务根地址,现有配置文件不被迁移或改写;自定义网关路径保持原样。
|
|
26
|
+
|
|
27
|
+
Windows 上 Claude Code 探测与实际启动使用同一解析结果:失效的 `CLAUDE_CODE_EXECPATH` 不遮住有效安装,npm/CMD/PowerShell 启动脚本解析成实际文件,JavaScript 入口用当前 Node 探测版本。`/system/doctor` 返回实际启动路径、被跳过的失效路径及版本探测错误。发现和会话失败使用 `log/v2`;受外壳守护时写入外壳统一诊断,独立运行保存在工作台数据目录的 `diagnostics.jsonl`,不记录凭据或原始提示词。
|
|
28
|
+
|
|
29
|
+
## 仓库结构
|
|
30
|
+
|
|
31
|
+
- `packages/`:可发布的 SDK 源码。
|
|
32
|
+
- `apps/`:Agent Terminal 整页应用、AI Profile 页面和最小测试宿主。
|
|
33
|
+
- `docs/sdk/`:正式接入文档、文件说明和 OpenAPI;`docs/archive/` 为历史过程文档存档。
|
|
34
|
+
- `tests/`:单元、集成、契约与真实连接测试。
|
|
35
|
+
- `dist/sdk/`:执行打包命令后生成的 `.tgz` 安装包。
|
|
36
|
+
- `src/`、`ui/`:现有运行时与兼容层实现。
|
|
37
|
+
|
|
38
|
+
详细说明见 [SDK 总览](docs/sdk/README.md) 和 [文件布局](docs/sdk/FILE_LAYOUT.md)。
|
|
39
|
+
|
|
40
|
+
## SDK 包
|
|
41
|
+
|
|
42
|
+
- `@claude-ai-workbench/contracts`:公共数据类型,类似 C++ 头文件。
|
|
43
|
+
- `@claude-ai-workbench/client`:HTTP/SSE Client SDK。
|
|
44
|
+
- `@claude-ai-workbench/core`:终端状态机与会话生命周期。
|
|
45
|
+
- `@claude-ai-workbench/ui`:AI Profile Web Components。
|
|
46
|
+
- `@claude-ai-workbench/server`:REST/SSE Server 和命令行程序。
|
|
47
|
+
|
|
48
|
+
五个包使用相同版本号发布。
|
|
49
|
+
|
|
50
|
+
## 独立安装与命令行
|
|
51
|
+
|
|
52
|
+
无需克隆仓库,直接从 npm 安装 @sanqianx/claude-ai-workbench 即可获得 `claude-workbench` 命令(包名 `claude-ai-workbench` 也注册为同一命令的别名,两者等价):
|
|
53
|
+
|
|
54
|
+
```powershell
|
|
55
|
+
npm install -g @sanqianx/claude-ai-workbench
|
|
56
|
+
claude-workbench -v # 打印版本
|
|
57
|
+
claude-workbench # 前台启动(Ctrl+C 停止)
|
|
58
|
+
claude-workbench start -d # 后台启动
|
|
59
|
+
claude-workbench status # 查看运行状态
|
|
60
|
+
claude-workbench stop # 停止运行中的服务
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
启动的是 **Agent Terminal**(当前深色 UI 产品):`http://127.0.0.1:5760/agent-terminal/`(`AGENT_TERMINAL_PORT` / `AGENT_TERMINAL_HOST` 覆盖,`CLAUDE_WORKBENCH_PORT` 兼容),数据目录 `~/.agent-terminal`(`AGENT_TERMINAL_DATA_DIR` 覆盖),与旧工作台数据完全隔离。`stop` 优先按 pid 文件定位进程,pid 文件缺失时按端口探测兜底,因此对经由原始启动脚本拉起的实例同样有效。端口被占用时启动会给出明确提示与处理建议(`claude-workbench stop` 或改端口),而不是抛出原始错误堆栈。
|
|
64
|
+
|
|
65
|
+
## 启动 Agent Terminal(独立产品)
|
|
66
|
+
|
|
67
|
+
```powershell
|
|
68
|
+
npm run start:agent-terminal
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
- 页面:`http://127.0.0.1:5760/agent-terminal/`
|
|
72
|
+
- 数据目录:`~/.agent-terminal`(`AGENT_TERMINAL_DATA_DIR` 覆盖;端口 `AGENT_TERMINAL_PORT`)
|
|
73
|
+
- 首次使用:设置 → 模型供应商 → 添加供应商(Base URL / API Key / 模型列表),然后添加本地项目文件夹即可开聊。
|
|
74
|
+
- Agent 发现自动扫描本机:Claude Code(Agent SDK,支持 Anthropic 兼容端点如 MiniMax)、Codex(app-server,保留 CLI 回退)、OpenCode(serve + SSE,保留 CLI 回退)、ZCode(桌面内置 app-server)。版本探测成功不等于认证或任务执行成功,实际运行失败另写诊断日志。
|
|
75
|
+
- OpenCode 启动健康检查的期限同时约束连接、响应头与 JSON 响应体,超时释放连接及未就绪子进程并按现有策略回退 CLI;不会等待操作系统的长连接超时再把任务误报为模块不可达。
|
|
76
|
+
- ZCode 原生认证使用已有桌面供应商配置,保留显式环境变量覆盖及个人配置;共享 Workbench 模型通过临时本机连接接入,上游 API Key 只在内存中,临时文件仅保存本机访问令牌,关闭时清理。不改写桌面安装资源或用户模型配置。同时支持旧版 runtimeModel 与新版 modelSelection 协议,失败和完成事件均结束当前任务。
|
|
77
|
+
- 零点击模型检测:填好 Base URL 与 API Key 后自动探测 `/v1/models` 并合并 models.dev 能力数据(上下文窗口、模态、推理),保存时自动填充模型列表与上下文大小。
|
|
78
|
+
- 会话内模型切换:切换供应商/模型不换会话,历史跨供应商延续(Claude 保留 resume,CLI 保留线程参数)。
|
|
79
|
+
- 模型目录恢复:`/profiles` 加载失败不视为空目录——保留最近一次成功列表;模型菜单打开时执行一次有界重取(复用在途请求),失败态提供重试入口;迟到响应不会重开已关闭的菜单或改动当前选择/会话。失败提示不回显上游错误文本(仅显示已验证的 4xx/5xx 数字状态);有缓存时刷新失败会明确提示正在使用上次结果并提供重试,后台刷新中仅显示轻量更新提示不阻止选择。
|
|
80
|
+
- 运行时体验对齐:中断不再误报退出码错误、stderr 聚合为单个折叠、上下文用量按轮取最大值而非累计求和。
|
|
81
|
+
- 交互会话不设默认整任务时限,原生 Agent 可以连续工作数小时;任务仍会在正常完成、无法恢复的请求或进程错误、手动中止或服务关闭时结束,不保证永远运行。
|
|
82
|
+
- `profile.timeoutMs` 仍只是单次模型请求超时(Claude 环境变量 `API_TIMEOUT_MS`),不作为任务总时限;知识引擎的后台维护超时不受此改动影响。
|
|
83
|
+
|
|
84
|
+
## 启动开发服务器
|
|
85
|
+
|
|
86
|
+
```powershell
|
|
87
|
+
$env:CLAUDE_AI_WORKBENCH_DATA_DIR = 'D:\data\claude-workbench'
|
|
88
|
+
$env:CLAUDE_WORKBENCH_WORKSPACES = '{"my-project":"D:\repos\my-project"}'
|
|
89
|
+
npm start
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
默认地址:
|
|
93
|
+
|
|
94
|
+
- API:`http://127.0.0.1:5760/api/claude-workbench/v1`
|
|
95
|
+
- AI Profile 示例:`http://127.0.0.1:5760/profile-settings/`
|
|
96
|
+
|
|
97
|
+
- 最小测试宿主:`http://127.0.0.1:5762/test-host/`(通过 `npm run start:test-host` 启动,使用 `%USERPROFILE%\.claude-ai-workbench` 作为稳定产品数据目录,存放 `profiles.v2.json` 与凭据 `credentials.v1.json`)
|
|
98
|
+
|
|
99
|
+
## 真实 Agent 连接测试(可选)
|
|
100
|
+
|
|
101
|
+
```powershell
|
|
102
|
+
$env:AGENT_TERMINAL_REAL = 'claude' # 或 codex / opencode / zcode
|
|
103
|
+
$env:AGENT_TERMINAL_MINIMAX_API_KEY = '<anthropic 兼容端点的 key>'
|
|
104
|
+
npm run test:real
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
## 启动最小测试宿主
|
|
108
|
+
|
|
109
|
+
最小测试宿主是面向真实 Server + Runtime 的验收页面,必须使用稳定产品数据目录(而非临时目录),以便配置和凭据可以反复使用:
|
|
110
|
+
|
|
111
|
+
```powershell
|
|
112
|
+
npm run start:test-host
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
脚本 `scripts/start-test-host.ps1` 默认端口 5762,会设置 `CLAUDE_WORKBENCH_PORT=5762`、`CLAUDE_WORKBENCH_SERVE_HOST=1`,并自动创建数据目录。也可以传入 `-Port` 或 `-DataDir` 自定义。打开 `http://127.0.0.1:5762/test-host/` 即可使用,Profile 元数据写入 `profiles.v2.json`,凭据单独写入 `credentials.v1.json`。
|
|
116
|
+
|
|
117
|
+
## SDK 打包
|
|
118
|
+
|
|
119
|
+
```bash
|
|
120
|
+
npm run sdk:check
|
|
121
|
+
npm run sdk:pack
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
输出位于 `dist/sdk/`,包含四个 npm tarball 和带 SHA-256 的 `manifest.json`。
|
|
125
|
+
|
|
126
|
+
## Web 接入
|
|
127
|
+
|
|
128
|
+
```js
|
|
129
|
+
import "@claude-ai-workbench/ui";
|
|
130
|
+
import "@claude-ai-workbench/ui/theme.css";
|
|
131
|
+
import { createClaudeWorkbenchClient } from "@claude-ai-workbench/client";
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
```html
|
|
135
|
+
<ai-profile-list id="profileList"></ai-profile-list>
|
|
136
|
+
<ai-profile-editor id="profileEditor"></ai-profile-editor>
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
完整事件连接代码见 [接入说明](docs/sdk/INTEGRATION.md)。C++、C# 和 Java 等非 JavaScript 系统直接按照 [OpenAPI](docs/sdk/openapi.yaml) 调用 HTTP JSON API。
|
|
140
|
+
|
|
141
|
+
## 安全边界
|
|
142
|
+
|
|
143
|
+
- Profile 和 Credential 分文件保存。
|
|
144
|
+
- 普通 Profile 响应不返回明文 API Key,只返回配置状态和掩码预览。
|
|
145
|
+
- 临时测试 `/profiles/test` 不保存表单或凭据。
|
|
146
|
+
- 浏览器提供 `workspaceRef`,服务端负责将它解析为白名单工作目录。
|
|
147
|
+
- 默认服务只监听本机;跨机器部署必须增加 HTTPS、认证和访问控制。
|
|
148
|
+
|
|
149
|
+
## 验证
|
|
150
|
+
|
|
151
|
+
```bash
|
|
152
|
+
npm run verify
|
|
153
|
+
npm run test:real
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
普通测试使用可控 Runner 验证契约和生命周期;真实测试需要设置 `CLAUDE_AI_WORKBENCH_DATA_DIR` 与 `CLAUDE_WORKBENCH_REAL_PROFILE_ID`。
|