harnessed 1.0.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.
Files changed (51) hide show
  1. package/LICENSE +201 -0
  2. package/NOTICE +20 -0
  3. package/README.md +178 -0
  4. package/config-templates/README.md +21 -0
  5. package/config-templates/hooks/.gitkeep +0 -0
  6. package/dist/cli.d.ts +1 -0
  7. package/dist/cli.mjs +4653 -0
  8. package/dist/cli.mjs.map +1 -0
  9. package/dist/index.d.ts +3 -0
  10. package/dist/index.mjs +10 -0
  11. package/dist/index.mjs.map +1 -0
  12. package/dist/schemas/index.d.ts +47 -0
  13. package/dist/schemas/index.mjs +384 -0
  14. package/dist/schemas/index.mjs.map +1 -0
  15. package/manifests/README.md +23 -0
  16. package/manifests/SCHEMA.md +180 -0
  17. package/manifests/aliases.yaml +14 -0
  18. package/manifests/cc-hooks/dashboard-autospawn.yaml +45 -0
  19. package/manifests/skill-packs/.gitkeep +0 -0
  20. package/manifests/skill-packs/anthropics-skills-pptx.yaml +46 -0
  21. package/manifests/skill-packs/anthropics-skills-slide-deck.yaml +46 -0
  22. package/manifests/skill-packs/frontend-design.yaml +63 -0
  23. package/manifests/skill-packs/gsd.yaml +43 -0
  24. package/manifests/skill-packs/gstack.yaml +40 -0
  25. package/manifests/skill-packs/karpathy-skills.yaml +64 -0
  26. package/manifests/skill-packs/mattpocock-skills.yaml +40 -0
  27. package/manifests/skill-packs/planning-with-files.yaml +45 -0
  28. package/manifests/skill-packs/ui-ux-pro-max.yaml +61 -0
  29. package/manifests/tools/.gitkeep +0 -0
  30. package/manifests/tools/chrome-devtools-mcp.yaml +44 -0
  31. package/manifests/tools/ctx7.yaml +39 -0
  32. package/manifests/tools/exa-mcp.yaml +39 -0
  33. package/manifests/tools/playwright-test.yaml +47 -0
  34. package/manifests/tools/ralph-loop.yaml +46 -0
  35. package/manifests/tools/superpowers.yaml +42 -0
  36. package/manifests/tools/tavily-mcp.yaml +39 -0
  37. package/package.json +96 -0
  38. package/routing/.gitkeep +0 -0
  39. package/routing/README.md +22 -0
  40. package/routing/SCHEMA.md +199 -0
  41. package/routing/decision_rules.yaml +387 -0
  42. package/routing/plan-review-schema.yaml +50 -0
  43. package/schemas/.gitkeep +0 -0
  44. package/schemas/README.md +33 -0
  45. package/schemas/manifest.v1.schema.json +1107 -0
  46. package/workflows/.gitkeep +0 -0
  47. package/workflows/README.md +23 -0
  48. package/workflows/SCHEMA.md +157 -0
  49. package/workflows/execute-task/SKILL.md +70 -0
  50. package/workflows/execute-task/phases.yaml +27 -0
  51. package/workflows/plan-feature/workflow.yaml +40 -0
