skill-family-engineering-kit 0.19.3 → 0.21.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/CHANGELOG.md CHANGED
@@ -1,5 +1,45 @@
1
1
  # Changelog
2
2
 
3
+ <!-- release-skill:changelog:start version=0.21.0 locale=en baseline=sha256:308114b76ba97466f58479dd0d5e4251ea8efba6ad291afc65236f26170229c5 -->
4
+ ## [0.21.0] - 2026-09-11
5
+
6
+ Engineering Kit 0.21.0 adds `prepareHostVerification` for preparing one bounded Cursor invocation and reading its digest-bound private output through the existing host-verification path.
7
+
8
+ ### Added
9
+
10
+ - Adds `prepareHostVerification`, which derives the fixed driver request, contained invocation directories, frozen snapshots, and private bindings from caller-owned candidate, workload, Skill, workspace, fixture, prompt, executable, and state-root inputs.
11
+ - Adds `readInvocationStream` to the frozen preparation object so callers can read stdout or stderr only after the result, request, evidence-root binding, stream digest, and byte count match.
12
+
13
+ ### Changed
14
+
15
+ - Rechecks bindings and source snapshots before process spawn, then compares the installed Skill closure digest before session creation or probing; drift and post-install digest mismatches fail closed.
16
+
17
+ ### Upgrade Notes
18
+
19
+ Pin all three Foundation packages to exactly 0.21.0. The new preparation API supports only one declared Cursor Skill with the packaged `cursor-agent-print-v1` driver; workload meaning, domain assertions, release freshness, and cleanup remain caller responsibilities.
20
+ <!-- release-skill:changelog:end version=0.21.0 locale=en -->
21
+
22
+
23
+ <!-- release-skill:changelog:start version=0.20.0 locale=en baseline=sha256:4ea3064e77b2e33e76d1476f02f7d22920638e872cb87c098e8260f617081313 -->
24
+ ## [0.20.0] - 2026-09-10
25
+
26
+ Engineering Kit 0.20.0 adds Cursor project Skill projection and a fixed Cursor Agent verification driver on the existing host-verification path.
27
+
28
+ ### Added
29
+
30
+ - Registers `.cursor/skills` as the Cursor project Skill root while preserving manual lifecycle planning.
31
+ - Adds `cursor-agent-print-v1` with fixed workspace, ask-mode, sandbox, JSON output, version, and failure checks.
32
+
33
+ ### Changed
34
+
35
+ - Qualifies project-level Skill discovery through Cursor CLI menu discovery and one explicit invocation, without requiring a duplicate IDE check.
36
+
37
+ ### Upgrade Notes
38
+
39
+ Pin all three Foundation packages to exactly 0.20.0 and rebuild official Bundles. Cursor stays manual/developer-preview; the driver does not add automatic trust, model selection, or Marketplace lifecycle management.
40
+ <!-- release-skill:changelog:end version=0.20.0 locale=en -->
41
+
42
+
3
43
  <!-- release-skill:changelog:start version=0.19.3 locale=en baseline=sha256:a75e6ad165b31be8764c3f7e1b8048120f431d5da29e7bfdff5e4338d8fa896a -->
4
44
  ## [0.19.3] - 2026-09-08
5
45
 
@@ -1,5 +1,45 @@
1
1
  # 变更日志
2
2
 
3
+ <!-- release-skill:changelog:start version=0.21.0 locale=zh-CN baseline=sha256:1f50ac51db5691c5c9dbe1014d0ab43e6cfa4eab1d60eb37a9ca74d30bc75890 -->
4
+ ## [0.21.0] - 2026-09-11
5
+
6
+ Engineering Kit 0.21.0 增加 `prepareHostVerification`,在既有宿主验证路径上准备一次受约束的 Cursor 调用,并读取经过摘要绑定的私有输出。
7
+
8
+ ### 新增
9
+
10
+ - 增加 `prepareHostVerification`。它从调用方持有的候选、工作负载、Skill、工作区、夹具、提示词、可执行文件和状态根输入派生固定驱动请求、受收容调用目录、冻结快照与私有绑定。
11
+ - 冻结的准备对象增加 `readInvocationStream`。只有结果、请求、证据根绑定、流摘要和字节数一致时,调用方才能读取 stdout 或 stderr。
12
+
13
+ ### 变更
14
+
15
+ - 启动进程前重新校验绑定与来源快照;创建会话或探测前比较安装后的 Skill 闭包摘要。发现漂移或摘要不匹配时失败关闭。
16
+
17
+ ### 升级说明
18
+
19
+ 三个 Foundation 包须一起精确锁定到 0.21.0。新准备接口只支持一个已声明的 Cursor Skill,并固定使用随包 `cursor-agent-print-v1` 驱动;工作负载含义、领域断言、发布新鲜度和清理由调用方负责。
20
+ <!-- release-skill:changelog:end version=0.21.0 locale=zh-CN -->
21
+
22
+
23
+ <!-- release-skill:changelog:start version=0.20.0 locale=zh-CN baseline=sha256:7f7e7f2175429d96720b04bb378afcb796e01f642abc0cdd7114fddf4a808b62 -->
24
+ ## [0.20.0] - 2026-09-10
25
+
26
+ Engineering Kit 0.20.0 在既有宿主验证路径上增加 Cursor 项目级 Skill 投影和固定 Cursor Agent 验证驱动。
27
+
28
+ ### 新增
29
+
30
+ - 登记 `.cursor/skills` 作为 Cursor 项目级 Skill 根,生命周期计划继续保持手动。
31
+ - 增加 `cursor-agent-print-v1`,固定工作区、问答模式、沙箱、JSON 输出、版本与失败检查。
32
+
33
+ ### 变更
34
+
35
+ - 通过 Cursor CLI 菜单发现和一次显式调用取得项目级 Skill 发现资格,不重复执行 IDE 图形界面检查。
36
+
37
+ ### 升级说明
38
+
39
+ 三个 Foundation 包须一起精确锁定到 0.20.0,并重建官方 Bundle。Cursor 继续保持 manual/developer-preview;驱动不增加自动信任、模型选择或 Marketplace 生命周期管理。
40
+ <!-- release-skill:changelog:end version=0.20.0 locale=zh-CN -->
41
+
42
+
3
43
  <!-- release-skill:changelog:start version=0.19.3 locale=zh-CN baseline=sha256:16f48a8354216cfe0f1354bed02f0a5cee6ef0b9adaaad3339dc9f80c1070e2b -->
