@agent-teams/docs-protocol-agent-teams 0.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 (203) hide show
  1. package/CHANGELOG.md +5 -0
  2. package/LICENSE +201 -0
  3. package/README.md +24 -0
  4. package/assets/catalog.json +1 -0
  5. package/assets/docs-protocol.yml +14 -0
  6. package/assets/history/sha256-097df9fe1b90ab45f73389c8b69736f8a54d4199b09536d586222b5a7f0fbb09/caller.yml +13 -0
  7. package/assets/history/sha256-3e53262efc8a530b532380dac21d876456473d3b88aba20889a1d24823bf3a1b/caller.yml +14 -0
  8. package/assets/history/sha256-51d3f02a352ce2c3b0a4068a86b6899a57ab54b0a876c468e3fb3e536519caca/caller.yml +14 -0
  9. package/assets/history/sha256-641265ef9ecff59c16482fdae1bc8fc56002b5a4a1ee34b102438d0ca08a86a3/skill.md +29 -0
  10. package/assets/history/sha256-7907195753506e4b0f0e89eb3f6e495bacbd79e9b9913c9f60fc4a07dffb22e5/caller.yml +14 -0
  11. package/assets/history/sha256-7b31cd257532247f64c55a014dc926c601e4d742176cfb8513b6b0d8ab48213e/skill.md +28 -0
  12. package/assets/history/sha256-d697c5c7c9bcfccfc006fcf7e4d4cc8e7c629f9689781b9b0b50f30d82bc019e/caller.yml +14 -0
  13. package/assets/history/sha256-f21dc19277a4ba24bcef90a7071c9cf50adf144769f42d6f74ff4eac9ef117cf/caller.yml +14 -0
  14. package/assets/history/sha256-fd633c3c6337e5cfe51a9f36989bb654381634c5ab4add9e4da71fe40ab4e0dd/caller.yml +14 -0
  15. package/assets/transition-catalog.json +1 -0
  16. package/dist/cli.d.ts +3 -0
  17. package/dist/cli.d.ts.map +1 -0
  18. package/dist/cli.js +4 -0
  19. package/dist/cli.js.map +1 -0
  20. package/dist/composition/managed-cli-input.d.ts +11 -0
  21. package/dist/composition/managed-cli-input.d.ts.map +1 -0
  22. package/dist/composition/managed-cli-input.js +52 -0
  23. package/dist/composition/managed-cli-input.js.map +1 -0
  24. package/dist/composition/managed-cli.d.ts +2 -0
  25. package/dist/composition/managed-cli.d.ts.map +1 -0
  26. package/dist/composition/managed-cli.js +17 -0
  27. package/dist/composition/managed-cli.js.map +1 -0
  28. package/dist/composition/qualification-cli.d.ts +2 -0
  29. package/dist/composition/qualification-cli.d.ts.map +1 -0
  30. package/dist/composition/qualification-cli.js +119 -0
  31. package/dist/composition/qualification-cli.js.map +1 -0
  32. package/dist/consumer-integration/adapters/agents-route-adapter-v1.d.ts +10 -0
  33. package/dist/consumer-integration/adapters/agents-route-adapter-v1.d.ts.map +1 -0
  34. package/dist/consumer-integration/adapters/agents-route-adapter-v1.js +99 -0
  35. package/dist/consumer-integration/adapters/agents-route-adapter-v1.js.map +1 -0
  36. package/dist/consumer-integration/adapters/bounded-repository-topology.d.ts +8 -0
  37. package/dist/consumer-integration/adapters/bounded-repository-topology.d.ts.map +1 -0
  38. package/dist/consumer-integration/adapters/bounded-repository-topology.js +80 -0
  39. package/dist/consumer-integration/adapters/bounded-repository-topology.js.map +1 -0
  40. package/dist/consumer-integration/adapters/consumer-integration-node-error.d.ts +5 -0
  41. package/dist/consumer-integration/adapters/consumer-integration-node-error.d.ts.map +1 -0
  42. package/dist/consumer-integration/adapters/consumer-integration-node-error.js +9 -0
  43. package/dist/consumer-integration/adapters/consumer-integration-node-error.js.map +1 -0
  44. package/dist/consumer-integration/adapters/consumer-integration-schema-validator.d.ts +4 -0
  45. package/dist/consumer-integration/adapters/consumer-integration-schema-validator.d.ts.map +1 -0
  46. package/dist/consumer-integration/adapters/consumer-integration-schema-validator.js +51 -0
  47. package/dist/consumer-integration/adapters/consumer-integration-schema-validator.js.map +1 -0
  48. package/dist/consumer-integration/adapters/consumer-upgrade-file-projectors.d.ts +21 -0
  49. package/dist/consumer-integration/adapters/consumer-upgrade-file-projectors.d.ts.map +1 -0
  50. package/dist/consumer-integration/adapters/consumer-upgrade-file-projectors.js +145 -0
  51. package/dist/consumer-integration/adapters/consumer-upgrade-file-projectors.js.map +1 -0
  52. package/dist/consumer-integration/adapters/foundation-known-file-transaction.d.ts +3 -0
  53. package/dist/consumer-integration/adapters/foundation-known-file-transaction.d.ts.map +1 -0
  54. package/dist/consumer-integration/adapters/foundation-known-file-transaction.js +7 -0
  55. package/dist/consumer-integration/adapters/foundation-known-file-transaction.js.map +1 -0
  56. package/dist/consumer-integration/adapters/github-cohort-authority-reader.d.ts +21 -0
  57. package/dist/consumer-integration/adapters/github-cohort-authority-reader.d.ts.map +1 -0
  58. package/dist/consumer-integration/adapters/github-cohort-authority-reader.js +215 -0
  59. package/dist/consumer-integration/adapters/github-cohort-authority-reader.js.map +1 -0
  60. package/dist/consumer-integration/adapters/node-consumer-integration-repository.d.ts +13 -0
  61. package/dist/consumer-integration/adapters/node-consumer-integration-repository.d.ts.map +1 -0
  62. package/dist/consumer-integration/adapters/node-consumer-integration-repository.js +213 -0
  63. package/dist/consumer-integration/adapters/node-consumer-integration-repository.js.map +1 -0
  64. package/dist/consumer-integration/adapters/node-consumer-repository-files.d.ts +11 -0
  65. package/dist/consumer-integration/adapters/node-consumer-repository-files.d.ts.map +1 -0
  66. package/dist/consumer-integration/adapters/node-consumer-repository-files.js +81 -0
  67. package/dist/consumer-integration/adapters/node-consumer-repository-files.js.map +1 -0
  68. package/dist/consumer-integration/adapters/node-consumer-upgrade-sandbox.d.ts +19 -0
  69. package/dist/consumer-integration/adapters/node-consumer-upgrade-sandbox.d.ts.map +1 -0
  70. package/dist/consumer-integration/adapters/node-consumer-upgrade-sandbox.js +307 -0
  71. package/dist/consumer-integration/adapters/node-consumer-upgrade-sandbox.js.map +1 -0
  72. package/dist/consumer-integration/adapters/package-consumer-asset-catalog.d.ts +5 -0
  73. package/dist/consumer-integration/adapters/package-consumer-asset-catalog.d.ts.map +1 -0
  74. package/dist/consumer-integration/adapters/package-consumer-asset-catalog.js +150 -0
  75. package/dist/consumer-integration/adapters/package-consumer-asset-catalog.js.map +1 -0
  76. package/dist/consumer-integration/adapters/pnpm-lockfile-policy-v1.d.ts +3 -0
  77. package/dist/consumer-integration/adapters/pnpm-lockfile-policy-v1.d.ts.map +1 -0
  78. package/dist/consumer-integration/adapters/pnpm-lockfile-policy-v1.js +37 -0
  79. package/dist/consumer-integration/adapters/pnpm-lockfile-policy-v1.js.map +1 -0
  80. package/dist/consumer-integration/adapters/pnpm-lockfile-validator-v1.d.ts +3 -0
  81. package/dist/consumer-integration/adapters/pnpm-lockfile-validator-v1.d.ts.map +1 -0
  82. package/dist/consumer-integration/adapters/pnpm-lockfile-validator-v1.js +120 -0
  83. package/dist/consumer-integration/adapters/pnpm-lockfile-validator-v1.js.map +1 -0
  84. package/dist/consumer-integration/adapters/pnpm-manifest-adapter-v1.d.ts +15 -0
  85. package/dist/consumer-integration/adapters/pnpm-manifest-adapter-v1.d.ts.map +1 -0
  86. package/dist/consumer-integration/adapters/pnpm-manifest-adapter-v1.js +189 -0
  87. package/dist/consumer-integration/adapters/pnpm-manifest-adapter-v1.js.map +1 -0
  88. package/dist/consumer-integration/adapters/pnpm-runtime-closure-v1.d.ts +8 -0
  89. package/dist/consumer-integration/adapters/pnpm-runtime-closure-v1.d.ts.map +1 -0
  90. package/dist/consumer-integration/adapters/pnpm-runtime-closure-v1.js +245 -0
  91. package/dist/consumer-integration/adapters/pnpm-runtime-closure-v1.js.map +1 -0
  92. package/dist/consumer-integration/adapters/strict-json-record.d.ts +3 -0
  93. package/dist/consumer-integration/adapters/strict-json-record.d.ts.map +1 -0
  94. package/dist/consumer-integration/adapters/strict-json-record.js +27 -0
  95. package/dist/consumer-integration/adapters/strict-json-record.js.map +1 -0
  96. package/dist/consumer-integration/application/model/consumer-integration-execution.d.ts +11 -0
  97. package/dist/consumer-integration/application/model/consumer-integration-execution.d.ts.map +1 -0
  98. package/dist/consumer-integration/application/model/consumer-integration-execution.js +2 -0
  99. package/dist/consumer-integration/application/model/consumer-integration-execution.js.map +1 -0
  100. package/dist/consumer-integration/application/model/consumer-upgrade-execution.d.ts +18 -0
  101. package/dist/consumer-integration/application/model/consumer-upgrade-execution.d.ts.map +1 -0
  102. package/dist/consumer-integration/application/model/consumer-upgrade-execution.js +2 -0
  103. package/dist/consumer-integration/application/model/consumer-upgrade-execution.js.map +1 -0
  104. package/dist/consumer-integration/application/policies/consumer-integration-assets.d.ts +58 -0
  105. package/dist/consumer-integration/application/policies/consumer-integration-assets.d.ts.map +1 -0
  106. package/dist/consumer-integration/application/policies/consumer-integration-assets.js +154 -0
  107. package/dist/consumer-integration/application/policies/consumer-integration-assets.js.map +1 -0
  108. package/dist/consumer-integration/application/policies/consumer-integration-authority-guards.d.ts +4 -0
  109. package/dist/consumer-integration/application/policies/consumer-integration-authority-guards.d.ts.map +1 -0
  110. package/dist/consumer-integration/application/policies/consumer-integration-authority-guards.js +23 -0
  111. package/dist/consumer-integration/application/policies/consumer-integration-authority-guards.js.map +1 -0
  112. package/dist/consumer-integration/application/policies/consumer-integration-desired-state.d.ts +4 -0
  113. package/dist/consumer-integration/application/policies/consumer-integration-desired-state.d.ts.map +1 -0
  114. package/dist/consumer-integration/application/policies/consumer-integration-desired-state.js +153 -0
  115. package/dist/consumer-integration/application/policies/consumer-integration-desired-state.js.map +1 -0
  116. package/dist/consumer-integration/application/policies/consumer-integration-prior-cohort.d.ts +14 -0
  117. package/dist/consumer-integration/application/policies/consumer-integration-prior-cohort.d.ts.map +1 -0
  118. package/dist/consumer-integration/application/policies/consumer-integration-prior-cohort.js +186 -0
  119. package/dist/consumer-integration/application/policies/consumer-integration-prior-cohort.js.map +1 -0
  120. package/dist/consumer-integration/application/ports/consumer-integration-lifecycle.d.ts +31 -0
  121. package/dist/consumer-integration/application/ports/consumer-integration-lifecycle.d.ts.map +1 -0
  122. package/dist/consumer-integration/application/ports/consumer-integration-lifecycle.js +2 -0
  123. package/dist/consumer-integration/application/ports/consumer-integration-lifecycle.js.map +1 -0
  124. package/dist/consumer-integration/application/ports/consumer-integration-planners.d.ts +35 -0
  125. package/dist/consumer-integration/application/ports/consumer-integration-planners.d.ts.map +1 -0
  126. package/dist/consumer-integration/application/ports/consumer-integration-planners.js +2 -0
  127. package/dist/consumer-integration/application/ports/consumer-integration-planners.js.map +1 -0
  128. package/dist/consumer-integration/application/ports/consumer-upgrade.d.ts +28 -0
  129. package/dist/consumer-integration/application/ports/consumer-upgrade.d.ts.map +1 -0
  130. package/dist/consumer-integration/application/ports/consumer-upgrade.js +2 -0
  131. package/dist/consumer-integration/application/ports/consumer-upgrade.js.map +1 -0
  132. package/dist/consumer-integration/application/use-cases/plan-consumer-integration.d.ts +15 -0
  133. package/dist/consumer-integration/application/use-cases/plan-consumer-integration.d.ts.map +1 -0
  134. package/dist/consumer-integration/application/use-cases/plan-consumer-integration.js +350 -0
  135. package/dist/consumer-integration/application/use-cases/plan-consumer-integration.js.map +1 -0
  136. package/dist/consumer-integration/application/use-cases/run-consumer-integration.d.ts +29 -0
  137. package/dist/consumer-integration/application/use-cases/run-consumer-integration.d.ts.map +1 -0
  138. package/dist/consumer-integration/application/use-cases/run-consumer-integration.js +139 -0
  139. package/dist/consumer-integration/application/use-cases/run-consumer-integration.js.map +1 -0
  140. package/dist/consumer-integration/application/use-cases/upgrade-consumer-integration.d.ts +13 -0
  141. package/dist/consumer-integration/application/use-cases/upgrade-consumer-integration.d.ts.map +1 -0
  142. package/dist/consumer-integration/application/use-cases/upgrade-consumer-integration.js +134 -0
  143. package/dist/consumer-integration/application/use-cases/upgrade-consumer-integration.js.map +1 -0
  144. package/dist/consumer-integration/composition/consumer-integration-cli.d.ts +3 -0
  145. package/dist/consumer-integration/composition/consumer-integration-cli.d.ts.map +1 -0
  146. package/dist/consumer-integration/composition/consumer-integration-cli.js +241 -0
  147. package/dist/consumer-integration/composition/consumer-integration-cli.js.map +1 -0
  148. package/dist/consumer-integration/composition/consumer-integration-planner.d.ts +19 -0
  149. package/dist/consumer-integration/composition/consumer-integration-planner.d.ts.map +1 -0
  150. package/dist/consumer-integration/composition/consumer-integration-planner.js +14 -0
  151. package/dist/consumer-integration/composition/consumer-integration-planner.js.map +1 -0
  152. package/dist/consumer-integration/composition/node-consumer-integration.d.ts +26 -0
  153. package/dist/consumer-integration/composition/node-consumer-integration.d.ts.map +1 -0
  154. package/dist/consumer-integration/composition/node-consumer-integration.js +38 -0
  155. package/dist/consumer-integration/composition/node-consumer-integration.js.map +1 -0
  156. package/dist/consumer-integration/domain/model.d.ts +111 -0
  157. package/dist/consumer-integration/domain/model.d.ts.map +1 -0
  158. package/dist/consumer-integration/domain/model.js +2 -0
  159. package/dist/consumer-integration/domain/model.js.map +1 -0
  160. package/dist/consumer-integration/generated/canonical-assets.d.ts +5 -0
  161. package/dist/consumer-integration/generated/canonical-assets.d.ts.map +1 -0
  162. package/dist/consumer-integration/generated/canonical-assets.js +6 -0
  163. package/dist/consumer-integration/generated/canonical-assets.js.map +1 -0
  164. package/dist/consumer-integration/index.d.ts +12 -0
  165. package/dist/consumer-integration/index.d.ts.map +1 -0
  166. package/dist/consumer-integration/index.js +7 -0
  167. package/dist/consumer-integration/index.js.map +1 -0
  168. package/dist/index.d.ts +5 -0
  169. package/dist/index.d.ts.map +1 -0
  170. package/dist/index.js +4 -0
  171. package/dist/index.js.map +1 -0
  172. package/dist/qualification/index.d.ts +3 -0
  173. package/dist/qualification/index.d.ts.map +1 -0
  174. package/dist/qualification/index.js +2 -0
  175. package/dist/qualification/index.js.map +1 -0
  176. package/dist/qualification/managed-command-envelope-validator.d.ts +14 -0
  177. package/dist/qualification/managed-command-envelope-validator.d.ts.map +1 -0
  178. package/dist/qualification/managed-command-envelope-validator.js +33 -0
  179. package/dist/qualification/managed-command-envelope-validator.js.map +1 -0
  180. package/dist/qualification/qualification-v2-runner.d.ts +4 -0
  181. package/dist/qualification/qualification-v2-runner.d.ts.map +1 -0
  182. package/dist/qualification/qualification-v2-runner.js +344 -0
  183. package/dist/qualification/qualification-v2-runner.js.map +1 -0
  184. package/dist/qualification/v2-contract.d.ts +91 -0
  185. package/dist/qualification/v2-contract.d.ts.map +1 -0
  186. package/dist/qualification/v2-contract.js +2 -0
  187. package/dist/qualification/v2-contract.js.map +1 -0
  188. package/package.json +66 -0
  189. package/schemas/docs-consumer-integration-execution/v1.schema.json +29 -0
  190. package/schemas/docs-consumer-integration-plan/v1.schema.json +63 -0
  191. package/schemas/docs-consumer-integration-profile/v1.schema.json +110 -0
  192. package/schemas/docs-consumer-integration-profile/v2.schema.json +283 -0
  193. package/schemas/docs-consumer-managed-state/v1.schema.json +99 -0
  194. package/schemas/docs-consumer-upgrade-execution/v1.schema.json +44 -0
  195. package/schemas/docs-protocol-command-envelope/v1.schema.json +239 -0
  196. package/schemas/docs-protocol-command-envelope/v2.schema.json +285 -0
  197. package/schemas/docs-protocol-command-envelope/v3.schema.json +529 -0
  198. package/schemas/docs-protocol-profile/v1.schema.json +46 -0
  199. package/schemas/docs-protocol-profile/v2.schema.json +46 -0
  200. package/schemas/docs-protocol-qualification/v2.schema.json +78 -0
  201. package/schemas/docs-protocol-qualification-receipt/v2.schema.json +113 -0
  202. package/schemas/qualified-docs-cohort/v1.schema.json +96 -0
  203. package/skills/docs/SKILL.md +29 -0