@@ -0,0 +1,3 @@
1
+ declare const VERSION: string;
2
+
3
+ export { VERSION };
package/dist/index.mjs ADDED
@@ -0,0 +1,10 @@
1
+ // package.json
2
+ var package_default = {
3
+ version: "1.0.0"};
4
+
5
+ // src/index.ts
6
+ var VERSION = package_default.version;
7
+
8
+ export { VERSION };
9
+ //# sourceMappingURL=index.mjs.map
10
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../package.json","../src/index.ts"],"names":[],"mappings":";AAAA,IAAA,eAAA,GAAA;AAAA,EAEE,OAAA,EAAW,OA6Fb,CAAA;;;AC1FO,IAAM,UAAU,eAAA,CAAI","file":"index.mjs","sourcesContent":["{\n \"name\": \"harnessed\",\n \"version\": \"1.0.0\",\n \"description\": \"AI coding harness package manager + composition orchestrator\",\n \"type\": \"module\",\n \"license\": \"Apache-2.0\",\n \"author\": \"easyinplay\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"https://github.com/easyinplay/harnessed.git\"\n },\n \"homepage\": \"https://github.com/easyinplay/harnessed#readme\",\n \"bugs\": \"https://github.com/easyinplay/harnessed/issues\",\n \"keywords\": [\n \"claude-code\",\n \"ai-harness\",\n \"package-manager\",\n \"composition\",\n \"skill-pack\",\n \"mcp\",\n \"orchestrator\"\n ],\n \"engines\": {\n \"node\": \">=22.0.0\"\n },\n \"packageManager\": \"pnpm@10.12.0\",\n \"bin\": {\n \"harnessed\": \"./dist/cli.mjs\"\n },\n \"main\": \"./dist/index.mjs\",\n \"types\": \"./dist/index.d.ts\",\n \"exports\": {\n \".\": {\n \"types\": \"./dist/index.d.ts\",\n \"import\": \"./dist/index.mjs\",\n \"default\": \"./dist/index.mjs\"\n },\n \"./schemas\": {\n \"types\": \"./dist/schemas/index.d.ts\",\n \"import\": \"./dist/schemas/index.mjs\"\n },\n \"./package.json\": \"./package.json\"\n },\n \"files\": [\n \"dist\",\n \"manifests\",\n \"workflows\",\n \"routing\",\n \"config-templates\",\n \"schemas\",\n \"README.md\",\n \"LICENSE\",\n \"NOTICE\"\n ],\n \"scripts\": {\n \"dev\": \"tsup --watch\",\n \"build\": \"tsc --noEmit && tsup\",\n \"build:schema\": \"node ./scripts/build-schema.mjs\",\n \"validate:schema\": \"node ./scripts/validate-schema.mjs\",\n \"typecheck\": \"tsc --noEmit\",\n \"test\": \"vitest run --passWithNoTests\",\n \"test:watch\": \"vitest\",\n \"test:coverage\": \"vitest run --coverage --passWithNoTests\",\n \"bench\": \"vitest bench --run\",\n \"lint\": \"biome check .\",\n \"lint:fix\": \"biome check --write .\",\n \"format\": \"biome format --write .\"\n },\n \"dependencies\": {\n \"@anthropic-ai/claude-agent-sdk\": \"0.3.142\",\n \"@clack/prompts\": \"^0.10.1\",\n \"@sinclair/typebox\": \"^0.34.49\",\n \"ajv\": \"^8.20.0\",\n \"ajv-errors\": \"^3.0.0\",\n \"ajv-formats\": \"^3.0.1\",\n \"commander\": \"^13.0.0\",\n \"diff\": \"^9.0.0\",\n \"picocolors\": \"^1.1.1\",\n \"proper-lockfile\": \"^4.1.2\",\n \"yaml\": \"^2.9.0\"\n },\n \"devDependencies\": {\n \"@biomejs/biome\": \"^2.0.0\",\n \"@types/node\": \"^22.10.0\",\n \"@types/proper-lockfile\": \"^4.1.4\",\n \"@vitest/coverage-v8\": \"^4.0.0\",\n \"tsup\": \"^8.3.0\",\n \"typescript\": \"^5.6.0\",\n \"vitest\": \"^4.0.0\"\n },\n \"pnpm\": {\n \"onlyBuiltDependencies\": [\n \"esbuild\"\n ]\n }\n}\n","// Main library entry — re-exports public APIs.\n// phase 1.1 batch 1: skeleton only; schema validator wired in batch 2 (T3+).\n\nimport pkg from '../package.json' with { type: 'json' }\n\nexport const VERSION = pkg.version\n"]}
@@ -0,0 +1,47 @@
1
+ declare const ManifestSchema: {
2
+ $id: string;
3
+ title: string;
4
+ description: string;
5
+ allOf: {
6
+ if: {
7
+ type: string;
8
+ properties: {
9
+ spec: {
10
+ type: string;
11
+ properties: {
12
+ type: {
13
+ const: string;
14
+ };
15
+ };
16
+ required: string[];
17
+ };
18
+ };
19
+ required: string[];
20
+ };
21
+ then: {
22
+ type: string;
23
+ properties: {
24
+ spec: {
25
+ type: string;
26
+ properties: {
27
+ install: {
28
+ type: string;
29
+ properties: {
30
+ method: {
31
+ enum: string[];
32
+ };
33
+ };
34
+ required: string[];
35
+ };
36
+ };
37
+ required: string[];
38
+ };
39
+ };
40
+ required: string[];
41
+ };
42
+ }[];
43
+ };
44
+
45
+ declare const SCHEMA_VERSION = "v1";
46
+
47
+ export { ManifestSchema, SCHEMA_VERSION };
@@ -0,0 +1,384 @@
1
+ import { Type } from '@sinclair/typebox';
2
+
3
+ // src/manifest/schema/index.ts
4
+ var ApiVersion = Type.Literal("harnessed/v1");
5
+ var Kind = Type.Literal("Manifest");
6
+ var SpdxLicense = Type.Union([
7
+ Type.Literal("MIT"),
8
+ Type.Literal("Apache-2.0"),
9
+ Type.Literal("BSD-3-Clause"),
10
+ Type.Literal("ISC"),
11
+ Type.Literal("0BSD"),
12
+ Type.Literal("MIT-0"),
13
+ Type.Literal("anthropics-official")
14
+ ]);
15
+ var LicenseSource = Type.Union([
16
+ Type.Literal("README"),
17
+ Type.Literal("registry"),
18
+ Type.Literal("none"),
19
+ Type.Literal("anthropics-official")
20
+ ]);
21
+ var Upstream = Type.Object(
22
+ {
23
+ source: Type.String({ minLength: 1 }),
24
+ homepage: Type.String({ format: "uri" }),
25
+ repository: Type.String({ format: "uri" }),
26
+ license: SpdxLicense,
27
+ license_source: Type.Optional(LicenseSource),
28
+ notice: Type.String({ minLength: 1, maxLength: 500 })
29
+ },
30
+ { additionalProperties: false }
31
+ );
32
+ var MetadataSchema = Type.Object(
33
+ {
34
+ name: Type.String({ pattern: "^[a-z0-9][a-z0-9-]*$", minLength: 1 }),
35
+ display_name: Type.Optional(Type.String()),
36
+ description: Type.String({ minLength: 1, maxLength: 120 }),
37
+ upstream: Upstream
38
+ },
39
+ { additionalProperties: false }
40
+ );
41
+ var HookEvent = Type.Union([
42
+ Type.Literal("SessionStart"),
43
+ Type.Literal("UserPromptSubmit"),
44
+ Type.Literal("PreToolUse"),
45
+ Type.Literal("PostToolUse")
46
+ ]);
47
+ var CcHookAdd = Type.Object(
48
+ {
49
+ method: Type.Literal("cc-hook-add"),
50
+ cmd: Type.String({ minLength: 1 }),
51
+ // audit-trail (the bash invocation registered)
52
+ // cwd/env required by lib/spawn.ts discriminated-union access (sister 6 method
53
+ // shape parity — even though cc-hook-add does not spawn, generic spawn helper
54
+ // expects these fields on the install union).
55
+ cwd: Type.Optional(Type.String()),
56
+ env: Type.Optional(Type.Record(Type.String(), Type.String())),
57
+ hook_event: HookEvent,
58
+ hook_matcher: Type.Optional(Type.String()),
59
+ hook_command: Type.String({ minLength: 1 }),
60
+ idempotent_check: Type.String({ minLength: 1 })
61
+ },
62
+ { additionalProperties: false }
63
+ );
64
+ var GIT_REF_PATTERN = "^([a-f0-9]{7,40}|v?\\d+\\.\\d+\\.\\d+([.-][\\w.-]+)?)$";
65
+ var REPO_PATTERN = "^[a-zA-Z0-9_.-]+/[a-zA-Z0-9_.-]+$";
66
+ var CcPluginMarketplace = Type.Object(
67
+ {
68
+ method: Type.Literal("cc-plugin-marketplace"),
69
+ cmd: Type.String({ minLength: 1 }),
70
+ cwd: Type.Optional(Type.String()),
71
+ env: Type.Optional(Type.Record(Type.String(), Type.String())),
72
+ args: Type.Optional(Type.Record(Type.String(), Type.Unknown())),
73
+ git_ref: Type.String({ minLength: 1, pattern: GIT_REF_PATTERN }),
74
+ idempotent_check: Type.String({ minLength: 1 }),
75
+ // ADR 0005 — third-party marketplace structured metadata (optional).
76
+ marketplace_source: Type.Optional(
77
+ Type.Object(
78
+ {
79
+ source: Type.Literal("github"),
80
+ repo: Type.String({ pattern: REPO_PATTERN, minLength: 3 })
81
+ },
82
+ { additionalProperties: false }
83
+ )
84
+ )
85
+ },
86
+ { additionalProperties: false }
87
+ );
88
+ var GIT_REF_PATTERN2 = "^([a-f0-9]{7,40}|v?\\d+\\.\\d+\\.\\d+([.-][\\w.-]+)?)$";
89
+ var GitCloneWithSetup = Type.Object(
90
+ {
91
+ method: Type.Literal("git-clone-with-setup"),
92
+ cmd: Type.String({ minLength: 1 }),
93
+ cwd: Type.Optional(Type.String()),
94
+ env: Type.Optional(Type.Record(Type.String(), Type.String())),
95
+ args: Type.Optional(Type.Record(Type.String(), Type.Unknown())),
96
+ git_ref: Type.String({ minLength: 1, pattern: GIT_REF_PATTERN2 }),
97
+ idempotent_check: Type.String({ minLength: 1 })
98
+ },
99
+ { additionalProperties: false }
100
+ );
101
+ var McpHttpAdd = Type.Object(
102
+ {
103
+ method: Type.Literal("mcp-http-add"),
104
+ cmd: Type.String({ minLength: 1 }),
105
+ cwd: Type.Optional(Type.String()),
106
+ env: Type.Optional(Type.Record(Type.String(), Type.String())),
107
+ args: Type.Optional(Type.Record(Type.String(), Type.Unknown())),
108
+ npm_version: Type.String({ minLength: 1 }),
109
+ idempotent_check: Type.String({ minLength: 1 })
110
+ },
111
+ { additionalProperties: false }
112
+ );
113
+ var McpStdioAdd = Type.Object(
114
+ {
115
+ method: Type.Literal("mcp-stdio-add"),
116
+ cmd: Type.String({ minLength: 1 }),
117
+ cwd: Type.Optional(Type.String()),
118
+ env: Type.Optional(Type.Record(Type.String(), Type.String())),
119
+ args: Type.Optional(Type.Record(Type.String(), Type.Unknown())),
120
+ npm_version: Type.String({ minLength: 1 }),
121
+ idempotent_check: Type.String({ minLength: 1 })
122
+ },
123
+ { additionalProperties: false }
124
+ );
125
+ var NpmCli = Type.Object(
126
+ {
127
+ method: Type.Literal("npm-cli"),
128
+ cmd: Type.String({ minLength: 1 }),
129
+ cwd: Type.Optional(Type.String()),
130
+ env: Type.Optional(Type.Record(Type.String(), Type.String())),
131
+ args: Type.Optional(Type.Record(Type.String(), Type.Unknown())),
132
+ npm_version: Type.String({ minLength: 1 }),
133
+ idempotent_check: Type.String({ minLength: 1 })
134
+ },
135
+ { additionalProperties: false }
136
+ );
137
+ var NpxSkillInstaller = Type.Object(
138
+ {
139
+ method: Type.Literal("npx-skill-installer"),
140
+ cmd: Type.String({ minLength: 1 }),
141
+ cwd: Type.Optional(Type.String()),
142
+ env: Type.Optional(Type.Record(Type.String(), Type.String())),
143
+ args: Type.Optional(Type.Record(Type.String(), Type.Unknown())),
144
+ npm_version: Type.String({ minLength: 1 }),
145
+ idempotent_check: Type.String({ minLength: 1 })
146
+ },
147
+ { additionalProperties: false }
148
+ );
149
+
150
+ // src/manifest/schema/installMethods/index.ts
151
+ var branches = [
152
+ CcPluginMarketplace,
153
+ GitCloneWithSetup,
154
+ NpxSkillInstaller,
155
+ NpmCli,
156
+ McpStdioAdd,
157
+ McpHttpAdd,
158
+ CcHookAdd
159
+ ];
160
+ var InstallSchema = {
161
+ type: "object",
162
+ discriminator: { propertyName: "method" },
163
+ required: ["method"],
164
+ properties: {
165
+ method: { type: "string" }
166
+ },
167
+ oneOf: branches
168
+ };
169
+ Type.Union([...branches]);
170
+
171
+ // src/manifest/schema/spec.ts
172
+ var TypeEnum = Type.Union([
173
+ Type.Literal("cc-plugin"),
174
+ Type.Literal("cc-skill-pack"),
175
+ Type.Literal("mcp-npm"),
176
+ Type.Literal("cli-npm"),
177
+ // Phase 2.4 W3 T3.1 (D-04 § 3.1 + R2.4.4 + B-22) — 5th type, 1:1 with install_type:'hook'.
178
+ // Lifecycle hooks registered to ~/.claude/settings.json (SessionStart / UserPromptSubmit /
179
+ // PreToolUse / PostToolUse) via the cc-hook-add install method.
180
+ Type.Literal("cc-hook")
181
+ ]);
182
+ var ComponentType = Type.Union([
183
+ Type.Literal("command"),
184
+ Type.Literal("behavior-rule"),
185
+ Type.Literal("mcp-tool"),
186
+ Type.Literal("cli-binary")
187
+ ]);
188
+ var Verify = Type.Object(
189
+ {
190
+ cmd: Type.String({ minLength: 1 }),
191
+ timeout_ms: Type.Optional(Type.Integer({ minimum: 100, maximum: 6e4 })),
192
+ expected_exit_code: Type.Optional(Type.Integer())
193
+ },
194
+ { additionalProperties: false }
195
+ );
196
+ var Uninstall = Type.Object(
197
+ {
198
+ cmd: Type.String({ minLength: 1 }),
199
+ cleanup_paths: Type.Optional(Type.Array(Type.String()))
200
+ },
201
+ { additionalProperties: false }
202
+ );
203
+ var Stability = Type.Union([
204
+ Type.Literal("stable"),
205
+ Type.Literal("beta"),
206
+ Type.Literal("unstable"),
207
+ Type.Literal("archived")
208
+ ]);
209
+ var FallbackAction = Type.Union([
210
+ Type.Literal("warn"),
211
+ Type.Literal("block"),
212
+ Type.Literal("use_alternative")
213
+ ]);
214
+ var UpstreamHealth = Type.Object(
215
+ {
216
+ stability: Stability,
217
+ last_check: Type.String({ format: "date" }),
218
+ last_known_good_version: Type.String({ minLength: 1 }),
219
+ fallback_action: FallbackAction,
220
+ alternative: Type.Optional(Type.String())
221
+ },
222
+ { additionalProperties: false }
223
+ );
224
+ var Platform = Type.Union([Type.Literal("linux"), Type.Literal("darwin"), Type.Literal("win32")]);
225
+ var Signature = Type.Object(
226
+ { sigstore_bundle: Type.String({ format: "uri" }) },
227
+ { additionalProperties: false }
228
+ );
229
+ var TestedWithVersions = Type.Object(
230
+ {
231
+ cc_versions: Type.Optional(Type.Array(Type.String())),
232
+ node_versions: Type.Optional(Type.Array(Type.String()))
233
+ },
234
+ { additionalProperties: false }
235
+ );
236
+ var Category = Type.Union([
237
+ Type.Literal("meta"),
238
+ Type.Literal("engineering"),
239
+ Type.Literal("design"),
240
+ Type.Literal("content"),
241
+ Type.Literal("testing"),
242
+ Type.Literal("search")
243
+ ]);
244
+ var InstallType = Type.Union([
245
+ Type.Literal("skill"),
246
+ Type.Literal("mcp"),
247
+ Type.Literal("npm"),
248
+ Type.Literal("git"),
249
+ // Phase 2.4 W3 T3.1 (D-04 § 3.1 + R2.4.4 + B-22) — 5th install_type, 1:1 with TypeEnum:'cc-hook'.
250
+ Type.Literal("hook")
251
+ ]);
252
+ var DecisionRules = Type.Object(
253
+ {
254
+ trigger: Type.Optional(Type.String({ minLength: 1 })),
255
+ default_expert: Type.Optional(Type.String({ minLength: 1 })),
256
+ arbitration_rule: Type.Optional(Type.String({ minLength: 1 })),
257
+ override_signals: Type.Optional(
258
+ Type.Array(
259
+ Type.Object(
260
+ {
261
+ phrase: Type.String({ minLength: 1 }),
262
+ use: Type.String({ minLength: 1 })
263
+ },
264
+ { additionalProperties: false }
265
+ )
266
+ )
267
+ ),
268
+ // Phase 2.3 W2 T2.5 — CD-3 negative-space hint mirror (B-17 per-manifest hint
269
+ // redundant guard layer; SSOT remains routing/decision_rules.yaml — D-04 lead).
270
+ // Additive optional; existing manifests unchanged (A7 守恒).
271
+ do_not_use_when: Type.Optional(Type.Array(Type.String({ minLength: 1 }), { minItems: 1 })),
272
+ if_rejected_use: Type.Optional(Type.String({ minLength: 1 }))
273
+ },
274
+ { additionalProperties: false }
275
+ );
276
+ var Phase = Type.Union([
277
+ Type.Literal("discuss"),
278
+ Type.Literal("plan"),
279
+ Type.Literal("execute"),
280
+ Type.Literal("verify")
281
+ ]);
282
+ var Triggers = Type.Object(
283
+ {
284
+ complexity_threshold: Type.Optional(Type.Integer({ minimum: 1 })),
285
+ tdd_required: Type.Optional(Type.Boolean()),
286
+ brainstorming_required: Type.Optional(Type.Boolean())
287
+ },
288
+ { additionalProperties: false }
289
+ );
290
+ var ProvidedUnit = Type.Object(
291
+ {
292
+ id: Type.String({ minLength: 1 }),
293
+ // routing-addressable, <org>-<repo>-<unit>
294
+ component_type: ComponentType
295
+ // reuse existing union
296
+ },
297
+ { additionalProperties: false }
298
+ );
299
+ var SpecSchema = Type.Object(
300
+ {
301
+ type: TypeEnum,
302
+ component_type: ComponentType,
303
+ install: Type.Unsafe(InstallSchema),
304
+ verify: Verify,
305
+ uninstall: Uninstall,
306
+ upstream_health: UpstreamHealth,
307
+ signed_by: Type.String({ pattern: "^[a-zA-Z0-9-]+$", minLength: 1 }),
308
+ signature: Type.Optional(Signature),
309
+ platforms: Type.Array(Platform, { minItems: 1, uniqueItems: true }),
310
+ tested_with_versions: Type.Optional(TestedWithVersions),
311
+ mutually_exclusive_with: Type.Optional(Type.Array(Type.String())),
312
+ category: Category,
313
+ install_type: InstallType,
314
+ decision_rules: Type.Optional(DecisionRules),
315
+ // ADR 0009 errata (phase 1.5 T5.5) — mattpocock phase routing schema.
316
+ phase: Type.Optional(Phase),
317
+ triggers: Type.Optional(Triggers),
318
+ // ADR 0010 errata (phase 2.1 T1.3) — bundle-install `provides` field.
319
+ provides: Type.Optional(Type.Array(ProvidedUnit, { minItems: 2, uniqueItems: true }))
320
+ },
321
+ { additionalProperties: false }
322
+ );
323
+
324
+ // src/manifest/schema/index.ts
325
+ var ManifestBase = Type.Object(
326
+ {
327
+ apiVersion: ApiVersion,
328
+ kind: Kind,
329
+ metadata: MetadataSchema,
330
+ spec: SpecSchema
331
+ },
332
+ { additionalProperties: false }
333
+ );
334
+ var matrix = {
335
+ "cc-plugin": ["cc-plugin-marketplace"],
336
+ "cc-skill-pack": ["cc-plugin-marketplace", "git-clone-with-setup", "npx-skill-installer"],
337
+ "mcp-npm": ["mcp-stdio-add", "mcp-http-add"],
338
+ "cli-npm": ["npm-cli"]
339
+ };
340
+ var matrixConstraints = Object.entries(matrix).map(([typeValue, allowedMethods]) => ({
341
+ if: {
342
+ type: "object",
343
+ properties: {
344
+ spec: {
345
+ type: "object",
346
+ properties: { type: { const: typeValue } },
347
+ required: ["type"]
348
+ }
349
+ },
350
+ required: ["spec"]
351
+ },
352
+ // biome-ignore lint/suspicious/noThenProperty: JSON Schema `then` keyword (conditional schemas), not a thenable.
353
+ then: {
354
+ type: "object",
355
+ properties: {
356
+ spec: {
357
+ type: "object",
358
+ properties: {
359
+ install: {
360
+ type: "object",
361
+ properties: { method: { enum: allowedMethods } },
362
+ required: ["method"]
363
+ }
364
+ },
365
+ required: ["install"]
366
+ }
367
+ },
368
+ required: ["spec"]
369
+ }
370
+ }));
371
+ var ManifestSchema = {
372
+ ...ManifestBase,
373
+ $id: "https://harnessed.dev/schemas/manifest.v1.schema.json",
374
+ title: "harnessed Manifest v1",
375
+ description: "Per ADR 0001. Strict mode (additionalProperties: false everywhere).",
376
+ allOf: matrixConstraints
377
+ };
378
+
379
+ // src/schemas/index.ts
380
+ var SCHEMA_VERSION = "v1";
381
+
382
+ export { ManifestSchema, SCHEMA_VERSION };
383
+ //# sourceMappingURL=index.mjs.map
384
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/manifest/schema/metadata.ts","../../src/manifest/schema/installMethods/ccHookAdd.ts","../../src/manifest/schema/installMethods/ccPluginMarketplace.ts","../../src/manifest/schema/installMethods/gitCloneWithSetup.ts","../../src/manifest/schema/installMethods/mcpHttpAdd.ts","../../src/manifest/schema/installMethods/mcpStdioAdd.ts","../../src/manifest/schema/installMethods/npmCli.ts","../../src/manifest/schema/installMethods/npxSkillInstaller.ts","../../src/manifest/schema/installMethods/index.ts","../../src/manifest/schema/spec.ts","../../src/manifest/schema/index.ts","../../src/schemas/index.ts"],"names":["Type","GIT_REF_PATTERN"],"mappings":"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","file":"index.mjs","sourcesContent":["// Metadata sub-schema per ADR 0001 § Top-level structure.\n// Fields: apiVersion (Literal harnessed/v1), kind (Literal Manifest),\n// metadata.{name, display_name?, description, upstream{...}}.\n\nimport { Type } from '@sinclair/typebox'\n\nexport const ApiVersion = Type.Literal('harnessed/v1')\nexport const Kind = Type.Literal('Manifest')\n\n// SPDX whitelist per ADR 0001 line 51.\n// ADR 0010 errata — license whitelist extension (D-03/D-05). `MIT-0` (MIT No\n// Attribution, SPDX-registered) added for baoyu-skills; `anthropics-official`\n// carve-out added for anthropics/skills monorepo sub-skills (frontend-design /\n// document-skills / webapp-testing) which have no per-skill LICENSE file.\nconst SpdxLicense = Type.Union([\n Type.Literal('MIT'),\n Type.Literal('Apache-2.0'),\n Type.Literal('BSD-3-Clause'),\n Type.Literal('ISC'),\n Type.Literal('0BSD'),\n Type.Literal('MIT-0'),\n Type.Literal('anthropics-official'),\n])\n\n// ADR 0010 errata — license provenance audit field (D-04). Records where the\n// license info was sourced from so it can be mechanically audited. Optional —\n// additive only, A7' 8-pillar safe (no existing manifest broken).\nconst LicenseSource = Type.Union([\n Type.Literal('README'),\n Type.Literal('registry'),\n Type.Literal('none'),\n Type.Literal('anthropics-official'),\n])\n\nconst Upstream = Type.Object(\n {\n source: Type.String({ minLength: 1 }),\n homepage: Type.String({ format: 'uri' }),\n repository: Type.String({ format: 'uri' }),\n license: SpdxLicense,\n license_source: Type.Optional(LicenseSource),\n notice: Type.String({ minLength: 1, maxLength: 500 }),\n },\n { additionalProperties: false },\n)\n\nexport const MetadataSchema = Type.Object(\n {\n name: Type.String({ pattern: '^[a-z0-9][a-z0-9-]*$', minLength: 1 }),\n display_name: Type.Optional(Type.String()),\n description: Type.String({ minLength: 1, maxLength: 120 }),\n upstream: Upstream,\n },\n { additionalProperties: false },\n)\n","// install.method = cc-hook-add per ADR 0001 type×method matrix + Phase 2.4 W3 T3.1 (D-04 § 3.1).\n//\n// IMPL NOTE (Phase 2.4 W3 / R2.4.4): Claude Code SessionStart / UserPromptSubmit /\n// PreToolUse / PostToolUse hooks are configured in ~/.claude/settings.json under\n// `hooks.<event>[].{matcher, command}` shape. This install method lets a manifest\n// register a hook entry idempotently. The hook_command is the bash invocation the\n// user wants run on that lifecycle event (e.g. `node scripts/dashboard.mjs --no-open`\n// to auto-spawn the dashboard on session start).\n//\n// Sister: npxSkillInstaller schema (~17L) — same minimal TypeBox shape, no exotic\n// fields. `idempotent_check` reused from the 6 sister install methods (preflight\n// invariant per src/installers/lib/preflight.ts contract).\n\nimport { Type } from '@sinclair/typebox'\n\nconst HookEvent = Type.Union([\n Type.Literal('SessionStart'),\n Type.Literal('UserPromptSubmit'),\n Type.Literal('PreToolUse'),\n Type.Literal('PostToolUse'),\n])\n\nexport const CcHookAdd = Type.Object(\n {\n method: Type.Literal('cc-hook-add'),\n cmd: Type.String({ minLength: 1 }), // audit-trail (the bash invocation registered)\n // cwd/env required by lib/spawn.ts discriminated-union access (sister 6 method\n // shape parity — even though cc-hook-add does not spawn, generic spawn helper\n // expects these fields on the install union).\n cwd: Type.Optional(Type.String()),\n env: Type.Optional(Type.Record(Type.String(), Type.String())),\n hook_event: HookEvent,\n hook_matcher: Type.Optional(Type.String()),\n hook_command: Type.String({ minLength: 1 }),\n idempotent_check: Type.String({ minLength: 1 }),\n },\n { additionalProperties: false },\n)\n","// install.method = cc-plugin-marketplace per ADR 0001 type×method matrix.\n// Required: cmd, idempotent_check, git_ref.\n//\n// Phase 1.1.1 hotfix M1 — git_ref pattern enforces SHA (7-40 hex) or SemVer\n// tag, rejecting branch names like HEAD/main/master that would silently\n// drift. ADR 0001 § \"版本锁哲学\" requires reproducible installs.\n//\n// Phase 1.2 ADR 0005 errata — `marketplace_source` optional field for\n// third-party marketplaces (e.g. OthmanAdi/planning-with-files which is NOT\n// in claude-plugins-official). v0.1 only `source: github`. Official upstream\n// can omit; phase 2.1 cc-plugin-marketplace installer will consume this\n// field structurally instead of parsing the cmd string.\n\nimport { Type } from '@sinclair/typebox'\n\nconst GIT_REF_PATTERN = '^([a-f0-9]{7,40}|v?\\\\d+\\\\.\\\\d+\\\\.\\\\d+([.-][\\\\w.-]+)?)$'\nconst REPO_PATTERN = '^[a-zA-Z0-9_.-]+/[a-zA-Z0-9_.-]+$'\n\nexport const CcPluginMarketplace = Type.Object(\n {\n method: Type.Literal('cc-plugin-marketplace'),\n cmd: Type.String({ minLength: 1 }),\n cwd: Type.Optional(Type.String()),\n env: Type.Optional(Type.Record(Type.String(), Type.String())),\n args: Type.Optional(Type.Record(Type.String(), Type.Unknown())),\n git_ref: Type.String({ minLength: 1, pattern: GIT_REF_PATTERN }),\n idempotent_check: Type.String({ minLength: 1 }),\n // ADR 0005 — third-party marketplace structured metadata (optional).\n marketplace_source: Type.Optional(\n Type.Object(\n {\n source: Type.Literal('github'),\n repo: Type.String({ pattern: REPO_PATTERN, minLength: 3 }),\n },\n { additionalProperties: false },\n ),\n ),\n },\n { additionalProperties: false },\n)\n","// install.method = git-clone-with-setup per ADR 0001 type×method matrix.\n// Required: cmd, idempotent_check, git_ref.\n//\n// Phase 1.1.1 hotfix M1 — git_ref pattern enforces SHA (7-40 hex) or SemVer\n// tag, rejecting branch names like HEAD/main/master that would silently\n// drift. ADR 0001 § \"版本锁哲学\" requires reproducible installs.\n\nimport { Type } from '@sinclair/typebox'\n\nconst GIT_REF_PATTERN = '^([a-f0-9]{7,40}|v?\\\\d+\\\\.\\\\d+\\\\.\\\\d+([.-][\\\\w.-]+)?)$'\n\nexport const GitCloneWithSetup = Type.Object(\n {\n method: Type.Literal('git-clone-with-setup'),\n cmd: Type.String({ minLength: 1 }),\n cwd: Type.Optional(Type.String()),\n env: Type.Optional(Type.Record(Type.String(), Type.String())),\n args: Type.Optional(Type.Record(Type.String(), Type.Unknown())),\n git_ref: Type.String({ minLength: 1, pattern: GIT_REF_PATTERN }),\n idempotent_check: Type.String({ minLength: 1 }),\n },\n { additionalProperties: false },\n)\n","// install.method = mcp-http-add per ADR 0001 type×method matrix (mcp-npm only).\n// Required: cmd, idempotent_check, npm_version.\n\nimport { Type } from '@sinclair/typebox'\n\nexport const McpHttpAdd = Type.Object(\n {\n method: Type.Literal('mcp-http-add'),\n cmd: Type.String({ minLength: 1 }),\n cwd: Type.Optional(Type.String()),\n env: Type.Optional(Type.Record(Type.String(), Type.String())),\n args: Type.Optional(Type.Record(Type.String(), Type.Unknown())),\n npm_version: Type.String({ minLength: 1 }),\n idempotent_check: Type.String({ minLength: 1 }),\n },\n { additionalProperties: false },\n)\n","// install.method = mcp-stdio-add per ADR 0001 type×method matrix (mcp-npm only).\n// Required: cmd, idempotent_check, npm_version.\n// Note: cmd should invoke `claude mcp add --scope project ...` (R3.2),\n// but schema only validates structure — actual cmd template is per-manifest.\n\nimport { Type } from '@sinclair/typebox'\n\nexport const McpStdioAdd = Type.Object(\n {\n method: Type.Literal('mcp-stdio-add'),\n cmd: Type.String({ minLength: 1 }),\n cwd: Type.Optional(Type.String()),\n env: Type.Optional(Type.Record(Type.String(), Type.String())),\n args: Type.Optional(Type.Record(Type.String(), Type.Unknown())),\n npm_version: Type.String({ minLength: 1 }),\n idempotent_check: Type.String({ minLength: 1 }),\n },\n { additionalProperties: false },\n)\n","// install.method = npm-cli per ADR 0001 type×method matrix (cli-npm only).\n// Required: cmd, idempotent_check, npm_version.\n\nimport { Type } from '@sinclair/typebox'\n\nexport const NpmCli = Type.Object(\n {\n method: Type.Literal('npm-cli'),\n cmd: Type.String({ minLength: 1 }),\n cwd: Type.Optional(Type.String()),\n env: Type.Optional(Type.Record(Type.String(), Type.String())),\n args: Type.Optional(Type.Record(Type.String(), Type.Unknown())),\n npm_version: Type.String({ minLength: 1 }),\n idempotent_check: Type.String({ minLength: 1 }),\n },\n { additionalProperties: false },\n)\n","// install.method = npx-skill-installer per ADR 0001 type×method matrix.\n// Required: cmd, idempotent_check, npm_version.\n\nimport { Type } from '@sinclair/typebox'\n\nexport const NpxSkillInstaller = Type.Object(\n {\n method: Type.Literal('npx-skill-installer'),\n cmd: Type.String({ minLength: 1 }),\n cwd: Type.Optional(Type.String()),\n env: Type.Optional(Type.Record(Type.String(), Type.String())),\n args: Type.Optional(Type.Record(Type.String(), Type.Unknown())),\n npm_version: Type.String({ minLength: 1 }),\n idempotent_check: Type.String({ minLength: 1 }),\n },\n { additionalProperties: false },\n)\n","// install.method discriminated union per ADR 0001 type×method matrix.\n// 6 methods: cc-plugin-marketplace, git-clone-with-setup, npx-skill-installer,\n// npm-cli, mcp-stdio-add, mcp-http-add.\n//\n// IMPL NOTE (Rule 1 / F8): TypeBox's Type.Union(..., { discriminator })\n// emits `anyOf` + lacks `type: \"object\"` + `required: [\"method\"]`, but Ajv\n// `discriminator: true` strict mode requires `oneOf` + `type: \"object\"` +\n// `required: [\"method\"]`. We hand-build the discriminator-compatible shape\n// here so Ajv accepts it. The inferred TypeScript type still tracks via\n// Static<>; Ajv accepts hand-rolled JSON Schema objects with no DX cost.\n\nimport { type Static, Type } from '@sinclair/typebox'\nimport { CcHookAdd } from './ccHookAdd.js'\nimport { CcPluginMarketplace } from './ccPluginMarketplace.js'\nimport { GitCloneWithSetup } from './gitCloneWithSetup.js'\nimport { McpHttpAdd } from './mcpHttpAdd.js'\nimport { McpStdioAdd } from './mcpStdioAdd.js'\nimport { NpmCli } from './npmCli.js'\nimport { NpxSkillInstaller } from './npxSkillInstaller.js'\n\nconst branches = [\n CcPluginMarketplace,\n GitCloneWithSetup,\n NpxSkillInstaller,\n NpmCli,\n McpStdioAdd,\n McpHttpAdd,\n CcHookAdd,\n] as const\n\n// Hand-built JSON Schema that Ajv `discriminator: true` strict mode accepts.\n// Strict mode also requires `properties.method` declared at the discriminator\n// level (else `strictRequired` complains that `method` is required but undefined\n// at this object scope). Per-branch `additionalProperties: false` is preserved\n// (each TypeBox object already sets it).\nexport const InstallSchema = {\n type: 'object',\n discriminator: { propertyName: 'method' },\n required: ['method'],\n properties: {\n method: { type: 'string' },\n },\n oneOf: branches as unknown as object[],\n} as const\n\n// Re-derive the TS type via TypeBox's regular Union (this is unused at runtime\n// but gives downstream consumers a typed `Manifest['spec']['install']`).\nconst InstallUnion = Type.Union([...branches])\nexport type Install = Static<typeof InstallUnion>\n","// spec sub-schema per ADR 0001 § Top-level structure.\n// Fields: type, component_type, install (discriminated union), verify, uninstall,\n// upstream_health, signed_by, signature?, platforms,\n// tested_with_versions?, mutually_exclusive_with?,\n// category, install_type, decision_rules? (ADR 0007 errata — phase 1.3 加),\n// phase?, triggers? (ADR 0009 errata — phase 1.5 T5.5 加).\n//\n// IMPL NOTE — phase 1.5 T5.5 (ADR 0009 § Decision / D1.5-6 / D1.5-7 / Pattern L\n// spec-level metadata 加法 + Pattern T): adds 2 optional spec-level fields for\n// the mattpocock 23 招式 phase routing schema. `phase` is a 4-value enum\n// (discuss / plan / execute / verify) mirroring `decision_rules.yaml` v2\n// `mattpocock_phases` keys; `triggers` is an optional object carrying routing\n// hints (complexity_threshold / tdd_required / brainstorming_required). Both\n// optional — additive only, A7' 8-pillar enforcement (no existing manifest\n// broken). NOTE: this schema uses TypeBox (`@sinclair/typebox`), the project's\n// established schema lib — NOT zod; the task_plan `z.enum` / `z.object` outline\n// is a planning-doc shorthand, implemented here as `Type.Union` / `Type.Object`\n// per ADR 0001 + the no-new-deps constraint.\n\nimport { Type } from '@sinclair/typebox'\nimport { type Install, InstallSchema } from './installMethods/index.js'\n\nconst TypeEnum = Type.Union([\n Type.Literal('cc-plugin'),\n Type.Literal('cc-skill-pack'),\n Type.Literal('mcp-npm'),\n Type.Literal('cli-npm'),\n // Phase 2.4 W3 T3.1 (D-04 § 3.1 + R2.4.4 + B-22) — 5th type, 1:1 with install_type:'hook'.\n // Lifecycle hooks registered to ~/.claude/settings.json (SessionStart / UserPromptSubmit /\n // PreToolUse / PostToolUse) via the cc-hook-add install method.\n Type.Literal('cc-hook'),\n])\n\nconst ComponentType = Type.Union([\n Type.Literal('command'),\n Type.Literal('behavior-rule'),\n Type.Literal('mcp-tool'),\n Type.Literal('cli-binary'),\n])\n\nconst Verify = Type.Object(\n {\n cmd: Type.String({ minLength: 1 }),\n timeout_ms: Type.Optional(Type.Integer({ minimum: 100, maximum: 60_000 })),\n expected_exit_code: Type.Optional(Type.Integer()),\n },\n { additionalProperties: false },\n)\n\nconst Uninstall = Type.Object(\n {\n cmd: Type.String({ minLength: 1 }),\n cleanup_paths: Type.Optional(Type.Array(Type.String())),\n },\n { additionalProperties: false },\n)\n\nconst Stability = Type.Union([\n Type.Literal('stable'),\n Type.Literal('beta'),\n Type.Literal('unstable'),\n Type.Literal('archived'),\n])\n\nconst FallbackAction = Type.Union([\n Type.Literal('warn'),\n Type.Literal('block'),\n Type.Literal('use_alternative'),\n])\n\nconst UpstreamHealth = Type.Object(\n {\n stability: Stability,\n last_check: Type.String({ format: 'date' }),\n last_known_good_version: Type.String({ minLength: 1 }),\n fallback_action: FallbackAction,\n alternative: Type.Optional(Type.String()),\n },\n { additionalProperties: false },\n)\n\nconst Platform = Type.Union([Type.Literal('linux'), Type.Literal('darwin'), Type.Literal('win32')])\n\nconst Signature = Type.Object(\n { sigstore_bundle: Type.String({ format: 'uri' }) },\n { additionalProperties: false },\n)\n\nconst TestedWithVersions = Type.Object(\n {\n cc_versions: Type.Optional(Type.Array(Type.String())),\n node_versions: Type.Optional(Type.Array(Type.String())),\n },\n { additionalProperties: false },\n)\n\n// ADR 0007 errata — categorization schema (phase 1.3 T2.1 加 3 字段).\n// `category` (必填, 6 enum) + `install_type` (必填, 4 enum, 与 install.method 1:N 闭合) +\n// `decision_rules` (optional, per-manifest decision hint — 全局 rule-set 在\n// routing/decision_rules.yaml T3.1, schema 完全独立).\nconst Category = Type.Union([\n Type.Literal('meta'),\n Type.Literal('engineering'),\n Type.Literal('design'),\n Type.Literal('content'),\n Type.Literal('testing'),\n Type.Literal('search'),\n])\n\nconst InstallType = Type.Union([\n Type.Literal('skill'),\n Type.Literal('mcp'),\n Type.Literal('npm'),\n Type.Literal('git'),\n // Phase 2.4 W3 T3.1 (D-04 § 3.1 + R2.4.4 + B-22) — 5th install_type, 1:1 with TypeEnum:'cc-hook'.\n Type.Literal('hook'),\n])\n\nconst DecisionRules = Type.Object(\n {\n trigger: Type.Optional(Type.String({ minLength: 1 })),\n default_expert: Type.Optional(Type.String({ minLength: 1 })),\n arbitration_rule: Type.Optional(Type.String({ minLength: 1 })),\n override_signals: Type.Optional(\n Type.Array(\n Type.Object(\n {\n phrase: Type.String({ minLength: 1 }),\n use: Type.String({ minLength: 1 }),\n },\n { additionalProperties: false },\n ),\n ),\n ),\n // Phase 2.3 W2 T2.5 — CD-3 negative-space hint mirror (B-17 per-manifest hint\n // redundant guard layer; SSOT remains routing/decision_rules.yaml — D-04 lead).\n // Additive optional; existing manifests unchanged (A7 守恒).\n do_not_use_when: Type.Optional(Type.Array(Type.String({ minLength: 1 }), { minItems: 1 })),\n if_rejected_use: Type.Optional(Type.String({ minLength: 1 })),\n },\n { additionalProperties: false },\n)\n\n// ADR 0009 errata — mattpocock 23 招式 phase routing schema (phase 1.5 T5.5).\n// `Phase` (optional, 4 enum — 1:1 with decision_rules.yaml v2 mattpocock_phases\n// keys) + `Triggers` (optional, routing hints per D1.5-7). Both additive.\nconst Phase = Type.Union([\n Type.Literal('discuss'),\n Type.Literal('plan'),\n Type.Literal('execute'),\n Type.Literal('verify'),\n])\n\nconst Triggers = Type.Object(\n {\n complexity_threshold: Type.Optional(Type.Integer({ minimum: 1 })),\n tdd_required: Type.Optional(Type.Boolean()),\n brainstorming_required: Type.Optional(Type.Boolean()),\n },\n { additionalProperties: false },\n)\n\n// ADR 0010 errata — bundle-install modeling (#10, D2.1-1). One install action\n// may surface multiple named units (e.g. document-skills → pptx/docx/xlsx/pdf).\n// `provides` absent ⇒ atomic manifest (unchanged behavior). Present ⇒ one\n// install exposes N named units. `install`/`verify`/`uninstall` stay singular —\n// the bundle is installed by ONE action. Bundle manifests use the existing\n// `type: 'cc-skill-pack'` (D2.1-2 — no new TypeEnum/ComponentType value).\nconst ProvidedUnit = Type.Object(\n {\n id: Type.String({ minLength: 1 }), // routing-addressable, <org>-<repo>-<unit>\n component_type: ComponentType, // reuse existing union\n },\n { additionalProperties: false },\n)\n\nexport const SpecSchema = Type.Object(\n {\n type: TypeEnum,\n component_type: ComponentType,\n install: Type.Unsafe<Install>(InstallSchema),\n verify: Verify,\n uninstall: Uninstall,\n upstream_health: UpstreamHealth,\n signed_by: Type.String({ pattern: '^[a-zA-Z0-9-]+$', minLength: 1 }),\n signature: Type.Optional(Signature),\n platforms: Type.Array(Platform, { minItems: 1, uniqueItems: true }),\n tested_with_versions: Type.Optional(TestedWithVersions),\n mutually_exclusive_with: Type.Optional(Type.Array(Type.String())),\n category: Category,\n install_type: InstallType,\n decision_rules: Type.Optional(DecisionRules),\n // ADR 0009 errata (phase 1.5 T5.5) — mattpocock phase routing schema.\n phase: Type.Optional(Phase),\n triggers: Type.Optional(Triggers),\n // ADR 0010 errata (phase 2.1 T1.3) — bundle-install `provides` field.\n provides: Type.Optional(Type.Array(ProvidedUnit, { minItems: 2, uniqueItems: true })),\n },\n { additionalProperties: false },\n)\n","// Manifest schema v1 — main entry per ADR 0001.\n// Top-level: { apiVersion, kind, metadata, spec } with strict additionalProperties: false.\n//\n// Type × install.method matrix (ADR 0001 § 4.5) is enforced via top-level `allOf`\n// with `if/then` clauses. Without this, the install discriminator only validates\n// the chosen method's structure but allows e.g. `type: cli-npm` paired with\n// `method: cc-plugin-marketplace` (matrix violation). Rule 2 enforcement.\n\nimport { Type } from '@sinclair/typebox'\nimport { ApiVersion, Kind, MetadataSchema } from './metadata.js'\nimport { SpecSchema } from './spec.js'\n\n// TypeBox-typed base — drives Static<typeof ManifestBase> for the inferred\n// Manifest TS type (re-exported via ./types.js).\nexport const ManifestBase = Type.Object(\n {\n apiVersion: ApiVersion,\n kind: Kind,\n metadata: MetadataSchema,\n spec: SpecSchema,\n },\n { additionalProperties: false },\n)\n\n// Per-type allowed install.method whitelist per ADR 0001 line 104-113.\nconst matrix: Record<string, string[]> = {\n 'cc-plugin': ['cc-plugin-marketplace'],\n 'cc-skill-pack': ['cc-plugin-marketplace', 'git-clone-with-setup', 'npx-skill-installer'],\n 'mcp-npm': ['mcp-stdio-add', 'mcp-http-add'],\n 'cli-npm': ['npm-cli'],\n}\n\nconst matrixConstraints = Object.entries(matrix).map(([typeValue, allowedMethods]) => ({\n if: {\n type: 'object',\n properties: {\n spec: {\n type: 'object',\n properties: { type: { const: typeValue } },\n required: ['type'],\n },\n },\n required: ['spec'],\n },\n // biome-ignore lint/suspicious/noThenProperty: JSON Schema `then` keyword (conditional schemas), not a thenable.\n then: {\n type: 'object',\n properties: {\n spec: {\n type: 'object',\n properties: {\n install: {\n type: 'object',\n properties: { method: { enum: allowedMethods } },\n required: ['method'],\n },\n },\n required: ['install'],\n },\n },\n required: ['spec'],\n },\n}))\n\n// Runtime JSON Schema fed to Ajv: typed base + matrix allOf clauses + metadata.\n// We spread ManifestBase (a TypeBox object that is already a valid JSON Schema)\n// and append the cross-field constraints.\nexport const ManifestSchema = {\n ...(ManifestBase as unknown as Record<string, unknown>),\n $id: 'https://harnessed.dev/schemas/manifest.v1.schema.json',\n title: 'harnessed Manifest v1',\n description: 'Per ADR 0001. Strict mode (additionalProperties: false everywhere).',\n allOf: matrixConstraints,\n}\n","// Re-export schemas for third-party consumers via `harnessed/schemas` exports field.\n// Consumers can `import { ManifestSchema } from 'harnessed/schemas'` and feed it\n// to their own Ajv instance, OR consume the standalone JSON artifact at\n// `schemas/manifest.v1.schema.json` (built by `scripts/build-schema.mjs`).\n\nexport { ManifestSchema } from '../manifest/schema/index.js'\nexport const SCHEMA_VERSION = 'v1'\n"]}
@@ -0,0 +1,23 @@
1
+ # manifests/ — 上游依赖描述层
2
+
3
+ harnessed 不 vendor 上游代码。`manifests/` 是**纯描述层** — 每个 yaml 声明:在哪能找到上游、怎么装、怎么验证健康、卸载怎么清理。
4
+
5
+ ## 结构
6
+
7
+ - `tools/` — 纯工具类上游(github-mcp / tavily-mcp / playwright 等)
8
+ - `skill-packs/` — 流程包 / skill 集合(superpowers / GSD / mattpocock-skills 等)
9
+
10
+ ## Schema
11
+
12
+ 每个 manifest 必须符合 `manifests/SCHEMA.md` 描述的 v1 schema(运行时由 `schemas/manifest.v1.schema.json` 严格 strict 模式校验)。
13
+
14
+ 详细字段定义、`type × install.method` 兼容矩阵、`component_type` 语义请见:
15
+
16
+ - `docs/adr/0001-manifest-schema-v1.md` — 不可 inline 修改主体(仅允许通过 ADR-NNNN errata 修订)
17
+ - `manifests/SCHEMA.md` — 实现视图(人类可读,含 9 个上游路径占位)
18
+
19
+ ## 关联
20
+
21
+ - 上游清单:`PROJECT-SPEC.md` v2.1 § 2
22
+ - 编译产物:`schemas/manifest.v1.schema.json`(npm publish 给社区供 IDE 校验)
23
+ - vendor 例外门槛:`vendor/ENTRY-CRITERIA.md`