4
44
  ## [0.19.3] - 2026-09-08
5
45
 
package/README.md CHANGED
@@ -4,22 +4,27 @@
4
4
 
5
5
  # skill-family-engineering-kit
6
6
 
7
- <!-- release-skill:release-version: 0.19.3 -->
7
+ <!-- release-skill:release-version: 0.21.0 -->
8
8
 
9
9
  An engineering toolkit used in development and CI. There are **exactly four** top-level commands, and no fifth:
10
10
 
11
11
  <!-- release-skill:managed:start id=latest-release -->
12
- **0.19.3** (2026-09-08)
12
+ **0.21.0** (2026-09-11)
13
13
 
14
- Engineering Kit 0.19.3 aligns its package, release documentation, and generated projections with the Foundation Adoption Review Qoder distribution patch. Public commands and behavior are unchanged.
14
+ Engineering Kit 0.21.0 adds `prepareHostVerification` for preparing one bounded Cursor invocation and reading its digest-bound private output through the existing host-verification path.
15
+
16
+ **Added**
17
+
18
+ - Adds `prepareHostVerification`, which derives the fixed driver request, contained invocation directories, frozen snapshots, and private bindings from caller-owned candidate, workload, Skill, workspace, fixture, prompt, executable, and state-root inputs.
19
+ - Adds `readInvocationStream` to the frozen preparation object so callers can read stdout or stderr only after the result, request, evidence-root binding, stream digest, and byte count match.
15
20
 
16
21
  **Changed**
17
22
 
18
- - Aligns the package version, release documentation, and verified public package projection with Foundation 0.19.3 without adding a command, capability, or adapter path.
23
+ - Rechecks bindings and source snapshots before process spawn, then compares the installed Skill closure digest before session creation or probing; drift and post-install digest mismatches fail closed.
19
24
 
20
25
  **Upgrade Notes**
21
26
 
22
- Pin all three Foundation packages to exactly 0.19.3 and rebuild official Bundles under the existing source-identity and integrity rules. The capability catalog, host descriptors, drivers, since values, and maturity are unchanged.
27
+ Pin all three Foundation packages to exactly 0.21.0. The new preparation API supports only one declared Cursor Skill with the packaged `cursor-agent-print-v1` driver; workload meaning, domain assertions, release freshness, and cleanup remain caller responsibilities.
23
28
  <!-- release-skill:managed:end id=latest-release -->
24
29
 
25
30
  ### Foundation 0.15.0 candidate qualification entries
@@ -49,7 +54,7 @@ Kit is the "engineering stage" layer, depending on the Harness and Contracts. It
49
54
 
50
55
  ## Installation and Minimal Example
51
56
 
52
- Version 0.19.3 is the local source candidate. Build all three tarballs into one temporary directory and install those exact files for a candidate check:
57
+ Version 0.21.0 is the local source candidate. Build all three tarballs into one temporary directory and install those exact files for a candidate check:
53
58
 
54
59
  ```sh
55
60
  pack_dir="$(mktemp -d)"
@@ -57,21 +62,21 @@ pack_dir="$(mktemp -d)"
57
62
  (cd packages/skill-family-harness-node && pnpm pack --pack-destination "$pack_dir")
58
63
  (cd packages/skill-family-engineering-kit && pnpm pack --pack-destination "$pack_dir")
59
64
  mkdir "$pack_dir/consumer" && (cd "$pack_dir/consumer" && npm init -y)
60
- (cd "$pack_dir/consumer" && npm install "$pack_dir/skill-family-contracts-0.19.3.tgz" "$pack_dir/skill-family-harness-node-0.19.3.tgz" "$pack_dir/skill-family-engineering-kit-0.19.3.tgz")
65
+ (cd "$pack_dir/consumer" && npm install "$pack_dir/skill-family-contracts-0.21.0.tgz" "$pack_dir/skill-family-harness-node-0.21.0.tgz" "$pack_dir/skill-family-engineering-kit-0.21.0.tgz")
61
66
  ```
62
67
 
63
68
  After publication, use the registry coordinate:
64
69
 
65
70
  ```sh
66
- npm install --save-dev skill-family-engineering-kit@0.19.3
67
- npm exec --package=skill-family-engineering-kit@0.19.3 -- skill-family-kit --help
68
- npm exec --package=skill-family-engineering-kit@0.19.3 -- skill-family-kit scaffold --root <empty-dir> --project-id my-project
69
- npm exec --package=skill-family-engineering-kit@0.19.3 -- skill-family-kit adopt-plan --root <repo> --list-capabilities --all --scope all --locale en --uses ./uses.json
70
- npm exec --package=skill-family-engineering-kit@0.19.3 -- skill-family-kit projection --root <repo>
71
- npm exec --package=skill-family-engineering-kit@0.19.3 -- skill-family-kit check --root <repo>
71
+ npm install --save-dev skill-family-engineering-kit@0.21.0
72
+ npm exec --package=skill-family-engineering-kit@0.21.0 -- skill-family-kit --help
73
+ npm exec --package=skill-family-engineering-kit@0.21.0 -- skill-family-kit scaffold --root <empty-dir> --project-id my-project
74
+ npm exec --package=skill-family-engineering-kit@0.21.0 -- skill-family-kit adopt-plan --root <repo> --list-capabilities --all --scope all --locale en --uses ./uses.json
75
+ npm exec --package=skill-family-engineering-kit@0.21.0 -- skill-family-kit projection --root <repo>
76
+ npm exec --package=skill-family-engineering-kit@0.21.0 -- skill-family-kit check --root <repo>
72
77
  ```
73
78
 