@@ -0,0 +1,344 @@
1
+ import { constants } from "node:fs";
2
+ import { cp, lstat, mkdir, mkdtemp, open, readFile, realpath, rm, symlink, writeFile } from "node:fs/promises";
3
+ import { tmpdir } from "node:os";
4
+ import { dirname, join, relative, resolve as resolvePath, sep } from "node:path";
5
+ import { fileURLToPath } from "node:url";
6
+ import { Ajv2020 } from "ajv/dist/2020.js";
7
+ import { docsCheckV2, docsDoctorV2, docsFindV2, docsInfoV2, docsNewV2, docsRecoverV2 } from "@agent-teams/docs-protocol";
8
+ import { applyReachability, bootstrapQualificationInstallation, changedPaths, digest, documentResult, fileSnapshot, interruptAndRecover, isQualificationEvidenceExcludedPath, portableQualificationSkill, qualificationEvidencePolicy, readContainedBoundedFile, requireSuccess, signalOption, snapshot } from "@agent-teams/docs-protocol/qualification";
9
+ import { assertConsumerIntegrationProfileSchema } from "../consumer-integration/adapters/consumer-integration-schema-validator.js";
10
+ import { checkConsumerIntegration } from "../consumer-integration/index.js";
11
+ function canonicalJson(value) {
12
+ if (Array.isArray(value)) {
13
+ return `[${value.map(canonicalJson).join(",")}]`;
14
+ }
15
+ if (value !== null && typeof value === "object") {
16
+ return `{${Object.entries(value).toSorted(([left], [right]) => Buffer.compare(Buffer.from(left), Buffer.from(right)))
17
+ .map(([key, entry]) => `${JSON.stringify(key)}:${canonicalJson(entry)}`).join(",")}}`;
18
+ }
19
+ return JSON.stringify(value);
20
+ }
21
+ async function readQualificationContractV2(root, path) {
22
+ const source = await readContainedBoundedFile(root, path, "Qualification contract");
23
+ const value = JSON.parse(source.bytes.toString("utf8"));
24
+ if (value.schemaVersion === 1) {
25
+ throw new Error("DOCS_QUALIFICATION_V1_MIGRATION_REQUIRED: replace fixtureRoot/tests/pins/paths/gate with schemaVersion 2 scenarios; managed integration owns package and route authority.");
26
+ }
27
+ const schema = JSON.parse(await readFile(new URL("../../schemas/docs-protocol-qualification/v2.schema.json", import.meta.url), "utf8"));
28
+ const validate = new Ajv2020({ allErrors: true, strict: true }).compile(schema);
29
+ if (!validate(value)) {
30
+ const details = (validate.errors ?? []).slice(0, 8).map(({ instancePath, message }) => `${instancePath || "/"} ${message ?? "is invalid"}`).join("; ");
31
+ throw new TypeError(`docs-protocol-qualification/v2 validation failed: ${details}`);
32
+ }
33
+ return Object.freeze({
34
+ contract: value,
35
+ evidence: Object.freeze({ path: source.path, digest: source.digest })
36
+ });
37
+ }
38
+ async function copyDisposableConsumer(sourceRoot, consumerRoot, policy) {
39
+ await cp(sourceRoot, consumerRoot, {
40
+ recursive: true,
41
+ errorOnExist: true,
42
+ force: false,
43
+ dereference: false,
44
+ async filter(source) {
45
+ const repositoryPath = relative(sourceRoot, source).split(sep).join("/");
46
+ if (repositoryPath === "") {
47
+ return true;
48
+ }
49
+ const metadata = await lstat(source);
50
+ const entryKind = metadata.isDirectory() ? "directory"
51
+ : metadata.isFile() ? "file"
52
+ : metadata.isSymbolicLink() ? "symbolic-link"
53
+ : "other";
54
+ return !await isQualificationEvidenceExcludedPath(sourceRoot, repositoryPath, policy, "source", entryKind);
55
+ }
56
+ });
57
+ }
58
+ async function bootstrapManagedQualificationInstallation(consumerRoot, rewriteManifest) {
59
+ const portable = await bootstrapQualificationInstallation(consumerRoot, rewriteManifest);
60
+ const adapterManifestPath = fileURLToPath(new URL("../../package.json", import.meta.url));
61
+ const [adapterManifest, consumerManifestSource] = await Promise.all([
62
+ readFile(adapterManifestPath, "utf8").then((source) => JSON.parse(source)),
63
+ readFile(join(consumerRoot, "package.json"), "utf8")
64
+ ]);
65
+ const consumerManifest = JSON.parse(consumerManifestSource);
66
+ const existingDevDependencies = typeof consumerManifest["devDependencies"] === "object" &&
67
+ consumerManifest["devDependencies"] !== null
68
+ ? consumerManifest["devDependencies"]
69
+ : {};
70
+ if (rewriteManifest) {
71
+ await writeFile(join(consumerRoot, "package.json"), `${JSON.stringify({
72
+ ...consumerManifest,
73
+ devDependencies: {
74
+ ...existingDevDependencies,
75
+ "@agent-teams/docs-protocol-agent-teams": adapterManifest.version
76
+ }
77
+ }, null, 2)}\n`, "utf8");
78
+ }
79
+ else if (existingDevDependencies["@agent-teams/docs-protocol-agent-teams"] !== adapterManifest.version) {
80
+ throw new Error("Managed qualification requires the exact executing Agent Teams adapter in devDependencies.");
81
+ }
82
+ const scope = join(consumerRoot, "node_modules", "@agent-teams");
83
+ await mkdir(scope, { recursive: true });
84
+ await symlink(dirname(adapterManifestPath), join(scope, "docs-protocol-agent-teams"), process.platform === "win32" ? "junction" : "dir");
85
+ return Object.freeze({
86
+ ...portable,
87
+ adapterVersion: adapterManifest.version
88
+ });
89
+ }
90
+ export async function overlayLocalDevelopmentSkill(consumerRoot, skillPath, enabled) {
91
+ if (!enabled) {
92
+ return;
93
+ }
94
+ const target = join(consumerRoot, skillPath);
95
+ const canonicalSkill = portableQualificationSkill();
96
+ let handle;
97
+ try {
98
+ handle = await open(target, constants.O_WRONLY |
99
+ (process.platform === "win32" ? 0 : constants.O_NOFOLLOW));
100
+ const [opened, named] = await Promise.all([
101
+ handle.stat({ bigint: true }),
102
+ lstat(target, { bigint: true })
103
+ ]);
104
+ if (!opened.isFile() || opened.nlink !== 1n || !named.isFile() || named.isSymbolicLink() ||
105
+ opened.dev !== named.dev || opened.ino !== named.ino || opened.birthtimeNs !== named.birthtimeNs) {
106
+ throw new Error("unsafe Skill target");
107
+ }
108
+ await handle.truncate(0);
109
+ await handle.writeFile(canonicalSkill);
110
+ const written = await handle.stat({ bigint: true });
111
+ if (!written.isFile() || written.nlink !== 1n || written.dev !== opened.dev || written.ino !== opened.ino ||
112
+ written.birthtimeNs !== opened.birthtimeNs || written.size !== BigInt(canonicalSkill.byteLength)) {
113
+ throw new Error("unstable Skill target");
114
+ }
115
+ }
116
+ catch (cause) {
117
+ throw new Error("Local-development qualification Skill target must be one stable, non-hardlinked regular file.", { cause });
118
+ }
119
+ finally {
120
+ await handle?.close();
121
+ }
122
+ }
123
+ function scenarioRequest(scenario, consumerRoot, profilePath, signal) {
124
+ return {
125
+ consumerRoot,
126
+ profilePath,
127
+ intent: {
128
+ type: scenario.type,
129
+ id: scenario.intent.id,
130
+ title: scenario.intent.title,
131
+ owner: scenario.intent.owner,
132
+ summary: scenario.intent.summary,
133
+ ...(scenario.intent.slug === undefined ? {} : { slug: scenario.intent.slug }),
134
+ ...(scenario.intent.destination === undefined ? {} : { destination: scenario.intent.destination })
135
+ },
136
+ ...(scenario.intent.related === undefined ? {} : { related: scenario.intent.related }),
137
+ ...(scenario.intent.blockedBy === undefined ? {} : { blockedBy: scenario.intent.blockedBy }),
138
+ ...(scenario.intent.codeAnchors === undefined ? {} : { codeAnchors: scenario.intent.codeAnchors }),
139
+ ...(scenario.intent.metadata === undefined ? {} : { additionalMetadata: scenario.intent.metadata }),
140
+ ...(signal === undefined ? {} : { signal })
141
+ };
142
+ }
143
+ function assertExpectedScenario(scenario, result) {
144
+ if (result.documentPath !== scenario.expected.documentPath) {
145
+ throw new Error(`Qualification scenario ${scenario.id} path mismatch: ${result.documentPath}.`);
146
+ }
147
+ if (canonicalJson(result.reachability) !== canonicalJson(scenario.expected.reachability)) {
148
+ throw new Error(`Qualification scenario ${scenario.id} reachability mismatch.`);
149
+ }
150
+ if (scenario.expected.goldenDigest !== undefined && result.compiled.document.digest !== scenario.expected.goldenDigest) {
151
+ throw new Error(`Qualification scenario ${scenario.id} golden digest mismatch.`);
152
+ }
153
+ }
154
+ function assertScenarioCoverage(contract, declaredTypes) {
155
+ const scenarioTypes = contract.scenarios.map(({ type }) => type);
156
+ if (new Set(contract.scenarios.map(({ id }) => id)).size !== contract.scenarios.length ||
157
+ new Set(scenarioTypes).size !== scenarioTypes.length || canonicalJson(scenarioTypes.toSorted()) !== canonicalJson(declaredTypes.toSorted())) {
158
+ throw new Error(`Qualification scenarios must cover every authorable type exactly once; expected ${declaredTypes.join(", ")}.`);
159
+ }
160
+ }
161
+ async function assertManagedIntegrationAuthority(integration) {
162
+ await assertConsumerIntegrationProfileSchema(integration);
163
+ if (integration.schemaVersion !== 2 || integration.qualification === undefined) {
164
+ throw new Error("DOCS_QUALIFICATION_V1_MIGRATION_REQUIRED: managed integration schemaVersion 2 with qualification authority is required.");
165
+ }
166
+ }
167
+ async function assertReleasedIntegrationCurrent(sourceRoot, integrationPath) {
168
+ const managed = await checkConsumerIntegration({
169
+ consumerRoot: sourceRoot,
170
+ integrationProfilePath: integrationPath
171
+ });
172
+ if (managed.outcome !== "current") {
173
+ throw new Error(`Released-cohort qualification requires a current exact managed integration: ${JSON.stringify(managed.issues)}.`);
174
+ }
175
+ }
176
+ async function qualifyScenarios(input) {
177
+ const receipts = [];
178
+ for (const [index, scenario] of input.contract.scenarios.entries()) {
179
+ const scenarioBase = scenarioRequest(scenario, input.base.consumerRoot, input.base.profilePath, input.base.signal);
180
+ const beforePreview = await fileSnapshot(input.base.consumerRoot, input.evidencePolicy);
181
+ const preview = await input.protocol.newDocumentV2({ ...scenarioBase, apply: false });
182
+ const previewResult = documentResult(preview);
183
+ if (changedPaths(beforePreview, await fileSnapshot(input.base.consumerRoot, input.evidencePolicy)).length !== 0) {
184
+ throw new Error(`Qualification scenario ${scenario.id} preview mutated the disposable consumer.`);
185
+ }
186
+ assertExpectedScenario(scenario, previewResult);
187
+ if (scenario.expected.goldenFile !== undefined) {
188
+ const golden = await readContainedBoundedFile(input.base.consumerRoot, scenario.expected.goldenFile, `Qualification scenario ${scenario.id} golden file`);
189
+ if (golden.bytes.toString("utf8") !== previewResult.compiled.document.content) {
190
+ throw new Error(`Qualification scenario ${scenario.id} golden file mismatch.`);
191
+ }
192
+ }
193
+ if (index === 0) {
194
+ await interruptAndRecover({
195
+ base: scenarioBase,
196
+ consumerRoot: input.base.consumerRoot,
197
+ previewResult,
198
+ profilePath: input.base.profilePath,
199
+ protocol: input.protocol
200
+ });
201
+ }
202
+ else {
203
+ const applied = await input.protocol.newDocumentV2({ ...scenarioBase, apply: true });
204
+ const appliedResult = documentResult(applied);
205
+ if (appliedResult.planDigest !== previewResult.planDigest || appliedResult.compiled.document.content !== previewResult.compiled.document.content) {
206
+ throw new Error(`Qualification scenario ${scenario.id} preview/apply parity mismatch.`);
207
+ }
208
+ }
209
+ const actual = await readFile(join(input.base.consumerRoot, previewResult.documentPath), "utf8");
210
+ if (actual !== previewResult.compiled.document.content) {
211
+ throw new Error(`Qualification scenario ${scenario.id} materialized bytes differ from preview.`);
212
+ }
213
+ await applyReachability(input.base.consumerRoot, previewResult.reachability);
214
+ requireSuccess(`check after ${scenario.id}`, await input.protocol.checkV2(input.base));
215
+ receipts.push({
216
+ id: scenario.id,
217
+ type: scenario.type,
218
+ documentPath: previewResult.documentPath,
219
+ outputDigest: previewResult.compiled.document.digest
220
+ });
221
+ }
222
+ return Object.freeze(receipts.map((receipt) => Object.freeze(receipt)));
223
+ }
224
+ async function collectEvidence(input) {
225
+ const [profile, skill, packageManifest, lockfile, executingModule] = await Promise.all([
226
+ readContainedBoundedFile(input.consumerRoot, input.integration.profilePath, "Docs Protocol profile"),
227
+ readContainedBoundedFile(input.consumerRoot, input.integration.skillPath, "Documentation Skill"),
228
+ readContainedBoundedFile(input.consumerRoot, "package.json", "Package manifest"),
229
+ readContainedBoundedFile(input.consumerRoot, "pnpm-lock.yaml", "pnpm lockfile", 64 * 1024 * 1024),
230
+ readFile(fileURLToPath(import.meta.url))
231
+ ]);
232
+ return {
233
+ executingModule,
234
+ lockfileDigest: lockfile.digest,
235
+ packageManifestDigest: packageManifest.digest,
236
+ profile: { path: profile.path, digest: profile.digest },
237
+ skill: { path: skill.path, digest: skill.digest }
238
+ };
239
+ }
240
+ export async function runDocsProtocolQualificationV2(request) {
241
+ const sourceRoot = await realpath(resolvePath(request.consumerRoot));
242
+ const integrationPath = request.integrationPath ?? "architecture/foundation/docs-consumer-integration.json";
243
+ const integrationFile = await readContainedBoundedFile(sourceRoot, integrationPath, "Managed integration profile");
244
+ const integration = JSON.parse(integrationFile.bytes.toString("utf8"));
245
+ await assertManagedIntegrationAuthority(integration);
246
+ const qualifiedIntegration = integration;
247
+ const evidencePolicy = qualificationEvidencePolicy(qualifiedIntegration.governedDocsRoots ?? []);
248
+ const before = await snapshot(sourceRoot, evidencePolicy);
249
+ const qualification = await readQualificationContractV2(sourceRoot, qualifiedIntegration.qualification.contractPath);
250
+ if (request.localDevelopment !== true) {
251
+ await assertReleasedIntegrationCurrent(sourceRoot, integrationPath);
252
+ }
253
+ const temporary = await realpath(await mkdtemp(join(tmpdir(), "atd-q2-")));
254
+ const consumerRoot = join(temporary, "consumer");
255
+ try {
256
+ request.signal?.throwIfAborted();
257
+ await copyDisposableConsumer(sourceRoot, consumerRoot, evidencePolicy);
258
+ const executingPackages = await bootstrapManagedQualificationInstallation(consumerRoot, request.localDevelopment === true);
259
+ await overlayLocalDevelopmentSkill(consumerRoot, qualifiedIntegration.skillPath, request.localDevelopment === true);
260
+ const manifest = JSON.parse(await readFile(join(consumerRoot, "package.json"), "utf8"));
261
+ if (typeof manifest.scripts?.["docs:protocol:check"] !== "string") {
262
+ throw new Error(`Managed qualification gate ${qualifiedIntegration.qualification.gateCommand} must resolve to a package script; it is never executed by qualification.`);
263
+ }
264
+ const protocol = {
265
+ checkV2: docsCheckV2,
266
+ doctorV2: docsDoctorV2,
267
+ findV2: docsFindV2,
268
+ infoV2: docsInfoV2,
269
+ newDocumentV2: docsNewV2,
270
+ recoverV2: docsRecoverV2
271
+ };
272
+ const base = { consumerRoot, profilePath: qualifiedIntegration.profilePath, ...signalOption(request.signal) };
273
+ const info = await protocol.infoV2(base);
274
+ requireSuccess("info", info);
275
+ const infoResult = info.envelope.result;
276
+ assertScenarioCoverage(qualification.contract, infoResult.types.map(({ type }) => type));
277
+ requireSuccess("find", await protocol.findV2({ ...base, query: {} }));
278
+ requireSuccess("check", await protocol.checkV2(base));
279
+ const initialDoctor = await protocol.doctorV2(base);
280
+ requireSuccess("doctor", initialDoctor);
281
+ const idleRecovery = await protocol.recoverV2(base);
282
+ requireSuccess("recover", idleRecovery);
283
+ if (idleRecovery.envelope.result.transactionState !== "no-pending-transaction") {
284
+ throw new Error("Qualification recover did not prove the initial idle state.");
285
+ }
286
+ const receipts = await qualifyScenarios({ base, contract: qualification.contract, evidencePolicy, protocol });
287
+ requireSuccess("doctor", await protocol.doctorV2(base));
288
+ requireSuccess("recover", await protocol.recoverV2(base));
289
+ if (await snapshot(sourceRoot, evidencePolicy) !== before) {
290
+ throw new Error("Qualification modified its source consumer.");
291
+ }
292
+ const evidence = await collectEvidence({
293
+ consumerRoot,
294
+ integration: qualifiedIntegration
295
+ });
296
+ const environment = initialDoctor.envelope.result.environment;
297
+ if (request.localDevelopment !== true &&
298
+ executingPackages.docsVersion !== qualifiedIntegration.cohort.packages.docsProtocol.version) {
299
+ throw new Error("Released-cohort qualification execution identity does not match the exact cohort package versions.");
300
+ }
301
+ const hasGolden = qualification.contract.scenarios.some(({ expected }) => expected.goldenFile !== undefined || expected.goldenDigest !== undefined);
302
+ const body = Object.freeze({
303
+ schemaVersion: 2,
304
+ cohortAdmissible: request.localDevelopment !== true,
305
+ evidenceClass: request.localDevelopment === true ? "local-development" : "released-cohort",
306
+ projectId: infoResult.projectId,
307
+ scenarios: receipts,
308
+ checks: Object.freeze([
309
+ "info", "find", "check", "doctor", "recover", "preview", "apply", "path", "reachability",
310
+ ...(hasGolden ? ["golden"] : []),
311
+ "source-unchanged"
312
+ ]),
313
+ derived: Object.freeze({
314
+ contractPath: qualifiedIntegration.qualification.contractPath,
315
+ gateCommand: qualifiedIntegration.qualification.gateCommand,
316
+ packageVersions: Object.freeze({
317
+ docsProtocol: qualifiedIntegration.cohort.packages.docsProtocol.version,
318
+ engineeringFoundation: qualifiedIntegration.cohort.packages.engineeringFoundation.version
319
+ }),
320
+ profilePath: qualifiedIntegration.profilePath
321
+ }),
322
+ evidence: Object.freeze({
323
+ sourceDigest: before,
324
+ integration: Object.freeze({ path: integrationPath, digest: integrationFile.digest }),
325
+ contract: qualification.evidence,
326
+ profile: Object.freeze(evidence.profile),
327
+ skill: Object.freeze(evidence.skill),
328
+ packageManifestDigest: evidence.packageManifestDigest,
329
+ lockfileDigest: evidence.lockfileDigest,
330
+ executingDocsProtocol: Object.freeze({ version: executingPackages.docsVersion, buildDigest: digest(evidence.executingModule) }),
331
+ executingFoundation: Object.freeze({
332
+ version: environment.installedFoundationVersion,
333
+ buildIdentity: environment.installedFoundationBuildIdentity
334
+ }),
335
+ cohort: Object.freeze({ ...qualifiedIntegration.cohort })
336
+ })
337
+ });
338
+ return Object.freeze({ ...body, receiptDigest: digest(canonicalJson(body)) });
339
+ }
340
+ finally {
341
+ await rm(temporary, { recursive: true, force: true });
342
+ }
343
+ }
344
+ //# sourceMappingURL=qualification-v2-runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"qualification-v2-runner.js","sourceRoot":"","sources":["../../src/qualification/qualification-v2-runner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,91 @@
1
+ import type { DocumentJsonValue } from "@agent-teams/docs-protocol/qualification";
2
+ export interface DocsProtocolQualificationScenarioV2 {
3
+ readonly id: string;
4
+ readonly type: string;
5
+ readonly intent: {
6
+ readonly id: string;
7
+ readonly title: string;
8
+ readonly owner: string;
9
+ readonly summary: string;
10
+ readonly slug?: string;
11
+ readonly destination?: string;
12
+ readonly related?: readonly string[];
13
+ readonly blockedBy?: readonly string[];
14
+ readonly codeAnchors?: readonly {
15
+ readonly enforcement: "advisory" | "required";
16
+ readonly pattern: string;
17
+ }[];
18
+ readonly metadata?: Readonly<Record<string, DocumentJsonValue>>;
19
+ };
20
+ readonly expected: {
21
+ readonly documentPath: string;
22
+ readonly metadataStorage: "frontmatter";
23
+ readonly reachability: unknown;
24
+ readonly goldenFile?: string;
25
+ readonly goldenDigest?: `sha256:${string}`;
26
+ };
27
+ }
28
+ export interface DocsProtocolQualificationContractV2 {
29
+ readonly schemaVersion: 2;
30
+ readonly scenarios: readonly DocsProtocolQualificationScenarioV2[];
31
+ }
32
+ export interface DocsProtocolQualificationV2Request {
33
+ readonly consumerRoot: string;
34
+ readonly integrationPath?: string;
35
+ readonly localDevelopment?: boolean;
36
+ readonly signal?: AbortSignal;
37
+ }
38
+ export interface DocsProtocolQualificationReceiptV2 {
39
+ readonly schemaVersion: 2;
40
+ readonly receiptDigest: `sha256:${string}`;
41
+ readonly cohortAdmissible: boolean;
42
+ readonly evidenceClass: "local-development" | "released-cohort";
43
+ readonly projectId: string;
44
+ readonly scenarios: readonly {
45
+ readonly id: string;
46
+ readonly type: string;
47
+ readonly documentPath: string;
48
+ readonly outputDigest: string;
49
+ }[];
50
+ readonly checks: readonly ("info" | "find" | "check" | "doctor" | "recover" | "preview" | "apply" | "path" | "reachability" | "golden" | "source-unchanged")[];
51
+ readonly derived: {
52
+ readonly contractPath: string;
53
+ readonly gateCommand: string;
54
+ readonly packageVersions: {
55
+ readonly docsProtocol: string;
56
+ readonly engineeringFoundation: string;
57
+ };
58
+ readonly profilePath: string;
59
+ };
60
+ readonly evidence: {
61
+ readonly sourceDigest: `sha256:${string}`;
62
+ readonly integration: {
63
+ readonly path: string;
64
+ readonly digest: `sha256:${string}`;
65
+ };
66
+ readonly contract: {
67
+ readonly path: string;
68
+ readonly digest: `sha256:${string}`;
69
+ };
70
+ readonly profile: {
71
+ readonly path: string;
72
+ readonly digest: `sha256:${string}`;
73
+ };
74
+ readonly skill: {
75
+ readonly path: string;
76
+ readonly digest: `sha256:${string}`;
77
+ };
78
+ readonly packageManifestDigest: `sha256:${string}`;
79
+ readonly lockfileDigest: `sha256:${string}`;
80
+ readonly executingDocsProtocol: {
81
+ readonly version: string;
82
+ readonly buildDigest: `sha256:${string}`;
83
+ };
84
+ readonly executingFoundation: {
85
+ readonly version: string;
86
+ readonly buildIdentity: `sha256:${string}`;
87
+ };
88
+ readonly cohort: Readonly<Record<string, unknown>>;
89
+ };
90
+ }
91
+ //# sourceMappingURL=v2-contract.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"v2-contract.d.ts","sourceRoot":"","sources":["../../src/qualification/v2-contract.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=v2-contract.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"v2-contract.js","sourceRoot":"","sources":["../../src/qualification/v2-contract.ts"],"names":[],"mappings":""}
package/package.json ADDED
@@ -0,0 +1,66 @@
1
+ {
2
+ "bin": {
3
+ "agent-teams-docs-managed": "./dist/cli.js"
4
+ },
5
+ "bugs": {
6
+ "url": "https://github.com/agent-teams-ai/engineering-foundation/issues"
7
+ },
8
+ "dependencies": {
9
+ "@agent-teams/docs-protocol": "0.4.1",
10
+ "@agent-teams/repository-mutation": "0.0.0",
11
+ "ajv": "8.20.0",
12
+ "jsonc-parser": "3.3.1",
13
+ "yaml": "2.9.0"
14
+ },
15
+ "description": "Agent Teams managed integration adapter for the portable Docs Protocol.",
16
+ "devDependencies": {
17
+ "@types/node": "24.13.3",
18
+ "typescript": "7.0.2"
19
+ },
20
+ "engines": {
21
+ "node": ">=24.18.0 <25",
22
+ "pnpm": ">=11.17.0 <12"
23
+ },
24
+ "exports": {
25
+ ".": {
26
+ "types": "./dist/index.d.ts",
27
+ "import": "./dist/index.js"
28
+ },
29
+ "./qualification": {
30
+ "types": "./dist/qualification/index.d.ts",
31
+ "import": "./dist/qualification/index.js"
32
+ },
33
+ "./schemas/*": "./schemas/*",
34
+ "./package.json": "./package.json"
35
+ },
36
+ "files": [
37
+ "dist",
38
+ "schemas",
39
+ "skills/docs/SKILL.md",
40
+ "assets",
41
+ "README.md",
42
+ "CHANGELOG.md"
43
+ ],
44
+ "homepage": "https://github.com/agent-teams-ai/engineering-foundation#readme",
45
+ "license": "Apache-2.0",
46
+ "name": "@agent-teams/docs-protocol-agent-teams",
47
+ "publishConfig": {
48
+ "access": "public",
49
+ "provenance": true,
50
+ "registry": "https://registry.npmjs.org/"
51
+ },
52
+ "repository": {
53
+ "type": "git",
54
+ "url": "git+https://github.com/agent-teams-ai/engineering-foundation.git",
55
+ "directory": "packages/docs-protocol-agent-teams"
56
+ },
57
+ "scripts": {
58
+ "assets:generate": "node scripts/generate-consumer-assets.mjs --write",
59
+ "assets:check": "node scripts/generate-consumer-assets.mjs",
60
+ "build": "pnpm assets:check && tsc --build tsconfig.json --pretty false",
61
+ "test": "pnpm build && node --test tests/*.test.mjs"
62
+ },
63
+ "sideEffects": false,
64
+ "type": "module",
65
+ "version": "0.0.0"
66
+ }
@@ -0,0 +1,29 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://agent-teams.ai/schemas/docs-consumer-integration-execution/v1",
4
+ "type": "object",
5
+ "additionalProperties": false,
6
+ "required": ["schemaVersion", "command", "outcome", "issues"],
7
+ "properties": {
8
+ "schemaVersion": { "const": 1 },
9
+ "command": { "enum": ["consumer.apply", "consumer.check", "consumer.plan", "consumer.recover"] },
10
+ "outcome": { "enum": ["applied", "blocked", "change-required", "current", "recovered"] },
11
+ "issues": {
12
+ "type": "array",
13
+ "maxItems": 64,
14
+ "items": {
15
+ "type": "object",
16
+ "additionalProperties": false,
17
+ "required": ["code", "severity", "subject", "message"],
18
+ "properties": {
19
+ "code": { "type": "string", "pattern": "^[A-Z0-9_]+$", "maxLength": 128 },
20
+ "severity": { "enum": ["error", "warning"] },
21
+ "subject": { "type": "string", "maxLength": 2048 },
22
+ "message": { "type": "string", "maxLength": 4096 }
23
+ }
24
+ }
25
+ },
26
+ "plan": { "$ref": "https://agent-teams.ai/schemas/docs-consumer-integration-plan/v1" },
27
+ "receipt": { "$ref": "https://agent-teams.ai/schemas/known-file-transaction-receipt/v1" }
28
+ }
29
+ }
@@ -0,0 +1,63 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://agent-teams.ai/schemas/docs-consumer-integration-plan/v1",
4
+ "type": "object",
5
+ "additionalProperties": false,
6
+ "required": ["schemaVersion", "cohortId", "repository", "planDigest", "outcome", "assets", "issues"],
7
+ "properties": {
8
+ "schemaVersion": { "const": 1 },
9
+ "cohortId": { "type": "string", "pattern": "^[a-z0-9]+(?:[._-][a-z0-9]+)*$" },
10
+ "repository": { "$ref": "#/$defs/repository" },
11
+ "planDigest": { "$ref": "#/$defs/sha256" },
12
+ "outcome": { "enum": ["blocked", "change-required", "current"] },
13
+ "assets": {
14
+ "type": "array",
15
+ "minItems": 5,
16
+ "maxItems": 5,
17
+ "items": { "$ref": "#/$defs/asset" }
18
+ },
19
+ "issues": {
20
+ "type": "array",
21
+ "maxItems": 64,
22
+ "items": { "$ref": "#/$defs/issue" }
23
+ }
24
+ },
25
+ "$defs": {
26
+ "sha256": { "type": "string", "pattern": "^sha256:[0-9a-f]{64}$" },
27
+ "repository": {
28
+ "type": "object",
29
+ "additionalProperties": false,
30
+ "required": ["provider", "id", "nameWithOwner"],
31
+ "properties": {
32
+ "provider": { "const": "github" },
33
+ "id": { "type": "string", "pattern": "^[1-9][0-9]*$" },
34
+ "nameWithOwner": { "type": "string", "pattern": "^[A-Za-z0-9_.-]+/[A-Za-z0-9_.-]+$" }
35
+ }
36
+ },
37
+ "asset": {
38
+ "type": "object",
39
+ "additionalProperties": false,
40
+ "required": ["id", "path", "ownership", "state", "expectedDigest", "action"],
41
+ "properties": {
42
+ "id": { "enum": ["agents-route", "caller-workflow", "managed-state", "package-manifest", "skill"] },
43
+ "path": { "type": "string", "minLength": 1, "maxLength": 1024 },
44
+ "ownership": { "enum": ["full-bytes", "partial-fields", "managed-block"] },
45
+ "state": { "enum": ["absent", "exact-current", "known-prior", "partial-adoption", "outdated-cohort", "unknown-modified", "conflict", "unsupported"] },
46
+ "currentDigest": { "$ref": "#/$defs/sha256" },
47
+ "expectedDigest": { "$ref": "#/$defs/sha256" },
48
+ "action": { "enum": ["create", "none", "replace", "blocked"] }
49
+ }
50
+ },
51
+ "issue": {
52
+ "type": "object",
53
+ "additionalProperties": false,
54
+ "required": ["code", "severity", "subject", "message"],
55
+ "properties": {
56
+ "code": { "type": "string", "pattern": "^[A-Z0-9_]+$", "maxLength": 128 },
57
+ "severity": { "enum": ["error", "warning"] },
58
+ "subject": { "type": "string", "maxLength": 2048 },
59
+ "message": { "type": "string", "maxLength": 4096 }
60
+ }
61
+ }
62
+ }
63
+ }