mirror of
https://github.com/whyour/qinglong.git
synced 2026-09-20 16:07:11 +08:00
feat(ql3): expose redacted log tails over local mcp
This commit is contained in:
@@ -11,6 +11,7 @@
|
||||
|
||||
最新增量证据(2026-08-14):
|
||||
|
||||
- D-312/ADR-0404(已接受):`qinglong.run.log.excerpt@1.0.0` 进入显式可选的本机 `ql3-mcp` stdio 产品入口。每次调用固定经过 Owner credential authentication、exact `tool.call:qinglong.run.log.excerpt` + `artifact.read` Policy、durable audit、credential/Pepper fence confirm,再复用同一 SQLite authority 和私有 Artifact reader 完成 ADR-0403 的 Edge 4 KiB/Standalone 8 KiB 双读取安全投影。配置升级为 `qinglong/local-mcp-server@v2` 并要求显式 private `artifactRoot`,旧 v1 不猜测路径而是失败关闭。产物实证否决了 MCP 直接依赖 `local-execution` 的方案:该方案会带入 process/scheduler/croner,达到 7,469,105 bytes/816 files/228 modules;唯一 reader 实现因此归入既有 `local-command-file/artifact-read` 私有文件 authority,Execution 通过兼容 re-export 复用,workspace 仍为 18 package 且没有根层平铺。Local MCP 48/48、Local Execution 41/41、私有文件 3/3、依赖防火墙 54/54;最终 18-package clean build/test 与 backend 1,207 pass/2 条件 skip/0 fail,四项结构/部署审计零 finding,14 个 Local Profile artifact 全部通过。默认 Edge/Standalone 保持 2,589,812/2,589,890 bytes、315 files、56 modules,Edge/Standalone MCP 为 7,315,930/7,316,038 bytes、801 files、226 modules、RSS 38,420,480/39,567,360 bytes,闭包不含 `local-execution`、`local-process` 或 `croner`。PostgreSQL 18.4 arm64 HA 125/125、timeline `1→2`,报告 SHA-256 为 `29cd77d80737a3b1ab686c998d05a78c52deffd8add3b31d8035756d5dfcc433`,证据审计与 Docker 零残留。
|
||||
- D-311/ADR-0403(已接受):新增 `qinglong.run.log.excerpt@1.0.0` 共享 Trusted Tool kernel。输入只接受 Run/Attempt ID,Project 来自受信 context;禁止 Artifact ID、路径、URI、offset、length 与 cursor。Tool 复用 ADR-0377 的 Local 私有文件和 Cluster S3 日志 range reader,以一次 1-byte 尾部探测和一次 profile 固定窗口读取完成有界选择,不循环、不分页:Edge 4 KiB、Standalone 8 KiB、Cluster Control 16 KiB,Worker 拒绝;日志并发增长通过 `tailComplete=false` 和 `bounded_tail_probe_then_range_read` 明示,不冒充事务快照。内容执行非致命 UTF-8、控制/bidi 归一与七类已识别 credential 确定性掩码,始终声明 `residualSensitivity=potentially_sensitive`,并无条件作为 `data_only_never_execute`、`actionAuthority=none` 的不可信执行输出;Prompt 注入信号只作提示,不能授予 Tool/命令权限。能力位于 Runtime Core 既有二级目录,只导出精确 subpath,不新增 package、依赖、migration、连接或常驻组件;MCP/HTTP/Cluster 产品入口与最终 Prompt builder 留给独立门禁。最终 18-package clean build/test 与 backend 1,206 pass/2 条件 skip/0 fail,package/dependency/Edge import/Cluster deployment 审计零 finding,14 个 Local Profile 制品门全部通过;默认 Edge 保持 2,589,812 bytes/315 files/56 modules,Edge AI 为 3,121,108 bytes/368 files/61 modules,Edge MCP 为 7,237,187 bytes/795 files/220 modules,均在门内。PostgreSQL 18.4 arm64 HA 125/125 Gate、timeline `1→2`,报告 SHA-256 为 `1a0df2518d39db22ecf4bbaf2e06c9e6893e1bbf507b4026b2e0ef055eb2fd90`。
|
||||
- D-310/ADR-0402(已接受):新增 `qinglong.task.runs.compare@1.0.0`,把“最近成功/失败 Run”的选择从模型无界分页收回服务端。输入只接受 Task ID,固定读取按 created/id 倒序的 64 条 Project-scoped Task Run,第 65 条仅证明窗口截断且协议不返回 cursor;选择 succeeded baseline 与 failed candidate 后按固定顺序执行最多两个低敏点查并复用共享差值算法,输出明确区分 complete 与窗口内未找到,consistency 固定为 `bounded_task_window_then_ordered_point_reads`。实现没有扩大 CRITICAL/HIGH 的通用 SQLite/PostgreSQL Run Reader,而是在双方既有 `run/outcome-comparison/` 中提供窄 adapter;不新增 package、依赖、migration、索引、连接、timer、listener、watcher 或 cache,默认 Edge/Standalone 制品字节数保持 2,589,812。定向 Runtime Core 10/10、SQLite 1/1(真实 query plan 命中既有 Task 时间索引)、PostgreSQL adapter 2/2、Local MCP 47/47、dependency firewall 53/53;最终 18-package clean build/test 与 backend 1,206 pass/2 条件 skip/0 fail,package/dependency/Edge/Cluster deployment 审计零 finding。Edge-MCP 为 7,237,187 bytes/795 files/220 modules/RSS 38,699,008 bytes,Standalone-MCP 为 7,237,295 bytes/795 files/220 modules/RSS 38,600,704 bytes,均在门内。PostgreSQL 18.4 arm64 HA 125/125 Gate、timeline `1→2`,报告 SHA-256 为 `229c7cac328ee960f667f92868374264a10cb75090ef93d644da1326385d8774`。
|
||||
- D-309/ADR-0401(已接受):`qinglong.run.compare@1.0.0` 进入可选 `ql3-mcp` stdio 产品入口,复用 Runtime Core 的共享 Definition/projection 和既有 MCP 静态注册循环。每次调用重新执行 Owner credential 认证、`tool.call:qinglong.run.compare` + `run.read` Policy、durable allowed audit、credential fence confirm,再按 baseline→candidate 串行执行两个 Project-scoped SQLite 点查;错误稳定收敛为 `run_compare_unavailable`。该入口是 ADR-0347 的交互式只读 surface,只持久化安全 admission,不冒充 StepRun、encrypted Tool completion 或模型 Trace;内部 Copilot 的受信执行仍必须走完整 completion 链。实现不新增 package、依赖、migration、表、索引、连接、timer、listener、watcher、cache 或网络 endpoint,默认 Edge/Standalone 继续裁掉 MCP package,仅显式 `edge-mcp|standalone-mcp` 承担调用成本。Local MCP 46/46、最终 18-package clean build/test 退出 0、backend 1,206 pass/2 条件 skip/0 fail,package/dependency/Edge/Cluster deployment 审计零 finding;默认 Edge 为 2,589,812 bytes/315 files/56 modules/RSS 11,091,968 bytes,Edge-MCP 为 7,219,977 bytes/792 files/217 modules/RSS 38,649,856 bytes,Standalone-MCP 为 7,220,085 bytes/792 files/217 modules/RSS 38,043,648 bytes,均在各自门内。
|
||||
@@ -6916,8 +6917,13 @@ Task Run 窗口中选择最新 succeeded/failed,并复用共享低敏对比算
|
||||
Cluster 产品入口和完整 Trusted Tool completion 仍需独立门禁。ADR-0403 已进一步提供共享的
|
||||
`qinglong.run.log.excerpt@1.0.0` Trusted Tool kernel:它复用既有 Local/S3 range reader,以
|
||||
profile 固定的两次尾读、UTF-8/control 归一、已识别 credential 掩码和 residual sensitivity
|
||||
声明交付不可信日志片段;日志始终是 `data_only_never_execute` 且无行动权。该阶段未开放
|
||||
MCP/HTTP/Cluster 产品入口,最终结构化 Copilot Prompt 与模型 egress policy 仍需后续产品 Gate。
|
||||
声明交付不可信日志片段;日志始终是 `data_only_never_execute` 且无行动权。ADR-0404 已把该
|
||||
kernel 装入显式可选的本机 MCP:配置 v2 要求部署者提供私有 `artifactRoot`,每次读取重新经过
|
||||
authentication、exact Tool/Artifact Policy、durable audit 与 credential fence;默认 Edge/
|
||||
Standalone 继续完全裁掉 MCP。为避免只读 sidecar 拉入进程/scheduler 闭包,唯一 Local reader
|
||||
实现归入既有私有文件 authority 的 `artifact-read/`,Execution 只保留兼容 re-export;没有新建
|
||||
微型 package 或把文件平铺回根层。HTTP/Cluster 产品入口、最终结构化 Copilot Prompt 与模型
|
||||
egress policy 仍需后续产品 Gate。
|
||||
|
||||
## 17. Tool Registry
|
||||
|
||||
|
||||
@@ -0,0 +1,100 @@
|
||||
# ADR-0404:可选本机 MCP Run 日志摘录产品入口与私有文件边界
|
||||
|
||||
- 状态:Accepted
|
||||
- 日期:2026-08-14
|
||||
- 关联 RFC:QL-RFC-0001 D-312、Phase 2
|
||||
- 关联 ADR:ADR-0347、ADR-0351、ADR-0364、ADR-0366、ADR-0377、ADR-0401、ADR-0403
|
||||
|
||||
## 问题
|
||||
|
||||
ADR-0403 已交付 `qinglong.run.log.excerpt@1.0.0` 的 profile-neutral Trusted Tool kernel,
|
||||
但没有产品入口。失败日志解释要成为可用的本机 AI 能力,显式启用 `ql3-mcp` 的 Edge 与
|
||||
Standalone 用户需要经过现有身份、Policy、审计和 credential fence 读取同一份 Local Run
|
||||
Attempt 私有日志;默认未启用 MCP 的路由设备则不能承担额外依赖、常驻内存或攻击面。
|
||||
|
||||
最直接的组合方式是让 Local MCP 依赖 `@qinglong/local-execution/artifact-read`。产物审计证明该
|
||||
方案会把 `local-process`、scheduler 与 `croner` 一起拉入只读 sidecar:Edge MCP 达到
|
||||
7,469,105 bytes、816 files、228 modules,Standalone MCP 达到 7,469,249 bytes、816 files、
|
||||
228 modules。MCP 并不拥有启动、停止或调度进程的 authority,这个依赖方向既扩大低配成本,也
|
||||
让只读产品边界对执行实现产生错误耦合。
|
||||
|
||||
同时,单独为一个 reader 新建第十九个 workspace package,或把 reader 放回 package `src` 根目录,
|
||||
都会重现已经由 ADR-0364/0366 关闭的单文件微包与根层平铺问题。
|
||||
|
||||
## 决策
|
||||
|
||||
1. 把 `qinglong.run.log.excerpt@1.0.0` 注册到显式可选的 `edge-mcp|standalone-mcp` stdio
|
||||
product surface。默认 Edge/Standalone application 不安装、不导入也不启动该入口;不增加网络
|
||||
listener、daemon、timer、watcher、cache、migration、表或索引。
|
||||
2. 每次调用固定执行 credential authentication → exact
|
||||
`tool.call:qinglong.run.log.excerpt` 与 `artifact.read` Policy → durable Security Audit →
|
||||
credential/Pepper fence confirm → 有界日志读取。审计 reason 固定为
|
||||
`tool_qinglong_run_log_excerpt`,失败统一收敛为 `run_log_excerpt_unavailable`;日志正文、
|
||||
Artifact ID、路径和 credential 不写入审计。
|
||||
3. MCP 配置升级到 `qinglong/local-mcp-server@v2`,新增必填、规范化且位于
|
||||
`deploymentRoot` 下的 `artifactRoot`。它必须与 Local application 的 Run Attempt Artifact 根
|
||||
完全一致,并与 database、keyring、credential path 两两不同。旧 `@v1` 失败关闭;MCP 不从
|
||||
database path、当前目录或约定默认值猜测日志根。
|
||||
4. SQLite MCP read authority 只增加 Project-scoped `findAttemptById` 与 retention `inspect`,
|
||||
复用同一 connection 和既有 repository;不取得 Run/Attempt mutation、目录扫描或 retention
|
||||
删除 authority。生产组合复用 Runtime Core `RunAttemptLogReadService` 和 ADR-0403 的固定
|
||||
Edge 4 KiB/Standalone 8 KiB 双读取安全投影。
|
||||
5. `LocalRunAttemptLogRangeReader` 的唯一实现归入既有
|
||||
`@qinglong/local-command-file/artifact-read`。该 package 的职责收敛为“本机私有、有界文件
|
||||
authority”,根层仍只有公开转发入口,command JSON 与 Run log reader 分别位于
|
||||
`protocol/`、`artifact-read/`;它只允许导入 Runtime Core 的
|
||||
`run-attempt-log-read` 纯契约。
|
||||
6. `@qinglong/local-execution/artifact-read` 保留兼容 re-export,使现有 application 与测试无需
|
||||
改写调用面;依赖方向变为 execution → private-file,而不是 MCP → execution。workspace 保持
|
||||
18 个 package,不创建单文件 package,也不把实现平铺回 `src` 根层。
|
||||
7. 交互式 MCP 调用只持久化安全 admission,不冒充内部 Trusted Tool 的 StepRun、Trace、
|
||||
encrypted completion 或模型调用。日志继续无条件标记为不可信数据且无行动权;Cluster
|
||||
Copilot、最终 Prompt builder 与模型 egress policy 仍走独立 Gate。
|
||||
|
||||
## 低配与集群影响
|
||||
|
||||
- 默认 Edge/Standalone 仍为 2,589,812/2,589,890 bytes、315 files、56 modules;未启用 MCP 的
|
||||
路由设备没有新增常驻组件或制品成本。
|
||||
- Edge/Standalone MCP 为 7,315,930/7,316,038 bytes、801 files、226 modules,RSS 增量为
|
||||
38,420,480/39,567,360 bytes,均低于 16 MiB/1,536 files/48 MiB 门;闭包不含
|
||||
`local-execution`、`local-process` 或 `croner`。
|
||||
- Cluster 不复用本机 SQLite/file composition。后续 Cluster 产品入口应组合现有 PostgreSQL/S3
|
||||
authority,并独立证明认证、Policy、durable audit、credential fence 和 Trusted Tool completion;
|
||||
本 ADR 不让 Cluster Control 或 Worker 导入本机私有文件 package。
|
||||
|
||||
## 被否决方案
|
||||
|
||||
1. **MCP 直接依赖 `local-execution`**:实测污染只读制品并引入进程/scheduler 实现,违反
|
||||
authority 与部署闭包最小化。
|
||||
2. **新建 `local-artifact-reader` workspace package**:只有一个实现文件,增加 importer、lockfile、
|
||||
SBOM 和维护面,不能证明新的独立生命周期。
|
||||
3. **把 reader 平铺到 MCP 或 package 根层**:复制 Local Artifact 真源,或逆转已完成的 package
|
||||
内部领域布局治理。
|
||||
4. **继续使用 v1 并推导 Artifact 根**:部署路径可能变化,猜测会读错实例或越过显式 authority。
|
||||
5. **让客户端传 Artifact ID/path/range**:恢复任意读取和循环分页能力,破坏 ADR-0403 的固定预算。
|
||||
6. **在 audit 中保存日志片段**:扩大 credential/业务秘密的持久泄露面,且不属于 admission 证据。
|
||||
|
||||
## 当前验证
|
||||
|
||||
1. Local MCP 48/48:覆盖 Tool 发现、真实安全顺序、双 range read、脱敏、taint、无行动权、无
|
||||
Artifact/cursor 泄露,以及真实 SQLite + 私有 Artifact stdio E2E。
|
||||
2. Local Execution 41/41,证明兼容 re-export 与既有 application 日志读取不变;私有文件 package
|
||||
3/3,依赖防火墙定向 54/54。
|
||||
3. package boundary 与 dependency audit 零 finding;workspace 仍为 18 package,
|
||||
`local-command-file` 为 3 source、1 root/2 nested,`singleSourcePackages=[]`、
|
||||
`shallowSourcePackages=[]`。
|
||||
4. 默认 Edge/Standalone 与两档 MCP 的四个关键产物画像均通过,精确数据见“低配与集群影响”。
|
||||
|
||||
5. 最终 18-package clean build/test 退出 0;backend 1,209 项为 1,207 pass、2 条平台条件
|
||||
skip、0 fail。package/dependency/Edge import/Cluster deployment 审计全部零 finding。
|
||||
6. 14 个 Local Profile artifact 全部通过;除两档 MCP 的显式增量外,默认与既有组合均保持门内。
|
||||
7. PostgreSQL 18.4 arm64 HA 125/125 Gate 通过,timeline `1→2`,报告 SHA-256 为
|
||||
`29cd77d80737a3b1ab686c998d05a78c52deffd8add3b31d8035756d5dfcc433`;独立证据审计
|
||||
零 finding,专用容器、网络与卷零残留。
|
||||
|
||||
## 后续
|
||||
|
||||
1. 为结构化 Copilot Prompt 增加不可混淆 delimiter、residual sensitivity egress policy 与模型
|
||||
completion 证据;
|
||||
2. 产品化 Cluster S3 日志摘录,但不得借机让 Worker 获得模型投影或数据库控制面 authority;
|
||||
3. 在固定物理 Edge 设备记录单次日志读取延迟与 active RSS,仓库内画像不替代实机支持结论。
|
||||
@@ -407,6 +407,7 @@
|
||||
| [ADR-0401](./ADR-0401-optional-local-mcp-run-comparison-surface.md) | 可选本机 MCP Run 对比产品入口 | Accepted |
|
||||
| [ADR-0402](./ADR-0402-bounded-latest-task-run-outcome-comparison.md) | 有界的 Task 最近成功/失败 Run 对比 | Accepted |
|
||||
| [ADR-0403](./ADR-0403-bounded-redacted-run-log-tail-tool.md) | 有界、脱敏且不授予行动权的 Run 日志尾部 Tool | Accepted |
|
||||
| [ADR-0404](./ADR-0404-optional-local-mcp-run-log-excerpt-surface.md) | 可选本机 MCP Run 日志摘录产品入口与私有文件边界 | Accepted |
|
||||
|
||||
## 规则
|
||||
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
# QingLong 3.0 本机 MCP Task/Trigger/Run/Approval 发现、预览与运行诊断
|
||||
|
||||
`ql3-mcp` 是一个显式可选的 stdio sidecar,供同机 AI Client/Agent 发现当前 Project 的 Task、Trigger、最近 Run 与 Approval 状态,读取单个 Approval 的脱敏预览,以及读取单个 Run 的低敏状态和有界事件元数据。它不会随 Edge/Standalone application 自动启动,不监听网络端口,也不会执行 migration、任务、Shell、Approval decision 或管理操作。
|
||||
`ql3-mcp` 是一个显式可选的 stdio sidecar,供同机 AI Client/Agent 发现当前 Project 的 Task、Trigger、最近 Run 与 Approval 状态,读取单个 Approval 的脱敏预览,以及读取单个 Run 的低敏状态、有界事件元数据和经过安全投影的日志尾部。它不会随 Edge/Standalone application 自动启动,不监听网络端口,也不会执行 migration、任务、Shell、Approval decision 或管理操作。
|
||||
|
||||
## 前置条件
|
||||
|
||||
- 已完成 QingLong 3.0 fresh/adopted SQLite 部署和 readiness;MCP 启动只检查 schema,不自动升级数据库。
|
||||
- 已通过 [本机 Identity Credential](./ql3-local-identity-credential.md) 签发 active API credential presentation。
|
||||
- credential 对应 subject 在目标 Project 至少具有相应的 `task.read`、`trigger.read`、`run.read` 或 `approval.read`;读取 Approval preview 还必须同时具有 `artifact.read`。调用方还需获得目标 Tool 的 exact `tool.call:<tool-name>` permission。
|
||||
- credential 对应 subject 在目标 Project 至少具有相应的 `task.read`、`trigger.read`、`run.read` 或 `approval.read`;读取 Approval preview 和 Run 日志尾部还必须具有 `artifact.read`。调用方还需获得目标 Tool 的 exact `tool.call:<tool-name>` permission。
|
||||
- config、credential、SQLite 文件必须是当前 UID 持有的 `0600` regular file,目录必须是当前 UID 持有的私有目录;不得使用 symlink。
|
||||
- Owner Pepper keyring 必须存在并包含 credential 记录绑定的 active/retired exact key。
|
||||
|
||||
@@ -16,18 +16,19 @@
|
||||
|
||||
```json
|
||||
{
|
||||
"schema": "qinglong/local-mcp-server@v1",
|
||||
"schema": "qinglong/local-mcp-server@v2",
|
||||
"profile": "edge",
|
||||
"projectId": "default",
|
||||
"deploymentRoot": "/opt/qinglong3",
|
||||
"databasePath": "/opt/qinglong3/data/qinglong3.sqlite",
|
||||
"artifactRoot": "/opt/qinglong3/artifacts",
|
||||
"ownerPepperKeyringDirectory": "/opt/qinglong3/owner-pepper-keyring",
|
||||
"credentialFilePath": "/opt/qinglong3/mcp/credential.json",
|
||||
"busyTimeoutMs": 500
|
||||
}
|
||||
```
|
||||
|
||||
`profile` 只能是 `edge` 或 `standalone`。三个 authority path 必须互不相同且都是 `deploymentRoot` 的规范化后代;`busyTimeoutMs` 可省略,范围为 100–30000 ms。配置只允许上述字段。
|
||||
`profile` 只能是 `edge` 或 `standalone`。四个 authority path 必须互不相同且都是 `deploymentRoot` 的规范化后代;`artifactRoot` 必须与 Local application 写入 Run Attempt 日志的私有根完全一致。`busyTimeoutMs` 可省略,范围为 100–30000 ms。配置只允许上述字段。`@v1` 不包含显式 Artifact authority,升级后必须改为 `@v2`,不能由 MCP 猜测路径。
|
||||
|
||||
credential presentation 的形状为:
|
||||
|
||||
@@ -65,7 +66,7 @@ Client 必须保持 stdin/stdout 直连。stdout 专用于 MCP JSON-RPC,不能
|
||||
|
||||
## Tool 契约
|
||||
|
||||
当前只发布七个只读 Tool。
|
||||
当前只发布十二个只读 Tool。
|
||||
|
||||
`qinglong.task.list` 接受:
|
||||
|
||||
@@ -160,6 +161,21 @@ Project ID 来自私有 MCP 配置,不接受客户端指定。Task name/snapsh
|
||||
|
||||
成功响应只含 `found`,以及存在时的 Run ID、Task ID/revision、status、version、event sequence、priority、execution origin/owner 和生命周期时间。Task snapshot、command、input/output reference、credential、Principal、Policy reason、路径及内部错误不会返回。不存在和跨 Project 都返回 `{"found":false}`。
|
||||
|
||||
`qinglong.run.log.excerpt` 接受:
|
||||
|
||||
```json
|
||||
{
|
||||
"runId": "failed-run-id",
|
||||
"attemptId": "failed-attempt-id"
|
||||
}
|
||||
```
|
||||
|
||||
Project 与 profile 来自私有 MCP 配置。调用方不能指定 Artifact ID、路径、URI、offset、length、limit 或 cursor。Tool 固定读取日志尾部:Edge 为 4 KiB,Standalone 为 8 KiB;一次调用最多执行一次 1-byte 总长度探测和一次固定窗口读取,不分页。日志在两次读取间增长时返回 `tailComplete=false`,不能把片段解释为事务快照。
|
||||
|
||||
输出先归一 invalid UTF-8、终端控制、零宽与 bidi 字符,再按 `recognized_credentials_v1` 掩码 Authorization、常见 credential assignment、PEM private key、URL userinfo、JWT、云访问密钥和常见 opaque token。该规则不是通用秘密扫描器,因此输出始终声明 `residualSensitivity=potentially_sensitive`。内容无条件标记为 `untrusted_execution_output`、`data_only_never_execute`、`actionAuthority=none`;Prompt 注入信号只作提示,日志文字不能授予 Tool、Shell 或网络权限。Artifact ID、文件路径和 continuation cursor 永不返回。
|
||||
|
||||
该 Tool 必须同时通过 exact `tool.call:qinglong.run.log.excerpt` 与 `artifact.read`,并遵循和其他 MCP Tool 相同的 authentication → Policy → durable audit → credential fence confirm 顺序。SQLite 仅执行 Project-scoped Run/Attempt 与 retention 点查;文件读取复用 Local application 的私有 Artifact range reader,不创建第二套日志格式或扫描目录。
|
||||
|
||||
`qinglong.run.events.list` 接受:
|
||||
|
||||
```json
|
||||
@@ -174,11 +190,11 @@ Project ID 来自私有 MCP 配置,不接受客户端指定。Task name/snapsh
|
||||
|
||||
事件 payload、event ID、dedupeKey、actorId、attemptId、stepRunId、Artifact/Log reference、命令和错误详情永不返回。需要下一页时使用响应中的 `nextAfterSequence`,不要自行猜测 sequence。
|
||||
|
||||
每次调用都会重新认证 credential,解析 exact Tool Definition,执行 Tool-specific permission 与对应的 `task.read`/`trigger.read`/`run.read`/`approval.read` Policy;Approval preview 额外要求 `artifact.read`。通过后先持久写 Security Audit,再确认 credential fence,最后才做 Project-scoped 有界读取。事件 Tool 只有在 point read 确认 Run 属于当前 Project 后才查询事件。撤销 credential/RoleBinding 后无需重启 MCP 进程;后续调用会失败关闭。
|
||||
每次调用都会重新认证 credential,解析 exact Tool Definition,执行 Tool-specific permission 与对应的 `task.read`/`trigger.read`/`run.read`/`approval.read` Policy;Approval preview 与 Run 日志尾部额外要求 `artifact.read`。通过后先持久写 Security Audit,再确认 credential fence,最后才做 Project-scoped 有界读取。事件 Tool 只有在 point read 确认 Run 属于当前 Project 后才查询事件。撤销 credential/RoleBinding 后无需重启 MCP 进程;后续调用会失败关闭。
|
||||
|
||||
## 资源档位
|
||||
|
||||
`edge-mcp`/`standalone-mcp` 是独立制品,不属于默认 application。MCP 单一消费者的 Task/Trigger/Run/Approval projection 位于 sidecar 自身的 `tool-projection` domain;默认 application 不加载这些文件。跨产品复用的 `run.get` projection、Profile-neutral Approval discovery/detail contract 和双方言 document-only source 保留在既有包内;完整 Tool Invocation Artifact 不进入 MCP projection。当前 Standalone 裁剪后闭包为 947 files、9,857,149 bytes、203 loaded modules,完整 import RSS 增量 40,632,320 bytes,硬门为 1,536 files、16 MiB、48 MiB。64 MiB 总内存设备不应启用;128 MiB 设备也应结合 application、内核页缓存和其他服务实测后决定。资源不足时保持 MCP 未安装/未启动,不影响 QingLong 调度。
|
||||
`edge-mcp`/`standalone-mcp` 是独立制品,不属于默认 application。MCP 单一消费者的 Task/Trigger/Run/Approval projection 位于 sidecar 自身的 `tool-projection` domain;默认 application 不加载这些文件。跨产品复用的 `run.get` projection、Profile-neutral Approval discovery/detail contract、Run 日志安全投影和双方言窄 source 保留在既有包内;完整 Tool Invocation Artifact 不进入 MCP projection。当前 Edge/Standalone MCP 裁剪后分别为 7,315,930/7,316,038 bytes、801 files、226 loaded modules,完整 import RSS 增量为 38,420,480/39,567,360 bytes,硬门为 1,536 files、16 MiB、48 MiB。闭包只包含 MCP、Owner authentication、SQLite、Runtime Core 与私有文件 authority,不包含 `local-execution`、`local-process` 或 `croner`。默认 Edge/Standalone 仍为 2,589,812/2,589,890 bytes、315 files、56 modules,证明未启用 MCP 的低配部署没有承担该增量。64 MiB 总内存设备不应启用;128 MiB 设备也应结合 application、内核页缓存和其他服务实测后决定。资源不足时保持 MCP 未安装/未启动,不影响 QingLong 调度。
|
||||
|
||||
可复核运行:
|
||||
|
||||
|
||||
@@ -181,11 +181,12 @@
|
||||
"consumers": [
|
||||
"@qinglong/local-api",
|
||||
"@qinglong/local-application",
|
||||
"@qinglong/local-execution",
|
||||
"@qinglong/local-mcp-server",
|
||||
"@qinglong/local-owner-cli",
|
||||
"@qinglong/local-owner-maintenance"
|
||||
],
|
||||
"rationale": "零生产依赖的私有 durable command-file 协议被 API、Application、MCP、Owner CLI、Maintenance 五个不同生命周期闭包复用;根层只保留公开入口,实现归入 protocol domain。"
|
||||
"rationale": "本机私有文件 authority 被 API、Application、Execution、MCP、Owner CLI、Maintenance 六个不同生命周期闭包复用;根层只保留公开入口,command JSON 与 Run log range 实现分别归入 protocol/ 与 artifact-read/。它只依赖 Runtime Core 的纯契约,不携带 SQLite、process、scheduler 或 network provider。"
|
||||
},
|
||||
{
|
||||
"path": "packages/ql3-local-execution",
|
||||
@@ -378,6 +379,7 @@
|
||||
"@qinglong/local-admin",
|
||||
"@qinglong/local-api",
|
||||
"@qinglong/local-application",
|
||||
"@qinglong/local-command-file",
|
||||
"@qinglong/local-execution",
|
||||
"@qinglong/local-mcp-server",
|
||||
"@qinglong/local-owner-cli",
|
||||
|
||||
Reference in New Issue
Block a user