74
- The four commands above cover skeleton generation, read-only inventory, managed projection, and diagnostics respectively; a zero-install form is available via `npm exec --package=skill-family-engineering-kit@0.19.3 -- skill-family-kit --help`.
79
+ The four commands above cover skeleton generation, read-only inventory, managed projection, and diagnostics respectively; a zero-install form is available via `npm exec --package=skill-family-engineering-kit@0.21.0 -- skill-family-kit --help`.
75
80
 
76
81
  ### Three adoption journeys
77
82
 
@@ -165,6 +170,38 @@ The API keeps consumer workload, domain output checks, domain PASS/FAIL, release
165
170
 
166
171
  `executableSha256` binds only the bytes observed by the strict preflight read; the actual process is still spawned by pathname, so the caller must exclusively control the executable namespace through probe and invocation. Foundation retains the call's `session-*` directory and never deletes it by pathname. After inspection, the caller cleans its exclusively owned outer `temporaryRoot`.
167
172
 
173
+ #### 0.21.0 candidate: prepare a Cursor invocation
174
+
175
+ `prepareHostVerification` is a 0.21.0 candidate public API and has not yet been published remotely. The published 0.20.0 package does not contain this API. It prepares one declared Skill for `cursor`, using the packaged Descriptor and fixed `cursor-agent-print-v1` driver. It accepts no custom driver, arguments, model override, credential handling, or domain validator. The existing seven-driver `runHostVerification` entrypoint remains compatible.
176
+
177
+ The caller supplies the following values; document and fixture content is an opaque UTF-8 string or Buffer. `skillMembers` must include `SKILL.md`; only declared members are installed. All roots must already exist as canonical absolute paths. `sessionRoot` must be empty and exclusively owned, and the workspace must be inside `repositoryRoot` (equality is allowed). The caller authorizes use of the existing user-state root and exclusively controls the executable namespace.
178
+
179
+ ```js
180
+ import { prepareHostVerification, runHostVerification } from "skill-family-engineering-kit";
181
+
182
+ const prepared = await prepareHostVerification({
183
+ hostId: "cursor", verificationSetId,
184
+ candidate: { ref: candidateRef, manifest: candidateManifest },
185
+ skill: { root: skillRoot, entrySkill, members: skillMembers },
186
+ workloadDocument, fixtureFiles, // [{ path: "input.json", content: fixtureBytes }]
187
+ workspace: { repositoryRoot, root: workspaceRoot, protectedMembers },
188
+ platformManifest, effectivePrompt,
189
+ executable: { root: executableRoot, relPath: "cursor-agent" },
190
+ existingUserStateRoot, sessionRoot,
191
+ timeoutPolicy: { schemaVersion: 1, kind: "skill-family.timeout-policy", maxSeconds: 60, killGraceSeconds: 1 },
192
+ });
193
+ const result = await runHostVerification(prepared);
194
+ const stdout = result.streams
195
+ ? await prepared.readInvocationStream(result, "stdout")
196
+ : null;
197
+ ```
198
+
199
+ Preparation copies input bytes, computes digests, freezes the request and private bindings, and creates contained documents and missing `.cursor/skills` parents without spawning a process or installing the Skill. Execution rechecks bindings and compares the installed Skill digest before any probe. Invalid fields, Schema failures, and mechanism failures use `SFC2003`, `SFC1001`, and `SFC2004`, respectively; preparation may leave partial files on a mechanism failure.
200
+
201
+ `readInvocationStream(result, "stdout" | "stderr")` returns a Buffer only after checking the result, request binding, captured evidence root, stream digest, and byte count. It does not parse the answer or decide domain correctness. Missing streams or a read failure mean required business evidence is unavailable, not acceptance. The four states remain `observed`, `rejected`, `failed`, and `indeterminate`; `observed` is not a domain PASS. Only the validated result may enter a public report: the prepared object, raw streams, and error details stay private.
202
+
203
+ The caller owns workload semantics, candidate-to-payload binding, domain assertions, release freshness, and resource cleanup. Keep the outer session and workspace handles before preparation; after a known outcome, read the evidence and confirm no process still uses the directories before cleanup. Preserve an `indeterminate` scene for the required manual actions; do not wrap the call in unconditional cleanup. A retry needs fresh roots and a new prepared object. These local fixture checks do not qualify a real host or prove model-driven Skill discovery.
204
+
168
205
  ## Typical Use Cases
169
206
 
170
207
  - New project skeleton: `scaffold` (does not overwrite a non-empty existing repo).
@@ -290,4 +327,4 @@ The candidate `runPluginVerification({ request, bindings, hostsRoot })` preserve
290
327
 
291
328
  The separate `runSkillFamilyDirectoryVerification({ request, bindings })` entry fixes the Kimi production argv and narrow environment and rejects caller observation. Its raw parser is exercised through the production process path, but no controlled fixture event is promoted to `observed`; without an official typed mapping, the public result remains `indeterminate` and a manual candidate.
292
329
 
293
- Version 0.19.3 is the local source candidate. Remote availability must be established by the corresponding release-skill post-release evidence. Consume the three locally verified tarballs for candidate checks; a version marker, unit test, or successful install is not complete contract integration, migration completion, or real-host qualification.
330
+ Version 0.21.0 is the local source candidate. Remote availability must be established by the corresponding release-skill post-release evidence. Consume the three locally verified tarballs for candidate checks; a version marker, unit test, or successful install is not complete contract integration, migration completion, or real-host qualification.
package/README.zh-CN.md CHANGED
@@ -5,22 +5,27 @@
5
5
 
6
6
  # skill-family-engineering-kit
7
7
 
8
- <!-- release-skill:release-version: 0.19.3 -->
8
+ <!-- release-skill:release-version: 0.21.0 -->
9
9
 
10
10
  开发与 CI 阶段使用的工程工具包。**恰好四个**顶层命令,没有第五个:
11
11
 
12
12
  <!-- release-skill:managed:start id=latest-release -->
13
- **0.19.3** (2026-09-08)
13
+ **0.21.0** (2026-09-11)
14
14
 
