skill-family-engineering-kit 0.9.0 → 0.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/CHANGELOG.md +22 -0
- package/CHANGELOG.zh-CN.md +22 -0
- package/README.md +20 -17
- package/README.zh-CN.md +20 -17
- package/candidate/adoption-mechanisms.mjs +1 -1
- package/candidate/profile-bundle.mjs +45 -14
- package/docs/agents/capability-catalog.en.json +59 -51
- package/docs/agents/capability-catalog.json +70 -21
- package/docs/agents/capability-catalog.schema.json +19 -3
- package/docs/agents/capability-catalog.zh-CN.json +59 -51
- package/docs/agents/index.html +4 -1
- package/docs/architecture/index.html +35 -5
- package/docs/en/agents/index.html +1 -0
- package/docs/en/architecture/index.html +30 -5
- package/docs/en/help/index.html +2 -1
- package/docs/en/recipes/adapter-text-closure/index.html +4 -3
- package/docs/en/recipes/host-profile-integration/index.html +31 -12
- package/docs/en/reference/compatibility/index.html +129 -124
- package/docs/en/reference/failure-and-side-effect-matrix/index.html +23 -3
- package/docs/help/index.html +2 -1
- package/docs/integration/audit/index.html +2 -1
- package/docs/integration/audit/version-compatibility/index.html +3 -2
- package/docs/public/status/index.html +3 -3
- package/docs/recipes/adapter-text-closure/index.html +4 -3
- package/docs/recipes/host-profile-integration/index.html +31 -12
- package/docs/reference/api/contracts/index.html +77 -4
- package/docs/reference/api/engineering-kit/index.html +33 -20
- package/docs/reference/api/harness/index.html +19 -8
- package/docs/reference/api/index.html +1 -1
- package/docs/reference/compatibility/index.html +138 -124
- package/docs/reference/failure-and-side-effect-matrix/index.html +4 -4
- package/docs/search/search_index.json +1 -1
- package/package.json +9 -6
- package/profile-spi/extension-spi.json +1 -1
- package/release-notes/0.10.0.yaml +25 -0
- package/src/host-profiles.mjs +38 -12
- package/src/host.mjs +115 -14
- package/src/index.mjs +6 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,27 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
<!-- release-skill:changelog:start version=0.10.0 locale=en baseline=sha256:fc575df3b8c5f7a0d819090ce9637f8cdc654c277892fe3f14149d5cc1746b24 -->
|
|
4
|
+
## [0.10.0] - 2026-08-24
|
|
5
|
+
|
|
6
|
+
Engineering Kit 0.10.0 adds responsibility-specific canonical entrypoints, a bounded host lifecycle slice, and a thin read-only peer adapter verification entry.
|
|
7
|
+
|
|
8
|
+
### Added
|
|
9
|
+
|
|
10
|
+
- Adds skill-family-engineering-kit/quickstart-profile, /adoption, and /skill-naming canonical exports.
|
|
11
|
+
- Adds finite Profile alias resolution, independent manual probe facts for non-driver hosts, and explicit local install/update plans; uninstall remains a manual-recovery refusal.
|
|
12
|
+
- Adds `verifyHostPeers` as a thin wrapper over Harness peer verification; the Kit retains four top-level commands and does not write peer directories.
|
|
13
|
+
|
|
14
|
+
### Changed
|
|
15
|
+
|
|
16
|
+
- Keeps the historical Quickstart candidate export as a same-source migration alias and preserves the four-command Kit boundary.
|
|
17
|
+
- Compiles one canonical Quickstart and batch Schema set while mapping historical and canonical IDs to the same standalone validators.
|
|
18
|
+
|
|
19
|
+
### Upgrade Notes
|
|
20
|
+
|
|
21
|
+
Update all three exact pins to 0.10.0 and migrate imports and Schema IDs once to canonical identities. A later maturity-label promotion adds no separate Bundle rebuild requirement; package-identity, source-digest, and provenance changes continue to follow the existing projection contract.
|
|
22
|
+
<!-- release-skill:changelog:end version=0.10.0 locale=en -->
|
|
23
|
+
|
|
24
|
+
|
|
3
25
|
<!-- release-skill:changelog:start version=0.9.0 locale=en baseline=sha256:6419bbdc8d469e6dd7f9fda5995e5465cc6bf98724371f9f4aa9293a7e0d9f14 -->
|
|
4
26
|
## [0.9.0] - 2026-08-24
|
|
5
27
|
|
package/CHANGELOG.zh-CN.md
CHANGED
|
@@ -1,5 +1,27 @@
|
|
|
1
1
|
# 变更日志
|
|
2
2
|
|
|
3
|
+
<!-- release-skill:changelog:start version=0.10.0 locale=zh-CN baseline=sha256:45180b7a3b60853842cbe3a379da7ff95f1bd1fe832192368ec2c92a813279dc -->
|
|
4
|
+
## [0.10.0] - 2026-08-24
|
|
5
|
+
|
|
6
|
+
Engineering Kit 0.10.0 为历史 candidate 提供职责明确的规范入口,增加受限的跨平台宿主身份、探针和本地生命周期能力,并提供同级适配器只读验证薄入口。
|
|
7
|
+
|
|
8
|
+
### 新增
|
|
9
|
+
|
|
10
|
+
- 新增 skill-family-engineering-kit/quickstart-profile、/adoption 与 /skill-naming 规范导出。
|
|
11
|
+
- 增加有限 Profile alias 解析、非 driver 宿主的独立手动 probe fact 和显式本地 install/update 计划;uninstall 仍要求人工恢复。
|
|
12
|
+
- 新增 `verifyHostPeers`,只包装 Harness 的 peer 验证,不增加第五个顶层命令,也不写入 peer 目录。
|
|
13
|
+
|
|
14
|
+
### 变更
|
|
15
|
+
|
|
16
|
+
- 历史 Quickstart candidate 导出继续作为同源迁移别名,Kit 四命令边界不变。
|
|
17
|
+
- 只编译一套规范 Quickstart 与批量校验 Schema;历史和规范 ID 指向同一 standalone validator。
|
|
18
|
+
|
|
19
|
+
### 升级说明
|
|
20
|
+
|
|
21
|
+
消费者应把三个包的精确 pin 更新到 0.10.0,并把导入与 Schema ID 一次迁移到规范身份。以后仅晋升成熟度标签时不另加 Bundle 重建要求;包身份、来源摘要或 provenance 变化仍按既有投影合同处理。
|
|
22
|
+
<!-- release-skill:changelog:end version=0.10.0 locale=zh-CN -->
|
|
23
|
+
|
|
24
|
+
|
|
3
25
|
<!-- release-skill:changelog:start version=0.9.0 locale=zh-CN baseline=sha256:c84db7b53f562cbdad947ccf8fcc23209f18137100270b2691bab7d9a7ad623c -->
|
|
4
26
|
## [0.9.0] - 2026-08-24
|
|
5
27
|
|
package/README.md
CHANGED
|
@@ -4,27 +4,29 @@
|
|
|
4
4
|
|
|
5
5
|
# skill-family-engineering-kit
|
|
6
6
|
|
|
7
|
-
<!-- release-skill:release-version: 0.
|
|
7
|
+
<!-- release-skill:release-version: 0.10.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.
|
|
12
|
+
**0.10.0** (2026-08-24)
|
|
13
13
|
|
|
14
|
-
Engineering Kit 0.
|
|
14
|
+
Engineering Kit 0.10.0 adds responsibility-specific canonical entrypoints, a bounded host lifecycle slice, and a thin read-only peer adapter verification entry.
|
|
15
15
|
|
|
16
16
|
**Added**
|
|
17
17
|
|
|
18
|
-
-
|
|
19
|
-
-
|
|
18
|
+
- Adds skill-family-engineering-kit/quickstart-profile, /adoption, and /skill-naming canonical exports.
|
|
19
|
+
- Adds finite Profile alias resolution, independent manual probe facts for non-driver hosts, and explicit local install/update plans; uninstall remains a manual-recovery refusal.
|
|
20
|
+
- Adds `verifyHostPeers` as a thin wrapper over Harness peer verification; the Kit retains four top-level commands and does not write peer directories.
|
|
20
21
|
|
|
21
22
|
**Changed**
|
|
22
23
|
|
|
23
|
-
- Keeps the
|
|
24
|
+
- Keeps the historical Quickstart candidate export as a same-source migration alias and preserves the four-command Kit boundary.
|
|
25
|
+
- Compiles one canonical Quickstart and batch Schema set while mapping historical and canonical IDs to the same standalone validators.
|
|
24
26
|
|
|
25
27
|
**Upgrade Notes**
|
|
26
28
|
|
|
27
|
-
|
|
29
|
+
Update all three exact pins to 0.10.0 and migrate imports and Schema IDs once to canonical identities. A later maturity-label promotion adds no separate Bundle rebuild requirement; package-identity, source-digest, and provenance changes continue to follow the existing projection contract.
|
|
28
30
|
<!-- release-skill:managed:end id=latest-release -->
|
|
29
31
|
|
|
30
32
|
| Command | Purpose | Side effects |
|
|
@@ -45,7 +47,7 @@ Kit is the "engineering stage" layer, depending on the Harness and Contracts. It
|
|
|
45
47
|
## Installation and Minimal Example
|
|
46
48
|
|
|
47
49
|
```sh
|
|
48
|
-
npm install --save-dev skill-family-engineering-kit@0.
|
|
50
|
+
npm install --save-dev skill-family-engineering-kit@0.10.0
|
|
49
51
|
npm exec -- skill-family-kit --help
|
|
50
52
|
npm exec -- skill-family-kit scaffold --root <empty-dir> --project-id my-project
|
|
51
53
|
npm exec -- skill-family-kit adopt-plan --root <repo>
|
|
@@ -53,7 +55,7 @@ npm exec -- skill-family-kit projection --root <repo>
|
|
|
53
55
|
npm exec -- skill-family-kit check --root <repo>
|
|
54
56
|
```
|
|
55
57
|
|
|
56
|
-
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.
|
|
58
|
+
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.10.0 -- skill-family-kit --help`.
|
|
57
59
|
|
|
58
60
|
### Public Profile SPI
|
|
59
61
|
|
|
@@ -63,7 +65,7 @@ The package carries three SPI JSON resources and the Contracts canonical `profil
|
|
|
63
65
|
|
|
64
66
|
`verifyProfile({ profileRoot })` is read-only and data-only for Profile descriptors. `verifyProjectProfile({ projectRoot, profileRelPath? })` is the corresponding entry for a project root declaration. Both refuse invalid input with stable result codes, never execute Profile-provided files, and leave Profile domain meaning to the caller.
|
|
65
67
|
|
|
66
|
-
When a provider Profile descriptor moves from Foundation 0.
|
|
68
|
+
When a provider Profile descriptor moves from Foundation 0.9.0 and Contracts 1.9.0 to Foundation 0.10.0, update its `base.contractsVersion` field mechanically to `1.10.0`. The four Kit commands and Profile SPI retain their existing shapes.
|
|
67
69
|
|
|
68
70
|
### Report sub-action
|
|
69
71
|
|
|
@@ -83,7 +85,7 @@ import { parseSourceAuthorityReceipt } from "skill-family-contracts";
|
|
|
83
85
|
import {
|
|
84
86
|
buildQuickstartProfileProjection,
|
|
85
87
|
QUICKSTART_PROFILE_TARGET_PREFIX,
|
|
86
|
-
} from "skill-family-engineering-kit/
|
|
88
|
+
} from "skill-family-engineering-kit/quickstart-profile";
|
|
87
89
|
|
|
88
90
|
const authority = parseSourceAuthorityReceipt(receipt, actualSubjects);
|
|
89
91
|
if (!authority.valid) throw new Error(authority.errorCode);
|
|
@@ -96,7 +98,7 @@ const projection = await buildQuickstartProfileProjection({
|
|
|
96
98
|
|
|
97
99
|
The caller obtains `receipt` and `actualSubjects` outside Kit. Contracts validates their exact binding before the existing builder receives `sourceRepository` and `sourceBaseCommit`; Kit does not parse release plans or discover source authority. The generated Bundle selects standalone validators by schema `$id` and runs offline without Foundation packages, `node_modules`, or runtime Ajv. Its provenance binds Foundation sources, consumer schemas, payload bytes, tool versions, and the licenses of code that actually enters the Bundle.
|
|
98
100
|
|
|
99
|
-
Pass the returned `manifest` to the stable `runProjection` API; the helper does not write files or add a fifth top-level command.
|
|
101
|
+
Pass the returned `manifest` to the stable `runProjection` API; the helper does not write files or add a fifth top-level command. The capability remains **candidate**, so pin all three packages exactly. Version 0.10.0 adds the canonical path above; the historical `/candidate/quickstart-profile` path remains a same-source migration alias. Adoption and skill naming now also have the canonical `skill-family-engineering-kit/adoption` and `skill-family-engineering-kit/skill-naming` paths. A later stable promotion will not require a second migration. Integrations that still require the v1 dependency-closure Bundle must stay pinned to exactly `0.2.1`.
|
|
100
102
|
|
|
101
103
|
### Host sub-action
|
|
102
104
|
|
|
@@ -107,7 +109,7 @@ npm exec -- skill-family-kit scaffold host-build --root <workspace> --host <id>
|
|
|
107
109
|
npm exec -- skill-family-kit adopt-plan host-plan --root <workspace> --host <id> --path-category <id> --build-manifest <relpath> --probe-facts <relpath> --hosts-root <dir>
|
|
108
110
|
```
|
|
109
111
|
|
|
110
|
-
The Profile must be provided explicitly; Kit does not bind a specific host by default. Probe starts no process by default; only when both `--allow-host-spawn --host-executable <absolute-path>` are given is the frozen version vector executed.
|
|
112
|
+
The Profile must be provided explicitly; Kit does not bind a specific host by default. Canonical host IDs may resolve only aliases declared by the finite registered Profile set. Probe starts no process by default; only when both `--allow-host-spawn --host-executable <absolute-path>` are given is the frozen version vector executed. Local install and update use an explicit authorization reference plus the existing contained publication primitives; uninstall is rejected with `manual-recovery-required` because Foundation has no safe bound deletion primitive. Two registered hosts have trusted version drivers; Kimi Code, WorkBuddy, CodeBuddy, and DeepSeek Harness expose independent manual facts; Qoder is `unsupported`. Adapter source only accepts declared text closures; binary projection is not supported; see the [host capability matrix](../../docs/reference/host-capability-matrix.md) and registered Profiles.
|
|
111
113
|
|
|
112
114
|
## Typical Use Cases
|
|
113
115
|
|
|
@@ -169,7 +171,7 @@ This package must not perform git init, commit, push, tag, stash, branch switch,
|
|
|
169
171
|
### Do not use when
|
|
170
172
|
|
|
171
173
|
- You need auto-fix (`check` does not fix), or auto-migration (`adopt-plan` writes no files).
|
|
172
|
-
- You need host
|
|
174
|
+
- You need remote host publication, automatic trust confirmation, uninstall deletion, or a full Qoder driver (explicitly unsupported).
|
|
173
175
|
- You need a stable Quickstart API or expect the candidate helper to bypass `runProjection` authorization.
|
|
174
176
|
|
|
175
177
|
### Capability selection
|
|
@@ -180,7 +182,8 @@ This package must not perform git init, commit, push, tag, stash, branch switch,
|
|
|
180
182
|
- `foundation.kit.check`: nine check classes, diagnosis only, no fix.
|
|
181
183
|
- `foundation.kit.report`: projection/check report sub-action orchestration.
|
|
182
184
|
- `foundation.kit.git-probe`: read-only whitelisted Git status probe.
|
|
183
|
-
- `foundation.kit.host`: describe/build/probe/plan, apply
|
|
185
|
+
- `foundation.kit.host`: describe/build/probe/plan plus authorized, digest-bound local install/update through `applyHostPlan`; Kit CLI apply, generic or remote apply, and deleting uninstall remain rejected.
|
|
186
|
+
- `verifyHostPeers` is a thin read-only host entry over Harness peer adapter verification; it does not write peer directories or add a fifth command.
|
|
184
187
|
- `foundation.kit.licensing`: Profile authorization-data loading and generation.
|
|
185
188
|
- `foundation.kit.identity-check`: identity-drift and Profile-consistency checks.
|
|
186
189
|
- `foundation.kit.cli`: four-command dispatch and mutation-flag entry rejection.
|
|
@@ -215,12 +218,12 @@ This package must not perform git init, commit, push, tag, stash, branch switch,
|
|
|
215
218
|
### Route elsewhere when
|
|
216
219
|
|
|
217
220
|
- Remote publish: route to release-skill.
|
|
218
|
-
- host
|
|
221
|
+
- remote host publication, automatic trust confirmation, and uninstall deletion: explicitly unsupported; local install/update are limited to the registered plan API.
|
|
219
222
|
- Business state machine / migration execution: stays with the caller or a later version.
|
|
220
223
|
|
|
221
224
|
### Machine-readable sources
|
|
222
225
|
|
|
223
226
|
- Public capability catalog: [`capability-catalog.json`](https://ifoohoo.github.io/skill-family-engineering-kit/agents/capability-catalog.json) (`foundation.kit.*` entries).
|
|
224
227
|
- Package-local source: `src/*.mjs`.
|
|
225
|
-
- Package-local candidate source: `candidate/*`; public
|
|
228
|
+
- Package-local candidate source: `candidate/*`; canonical public imports: `skill-family-engineering-kit/quickstart-profile`, `/adoption`, and `/skill-naming`; historical migration alias: `skill-family-engineering-kit/candidate/quickstart-profile`.
|
|
226
229
|
<!-- agent-quick-reference:end -->
|
package/README.zh-CN.md
CHANGED
|
@@ -5,27 +5,29 @@
|
|
|
5
5
|
|
|
6
6
|
# skill-family-engineering-kit
|
|
7
7
|
|
|
8
|
-
<!-- release-skill:release-version: 0.
|
|
8
|
+
<!-- release-skill:release-version: 0.10.0 -->
|
|
9
9
|
|
|
10
10
|
开发与 CI 阶段使用的工程工具包。**恰好四个**顶层命令,没有第五个:
|
|
11
11
|
|
|
12
12
|
<!-- release-skill:managed:start id=latest-release -->
|
|
13
|
-
**0.
|
|
13
|
+
**0.10.0** (2026-08-24)
|
|
14
14
|
|
|
15
|
-
Engineering Kit 0.
|
|
15
|
+
Engineering Kit 0.10.0 为历史 candidate 提供职责明确的规范入口,增加受限的跨平台宿主身份、探针和本地生命周期能力,并提供同级适配器只读验证薄入口。
|
|
16
16
|
|
|
17
17
|
**新增**
|
|
18
18
|
|
|
19
|
-
-
|
|
20
|
-
-
|
|
19
|
+
- 新增 skill-family-engineering-kit/quickstart-profile、/adoption 与 /skill-naming 规范导出。
|
|
20
|
+
- 增加有限 Profile alias 解析、非 driver 宿主的独立手动 probe fact 和显式本地 install/update 计划;uninstall 仍要求人工恢复。
|
|
21
|
+
- 新增 `verifyHostPeers`,只包装 Harness 的 peer 验证,不增加第五个顶层命令,也不写入 peer 目录。
|
|
21
22
|
|
|
22
23
|
**变更**
|
|
23
24
|
|
|
24
|
-
-
|
|
25
|
+
- 历史 Quickstart candidate 导出继续作为同源迁移别名,Kit 四命令边界不变。
|
|
26
|
+
- 只编译一套规范 Quickstart 与批量校验 Schema;历史和规范 ID 指向同一 standalone validator。
|
|
25
27
|
|
|
26
28
|
**升级说明**
|
|
27
29
|
|
|
28
|
-
|
|
30
|
+
消费者应把三个包的精确 pin 更新到 0.10.0,并把导入与 Schema ID 一次迁移到规范身份。以后仅晋升成熟度标签时不另加 Bundle 重建要求;包身份、来源摘要或 provenance 变化仍按既有投影合同处理。
|
|
29
31
|
<!-- release-skill:managed:end id=latest-release -->
|
|
30
32
|
|
|
31
33
|
| 命令 | 用途 | 副作用 |
|
|
@@ -46,7 +48,7 @@ Kit 是「工程阶段」层,依赖 Harness 与 Contracts。它只做四件事
|
|
|
46
48
|
## 安装和最小示例
|
|
47
49
|
|
|
48
50
|
```sh
|
|
49
|
-
npm install --save-dev skill-family-engineering-kit@0.
|
|
51
|
+
npm install --save-dev skill-family-engineering-kit@0.10.0
|
|
50
52
|
npm exec -- skill-family-kit --help
|
|
51
53
|
npm exec -- skill-family-kit scaffold --root <empty-dir> --project-id my-project
|
|
52
54
|
npm exec -- skill-family-kit adopt-plan --root <repo>
|
|
@@ -54,7 +56,7 @@ npm exec -- skill-family-kit projection --root <repo>
|
|
|
54
56
|
npm exec -- skill-family-kit check --root <repo>
|
|
55
57
|
```
|
|
56
58
|
|
|
57
|
-
以上四条命令分别覆盖生成骨架、只读盘点、受管投影与诊断;零安装形式可用 `npm exec --package=skill-family-engineering-kit@0.
|
|
59
|
+
以上四条命令分别覆盖生成骨架、只读盘点、受管投影与诊断;零安装形式可用 `npm exec --package=skill-family-engineering-kit@0.10.0 -- skill-family-kit --help`。
|
|
58
60
|
|
|
59
61
|
### 公共 Profile SPI
|
|
60
62
|
|
|
@@ -64,7 +66,7 @@ npm exec -- skill-family-kit check --root <repo>
|
|
|
64
66
|
|
|
65
67
|
`verifyProfile({ profileRoot })` 只读处理 Profile descriptor;项目根声明使用对应的 `verifyProjectProfile({ projectRoot, profileRelPath? })`。两个入口遇到无效输入都以稳定结果码失败关闭,不会执行 Profile 提供的文件;Profile 的领域含义仍由调用方负责。
|
|
66
68
|
|
|
67
|
-
provider Profile descriptor 从 Foundation 0.
|
|
69
|
+
provider Profile descriptor 从 Foundation 0.9.0 与 Contracts 1.9.0 升级到 Foundation 0.10.0 时,须把自身的 `base.contractsVersion` 字段更新为 `1.10.0`。Kit 四个顶层命令与 Profile SPI 的形状保持不变。
|
|
68
70
|
|
|
69
71
|
### 报告子动作
|
|
70
72
|
|
|
@@ -84,7 +86,7 @@ import { parseSourceAuthorityReceipt } from "skill-family-contracts";
|
|
|
84
86
|
import {
|
|
85
87
|
buildQuickstartProfileProjection,
|
|
86
88
|
QUICKSTART_PROFILE_TARGET_PREFIX,
|
|
87
|
-
} from "skill-family-engineering-kit/
|
|
89
|
+
} from "skill-family-engineering-kit/quickstart-profile";
|
|
88
90
|
|
|
89
91
|
const authority = parseSourceAuthorityReceipt(receipt, actualSubjects);
|
|
90
92
|
if (!authority.valid) throw new Error(authority.errorCode);
|
|
@@ -97,7 +99,7 @@ const projection = await buildQuickstartProfileProjection({
|
|
|
97
99
|
|
|
98
100
|
`receipt` 与 `actualSubjects` 由调用方在 Kit 外取得。Contracts 先精确核对两者,既有 builder 再接收返回的 `sourceRepository` 与 `sourceBaseCommit`;Kit 不解析发布计划,也不发现来源权威。生成的 Bundle 按 Schema `$id` 选择 standalone validator,离线运行时不依赖 Foundation 包、`node_modules` 或 Ajv。provenance 绑定 Foundation 来源、消费者 Schema、payload 字节、工具版本,以及实际进入 Bundle 的代码许可证。
|
|
99
101
|
|
|
100
|
-
以上辅助函数不写文件,也不增加第五个顶层命令。调用方需要把返回的 `manifest` 交给稳定的 `runProjection` API
|
|
102
|
+
以上辅助函数不写文件,也不增加第五个顶层命令。调用方需要把返回的 `manifest` 交给稳定的 `runProjection` API。该能力仍是 **candidate**,必须精确锁定三个包。0.10.0 新增上面的规范入口;历史 `/candidate/quickstart-profile` 入口作为同源迁移别名继续可用。adoption 与 skill naming 也分别提供 `skill-family-engineering-kit/adoption` 和 `skill-family-engineering-kit/skill-naming` 规范入口。消费者迁移一次后,未来晋升 stable 不再二次迁移。仍依赖 v1 依赖闭包 Bundle 的接入必须继续精确锁定 `0.2.1`。
|
|
101
103
|
|
|
102
104
|
### 宿主子动作
|
|
103
105
|
|
|
@@ -108,7 +110,7 @@ npm exec -- skill-family-kit scaffold host-build --root <workspace> --host <id>
|
|
|
108
110
|
npm exec -- skill-family-kit adopt-plan host-plan --root <workspace> --host <id> --path-category <id> --build-manifest <relpath> --probe-facts <relpath> --hosts-root <dir>
|
|
109
111
|
```
|
|
110
112
|
|
|
111
|
-
Profile 必须显式提供,Kit
|
|
113
|
+
Profile 必须显式提供,Kit 不默认绑定具体宿主。规范宿主 ID 只能解析已登记有限 Profile 中声明的 alias。probe 默认不启动进程;只有同时给出 `--allow-host-spawn --host-executable <绝对路径>` 才执行冻结版本向量。本地 install/update 通过显式授权引用和既有受收容发布原语执行;uninstall 因没有安全的绑定删除原语而返回 `manual-recovery-required`,不删除文件。Claude/Codex 使用受信版本 driver;Kimi Code、WorkBuddy、CodeBuddy 和 DeepSeek Harness 只提供独立手动事实;Qoder 为 `unsupported`。adapter source 只接受已声明的文本闭包,不支持二进制投影;精确宿主支持矩阵见 [宿主能力矩阵](../../docs/reference/host-capability-matrix.md) 与已登记 Profile。
|
|
112
114
|
|
|
113
115
|
## 典型使用场景
|
|
114
116
|
|
|
@@ -170,7 +172,7 @@ projection 只写同时满足两个条件的路径:manifest 列出,且目标
|
|
|
170
172
|
### Do not use when
|
|
171
173
|
|
|
172
174
|
- 需要自动修复(`check` 不修复)、自动迁移(`adopt-plan` 不写文件)。
|
|
173
|
-
-
|
|
175
|
+
- 需要远端宿主发布、自动信任、删除式 uninstall 或 Qoder 完整 driver(明确 unsupported)。
|
|
174
176
|
- 需要稳定 Quickstart API,或希望 candidate 辅助函数绕过 `runProjection` 授权。
|
|
175
177
|
|
|
176
178
|
### Capability selection
|
|
@@ -181,7 +183,8 @@ projection 只写同时满足两个条件的路径:manifest 列出,且目标
|
|
|
181
183
|
- `foundation.kit.check`:九类检查只诊断不修复。
|
|
182
184
|
- `foundation.kit.report`:projection/check report 子动作编排。
|
|
183
185
|
- `foundation.kit.git-probe`:只读白名单 Git 状态探测。
|
|
184
|
-
- `foundation.kit.host
|
|
186
|
+
- `foundation.kit.host`:有限身份解析、describe/build/probe/plan,以及受授权的本地 install/update;删除式 uninstall 和远端 apply 稳定拒绝。
|
|
187
|
+
- `verifyHostPeers` 是 Harness 同级适配器验证的薄只读宿主入口,不写入 peer 目录,也不增加第五个顶层命令。
|
|
185
188
|
- `foundation.kit.licensing`:Profile 授权数据加载与生成。
|
|
186
189
|
- `foundation.kit.identity-check`:身份漂移与 Profile 一致性检查。
|
|
187
190
|
- `foundation.kit.cli`:四命令分派与变更旗标入口拒绝。
|
|
@@ -216,12 +219,12 @@ projection 只写同时满足两个条件的路径:manifest 列出,且目标
|
|
|
216
219
|
### Route elsewhere when
|
|
217
220
|
|
|
218
221
|
- 远端发布:转 release-skill。
|
|
219
|
-
- host apply
|
|
222
|
+
- 远端 host apply、自动信任与删除式 uninstall:明确 unsupported;本地 install/update 仅限已登记计划。
|
|
220
223
|
- 业务状态机/迁移执行:留在调用方或后续版本。
|
|
221
224
|
|
|
222
225
|
### Machine-readable sources
|
|
223
226
|
|
|
224
227
|
- 公开能力目录:[`capability-catalog.json`](https://ifoohoo.github.io/skill-family-engineering-kit/agents/capability-catalog.json)(`foundation.kit.*` 条目)。
|
|
225
228
|
- 包内源:`src/*.mjs`。
|
|
226
|
-
- 包内 Candidate 源:`candidate
|
|
229
|
+
- 包内 Candidate 源:`candidate/*`;规范公共导入:`skill-family-engineering-kit/quickstart-profile`、`/adoption` 与 `/skill-naming`;历史迁移别名:`skill-family-engineering-kit/candidate/quickstart-profile`。
|
|
227
230
|
<!-- agent-quick-reference:end -->
|
|
@@ -7,11 +7,12 @@ import {
|
|
|
7
7
|
canonicalJson,
|
|
8
8
|
} from "skill-family-contracts";
|
|
9
9
|
import {
|
|
10
|
+
HISTORICAL_CANDIDATE_SCHEMA_ID_MIGRATIONS,
|
|
10
11
|
QUICKSTART_PROFILE_ID,
|
|
11
12
|
QUICKSTART_PROFILE_VERSION,
|
|
12
|
-
} from "skill-family-contracts/
|
|
13
|
+
} from "skill-family-contracts/quickstart-profile";
|
|
13
14
|
import { digestBytes } from "skill-family-harness-node";
|
|
14
|
-
import { verifyConsumerSchemaInventory } from "skill-family-harness-node/
|
|
15
|
+
import { verifyConsumerSchemaInventory } from "skill-family-harness-node/quickstart-profile";
|
|
15
16
|
|
|
16
17
|
/**
|
|
17
18
|
* Candidate Quickstart Profile v2 offline bundle builder (unstable).
|
|
@@ -79,7 +80,7 @@ const ADDITIONAL_FOUNDATION_SCHEMA_FILES = Object.freeze([
|
|
|
79
80
|
|
|
80
81
|
const HARNESS_IMPORT_MAP = new Map([
|
|
81
82
|
["skill-family-contracts", "../contracts/index.mjs"],
|
|
82
|
-
["skill-family-contracts/
|
|
83
|
+
["skill-family-contracts/quickstart-profile", "../contracts-candidate/index.mjs"],
|
|
83
84
|
["../src/closure.mjs", "./closure.mjs"],
|
|
84
85
|
["../src/errors.mjs", "./errors.mjs"],
|
|
85
86
|
["../src/paths.mjs", "./paths.mjs"],
|
|
@@ -110,7 +111,7 @@ const HARNESS_TOKEN_LOCK_IMPORT_MAP = new Map([
|
|
|
110
111
|
|
|
111
112
|
const ADOPTION_IMPORT_MAP = new Map([
|
|
112
113
|
["../src/migration.mjs", "./runtime/kit/migration.mjs"],
|
|
113
|
-
["skill-family-harness-node/
|
|
114
|
+
["skill-family-harness-node/quickstart-profile", "./runtime/harness/quickstart-profile.mjs"],
|
|
114
115
|
]);
|
|
115
116
|
|
|
116
117
|
const DIALECT_URIS = Object.freeze({
|
|
@@ -1043,6 +1044,32 @@ function standaloneMapSource({ entries2020, entriesDraft07 }) {
|
|
|
1043
1044
|
return lines.join("\n");
|
|
1044
1045
|
}
|
|
1045
1046
|
|
|
1047
|
+
function standaloneEntriesWithHistoricalAliases(schemaIds) {
|
|
1048
|
+
const canonicalEntries = [...schemaIds]
|
|
1049
|
+
.sort()
|
|
1050
|
+
.map((schemaId, index) => ({ schemaId, exportName: standaloneExportName(index) }));
|
|
1051
|
+
const canonicalById = new Map(
|
|
1052
|
+
canonicalEntries.map((entry) => [entry.schemaId, entry]),
|
|
1053
|
+
);
|
|
1054
|
+
const aliases = Object.entries(HISTORICAL_CANDIDATE_SCHEMA_ID_MIGRATIONS)
|
|
1055
|
+
.map(([legacyId, canonicalId]) => {
|
|
1056
|
+
if (canonicalById.has(legacyId)) {
|
|
1057
|
+
throw new Error(
|
|
1058
|
+
`historical candidate schema $id collides with a canonical schema: ${legacyId}`,
|
|
1059
|
+
);
|
|
1060
|
+
}
|
|
1061
|
+
const canonical = canonicalById.get(canonicalId);
|
|
1062
|
+
if (!canonical) {
|
|
1063
|
+
throw new Error(
|
|
1064
|
+
`historical candidate schema migration target is absent from the Bundle: ${canonicalId}`,
|
|
1065
|
+
);
|
|
1066
|
+
}
|
|
1067
|
+
return { schemaId: legacyId, exportName: canonical.exportName };
|
|
1068
|
+
});
|
|
1069
|
+
return [...canonicalEntries, ...aliases]
|
|
1070
|
+
.sort((a, b) => (a.schemaId < b.schemaId ? -1 : a.schemaId > b.schemaId ? 1 : 0));
|
|
1071
|
+
}
|
|
1072
|
+
|
|
1046
1073
|
function validatorsSource() {
|
|
1047
1074
|
return `import standaloneValidators from "./runtime/generated/standalone-map.mjs";
|
|
1048
1075
|
import { findNonJsonValue, normalizeValidationError } from "./runtime/json-boundary.mjs";
|
|
@@ -1292,6 +1319,14 @@ export async function buildQuickstartProfileProjection({
|
|
|
1292
1319
|
|
|
1293
1320
|
const graph = buildSchemaGraph(consumerRecords, foundationSchemaDocuments);
|
|
1294
1321
|
|
|
1322
|
+
for (const record of consumerRecords) {
|
|
1323
|
+
if (Object.hasOwn(HISTORICAL_CANDIDATE_SCHEMA_ID_MIGRATIONS, record.document.$id)) {
|
|
1324
|
+
throw buildError(
|
|
1325
|
+
`consumer schema $id is reserved for a historical Foundation identity: ${record.document.$id}`,
|
|
1326
|
+
);
|
|
1327
|
+
}
|
|
1328
|
+
}
|
|
1329
|
+
|
|
1295
1330
|
// --- Standalone validator generation (Ajv build dependency only). ---
|
|
1296
1331
|
const fromContracts = createRequire(pathToFileURL(path.join(contractsRoot, "package.json")));
|
|
1297
1332
|
const ajvEntry = fromContracts.resolve("ajv");
|
|
@@ -1322,6 +1357,10 @@ export async function buildQuickstartProfileProjection({
|
|
|
1322
1357
|
...foundationSchemaDocuments.map((entry) => entry.document),
|
|
1323
1358
|
...graph["2020-12"].map((record) => record.document),
|
|
1324
1359
|
];
|
|
1360
|
+
const generated2020SchemaIds = [
|
|
1361
|
+
...schemas2020.map((schema) => schema.$id),
|
|
1362
|
+
"https://contracts.skill-family.example/quickstart-profile/v2/harness-surface-detectors.json",
|
|
1363
|
+
];
|
|
1325
1364
|
const generated2020 = await generateStandaloneModule({
|
|
1326
1365
|
AjvCtor: Ajv2020,
|
|
1327
1366
|
schemas: schemas2020,
|
|
@@ -1329,10 +1368,7 @@ export async function buildQuickstartProfileProjection({
|
|
|
1329
1368
|
codegenTemplate,
|
|
1330
1369
|
standaloneCode,
|
|
1331
1370
|
isValidDateTime,
|
|
1332
|
-
schemaIds:
|
|
1333
|
-
...schemas2020.map((schema) => schema.$id),
|
|
1334
|
-
"https://contracts.skill-family.example/candidate/quickstart-profile/v2/harness-surface-detectors.json",
|
|
1335
|
-
],
|
|
1371
|
+
schemaIds: generated2020SchemaIds,
|
|
1336
1372
|
});
|
|
1337
1373
|
const schemasDraft07 = graph["draft-07"].map((record) => record.document);
|
|
1338
1374
|
const withDraft07 = schemasDraft07.length > 0;
|
|
@@ -1487,12 +1523,7 @@ export async function buildQuickstartProfileProjection({
|
|
|
1487
1523
|
setText("runtime/generated/validate-draft-07.mjs", generatedDraft07);
|
|
1488
1524
|
}
|
|
1489
1525
|
const sortById = (a, b) => (a.$id < b.$id ? -1 : 1);
|
|
1490
|
-
const entries2020 =
|
|
1491
|
-
...schemas2020.map((schema) => schema.$id),
|
|
1492
|
-
"https://contracts.skill-family.example/candidate/quickstart-profile/v2/harness-surface-detectors.json",
|
|
1493
|
-
]
|
|
1494
|
-
.sort()
|
|
1495
|
-
.map((schemaId, index) => ({ schemaId, exportName: standaloneExportName(index) }));
|
|
1526
|
+
const entries2020 = standaloneEntriesWithHistoricalAliases(generated2020SchemaIds);
|
|
1496
1527
|
const entriesDraft07 = [...schemasDraft07]
|
|
1497
1528
|
.sort(sortById)
|
|
1498
1529
|
.map((schema, index) => ({ schemaId: schema.$id, exportName: standaloneExportName(index) }));
|