@realqiyan/agent-task 0.0.1-rc.2 → 0.0.1-rc.3
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 +4 -3
- package/bin/agent-task.mjs +23 -36
- package/dist/{launcher.js → application/launcher.js} +19 -42
- package/dist/application/main.js +122 -0
- package/dist/{startup.js → application/startup.js} +6 -11
- package/dist/application/task-runtime.js +42 -0
- package/dist/configuration/contract.js +28 -0
- package/dist/{environment.js → configuration/environment.js} +1 -5
- package/dist/configuration/files.js +43 -0
- package/dist/configuration/management.js +6 -0
- package/dist/configuration/model.js +2 -0
- package/dist/configuration/policy.js +29 -0
- package/dist/configuration/ports.js +2 -0
- package/dist/{settings.js → configuration/settings.js} +77 -39
- package/dist/executors/environment.js +10 -0
- package/dist/executors/model.js +2 -0
- package/dist/executors/registry.js +29 -0
- package/dist/executors/validation.js +10 -0
- package/dist/{lock.js → infrastructure/lock.js} +2 -2
- package/dist/{private-files.js → infrastructure/private-files.js} +1 -7
- package/dist/infrastructure/sqlite.js +19 -0
- package/dist/infrastructure/version.js +3 -0
- package/dist/{acp.js → integrations/acp/connection.js} +9 -7
- package/dist/{node-execution.js → integrations/acp/execution.js} +1 -1
- package/dist/{executor-runtime.js → integrations/acp/runtime.js} +1 -10
- package/dist/{worker.js → integrations/acp/worker.js} +3 -2
- package/dist/{coordinator.js → integrations/coordinator/coordinator.js} +16 -7
- package/dist/{coordinator-provider.js → integrations/coordinator/provider.js} +1 -1
- package/dist/{coordinator-storage.js → integrations/coordinator/storage.js} +2 -2
- package/dist/integrations/local-service/control.js +33 -0
- package/dist/protocol/cli/admin-client.js +45 -0
- package/dist/protocol/cli/commands.js +394 -0
- package/dist/{http-auth.js → protocol/http/auth.js} +1 -1
- package/dist/protocol/http/server.js +111 -0
- package/dist/{web.js → protocol/http/web.js} +18 -17
- package/dist/{mcp.js → protocol/mcp.js} +13 -13
- package/dist/protocol/services.js +2 -0
- package/dist/protocol/settings-contract.js +40 -0
- package/dist/protocol/task-contract.js +28 -0
- package/dist/results/files.js +70 -0
- package/dist/results/ports.js +2 -0
- package/dist/results/service.js +42 -0
- package/dist/shared/errors.js +13 -0
- package/dist/shared/limits.js +3 -0
- package/dist/shared/time.js +2 -0
- package/dist/shared/validation.js +8 -0
- package/dist/tasks/definitions.js +83 -0
- package/dist/tasks/graph.js +23 -0
- package/dist/{human-input.js → tasks/human-input.js} +8 -7
- package/dist/tasks/model.js +2 -0
- package/dist/tasks/ports.js +2 -0
- package/dist/tasks/runs.js +263 -0
- package/dist/tasks/schedule.js +36 -0
- package/dist/tasks/sessions.js +62 -0
- package/dist/tasks/storage/records.js +45 -0
- package/dist/{task-storage.js → tasks/storage/store.js} +23 -36
- package/dist/tasks/supervisor.js +227 -0
- package/dist/tasks/validation.js +24 -0
- package/dist/web/settings-view.js +13 -6
- package/docs/architecture-guidelines.md +6 -4
- package/docs/cli.md +49 -0
- package/docs/deployment.md +16 -56
- package/docs/design-proposal.md +2 -2
- package/docs/release.md +14 -15
- package/docs/technical-design.md +47 -26
- package/docs/validation.md +49 -17
- package/docs/web-console.md +10 -8
- package/package.json +7 -7
- package/scripts/install-lib.mjs +4 -95
- package/scripts/mcp-call.mjs +1 -1
- package/scripts/probe-agent.mjs +6 -5
- package/scripts/service-runner.mjs +1 -1
- package/scripts/setup-wizard.mjs +1 -6
- package/scripts/setup.mjs +17 -30
- package/deploy/agent-task.service.example +0 -17
- package/dist/admin.js +0 -31
- package/dist/config.js +0 -72
- package/dist/main.js +0 -175
- package/dist/model.js +0 -25
- package/dist/results.js +0 -79
- package/dist/settings-contract.js +0 -16
- package/dist/task-contract.js +0 -37
- package/dist/task-model.js +0 -2
- package/dist/tasks.js +0 -508
- package/dist/version.js +0 -3
- package/scripts/uninstall.mjs +0 -57
- /package/dist/{permissions.js → executors/permissions.js} +0 -0
- /package/dist/{workspace.js → infrastructure/workspace.js} +0 -0
package/docs/deployment.md
CHANGED
|
@@ -10,16 +10,16 @@ agent-task setup
|
|
|
10
10
|
agent-task start
|
|
11
11
|
```
|
|
12
12
|
|
|
13
|
-
使用当前用户可写的 npm prefix,不以 root
|
|
13
|
+
使用当前用户可写的 npm prefix,不以 root 运行。
|
|
14
14
|
|
|
15
|
-
|
|
15
|
+
向导收集工作空间、可选执行端、可选协调模型及端口。取消确认不写配置。无终端环境须明确提供参数:
|
|
16
16
|
|
|
17
17
|
```bash
|
|
18
|
-
agent-task setup --executors none --cwd /absolute/workspace
|
|
18
|
+
agent-task setup --executors none --cwd /absolute/workspace
|
|
19
19
|
# 另一个首次安装选择:安装 Pi ACP 组件,但不授权执行。
|
|
20
20
|
agent-task setup --home /absolute/private/agent-task \
|
|
21
21
|
--executors pi --cwd /absolute/workspace \
|
|
22
|
-
--provider deepseek --model deepseek-flash
|
|
22
|
+
--provider deepseek --model deepseek-flash
|
|
23
23
|
```
|
|
24
24
|
|
|
25
25
|
工作空间须预先存在,且位于安装目录及 npm 包之外。完整选项见 `agent-task setup --help`;组件版本及平台实现见 [install-lib.mjs](../scripts/install-lib.mjs)。安装不执行原生登录或批准任务。
|
|
@@ -28,18 +28,18 @@ agent-task setup --home /absolute/private/agent-task \
|
|
|
28
28
|
|
|
29
29
|
## 数据目录与配置
|
|
30
30
|
|
|
31
|
-
初始 `dataDir` 是安装目录下的 `data/`。运行配置、私有环境文件、任务和协调会话记录、结果及服务文件日志均位于当前 `dataDir`。配置契约见 [
|
|
31
|
+
初始 `dataDir` 是安装目录下的 `data/`。运行配置、私有环境文件、任务和协调会话记录、结果及服务文件日志均位于当前 `dataDir`。配置契约见 [配置契约](../src/configuration/contract.ts),路径选择与新目录准备见 [startup.ts](../src/application/startup.ts)。
|
|
32
32
|
|
|
33
|
-
安装目录保留固定的 `launch.json`
|
|
33
|
+
安装目录保留固定的 `launch.json` 定位文件、安装清单、组件及启动器控制资源;它不是另一份运行配置。CLI 通过这个固定入口定位当前数据目录。npm 包、用户工作空间和执行端原生配置不随 `dataDir` 移动。
|
|
34
34
|
|
|
35
35
|
在 Web 修改数据目录后,下次启动只在目标目录准备已保存的配置和私有环境,并切换定位文件;**不复制任务、会话、结果或日志,不删除旧目录**。目标已有不同启动文件时拒绝覆盖;须停服核对并显式准备目标,不自动合并或修复。新目录没有旧任务,不能把切换目录当成故障恢复或重放许可。
|
|
36
36
|
|
|
37
37
|
1. 运行 `agent-task start`,打开输出的本机控制台地址。用本地编辑器读取当前 `dataDir/environment.json` 的 `AGENT_TASK_ADMIN_TOKEN`,在连接表单输入。不要把 token 放进 URL、命令行、Git、截图或日志。
|
|
38
|
-
2. 在[控制台](web-console.md)
|
|
39
|
-
3. 按执行端官方方式准备原生认证及权限:[Pi](https://github.com/earendil-works/pi/tree/v1.3.0/packages/coding-agent/docs)、[Codex ACP](https://github.com/agentclientprotocol/codex-acp#readme)、[Claude ACP](https://github.com/zed-industries/claude-agent-acp)、[OpenCode](https://opencode.ai/docs/acp/)
|
|
40
|
-
4. 审核原生工具、沙箱、凭据和结果文件读取权限后,再明确批准无人值守执行。注册只选类型,不配置命令、参数、环境变量清单或 ACP 工具白名单;系统映射见 [
|
|
38
|
+
2. 在[控制台](web-console.md)或 [CLI](cli.md) 配置协调模型、单独保存模型密钥及注册执行端。两端使用同一管理服务。未配置协调模型时可管理服务,但不能接收可执行任务。
|
|
39
|
+
3. 按执行端官方方式准备原生认证及权限:[Pi](https://github.com/earendil-works/pi/tree/v1.3.0/packages/coding-agent/docs)、[Codex ACP](https://github.com/agentclientprotocol/codex-acp#readme)、[Claude ACP](https://github.com/zed-industries/claude-agent-acp)、[OpenCode](https://opencode.ai/docs/acp/)。运行进程与原生登录须使用同一 OS 用户及相应 HOME/配置目录。
|
|
40
|
+
4. 审核原生工具、沙箱、凭据和结果文件读取权限后,再明确批准无人值守执行。注册只选类型,不配置命令、参数、环境变量清单或 ACP 工具白名单;系统映射见 [命令映射](../src/integrations/acp/runtime.ts)。额外 ACP 审批请求被拒绝,不自动批准。
|
|
41
41
|
|
|
42
|
-
服务和协调员的秘密只从私有环境文件加载,不回退到 shell
|
|
42
|
+
服务和协调员的秘密只从私有环境文件加载,不回退到 shell 模型密钥。执行端沿用启动上下文中的用户原生环境,但排除私有文件变量、服务/管理员令牌、协调员凭据及同值别名。不要把执行端原生凭据放入服务的私有环境文件。启动器不执行 shell 启动脚本,也不导入原生认证文件。隔离实现见 [服务环境校验](../src/configuration/environment.ts)、[执行端环境过滤](../src/executors/environment.ts)。这不是同一 OS 用户下的沙箱。
|
|
43
43
|
|
|
44
44
|
显式握手检查:
|
|
45
45
|
|
|
@@ -58,58 +58,18 @@ agent-task status
|
|
|
58
58
|
agent-task restart
|
|
59
59
|
```
|
|
60
60
|
|
|
61
|
-
Ctrl-C 关闭前台启动器及其运行进程。`restart` 和 Web
|
|
61
|
+
Ctrl-C 关闭前台启动器及其运行进程。`restart` 和 Web 的“重启并检查可用性”使用同一启动器:先停止新派发、关闭活动执行并释放数据所有权,再用已保存配置创建新进程。
|
|
62
62
|
|
|
63
63
|
只有新实例通过带 MCP token 的健康检查才返回成功,并给出新实例标识及地址。端口变化或自动分配端口时,以返回地址为准;Web 不通过链接传递管理员令牌,须重新连接。
|
|
64
64
|
|
|
65
65
|
重启会关闭 ACP 会话,不保证等待人工回复的运行能无损继续。结果不明的执行保持阻断,不自动重试、重放或改派执行端。请求超时不代表重启没发生,先用 `agent-task status` 核对;不要盲目重复操作。
|
|
66
66
|
|
|
67
|
-
启动失败不会回滚配置或重放工作。查看当前 `dataDir/service.log`;确认没有运行实例持有数据后,修正私有文件,再显式 `agent-task restart
|
|
67
|
+
启动失败不会回滚配置或重放工作。查看当前 `dataDir/service.log`;确认没有运行实例持有数据后,修正私有文件,再显式 `agent-task restart`。启动器也已退出时,用原启动方式重新启动。
|
|
68
68
|
|
|
69
|
-
源码开发者执行 `npm ci --ignore-scripts && npm run build` 后,可用 `npm run setup -- ...` 和 `npm start -- --home ...`;npm 安装用户不需要构建。内部 `dist/main.js` 不是独立的重启入口。
|
|
69
|
+
源码开发者执行 `npm ci --ignore-scripts && npm run build` 后,可用 `npm run setup -- ...` 和 `npm start -- --home ...`;npm 安装用户不需要构建。内部 `dist/application/main.js` 不是独立的重启入口。
|
|
70
70
|
|
|
71
|
-
##
|
|
71
|
+
## 更新
|
|
72
72
|
|
|
73
|
-
|
|
73
|
+
重复 setup 保留配置和授权。中断安装只能显式执行 `agent-task setup --resume`;所有权或清单不明时停止核查。
|
|
74
74
|
|
|
75
|
-
|
|
76
|
-
agent-task service install
|
|
77
|
-
agent-task status
|
|
78
|
-
agent-task restart
|
|
79
|
-
```
|
|
80
|
-
|
|
81
|
-
重复安装不会覆盖配置或批准执行端。同名但内容不同的服务文件会被拒绝覆盖。每个 OS 用户只管理一个同名服务。
|
|
82
|
-
|
|
83
|
-
Linux 需要可连接的 systemd 用户管理器:
|
|
84
|
-
|
|
85
|
-
```bash
|
|
86
|
-
systemctl --user status agent-task.service
|
|
87
|
-
systemctl --user stop agent-task.service
|
|
88
|
-
journalctl --user -u agent-task.service
|
|
89
|
-
```
|
|
90
|
-
|
|
91
|
-
SSH/容器会话若没有用户 bus,先配置正常用户会话,不以 root 运行。注销后存续需要管理员按策略配置 lingering,安装器不会启用。手动部署模板见 [deploy/agent-task.service.example](../deploy/agent-task.service.example)。
|
|
92
|
-
|
|
93
|
-
macOS 需要已登录的图形用户会话:
|
|
94
|
-
|
|
95
|
-
```bash
|
|
96
|
-
launchctl print gui/$(id -u)/com.agent-task.service
|
|
97
|
-
agent-task restart
|
|
98
|
-
agent-task service remove
|
|
99
|
-
```
|
|
100
|
-
|
|
101
|
-
LaunchAgent 不是系统 LaunchDaemon,不保证用户注销后运行,也不等同于 Linux cgroup。两平台都不保证休眠或关机期间准点执行。服务文件日志由启动器写入当前数据目录;systemd journal 是操作系统另行管理的日志。
|
|
102
|
-
|
|
103
|
-
## 更新与卸载
|
|
104
|
-
|
|
105
|
-
重复 setup 保留配置和授权。中断安装只能显式 `agent-task setup --resume`;所有权或清单不明时停止核查,不删除数据修复。
|
|
106
|
-
|
|
107
|
-
调研阶段不保证旧数据兼容,也不提供普通启动迁移。更新前停服并备份安装目录和当前数据目录。更换 Node、npm prefix 或安装目录前先移除服务注册;不要在运行时删除应用包。
|
|
108
|
-
|
|
109
|
-
```bash
|
|
110
|
-
agent-task service remove # 仅停止并移除服务注册
|
|
111
|
-
agent-task uninstall # 再移除本安装拥有的 ACP 组件
|
|
112
|
-
npm uninstall -g @realqiyan/agent-task # 最后由 npm 移除应用包
|
|
113
|
-
```
|
|
114
|
-
|
|
115
|
-
卸载可重复运行,保留配置、凭据、日志、任务历史、工作空间及未入清单文件,不操作全局执行端和原生认证。卸载不是凭据撤销或数据销毁,停服也不能回滚外部操作。实现见 [uninstall.mjs](../scripts/uninstall.mjs)。
|
|
75
|
+
更新前停止运行进程,并备份安装目录和当前数据目录。调研阶段不保证旧数据兼容,普通启动不执行迁移。
|
package/docs/design-proposal.md
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
- 任务不依赖发起客户端持续在线,保留执行、交付、失败和缺少用户事实的记录。
|
|
9
9
|
- 协调员推进既定 DAG、解释中间结果、处理澄清并组织交付;领域分析和工具操作交给执行端。
|
|
10
10
|
- 缺少用户事实时可持久等待,回复后续接原运行,不丢失已接受工作。
|
|
11
|
-
- 提供本机 Web
|
|
11
|
+
- 提供本机 Web 控制台,管理配置、查看任务,并只控制任务的未来触发;CLI 覆盖全部 Web 管理能力,两端复用同一套服务。配置保存后通过 Web 或 CLI 重启生效;切换数据目录不搬迁或删除旧历史。
|
|
12
12
|
|
|
13
13
|
Pi Agent、Codex、Claude、OpenCode 是 ACP 集成目标,不是嵌入本服务的领域执行器。声明支持、代码实现和真实验收必须区分。
|
|
14
14
|
|
|
@@ -44,7 +44,7 @@ ACP 执行端:原生会话、领域推理和工具操作
|
|
|
44
44
|
|
|
45
45
|
暂不实现:执行中修改 DAG、自动重试或跨端故障转移、丢失 ACP 会话的重连、人工核对后强制恢复、远程执行、多租户、日历时区调度、技能同步及动态 MCP 转发。它们需要独立产品决策,不因引入 durable 自动获得。
|
|
46
46
|
|
|
47
|
-
|
|
47
|
+
启动方式见[部署说明](deployment.md)。[本机控制台](web-console.md)复用任务服务,使用独立管理员认证与浏览器请求边界;不提供文件下载或其他任务写操作。
|
|
48
48
|
|
|
49
49
|
## 外部依据
|
|
50
50
|
|
package/docs/release.md
CHANGED
|
@@ -12,28 +12,27 @@ npm run check
|
|
|
12
12
|
npm test
|
|
13
13
|
git diff --check
|
|
14
14
|
npm run pack:release
|
|
15
|
-
npm run test:install -- ./realqiyan-agent-task-0.0.1-rc.
|
|
15
|
+
npm run test:install -- ./realqiyan-agent-task-0.0.1-rc.3.tgz
|
|
16
16
|
```
|
|
17
17
|
|
|
18
|
-
|
|
18
|
+
安装验证先检查当前 OS 和 Node.js 版本,再在独立临时目录执行真正的全局 npm 安装,禁用 lifecycle scripts,不使用项目源码或编译器;随后配置、前台启动、调用 Web 配置接口、重启、进行认证健康检查。验证脚本不调用模型或启动 ACP 工作。
|
|
19
19
|
|
|
20
|
-
输出报告只包含结果和证据目录,不包含 token
|
|
20
|
+
输出报告只包含结果和证据目录,不包含 token;只将实际运行的宿主平台记为通过,其他平台明确记为未执行。临时目录权限为私有,内有验证专用随机凭据及空任务库,不上传这些目录。基础测试中的真实 PTY 用例先检查平台及 `script` 能否创建终端;能力不可用时明确跳过,不能把跳过当成终端验收通过。
|
|
21
21
|
|
|
22
|
-
|
|
22
|
+
脚本只验证当前环境,不在 Linux 上推断 macOS 行为;需要 macOS 证据时,在相应环境单独运行同一命令。本地可设置 `npm_config_cache` 复用下载缓存,tarball 验证可用 `npm_config_registry` 指定依赖镜像,报告会记录其地址;`--registry` 发布后验收固定使用 npmjs。不能以复制项目的 node_modules 替代安装验证。
|
|
23
23
|
|
|
24
24
|
## GitHub Actions 门禁与受控发布
|
|
25
25
|
|
|
26
|
-
- [Validate](../.github/workflows/ci.yml):PR/master
|
|
26
|
+
- [Validate](../.github/workflows/ci.yml):PR/master 或手动触发时在 Ubuntu 执行 TypeScript 与依赖边界检查、基础测试及构建;检查包清单。安装任务**不 checkout 项目源码**,只接收 tarball 和验收脚本,在当前 Linux runner 验证启动、重启及认证检查。常规 CI 不再要求 macOS runner;这不代表 macOS 已验证或不受支持。
|
|
27
27
|
- [Publish npm](../.github/workflows/publish.yml):仅手动触发,限制 master 和账号 realqiyan,输入须匹配已验收包版本。再次执行全部门禁,再发布同一 tarball,不重建、不执行包脚本。发布后核查 latest 并执行默认全局安装验证。
|
|
28
|
-
- 普通 CI 没有 npm
|
|
28
|
+
- 普通 CI 没有 npm 凭据。发布作业使用 npm Trusted Publisher 和 GitHub OIDC,不读取 `NPM_TOKEN`;并发发布被串行化。
|
|
29
29
|
|
|
30
|
-
|
|
31
|
-
1.
|
|
32
|
-
2.
|
|
33
|
-
3.
|
|
34
|
-
4. 将代码审查后提交到 master,再在 Actions 选择 Publish npm,输入已验收的版本(本次为 `0.0.1-rc.2`)。包尚不存在时,应确认账号允许首次创建此名称;认证/权限失败须停止,不能换账号或跳过验证。
|
|
30
|
+
首次启用前,由维护者完成以下配置:
|
|
31
|
+
1. 创建 GitHub Environment **npm**,仅允许 master 部署;按仓库需要配置审核人。工作流中的 environment 名称本身**不自动创建审核保护**。
|
|
32
|
+
2. 在 npm 包的 Trusted Publisher 设置中授权 GitHub 仓库 `realqiyan/agent-task`、工作流 `publish.yml`、Environment `npm`,允许 `npm publish`。认证与 2FA 在 npm 官方界面完成,不上传本机登录凭据。
|
|
33
|
+
3. 核查分支保护及工作流修改权限,再在 Actions 选择 Publish npm,输入已验收的版本(本次为 `0.0.1-rc.3`)。认证/权限失败须停止,不能换账号或跳过验证。
|
|
35
34
|
|
|
36
|
-
|
|
35
|
+
发布作业使用 Node 24 与支持 OIDC 的 npm;命令明确传 `--tag latest --access public --provenance`。Trusted Publisher 授权和 provenance 是不同条件,设置工作流不等于 npm 已授权。首次配置和有效期限制以 [npm 官方说明](https://docs.npmjs.com/trusted-publishers/)为准。
|
|
37
36
|
|
|
38
37
|
## 经授权的本机发布
|
|
39
38
|
|
|
@@ -43,11 +42,11 @@ npm run test:install -- ./realqiyan-agent-task-0.0.1-rc.2.tgz --service
|
|
|
43
42
|
npm login --registry=https://registry.npmjs.org
|
|
44
43
|
npm whoami --registry=https://registry.npmjs.org
|
|
45
44
|
# 必须确认输出 realqiyan,再发布已检查的 tarball:
|
|
46
|
-
npm publish ./realqiyan-agent-task-0.0.1-rc.
|
|
45
|
+
npm publish ./realqiyan-agent-task-0.0.1-rc.3.tgz --ignore-scripts \
|
|
47
46
|
--access public --tag latest --registry=https://registry.npmjs.org
|
|
48
|
-
npm view @realqiyan/agent-task@0.0.1-rc.
|
|
47
|
+
npm view @realqiyan/agent-task@0.0.1-rc.3 version license --registry=https://registry.npmjs.org
|
|
49
48
|
npm view @realqiyan/agent-task dist-tags --json --registry=https://registry.npmjs.org
|
|
50
|
-
node scripts/verify-install.mjs --registry
|
|
49
|
+
node scripts/verify-install.mjs --registry
|
|
51
50
|
```
|
|
52
51
|
|
|
53
52
|
登录成功不等于发布授权已完成。若 registry 返回需要 2FA 的 E403,停止发布;维护者须在自己的终端完成发布时认证,或配置有目标包发布权限、短有效期且获准 bypass 2FA 的 granular token。不要关闭账号 2FA,不在聊天、命令参数或日志中传递一次性验证码或 token;不把本机登录凭据自动上传到 GitHub。
|
package/docs/technical-design.md
CHANGED
|
@@ -1,37 +1,58 @@
|
|
|
1
1
|
# 代码导航
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
本文指向职责入口、依赖边界和资源所有者,不复述字段、默认值或状态枚举。目标见[总体方案](design-proposal.md),设计要求见[架构原则](architecture-guidelines.md)。
|
|
4
4
|
|
|
5
|
-
##
|
|
5
|
+
## 模块与公开能力
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
按业务能力组织 `tasks`、`executors`、`configuration` 和 `results`。各模块用普通数据模型表达内部数据,服务通过构造参数接收依赖。没有服务定位器或统一转发门面。协议入口只获得[公开业务能力](../src/protocol/services.ts)。
|
|
8
|
+
|
|
9
|
+
| 责任 | 实现入口 | 基础验证 |
|
|
8
10
|
| --- | --- | --- |
|
|
9
|
-
|
|
|
10
|
-
|
|
|
11
|
-
|
|
|
12
|
-
|
|
|
13
|
-
|
|
|
14
|
-
|
|
|
15
|
-
|
|
|
16
|
-
|
|
|
17
|
-
|
|
|
18
|
-
|
|
|
19
|
-
|
|
|
20
|
-
|
|
|
21
|
-
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
##
|
|
26
|
-
|
|
27
|
-
- `
|
|
28
|
-
|
|
29
|
-
|
|
11
|
+
| 任务定义、执行端快照、未来触发控制 | [TaskDefinitions](../src/tasks/definitions.ts)、[图校验](../src/tasks/graph.ts)、[时间规则](../src/tasks/schedule.ts) | [tasks.test.mjs](../tests/tasks.test.mjs) |
|
|
12
|
+
| Run 与节点状态的业务修改入口、派发与提交顺序 | [TaskRuns](../src/tasks/runs.ts)、[数据模型](../src/tasks/model.ts)、[窄能力契约](../src/tasks/ports.ts) | [tasks.test.mjs](../tests/tasks.test.mjs)、[task-storage.test.mjs](../tests/task-storage.test.mjs) |
|
|
13
|
+
| 时钟、协调会话监督、取消与收尾 | [RunSupervisor](../src/tasks/supervisor.ts)、[NodeSessions](../src/tasks/sessions.ts) | [tasks.test.mjs](../tests/tasks.test.mjs)、[restart.test.mjs](../tests/restart.test.mjs) |
|
|
14
|
+
| 人工事实等待与回复 | [纯状态规则](../src/tasks/human-input.ts)、[TaskRuns](../src/tasks/runs.ts) | [human-input.test.mjs](../tests/human-input.test.mjs) |
|
|
15
|
+
| 执行端注册、授权比较、凭据隔离 | [ExecutorRegistry](../src/executors/registry.ts)、[环境过滤](../src/executors/environment.ts)、[审批策略](../src/executors/permissions.ts) | [policy.test.mjs](../tests/policy.test.mjs)、[config-preflight.test.mjs](../tests/config-preflight.test.mjs) |
|
|
16
|
+
| 配置与凭据编辑、发布顺序、影响预览 | [Settings](../src/configuration/settings.ts)、[配置规则](../src/configuration/policy.ts)、[预览组合](../src/configuration/management.ts) | [settings.test.mjs](../tests/settings.test.mjs)、[web.test.mjs](../tests/web.test.mjs) |
|
|
17
|
+
| 请求规范化、内部数据与严格记录校验 | [任务请求](../src/protocol/task-contract.ts)、[配置请求](../src/protocol/settings-contract.ts)、[内部数据校验](../src/tasks/validation.ts)、[持久记录](../src/tasks/storage/records.ts) | [task-storage.test.mjs](../tests/task-storage.test.mjs) |
|
|
18
|
+
| 持久读写与事务 | [TaskStore](../src/tasks/storage/store.ts)、[配置文件](../src/configuration/files.ts)、[私有文件操作](../src/infrastructure/private-files.ts) | [task-storage.test.mjs](../tests/task-storage.test.mjs)、[settings.test.mjs](../tests/settings.test.mjs) |
|
|
19
|
+
| 结果文件授权与文件持久化 | [Results](../src/results/service.ts)、[文件能力](../src/results/ports.ts)、[文件实现](../src/results/files.ts) | [results.test.mjs](../tests/results.test.mjs) |
|
|
20
|
+
| ACP、worker 与进程协议 | [ACP 连接](../src/integrations/acp/connection.ts)、[worker 监督](../src/integrations/acp/execution.ts)、[worker 入口](../src/integrations/acp/worker.ts)、[命令映射](../src/integrations/acp/runtime.ts) | [execution.test.mjs](../tests/execution.test.mjs)、[tasks.test.mjs](../tests/tasks.test.mjs) |
|
|
21
|
+
| durable 工具、模型与会话存储 | [协调适配](../src/integrations/coordinator/coordinator.ts)、[provider](../src/integrations/coordinator/provider.ts)、[存储](../src/integrations/coordinator/storage.ts) | [coordinator-provider.test.mjs](../tests/coordinator-provider.test.mjs)、[durable.test.mjs](../tests/durable.test.mjs) |
|
|
22
|
+
| MCP、HTTP 与 Web | [MCP 工具](../src/protocol/mcp.ts)、[HTTP 服务](../src/protocol/http/server.ts)、[Web 路由](../src/protocol/http/web.ts)、[页面](../src/web/) | [service.test.mjs](../tests/service.test.mjs)、[web.test.mjs](../tests/web.test.mjs) |
|
|
23
|
+
| CLI 与本机控制协议 | [CLI](../src/protocol/cli/commands.ts)、[管理客户端](../src/protocol/cli/admin-client.ts)、[启动器客户端](../src/integrations/local-service/control.ts) | [web.test.mjs](../tests/web.test.mjs)、[restart.test.mjs](../tests/restart.test.mjs) |
|
|
24
|
+
| 装配、启动、关闭与重启 | [main](../src/application/main.ts)、[业务运行实例](../src/application/task-runtime.ts)、[launcher](../src/application/launcher.ts)、[启动准备](../src/application/startup.ts) | [restart.test.mjs](../tests/restart.test.mjs)、[service.test.mjs](../tests/service.test.mjs) |
|
|
25
|
+
| 安装与发布 | [命令入口](../bin/agent-task.mjs)、[setup](../scripts/setup.mjs)、[安装库](../scripts/install-lib.mjs)、[包门禁](../scripts/pack-release.mjs)、[工作流](../.github/workflows/) | [install.test.mjs](../tests/install.test.mjs)、[setup.test.mjs](../tests/setup.test.mjs)、[发布说明](release.md) |
|
|
26
|
+
|
|
27
|
+
## 依赖与一致性边界
|
|
28
|
+
|
|
29
|
+
[依赖检查器](../scripts/check-boundaries.mjs)随 `npm run check` 执行。它检查 TypeScript 模块的静态导入、类型依赖、再导出、字面量动态导入和 worker 文件引用,拒绝循环依赖、越层引用、SDK 进入业务模块,以及运行服务之外的 `commitRun` 调用。新增文件必须有明确职责分类。
|
|
30
|
+
|
|
31
|
+
模型只依赖模型;能力契约只依赖数据与其他契约;纯规则和基础校验不接触存储或协议。服务可组合其他服务,但不导入存储实现、基础设施或协议 SDK。存储实现依赖数据、校验和基础设施。协议与执行适配器调用业务能力,由应用入口装配。CLI 读取私有启动信息及调用启动器的边界在检查器中明确列出。
|
|
32
|
+
|
|
33
|
+
[TaskRuns](../src/tasks/runs.ts)持有 Run 写能力。定义服务不写 Run;监督器、模型工具、ACP 回调、超时、取消和人工回复通过运行服务的业务操作修改它。任务游标与 Run 仍使用同一事务,节点派发在创建 worker 前提交;异步结果返回后重新读取当前状态。缺少持久字段或非规范记录直接拒绝,不使用请求默认值修复。配置文件是管理员提供的下次启动输入,按配置请求契约解析;它不与 Task/Run 的持久记录契约共用默认值。
|
|
34
|
+
|
|
35
|
+
检查器约束源码依赖,不是权限沙箱,也不证明运行时副作用安全。真实模型和执行端的证据边界见[验证说明](validation.md)。
|
|
36
|
+
|
|
37
|
+
## 资源所有权
|
|
38
|
+
|
|
39
|
+
| 资源 | 创建与关闭责任 |
|
|
40
|
+
| --- | --- |
|
|
41
|
+
| 数据目录排他锁 | 应用入口取得,在业务与网络资源收尾后释放 |
|
|
42
|
+
| 业务 SQLite 与业务服务 | `createTaskRuntime` 创建;关闭先停止业务入口与监督,再关闭存储 |
|
|
43
|
+
| 协调调用、时钟与取消信号 | `RunSupervisor` 创建并等待其结束;`TaskRuns` 不持有进程或 SDK 对象 |
|
|
44
|
+
| 节点会话句柄、超时与等待期间的会话 | `NodeSessions` 持有;关闭调用共用同一个完成结果 |
|
|
45
|
+
| worker 与 ACP 进程组 | ACP 接入创建与回收;监督器只持有窄会话能力 |
|
|
46
|
+
| durable storage 与 Harness | 每次协调调用创建;打开失败关闭存储,成功后由 Harness 关闭其存储 |
|
|
47
|
+
| HTTP listener 与 MCP transport/server | `HttpServer` 持有;请求断开只释放请求资源,应用关闭停止新请求并收尾 |
|
|
48
|
+
| 配置和结果文件描述符 | 文件适配器在单次操作内打开,并在 `finally` 中关闭 |
|
|
49
|
+
|
|
50
|
+
关闭接口幂等。关闭开始后拒绝新的业务操作;未验收的外部执行被中断并阻断后续自动派发。进程组回收与文件事务不能证明无孤儿进程、断电恢复或外部副作用 exactly-once。
|
|
30
51
|
|
|
31
52
|
## 集成与验收入口
|
|
32
53
|
|
|
33
54
|
- [probe-agent.mjs](../scripts/probe-agent.mjs):只做 ACP initialize。
|
|
34
55
|
- [单节点用例](../tests/e2e/deepseek-acp.test.mjs)、[人工回复 DAG 用例](../tests/e2e/human-dag.test.mjs):真实模型验收。
|
|
35
|
-
- [E2E harness](../tests/e2e/harness.mjs)、[Pi
|
|
56
|
+
- [E2E harness](../tests/e2e/harness.mjs)、[Pi 启动器](../scripts/run-pi-human-e2e.mjs):环境准备、服务生命周期和证据保存。
|
|
36
57
|
|
|
37
|
-
|
|
58
|
+
配置示例见 [config.example.json](../config.example.json),命令和依赖版本见 [package.json](../package.json)。操作前置条件与已验证范围见[部署说明](deployment.md)、[验证说明](validation.md)。
|
package/docs/validation.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# 验证导航与证据边界
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
**模块化重构后,单节点与三节点 DAG 的真实模型 E2E 均一次通过,详见下文复验记录。** 项目不宣称生产可用或外部副作用 exactly-once。
|
|
4
4
|
|
|
5
5
|
## 本地验证
|
|
6
6
|
|
|
@@ -10,21 +10,23 @@ npm test
|
|
|
10
10
|
git diff --check
|
|
11
11
|
```
|
|
12
12
|
|
|
13
|
-
各职责的测试入口见[代码导航](technical-design.md)。基础测试使用真实本地文件、SQLite、进程和 SDK,不调用外部模型,不使用假模型或模拟 provider。失败进程和 no_model
|
|
13
|
+
各职责的测试入口见[代码导航](technical-design.md)。基础测试使用真实本地文件、SQLite、进程和 SDK,不调用外部模型,不使用假模型或模拟 provider。失败进程和 no_model 只证明失败路径;结构化状态用例不证明模型语义判断。`check` 同时执行 TypeScript 与[依赖边界检查](../scripts/check-boundaries.mjs),后者检查模块依赖、循环、SDK 位置和 Run 写入口;它不证明运行时权限或模型语义。
|
|
14
|
+
|
|
15
|
+
2026-10-23,Linux x64、Node 24.15.0:模块化重构通过类型与依赖边界检查、42 项基础测试和本地包清单门禁。关键新增证据见 [存储测试](../tests/task-storage.test.mjs)与[任务测试](../tests/tasks.test.mjs):严格记录拒绝而不修复、事务失败回滚触发游标、派发提交先于真实进程执行,以及关闭、取消与迟到回调。临时源码副本中的越层导入、循环依赖和绕过 Run 写入口均被检查器拒绝。
|
|
16
|
+
|
|
17
|
+
本地测试不证明真实模型或 ACP 成功路径;后续真实验收见[模块化重构后复验](#模块化重构后复验)。本次未重新执行跨平台安装验收。
|
|
14
18
|
|
|
15
19
|
## 控制台验证
|
|
16
20
|
|
|
17
|
-
[
|
|
21
|
+
[Web/CLI 用例](../tests/web.test.mjs)使用真实本机服务进程验证两端查询与保存的互通、旧草稿拒绝、执行端授权清除、凭据引用保护、离线失败不写文件,以及独立管理员认证、Host/Origin/请求类型边界、有限任务写入、密钥不回显或进入日志。也验证重启后的配置差异和目录切换不复制历史。[重启用例](../tests/restart.test.mjs)验证前台 CLI、固定端口进程更换、绑定失败不能报成功,以及持久化的不确定派发在重复重启后仍被阻断。实际任务记录来自业务服务,不使用假模型输出。
|
|
18
22
|
|
|
19
23
|
[配置用例](../tests/settings.test.mjs)验证私有文件边界、旧编辑拒绝、显式凭据环境、端点与密钥引用分离、服务令牌别名不能作为模型凭据、失败时保留文件,以及关闭后拒绝操作。这些用例不构成断电、磁盘满或目录同步失败窗口的完整证据。
|
|
20
24
|
|
|
21
|
-
尚未完成真实浏览器交互、CSP
|
|
25
|
+
尚未完成真实浏览器交互、CSP 执行和跨浏览器缓存/自动填充验收;CLI 的编辑器交互和隐藏终端凭据输入也未做终端验收,凭据测试使用 stdin。需在浏览器核对:不可信任务文本不执行脚本或加载外链;离开、刷新和退出后无令牌残留;配置草稿不被轮询覆盖;密钥保存与配置保存的提示明确。HTTP 头检查不能替代这些验证,也不证明模型认证或 ACP 执行成功。
|
|
22
26
|
|
|
23
|
-
###
|
|
27
|
+
### 启动与注册调整
|
|
24
28
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
本次尚未在 macOS 复验 launchd,历史 macOS 安装证据不代表新启动器已验收。四类执行端的固定命令映射和凭据过滤有本地契约测试;Claude ACP 新增注册目标没有真实握手、认证或任务证据。其他执行端的历史结果也不能代替新原生环境和审批策略下的真实复验。
|
|
29
|
+
Web/CLI 重启证据见下文 [rc.2 发布验收](#001-rc2当前-latest)。四类执行端的固定命令映射和凭据过滤有本地契约测试;Claude ACP 新增注册目标没有真实握手、认证或任务证据。其他执行端的历史结果也不能代替新原生环境和审批策略下的真实复验。
|
|
28
30
|
|
|
29
31
|
## 真实模型验收入口
|
|
30
32
|
|
|
@@ -54,10 +56,31 @@ Linux x64、Node 24.15.0:35 项基础测试、TypeScript 检查及 npm 包清
|
|
|
54
56
|
|
|
55
57
|
同日移除用例中的 JSON 格式要求和固定澄清口令,以相同命令复验一次,约 26 秒。三个节点均输出普通文本或 Markdown,轮数为 1 / 2 / 1;没有为了格式追加澄清,计算结果仍为 1292。
|
|
56
58
|
|
|
57
|
-
但测试未通过:`audit` 原始输出包含必需标识,协调员接受的片段遗漏了该标识,验收理由仍声称包含它,运行被标为 `succeeded`。[三节点用例](../tests/e2e/human-dag.test.mjs)
|
|
59
|
+
但测试未通过:`audit` 原始输出包含必需标识,协调员接受的片段遗漏了该标识,验收理由仍声称包含它,运行被标为 `succeeded`。[三节点用例](../tests/e2e/human-dag.test.mjs)的内容断言拦住了这一遗漏,没有降低断言或重跑。此结果说明文本传递可执行,但不能把运行成功状态当成完整交付的证据;随后补充了摘录完整性指令,后续复验见下节。交付格式原则见[总体方案](design-proposal.md#架构选择)。
|
|
58
60
|
|
|
59
61
|
测试日志:`/tmp/agent-task-pi-human-K8huNN/test-1.log`;运行证据:`/tmp/agent-task-real-e2e-XgRgeo`。旧记录保留,临时原生认证已清空。
|
|
60
62
|
|
|
63
|
+
### 模块化重构后复验
|
|
64
|
+
|
|
65
|
+
2026-10-23,Linux x64、Node 24.15.0,使用 DeepSeek `deepseek-flash` 协调员、独立只读 Pi 配置和 pi-acp 0.0.34。两项现有用例各执行一次,均通过;没有修改用例断言或重复运行失败任务。
|
|
66
|
+
|
|
67
|
+
| 用例 | 结果与证据 |
|
|
68
|
+
| --- | --- |
|
|
69
|
+
| 三节点 DAG 与人工回复 | `npm run test:e2e:human -- --quantity 4`,约 31.4 秒。一个 TaskRun、三个 ACP 会话,节点轮数为 1 / 2 / 1。测试客户端提供数量 4,结果为 1292;等待约 2.1 秒后续接原 Run,在同一 `total` 会话内澄清,已接受的 `price` 记录保持不变。三个交付均保留必需标识,内容断言通过。 |
|
|
70
|
+
| 单节点 | 复用同一隔离配置的临时启动器运行现有 `deepseek-acp.test.mjs`,约 7.6 秒。一个 TaskRun、一个 ACP 会话、一轮执行,接受包含标识和结果 323 的交付,验证结果文件已持久化。 |
|
|
71
|
+
|
|
72
|
+
两次提交后均断开发起 MCP 客户端,再由新连接观察完成。服务均正常退出;本次创建的 Pi 原生认证与测试服务环境文件中的凭据已清空,历史和结果文件保留。
|
|
73
|
+
|
|
74
|
+
- DAG 日志:`/tmp/agent-task-pi-human-lpMTR3/test-1.log`;证据:`/tmp/agent-task-real-e2e-nwjC0U`;Run:`a42b672f-2f49-4c23-a169-98d25b2b2243`。
|
|
75
|
+
- 单节点日志:`/tmp/agent-task-pi-single-lseufC/test-1.log`;证据:`/tmp/agent-task-real-e2e-iV24X1`;Run:`7320bfda-3968-4305-acf6-10d7a9dae4e7`。
|
|
76
|
+
- 两个证据目录均保留 `acceptance-summary.json`、`record-audit.json`、业务 SQLite、运行快照及事件记录。临时目录可能被系统清理,长期留存需管理员安全归档。
|
|
77
|
+
|
|
78
|
+
同日以只读方式交叉核查业务库、durable 库、Pi 原生会话和结果文件。四个数据库的完整性与外键检查通过,业务记录通过严格持久化 schema 校验,最终快照与数据库一致。DAG 只有一个协调会话、两次提交(初始任务与数量回复)、11 次模型生成及 11 次工具调用;单节点为一个会话、一次提交、4 次模型生成及 4 次工具调用。所有调用均完成,无工具错误,协调员活动状态及收件箱为空。等待快照中下游仍为 pending,接受的 price 与最终记录完全一致。
|
|
79
|
+
|
|
80
|
+
四个节点的逐轮输入输出均与 Pi 原生日志一致,接受的交付全文与末轮输出及结果文件一致,标识和必需数值完整。DAG 原生日志只有两次 read,分别读取已接受的 price、total 文件;单节点没有工具调用。执行端启动另有 3 + 1 次 `npm view @earendil-works/pi-coding-agent version` 记录,来源为本机 pi-acp 的启动版本检查,Pi 的 `--offline` 不阻止该行为;日志没有查询结果,无法确认 registry 请求是否完成。两次服务退出码均为 0,临时认证及服务环境文件均为空对象。
|
|
81
|
+
|
|
82
|
+
本次通过覆盖了此前失败的交付标识断言,不证明模型始终完整摘录。数量来自声明的测试值,不是真人文件回复;未进行真实模型运行中的重启、故障恢复,或 Codex、Claude、OpenCode 成功路径验收。原生只读配置不是 OS 沙箱;原始 stderr 和完整 ACP 通信未保留,不能据此证明执行栈没有其他外部访问或诊断错误。
|
|
83
|
+
|
|
61
84
|
## 恢复保证的边界
|
|
62
85
|
|
|
63
86
|
早期 durable 研究曾在真实 SQLite/文件/SIGKILL 实验中观察到:外部文件写入后、结果提交前崩溃,恢复检查点再次执行了未做幂等保护的写入。这不是 ACP 恢复验收,而是检查点不保证外部副作用 exactly-once 的证据。
|
|
@@ -66,17 +89,27 @@ Linux x64、Node 24.15.0:35 项基础测试、TypeScript 检查及 npm 包清
|
|
|
66
89
|
|
|
67
90
|
Linux x64、Node 24.15.0 的本机记录:
|
|
68
91
|
|
|
69
|
-
-
|
|
92
|
+
- 专属目录安装、重复安装及带 token 的 MCP 健康检查通过。
|
|
70
93
|
- Pi 1.3.0 + pi-acp 0.0.34、codex-acp 2.2.2、OpenCode 1.19.3 在独立无认证 HOME 下均通过 initialize;没有发送 session/new 或模型任务,也未自动批准执行端。
|
|
71
|
-
- 经 MCP 保存并暂停未来任务,两次卸载后保留任务记录、配置、环境、工作空间和未入清单文件;服务已移除。
|
|
72
94
|
- 首次安装实验遭遇磁盘满并损坏实验清单;未删除任务数据修复。修正后在新的专属目录完成上述部署复验,不构成业务运行时磁盘满恢复的证据。
|
|
73
95
|
|
|
74
96
|
证据目录:`/tmp/agent-task-deploy-verified`、`/tmp/agent-task-deploy-final`;工作空间:`/tmp/agent-task-deploy-workspace`;空认证 HOME:`/tmp/agent-task-deploy-native-home`。临时文件可能被系统清理,长期留存需管理员安全归档。
|
|
75
97
|
|
|
76
|
-
macOS 的 npm 安装、LaunchAgent 启停及卸载保留数据已在 GitHub macOS ARM64 runner 验证,见下文。原生认证与权限、真实任务、终端关闭/用户注销后的存续,以及执行端取消和进程清理仍未验收;CI 服务启动不能替代这些证据。
|
|
77
98
|
|
|
78
99
|
## npm 发布候选验证
|
|
79
100
|
|
|
101
|
+
### 0.0.1-rc.2(当前 latest)
|
|
102
|
+
|
|
103
|
+
2026-10-22,`realqiyan` 已将 **[@realqiyan/agent-task@0.0.1-rc.2](https://www.npmjs.com/package/@realqiyan/agent-task/v/0.0.1-rc.2)** 发布到 npmjs。匿名 registry 查询确认版本、发布账号、MIT 许可证及 `latest=0.0.1-rc.2`。本机直接发布了下述 CI 已验收的同一 tarball,没有重新构建,也没有 GitHub provenance。
|
|
104
|
+
|
|
105
|
+
- [Validate 运行 39829900075](https://github.com/realqiyan/agent-task/actions/runs/39829900075)在提交 `48549ea` 上全部通过:Node 22.19.0/24.x 类型检查、35 项基础测试、构建和包清单门禁。
|
|
106
|
+
- Ubuntu x64 与 macOS ARM64 的 Node 22.19.0 安装任务不 checkout 源码,使用同一 CI tarball 验证前台、Web/CLI 重启、启动目录/端口/token 变量名切换、认证健康检查。macOS 证据来自 hosted runner,不包括 Intel Mac、浏览器、休眠或用户注销场景。
|
|
107
|
+
- 发布后在 Linux x64、Node 24.15.0 以独立空 npm 配置匿名执行默认 `npm install -g @realqiyan/agent-task`,未指定版本或使用本地 tarball;固定使用 npmjs。前台、Web HTTP 配置、重启、健康检查均通过。
|
|
108
|
+
|
|
109
|
+
发布后安装报告:`/tmp/agent-task-npm-vseswA/report.json`。捕获输出未发现验证凭据,测试服务已移除。没有模型调用或 ACP 任务,不替代原生认证、权限或真实模型复验。临时目录可能被系统清理;包内文档是打包时快照,后续证据以本仓库为准。
|
|
110
|
+
|
|
111
|
+
### 0.0.1-rc.1(历史证据)
|
|
112
|
+
|
|
80
113
|
2026-10-22,`realqiyan` 已将 **[@realqiyan/agent-task@0.0.1-rc.1](https://www.npmjs.com/package/@realqiyan/agent-task/v/0.0.1-rc.1)** 发布到 npmjs。匿名 registry 查询确认版本、发布账号、MIT 许可证及 `latest=0.0.1-rc.1`。本次经授权从本机发布,没有 GitHub provenance。包内文档是打包时快照,后续证据以[仓库中的最新记录](https://github.com/realqiyan/agent-task/blob/master/docs/validation.md#npm-发布候选验证)为准。
|
|
81
114
|
|
|
82
115
|
npm 因包名保护拒绝了未加 scope 的 `agent-task`:名称被判定与 `agent-base` 过于相似。维护者已明确批准使用 `@realqiyan/agent-task`,安装命令随之改为 `npm install -g @realqiyan/agent-task`,CLI 仍为 `agent-task`。未关闭账号 2FA,也未上传本机凭据。
|
|
@@ -85,13 +118,12 @@ npm 因包名保护拒绝了未加 scope 的 `agent-task`:名称被判定与 `
|
|
|
85
118
|
|
|
86
119
|
- Node 22.19.0 和 24.15.0 的 TypeScript 检查、33 项基础测试及构建均通过;真实 PTY 用例验证 setup 的确认/取消、生成独立 token 和不输出凭据。
|
|
87
120
|
- [包清单门禁](../scripts/pack-release.mjs)通过:仅包含预编译 JS、Web 资源、明确列出的操作脚本、示例及公开文档;不包含源码、开发工具、凭据文件、运行数据库或本地记录。
|
|
88
|
-
- Node 22.19.0 先验收 scoped tarball,再从 npmjs 按 `npm install -g @realqiyan/agent-task` 的默认版本选择全局安装到独立临时 prefix;没有指定版本或使用本地 tarball 替代 registry 安装。禁用 lifecycle scripts,不使用项目源码或 TypeScript。前台启动、Web HTTP
|
|
89
|
-
- 重复 setup 保留 token;重复卸载保留配置、凭据、任务库和工作空间。显式注册的执行端仍未授权,没有 ACP 工作或模型调用。捕获的命令、前台输出及用户服务日志未出现验证用凭据,测试服务已移除。
|
|
121
|
+
- Node 22.19.0 先验收 scoped tarball,再从 npmjs 按 `npm install -g @realqiyan/agent-task` 的默认版本选择全局安装到独立临时 prefix;没有指定版本或使用本地 tarball 替代 registry 安装。禁用 lifecycle scripts,不使用项目源码或 TypeScript。前台启动、Web HTTP 配置保存/重启及带认证的健康检查均通过。
|
|
90
122
|
- tarball 预验收使用 npm 镜像依赖;发布后验收固定使用 `https://registry.npmjs.org/`,通过独立空 npm 配置文件进行匿名安装。复用 npm 下载缓存,没有复制项目 node_modules;不构成空缓存下载时延的保证。
|
|
91
123
|
|
|
92
124
|
Linux 22.19.0 的发布后 registry 安装报告:`/tmp/agent-task-npm-uM8FT5/report.json`;scoped tarball 预验收报告:`/tmp/agent-task-npm-Zgkggc/report.json`。临时目录包含验证专用随机凭据和空业务库,不上传或打包;报告仅含结果。Node 22.19.0 会输出内置 SQLite 的 experimental warning,这不是认证错误。
|
|
93
125
|
|
|
94
|
-
同日,[GitHub Validate 运行 39813423968](https://github.com/realqiyan/agent-task/actions/runs/39813423968)在提交 `461a1b0` 上全部通过:Node 22.19.0/24.x 检查、基础测试、构建及包清单门禁;Ubuntu x64 与 macOS ARM64 的 Node 22.19.0 安装任务均不 checkout 源码,使用 CI tarball 完成前台、Web HTTP
|
|
126
|
+
同日,[GitHub Validate 运行 39813423968](https://github.com/realqiyan/agent-task/actions/runs/39813423968)在提交 `461a1b0` 上全部通过:Node 22.19.0/24.x 检查、基础测试、构建及包清单门禁;Ubuntu x64 与 macOS ARM64 的 Node 22.19.0 安装任务均不 checkout 源码,使用 CI tarball 完成前台、Web HTTP 配置、认证健康检查验收。报告确认输出无验证凭据,没有模型或 ACP 工作。macOS 的证据来自 hosted runner,不包括 Intel Mac、交互式终端/浏览器、休眠或用户注销场景。
|
|
95
127
|
|
|
96
128
|
[受控发布工作流](../.github/workflows/publish.yml)已推送,但发布 Environment 审核和 npm 发布 secret 尚未配置,发布作业没有实际执行;本机首发和 Validate 通过不等于 Actions 发布已经验收。
|
|
97
129
|
|
|
@@ -99,10 +131,10 @@ Linux 22.19.0 的发布后 registry 安装报告:`/tmp/agent-task-npm-uM8FT5/r
|
|
|
99
131
|
|
|
100
132
|
## 尚未验证
|
|
101
133
|
|
|
102
|
-
-
|
|
134
|
+
- 复杂任务的语义验收、并行分支与汇合、不同执行端之间的交付。
|
|
103
135
|
- 各执行端原生权限、认证续期、沙箱、技能/MCP 发现及文件访问;其他模型和 OpenAI 兼容端点的协议差异。
|
|
104
136
|
- 真实模型崩溃窗口、重复收费和预算行为;人工等待期间保留真实 ACP 会话的续答、并发回复、长时间等待及重启。
|
|
105
|
-
-
|
|
137
|
+
- 系统级强杀、断电、业务库磁盘满、真实任务的长期监督和原生权限。
|
|
106
138
|
- SDK 升级、历史数据转换,以及执行中修改计划等当前未开放能力。
|
|
107
139
|
|
|
108
140
|
实现和操作入口见[代码导航](technical-design.md)、[部署说明](deployment.md)。
|
package/docs/web-console.md
CHANGED
|
@@ -2,36 +2,38 @@
|
|
|
2
2
|
|
|
3
3
|
控制台与 MCP 共用 HTTP 服务,只监听 `127.0.0.1`。访问 `http://127.0.0.1:<port>/admin/`,不要改用 LAN 地址、反向代理或公网转发。
|
|
4
4
|
|
|
5
|
+
全部管理操作也可通过 [CLI](cli.md) 完成,两端使用同一管理 API 和底层服务。
|
|
6
|
+
|
|
5
7
|
## 启用与连接
|
|
6
8
|
|
|
7
9
|
新安装由 `agent-task setup`([实现](../scripts/setup.mjs))在当前 `dataDir/environment.json` 中生成独立的 `AGENT_TASK_ADMIN_TOKEN`。用本地编辑器读取该字段并在连接表单输入;它不是 MCP token,不能放进 URL、命令参数、截图或日志。
|
|
8
10
|
|
|
9
|
-
已有文件不会由 setup 补写或覆盖。缺少管理员令牌时,管理接口关闭。需要启用时先停服,用本地密码管理器生成独立随机令牌,离线加入该字段;令牌约束见 [environment.ts](../src/environment.ts)。不要复用服务或模型密钥。
|
|
11
|
+
已有文件不会由 setup 补写或覆盖。缺少管理员令牌时,管理接口关闭。需要启用时先停服,用本地密码管理器生成独立随机令牌,离线加入该字段;令牌约束见 [environment.ts](../src/configuration/environment.ts)。不要复用服务或模型密钥。
|
|
10
12
|
|
|
11
|
-
|
|
13
|
+
启动入口,见[部署说明](deployment.md)。配置和环境文件须属于当前用户、权限为 `0600`,所在目录须为规范绝对路径、权限为 `0700`,不接受符号链接。环境文件仅在运行进程启动时加载。文件格式见 [environment.ts](../src/configuration/environment.ts)。
|
|
12
14
|
|
|
13
15
|
令牌仅保留在页面内存中;退出、离开或刷新后重新连接。不设置 Cookie,不写浏览器持久存储。配置和密钥文件仍是本地明文,须按凭据保护;此方案不隔离同一 OS 用户的其他进程或恶意浏览器扩展。
|
|
14
16
|
|
|
15
17
|
## 操作范围
|
|
16
18
|
|
|
17
19
|
- 任务列表、固定 DAG、运行历史、节点进度、已接受交付、错误和问题只读。触发计划结束不等于运行成功,原始输出不等于交付。
|
|
18
|
-
- 任务写操作仅复用 `task_update`,暂停、恢复或取消未来触发。不停止当前运行,不补跑错过的触发,不回答问题或修改 DAG
|
|
20
|
+
- 任务写操作仅复用 `task_update`,暂停、恢复或取消未来触发。不停止当前运行,不补跑错过的触发,不回答问题或修改 DAG。已有不确定外部结果的任务拒绝恢复未来触发;当前不提供人工核对后强制恢复能力。
|
|
19
21
|
- 数据目录、监听端口、MCP token 环境变量名、执行端注册和协调模型可编辑,下次启动生效。修改 token 变量名保留令牌值,不在页面回显。
|
|
20
22
|
- 执行端只选择 pi、codex、claude 或 opencode,保留 ID、默认工作空间和无人值守审核,并可填写备注。启动方式由系统决定;原生认证和权限继续用官方工具管理。没有命令、参数、环境变量清单、结果目录或 ACP 工具白名单配置。
|
|
21
23
|
|
|
22
|
-
页面与接口入口见 [web.ts](../src/web.ts)、[页面模块](../src/web/),任务契约见 [task-contract.ts](../src/task-contract.ts)。提供受管理员认证保护的重启入口;没有通用 MCP 代理、文件浏览器或下载接口。固定结果目录不授予整个 dataDir 的读取能力。
|
|
24
|
+
页面与接口入口见 [web.ts](../src/protocol/http/web.ts)、[页面模块](../src/web/),任务契约见 [task-contract.ts](../src/protocol/task-contract.ts)。提供受管理员认证保护的重启入口;没有通用 MCP 代理、文件浏览器或下载接口。固定结果目录不授予整个 dataDir 的读取能力。
|
|
23
25
|
|
|
24
26
|
## 保存与重启
|
|
25
27
|
|
|
26
|
-
1. 密钥只显示是否设置,原值不回显。不提交即保留;替换和删除必须明确操作。先保存新密钥,再保存引用它的配置。新凭据命名和受保护变量见 [settings.ts](../src/settings.ts)。
|
|
27
|
-
2. 配置先校验并预览影响,再确认保存。校验不调用模型或启动 ACP,不能证明认证、原生权限或实际执行成功。修改执行端类型、ID
|
|
28
|
+
1. 密钥只显示是否设置,原值不回显。不提交即保留;替换和删除必须明确操作。先保存新密钥,再保存引用它的配置。新凭据命名和受保护变量见 [settings.ts](../src/configuration/settings.ts)。
|
|
29
|
+
2. 配置先校验并预览影响,再确认保存。校验不调用模型或启动 ACP,不能证明认证、原生权限或实际执行成功。修改执行端类型、ID 或工作空间后,配置服务要求重新明确批准无人值守执行;仅修改备注不改变授权。
|
|
28
30
|
3. 配置与密钥分别原子替换,不是跨文件事务。更换模型端点须使用新的凭据引用,避免中途重启将新密钥交给旧端点。旧凭据不自动清理。
|
|
29
|
-
4. 保存不热更新。检查活动运行及待回答运行后,点击“重启并检查可用性”或执行 `agent-task restart
|
|
31
|
+
4. 保存不热更新。检查活动运行及待回答运行后,点击“重启并检查可用性”或执行 `agent-task restart`。目录切换、原生环境来源及故障处理见[部署说明](deployment.md)。
|
|
30
32
|
5. 只有新进程通过认证健康检查才显示成功。页面清除令牌并给出新地址,重新连接后核对运行配置。请求未确认时先用 CLI status 核查,不删除历史、自动回滚或重放执行来修复。
|
|
31
33
|
|
|
32
34
|
待回答运行也可能持有 ACP 会话,重启不保证无损续接。执行端类型、工作空间或批准状态与任务快照不一致时,旧任务的派发会被拒绝;页面显示受影响任务,但不改写快照、DAG 或执行端指派。需要新任务时由 MCP 调用方处理。
|
|
33
35
|
|
|
34
|
-
|
|
36
|
+
Web 与 CLI 的旧编辑都会被拒绝,不做自动合并。离线编辑配置须先停服。校验与保存职责见 [settings.ts](../src/configuration/settings.ts)、[配置影响预览](../src/configuration/management.ts)、[settings-contract.ts](../src/protocol/settings-contract.ts)、[配置文件适配](../src/configuration/files.ts)。
|
|
35
37
|
|
|
36
38
|
## 安全与验收
|
|
37
39
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@realqiyan/agent-task",
|
|
3
|
-
"version": "0.0.1-rc.
|
|
3
|
+
"version": "0.0.1-rc.3",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"author": "realqiyan",
|
|
6
6
|
"repository": {
|
|
@@ -21,11 +21,9 @@
|
|
|
21
21
|
"scripts/setup-wizard.mjs",
|
|
22
22
|
"scripts/install-lib.mjs",
|
|
23
23
|
"scripts/service-runner.mjs",
|
|
24
|
-
"scripts/uninstall.mjs",
|
|
25
24
|
"scripts/probe-agent.mjs",
|
|
26
25
|
"scripts/mcp-call.mjs",
|
|
27
26
|
"docs/*.md",
|
|
28
|
-
"deploy/*.example",
|
|
29
27
|
"config.example.json",
|
|
30
28
|
"LICENSE"
|
|
31
29
|
],
|
|
@@ -34,14 +32,17 @@
|
|
|
34
32
|
"registry": "https://registry.npmjs.org/",
|
|
35
33
|
"tag": "latest"
|
|
36
34
|
},
|
|
37
|
-
"os": [
|
|
35
|
+
"os": [
|
|
36
|
+
"linux",
|
|
37
|
+
"darwin"
|
|
38
|
+
],
|
|
38
39
|
"type": "module",
|
|
39
40
|
"description": "Durable intelligent task coordination over MCP with ACP executors",
|
|
40
41
|
"engines": {
|
|
41
42
|
"node": ">=22.19.0"
|
|
42
43
|
},
|
|
43
44
|
"scripts": {
|
|
44
|
-
"check": "tsc --noEmit",
|
|
45
|
+
"check": "tsc --noEmit && node scripts/check-boundaries.mjs",
|
|
45
46
|
"build": "rm -rf dist && tsc && node scripts/copy-web.mjs",
|
|
46
47
|
"test": "npm run build && node --test --test-concurrency=1 tests/*.test.mjs",
|
|
47
48
|
"test:e2e": "npm run build && node --test --test-concurrency=1 tests/e2e/deepseek-acp.test.mjs",
|
|
@@ -50,8 +51,7 @@
|
|
|
50
51
|
"setup": "node bin/agent-task.mjs setup",
|
|
51
52
|
"prepack": "npm run build",
|
|
52
53
|
"pack:release": "node scripts/pack-release.mjs",
|
|
53
|
-
"test:install": "node scripts/verify-install.mjs"
|
|
54
|
-
"uninstall:service": "node scripts/uninstall.mjs"
|
|
54
|
+
"test:install": "node scripts/verify-install.mjs"
|
|
55
55
|
},
|
|
56
56
|
"dependencies": {
|
|
57
57
|
"@agentclientprotocol/sdk": "2.0.0",
|