15
- Engineering Kit 0.19.3 将包版本、发布文档和生成投影与 Foundation Adoption Review 的 Qoder 分发补丁对齐。公开命令和行为保持不变。
15
+ Engineering Kit 0.21.0 增加 `prepareHostVerification`,在既有宿主验证路径上准备一次受约束的 Cursor 调用,并读取经过摘要绑定的私有输出。
16
+
17
+ **新增**
18
+
19
+ - 增加 `prepareHostVerification`。它从调用方持有的候选、工作负载、Skill、工作区、夹具、提示词、可执行文件和状态根输入派生固定驱动请求、受收容调用目录、冻结快照与私有绑定。
20
+ - 冻结的准备对象增加 `readInvocationStream`。只有结果、请求、证据根绑定、流摘要和字节数一致时,调用方才能读取 stdout 或 stderr。
16
21
 
17
22
  **变更**
18
23
 
19
- - 包版本、发布文档和经验证的公开 package.json 投影与 Foundation 0.19.3 数值对齐,不增加命令、能力或 adapter 路径。
24
+ - 启动进程前重新校验绑定与来源快照;创建会话或探测前比较安装后的 Skill 闭包摘要。发现漂移或摘要不匹配时失败关闭。
20
25
 
21
26
  **升级说明**
22
27
 
23
- 三个 Foundation 包须一起精确锁定到 0.19.3,并按既有来源身份与完整性规则重建官方 Bundle。能力目录、宿主 descriptor、driver、since 字段和成熟度均不变。
28
+ 三个 Foundation 包须一起精确锁定到 0.21.0。新准备接口只支持一个已声明的 Cursor Skill,并固定使用随包 `cursor-agent-print-v1` 驱动;工作负载含义、领域断言、发布新鲜度和清理由调用方负责。
24
29
  <!-- release-skill:managed:end id=latest-release -->
25
30
 
26
31
  ### Foundation 0.15.0 candidate 资格入口
@@ -50,7 +55,7 @@ Kit 是「工程阶段」层,依赖 Harness 与 Contracts。它只做四件事
50
55
 
51
56
  ## 安装和最小示例
52
57
 
53
- 0.19.3 是本地源码候选。候选验证先把三个包分别打入同一个临时目录,再安装这三个精确 tarball:
58
+ 0.21.0 是本地源码候选。候选验证先把三个包分别打入同一个临时目录,再安装这三个精确 tarball:
54
59
 
55
60
  ```sh
56
61
  pack_dir="$(mktemp -d)"
@@ -58,21 +63,21 @@ pack_dir="$(mktemp -d)"
58
63
  (cd packages/skill-family-harness-node && pnpm pack --pack-destination "$pack_dir")
59
64
  (cd packages/skill-family-engineering-kit && pnpm pack --pack-destination "$pack_dir")
60
65
  mkdir "$pack_dir/consumer" && (cd "$pack_dir/consumer" && npm init -y)
61
- (cd "$pack_dir/consumer" && npm install "$pack_dir/skill-family-contracts-0.19.3.tgz" "$pack_dir/skill-family-harness-node-0.19.3.tgz" "$pack_dir/skill-family-engineering-kit-0.19.3.tgz")
66
+ (cd "$pack_dir/consumer" && npm install "$pack_dir/skill-family-contracts-0.21.0.tgz" "$pack_dir/skill-family-harness-node-0.21.0.tgz" "$pack_dir/skill-family-engineering-kit-0.21.0.tgz")
62
67
  ```
63
68
 
64
69
  发布后再使用 registry 坐标:
65
70
 
66
71
  ```sh
67
- npm install --save-dev skill-family-engineering-kit@0.19.3
68
- npm exec --package=skill-family-engineering-kit@0.19.3 -- skill-family-kit --help
69
- npm exec --package=skill-family-engineering-kit@0.19.3 -- skill-family-kit scaffold --root <empty-dir> --project-id my-project
70
- npm exec --package=skill-family-engineering-kit@0.19.3 -- skill-family-kit adopt-plan --root <repo> --list-capabilities --all --scope all --locale zh-CN --uses ./uses.json
71
- npm exec --package=skill-family-engineering-kit@0.19.3 -- skill-family-kit projection --root <repo>
72
- npm exec --package=skill-family-engineering-kit@0.19.3 -- skill-family-kit check --root <repo>
72
+ npm install --save-dev skill-family-engineering-kit@0.21.0
73
+ npm exec --package=skill-family-engineering-kit@0.21.0 -- skill-family-kit --help
74
+ npm exec --package=skill-family-engineering-kit@0.21.0 -- skill-family-kit scaffold --root <empty-dir> --project-id my-project
75
+ npm exec --package=skill-family-engineering-kit@0.21.0 -- skill-family-kit adopt-plan --root <repo> --list-capabilities --all --scope all --locale zh-CN --uses ./uses.json
76
+ npm exec --package=skill-family-engineering-kit@0.21.0 -- skill-family-kit projection --root <repo>
77
+ npm exec --package=skill-family-engineering-kit@0.21.0 -- skill-family-kit check --root <repo>
73
78
  ```
74
79
 
75
- 以上四条命令分别覆盖生成骨架、只读盘点、受管投影与诊断;零安装形式可用 `npm exec --package=skill-family-engineering-kit@0.19.3 -- skill-family-kit --help`。
80
+ 以上四条命令分别覆盖生成骨架、只读盘点、受管投影与诊断;零安装形式可用 `npm exec --package=skill-family-engineering-kit@0.21.0 -- skill-family-kit --help`。
76
81
 
77
82
  ### 三条采用旅程
78
83
 
@@ -166,6 +171,40 @@ Profile 必须显式提供,Kit 不默认绑定具体宿主。规范宿主 ID
166
171
 
167
172
  `executableSha256` 只绑定启动前严格读取的字节,进程仍按路径启动;调用方须在版本观察和执行期间独占可执行文件命名空间。Foundation 保留 `session-*` 目录,调用方检查后清理独占的外层 `temporaryRoot`。
168
173
 
