@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.
- package/CHANGELOG.md +5 -0
- package/LICENSE +201 -0
- package/README.md +24 -0
- package/assets/catalog.json +1 -0
- package/assets/docs-protocol.yml +14 -0
- package/assets/history/sha256-097df9fe1b90ab45f73389c8b69736f8a54d4199b09536d586222b5a7f0fbb09/caller.yml +13 -0
- package/assets/history/sha256-3e53262efc8a530b532380dac21d876456473d3b88aba20889a1d24823bf3a1b/caller.yml +14 -0
- package/assets/history/sha256-51d3f02a352ce2c3b0a4068a86b6899a57ab54b0a876c468e3fb3e536519caca/caller.yml +14 -0
- package/assets/history/sha256-641265ef9ecff59c16482fdae1bc8fc56002b5a4a1ee34b102438d0ca08a86a3/skill.md +29 -0
- package/assets/history/sha256-7907195753506e4b0f0e89eb3f6e495bacbd79e9b9913c9f60fc4a07dffb22e5/caller.yml +14 -0
- package/assets/history/sha256-7b31cd257532247f64c55a014dc926c601e4d742176cfb8513b6b0d8ab48213e/skill.md +28 -0
- package/assets/history/sha256-d697c5c7c9bcfccfc006fcf7e4d4cc8e7c629f9689781b9b0b50f30d82bc019e/caller.yml +14 -0
- package/assets/history/sha256-f21dc19277a4ba24bcef90a7071c9cf50adf144769f42d6f74ff4eac9ef117cf/caller.yml +14 -0
- package/assets/history/sha256-fd633c3c6337e5cfe51a9f36989bb654381634c5ab4add9e4da71fe40ab4e0dd/caller.yml +14 -0
- package/assets/transition-catalog.json +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +4 -0
- package/dist/cli.js.map +1 -0
- package/dist/composition/managed-cli-input.d.ts +11 -0
- package/dist/composition/managed-cli-input.d.ts.map +1 -0
- package/dist/composition/managed-cli-input.js +52 -0
- package/dist/composition/managed-cli-input.js.map +1 -0
- package/dist/composition/managed-cli.d.ts +2 -0
- package/dist/composition/managed-cli.d.ts.map +1 -0
- package/dist/composition/managed-cli.js +17 -0
- package/dist/composition/managed-cli.js.map +1 -0
- package/dist/composition/qualification-cli.d.ts +2 -0
- package/dist/composition/qualification-cli.d.ts.map +1 -0
- package/dist/composition/qualification-cli.js +119 -0
- package/dist/composition/qualification-cli.js.map +1 -0
- package/dist/consumer-integration/adapters/agents-route-adapter-v1.d.ts +10 -0
- package/dist/consumer-integration/adapters/agents-route-adapter-v1.d.ts.map +1 -0
- package/dist/consumer-integration/adapters/agents-route-adapter-v1.js +99 -0
- package/dist/consumer-integration/adapters/agents-route-adapter-v1.js.map +1 -0
- package/dist/consumer-integration/adapters/bounded-repository-topology.d.ts +8 -0
- package/dist/consumer-integration/adapters/bounded-repository-topology.d.ts.map +1 -0
- package/dist/consumer-integration/adapters/bounded-repository-topology.js +80 -0
- package/dist/consumer-integration/adapters/bounded-repository-topology.js.map +1 -0
- package/dist/consumer-integration/adapters/consumer-integration-node-error.d.ts +5 -0
- package/dist/consumer-integration/adapters/consumer-integration-node-error.d.ts.map +1 -0
- package/dist/consumer-integration/adapters/consumer-integration-node-error.js +9 -0
- package/dist/consumer-integration/adapters/consumer-integration-node-error.js.map +1 -0
- package/dist/consumer-integration/adapters/consumer-integration-schema-validator.d.ts +4 -0
- package/dist/consumer-integration/adapters/consumer-integration-schema-validator.d.ts.map +1 -0
- package/dist/consumer-integration/adapters/consumer-integration-schema-validator.js +51 -0
- package/dist/consumer-integration/adapters/consumer-integration-schema-validator.js.map +1 -0
- package/dist/consumer-integration/adapters/consumer-upgrade-file-projectors.d.ts +21 -0
- package/dist/consumer-integration/adapters/consumer-upgrade-file-projectors.d.ts.map +1 -0
- package/dist/consumer-integration/adapters/consumer-upgrade-file-projectors.js +145 -0
- package/dist/consumer-integration/adapters/consumer-upgrade-file-projectors.js.map +1 -0
- package/dist/consumer-integration/adapters/foundation-known-file-transaction.d.ts +3 -0
- package/dist/consumer-integration/adapters/foundation-known-file-transaction.d.ts.map +1 -0
- package/dist/consumer-integration/adapters/foundation-known-file-transaction.js +7 -0
- package/dist/consumer-integration/adapters/foundation-known-file-transaction.js.map +1 -0
- package/dist/consumer-integration/adapters/github-cohort-authority-reader.d.ts +21 -0
- package/dist/consumer-integration/adapters/github-cohort-authority-reader.d.ts.map +1 -0
- package/dist/consumer-integration/adapters/github-cohort-authority-reader.js +215 -0
- package/dist/consumer-integration/adapters/github-cohort-authority-reader.js.map +1 -0
- package/dist/consumer-integration/adapters/node-consumer-integration-repository.d.ts +13 -0
- package/dist/consumer-integration/adapters/node-consumer-integration-repository.d.ts.map +1 -0
- package/dist/consumer-integration/adapters/node-consumer-integration-repository.js +213 -0
- package/dist/consumer-integration/adapters/node-consumer-integration-repository.js.map +1 -0
- package/dist/consumer-integration/adapters/node-consumer-repository-files.d.ts +11 -0
- package/dist/consumer-integration/adapters/node-consumer-repository-files.d.ts.map +1 -0
- package/dist/consumer-integration/adapters/node-consumer-repository-files.js +81 -0
- package/dist/consumer-integration/adapters/node-consumer-repository-files.js.map +1 -0
- package/dist/consumer-integration/adapters/node-consumer-upgrade-sandbox.d.ts +19 -0
- package/dist/consumer-integration/adapters/node-consumer-upgrade-sandbox.d.ts.map +1 -0
- package/dist/consumer-integration/adapters/node-consumer-upgrade-sandbox.js +307 -0
- package/dist/consumer-integration/adapters/node-consumer-upgrade-sandbox.js.map +1 -0
- package/dist/consumer-integration/adapters/package-consumer-asset-catalog.d.ts +5 -0
- package/dist/consumer-integration/adapters/package-consumer-asset-catalog.d.ts.map +1 -0
- package/dist/consumer-integration/adapters/package-consumer-asset-catalog.js +150 -0
- package/dist/consumer-integration/adapters/package-consumer-asset-catalog.js.map +1 -0
- package/dist/consumer-integration/adapters/pnpm-lockfile-policy-v1.d.ts +3 -0
- package/dist/consumer-integration/adapters/pnpm-lockfile-policy-v1.d.ts.map +1 -0
- package/dist/consumer-integration/adapters/pnpm-lockfile-policy-v1.js +37 -0
- package/dist/consumer-integration/adapters/pnpm-lockfile-policy-v1.js.map +1 -0
- package/dist/consumer-integration/adapters/pnpm-lockfile-validator-v1.d.ts +3 -0
- package/dist/consumer-integration/adapters/pnpm-lockfile-validator-v1.d.ts.map +1 -0
- package/dist/consumer-integration/adapters/pnpm-lockfile-validator-v1.js +120 -0
- package/dist/consumer-integration/adapters/pnpm-lockfile-validator-v1.js.map +1 -0
- package/dist/consumer-integration/adapters/pnpm-manifest-adapter-v1.d.ts +15 -0
- package/dist/consumer-integration/adapters/pnpm-manifest-adapter-v1.d.ts.map +1 -0
- package/dist/consumer-integration/adapters/pnpm-manifest-adapter-v1.js +189 -0
- package/dist/consumer-integration/adapters/pnpm-manifest-adapter-v1.js.map +1 -0
- package/dist/consumer-integration/adapters/pnpm-runtime-closure-v1.d.ts +8 -0
- package/dist/consumer-integration/adapters/pnpm-runtime-closure-v1.d.ts.map +1 -0
- package/dist/consumer-integration/adapters/pnpm-runtime-closure-v1.js +245 -0
- package/dist/consumer-integration/adapters/pnpm-runtime-closure-v1.js.map +1 -0
- package/dist/consumer-integration/adapters/strict-json-record.d.ts +3 -0
- package/dist/consumer-integration/adapters/strict-json-record.d.ts.map +1 -0
- package/dist/consumer-integration/adapters/strict-json-record.js +27 -0
- package/dist/consumer-integration/adapters/strict-json-record.js.map +1 -0
- package/dist/consumer-integration/application/model/consumer-integration-execution.d.ts +11 -0
- package/dist/consumer-integration/application/model/consumer-integration-execution.d.ts.map +1 -0
- package/dist/consumer-integration/application/model/consumer-integration-execution.js +2 -0
- package/dist/consumer-integration/application/model/consumer-integration-execution.js.map +1 -0
- package/dist/consumer-integration/application/model/consumer-upgrade-execution.d.ts +18 -0
- package/dist/consumer-integration/application/model/consumer-upgrade-execution.d.ts.map +1 -0
- package/dist/consumer-integration/application/model/consumer-upgrade-execution.js +2 -0
- package/dist/consumer-integration/application/model/consumer-upgrade-execution.js.map +1 -0
- package/dist/consumer-integration/application/policies/consumer-integration-assets.d.ts +58 -0
- package/dist/consumer-integration/application/policies/consumer-integration-assets.d.ts.map +1 -0
- package/dist/consumer-integration/application/policies/consumer-integration-assets.js +154 -0
- package/dist/consumer-integration/application/policies/consumer-integration-assets.js.map +1 -0
- package/dist/consumer-integration/application/policies/consumer-integration-authority-guards.d.ts +4 -0
- package/dist/consumer-integration/application/policies/consumer-integration-authority-guards.d.ts.map +1 -0
- package/dist/consumer-integration/application/policies/consumer-integration-authority-guards.js +23 -0
- package/dist/consumer-integration/application/policies/consumer-integration-authority-guards.js.map +1 -0
- package/dist/consumer-integration/application/policies/consumer-integration-desired-state.d.ts +4 -0
- package/dist/consumer-integration/application/policies/consumer-integration-desired-state.d.ts.map +1 -0
- package/dist/consumer-integration/application/policies/consumer-integration-desired-state.js +153 -0
- package/dist/consumer-integration/application/policies/consumer-integration-desired-state.js.map +1 -0
- package/dist/consumer-integration/application/policies/consumer-integration-prior-cohort.d.ts +14 -0
- package/dist/consumer-integration/application/policies/consumer-integration-prior-cohort.d.ts.map +1 -0
- package/dist/consumer-integration/application/policies/consumer-integration-prior-cohort.js +186 -0
- package/dist/consumer-integration/application/policies/consumer-integration-prior-cohort.js.map +1 -0
- package/dist/consumer-integration/application/ports/consumer-integration-lifecycle.d.ts +31 -0
- package/dist/consumer-integration/application/ports/consumer-integration-lifecycle.d.ts.map +1 -0
- package/dist/consumer-integration/application/ports/consumer-integration-lifecycle.js +2 -0
- package/dist/consumer-integration/application/ports/consumer-integration-lifecycle.js.map +1 -0
- package/dist/consumer-integration/application/ports/consumer-integration-planners.d.ts +35 -0
- package/dist/consumer-integration/application/ports/consumer-integration-planners.d.ts.map +1 -0
- package/dist/consumer-integration/application/ports/consumer-integration-planners.js +2 -0
- package/dist/consumer-integration/application/ports/consumer-integration-planners.js.map +1 -0
- package/dist/consumer-integration/application/ports/consumer-upgrade.d.ts +28 -0
- package/dist/consumer-integration/application/ports/consumer-upgrade.d.ts.map +1 -0
- package/dist/consumer-integration/application/ports/consumer-upgrade.js +2 -0
- package/dist/consumer-integration/application/ports/consumer-upgrade.js.map +1 -0
- package/dist/consumer-integration/application/use-cases/plan-consumer-integration.d.ts +15 -0
- package/dist/consumer-integration/application/use-cases/plan-consumer-integration.d.ts.map +1 -0
- package/dist/consumer-integration/application/use-cases/plan-consumer-integration.js +350 -0
- package/dist/consumer-integration/application/use-cases/plan-consumer-integration.js.map +1 -0
- package/dist/consumer-integration/application/use-cases/run-consumer-integration.d.ts +29 -0
- package/dist/consumer-integration/application/use-cases/run-consumer-integration.d.ts.map +1 -0
- package/dist/consumer-integration/application/use-cases/run-consumer-integration.js +139 -0
- package/dist/consumer-integration/application/use-cases/run-consumer-integration.js.map +1 -0
- package/dist/consumer-integration/application/use-cases/upgrade-consumer-integration.d.ts +13 -0
- package/dist/consumer-integration/application/use-cases/upgrade-consumer-integration.d.ts.map +1 -0
- package/dist/consumer-integration/application/use-cases/upgrade-consumer-integration.js +134 -0
- package/dist/consumer-integration/application/use-cases/upgrade-consumer-integration.js.map +1 -0
- package/dist/consumer-integration/composition/consumer-integration-cli.d.ts +3 -0
- package/dist/consumer-integration/composition/consumer-integration-cli.d.ts.map +1 -0
- package/dist/consumer-integration/composition/consumer-integration-cli.js +241 -0
- package/dist/consumer-integration/composition/consumer-integration-cli.js.map +1 -0
- package/dist/consumer-integration/composition/consumer-integration-planner.d.ts +19 -0
- package/dist/consumer-integration/composition/consumer-integration-planner.d.ts.map +1 -0
- package/dist/consumer-integration/composition/consumer-integration-planner.js +14 -0
- package/dist/consumer-integration/composition/consumer-integration-planner.js.map +1 -0
- package/dist/consumer-integration/composition/node-consumer-integration.d.ts +26 -0
- package/dist/consumer-integration/composition/node-consumer-integration.d.ts.map +1 -0
- package/dist/consumer-integration/composition/node-consumer-integration.js +38 -0
- package/dist/consumer-integration/composition/node-consumer-integration.js.map +1 -0
- package/dist/consumer-integration/domain/model.d.ts +111 -0
- package/dist/consumer-integration/domain/model.d.ts.map +1 -0
- package/dist/consumer-integration/domain/model.js +2 -0
- package/dist/consumer-integration/domain/model.js.map +1 -0
- package/dist/consumer-integration/generated/canonical-assets.d.ts +5 -0
- package/dist/consumer-integration/generated/canonical-assets.d.ts.map +1 -0
- package/dist/consumer-integration/generated/canonical-assets.js +6 -0
- package/dist/consumer-integration/generated/canonical-assets.js.map +1 -0
- package/dist/consumer-integration/index.d.ts +12 -0
- package/dist/consumer-integration/index.d.ts.map +1 -0
- package/dist/consumer-integration/index.js +7 -0
- package/dist/consumer-integration/index.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -0
- package/dist/qualification/index.d.ts +3 -0
- package/dist/qualification/index.d.ts.map +1 -0
- package/dist/qualification/index.js +2 -0
- package/dist/qualification/index.js.map +1 -0
- package/dist/qualification/managed-command-envelope-validator.d.ts +14 -0
- package/dist/qualification/managed-command-envelope-validator.d.ts.map +1 -0
- package/dist/qualification/managed-command-envelope-validator.js +33 -0
- package/dist/qualification/managed-command-envelope-validator.js.map +1 -0
- package/dist/qualification/qualification-v2-runner.d.ts +4 -0
- package/dist/qualification/qualification-v2-runner.d.ts.map +1 -0
- package/dist/qualification/qualification-v2-runner.js +344 -0
- package/dist/qualification/qualification-v2-runner.js.map +1 -0
- package/dist/qualification/v2-contract.d.ts +91 -0
- package/dist/qualification/v2-contract.d.ts.map +1 -0
- package/dist/qualification/v2-contract.js +2 -0
- package/dist/qualification/v2-contract.js.map +1 -0
- package/package.json +66 -0
- package/schemas/docs-consumer-integration-execution/v1.schema.json +29 -0
- package/schemas/docs-consumer-integration-plan/v1.schema.json +63 -0
- package/schemas/docs-consumer-integration-profile/v1.schema.json +110 -0
- package/schemas/docs-consumer-integration-profile/v2.schema.json +283 -0
- package/schemas/docs-consumer-managed-state/v1.schema.json +99 -0
- package/schemas/docs-consumer-upgrade-execution/v1.schema.json +44 -0
- package/schemas/docs-protocol-command-envelope/v1.schema.json +239 -0
- package/schemas/docs-protocol-command-envelope/v2.schema.json +285 -0
- package/schemas/docs-protocol-command-envelope/v3.schema.json +529 -0
- package/schemas/docs-protocol-profile/v1.schema.json +46 -0
- package/schemas/docs-protocol-profile/v2.schema.json +46 -0
- package/schemas/docs-protocol-qualification/v2.schema.json +78 -0
- package/schemas/docs-protocol-qualification-receipt/v2.schema.json +113 -0
- package/schemas/qualified-docs-cohort/v1.schema.json +96 -0
- package/skills/docs/SKILL.md +29 -0
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import { DOCS_PROTOCOL_ID, DOCS_PROTOCOL_VERSION } from "@agent-teams/docs-protocol";
|
|
2
|
+
import { assertManagedQualificationEnvelopeSchema } from "../qualification/managed-command-envelope-validator.js";
|
|
3
|
+
import { runDocsProtocolQualificationV2 } from "../qualification/index.js";
|
|
4
|
+
import { Arguments, CliInputError } from "./managed-cli-input.js";
|
|
5
|
+
class QualificationOutputError extends Error {
|
|
6
|
+
constructor() {
|
|
7
|
+
super("Documentation qualification produced invalid output.");
|
|
8
|
+
this.name = "QualificationOutputError";
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
function errorCode(error) {
|
|
12
|
+
return typeof error === "object" && error !== null && "code" in error && typeof error.code === "string"
|
|
13
|
+
? error.code
|
|
14
|
+
: undefined;
|
|
15
|
+
}
|
|
16
|
+
function violationRuleId(message) {
|
|
17
|
+
return message.startsWith("DOCS_QUALIFICATION_V1_MIGRATION_REQUIRED")
|
|
18
|
+
? "docs.qualification.v1-migration-required"
|
|
19
|
+
: "docs.qualification.violation";
|
|
20
|
+
}
|
|
21
|
+
function qualificationFailure(error) {
|
|
22
|
+
const message = (error instanceof Error ? error.message : "Qualification failed.").slice(0, 1000);
|
|
23
|
+
const cancelled = error instanceof Error && error.name === "AbortError";
|
|
24
|
+
const code = errorCode(error);
|
|
25
|
+
const invalidOutput = error instanceof QualificationOutputError;
|
|
26
|
+
const inputInvalid = !invalidOutput && (error instanceof CliInputError || error instanceof SyntaxError || error instanceof TypeError);
|
|
27
|
+
const operational = code !== undefined && /^(?:EACCES|EISDIR|ELOOP|EMFILE|ENAMETOOLONG|ENOENT|ENOSPC|ENOTDIR|EPERM|EROFS)$/u.test(code);
|
|
28
|
+
const outcome = cancelled ? "cancelled"
|
|
29
|
+
: inputInvalid ? "invalid-input"
|
|
30
|
+
: operational || invalidOutput ? "execution-failure"
|
|
31
|
+
: "violation";
|
|
32
|
+
const exitCode = cancelled ? 130 : inputInvalid ? 2 : operational || invalidOutput ? 3 : 1;
|
|
33
|
+
const ruleId = cancelled ? "docs.qualification.cancelled"
|
|
34
|
+
: inputInvalid ? "docs.qualification.invalid-input"
|
|
35
|
+
: operational ? "docs.qualification.execution-failure.filesystem"
|
|
36
|
+
: invalidOutput ? "docs.qualification.execution-failure.internal"
|
|
37
|
+
: violationRuleId(message);
|
|
38
|
+
return {
|
|
39
|
+
exitCode,
|
|
40
|
+
message,
|
|
41
|
+
envelope: {
|
|
42
|
+
schemaVersion: 2,
|
|
43
|
+
protocol: { id: DOCS_PROTOCOL_ID, version: DOCS_PROTOCOL_VERSION },
|
|
44
|
+
command: "docs.qualify",
|
|
45
|
+
outcome,
|
|
46
|
+
diagnostics: [{ ruleId, severity: "error", phase: inputInvalid ? "input" : "authority", subject: "docs.qualify", message }],
|
|
47
|
+
result: Object.freeze({})
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
function qualificationHelpText() {
|
|
52
|
+
return "Usage: agent-teams-docs-managed qualify [--consumer PATH] [--integration PATH] [--local-development] [--json]\nRuns only the adapter-owned managed suite in an owned disposable copy; the declared consumer gate is never executed. --local-development overlays the portable qualification Skill only in that copy and emits evidence that is not cohort-admissible.\n";
|
|
53
|
+
}
|
|
54
|
+
async function qualificationSuccess(args, signal) {
|
|
55
|
+
const localDevelopment = args.flag("--local-development");
|
|
56
|
+
const consumerRoot = args.one("--consumer") ?? ".";
|
|
57
|
+
const integrationPath = args.one("--integration");
|
|
58
|
+
if (args.positionals().length !== 0) {
|
|
59
|
+
throw new CliInputError("qualify accepts no positional arguments.");
|
|
60
|
+
}
|
|
61
|
+
const receipt = await runDocsProtocolQualificationV2({ consumerRoot, localDevelopment, signal, ...(integrationPath === undefined ? {} : { integrationPath }) });
|
|
62
|
+
return {
|
|
63
|
+
exitCode: 0,
|
|
64
|
+
envelope: {
|
|
65
|
+
schemaVersion: 2,
|
|
66
|
+
protocol: { id: DOCS_PROTOCOL_ID, version: DOCS_PROTOCOL_VERSION },
|
|
67
|
+
command: "docs.qualify",
|
|
68
|
+
outcome: "success",
|
|
69
|
+
diagnostics: [],
|
|
70
|
+
result: receipt
|
|
71
|
+
}
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
function renderQualificationSuccess(execution, json) {
|
|
75
|
+
if (json) {
|
|
76
|
+
return `${JSON.stringify(execution.envelope)}\n`;
|
|
77
|
+
}
|
|
78
|
+
const receipt = execution.envelope.result;
|
|
79
|
+
return `docs.qualify: success\nProject: ${receipt.projectId}\nScenarios: ${receipt.scenarios.length}\nEvidence: ${receipt.evidenceClass}\n`;
|
|
80
|
+
}
|
|
81
|
+
export async function runQualificationCli(values) {
|
|
82
|
+
if (values.length === 1 && values[0] === "--help") {
|
|
83
|
+
process.stdout.write(qualificationHelpText());
|
|
84
|
+
return 0;
|
|
85
|
+
}
|
|
86
|
+
const controller = new AbortController();
|
|
87
|
+
const cancel = () => { controller.abort(new DOMException("Documentation qualification was cancelled.", "AbortError")); };
|
|
88
|
+
process.once("SIGINT", cancel);
|
|
89
|
+
process.once("SIGTERM", cancel);
|
|
90
|
+
let json = values.includes("--json");
|
|
91
|
+
try {
|
|
92
|
+
const args = new Arguments(values);
|
|
93
|
+
json = args.flag("--json");
|
|
94
|
+
const execution = await qualificationSuccess(args, controller.signal);
|
|
95
|
+
if (json) {
|
|
96
|
+
try {
|
|
97
|
+
await assertManagedQualificationEnvelopeSchema(execution.envelope);
|
|
98
|
+
}
|
|
99
|
+
catch {
|
|
100
|
+
throw new QualificationOutputError();
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
process.stdout.write(renderQualificationSuccess(execution, json));
|
|
104
|
+
return 0;
|
|
105
|
+
}
|
|
106
|
+
catch (error) {
|
|
107
|
+
const failure = qualificationFailure(error);
|
|
108
|
+
if (json) {
|
|
109
|
+
await assertManagedQualificationEnvelopeSchema(failure.envelope);
|
|
110
|
+
}
|
|
111
|
+
process.stdout.write(json ? `${JSON.stringify(failure.envelope)}\n` : `docs.qualify: ${failure.envelope.outcome}\n${failure.message}\n`);
|
|
112
|
+
return failure.exitCode;
|
|
113
|
+
}
|
|
114
|
+
finally {
|
|
115
|
+
process.off("SIGINT", cancel);
|
|
116
|
+
process.off("SIGTERM", cancel);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
//# sourceMappingURL=qualification-cli.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"qualification-cli.js","sourceRoot":"","sources":["../../src/composition/qualification-cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { ConsumerIntegrationDigest, ConsumerIntegrationFileObservation } from "../domain/model.js";
|
|
2
|
+
import type { AgentsRoutePlanV1, AgentsRoutePlannerV1 } from "../application/ports/consumer-integration-planners.js";
|
|
3
|
+
export type { AgentsRoutePlanV1 } from "../application/ports/consumer-integration-planners.js";
|
|
4
|
+
export declare function planAgentsRouteV1(input: {
|
|
5
|
+
readonly observation: ConsumerIntegrationFileObservation;
|
|
6
|
+
readonly skillPath: string;
|
|
7
|
+
readonly knownPriorRouteDigest?: ConsumerIntegrationDigest;
|
|
8
|
+
}): AgentsRoutePlanV1;
|
|
9
|
+
export declare const agentsRoutePlannerV1: AgentsRoutePlannerV1;
|
|
10
|
+
//# sourceMappingURL=agents-route-adapter-v1.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agents-route-adapter-v1.d.ts","sourceRoot":"","sources":["../../../src/consumer-integration/adapters/agents-route-adapter-v1.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,yBAAyB,EACzB,kCAAkC,EACnC,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EACV,iBAAiB,EACjB,oBAAoB,EACrB,MAAM,uDAAuD,CAAC;AAQ/D,YAAY,EAAE,iBAAiB,EAAE,MAAM,uDAAuD,CAAC;AA8B/F,wBAAgB,iBAAiB,CAAC,KAAK,EAAE;IACvC,QAAQ,CAAC,WAAW,EAAE,kCAAkC,CAAC;IACzD,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,qBAAqB,CAAC,EAAE,yBAAyB,CAAC;CAC5D,GAAG,iBAAiB,CAoEpB;AAED,eAAO,MAAM,oBAAoB,EAAE,oBAEjC,CAAC"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { canonicalManagedRoute, digestBytes, MANAGED_ROUTE_BEGIN, MANAGED_ROUTE_END } from "../application/policies/consumer-integration-assets.js";
|
|
2
|
+
function conflict(currentDigest, message) {
|
|
3
|
+
return {
|
|
4
|
+
state: "conflict",
|
|
5
|
+
currentDigest,
|
|
6
|
+
expectedDigest: currentDigest,
|
|
7
|
+
issues: [{
|
|
8
|
+
code: "DOCS_CONSUMER_AGENTS_ROUTE_CONFLICT",
|
|
9
|
+
severity: "error",
|
|
10
|
+
subject: "AGENTS.md",
|
|
11
|
+
message
|
|
12
|
+
}]
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
function decodeAgentsSource(bytes) {
|
|
16
|
+
const source = new TextDecoder("utf-8", { fatal: true }).decode(bytes);
|
|
17
|
+
if (source.includes("\u0000") || source.startsWith("\uFEFF") || source.normalize("NFC") !== source) {
|
|
18
|
+
throw new TypeError("AGENTS.md must be NFC UTF-8 text without BOM or NUL bytes.");
|
|
19
|
+
}
|
|
20
|
+
if (source.includes("\r\n") && source.replaceAll("\r\n", "").includes("\n")) {
|
|
21
|
+
throw new TypeError("AGENTS.md must not mix LF and CRLF line endings.");
|
|
22
|
+
}
|
|
23
|
+
return source;
|
|
24
|
+
}
|
|
25
|
+
export function planAgentsRouteV1(input) {
|
|
26
|
+
if (input.observation.state === "absent") {
|
|
27
|
+
const empty = digestBytes(new Uint8Array());
|
|
28
|
+
const postimage = Buffer.from(`${canonicalManagedRoute(input.skillPath)}\n`, "utf8");
|
|
29
|
+
return {
|
|
30
|
+
state: "absent",
|
|
31
|
+
currentDigest: empty,
|
|
32
|
+
expectedDigest: digestBytes(postimage),
|
|
33
|
+
postimage,
|
|
34
|
+
issues: []
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
const bytes = Buffer.from(input.observation.bytes);
|
|
38
|
+
const currentDigest = digestBytes(bytes);
|
|
39
|
+
let source;
|
|
40
|
+
try {
|
|
41
|
+
source = decodeAgentsSource(bytes);
|
|
42
|
+
}
|
|
43
|
+
catch (error) {
|
|
44
|
+
return conflict(currentDigest, error instanceof Error ? error.message : "AGENTS.md must be valid UTF-8 text.");
|
|
45
|
+
}
|
|
46
|
+
const eol = source.includes("\r\n") ? "\r\n" : "\n";
|
|
47
|
+
const normalized = source.replaceAll("\r\n", "\n");
|
|
48
|
+
const targetBlock = canonicalManagedRoute(input.skillPath);
|
|
49
|
+
const beginCount = normalized.split(MANAGED_ROUTE_BEGIN).length - 1;
|
|
50
|
+
const endCount = normalized.split(MANAGED_ROUTE_END).length - 1;
|
|
51
|
+
let next;
|
|
52
|
+
if (beginCount === 1 && endCount === 1) {
|
|
53
|
+
const begin = normalized.indexOf(MANAGED_ROUTE_BEGIN);
|
|
54
|
+
const end = normalized.indexOf(MANAGED_ROUTE_END, begin) + MANAGED_ROUTE_END.length;
|
|
55
|
+
if (begin < 0 || end < begin) {
|
|
56
|
+
return conflict(currentDigest, "The managed documentation route block is malformed.");
|
|
57
|
+
}
|
|
58
|
+
const currentBlock = normalized.slice(begin, end);
|
|
59
|
+
if (currentBlock !== targetBlock &&
|
|
60
|
+
digestBytes(Buffer.from(currentBlock, "utf8")) !== input.knownPriorRouteDigest) {
|
|
61
|
+
return conflict(currentDigest, "The managed documentation route block contains unknown local changes.");
|
|
62
|
+
}
|
|
63
|
+
next = `${normalized.slice(0, begin)}${targetBlock}${normalized.slice(end)}`;
|
|
64
|
+
}
|
|
65
|
+
else if (beginCount !== 0 || endCount !== 0) {
|
|
66
|
+
return conflict(currentDigest, "AGENTS.md contains duplicate or incomplete managed route markers.");
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
const legacy = `Use [${input.skillPath}](${input.skillPath}) for documentation.`;
|
|
70
|
+
const legacyCount = normalized.split(legacy).length - 1;
|
|
71
|
+
const mentions = normalized.split("\n").filter((line) => line.includes("docs-authoring/SKILL.md"));
|
|
72
|
+
if (legacyCount === 1 && mentions.length === 1) {
|
|
73
|
+
next = normalized.replace(legacy, targetBlock);
|
|
74
|
+
}
|
|
75
|
+
else if (mentions.length > 0) {
|
|
76
|
+
return conflict(currentDigest, "AGENTS.md contains an unknown documentation Skill route.");
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
const separator = normalized.endsWith("\n\n") ? "" : normalized.endsWith("\n") ? "\n" : "\n\n";
|
|
80
|
+
next = `${normalized}${separator}${targetBlock}\n`;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
const postimage = Buffer.from(next.replaceAll("\n", eol), "utf8");
|
|
84
|
+
const expectedDigest = digestBytes(postimage);
|
|
85
|
+
if (expectedDigest === currentDigest) {
|
|
86
|
+
return { state: "exact-current", currentDigest, expectedDigest, issues: [] };
|
|
87
|
+
}
|
|
88
|
+
return {
|
|
89
|
+
state: "known-prior",
|
|
90
|
+
currentDigest,
|
|
91
|
+
expectedDigest,
|
|
92
|
+
postimage,
|
|
93
|
+
issues: []
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
export const agentsRoutePlannerV1 = Object.freeze({
|
|
97
|
+
plan: planAgentsRouteV1
|
|
98
|
+
});
|
|
99
|
+
//# sourceMappingURL=agents-route-adapter-v1.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agents-route-adapter-v1.js","sourceRoot":"","sources":["../../../src/consumer-integration/adapters/agents-route-adapter-v1.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export interface ConsumerRepositoryTopology {
|
|
2
|
+
readonly agents: readonly string[];
|
|
3
|
+
readonly integrationProfiles: readonly string[];
|
|
4
|
+
readonly lockfiles: readonly string[];
|
|
5
|
+
readonly pnpmfiles: readonly string[];
|
|
6
|
+
}
|
|
7
|
+
export declare function scanConsumerRepositoryTopology(root: string): Promise<ConsumerRepositoryTopology>;
|
|
8
|
+
//# sourceMappingURL=bounded-repository-topology.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bounded-repository-topology.d.ts","sourceRoot":"","sources":["../../../src/consumer-integration/adapters/bounded-repository-topology.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,QAAQ,CAAC,mBAAmB,EAAE,SAAS,MAAM,EAAE,CAAC;IAChD,QAAQ,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;IACtC,QAAQ,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;CACvC;AAuBD,wBAAsB,8BAA8B,CAClD,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,0BAA0B,CAAC,CA6CrC"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { opendir } from "node:fs/promises";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
const MAXIMUM_ENTRIES = 100_000;
|
|
4
|
+
const MAXIMUM_DEPTH = 64;
|
|
5
|
+
const SKIPPED_DIRECTORIES = new Set([".git", ".pnpm-store", "node_modules"]);
|
|
6
|
+
function sorted(values) {
|
|
7
|
+
return Object.freeze(values.toSorted());
|
|
8
|
+
}
|
|
9
|
+
function childDirectory(input) {
|
|
10
|
+
if (SKIPPED_DIRECTORIES.has(input.entryName)) {
|
|
11
|
+
return undefined;
|
|
12
|
+
}
|
|
13
|
+
if (input.depth >= MAXIMUM_DEPTH) {
|
|
14
|
+
throw new TypeError(`Repository topology exceeds ${MAXIMUM_DEPTH} directory levels.`);
|
|
15
|
+
}
|
|
16
|
+
return {
|
|
17
|
+
absolute: join(input.absolute, input.entryName),
|
|
18
|
+
relative: input.path,
|
|
19
|
+
depth: input.depth + 1
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
export async function scanConsumerRepositoryTopology(root) {
|
|
23
|
+
const agents = [];
|
|
24
|
+
const integrationProfiles = [];
|
|
25
|
+
const lockfiles = [];
|
|
26
|
+
const pnpmfiles = [];
|
|
27
|
+
const pending = [
|
|
28
|
+
{ absolute: root, relative: "", depth: 0 }
|
|
29
|
+
];
|
|
30
|
+
let observed = 0;
|
|
31
|
+
while (pending.length > 0) {
|
|
32
|
+
const directory = pending.pop();
|
|
33
|
+
const handle = await opendir(directory.absolute);
|
|
34
|
+
for await (const entry of handle) {
|
|
35
|
+
observed += 1;
|
|
36
|
+
if (observed > MAXIMUM_ENTRIES) {
|
|
37
|
+
throw new TypeError(`Repository topology exceeds ${MAXIMUM_ENTRIES} entries.`);
|
|
38
|
+
}
|
|
39
|
+
const path = directory.relative === "" ? entry.name : `${directory.relative}/${entry.name}`;
|
|
40
|
+
if (entry.isSymbolicLink()) {
|
|
41
|
+
continue;
|
|
42
|
+
}
|
|
43
|
+
if (entry.isDirectory()) {
|
|
44
|
+
const child = childDirectory({
|
|
45
|
+
absolute: directory.absolute,
|
|
46
|
+
depth: directory.depth,
|
|
47
|
+
entryName: entry.name,
|
|
48
|
+
path
|
|
49
|
+
});
|
|
50
|
+
if (child !== undefined) {
|
|
51
|
+
pending.push(child);
|
|
52
|
+
}
|
|
53
|
+
continue;
|
|
54
|
+
}
|
|
55
|
+
if (!entry.isFile()) {
|
|
56
|
+
continue;
|
|
57
|
+
}
|
|
58
|
+
if (entry.name === "AGENTS.md") {
|
|
59
|
+
agents.push(path);
|
|
60
|
+
}
|
|
61
|
+
if (entry.name === "pnpm-lock.yaml") {
|
|
62
|
+
lockfiles.push(path);
|
|
63
|
+
}
|
|
64
|
+
if (entry.name === ".pnpmfile.cjs") {
|
|
65
|
+
pnpmfiles.push(path);
|
|
66
|
+
}
|
|
67
|
+
if (path === "architecture/foundation/docs-consumer-integration.json" ||
|
|
68
|
+
path.endsWith("/architecture/foundation/docs-consumer-integration.json")) {
|
|
69
|
+
integrationProfiles.push(path);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
return Object.freeze({
|
|
74
|
+
agents: sorted(agents),
|
|
75
|
+
integrationProfiles: sorted(integrationProfiles),
|
|
76
|
+
lockfiles: sorted(lockfiles),
|
|
77
|
+
pnpmfiles: sorted(pnpmfiles)
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=bounded-repository-topology.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bounded-repository-topology.js","sourceRoot":"","sources":["../../../src/consumer-integration/adapters/bounded-repository-topology.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"consumer-integration-node-error.d.ts","sourceRoot":"","sources":["../../../src/consumer-integration/adapters/consumer-integration-node-error.ts"],"names":[],"mappings":"AAAA,qBAAa,4BAA6B,SAAQ,KAAK;IACrD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB,YAAmB,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY,EAIvE;CACF"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export class ConsumerIntegrationNodeError extends Error {
|
|
2
|
+
code;
|
|
3
|
+
constructor(code, message, options) {
|
|
4
|
+
super(message, options);
|
|
5
|
+
this.name = "ConsumerIntegrationNodeError";
|
|
6
|
+
this.code = code;
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=consumer-integration-node-error.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"consumer-integration-node-error.js","sourceRoot":"","sources":["../../../src/consumer-integration/adapters/consumer-integration-node-error.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,4BAA6B,SAAQ,KAAK;IAC5C,IAAI,CAAS;IAEtB,YAAmB,IAAY,EAAE,OAAe,EAAE,OAAsB;QACtE,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACxB,IAAI,CAAC,IAAI,GAAG,8BAA8B,CAAC;QAC3C,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;CACF"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export declare function assertConsumerIntegrationProfileSchema(value: unknown): Promise<void>;
|
|
2
|
+
export declare function assertConsumerIntegrationExecutionSchema(value: unknown): Promise<void>;
|
|
3
|
+
export declare function assertConsumerUpgradeExecutionSchema(value: unknown): Promise<void>;
|
|
4
|
+
//# sourceMappingURL=consumer-integration-schema-validator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"consumer-integration-schema-validator.d.ts","sourceRoot":"","sources":["../../../src/consumer-integration/adapters/consumer-integration-schema-validator.ts"],"names":[],"mappings":"AAoDA,wBAAgB,sCAAsC,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAKpF;AAED,wBAAgB,wCAAwC,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAEtF;AAED,wBAAgB,oCAAoC,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAElF"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { readFile } from "node:fs/promises";
|
|
2
|
+
import { Ajv2020 } from "ajv/dist/2020.js";
|
|
3
|
+
const validators = new Map();
|
|
4
|
+
async function validator(id) {
|
|
5
|
+
const existing = validators.get(id);
|
|
6
|
+
if (existing !== undefined) {
|
|
7
|
+
return existing;
|
|
8
|
+
}
|
|
9
|
+
const loading = (async () => {
|
|
10
|
+
const ajv = new Ajv2020({ allErrors: true, strict: true });
|
|
11
|
+
if (id === "docs-consumer-integration-execution" || id === "docs-consumer-upgrade-execution") {
|
|
12
|
+
const [plan, mutationReceipt] = await Promise.all([
|
|
13
|
+
readFile(new URL("../../../schemas/docs-consumer-integration-plan/v1.schema.json", import.meta.url), "utf8"),
|
|
14
|
+
readFile(new URL("../../../../repository-mutation/schemas/known-file-transaction-receipt/v1.schema.json", import.meta.url), "utf8")
|
|
15
|
+
]);
|
|
16
|
+
ajv.addSchema(JSON.parse(plan));
|
|
17
|
+
ajv.addSchema(JSON.parse(mutationReceipt));
|
|
18
|
+
}
|
|
19
|
+
const schemaUrl = new URL(id === "docs-consumer-integration-profile-v2"
|
|
20
|
+
? "../../../schemas/docs-consumer-integration-profile/v2.schema.json"
|
|
21
|
+
: `../../../schemas/${id}/v1.schema.json`, import.meta.url);
|
|
22
|
+
return ajv.compile(JSON.parse(await readFile(schemaUrl, "utf8")));
|
|
23
|
+
})();
|
|
24
|
+
validators.set(id, loading);
|
|
25
|
+
return loading;
|
|
26
|
+
}
|
|
27
|
+
async function assertSchema(id, value) {
|
|
28
|
+
const validate = await validator(id);
|
|
29
|
+
if (validate(value)) {
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
const problems = (validate.errors ?? [])
|
|
33
|
+
.slice(0, 8)
|
|
34
|
+
.map(({ instancePath, message }) => `${instancePath || "/"} ${message ?? "is invalid"}`)
|
|
35
|
+
.join("; ")
|
|
36
|
+
.slice(0, 1000);
|
|
37
|
+
throw new TypeError(`${id}${id.endsWith("-v2") ? "" : "/v1"} validation failed: ${problems}`);
|
|
38
|
+
}
|
|
39
|
+
export function assertConsumerIntegrationProfileSchema(value) {
|
|
40
|
+
const version = typeof value === "object" && value !== null && "schemaVersion" in value
|
|
41
|
+
? value.schemaVersion
|
|
42
|
+
: undefined;
|
|
43
|
+
return assertSchema(version === 2 ? "docs-consumer-integration-profile-v2" : "docs-consumer-integration-profile", value);
|
|
44
|
+
}
|
|
45
|
+
export function assertConsumerIntegrationExecutionSchema(value) {
|
|
46
|
+
return assertSchema("docs-consumer-integration-execution", value);
|
|
47
|
+
}
|
|
48
|
+
export function assertConsumerUpgradeExecutionSchema(value) {
|
|
49
|
+
return assertSchema("docs-consumer-upgrade-execution", value);
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=consumer-integration-schema-validator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"consumer-integration-schema-validator.js","sourceRoot":"","sources":["../../../src/consumer-integration/adapters/consumer-integration-schema-validator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { QualifiedDocsCohortBindingV1 } from "../domain/model.js";
|
|
2
|
+
export declare function projectConsumerIntegrationProfileV1(input: {
|
|
3
|
+
readonly bytes: Uint8Array;
|
|
4
|
+
readonly cohort: QualifiedDocsCohortBindingV1;
|
|
5
|
+
}): Promise<Uint8Array>;
|
|
6
|
+
export declare function projectPnpmWorkspaceCohortExclusionsV1(input: {
|
|
7
|
+
readonly bytes: Uint8Array;
|
|
8
|
+
readonly cohort: QualifiedDocsCohortBindingV1;
|
|
9
|
+
}): Uint8Array;
|
|
10
|
+
/**
|
|
11
|
+
* Builds the temporary workspace policy used only while pnpm replaces the
|
|
12
|
+
* source Cohort lock graph with the target graph. The committed projection
|
|
13
|
+
* remains target-only; this bridge prevents a valid recent source package
|
|
14
|
+
* from becoming time-dependent during lockfile regeneration.
|
|
15
|
+
*/
|
|
16
|
+
export declare function projectPnpmWorkspaceMigrationExclusionsV1(input: {
|
|
17
|
+
readonly bytes: Uint8Array;
|
|
18
|
+
readonly source: QualifiedDocsCohortBindingV1;
|
|
19
|
+
readonly target: QualifiedDocsCohortBindingV1;
|
|
20
|
+
}): Uint8Array;
|
|
21
|
+
//# sourceMappingURL=consumer-upgrade-file-projectors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"consumer-upgrade-file-projectors.d.ts","sourceRoot":"","sources":["../../../src/consumer-integration/adapters/consumer-upgrade-file-projectors.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,4BAA4B,EAC7B,MAAM,oBAAoB,CAAC;AAmC5B,wBAAsB,mCAAmC,CAAC,KAAK,EAAE;IAC/D,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,4BAA4B,CAAC;CAC/C,GAAG,OAAO,CAAC,UAAU,CAAC,CAWtB;AA+BD,wBAAgB,sCAAsC,CAAC,KAAK,EAAE;IAC5D,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,4BAA4B,CAAC;CAC/C,GAAG,UAAU,CAwCb;AAED;;;;;GAKG;AACH,wBAAgB,yCAAyC,CAAC,KAAK,EAAE;IAC/D,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,4BAA4B,CAAC;IAC9C,QAAQ,CAAC,MAAM,EAAE,4BAA4B,CAAC;CAC/C,GAAG,UAAU,CAsBb"}
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
import { applyEdits, modify } from "jsonc-parser";
|
|
2
|
+
import { isMap, isScalar, isSeq, parseDocument } from "yaml";
|
|
3
|
+
import { assertConsumerIntegrationProfileSchema } from "./consumer-integration-schema-validator.js";
|
|
4
|
+
import { ConsumerIntegrationNodeError } from "./consumer-integration-node-error.js";
|
|
5
|
+
import { parseJsonRecord } from "./strict-json-record.js";
|
|
6
|
+
const DOCS_PACKAGE = "@agent-teams/docs-protocol";
|
|
7
|
+
const FOUNDATION_PACKAGE = "@agent-teams/engineering-foundation";
|
|
8
|
+
function decode(bytes, subject) {
|
|
9
|
+
try {
|
|
10
|
+
const source = new TextDecoder("utf-8", { fatal: true }).decode(bytes);
|
|
11
|
+
if (source.startsWith("\uFEFF") || source.includes("\u0000")) {
|
|
12
|
+
throw new TypeError(`${subject} contains a BOM or NUL byte.`);
|
|
13
|
+
}
|
|
14
|
+
return source;
|
|
15
|
+
}
|
|
16
|
+
catch {
|
|
17
|
+
throw new ConsumerIntegrationNodeError("DOCS_CONSUMER_UPGRADE_INPUT_INVALID", `${subject} must be strict UTF-8 without a BOM or NUL bytes.`);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
function formatting(source) {
|
|
21
|
+
const eol = source.includes("\r\n") ? "\r\n" : "\n";
|
|
22
|
+
const indent = source.match(/\n([\t ]+)"/u)?.[1] ?? " ";
|
|
23
|
+
return {
|
|
24
|
+
eol,
|
|
25
|
+
insertSpaces: !indent.includes("\t"),
|
|
26
|
+
tabSize: indent.includes("\t") ? 1 : indent.length
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
export async function projectConsumerIntegrationProfileV1(input) {
|
|
30
|
+
const source = decode(input.bytes, "Consumer integration profile");
|
|
31
|
+
const profile = parseJsonRecord(source);
|
|
32
|
+
await assertConsumerIntegrationProfileSchema(profile);
|
|
33
|
+
const edits = modify(source, ["cohort"], input.cohort, {
|
|
34
|
+
formattingOptions: formatting(source)
|
|
35
|
+
});
|
|
36
|
+
if (edits.length === 0) {
|
|
37
|
+
return Buffer.from(source, "utf8");
|
|
38
|
+
}
|
|
39
|
+
const postimage = applyEdits(source, edits);
|
|
40
|
+
await assertConsumerIntegrationProfileSchema(parseJsonRecord(postimage));
|
|
41
|
+
return Buffer.from(postimage, "utf8");
|
|
42
|
+
}
|
|
43
|
+
function managedPackageName(value) {
|
|
44
|
+
if (value === DOCS_PACKAGE || value.startsWith(`${DOCS_PACKAGE}@`)) {
|
|
45
|
+
return DOCS_PACKAGE;
|
|
46
|
+
}
|
|
47
|
+
if (value === FOUNDATION_PACKAGE || value.startsWith(`${FOUNDATION_PACKAGE}@`)) {
|
|
48
|
+
return FOUNDATION_PACKAGE;
|
|
49
|
+
}
|
|
50
|
+
return undefined;
|
|
51
|
+
}
|
|
52
|
+
function exactExclusions(cohort) {
|
|
53
|
+
return new Map([
|
|
54
|
+
[FOUNDATION_PACKAGE, `${FOUNDATION_PACKAGE}@${cohort.packages.engineeringFoundation.version}`],
|
|
55
|
+
[DOCS_PACKAGE, `${DOCS_PACKAGE}@${cohort.packages.docsProtocol.version}`]
|
|
56
|
+
]);
|
|
57
|
+
}
|
|
58
|
+
function scalarItems(sequence) {
|
|
59
|
+
const items = [];
|
|
60
|
+
for (const item of sequence.items) {
|
|
61
|
+
if (!isScalar(item) || typeof item.value !== "string") {
|
|
62
|
+
throw new ConsumerIntegrationNodeError("DOCS_CONSUMER_WORKSPACE_INVALID", "pnpm minimumReleaseAgeExclude entries must be strings.");
|
|
63
|
+
}
|
|
64
|
+
items.push(item);
|
|
65
|
+
}
|
|
66
|
+
return items;
|
|
67
|
+
}
|
|
68
|
+
export function projectPnpmWorkspaceCohortExclusionsV1(input) {
|
|
69
|
+
const source = decode(input.bytes, "pnpm-workspace.yaml");
|
|
70
|
+
const document = parseDocument(source, { uniqueKeys: true });
|
|
71
|
+
if (document.errors.length > 0 || !isMap(document.contents)) {
|
|
72
|
+
throw new ConsumerIntegrationNodeError("DOCS_CONSUMER_WORKSPACE_INVALID", "pnpm-workspace.yaml must be one duplicate-free YAML mapping.");
|
|
73
|
+
}
|
|
74
|
+
const current = document.get("minimumReleaseAgeExclude", true);
|
|
75
|
+
const hasAgePolicy = document.has("minimumReleaseAge") ||
|
|
76
|
+
document.get("minimumReleaseAgeStrict") === true;
|
|
77
|
+
if (current === undefined && !hasAgePolicy) {
|
|
78
|
+
return Buffer.from(source, "utf8");
|
|
79
|
+
}
|
|
80
|
+
if (current !== undefined && !isSeq(current)) {
|
|
81
|
+
throw new ConsumerIntegrationNodeError("DOCS_CONSUMER_WORKSPACE_INVALID", "pnpm minimumReleaseAgeExclude must be one sequence.");
|
|
82
|
+
}
|
|
83
|
+
const sequence = current ?? document.createNode([]);
|
|
84
|
+
if (!isSeq(sequence)) {
|
|
85
|
+
throw new Error("unreachable");
|
|
86
|
+
}
|
|
87
|
+
if (current === undefined) {
|
|
88
|
+
document.set("minimumReleaseAgeExclude", sequence);
|
|
89
|
+
}
|
|
90
|
+
const expected = exactExclusions(input.cohort);
|
|
91
|
+
const seen = new Set();
|
|
92
|
+
for (const item of scalarItems(sequence)) {
|
|
93
|
+
const packageName = managedPackageName(item.value);
|
|
94
|
+
if (packageName === undefined) {
|
|
95
|
+
continue;
|
|
96
|
+
}
|
|
97
|
+
if (seen.has(packageName)) {
|
|
98
|
+
throw new ConsumerIntegrationNodeError("DOCS_CONSUMER_WORKSPACE_INVALID", `pnpm minimumReleaseAgeExclude contains duplicate ${packageName} authority.`);
|
|
99
|
+
}
|
|
100
|
+
seen.add(packageName);
|
|
101
|
+
item.value = expected.get(packageName);
|
|
102
|
+
}
|
|
103
|
+
for (const packageName of [FOUNDATION_PACKAGE, DOCS_PACKAGE]) {
|
|
104
|
+
if (!seen.has(packageName)) {
|
|
105
|
+
sequence.add(expected.get(packageName));
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
return Buffer.from(String(document), "utf8");
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Builds the temporary workspace policy used only while pnpm replaces the
|
|
112
|
+
* source Cohort lock graph with the target graph. The committed projection
|
|
113
|
+
* remains target-only; this bridge prevents a valid recent source package
|
|
114
|
+
* from becoming time-dependent during lockfile regeneration.
|
|
115
|
+
*/
|
|
116
|
+
export function projectPnpmWorkspaceMigrationExclusionsV1(input) {
|
|
117
|
+
const targetBytes = projectPnpmWorkspaceCohortExclusionsV1({
|
|
118
|
+
bytes: input.bytes,
|
|
119
|
+
cohort: input.target
|
|
120
|
+
});
|
|
121
|
+
const source = decode(targetBytes, "pnpm-workspace.yaml");
|
|
122
|
+
const document = parseDocument(source, { uniqueKeys: true });
|
|
123
|
+
if (document.errors.length > 0 || !isMap(document.contents)) {
|
|
124
|
+
throw new Error("unreachable");
|
|
125
|
+
}
|
|
126
|
+
const current = document.get("minimumReleaseAgeExclude", true);
|
|
127
|
+
const hasAgePolicy = document.has("minimumReleaseAge") ||
|
|
128
|
+
document.get("minimumReleaseAgeStrict") === true;
|
|
129
|
+
if (current === undefined && !hasAgePolicy) {
|
|
130
|
+
return targetBytes;
|
|
131
|
+
}
|
|
132
|
+
if (!isSeq(current)) {
|
|
133
|
+
throw new Error("unreachable");
|
|
134
|
+
}
|
|
135
|
+
const existing = new Set(scalarItems(current).map(({ value }) => value));
|
|
136
|
+
const targetExclusions = exactExclusions(input.target);
|
|
137
|
+
for (const [packageName, exclusion] of exactExclusions(input.source)) {
|
|
138
|
+
if (exclusion !== targetExclusions.get(packageName) && !existing.has(exclusion)) {
|
|
139
|
+
current.add(exclusion);
|
|
140
|
+
existing.add(exclusion);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
return Buffer.from(String(document), "utf8");
|
|
144
|
+
}
|
|
145
|
+
//# sourceMappingURL=consumer-upgrade-file-projectors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"consumer-upgrade-file-projectors.js","sourceRoot":"","sources":["../../../src/consumer-integration/adapters/consumer-upgrade-file-projectors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,aAAa,EAA6B,MAAM,MAAM,CAAC;AAKxF,OAAO,EACL,sCAAsC,EACvC,MAAM,4CAA4C,CAAC;AACpD,OAAO,EAAE,4BAA4B,EAAE,MAAM,sCAAsC,CAAC;AACpF,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE1D,MAAM,YAAY,GAAG,4BAA4B,CAAC;AAClD,MAAM,kBAAkB,GAAG,qCAAqC,CAAC;AAEjE,SAAS,MAAM,CAAC,KAAiB,EAAE,OAAe;IAChD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,WAAW,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE,IAAI,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC7D,MAAM,IAAI,SAAS,CAAC,GAAG,OAAO,8BAA8B,CAAC,CAAC;QAChE,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,4BAA4B,CACpC,qCAAqC,EACrC,GAAG,OAAO,mDAAmD,CAC9D,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAS,UAAU,CAAC,MAAc;IAChC,MAAM,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;IACpD,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;IACzD,OAAO;QACL,GAAG;QACH,YAAY,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;QACpC,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM;KACnD,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mCAAmC,CAAC,KAGzD;IACC,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,8BAA8B,CAAC,CAAC;IACnE,MAAM,OAAO,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;IACxC,MAAM,sCAAsC,CAAC,OAAO,CAAC,CAAC;IACtD,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAC,MAAM,EAAE;QACrD,iBAAiB,EAAE,UAAU,CAAC,MAAM,CAAC;KACtC,CAAC,CAAC;IACH,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAAA,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAAA,CAAC;IAC7D,MAAM,SAAS,GAAG,UAAU,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAC5C,MAAM,sCAAsC,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,CAAC;IACzE,OAAO,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;AACxC,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAa;IACvC,IAAI,KAAK,KAAK,YAAY,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,YAAY,GAAG,CAAC,EAAE,CAAC;QAAA,OAAO,YAAY,CAAC;IAAA,CAAC;IAC1F,IAAI,KAAK,KAAK,kBAAkB,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,kBAAkB,GAAG,CAAC,EAAE,CAAC;QAC/E,OAAO,kBAAkB,CAAC;IAC5B,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,eAAe,CAAC,MAAoC;IAC3D,OAAO,IAAI,GAAG,CAAC;QACb,CAAC,kBAAkB,EAAE,GAAG,kBAAkB,IAAI,MAAM,CAAC,QAAQ,CAAC,qBAAqB,CAAC,OAAO,EAAE,CAAC;QAC9F,CAAC,YAAY,EAAE,GAAG,YAAY,IAAI,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;KAC1E,CAAC,CAAC;AACL,CAAC;AAED,SAAS,WAAW,CAAC,QAAiB;IACpC,MAAM,KAAK,GAAqB,EAAE,CAAC;IACnC,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;QAClC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;YACtD,MAAM,IAAI,4BAA4B,CACpC,iCAAiC,EACjC,wDAAwD,CACzD,CAAC;QACJ,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,IAAsB,CAAC,CAAC;IACrC,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,sCAAsC,CAAC,KAGtD;IACC,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,qBAAqB,CAAC,CAAC;IAC1D,MAAM,QAAQ,GAAG,aAAa,CAAC,MAAM,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7D,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5D,MAAM,IAAI,4BAA4B,CACpC,iCAAiC,EACjC,8DAA8D,CAC/D,CAAC;IACJ,CAAC;IACD,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,0BAA0B,EAAE,IAAI,CAAC,CAAC;IAC/D,MAAM,YAAY,GAAG,QAAQ,CAAC,GAAG,CAAC,mBAAmB,CAAC;QACpD,QAAQ,CAAC,GAAG,CAAC,yBAAyB,CAAC,KAAK,IAAI,CAAC;IACnD,IAAI,OAAO,KAAK,SAAS,IAAI,CAAC,YAAY,EAAE,CAAC;QAAA,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAAA,CAAC;IACjF,IAAI,OAAO,KAAK,SAAS,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;QAC7C,MAAM,IAAI,4BAA4B,CACpC,iCAAiC,EACjC,qDAAqD,CACtD,CAAC;IACJ,CAAC;IACD,MAAM,QAAQ,GAAG,OAAO,IAAI,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;IACpD,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;QAAA,MAAM,IAAI,KAAK,CAAC,aAAa,CAAC,CAAC;IAAA,CAAC;IACvD,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAAA,QAAQ,CAAC,GAAG,CAAC,0BAA0B,EAAE,QAAQ,CAAC,CAAC;IAAA,CAAC;IAChF,MAAM,QAAQ,GAAG,eAAe,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC/C,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,KAAK,MAAM,IAAI,IAAI,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC;QACzC,MAAM,WAAW,GAAG,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACnD,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;YAAA,SAAS;QAAA,CAAC;QAC1C,IAAI,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC;YAC1B,MAAM,IAAI,4BAA4B,CACpC,iCAAiC,EACjC,oDAAoD,WAAW,aAAa,CAC7E,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QACtB,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAE,CAAC;IAC1C,CAAC;IACD,KAAK,MAAM,WAAW,IAAI,CAAC,kBAAkB,EAAE,YAAY,CAAC,EAAE,CAAC;QAC7D,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC;YAAA,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAE,CAAC,CAAC;QAAA,CAAC;IACzE,CAAC;IACD,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,CAAC;AAC/C,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,yCAAyC,CAAC,KAIzD;IACC,MAAM,WAAW,GAAG,sCAAsC,CAAC;QACzD,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,MAAM,EAAE,KAAK,CAAC,MAAM;KACrB,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,EAAE,qBAAqB,CAAC,CAAC;IAC1D,MAAM,QAAQ,GAAG,aAAa,CAAC,MAAM,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7D,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QAAA,MAAM,IAAI,KAAK,CAAC,aAAa,CAAC,CAAC;IAAA,CAAC;IAC9F,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,0BAA0B,EAAE,IAAI,CAAC,CAAC;IAC/D,MAAM,YAAY,GAAG,QAAQ,CAAC,GAAG,CAAC,mBAAmB,CAAC;QACpD,QAAQ,CAAC,GAAG,CAAC,yBAAyB,CAAC,KAAK,IAAI,CAAC;IACnD,IAAI,OAAO,KAAK,SAAS,IAAI,CAAC,YAAY,EAAE,CAAC;QAAA,OAAO,WAAW,CAAC;IAAA,CAAC;IACjE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;QAAA,MAAM,IAAI,KAAK,CAAC,aAAa,CAAC,CAAC;IAAA,CAAC;IACtD,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IACzE,MAAM,gBAAgB,GAAG,eAAe,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACvD,KAAK,MAAM,CAAC,WAAW,EAAE,SAAS,CAAC,IAAI,eAAe,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;QACrE,IAAI,SAAS,KAAK,gBAAgB,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;YAChF,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YACvB,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,CAAC;AAC/C,CAAC"}
|