@lqc123qwe/car-runtime 1.9.0 → 1.10.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 +17 -1
- package/dist/SHA256SUMS +1 -0
- package/dist/authz/authz.d.ts +44 -0
- package/dist/authz/authz.js +65 -0
- package/dist/car-runtime-1.10.0.tgz +0 -0
- package/dist/car-runtime-1.10.0.tgz.sig.bundle +1 -0
- package/dist/cli.d.ts +1 -0
- package/dist/cli.js +825 -0
- package/dist/dx/doctor.d.ts +62 -0
- package/dist/dx/doctor.js +127 -0
- package/dist/governance/dump.d.ts +47 -0
- package/dist/governance/dump.js +17 -0
- package/dist/host/facade.d.ts +13 -0
- package/dist/host/facade.js +154 -0
- package/dist/host/hostGateway.d.ts +117 -0
- package/dist/host/hostGateway.js +65 -0
- package/dist/host/mappings.d.ts +27 -0
- package/dist/host/mappings.js +52 -0
- package/dist/host/stdio.d.ts +14 -0
- package/dist/host/stdio.js +83 -0
- package/dist/kernel/context.d.ts +76 -0
- package/dist/kernel/context.js +203 -0
- package/dist/kernel/events.d.ts +37 -0
- package/dist/kernel/events.js +82 -0
- package/dist/load/config.d.ts +79 -0
- package/dist/load/config.js +285 -0
- package/dist/load/loader.d.ts +72 -0
- package/dist/load/loader.js +162 -0
- package/dist/load/registry.d.ts +44 -0
- package/dist/load/registry.js +58 -0
- package/dist/load/report.d.ts +98 -0
- package/dist/load/report.js +301 -0
- package/dist/load/sigGate.d.ts +22 -0
- package/dist/load/sigGate.js +68 -0
- package/dist/load/sign.d.ts +25 -0
- package/dist/load/sign.js +47 -0
- package/dist/load/verifier.d.ts +35 -0
- package/dist/load/verifier.js +56 -0
- package/dist/loop/goal.d.ts +31 -0
- package/dist/loop/goal.js +34 -0
- package/dist/loop/recover.d.ts +17 -0
- package/dist/loop/recover.js +39 -0
- package/dist/loop/stop.d.ts +79 -0
- package/dist/loop/stop.js +151 -0
- package/dist/mcp/gateway.d.ts +96 -0
- package/dist/mcp/gateway.js +69 -0
- package/dist/mcp/httpClient.d.ts +27 -0
- package/dist/mcp/httpClient.js +196 -0
- package/dist/mcp/stdioClient.d.ts +8 -0
- package/dist/mcp/stdioClient.js +73 -0
- package/dist/ptc/budget.d.ts +21 -0
- package/dist/ptc/budget.js +36 -0
- package/dist/ptc/erasable.d.ts +14 -0
- package/dist/ptc/erasable.js +27 -0
- package/dist/ptc/runCode.d.ts +65 -0
- package/dist/ptc/runCode.js +140 -0
- package/dist/ptc/schemaRender.d.ts +15 -0
- package/dist/ptc/schemaRender.js +90 -0
- package/dist/ptc/sdk.d.ts +27 -0
- package/dist/ptc/sdk.js +23 -0
- package/dist/ptc/worker-entry.d.ts +1 -0
- package/dist/ptc/worker-entry.js +71 -0
- package/dist/release-audit.jsonl +4 -0
- package/dist/runtime-core/chatStep.d.ts +40 -0
- package/dist/runtime-core/chatStep.js +104 -0
- package/dist/runtime-core/credentials.d.ts +49 -0
- package/dist/runtime-core/credentials.js +118 -0
- package/dist/runtime-core/errors.d.ts +30 -0
- package/dist/runtime-core/errors.js +36 -0
- package/dist/runtime-core/llm.d.ts +76 -0
- package/dist/runtime-core/llm.js +553 -0
- package/dist/runtime-core/redaction.d.ts +39 -0
- package/dist/runtime-core/redaction.js +79 -0
- package/dist/runtime-core/telemetry.d.ts +88 -0
- package/dist/runtime-core/telemetry.js +332 -0
- package/dist/runtime-core/tools.d.ts +15 -0
- package/dist/runtime-core/tools.js +12 -0
- package/dist/runtime-core/trace.d.ts +55 -0
- package/dist/runtime-core/trace.js +137 -0
- package/dist/runtime-core/types.d.ts +84 -0
- package/dist/runtime-core/types.js +13 -0
- package/dist/sandbox/sandbox.d.ts +68 -0
- package/dist/sandbox/sandbox.js +153 -0
- package/dist/sbom.json +263 -0
- package/dist/seam.d.ts +21 -0
- package/dist/seam.js +20 -0
- package/dist/security/secrets-baseline.d.ts +43 -0
- package/dist/security/secrets-baseline.js +176 -0
- package/dist/security/secrets.d.ts +45 -0
- package/dist/security/secrets.js +138 -0
- package/dist/session/export.d.ts +55 -0
- package/dist/session/export.js +81 -0
- package/dist/session/fork.d.ts +51 -0
- package/dist/session/fork.js +63 -0
- package/dist/session/format.d.ts +21 -0
- package/dist/session/format.js +49 -0
- package/dist/session/indexStore.d.ts +44 -0
- package/dist/session/indexStore.js +265 -0
- package/dist/session/log.d.ts +79 -0
- package/dist/session/log.js +157 -0
- package/dist/session/store.d.ts +9 -0
- package/dist/session/store.js +37 -0
- package/dist/telemetry/metrics.d.ts +25 -0
- package/dist/telemetry/metrics.js +26 -0
- package/package.json +17 -1
- package/src/seam.ts +21 -0
- package/.gitattributes +0 -11
- package/.github/workflows/ci.yml +0 -293
- package/.github/workflows/release.yml +0 -54
- package/adr/ADR-001.md +0 -4
- package/adr/ADR-002.md +0 -5
- package/adr/ADR-003.md +0 -35
- package/adr/host-onboarding.md +0 -68
- package/adr/mlps-audit-checklist.md +0 -41
- package/adr/win32-spike.md +0 -45
- package/docs/plugin-authoring.md +0 -82
- package/native/landlock-run/Makefile +0 -19
- package/native/landlock-run/landlock-run.c +0 -162
- package/scripts/contract-check.ts +0 -56
- package/scripts/invariant-n1.ts +0 -96
- package/scripts/package-check.ts +0 -29
- package/scripts/ptc-baseline/run-baseline.ts +0 -118
- package/scripts/release-artifacts.ts +0 -111
- package/scripts/release-pipeline.ts +0 -245
- package/scripts/secrets-baseline.ts +0 -33
- package/scripts/secrets-scan.ts +0 -56
- package/scripts/win32-ffi-debug.ts +0 -143
- package/scripts/win32-koffi-spike.ts +0 -537
- package/test/contract/eventmap.golden.json +0 -7
- package/test/fixtures/hello-plugin.ts +0 -5
- package/test/kernel.spec.ts +0 -136
- package/test/registry-e2e/run-e2e.ts +0 -213
- package/test/s11.spec.ts +0 -129
- package/test/s12.spec.ts +0 -135
- package/test/s13.spec.ts +0 -117
- package/test/s14.spec.ts +0 -117
- package/test/s15.spec.ts +0 -80
- package/test/s16.spec.ts +0 -133
- package/test/s17.spec.ts +0 -102
- package/test/s18.spec.ts +0 -81
- package/test/s19.spec.ts +0 -138
- package/test/s2.spec.ts +0 -245
- package/test/s20.spec.ts +0 -241
- package/test/s21.spec.ts +0 -231
- package/test/s22-m7-store-format.spec.ts +0 -135
- package/test/s23-m7-export-index.spec.ts +0 -189
- package/test/s24-signature-gate.spec.ts +0 -185
- package/test/s25-m8-runtime-core.spec.ts +0 -600
- package/test/s26-signature-closeout.spec.ts +0 -349
- package/test/s27-host-load-wiring.spec.ts +0 -134
- package/test/s28-session-index-followup.spec.ts +0 -236
- package/test/s29-otel-producer.spec.ts +0 -252
- package/test/s3.spec.ts +0 -179
- package/test/s30-release-artifacts.spec.ts +0 -127
- package/test/s31-real-model-wiring.spec.ts +0 -329
- package/test/s32-telemetry-mcp-ptc.spec.ts +0 -218
- package/test/s33-anthropic-adapter.spec.ts +0 -354
- package/test/s34-mcp-remote-transport.spec.ts +0 -250
- package/test/s35-config-ts-zod.spec.ts +0 -145
- package/test/s36-host-tool-surface.spec.ts +0 -250
- package/test/s37-projection-dedupe.spec.ts +0 -161
- package/test/s38-config-jiti.spec.ts +0 -116
- package/test/s39-otlp-span-semantics.spec.ts +0 -100
- package/test/s4.spec.ts +0 -169
- package/test/s40-metrics-cumulative.spec.ts +0 -67
- package/test/s41-mcp-serve-turn-span.spec.ts +0 -148
- package/test/s42-traceparent-propagation.spec.ts +0 -415
- package/test/s43-remote-http-traceparent.spec.ts +0 -262
- package/test/s5.spec.ts +0 -95
- package/test/s6.spec.ts +0 -169
- package/test/s7.spec.ts +0 -136
- package/test/s7b-baseline.spec.ts +0 -20
- package/test/s9.spec.ts +0 -89
- package/test/sandbox-escape/j17-orchestrate.sh +0 -30
- package/test/sandbox-escape/run-matrix.sh +0 -98
- package/tsconfig.json +0 -18
package/.github/workflows/ci.yml
DELETED
|
@@ -1,293 +0,0 @@
|
|
|
1
|
-
# CI 门禁矩阵(M2部署设计增补 §2.3 16 Job + M3部署设计增补 §2.2 增列 J-17/J-18 = 18 Job ≤ 20)
|
|
2
|
-
#
|
|
3
|
-
# 落地口径(2026-09-18,实施记录见 car-docs/10-内核v1/M3部署设计增补.md 追记):
|
|
4
|
-
# - 矩阵 Job 名对齐文档编号(j01-.../j02-...),required check = j05/j07/j17/j18(G-07 载体 + E-2 收编 + WSL2 对等层 + registry E2E);
|
|
5
|
-
# - 测试/逃逸 Job 禁止重试(M2 §2.4 纪律);仅打包 Job 允许维护者判定后 rerun;
|
|
6
|
-
# - 构建单源:landlock-run 仅在 j01 编译(linux-x64-gnu),j05/j17 消费 artifact 并校验 sha256,禁止平台内重编译(M3 §2.1.2);
|
|
7
|
-
# - J-06 escape-macos = 冻结态登记(M3 §2.4 纪律):macOS Seatbelt 仅 M2-S7 生成器实装,
|
|
8
|
-
# 实跑用例不存在——不设 Job,非 CI 项登记于本注释与文档追记,复核时点 = macOS 实装启动;
|
|
9
|
-
# darwin 逃逸回归的现状覆盖 = j03 全量单测(含 buildSeatbeltProfile 生成器断言);
|
|
10
|
-
# - J-16 release-merge = release.yml(tag 触发:SBOM/SHA256SUMS + npm publish --provenance);
|
|
11
|
-
# - typecheck 门禁范围 = src/ + scripts/(tsconfig include);test/ 为宽松 fixture 风格,
|
|
12
|
-
# 由 node --experimental-transform-types 运行时承载(erasable-TS,类型剥离语义)——显式登记,非遗漏。
|
|
13
|
-
name: ci
|
|
14
|
-
on: [push, pull_request]
|
|
15
|
-
|
|
16
|
-
# CodeQL SARIF 上传需要 security-events: write(run 35312565781 首跑 j01 analyze 403 教训)
|
|
17
|
-
permissions:
|
|
18
|
-
contents: read
|
|
19
|
-
security-events: write
|
|
20
|
-
|
|
21
|
-
jobs:
|
|
22
|
-
# ── J-01 lint-scan-build:typecheck + CodeQL + 依赖审计 + 密钥扫描 + landlock-run 单点编译 ──
|
|
23
|
-
j01-lint-scan-build:
|
|
24
|
-
runs-on: ubuntu-24.04
|
|
25
|
-
timeout-minutes: 15
|
|
26
|
-
steps:
|
|
27
|
-
- uses: actions/checkout@v4
|
|
28
|
-
- uses: actions/setup-node@v4
|
|
29
|
-
with: { node-version: '22.19' }
|
|
30
|
-
- name: cache(键 = 源码哈希 + 工具链 + 三元组,M3 §2.1.2)
|
|
31
|
-
uses: actions/cache@v4
|
|
32
|
-
with:
|
|
33
|
-
path: native/landlock-run/landlock-run
|
|
34
|
-
key: landlock-run-${{ hashFiles('native/landlock-run/**') }}-gcc-${{ runner.os }}-linux-x64-gnu
|
|
35
|
-
- run: npm install
|
|
36
|
-
- name: typecheck(strict,src+scripts 生产面)
|
|
37
|
-
run: npx -y -p typescript tsc --noEmit -p tsconfig.json
|
|
38
|
-
- name: CodeQL(M2 §2.3 J-01 静态分析面)
|
|
39
|
-
uses: github/codeql-action/init@v3
|
|
40
|
-
with: { languages: javascript-typescript }
|
|
41
|
-
- uses: github/codeql-action/analyze@v3
|
|
42
|
-
- name: 依赖审计(npm audit,lockfile 口径;非阻塞登记——升级为阻塞需评审)
|
|
43
|
-
run: npm audit --omit=dev --audit-level=high || echo "::warning::npm audit findings — 见日志"
|
|
44
|
-
- name: 密钥扫描(仓库级 fail-closed)
|
|
45
|
-
run: node --experimental-transform-types scripts/secrets-scan.ts
|
|
46
|
-
- name: landlock-run 单点编译(M3 §2.1.2 构建单源)
|
|
47
|
-
run: |
|
|
48
|
-
make -C native/landlock-run
|
|
49
|
-
sha256sum native/landlock-run/landlock-run > native/landlock-run/landlock-run.sha256
|
|
50
|
-
- uses: actions/upload-artifact@v4
|
|
51
|
-
with:
|
|
52
|
-
name: landlock-run-linux-x64-gnu
|
|
53
|
-
path: |
|
|
54
|
-
native/landlock-run/landlock-run
|
|
55
|
-
native/landlock-run/landlock-run.sha256
|
|
56
|
-
retention-days: 7
|
|
57
|
-
|
|
58
|
-
# ── J-02/J-03/J-04 三平台全量单测(179/179 基线不回退)+ G-06 Node 一致性 ──
|
|
59
|
-
# M7 能力真跑:sqlite(22.5+ 带 flag)flag 直挂测试命令行——不能走 NODE_OPTIONS(白名单拒绝,run 35451413014 实证;
|
|
60
|
-
# 且 job 级 env 会炸 actions 自身 node24)。zstd 为 22.15+ 原生内置(无 flag,Stability 1 实验标记),能力探测自动在场
|
|
61
|
-
j02-test-linux:
|
|
62
|
-
needs: [j01-lint-scan-build]
|
|
63
|
-
runs-on: ubuntu-24.04
|
|
64
|
-
timeout-minutes: 15
|
|
65
|
-
steps:
|
|
66
|
-
- uses: actions/checkout@v4
|
|
67
|
-
- uses: actions/setup-node@v4
|
|
68
|
-
with: { node-version: '22.19' }
|
|
69
|
-
# 1.5 起 zod 为常规运行时依赖(D-22)——CLI/doctor 传递加载,测试 job 需 node_modules
|
|
70
|
-
- run: npm install
|
|
71
|
-
- run: node -p "'G-06 node ' + process.version"
|
|
72
|
-
- run: node --experimental-sqlite --experimental-transform-types --test "test/*.spec.ts"
|
|
73
|
-
|
|
74
|
-
j03-test-macos:
|
|
75
|
-
needs: [j01-lint-scan-build]
|
|
76
|
-
runs-on: macos-14
|
|
77
|
-
timeout-minutes: 25
|
|
78
|
-
steps:
|
|
79
|
-
- uses: actions/checkout@v4
|
|
80
|
-
- uses: actions/setup-node@v4
|
|
81
|
-
with: { node-version: '22.19' }
|
|
82
|
-
# 1.5 起 zod 为常规运行时依赖(D-22)——CLI/doctor 传递加载,测试 job 需 node_modules
|
|
83
|
-
- run: npm install
|
|
84
|
-
- run: node -p "'G-06 node ' + process.version"
|
|
85
|
-
- run: node --experimental-sqlite --experimental-transform-types --test "test/*.spec.ts"
|
|
86
|
-
|
|
87
|
-
j04-test-windows:
|
|
88
|
-
needs: [j01-lint-scan-build]
|
|
89
|
-
runs-on: windows-2022
|
|
90
|
-
timeout-minutes: 25
|
|
91
|
-
steps:
|
|
92
|
-
- uses: actions/checkout@v4
|
|
93
|
-
- uses: actions/setup-node@v4
|
|
94
|
-
with: { node-version: '22.19' }
|
|
95
|
-
# 1.5 起 zod 为常规运行时依赖(D-22)——CLI/doctor 传递加载,测试 job 需 node_modules
|
|
96
|
-
- run: npm install
|
|
97
|
-
- run: node -p "'G-06 node ' + process.version"
|
|
98
|
-
- run: node --experimental-sqlite --experimental-transform-types --test "test/*.spec.ts"
|
|
99
|
-
|
|
100
|
-
# ── J-05 escape-linux(required check,G-07 转 PASS 载体):20 条 POC-4 移植用例常驻 + 审计 JSONL 常驻上传 ──
|
|
101
|
-
j05-escape-linux:
|
|
102
|
-
needs: [j02-test-linux] # 传递依赖 j01(消费其 landlock-run 产物,禁止重编译)
|
|
103
|
-
runs-on: ubuntu-24.04
|
|
104
|
-
timeout-minutes: 30
|
|
105
|
-
steps:
|
|
106
|
-
- uses: actions/checkout@v4
|
|
107
|
-
- uses: actions/download-artifact@v4
|
|
108
|
-
with: { name: landlock-run-linux-x64-gnu, path: dist/ci-artifacts }
|
|
109
|
-
- name: 恢复可执行位(artifact zip 不保留 +x;run 35313717410 教训)
|
|
110
|
-
run: chmod +x dist/ci-artifacts/landlock-run
|
|
111
|
-
- name: 产物指纹校验(防制品传递错位,对齐 M2 §3.5)
|
|
112
|
-
run: |
|
|
113
|
-
EXPECTED="$(cut -d' ' -f1 dist/ci-artifacts/landlock-run.sha256)"
|
|
114
|
-
ACTUAL="$(sha256sum dist/ci-artifacts/landlock-run | cut -d' ' -f1)"
|
|
115
|
-
echo "expected=$EXPECTED actual=$ACTUAL"
|
|
116
|
-
[ "$EXPECTED" = "$ACTUAL" ] || { echo "::error::landlock-run artifact sha256 mismatch"; exit 1; }
|
|
117
|
-
- name: 环境自检 + 逃逸矩阵实跑(20 条 × 5 类;exit 2 = 环境失败,§2.1.3)
|
|
118
|
-
run: bash test/sandbox-escape/run-matrix.sh "$(pwd)/dist/ci-artifacts/landlock-run" "$(pwd)/dist/ci-audit"
|
|
119
|
-
- name: 审计 JSONL 常驻上传(无论成败,§2.1.1 步骤 6)
|
|
120
|
-
if: always()
|
|
121
|
-
uses: actions/upload-artifact@v4
|
|
122
|
-
with: { name: j05-escape-audit, path: dist/ci-audit/escape-audit.jsonl, retention-days: 90 }
|
|
123
|
-
|
|
124
|
-
# ── J-07 escape-windows(required check,E-2 实装态收编):受限 token + Job Object 四判据 ──
|
|
125
|
-
j07-escape-windows:
|
|
126
|
-
needs: [j04-test-windows]
|
|
127
|
-
runs-on: windows-2022
|
|
128
|
-
timeout-minutes: 30
|
|
129
|
-
steps:
|
|
130
|
-
- uses: actions/checkout@v4
|
|
131
|
-
- uses: actions/setup-node@v4
|
|
132
|
-
with: { node-version: '22.19' }
|
|
133
|
-
- run: npm install
|
|
134
|
-
- name: FFI debug matrix(diagnostic,S26 0xC0000142 排查)
|
|
135
|
-
run: node --experimental-transform-types scripts/win32-ffi-debug.ts
|
|
136
|
-
- name: 四判据沙箱 spike(FAIL 即非零退出,脚本退出码直连)
|
|
137
|
-
run: node --experimental-transform-types scripts/win32-koffi-spike.ts
|
|
138
|
-
|
|
139
|
-
# ── J-08 invariant-n1:N1 不变量 100 回放 fixtures(含篡改检出防假绿自检) ──
|
|
140
|
-
j08-invariant-n1:
|
|
141
|
-
needs: [j02-test-linux]
|
|
142
|
-
runs-on: ubuntu-24.04
|
|
143
|
-
timeout-minutes: 15
|
|
144
|
-
steps:
|
|
145
|
-
- uses: actions/checkout@v4
|
|
146
|
-
- uses: actions/setup-node@v4
|
|
147
|
-
with: { node-version: '22.19' }
|
|
148
|
-
- run: node --experimental-transform-types scripts/invariant-n1.ts
|
|
149
|
-
- uses: actions/upload-artifact@v4
|
|
150
|
-
with: { name: j08-invariant-n1, path: dist/ci/invariant-n1.jsonl, retention-days: 90 }
|
|
151
|
-
|
|
152
|
-
# ── J-09 contract:SessionEventMap 快照只增不删 + 公共 API 兼容 ──
|
|
153
|
-
j09-contract:
|
|
154
|
-
needs: [j02-test-linux]
|
|
155
|
-
runs-on: ubuntu-24.04
|
|
156
|
-
timeout-minutes: 10
|
|
157
|
-
steps:
|
|
158
|
-
- uses: actions/checkout@v4
|
|
159
|
-
- uses: actions/setup-node@v4
|
|
160
|
-
with: { node-version: '22.19' }
|
|
161
|
-
- run: node --experimental-transform-types scripts/contract-check.ts
|
|
162
|
-
|
|
163
|
-
# ── J-10/J-11/J-12 dx-smoke:QS-05 首跑通冒烟(doctor + reload 五阶段报告) ──
|
|
164
|
-
j10-dx-smoke-linux:
|
|
165
|
-
needs: [j02-test-linux]
|
|
166
|
-
runs-on: ubuntu-24.04
|
|
167
|
-
timeout-minutes: 15
|
|
168
|
-
steps:
|
|
169
|
-
- uses: actions/checkout@v4
|
|
170
|
-
- uses: actions/setup-node@v4
|
|
171
|
-
with: { node-version: '22.19' }
|
|
172
|
-
# 1.5 起 zod 为常规运行时依赖(D-22)——cli.ts 传递加载,dx-smoke 需 node_modules
|
|
173
|
-
- run: npm install
|
|
174
|
-
- run: node --experimental-transform-types src/cli.ts doctor
|
|
175
|
-
- run: node --experimental-transform-types src/cli.ts reload test/fixtures/hello-plugin.ts
|
|
176
|
-
|
|
177
|
-
j11-dx-smoke-macos:
|
|
178
|
-
needs: [j03-test-macos]
|
|
179
|
-
runs-on: macos-14
|
|
180
|
-
timeout-minutes: 20
|
|
181
|
-
steps:
|
|
182
|
-
- uses: actions/checkout@v4
|
|
183
|
-
- uses: actions/setup-node@v4
|
|
184
|
-
with: { node-version: '22.19' }
|
|
185
|
-
# 1.5 起 zod 为常规运行时依赖(D-22)——cli.ts 传递加载,dx-smoke 需 node_modules
|
|
186
|
-
- run: npm install
|
|
187
|
-
- run: node --experimental-transform-types src/cli.ts doctor
|
|
188
|
-
- run: node --experimental-transform-types src/cli.ts reload test/fixtures/hello-plugin.ts
|
|
189
|
-
|
|
190
|
-
j12-dx-smoke-windows:
|
|
191
|
-
needs: [j04-test-windows]
|
|
192
|
-
runs-on: windows-2022
|
|
193
|
-
timeout-minutes: 20
|
|
194
|
-
steps:
|
|
195
|
-
- uses: actions/checkout@v4
|
|
196
|
-
- uses: actions/setup-node@v4
|
|
197
|
-
with: { node-version: '22.19' }
|
|
198
|
-
# 1.5 起 zod 为常规运行时依赖(D-22)——cli.ts 传递加载,dx-smoke 需 node_modules
|
|
199
|
-
- run: npm install
|
|
200
|
-
- run: node --experimental-transform-types src/cli.ts doctor
|
|
201
|
-
- run: node --experimental-transform-types src/cli.ts reload test/fixtures/hello-plugin.ts
|
|
202
|
-
|
|
203
|
-
# ── J-13/J-14/J-15 package-*:npm pack 干跑 + files 白名单/包名断言(唯一允许 rerun 的 Job 组) ──
|
|
204
|
-
j13-package-linux:
|
|
205
|
-
needs: [j05-escape-linux, j10-dx-smoke-linux]
|
|
206
|
-
runs-on: ubuntu-24.04
|
|
207
|
-
timeout-minutes: 20
|
|
208
|
-
steps:
|
|
209
|
-
- uses: actions/checkout@v4
|
|
210
|
-
- uses: actions/setup-node@v4
|
|
211
|
-
with: { node-version: '22.19' }
|
|
212
|
-
- run: node --experimental-transform-types scripts/package-check.ts
|
|
213
|
-
|
|
214
|
-
# 依赖调整登记:J-14 原依赖 J-06(冻结态未设 Job)→ 回退 J-03(darwin 测试面),见文件头 J-06 冻结登记
|
|
215
|
-
j14-package-macos:
|
|
216
|
-
needs: [j03-test-macos, j11-dx-smoke-macos]
|
|
217
|
-
runs-on: macos-14
|
|
218
|
-
timeout-minutes: 25
|
|
219
|
-
steps:
|
|
220
|
-
- uses: actions/checkout@v4
|
|
221
|
-
- uses: actions/setup-node@v4
|
|
222
|
-
with: { node-version: '22.19' }
|
|
223
|
-
- run: node --experimental-transform-types scripts/package-check.ts
|
|
224
|
-
|
|
225
|
-
j15-package-windows:
|
|
226
|
-
needs: [j07-escape-windows, j12-dx-smoke-windows]
|
|
227
|
-
runs-on: windows-2022
|
|
228
|
-
timeout-minutes: 25
|
|
229
|
-
steps:
|
|
230
|
-
- uses: actions/checkout@v4
|
|
231
|
-
- uses: actions/setup-node@v4
|
|
232
|
-
with: { node-version: '22.19' }
|
|
233
|
-
- run: node --experimental-transform-types scripts/package-check.ts
|
|
234
|
-
|
|
235
|
-
# ── J-17 escape-wsl2(required check,M3 新增):§2.1.1 六步编排,企业代表拓扑对等回归 ──
|
|
236
|
-
j17-escape-wsl2:
|
|
237
|
-
needs: [j02-test-linux]
|
|
238
|
-
runs-on: windows-2022
|
|
239
|
-
timeout-minutes: 40
|
|
240
|
-
steps:
|
|
241
|
-
- uses: actions/checkout@v4
|
|
242
|
-
- uses: actions/download-artifact@v4
|
|
243
|
-
with: { name: landlock-run-linux-x64-gnu, path: dist/ci-artifacts }
|
|
244
|
-
- name: 步骤 1 · WSL 启用自检(内核缺失时 wsl --update 自愈;run 35312957963 教训)
|
|
245
|
-
shell: pwsh
|
|
246
|
-
run: |
|
|
247
|
-
wsl --status; if ($LASTEXITCODE -ne 0) { wsl --update --web-download }
|
|
248
|
-
# run 35315242805 教训:默认版本可能是 1(无内核翻译层,Landlock 不可用)——强制 WSL2
|
|
249
|
-
wsl --set-default-version 2; if ($LASTEXITCODE -ne 0) { wsl --update; wsl --set-default-version 2 }
|
|
250
|
-
wsl --status
|
|
251
|
-
- name: 步骤 2 · Ubuntu 24.04 发行版导入(web-download 绕 Store;失败 = 环境失败 §2.1.3)
|
|
252
|
-
shell: pwsh
|
|
253
|
-
run: |
|
|
254
|
-
wsl --install -d Ubuntu-24.04 --no-launch --web-download
|
|
255
|
-
wsl --set-version Ubuntu-24.04 2
|
|
256
|
-
wsl -d Ubuntu-24.04 -e uname -r
|
|
257
|
-
- name: 步骤 3-5 · 环境自检 + 工作区迁移 ext4 + 20 条实跑
|
|
258
|
-
shell: bash
|
|
259
|
-
run: |
|
|
260
|
-
set -e
|
|
261
|
-
# run 35313717410 教训:runner 的 D 盘不一定被 automount(/mnt/d 不存在)——
|
|
262
|
-
# 全部经 tar 流直灌 ext4(~/car-import),绕开 /mnt 依赖;编排器从该路径自取 native/test
|
|
263
|
-
wsl -d Ubuntu-24.04 -e bash -c "rm -rf ~/car-import && mkdir -p ~/car-import"
|
|
264
|
-
tar -cf - native test dist/ci-artifacts | wsl -d Ubuntu-24.04 -e bash -c "tar -xf - -C ~/car-import && chmod +x ~/car-import/dist/ci-artifacts/landlock-run"
|
|
265
|
-
# 防御性去 CR:runner checkout 可能仍产 CRLF(\r 会让 set -euo pipefail 直接 invalid option)
|
|
266
|
-
wsl -d Ubuntu-24.04 -e bash -c "sed -i 's/\r\$//' ~/car-import/test/sandbox-escape/*.sh"
|
|
267
|
-
wsl -d Ubuntu-24.04 -e bash -c "bash ~/car-import/test/sandbox-escape/j17-orchestrate.sh ~/car-import ~/car-import/dist/ci-artifacts/landlock-run"
|
|
268
|
-
- name: 步骤 6 · 审计 JSONL 回传(无论成败)
|
|
269
|
-
if: always()
|
|
270
|
-
shell: bash
|
|
271
|
-
run: |
|
|
272
|
-
REPO_WSL="/mnt/$(pwd | sed 's#^/##')"
|
|
273
|
-
mkdir -p dist/ci-audit
|
|
274
|
-
wsl -d Ubuntu-24.04 -e bash -c "cp ~/car-matrix/audit/escape-audit.jsonl '$REPO_WSL/dist/ci-audit/escape-audit.jsonl' 2>/dev/null || true" || true
|
|
275
|
-
# /mnt 不可用时兜底:cat 直出(run 35313717410 教训)
|
|
276
|
-
[ -s dist/ci-audit/escape-audit.jsonl ] || wsl -d Ubuntu-24.04 -e bash -c "cat ~/car-matrix/audit/escape-audit.jsonl" > dist/ci-audit/escape-audit.jsonl 2>/dev/null || true
|
|
277
|
-
- uses: actions/upload-artifact@v4
|
|
278
|
-
if: always()
|
|
279
|
-
with: { name: j17-escape-audit, path: dist/ci-audit/escape-audit.jsonl, retention-days: 90 }
|
|
280
|
-
|
|
281
|
-
# ── J-18 registry-e2e(required check,M3 新增):Verdaccio 实跑 + §3.6 六用例组 ──
|
|
282
|
-
j18-registry-e2e:
|
|
283
|
-
needs: [j02-test-linux]
|
|
284
|
-
runs-on: ubuntu-24.04
|
|
285
|
-
timeout-minutes: 20
|
|
286
|
-
steps:
|
|
287
|
-
- uses: actions/checkout@v4
|
|
288
|
-
- uses: actions/setup-node@v4
|
|
289
|
-
with: { node-version: '22.19' }
|
|
290
|
-
- run: node --experimental-transform-types test/registry-e2e/run-e2e.ts
|
|
291
|
-
- uses: actions/upload-artifact@v4
|
|
292
|
-
if: always()
|
|
293
|
-
with: { name: j18-registry-e2e, path: dist/ci/registry-e2e.jsonl, retention-days: 90 }
|
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
name: release
|
|
2
|
-
on:
|
|
3
|
-
workflow_dispatch:
|
|
4
|
-
release:
|
|
5
|
-
types: [published]
|
|
6
|
-
permissions:
|
|
7
|
-
# 1.3-S3(W4-2):contents 提升为 write——gh release upload 资产上传需要;
|
|
8
|
-
# id-token: write 为 keyless cosign(OIDC + Rekor)凭据源(D-15 正式轨)
|
|
9
|
-
contents: write
|
|
10
|
-
id-token: write
|
|
11
|
-
# J-16 release-merge(M2 §2.3)+ 1.3 W4 全自动化:
|
|
12
|
-
# 构建制品(release-artifacts.ts——与本地 release-pipeline.ts 单一事实源,R-3)
|
|
13
|
-
# → cosign keyless 签名 tgz(OIDC + Rekor 透明日志;私钥不出本地,D-15 正式轨)
|
|
14
|
-
# → 上传五件套到 Release(gh release upload --clobber;消除 1.0 错挂/1.2 树漂移的人工拖拽面)
|
|
15
|
-
# → npm publish --provenance(原步不动)。
|
|
16
|
-
# 步骤序红线:upload 先于 publish——上传失败 job 即红,publish 不带病出街。
|
|
17
|
-
# 回退预案(R-1,演练预案非静默):keyless 签名/上传失败时可临时人工拖拽资产,事后修复重发。
|
|
18
|
-
jobs:
|
|
19
|
-
j16-release-merge:
|
|
20
|
-
runs-on: ubuntu-latest
|
|
21
|
-
steps:
|
|
22
|
-
- uses: actions/checkout@v4
|
|
23
|
-
- uses: actions/setup-node@v4
|
|
24
|
-
with:
|
|
25
|
-
node-version: 22
|
|
26
|
-
registry-url: https://registry.npmjs.org/
|
|
27
|
-
- name: Build release artifacts (single-source with local pipeline, W4-1)
|
|
28
|
-
run: node --experimental-transform-types scripts/release-artifacts.ts
|
|
29
|
-
- name: Install cosign (pinned, R-4)
|
|
30
|
-
uses: sigstore/cosign-installer@v3.7.0
|
|
31
|
-
- name: Keyless sign tarball (OIDC + Rekor, D-15 formal track)
|
|
32
|
-
run: |
|
|
33
|
-
VERSION=$(node -p "require('./package.json').version")
|
|
34
|
-
cosign sign-blob --yes --bundle "dist/car-runtime-${VERSION}.tgz.sig.bundle" "dist/car-runtime-${VERSION}.tgz"
|
|
35
|
-
echo "{\"stage\":\"cosign-keyless\",\"detail\":\"signed car-runtime-${VERSION}.tgz (keyless OIDC + Rekor)\",\"ts\":$(date +%s%3N)}" >> dist/release-audit.jsonl
|
|
36
|
-
- name: "Upload release assets (W4 - zero manual drag-and-drop)"
|
|
37
|
-
env:
|
|
38
|
-
GH_TOKEN: ${{ github.token }}
|
|
39
|
-
run: |
|
|
40
|
-
VERSION=$(node -p "require('./package.json').version")
|
|
41
|
-
for f in dist/car-runtime-${VERSION}.tgz dist/car-runtime-${VERSION}.tgz.sig.bundle dist/SHA256SUMS dist/sbom.json dist/release-audit.jsonl; do
|
|
42
|
-
# 上传目标 = 包版本号(D-14 裸 tag 形态:release tag == version);dispatch 触发亦可用
|
|
43
|
-
gh release upload "$VERSION" "$f" --clobber
|
|
44
|
-
done
|
|
45
|
-
- name: Publish to npm with provenance
|
|
46
|
-
# dist-tag 按版本形态动态选择:prerelease(如 1.0.0-rc.1)→ rc;稳定版(1.0.0)→ latest。
|
|
47
|
-
# M5 §1.1 口径:1.0 发布时 latest→1.0.0,rc tag 保留指向 rc.1 不回指——稳定版禁止 --tag rc。
|
|
48
|
-
run: |
|
|
49
|
-
VERSION=$(node -p "require('./package.json').version")
|
|
50
|
-
if echo "$VERSION" | grep -q -- '-'; then TAG=rc; else TAG=latest; fi
|
|
51
|
-
echo "version=$VERSION -> dist-tag=$TAG"
|
|
52
|
-
npm publish --provenance --tag "$TAG"
|
|
53
|
-
env:
|
|
54
|
-
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
|
package/adr/ADR-001.md
DELETED
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
# ADR-001 · max-tokens 处置策略
|
|
2
|
-
状态: 已定稿(S2 实装)| 2026-09-02
|
|
3
|
-
决策: 默认 DSH 式解析前收口(finishReason=length 不解析工具调用,禁补全半截 JSON);TurnEndReason 保留至 turn/end(endReasonTrail);只读白名单工具可选 Pi 式补错重试(preset 显式开启);finishReason 为不可变透传字段,改写/吞没触发 AL-05。
|
|
4
|
-
证据: D5 §4 + SR-17(vLLM #53269 教训)+ POC-3 I4 断言(截断保留语义已验证)。
|
package/adr/ADR-002.md
DELETED
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
# ADR-002 · 卸载顺序双模式接口
|
|
2
|
-
状态: 已定稿 + S1 实装(strict-topo 默认)| 2026-09-04
|
|
3
|
-
决策: ctx.effect 双模式——strict-topo(Kahn 分层反转逐层排空,消费者先于提供者)/ concurrent(跨 fiber 并发,对照降级模式);fiber 内一律注册逆序。
|
|
4
|
-
证据: POC-1 spike(poc1-dispose-order.ts)实证屏障可行;dsh Fiber._unload 为 Promise.all 并发(fiber.ts:676),barrier 缺失——CAR 自研超越点。
|
|
5
|
-
S1 踩坑记录: Kahn 分层方向为 provider→consumer,teardown 必须 reverse 层序(首版实现即踩,测试捕获)。
|
package/adr/ADR-003.md
DELETED
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
# ADR-003 · 插件签名信任根与 enforce 策略(D-1/D-2 裁决实装)
|
|
2
|
-
|
|
3
|
-
状态: 已定稿(S5 定稿文档;S6 验签器实装)| 2026-09-04
|
|
4
|
-
|
|
5
|
-
## 决策(D-1)
|
|
6
|
-
|
|
7
|
-
**双轨签名**:Sigstore keyless 主轨(与发布工程 G-08 cosign / G-09 npm provenance 同源,不另起炉灶)+ minisign 式静态密钥离线轨(解决 R-6 内网/离线验证失败)。
|
|
8
|
-
|
|
9
|
-
信任锚三层:
|
|
10
|
-
1. 内置根:CAR 项目公钥编译期 pinning;
|
|
11
|
-
2. Sigstore 链:离线 bundle 验证,禁止运行时拉网(对齐部署侧禁运行时网络下载纪律);
|
|
12
|
-
3. 企业自管替换点:`trustRoot` 配置可替换信任锚,替换动作写审计日志。
|
|
13
|
-
|
|
14
|
-
## 决策(D-2)
|
|
15
|
-
|
|
16
|
-
**enforce 时点**:S6 warn 上线(签名缺失 = 告警放行 + manifestHash 指纹兜底)→ S8 末统计 unsigned 占比与误伤率 → S10 发布预演前切 enforce(缺失 = 硬拒绝)。
|
|
17
|
-
|
|
18
|
-
fail-closed 三情形分级:
|
|
19
|
-
| 情形 | M2 行为 |
|
|
20
|
-
| --- | --- |
|
|
21
|
-
| 签名校验失败(有签名但不对) | 硬拒绝,**不可配置放行** |
|
|
22
|
-
| 签名缺失 | S6-S9 warn + 指纹兜底 → S10 enforce 拒绝 |
|
|
23
|
-
| Rekor 透明日志不可达 | 回退静态轨;双轨皆败按缺失处理 |
|
|
24
|
-
|
|
25
|
-
存量已装插件不回溯强制(manifestHash 指纹持续兜底,M3 企业策略项)。Git 直载维持决议⑦告警语义,不纳入 enforce。
|
|
26
|
-
|
|
27
|
-
## 依据
|
|
28
|
-
|
|
29
|
-
- 决议⑦:分发 = 目录+签名起步(Shai-Hulud/ClawHub 供应链教训,SR-08/09/14);
|
|
30
|
-
- 部署侧 G-08/G-09 同源复用(M2部署设计增补 T-4);
|
|
31
|
-
- M1 已有 manifestHash 指纹兜底(loader.ts)。
|
|
32
|
-
|
|
33
|
-
## 回退方案
|
|
34
|
-
|
|
35
|
-
Sigstore 生态不可用(如 Rekor 长期故障)→ 静态轨独立承载;企业场景 → trustRoot 替换为自管根。验签失败处置遵循安全设计 §4.4 装载前三段。
|
package/adr/host-onboarding.md
DELETED
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
# E-6 宿主实连接入指南(M4-S18)
|
|
2
|
-
|
|
3
|
-
> CAR-as-MCP-Server:宿主(Claude Code / Codex)把 CAR 当作一个 MCP server 接入——
|
|
4
|
-
> 9 tool 会话级能力面(session_start/turn/stop/status/replay/verify/export + tool_list/tool_call)。
|
|
5
|
-
> 传输 = stdio JSON-RPC(换行分隔),与 M3 契约测试同一接入面(双宿主等价由契约锁定)。
|
|
6
|
-
|
|
7
|
-
## Claude Code 接入
|
|
8
|
-
|
|
9
|
-
项目根目录 `.mcp.json`(或 `~/.claude.json` 全局):
|
|
10
|
-
|
|
11
|
-
```json
|
|
12
|
-
{
|
|
13
|
-
"mcpServers": {
|
|
14
|
-
"car": {
|
|
15
|
-
"command": "node",
|
|
16
|
-
"args": [
|
|
17
|
-
"--experimental-transform-types",
|
|
18
|
-
"{CAR_ROOT}/src/cli.ts",
|
|
19
|
-
"mcp-serve",
|
|
20
|
-
"--host", "claude-code"
|
|
21
|
-
]
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
```
|
|
26
|
-
|
|
27
|
-
## Codex 接入
|
|
28
|
-
|
|
29
|
-
`~/.codex/config.toml`:
|
|
30
|
-
|
|
31
|
-
```toml
|
|
32
|
-
[mcp_servers.car]
|
|
33
|
-
command = "node"
|
|
34
|
-
args = [
|
|
35
|
-
"--experimental-transform-types",
|
|
36
|
-
"{CAR_ROOT}/src/cli.ts",
|
|
37
|
-
"mcp-serve",
|
|
38
|
-
"--host", "codex",
|
|
39
|
-
]
|
|
40
|
-
```
|
|
41
|
-
|
|
42
|
-
## 验证步骤(E-6 五类契约手工清单)
|
|
43
|
-
|
|
44
|
-
1. `car doctor` → 确认 Node ≥22.19 与沙箱能力状态;
|
|
45
|
-
2. 宿主内触发 MCP 工具列表刷新 → 应看到 9 个 `session_*` / `tool_*` 工具;
|
|
46
|
-
3. 调 `session_start` → 返回 `SH-` 前缀会话 id(跨宿主隔离:两个宿主各自 start 得到不同 id);
|
|
47
|
-
4. `session_turn` 提交一批宿主事件 → 返回 `{reason, steps}`;未知宿主事件应无报错(hostRaw 降级留痕,非失败);
|
|
48
|
-
5. `session_verify` → `ok:true`(哈希链完整);`session_replay` → 消息流与宿主侧对话语义一致;
|
|
49
|
-
6. 结束会话后检查 stderr 快照行:`zeroContent=true`(采集窗口零内容红线)。
|
|
50
|
-
|
|
51
|
-
## 采集窗口(D-2 数据窗口 S18–S20)
|
|
52
|
-
|
|
53
|
-
- 每次会话结束(stdin 关闭)向 **stderr** 输出一行快照(stdout 为协议通道不可污染);
|
|
54
|
-
- 快照仅含 3 个零内容 Counter(load_total / unsigned_confirmed / registry_decision)——
|
|
55
|
-
`assertZeroContent` 自检内建;
|
|
56
|
-
- 登记表兜底:企业未开启遥测时,人工抄录快照行即可满足 S20 enforce 决策的数据输入(双通道设计)。
|
|
57
|
-
|
|
58
|
-
## E-6 实连执行记录(2026-09-05 · 本机冒烟 ✅)
|
|
59
|
-
|
|
60
|
-
- 协议握手已实装(initialize / notifications/initialized——MCP 协议兼容,冒烟前置补齐);
|
|
61
|
-
- 本机端到端冒烟(真实 spawn 进程,配置同款命令行):initialize serverInfo=car-runtime 0.3.0 → tools/list 9 → session_start=SH-fa5c8838469ba4599032d35b → session_turn completed → session_verify ok → stderr 快照 zeroContent=true;
|
|
62
|
-
- 宿主侧配置已写入:Claude Code 项目级 `D:/WorkBuddy/agent/.mcp.json` + Codex `~/.codex/config.toml` 追加段(command 用 Node 22.22.2 绝对路径——系统 node20 不支持 --experimental-transform-types);
|
|
63
|
-
- 待真实宿主 GUI 会话验证(启动 Claude Code 于本工作区 / codex 会话内确认 9 tool 出现)。
|
|
64
|
-
|
|
65
|
-
## 已知边界
|
|
66
|
-
|
|
67
|
-
- 会话状态为进程内存态(进程退出即失);跨进程持久化走 `session_export` 取证包 → S19 评估文件落盘增强;
|
|
68
|
-
- `tool_list`/`tool_call`(宿主工具面透传)在试点期返回占位(S19 接线宿主侧工具注册)。
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
# 等保 2.0 三级安全审计逐条核验清单(D-4 裁决落地 · S9)
|
|
2
|
-
|
|
3
|
-
> **核验方法**:GB/T 22239-2019《信息安全技术 网络安全等级保护基本要求》8.1.4.3 安全审计(三级,安全计算环境)
|
|
4
|
-
> 条目原文经**三个独立公开来源交叉证实**(腾讯云等保解读 cloud.tencent.com.cn/document/practice/664/71724、
|
|
5
|
-
> 深信服等保三级配置指导手册、长沙望城区政府采购需求文件 changs.ccgp-hunan.gov.cn,2026-09-04 检索)——
|
|
6
|
-
> 置信度由 v1.1 的「常识归纳」升级为「条目级已核验(公开文本交叉证实)」。正式测评仍以测评机构现场判定为准。
|
|
7
|
-
|
|
8
|
-
## 逐条核验(8.1.4.3 a–d)
|
|
9
|
-
|
|
10
|
-
| 条目 | 原文(三级) | CAR 承载 | 判定 |
|
|
11
|
-
|------|------------|---------|------|
|
|
12
|
-
| a) | 应启用安全审计功能,审计覆盖到每个用户,对重要的用户行为和重要安全事件进行审计 | 会话日志全量事件覆盖四类 actor(user/model/plugin/runtime);授权决策(authorization/*)、沙箱拒绝、降级事件、供应链事件全留痕;默认开启不可关闭(检测不可静默关闭,红线 §6.3) | ✅ 满足 |
|
|
13
|
-
| b) | 审计记录应包括事件的日期和时间、用户、事件类型、事件是否成功及其他与审计相关的信息 | 13 项审计字段最小集:ts(ISO-8601 UTC)/actor/eventType/result/status……(安全设计 §7.2.2 Q-09) | ✅ 满足 |
|
|
14
|
-
| c) | 应对审计记录进行保护,定期备份,避免受到未预期的删除、修改或覆盖等 | 防未预期篡改 = append-only + SHA-256 哈希链 + verifyChain(断链即 AL-01 P0);导出前强制断链校验;文件权限 0700/0600 | ⚠️ 部分——**「定期备份」为部署方配套措施**(运行时提供导出副本 + 完整性清单,不执行自动备份调度);防覆盖 = 运行时零删除路径(仅用户显式删会话)已满足 |
|
|
15
|
-
| d) | 应对审计进程进行保护,防止未经授权的中断 | 审计写路径 fail-fast:盘满 A070001 → turn 以 error 收口,禁止静默丢弃(L0 审计无降级路径);审计接口对日志零写入(T4 域隔离) | ⚠️ 部分——**本机同级进程可终止运行时进程**(OS 级保护归部署方:专用账户/最小权限/主机加固);运行时侧已尽 fail-fast + 显式失败 |
|
|
16
|
-
|
|
17
|
-
## 差距项处置(禁止静默降标)
|
|
18
|
-
|
|
19
|
-
| 编号 | 差距 | 处置 | 时机 |
|
|
20
|
-
|------|------|------|------|
|
|
21
|
-
| MLPS-G1 | c) 定期备份调度 | 部署方配套措施——部署文档提供《等保配套检查单》(导出副本周期建议 + WORM 存储选项);运行时侧 M3 评估可选定时导出 | S9 文档 / M3 评估 |
|
|
22
|
-
| MLPS-G2 | d) 进程级防中断 | 部署方配套措施——以专用低权限账户运行(car doctor 已检查 root/SYSTEM 并 WARN)+ OS 服务管理器托管(systemd Restart/Windows 服务恢复策略) | S9 文档 |
|
|
23
|
-
| MLPS-G3 | 日志留存 ≥6 个月 | 运行时默认永不清理(满足);「留存承诺」为部署方在等保定级材料中的义务声明 | 声明模板 |
|
|
24
|
-
|
|
25
|
-
## 分层声明集成
|
|
26
|
-
|
|
27
|
-
`complianceStatement('mlps')`(src/session/export.ts)输出上述判定结论的程序化版本——
|
|
28
|
-
面向客户合规问卷的答复骨架;三标(SOC 2 / GDPR / 等保)分层字段映射见 FIELD_STANDARD_MAP。
|
|
29
|
-
|
|
30
|
-
## 遗留
|
|
31
|
-
|
|
32
|
-
- 正式测评口径以测评机构现场判定为准;本清单为产品侧证据准备。
|
|
33
|
-
- M3 backlog:可选定时导出(若企业深访显示备份自动化是采购关键)。
|
|
34
|
-
|
|
35
|
-
## D-4 追记 · MLPS-G1 处置定稿(2026-09-09 主理人裁决)
|
|
36
|
-
|
|
37
|
-
> **裁决:维持部署方配套,运行时不实装定时导出**(M3 backlog 保留观察)。
|
|
38
|
-
>
|
|
39
|
-
> 依据:①运行时侧 c) 项证据链已闭环(append-only + SHA-256 哈希链 + verifyChain + 零删除路径 + 导出副本/完整性清单能力),「定期备份调度」属部署方运维域;②等保三级才是审计备份强约束场景,rc 阶段无企业等保客户在途,提前实装属过度供给;③零依赖红线(G-04)下新增定时器为纯增量代码重量。
|
|
40
|
-
>
|
|
41
|
-
> 关闭条件重开:企业深访中「备份自动化」成为采购关键,或首个等保定级客户接入时,从 M3 backlog 提级(预估 0.5 人日:定时器 + 导出副本 + 完整性清单 + 关闭开关)。
|
package/adr/win32-spike.md
DELETED
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
# Windows 沙箱 spike 方案(M2-S7 出方案 → S8 实装,M2系统设计增补 T-3 / 规划 §4 三重闸门第一道)
|
|
2
|
-
|
|
3
|
-
## 路线定稿
|
|
4
|
-
|
|
5
|
-
**路线 a(推荐,证据充分)**:Node + koffi FFI 纯 JS 实现 Win32 受限 token + Job Object——
|
|
6
|
-
dsh win32 路径即此形态(`sandbox-local/src/index.ts:160-161`,源码级已核实),Codex 受限 token 语义为参照
|
|
7
|
-
(SR-19)。禁运行时网络下载沙箱组件(M2部署设计增补 D-3)——koffi 走 optionalDependencies 随包分发。
|
|
8
|
-
|
|
9
|
-
## 三阶段 spike(S8 第一周执行,Windows 10/11 + Server 2022 双机)
|
|
10
|
-
|
|
11
|
-
### 阶段 1:受限 token 创建(约 1 人日)
|
|
12
|
-
|
|
13
|
-
koffi 调用链:`CreateProcessAsUserW`(受限 token)或 `CreateProcessW` + `CREATE_RESTRICTED_TOKEN`
|
|
14
|
-
- `OpenProcessToken(GetCurrentProcess(), TOKEN_DUPLICATE|TOKEN_QUERY, &h)`
|
|
15
|
-
- `CreateRestrictedToken(h, DISABLE_MAX_PRIVILEGE, 0, NULL, 0, NULL, 1, [sids deny Administrators], &restricted)`
|
|
16
|
-
- 验证命令:spike 子进程内执行 `whoami /groups` → 断言 `S-1-16-0`(Untrusted IL)或 Administrators deny SID 在列;
|
|
17
|
-
- 写能力探针:尝试写 `%USERPROFILE%` 外路径 → 断言拒绝(fail-closed)。
|
|
18
|
-
|
|
19
|
-
### 阶段 2:Job Object 资源配额(约 0.5 人日)
|
|
20
|
-
|
|
21
|
-
- `CreateJobObjectW` → `SetInformationJobObject(JobObjectExtendedLimitInformation)`:
|
|
22
|
-
内存 256MB + 活跃进程数 32 + `JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE`;
|
|
23
|
-
- `AssignProcessToJobObject`;验证:fork 炸弹用例(POC-4 T-17)在配额内被拒。
|
|
24
|
-
|
|
25
|
-
### 阶段 3:逃逸矩阵试跑(约 1 人日)
|
|
26
|
-
|
|
27
|
-
- POC-4 的 20 条用例以 win32 后端实跑(env-proc 类预期通过 deny 继承成立);
|
|
28
|
-
- 全 PASS + 审计 JSONL → 进 CI windows-2022 runner(16 Job 矩阵,M2部署设计增补)。
|
|
29
|
-
|
|
30
|
-
## 四判据(S8 结论门)
|
|
31
|
-
|
|
32
|
-
1. 受限 token 下 `whoami /groups` 显示剥离管理员 SID;
|
|
33
|
-
2. 工作区外写操作返回 ACCESS_DENIED(fail-closed,非静默);
|
|
34
|
-
3. Job Object 配额触发生效(fork 炸弹被杀,父进程存活);
|
|
35
|
-
4. koffi 调用零原生编译(纯 JS 依赖链成立,npm install 干净机器可复现)。
|
|
36
|
-
|
|
37
|
-
## 逐级回退(判据任一不可达)
|
|
38
|
-
|
|
39
|
-
a 失败 → 回退 b:`PsExec -l -e` 外部工具包装(依赖 Sysinternals,企业可接受性降);b 失败 → 回退 c:
|
|
40
|
-
win32 显式降级维持 S3 现状(BD-01 语义,降级需走中间确认——M2 规划 §4 第三道闸门)。
|
|
41
|
-
|
|
42
|
-
## spike 脚本
|
|
43
|
-
|
|
44
|
-
`scripts/win32-koffi-spike.ts`——阶段 1/2 的 koffi 调用骨架(`koffi` 未安装时输出 SKIP + 判据清单,
|
|
45
|
-
与 POC-4 windows-skip 后端口径一致)。
|
package/docs/plugin-authoring.md
DELETED
|
@@ -1,82 +0,0 @@
|
|
|
1
|
-
# CAR 插件作者指南(M6 DX)
|
|
2
|
-
|
|
3
|
-
面向插件作者的写码红线与热重载实操。本文所述行为均为实测口径(POC-2 + S1–S3 红线),不是"建议"。
|
|
4
|
-
|
|
5
|
-
## 插件文件形态
|
|
6
|
-
|
|
7
|
-
CAR 免编译加载插件(Node type-stripping 载体),一个插件 = 一个 `.ts` 文件:
|
|
8
|
-
|
|
9
|
-
```ts
|
|
10
|
-
// my-plugin.ts
|
|
11
|
-
export const manifest = { name: 'my-plugin', version: '1.2.3' } // 命名导出,可省略(省略则按文件名合成)
|
|
12
|
-
|
|
13
|
-
export default function apply(api) {
|
|
14
|
-
api.registerTool({ name: 'hello', run: async () => 'world' })
|
|
15
|
-
api.registerCommand({ name: 'hi', run: async (args) => console.log('hi', args) })
|
|
16
|
-
}
|
|
17
|
-
```
|
|
18
|
-
|
|
19
|
-
- `manifest.version` 必须是**精确 semver**(`x.y.z`),版本区间仅用于 peer 校验;
|
|
20
|
-
- `manifest.peers` 声明 peer 约束:`{ peer, range, optional? }`;冲突即加载期硬报错,
|
|
21
|
-
放宽需 `manifest.peerPolicyOverride = { relaxed: true, reason: '…' }`(reason 必填,审计留痕);
|
|
22
|
-
- 插件源码只接受 **erasable TS**(禁 enum/namespace/装饰器等需转换的语法,loader 挂点显式拒绝)。
|
|
23
|
-
|
|
24
|
-
## 写码红线(违反 = 运行期错位,已实证)
|
|
25
|
-
|
|
26
|
-
### 1. invalidate 必须包裹插件 fiber 作用域 ctx,而非根 ctx
|
|
27
|
-
|
|
28
|
-
POC-2 实证:把根 ctx 透传给插件工厂会导致 effect 注册到错误 fiber——**effect 注册错位、
|
|
29
|
-
dispose 回卷不到**。热重载失效旧实例时,只能失效插件自身作用域的 ctx(`api` 句柄),
|
|
30
|
-
根 ctx 与其它插件不受影响。插件作者视角:不要保存/传递宿主根 ctx,只使用 `apply(api)` 收到的 `api`。
|
|
31
|
-
|
|
32
|
-
### 2. apply 不能返回非 disposer 对象
|
|
33
|
-
|
|
34
|
-
cordis 语义:`apply` 返回值 = effect body。CAR 内核同步约定——`apply` 同步完成注册,
|
|
35
|
-
需要异步初始化请走 `ctx.effect(async () => { … })`。返回 Promise/普通对象 = 加载期显式报错。
|
|
36
|
-
|
|
37
|
-
### 3. getRegisteredTools 在 bindCore 前调用即抛 CAR-STUB
|
|
38
|
-
|
|
39
|
-
Stub 语义分层(红线 5):
|
|
40
|
-
- **注册类动作**(`registerTool`/`registerCommand`)Stub 期始终可用——收集待注册项,`bindCore` 后冲刷;
|
|
41
|
-
- **能力查询**(`getRegisteredTools`)依赖宿主绑定,bindCore 前一调用即抛
|
|
42
|
-
`CAR-STUB`——用启动期显式失败换运行期时序正确。
|
|
43
|
-
|
|
44
|
-
### 4. 旧 ctx 访问抛 CAR-INVALIDATED
|
|
45
|
-
|
|
46
|
-
`car reload`(或 `ReloadManager.reload()`)后,旧插件实例的 `api` 句柄**任何属性访问**都抛
|
|
47
|
-
`CAR-INVALIDATED: … (旧上下文已失效,请重新加载)`。持有旧句柄的闭包不会静默失效——显式报错定位。
|
|
48
|
-
|
|
49
|
-
## 热重载实操
|
|
50
|
-
|
|
51
|
-
```bash
|
|
52
|
-
car reload my-plugin.ts # 单文件
|
|
53
|
-
car reload ./plugins/ # 目录(扫描 *.ts,排除 .d.ts/.spec.ts)
|
|
54
|
-
```
|
|
55
|
-
|
|
56
|
-
五阶段流水线(任一 FAIL 短路,后续 SKIPPED,FAIL 附文件+原因定位):
|
|
57
|
-
|
|
58
|
-
| 阶段 | 内容 | 典型 FAIL |
|
|
59
|
-
|------|------|-----------|
|
|
60
|
-
| discover | 扫描插件文件;git 直载来源产生 CAR-W-GIT-DIRECT 告警(E-03) | 路径不存在 / 无 .ts |
|
|
61
|
-
| parse | 读 manifest(命名导出,缺失按文件名合成)+ parseManifest | version 非精确 semver |
|
|
62
|
-
| validate | peer 约束校验,冲突链进报告 `conflicts` | peer 区间不符且未豁免 |
|
|
63
|
-
| topo | peer 依赖边 Kahn 拓扑排序 | 依赖环(CAR-E-DEPCYCLE) |
|
|
64
|
-
| register | mountPlugin 逐个装配(拓扑序) | 工厂非默认导出 / erasable 违规 / 重名 |
|
|
65
|
-
|
|
66
|
-
成功输出含 `installId`、`startedTime`、`durationMs`(QS-05 基线 P95 ≤ 800ms)与 `warnings`。
|
|
67
|
-
|
|
68
|
-
程序化热重载:
|
|
69
|
-
|
|
70
|
-
```ts
|
|
71
|
-
import { ReloadManager } from '../src/load/report.ts'
|
|
72
|
-
const mgr = new ReloadManager()
|
|
73
|
-
const { report, plugins } = await mgr.reload('./plugins/') // epoch 每次 +1 击穿模块缓存
|
|
74
|
-
```
|
|
75
|
-
|
|
76
|
-
## peer 冲突链示例
|
|
77
|
-
|
|
78
|
-
```
|
|
79
|
-
[validate] FAIL — ./plugins/b.ts: peer dep-p@^2.0.0 required but 1.0.0 installed (path: manifest.peers)
|
|
80
|
-
```
|
|
81
|
-
|
|
82
|
-
冲突链定位三要素:**文件**(谁声明的)、**区间 vs 实际版本**、**依赖路径**。按此修版本或走豁免流程。
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
# landlock-run 构建单源(M3部署设计增补 §2.1.2:J-01 单点编译,J-05/J-17 消费产物,禁止平台内重编译)
|
|
2
|
-
# 目标三元组:linux-x64-gnu;产物指纹随 J-01 SBOM 下发,消费方启动时校验 sha256
|
|
3
|
-
CC ?= cc
|
|
4
|
-
CFLAGS ?= -O2 -std=c11 -Wall -Wextra -Werror
|
|
5
|
-
TARGET := landlock-run
|
|
6
|
-
|
|
7
|
-
.PHONY: all clean verify
|
|
8
|
-
|
|
9
|
-
all: $(TARGET)
|
|
10
|
-
|
|
11
|
-
$(TARGET): landlock-run.c
|
|
12
|
-
$(CC) $(CFLAGS) -o $@ $<
|
|
13
|
-
|
|
14
|
-
# 消费方(J-05/J-17)产物指纹校验入口
|
|
15
|
-
verify: $(TARGET)
|
|
16
|
-
sha256sum $(TARGET)
|
|
17
|
-
|
|
18
|
-
clean:
|
|
19
|
-
rm -f $(TARGET)
|