174
+ #### 0.21.0 候选:准备 Cursor 调用
175
+
176
+ `prepareHostVerification` 是 0.21.0 候选公开 API,尚未发布到远端;已发布的 0.20.0 包不包含该接口。它只为 `cursor` 准备单个已声明 Skill,使用随包 Descriptor(宿主描述符)和固定 `cursor-agent-print-v1` 驱动,不接受自定义驱动、参数、模型覆盖、凭据处理或领域验证器。原有七驱动的 `runHostVerification` 入口保持兼容。
177
+
178
+ 下例变量由调用方提供,文档和夹具内容为不透明的 UTF-8 字符串或 Buffer。`skillMembers` 必须包含 `SKILL.md`,安装只覆盖声明成员。各根目录须已存在,并使用规范绝对路径;`sessionRoot` 必须为空且由调用方独占,工作区必须位于 `repositoryRoot` 内,也允许两者相等。调用方授权使用现有用户状态根,并独占可执行文件命名空间。
179
+
180
+ ```js
181
+ import { prepareHostVerification, runHostVerification } from "skill-family-engineering-kit";
182
+
183
+ const prepared = await prepareHostVerification({
184
+ hostId: "cursor", verificationSetId,
185
+ candidate: { ref: candidateRef, manifest: candidateManifest },
186
+ skill: { root: skillRoot, entrySkill, members: skillMembers },
187
+ workloadDocument, fixtureFiles, // [{ path: "input.json", content: fixtureBytes }]
188
+ workspace: { repositoryRoot, root: workspaceRoot, protectedMembers },
189
+ platformManifest, effectivePrompt,
190
+ executable: { root: executableRoot, relPath: "cursor-agent" },
191
+ existingUserStateRoot, sessionRoot,
192
+ timeoutPolicy: { schemaVersion: 1, kind: "skill-family.timeout-policy", maxSeconds: 60, killGraceSeconds: 1 },
193
+ });
194
+ const result = await runHostVerification(prepared);
195
+ const stdout = result.streams
196
+ ? await prepared.readInvocationStream(result, "stdout")
197
+ : null;
198
+ ```
199
+
200
+ 准备阶段复制输入字节、计算摘要并冻结请求与私有绑定。它在限定目录内写入文档、补齐缺失的 `.cursor/skills` 父目录,不启动进程,也不安装 Skill。执行阶段重新校验绑定,安装后的 Skill 摘要必须在任何探测前通过比较。字段错误、Schema 校验失败和机制失败分别沿用 `SFC2003`、`SFC1001`、`SFC2004`;准备过程的机制失败可能留下部分文件。
201
+
202
+ `readInvocationStream(result, "stdout" | "stderr")` 校验结果、请求绑定、准备时捕获的证据根、流摘要和字节数后返回 Buffer,不解析答案或判断领域正确性。缺少流或读取失败表示必要业务证据尚不可用,不能据此通过验收。
203
+
204
+ 原四态仍为 `observed`、`rejected`、`failed`、`indeterminate`,其中 `observed` 不等于领域 PASS。只有经过校验的结果可以进入公共报告;准备对象、原始流及错误细节均须留在私有范围。
205
+
206
+ 工作负载语义、候选引用与载荷的绑定、领域断言、发布新鲜度和资源清理由调用方负责。调用方须在准备前持有外层会话目录与工作区的句柄。结果确定后,先读取证据并确认没有进程继续使用目录,再清理现场。`indeterminate` 必须保留现场并完成要求的人工动作,不能用无条件清理包住整次调用。重试须创建新的目录并重新准备。本地夹具检查不构成真实宿主资格,也不证明模型经宿主发现调用了 Skill。
207
+
169
208
  ## 典型使用场景
170
209
 
171
210
  - 新项目骨架:`scaffold`(不覆盖非空存量仓)。
@@ -291,4 +330,4 @@ Foundation 本身不发起网络请求,但绑定的 executable 仍可能联网
291
330
 
292
331
  独立入口 `runSkillFamilyDirectoryVerification({ request, bindings })` 固定 Kimi 生产 argv 与窄环境,并拒绝调用方 observation。原始 parser 通过生产进程路径验证,但受控 fixture 事件不会被提升为 `observed`;缺少官方 typed mapping 时,公共结果保持 `indeterminate` 和 manual candidate。
293
332
 
294
- 0.19.3 是本地源码候选,远端可用性须由对应的 release-skill 发布后证据证明。候选检查使用本地已验证的三包 tarball;版本标记、单元测试或安装成功都不等于契约接入完成、迁移完成或真实宿主资格。
333
+ 0.21.0 是本地源码候选,远端可用性须由对应的 release-skill 发布后证据证明。候选检查使用本地已验证的三包 tarball;版本标记、单元测试或安装成功都不等于契约接入完成、迁移完成或真实宿主资格。
@@ -1290,7 +1290,8 @@
1290
1290
  "useWhen": [
1291
1291
  "Need to resolve a registered host or finite Profile alias",
1292
1292
  "Need to probe, build, plan, or locally install/update host integration",
1293
- "Need to verify caller-owned peer adapter projection roots without writing them"
1293
+ "Need to verify caller-owned peer adapter projection roots without writing them",
1294
+ "Need the unreleased Cursor single-Skill prepare → run → private stream reading API"
1294
1295
  ],
1295
1296
  "doNotUseWhen": [
1296
1297
  "Need remote host publication, automatic trust, or uninstall deletion",
@@ -1299,30 +1300,41 @@
1299
1300
  ],
1300
1301
  "prerequisites": [
1301
1302
  "The host Profile is registered in profiles/hosts and aliases are finite; npm consumers may explicitly select the Kit's packaged projection root",
1302
- "Trusted drivers are only claude-version-v1 / codex-version-v1"
1303
+ "Trusted version-probe drivers are only claude-version-v1 / codex-version-v1",
1304
+ "prepareHostVerification is an unreleased addition, not shipped in 0.20.0; it uses the packaged Cursor Descriptor and fixed cursor-agent-print-v1 verification driver",
1305
+ "Preparation requires existing canonical roots, an empty exclusive sessionRoot, a workspace within repositoryRoot, and caller-authorized existing user state"
1303
1306
  ],
1304
1307
  "inputs": [
1305
- "Host identifier, finite Profile, probe/plan options, or a verified local operation input"
1308
+ "Host identifier, finite Profile, probe/plan options, or a verified local operation input",
1309
+ "Preparation: candidate ref and manifest bytes, declared Skill members including SKILL.md, workload and fixture bytes, protected workspace members, platform bytes, effectivePrompt, an explicitly bound cursor-agent executable, sessionRoot, existingUserStateRoot, and timeoutPolicy"
1306
1310
  ],
1307
1311
  "outputs": [
1308
- "Canonical host identity, independent probe facts, build artifacts, plan, local operation result, or a read-only peer-verification result"
1312
+ "Canonical host identity, independent probe facts, build artifacts, plan, local operation result, or a read-only peer-verification result",
1313
+ "Preparation returns frozen request/bindings, the packaged hostsRoot, and a private readInvocationStream(result, stdout|stderr) method returning a Buffer; runHostVerification retains observed/rejected/failed/indeterminate"
1309
1314
  ],
1310
1315
  "sideEffects": [
1311
1316
  "build/materialize writes artifacts at the contained target",
1312
1317
  "Probe does not spawn by default",
1313
- "verifyHostPeers reads caller-owned peer roots and writes no peer directory"
1318
+ "verifyHostPeers reads caller-owned peer roots and writes no peer directory",
1319
+ "Preparation copies opaque bytes and creates contained documents and missing discovery parents without spawning or installing Skill bytes; execution installs declared members and performs the fixed probe and invocation"
1314
1320
  ],
1315
1321
  "failureSemantics": [
1316
- "Hosts without a bound verification driver (e.g. codebuddy) are rejected before spawn with preflight-rejected",
1322
+ "Hosts without a bound verification driver (e.g. deepseek-harness) are rejected before spawn with preflight-rejected",
1317
1323
  "Uninstall returns manual-recovery-required without deleting files",
1318
- "Missing probe facts, unknown projection categories, identity spoofing, or scope/anchor conflicts fail closed"
1324
+ "Missing probe facts, unknown projection categories, identity spoofing, or scope/anchor conflicts fail closed",
1325
+ "Preparation uses SFC2003 for invalid fields, SFC1001 for Schema failure, and SFC2004 for mechanism failure; partial private files may remain",
1326
+ "Stream reads reject request/result mismatch, missing streams, replaced evidence roots, or digest/byte-count drift; unreadable required business evidence means incomplete verification, not acceptance"
1319
1327
  ],
1320
1328
  "invariants": [
1321
1329
  "HOST_DRIVER_IDS contains only the two trusted drivers",
1322
- "The nine capability facts are emitted independently; update operations require prior digests; manual projection categories do not grant build/plan/apply lifecycle support"
1330
+ "The nine capability facts are emitted independently; update operations require prior digests; manual projection categories do not grant build/plan/apply lifecycle support",
1331
+ "Preparation accepts only cursor, copies byte inputs and freezes bindings; the seven-driver runHostVerification remains compatible and checks installed bytes before the first spawn",
1332
+ "No custom arguments, driver injection, model override, credential handling, or domain verdict; only validated four-state results are public, while prepared objects, streams, and error details remain private"
1323
1333
  ],
1324
1334
  "ownedByCaller": [
1325
- "Host business semantics"
1335
+ "Host business semantics",
1336
+ "Candidate-to-payload binding, workload semantics, business answer assertions, release freshness, and authorization to use existing user state",
1337
+ "Exclusive namespaces and resource cleanup after evidence reading and confirmation that no process uses them; preserve indeterminate scenes for manual actions, and retry only with fresh roots and preparation"
1326
1338
  ],
1327
1339
  "routeElsewhere": [
1328
1340
  "Remote host publication and automatic trust: explicitly unsupported",
@@ -855,6 +855,7 @@
855
855
  "probeHost (packages/skill-family-engineering-kit/src/host.mjs)",
856
856
  "buildHostAdapter (packages/skill-family-engineering-kit/src/host.mjs)",
857
857
  "verifyHostPeers (packages/skill-family-engineering-kit/src/host.mjs)",
858
+ "prepareHostVerification (packages/skill-family-engineering-kit/src/host-verification.mjs)",
858
859
  "runHostVerification (packages/skill-family-engineering-kit/src/host-verification.mjs)",
859
860
  "verifyHostVerificationBindings (packages/skill-family-engineering-kit/src/host-verification.mjs)",
860
861
  "materializeHostBuild (packages/skill-family-engineering-kit/src/host.mjs)",
@@ -873,7 +874,8 @@
873
874
  ],
874
875
  "positiveTestRefs": [
875
876
  "packages/skill-family-engineering-kit/test/host.test.mjs",
876
- "packages/skill-family-engineering-kit/test/host-verification.test.mjs"
877
+ "packages/skill-family-engineering-kit/test/host-verification.test.mjs",
878
+ "scripts/release-artifact-build.mjs"
877
879
  ],
878
880
  "negativeTestRefs": [
879
881
  "packages/skill-family-engineering-kit/test/host.test.mjs",
@@ -1289,7 +1289,8 @@
1289
1289
  "useWhen": [
1290
1290
  "需要解析已登记宿主或有限 Profile alias",
1291
1291
  "需要探测、构建、规划或本地 install/update 宿主接入",
1292
- "需要在不写入目录的前提下验证调用方拥有的同级适配器投影根"
1292
+ "需要在不写入目录的前提下验证调用方拥有的同级适配器投影根",
1293
+ "需要尚未发布的 Cursor 单 Skill 调用准备、执行及私有流读取 API"
1293
1294
  ],
1294
1295
  "doNotUseWhen": [
1295
1296
  "需要远端宿主发布、自动信任或删除式 uninstall",
@@ -1298,30 +1299,41 @@
1298
1299
  ],
1299
1300
  "prerequisites": [
1300
1301
  "宿主 Profile 已在 profiles/hosts 登记,alias 也必须来自有限集合;npm 消费者可显式选择 Kit 随包投影根",
1301
- "受信 driver 仅 claude-version-v1 / codex-version-v1"
1302
+ "受信版本探测 driver 仅 claude-version-v1 / codex-version-v1",
1303
+ "prepareHostVerification 是未发布增量,不属于 0.20.0 已发布 API;使用随包 Cursor Descriptor 和固定 cursor-agent-print-v1 验证驱动",
1304
+ "准备需要已存在的规范根目录、为空且独占的 sessionRoot、位于 repositoryRoot 内的工作区,以及调用方授权使用的现有用户状态"
1302
1305
  ],
1303
1306
  "inputs": [
1304
- "宿主标识、有限 Profile、probe/plan 选项或已验证的本地操作输入"
1307
+ "宿主标识、有限 Profile、probe/plan 选项或已验证的本地操作输入",
1308
+ "准备输入:候选引用和清单字节、包含 SKILL.md 的 Skill 声明成员、工作负载与夹具字节、工作区受保护成员、平台文档字节、effectivePrompt、显式绑定的 cursor-agent 可执行文件、sessionRoot、existingUserStateRoot 和 timeoutPolicy"
1305
1309
  ],
1306
1310
  "outputs": [
1307
- "规范宿主身份、独立 probe fact、构建产物、plan、本地操作结果或只读同级验证结果"
1311
+ "规范宿主身份、独立 probe fact、构建产物、plan、本地操作结果或只读同级验证结果",
1312
+ "准备返回冻结的 request/bindings、随包 hostsRoot 及私有 readInvocationStream(result, stdout|stderr) 方法;该方法返回 Buffer,runHostVerification 仍返回 observed/rejected/failed/indeterminate 四态"
1308
1313
  ],
1309
1314
  "sideEffects": [
1310
1315
  "build/materialize 在受收容目标写产物",
1311
1316
  "probe 默认不 spawn",
1312
- "verifyHostPeers 只读取调用方拥有的 peer 根,不写入 peer 目录"
1317
+ "verifyHostPeers 只读取调用方拥有的 peer 根,不写入 peer 目录",
1318
+ "准备复制不透明字节,在限定目录内写入文档并补齐发现父目录,不启动进程或安装 Skill 字节;执行阶段安装声明成员并按固定参数探测和调用"
1313
1319
  ],
1314
1320
  "failureSemantics": [
1315
- "未绑定验证 driver 的宿主(如 codebuddy)在 spawn 前拒绝,标记 preflight-rejected",
1321
+ "未绑定验证 driver 的宿主(如 deepseek-harness)在 spawn 前拒绝,标记 preflight-rejected",
1316
1322
  "uninstall 返回 manual-recovery-required 且不删除文件",
1317
- "缺 probe facts、未知投影类别、身份伪造或 scope/anchor 冲突均失败关闭"
1323
+ "缺 probe facts、未知投影类别、身份伪造或 scope/anchor 冲突均失败关闭",
1324
+ "准备阶段的字段错误、Schema 失败和机制失败分别沿用 SFC2003、SFC1001、SFC2004;失败可能留下部分私有文件",
1325
+ "流读取拒绝请求与结果不匹配、缺少流、证据根被替换及摘要或字节数漂移;必要业务证据不可读表示验证未完成,不能据此通过验收"
1318
1326
  ],
1319
1327
  "invariants": [
1320
1328
  "HOST_DRIVER_IDS 仅两个受信 driver",
1321
- "九项能力事实逐项输出,update 必须绑定既有摘要;manual 投影类别不授予 build/plan/apply 生命周期能力"
1329
+ "九项能力事实逐项输出,update 必须绑定既有摘要;manual 投影类别不授予 build/plan/apply 生命周期能力",
1330
+ "准备入口只接受 cursor,复制输入字节并冻结绑定;原七驱动的 runHostVerification 保持兼容,并在首次启动前检查安装字节",
1331
+ "不允许自定义参数、驱动注入、模型覆盖、凭据处理或领域裁决;只有经过校验的四态结果可公开,准备对象、流及错误细节均保持私有"
1322
1332
  ],
1323
1333
  "ownedByCaller": [
1324
- "宿主业务语义"
1334
+ "宿主业务语义",
1335
+ "候选引用与载荷绑定、工作负载语义、业务答案断言、发布新鲜度及现有用户状态的使用授权",
1336
+ "命名空间独占与资源清理:读取证据并确认没有进程继续使用目录后再清理;indeterminate 保留现场供人工处理,重试须使用新目录并重新准备"
1325
1337
  ],
1326
1338
  "routeElsewhere": [
1327
1339
  "远端宿主发布和自动信任:明确 unsupported",
@@ -0,0 +1,34 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "kind": "skill-family.host-descriptor",
4
+ "hostId": "cursor",
5
+ "displayName": "Cursor",
6
+ "support": "manual",
7
+ "maturity": "developer-preview",
8
+ "sourceAliases": [],
9
+ "verification": {
10
+ "driverId": "cursor-agent-print-v1",
11
+ "authStrategy": "existing-user-state",
12
+ "credentialMutation": "host-managed"
13
+ },
14
+ "pathCategories": [
15
+ {
16
+ "id": "cursor-project-skills",
17
+ "role": "skill-root",
18
+ "scope": "project",
19
+ "anchor": "project-root",
20
+ "relPath": ".cursor/skills"
21
+ }
22
+ ],
23
+ "probeCapabilities": [
24
+ "cli",
25
+ "version",
26
+ "payload",
27
+ "registry",
28
+ "discover",
29
+ "enabled",
30
+ "reload",
31
+ "smoke",
32
+ "uninstall"
33
+ ]
34
+ }
@@ -4,6 +4,7 @@
4
4
  "hosts": [
5
5
  "claude",
6
6
  "codex",
7
+ "cursor",
7
8
  "kimi-code",
8
9
  "workbuddy",
9
10
  "codebuddy",
@@ -1290,7 +1290,8 @@
1290
1290
  "useWhen": [
1291
1291
  "Need to resolve a registered host or finite Profile alias",
1292
1292
  "Need to probe, build, plan, or locally install/update host integration",
1293
- "Need to verify caller-owned peer adapter projection roots without writing them"
1293
+ "Need to verify caller-owned peer adapter projection roots without writing them",
1294
+ "Need the unreleased Cursor single-Skill prepare → run → private stream reading API"
1294
1295
  ],
1295
1296
  "doNotUseWhen": [
1296
1297
  "Need remote host publication, automatic trust, or uninstall deletion",
@@ -1299,30 +1300,41 @@
1299
1300
  ],
1300
1301
  "prerequisites": [
1301
1302
  "The host Profile is registered in profiles/hosts and aliases are finite; npm consumers may explicitly select the Kit's packaged projection root",
1302
- "Trusted drivers are only claude-version-v1 / codex-version-v1"
1303
+ "Trusted version-probe drivers are only claude-version-v1 / codex-version-v1",
1304
+ "prepareHostVerification is an unreleased addition, not shipped in 0.20.0; it uses the packaged Cursor Descriptor and fixed cursor-agent-print-v1 verification driver",
1305
+ "Preparation requires existing canonical roots, an empty exclusive sessionRoot, a workspace within repositoryRoot, and caller-authorized existing user state"
1303
1306
  ],
1304
1307
  "inputs": [
1305
- "Host identifier, finite Profile, probe/plan options, or a verified local operation input"
1308
+ "Host identifier, finite Profile, probe/plan options, or a verified local operation input",
1309
+ "Preparation: candidate ref and manifest bytes, declared Skill members including SKILL.md, workload and fixture bytes, protected workspace members, platform bytes, effectivePrompt, an explicitly bound cursor-agent executable, sessionRoot, existingUserStateRoot, and timeoutPolicy"
1306
1310
  ],
1307
1311
  "outputs": [
1308
- "Canonical host identity, independent probe facts, build artifacts, plan, local operation result, or a read-only peer-verification result"
1312
+ "Canonical host identity, independent probe facts, build artifacts, plan, local operation result, or a read-only peer-verification result",
1313
+ "Preparation returns frozen request/bindings, the packaged hostsRoot, and a private readInvocationStream(result, stdout|stderr) method returning a Buffer; runHostVerification retains observed/rejected/failed/indeterminate"
1309
1314
  ],
1310
1315
  "sideEffects": [
1311
1316
  "build/materialize writes artifacts at the contained target",
1312
1317
  "Probe does not spawn by default",
1313
- "verifyHostPeers reads caller-owned peer roots and writes no peer directory"
1318
+ "verifyHostPeers reads caller-owned peer roots and writes no peer directory",
1319
+ "Preparation copies opaque bytes and creates contained documents and missing discovery parents without spawning or installing Skill bytes; execution installs declared members and performs the fixed probe and invocation"
1314
1320
  ],
1315
1321
  "failureSemantics": [
1316
- "Hosts without a bound verification driver (e.g. codebuddy) are rejected before spawn with preflight-rejected",
1322
+ "Hosts without a bound verification driver (e.g. deepseek-harness) are rejected before spawn with preflight-rejected",
1317
1323
  "Uninstall returns manual-recovery-required without deleting files",
1318
- "Missing probe facts, unknown projection categories, identity spoofing, or scope/anchor conflicts fail closed"
1324
+ "Missing probe facts, unknown projection categories, identity spoofing, or scope/anchor conflicts fail closed",
1325
+ "Preparation uses SFC2003 for invalid fields, SFC1001 for Schema failure, and SFC2004 for mechanism failure; partial private files may remain",
1326
+ "Stream reads reject request/result mismatch, missing streams, replaced evidence roots, or digest/byte-count drift; unreadable required business evidence means incomplete verification, not acceptance"
1319
1327
  ],
1320
1328
  "invariants": [
1321
1329
  "HOST_DRIVER_IDS contains only the two trusted drivers",
1322
- "The nine capability facts are emitted independently; update operations require prior digests; manual projection categories do not grant build/plan/apply lifecycle support"
1330
+ "The nine capability facts are emitted independently; update operations require prior digests; manual projection categories do not grant build/plan/apply lifecycle support",
1331
+ "Preparation accepts only cursor, copies byte inputs and freezes bindings; the seven-driver runHostVerification remains compatible and checks installed bytes before the first spawn",
1332
+ "No custom arguments, driver injection, model override, credential handling, or domain verdict; only validated four-state results are public, while prepared objects, streams, and error details remain private"
1323
1333
  ],
1324
1334
  "ownedByCaller": [
1325
- "Host business semantics"
1335
+ "Host business semantics",
1336
+ "Candidate-to-payload binding, workload semantics, business answer assertions, release freshness, and authorization to use existing user state",
1337
+ "Exclusive namespaces and resource cleanup after evidence reading and confirmation that no process uses them; preserve indeterminate scenes for manual actions, and retry only with fresh roots and preparation"
1326
1338
  ],
1327
1339
  "routeElsewhere": [
1328
1340
  "Remote host publication and automatic trust: explicitly unsupported",
@@ -855,6 +855,7 @@
855
855
  "probeHost (packages/skill-family-engineering-kit/src/host.mjs)",
856
856
  "buildHostAdapter (packages/skill-family-engineering-kit/src/host.mjs)",
857
857
  "verifyHostPeers (packages/skill-family-engineering-kit/src/host.mjs)",
858
+ "prepareHostVerification (packages/skill-family-engineering-kit/src/host-verification.mjs)",
858
859
  "runHostVerification (packages/skill-family-engineering-kit/src/host-verification.mjs)",
859
860
  "verifyHostVerificationBindings (packages/skill-family-engineering-kit/src/host-verification.mjs)",
860
861
  "materializeHostBuild (packages/skill-family-engineering-kit/src/host.mjs)",
@@ -873,7 +874,8 @@
873
874
  ],
874
875
  "positiveTestRefs": [
875
876
  "packages/skill-family-engineering-kit/test/host.test.mjs",
876
- "packages/skill-family-engineering-kit/test/host-verification.test.mjs"
877
+ "packages/skill-family-engineering-kit/test/host-verification.test.mjs",
878
+ "scripts/release-artifact-build.mjs"
877
879
  ],
878
880
  "negativeTestRefs": [
879
881
  "packages/skill-family-engineering-kit/test/host.test.mjs",