@clossys/launcher 0.3.1 → 0.5.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/README.md +1373 -60
- package/contracts/conversation-contract.md +2 -2
- package/contracts/product-ci-workflow.yml +74 -0
- package/contracts/repository-inventory.json +53 -0
- package/dist/admission-fixture.d.ts +168 -0
- package/dist/admission-fixture.d.ts.map +1 -0
- package/dist/admission-fixture.js +467 -0
- package/dist/admission-fixture.js.map +1 -0
- package/dist/admission.d.ts +124 -0
- package/dist/admission.d.ts.map +1 -0
- package/dist/admission.js +804 -0
- package/dist/admission.js.map +1 -0
- package/dist/agents-guide.d.ts +9 -0
- package/dist/agents-guide.d.ts.map +1 -0
- package/dist/agents-guide.js +26 -0
- package/dist/agents-guide.js.map +1 -0
- package/dist/apply-command-options.check.d.ts +12 -0
- package/dist/apply-command-options.check.d.ts.map +1 -0
- package/dist/apply-command-options.check.js +20 -0
- package/dist/apply-command-options.check.js.map +1 -0
- package/dist/apply-plan-cli.d.ts +39 -1
- package/dist/apply-plan-cli.d.ts.map +1 -1
- package/dist/apply-plan-cli.js +432 -15
- package/dist/apply-plan-cli.js.map +1 -1
- package/dist/apply-plan.d.ts +46 -59
- package/dist/apply-plan.d.ts.map +1 -1
- package/dist/apply-plan.js +112 -97
- package/dist/apply-plan.js.map +1 -1
- package/dist/apply-step-fixture.d.ts +87 -0
- package/dist/apply-step-fixture.d.ts.map +1 -0
- package/dist/apply-step-fixture.js +199 -0
- package/dist/apply-step-fixture.js.map +1 -0
- package/dist/apply-store.d.ts +93 -0
- package/dist/apply-store.d.ts.map +1 -0
- package/dist/apply-store.js +625 -0
- package/dist/apply-store.js.map +1 -0
- package/dist/approval-sheet.d.ts +21 -0
- package/dist/approval-sheet.d.ts.map +1 -0
- package/dist/approval-sheet.js +163 -0
- package/dist/approval-sheet.js.map +1 -0
- package/dist/body-command.d.ts +42 -0
- package/dist/body-command.d.ts.map +1 -0
- package/dist/body-command.js +143 -0
- package/dist/body-command.js.map +1 -0
- package/dist/change-set-contract.d.ts +403 -0
- package/dist/change-set-contract.d.ts.map +1 -0
- package/dist/change-set-contract.js +781 -0
- package/dist/change-set-contract.js.map +1 -0
- package/dist/change-set-digest.d.ts +28 -0
- package/dist/change-set-digest.d.ts.map +1 -0
- package/dist/change-set-digest.js +65 -0
- package/dist/change-set-digest.js.map +1 -0
- package/dist/check-cli.d.ts.map +1 -1
- package/dist/check-cli.js +14 -3
- package/dist/check-cli.js.map +1 -1
- package/dist/cli.d.ts +17 -6
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +84 -23
- package/dist/cli.js.map +1 -1
- package/dist/core.d.ts +79 -22
- package/dist/core.d.ts.map +1 -1
- package/dist/core.js +843 -268
- package/dist/core.js.map +1 -1
- package/dist/dry-materialize.d.ts +63 -0
- package/dist/dry-materialize.d.ts.map +1 -0
- package/dist/dry-materialize.js +330 -0
- package/dist/dry-materialize.js.map +1 -0
- package/dist/existing-declaration-adoption.check.d.ts +2 -0
- package/dist/existing-declaration-adoption.check.d.ts.map +1 -0
- package/dist/existing-declaration-adoption.check.js +10 -0
- package/dist/existing-declaration-adoption.check.js.map +1 -0
- package/dist/generated/contract-schema.generated.d.ts +97 -0
- package/dist/generated/contract-schema.generated.d.ts.map +1 -0
- package/dist/generated/contract-schema.generated.js +496 -0
- package/dist/generated/contract-schema.generated.js.map +1 -0
- package/dist/generated/package-scope.generated.d.ts +6 -0
- package/dist/generated/package-scope.generated.d.ts.map +1 -0
- package/dist/generated/package-scope.generated.js +10 -0
- package/dist/generated/package-scope.generated.js.map +1 -0
- package/dist/generated/plan-contracts.generated.d.ts +3 -0
- package/dist/generated/plan-contracts.generated.d.ts.map +1 -0
- package/dist/generated/plan-contracts.generated.js +3101 -0
- package/dist/generated/plan-contracts.generated.js.map +1 -0
- package/dist/host.d.ts.map +1 -1
- package/dist/host.js +11 -0
- package/dist/host.js.map +1 -1
- package/dist/identity.d.ts +15 -0
- package/dist/identity.d.ts.map +1 -0
- package/dist/identity.js +48 -0
- package/dist/identity.js.map +1 -0
- package/dist/index.d.ts +35 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +19 -2
- package/dist/index.js.map +1 -1
- package/dist/inventory-adoption.d.ts +24 -5
- package/dist/inventory-adoption.d.ts.map +1 -1
- package/dist/inventory-adoption.js +70 -25
- package/dist/inventory-adoption.js.map +1 -1
- package/dist/inventory-choice.d.ts +40 -0
- package/dist/inventory-choice.d.ts.map +1 -0
- package/dist/inventory-choice.js +156 -0
- package/dist/inventory-choice.js.map +1 -0
- package/dist/inventory-contract.d.ts +89 -0
- package/dist/inventory-contract.d.ts.map +1 -0
- package/dist/inventory-contract.js +121 -0
- package/dist/inventory-contract.js.map +1 -0
- package/dist/key-editor.d.ts +30 -0
- package/dist/key-editor.d.ts.map +1 -0
- package/dist/key-editor.js +445 -0
- package/dist/key-editor.js.map +1 -0
- package/dist/ledger-contract.d.ts +190 -0
- package/dist/ledger-contract.d.ts.map +1 -0
- package/dist/ledger-contract.js +555 -0
- package/dist/ledger-contract.js.map +1 -0
- package/dist/ledger-trust.d.ts +90 -0
- package/dist/ledger-trust.d.ts.map +1 -0
- package/dist/ledger-trust.js +203 -0
- package/dist/ledger-trust.js.map +1 -0
- package/dist/lockfile-invariants.d.ts +48 -0
- package/dist/lockfile-invariants.d.ts.map +1 -0
- package/dist/lockfile-invariants.js +375 -0
- package/dist/lockfile-invariants.js.map +1 -0
- package/dist/lockfile-readers.d.ts +72 -0
- package/dist/lockfile-readers.d.ts.map +1 -0
- package/dist/lockfile-readers.js +713 -0
- package/dist/lockfile-readers.js.map +1 -0
- package/dist/lockfile-regen.d.ts +106 -0
- package/dist/lockfile-regen.d.ts.map +1 -0
- package/dist/lockfile-regen.js +760 -0
- package/dist/lockfile-regen.js.map +1 -0
- package/dist/lockfile-tool-env.d.ts +29 -0
- package/dist/lockfile-tool-env.d.ts.map +1 -0
- package/dist/lockfile-tool-env.js +111 -0
- package/dist/lockfile-tool-env.js.map +1 -0
- package/dist/materialize.d.ts +113 -0
- package/dist/materialize.d.ts.map +1 -0
- package/dist/materialize.js +881 -0
- package/dist/materialize.js.map +1 -0
- package/dist/observe-repository.d.ts +90 -0
- package/dist/observe-repository.d.ts.map +1 -0
- package/dist/observe-repository.js +1367 -0
- package/dist/observe-repository.js.map +1 -0
- package/dist/plan-bundle-setup-fixture.d.ts +68 -0
- package/dist/plan-bundle-setup-fixture.d.ts.map +1 -0
- package/dist/plan-bundle-setup-fixture.js +167 -0
- package/dist/plan-bundle-setup-fixture.js.map +1 -0
- package/dist/plan-bundle.d.ts +256 -0
- package/dist/plan-bundle.d.ts.map +1 -0
- package/dist/plan-bundle.js +882 -0
- package/dist/plan-bundle.js.map +1 -0
- package/dist/plan-command.d.ts +29 -0
- package/dist/plan-command.d.ts.map +1 -0
- package/dist/plan-command.js +523 -0
- package/dist/plan-command.js.map +1 -0
- package/dist/plan-contract.d.ts +153 -0
- package/dist/plan-contract.d.ts.map +1 -0
- package/dist/plan-contract.js +61 -0
- package/dist/plan-contract.js.map +1 -0
- package/dist/plan-digest.d.ts +25 -0
- package/dist/plan-digest.d.ts.map +1 -0
- package/dist/plan-digest.js +106 -0
- package/dist/plan-digest.js.map +1 -0
- package/dist/plan-rules.d.ts +23 -0
- package/dist/plan-rules.d.ts.map +1 -0
- package/dist/plan-rules.js +177 -0
- package/dist/plan-rules.js.map +1 -0
- package/dist/planned-bundle.d.ts +20 -0
- package/dist/planned-bundle.d.ts.map +1 -0
- package/dist/planned-bundle.js +191 -0
- package/dist/planned-bundle.js.map +1 -0
- package/dist/product-repository.d.ts +4 -0
- package/dist/product-repository.d.ts.map +1 -1
- package/dist/product-repository.js +9 -1
- package/dist/product-repository.js.map +1 -1
- package/dist/provenance-gate.d.ts +48 -0
- package/dist/provenance-gate.d.ts.map +1 -0
- package/dist/provenance-gate.js +324 -0
- package/dist/provenance-gate.js.map +1 -0
- package/dist/pull-request-body.d.ts +45 -0
- package/dist/pull-request-body.d.ts.map +1 -0
- package/dist/pull-request-body.js +232 -0
- package/dist/pull-request-body.js.map +1 -0
- package/dist/registry-snapshot.d.ts +141 -0
- package/dist/registry-snapshot.d.ts.map +1 -0
- package/dist/registry-snapshot.js +483 -0
- package/dist/registry-snapshot.js.map +1 -0
- package/dist/release-age-edit.d.ts +52 -0
- package/dist/release-age-edit.d.ts.map +1 -0
- package/dist/release-age-edit.js +413 -0
- package/dist/release-age-edit.js.map +1 -0
- package/dist/root-entries.d.ts +36 -0
- package/dist/root-entries.d.ts.map +1 -0
- package/dist/root-entries.js +80 -0
- package/dist/root-entries.js.map +1 -0
- package/dist/setup-template-scripts.d.ts +36 -0
- package/dist/setup-template-scripts.d.ts.map +1 -0
- package/dist/setup-template-scripts.js +568 -0
- package/dist/setup-template-scripts.js.map +1 -0
- package/dist/setup-templates.d.ts +55 -0
- package/dist/setup-templates.d.ts.map +1 -0
- package/dist/setup-templates.js +438 -0
- package/dist/setup-templates.js.map +1 -0
- package/dist/skills.d.ts +34 -1
- package/dist/skills.d.ts.map +1 -1
- package/dist/skills.js +129 -17
- package/dist/skills.js.map +1 -1
- package/dist/status.d.ts +63 -0
- package/dist/status.d.ts.map +1 -0
- package/dist/status.js +539 -0
- package/dist/status.js.map +1 -0
- package/dist/types.d.ts +151 -13
- package/dist/types.d.ts.map +1 -1
- package/package.json +4 -4
- package/skeleton/README.md +14 -9
- package/skeleton/package.json +2 -1
- package/skill/SKILL.md +23 -7
- package/skill-catalogue/advisor/SKILL.md +59 -6
- package/skill-catalogue/architect/SKILL.md +2 -2
- package/skill-catalogue/bouncer/SKILL.md +2 -2
- package/skill-catalogue/builder/SKILL.md +2 -2
- package/skill-catalogue/butler/SKILL.md +2 -2
- package/skill-catalogue/controller/SKILL.md +2 -2
- package/skill-catalogue/customer/SKILL.md +2 -2
- package/skill-catalogue/designer/SKILL.md +4 -2
- package/skill-catalogue/giver/SKILL.md +2 -2
- package/skill-catalogue/influencer/SKILL.md +2 -2
- package/skill-catalogue/inspector/SKILL.md +2 -2
- package/skill-catalogue/integrator/SKILL.md +2 -2
- package/skill-catalogue/keeper/SKILL.md +2 -2
- package/skill-catalogue/launcher/SKILL.md +23 -7
- package/skill-catalogue/locksmith/SKILL.md +2 -2
- package/skill-catalogue/messenger/SKILL.md +2 -2
- package/skill-catalogue/observer/SKILL.md +2 -2
- package/skill-catalogue/publisher/SKILL.md +2 -2
- package/skill-catalogue/starter/SKILL.md +3 -2
- package/skill-catalogue/strategist/SKILL.md +12 -4
- package/skill-catalogue/writer/SKILL.md +2 -2
- package/src/admission-fixture.ts +585 -0
- package/src/admission.ts +819 -0
- package/src/agents-guide.ts +29 -0
- package/src/apply-command-options.check.ts +27 -0
- package/src/apply-plan-cli.ts +454 -14
- package/src/apply-plan.ts +112 -124
- package/src/apply-step-fixture.ts +236 -0
- package/src/apply-store.ts +584 -0
- package/src/approval-sheet.ts +170 -0
- package/src/body-command.ts +162 -0
- package/src/change-set-contract.ts +987 -0
- package/src/change-set-digest.ts +70 -0
- package/src/check-cli.ts +14 -3
- package/src/cli.ts +90 -22
- package/src/core.ts +973 -275
- package/src/dry-materialize.ts +353 -0
- package/src/existing-declaration-adoption.check.ts +12 -0
- package/src/generated/contract-schema.generated.ts +520 -0
- package/src/generated/package-scope.generated.ts +10 -0
- package/src/generated/plan-contracts.generated.ts +3101 -0
- package/src/host.ts +10 -0
- package/src/identity.ts +51 -0
- package/src/index.ts +74 -3
- package/src/inventory-adoption.ts +107 -29
- package/src/inventory-choice.ts +172 -0
- package/src/inventory-contract.ts +166 -0
- package/src/key-editor.ts +446 -0
- package/src/ledger-contract.ts +660 -0
- package/src/ledger-trust.ts +272 -0
- package/src/lockfile-invariants.ts +421 -0
- package/src/lockfile-readers.ts +749 -0
- package/src/lockfile-regen.ts +851 -0
- package/src/lockfile-tool-env.ts +131 -0
- package/src/materialize.ts +915 -0
- package/src/observe-repository.ts +1365 -0
- package/src/plan-bundle-setup-fixture.ts +200 -0
- package/src/plan-bundle.ts +1014 -0
- package/src/plan-command.ts +532 -0
- package/src/plan-contract.ts +179 -0
- package/src/plan-digest.ts +102 -0
- package/src/plan-rules.ts +188 -0
- package/src/planned-bundle.ts +211 -0
- package/src/product-repository.ts +10 -1
- package/src/provenance-gate.ts +352 -0
- package/src/pull-request-body.ts +261 -0
- package/src/registry-snapshot.ts +534 -0
- package/src/release-age-edit.ts +430 -0
- package/src/root-entries.ts +81 -0
- package/src/setup-template-scripts.ts +580 -0
- package/src/setup-templates.ts +479 -0
- package/src/skills.ts +161 -18
- package/src/status.ts +557 -0
- package/src/types.ts +148 -13
package/dist/apply-plan-cli.js
CHANGED
|
@@ -1,20 +1,44 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
+
import { spawnSync } from "node:child_process";
|
|
3
|
+
import { readFileSync, statSync } from "node:fs";
|
|
4
|
+
import { realpathSync } from "node:fs";
|
|
5
|
+
import { dirname, resolve } from "node:path";
|
|
2
6
|
import { isDirectInvocation } from "./cli.js";
|
|
7
|
+
import { ContractDocumentError, readContractDocument } from "./generated/contract-schema.generated.js";
|
|
3
8
|
import { createNodeHost } from "./host.js";
|
|
4
9
|
import { applyEngagementBrief, validateAdvisorPlan, validateEngagementBrief } from "./apply-plan.js";
|
|
10
|
+
import { MAX_RESPONSE_BYTES, REGISTRY_SNAPSHOT_REL, RegistrySnapshotError, requestedPackageNames, takeRegistrySnapshot, writeRegistrySnapshot, } from "./registry-snapshot.js";
|
|
11
|
+
import { listStoredChangeSets } from "./apply-store.js";
|
|
12
|
+
import { planMain } from "./plan-command.js";
|
|
13
|
+
import { BODY_USAGE, BodyUsageError, bodyRepository, parseBodyArgs } from "./body-command.js";
|
|
14
|
+
import { materializeRepository, verifyRepository } from "./materialize.js";
|
|
15
|
+
import { formatStatus, statusRepository } from "./status.js";
|
|
5
16
|
export const APPLY_PLAN_USAGE = `Usage: launcher-apply-plan --plan <plan.json> --brief <brief.json> --repo <directory>
|
|
17
|
+
launcher-apply-plan plan [--agent codex|claude|cursor] [--adopt-existing <consent.json>] [--help]
|
|
18
|
+
launcher-apply-plan materialize --repo <id>
|
|
19
|
+
launcher-apply-plan verify --repo <id>
|
|
20
|
+
launcher-apply-plan status --repo <id>
|
|
21
|
+
launcher-apply-plan body --repo <id> --task-record <n> [--supersedes <n>]...
|
|
22
|
+
launcher-apply-plan snapshot --request <file> [--out <file>]
|
|
23
|
+
|
|
24
|
+
The plan subcommand is described by launcher-apply-plan plan --help, and the
|
|
25
|
+
snapshot subcommand by launcher-apply-plan snapshot --help.
|
|
6
26
|
|
|
7
27
|
Writes clossys/brief.json into <directory> from the given brief, once the
|
|
8
28
|
given plan's most recent decision is "approved". Refuses, and writes
|
|
9
|
-
nothing, otherwise.
|
|
29
|
+
nothing, otherwise. This is the brief-only path: it does not check what an
|
|
30
|
+
approval binds, so it accepts an approval with or without a subjectDigest.
|
|
10
31
|
|
|
11
32
|
Deterministic mechanics only: this does not decide whether a plan should be
|
|
12
33
|
approved (that is Advisor's job) and does not compute the brief's content
|
|
13
|
-
(that is @clossys/advisor's EngagementBrief
|
|
14
|
-
|
|
34
|
+
(that is @clossys/advisor's EngagementBrief) -- it validates both files
|
|
35
|
+
against the same plan and brief contracts Advisor uses, refusing any field
|
|
36
|
+
those contracts do not declare, writes the one file, and prints the plan's
|
|
37
|
+
canonical digest.
|
|
15
38
|
|
|
16
39
|
Exit codes: 0 = applied, 1 = refused (not approved, or a shape does not
|
|
17
|
-
validate), 2 = a given file could not be read as JSON
|
|
40
|
+
validate), 2 = a given file could not be read as strict JSON (unreadable,
|
|
41
|
+
not valid UTF-8, not valid JSON, or an object repeats a key).`;
|
|
18
42
|
export class ApplyPlanInputError extends Error {
|
|
19
43
|
}
|
|
20
44
|
function parseArgs(argv) {
|
|
@@ -37,15 +61,25 @@ function parseArgs(argv) {
|
|
|
37
61
|
}
|
|
38
62
|
return { help: false, planPath, briefPath, repoDirectory };
|
|
39
63
|
}
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
64
|
+
/**
|
|
65
|
+
* Reads a plan or brief file as strict JSON (#1475): invalid UTF-8, a JSON
|
|
66
|
+
* syntax error, or an object that repeats a key at any depth is refused, so
|
|
67
|
+
* the value validated and digested is exactly the one a reader of the file
|
|
68
|
+
* sees.
|
|
69
|
+
*/
|
|
70
|
+
function readJson(path, label) {
|
|
71
|
+
let bytes;
|
|
44
72
|
try {
|
|
45
|
-
|
|
73
|
+
bytes = readFileSync(path);
|
|
46
74
|
}
|
|
47
75
|
catch {
|
|
48
|
-
throw new ApplyPlanInputError(`${label}
|
|
76
|
+
throw new ApplyPlanInputError(`${label} could not be read: ${path}`);
|
|
77
|
+
}
|
|
78
|
+
try {
|
|
79
|
+
return readContractDocument(bytes);
|
|
80
|
+
}
|
|
81
|
+
catch (cause) {
|
|
82
|
+
throw new ApplyPlanInputError(`${label} ${cause instanceof Error ? cause.message : String(cause)}: ${path}`);
|
|
49
83
|
}
|
|
50
84
|
}
|
|
51
85
|
export function main(argv, host) {
|
|
@@ -57,8 +91,8 @@ export function main(argv, host) {
|
|
|
57
91
|
let planRaw;
|
|
58
92
|
let briefRaw;
|
|
59
93
|
try {
|
|
60
|
-
planRaw = readJson(
|
|
61
|
-
briefRaw = readJson(
|
|
94
|
+
planRaw = readJson(parsed.planPath, "--plan");
|
|
95
|
+
briefRaw = readJson(parsed.briefPath, "--brief");
|
|
62
96
|
}
|
|
63
97
|
catch (cause) {
|
|
64
98
|
console.error(`launcher-apply-plan: ${cause instanceof Error ? cause.message : String(cause)}`);
|
|
@@ -80,11 +114,394 @@ export function main(argv, host) {
|
|
|
80
114
|
return 1;
|
|
81
115
|
}
|
|
82
116
|
console.log(`wrote ${result.path}`);
|
|
117
|
+
console.log(`plan digest ${result.planDigest}`);
|
|
83
118
|
return 0;
|
|
84
119
|
}
|
|
85
|
-
|
|
120
|
+
export const SNAPSHOT_USAGE = `Usage: launcher-apply-plan snapshot --request <file> [--out <file>]
|
|
121
|
+
|
|
122
|
+
Takes the registry snapshot a plan's exact packages are resolved from
|
|
123
|
+
(#1178). <file> is the report advisor-package-request prints, saved to a
|
|
124
|
+
file: every name in it must be a package in this package's publishing scope,
|
|
125
|
+
named once. For each name, in name order, this fetches the package's full
|
|
126
|
+
registry document from the registry this package was built for, with no
|
|
127
|
+
registry credential, no .npmrc and no npm CLI, refusing any redirect, any response
|
|
128
|
+
over ${MAX_RESPONSE_BYTES / (1024 * 1024)} MiB and any request that takes too long. It records only what
|
|
129
|
+
the registry snapshot contract declares, validates the whole snapshot against
|
|
130
|
+
that contract, and writes it atomically to --out, by default
|
|
131
|
+
${REGISTRY_SNAPSHOT_REL} under the current directory (the hub).
|
|
132
|
+
|
|
133
|
+
This is the only step of applying a plan that reads the package registry. A
|
|
134
|
+
message names a package by its position in the request, names[<n>], never by
|
|
135
|
+
its name, and never quotes the request or a response.
|
|
136
|
+
|
|
137
|
+
Exit codes: 0 = the snapshot was written (or --help was shown), 2 = no snapshot was written
|
|
138
|
+
(a usage error, an unreadable or invalid request, or any registry answer
|
|
139
|
+
this step cannot record: a transport error, a timeout, a redirect, an
|
|
140
|
+
answer other than 200 or 404, an oversize or non-JSON body, or a snapshot
|
|
141
|
+
the contract refuses). A package the registry does not have (404) is
|
|
142
|
+
recorded as not-found, not refused. On exit 2 an earlier snapshot at the
|
|
143
|
+
output path is left untouched, and must not be used.`;
|
|
144
|
+
const REPO_ID_SHAPE = /^[^/]+\/[^/]+$/u;
|
|
145
|
+
function parseRepoSubcommand(argv, label) {
|
|
146
|
+
if (argv.length === 1 && (argv[0] === "--help" || argv[0] === "-h"))
|
|
147
|
+
return { help: true };
|
|
148
|
+
if (argv.length !== 2 || argv[0] !== "--repo")
|
|
149
|
+
throw new ApplyPlanInputError(`usage: launcher-apply-plan ${label} --repo <id>`);
|
|
150
|
+
const id = argv[1];
|
|
151
|
+
const slash = id.indexOf("/");
|
|
152
|
+
const name = slash === -1 ? "" : id.slice(slash + 1);
|
|
153
|
+
if (!REPO_ID_SHAPE.test(id) || name === "." || name === "..")
|
|
154
|
+
throw new ApplyPlanInputError(`usage: launcher-apply-plan ${label} --repo <id>`);
|
|
155
|
+
return { help: false, id };
|
|
156
|
+
}
|
|
157
|
+
function spawnGit(cwd, args) {
|
|
158
|
+
const run = spawnSync("git", ["-c", "commit.gpgsign=false", "-c", "core.hooksPath=/dev/null", ...args], {
|
|
159
|
+
cwd,
|
|
160
|
+
encoding: "utf8",
|
|
161
|
+
stdio: ["ignore", "pipe", "ignore"],
|
|
162
|
+
});
|
|
163
|
+
if ((run.status ?? 1) !== 0)
|
|
164
|
+
return null;
|
|
165
|
+
return (run.stdout ?? "").trim();
|
|
166
|
+
}
|
|
167
|
+
function resolveApplyInputs(id, options) {
|
|
168
|
+
const hub = options.cwd ?? process.cwd();
|
|
169
|
+
if (options.set !== undefined && options.set.repository.id !== id) {
|
|
170
|
+
return { exitCode: 2, verdict: "indeterminate", reason: "change-set-absent" };
|
|
171
|
+
}
|
|
172
|
+
let held = [];
|
|
173
|
+
try {
|
|
174
|
+
held = listStoredChangeSets(realpathSync(hub));
|
|
175
|
+
}
|
|
176
|
+
catch {
|
|
177
|
+
held = [];
|
|
178
|
+
}
|
|
179
|
+
if (options.heldChangeSets !== undefined)
|
|
180
|
+
held = [...options.heldChangeSets];
|
|
181
|
+
let set = options.set;
|
|
182
|
+
if (set === undefined) {
|
|
183
|
+
const matches = held.filter((entry) => entry.repository.id === id);
|
|
184
|
+
if (matches.length === 0)
|
|
185
|
+
return { exitCode: 2, verdict: "indeterminate", reason: "change-set-absent" };
|
|
186
|
+
if (matches.length === 1) {
|
|
187
|
+
set = matches[0];
|
|
188
|
+
}
|
|
189
|
+
else {
|
|
190
|
+
const clonePath = options.clone ?? resolve(dirname(realpathSync(hub)), id.slice(id.indexOf("/") + 1));
|
|
191
|
+
let root;
|
|
192
|
+
try {
|
|
193
|
+
root = realpathSync(clonePath);
|
|
194
|
+
}
|
|
195
|
+
catch {
|
|
196
|
+
return { exitCode: 2, verdict: "indeterminate", reason: "change-set-absent" };
|
|
197
|
+
}
|
|
198
|
+
const branch = matches[0].repository.defaultBranch;
|
|
199
|
+
const tip = spawnGit(root, ["rev-parse", `refs/heads/${branch}`]);
|
|
200
|
+
if (tip === null)
|
|
201
|
+
return { exitCode: 2, verdict: "indeterminate", reason: "change-set-absent" };
|
|
202
|
+
const filtered = matches.filter((entry) => entry.repository.baseCommit === tip);
|
|
203
|
+
if (filtered.length !== 1)
|
|
204
|
+
return { exitCode: 2, verdict: "indeterminate", reason: "change-set-absent" };
|
|
205
|
+
set = filtered[0];
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
const clone = options.clone ?? resolve(dirname(realpathSync(hub)), id.slice(id.indexOf("/") + 1));
|
|
209
|
+
const storedTexts = set.texts === undefined ? {} : Object.fromEntries(set.texts.map((row) => [row.path, row.text]));
|
|
210
|
+
return { hub, clone, set, held, texts: options.texts ?? storedTexts };
|
|
211
|
+
}
|
|
212
|
+
const MATERIALIZE_HELP = `Usage: launcher-apply-plan materialize --repo <id>
|
|
213
|
+
|
|
214
|
+
Writes a stored repository change set into the repository's local clone.
|
|
215
|
+
|
|
216
|
+
Refuses, and writes nothing, unless the plan committed at the hub's HEAD
|
|
217
|
+
approves a bundle that holds the change set, or the change set is an apply set
|
|
218
|
+
admitted under the one-approval rule: it follows the approved setup set and
|
|
219
|
+
changes nothing that approval did not already cover. When the change set has
|
|
220
|
+
package acts, the execution authorization in the hub's committed assessment
|
|
221
|
+
must also be current at the time of the run. The approval a change set's
|
|
222
|
+
ledger records is decided from the hub alone; it is never taken from an
|
|
223
|
+
option or defaulted.`;
|
|
224
|
+
const VERIFY_HELP = `Usage: launcher-apply-plan verify --repo <id>
|
|
225
|
+
|
|
226
|
+
Reports whether the repository's local clone matches its stored change set.
|
|
227
|
+
Verify re-checks everything materialize checks before writing, including the
|
|
228
|
+
committed approval and, for a change set with package acts, that the execution
|
|
229
|
+
authorization is still current at the time of the run: a clone whose approval
|
|
230
|
+
was withdrawn or whose authorization expired no longer verifies.`;
|
|
231
|
+
const STATUS_HELP = `Usage: launcher-apply-plan status --repo <id>
|
|
232
|
+
|
|
233
|
+
Reports what the pull request for the repository's stored change set is doing,
|
|
234
|
+
from read-only evidence: the open pull requests, the default branch's tip, and
|
|
235
|
+
the commits already in the local clone. It needs a full clone: a partial clone
|
|
236
|
+
is refused as indeterminate (partial-clone) before any object is read. It
|
|
237
|
+
changes nothing but the fetch of the default branch into its remote-tracking ref
|
|
238
|
+
that verify also makes: it does not fetch a pull request's head, check anything
|
|
239
|
+
out, or write a file or an index.
|
|
240
|
+
|
|
241
|
+
The state is one of: proposed (an open pull request of this change set, made
|
|
242
|
+
by the person running this, whose body is the one the body command recorded and whose
|
|
243
|
+
head passes every check verify makes),
|
|
244
|
+
applied (the default branch already holds the change set), planned (neither),
|
|
245
|
+
diverged (its pull request or its body does not match), superseded (an older change set of
|
|
246
|
+
this repository has a pull request, even beside this one's) or indeterminate
|
|
247
|
+
(something could not be read or trusted, including a partial clone, a change set
|
|
248
|
+
the body command never recorded a body for, any open pull request whose body names the
|
|
249
|
+
marker word but is not the person's own, and a listing of 100 or more open pull
|
|
250
|
+
requests). It prints the state, a fixed reason
|
|
251
|
+
and #<number> for each pull request it is about, and nothing else. proposed
|
|
252
|
+
does not check the head's ancestry to the base, and nothing in this unit does.
|
|
253
|
+
|
|
254
|
+
Exit codes: 0 = proposed or applied, 1 = diverged, 2 = anything else.`;
|
|
255
|
+
function printApplyOutcome(label, outcome) {
|
|
256
|
+
const suffix = outcome.exitCode === 0 ? outcome.verdict : `${outcome.verdict} (${outcome.reason})`;
|
|
257
|
+
const detail = outcome.detail === undefined ? "" : `; ${outcome.detail}`;
|
|
258
|
+
if (outcome.exitCode === 0)
|
|
259
|
+
console.log(`launcher-apply-plan ${label}: ${suffix}${detail}`);
|
|
260
|
+
else
|
|
261
|
+
console.error(`launcher-apply-plan ${label}: ${suffix}${detail}`);
|
|
262
|
+
return outcome.exitCode;
|
|
263
|
+
}
|
|
264
|
+
export async function materializeMain(argv, options = {}) {
|
|
265
|
+
try {
|
|
266
|
+
const parsed = parseRepoSubcommand(argv, "materialize");
|
|
267
|
+
if (parsed.help) {
|
|
268
|
+
console.log(MATERIALIZE_HELP);
|
|
269
|
+
return 0;
|
|
270
|
+
}
|
|
271
|
+
const resolved = resolveApplyInputs(parsed.id, options);
|
|
272
|
+
if ("exitCode" in resolved)
|
|
273
|
+
return printApplyOutcome("materialize", resolved);
|
|
274
|
+
const outcome = await materializeRepository({
|
|
275
|
+
clone: resolved.clone,
|
|
276
|
+
hub: resolved.hub,
|
|
277
|
+
set: resolved.set,
|
|
278
|
+
texts: resolved.texts,
|
|
279
|
+
heldChangeSets: resolved.held,
|
|
280
|
+
spawn: options.spawn,
|
|
281
|
+
now: options.now,
|
|
282
|
+
toolVersion: options.toolVersion,
|
|
283
|
+
runReadiness: options.runReadiness,
|
|
284
|
+
});
|
|
285
|
+
return printApplyOutcome("materialize", outcome);
|
|
286
|
+
}
|
|
287
|
+
catch (cause) {
|
|
288
|
+
console.error(`launcher-apply-plan materialize: ${cause instanceof ApplyPlanInputError ? cause.message : "usage: launcher-apply-plan materialize --repo <id>"}`);
|
|
289
|
+
return 2;
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
export async function verifyMain(argv, options = {}) {
|
|
293
|
+
try {
|
|
294
|
+
const parsed = parseRepoSubcommand(argv, "verify");
|
|
295
|
+
if (parsed.help) {
|
|
296
|
+
console.log(VERIFY_HELP);
|
|
297
|
+
return 0;
|
|
298
|
+
}
|
|
299
|
+
const resolved = resolveApplyInputs(parsed.id, options);
|
|
300
|
+
if ("exitCode" in resolved)
|
|
301
|
+
return printApplyOutcome("verify", resolved);
|
|
302
|
+
const outcome = await verifyRepository({
|
|
303
|
+
clone: resolved.clone,
|
|
304
|
+
hub: resolved.hub,
|
|
305
|
+
set: resolved.set,
|
|
306
|
+
heldChangeSets: resolved.held,
|
|
307
|
+
now: options.now,
|
|
308
|
+
runReadiness: options.runReadiness,
|
|
309
|
+
});
|
|
310
|
+
return printApplyOutcome("verify", outcome);
|
|
311
|
+
}
|
|
312
|
+
catch (cause) {
|
|
313
|
+
console.error(`launcher-apply-plan verify: ${cause instanceof ApplyPlanInputError ? cause.message : "usage: launcher-apply-plan verify --repo <id>"}`);
|
|
314
|
+
return 2;
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
export async function statusMain(argv, options = {}) {
|
|
318
|
+
try {
|
|
319
|
+
const parsed = parseRepoSubcommand(argv, "status");
|
|
320
|
+
if (parsed.help) {
|
|
321
|
+
console.log(STATUS_HELP);
|
|
322
|
+
return 0;
|
|
323
|
+
}
|
|
324
|
+
const resolved = resolveApplyInputs(parsed.id, options);
|
|
325
|
+
if ("exitCode" in resolved) {
|
|
326
|
+
console.log(formatStatus({ state: "indeterminate", reason: resolved.reason }));
|
|
327
|
+
return 2;
|
|
328
|
+
}
|
|
329
|
+
const outcome = await statusRepository({
|
|
330
|
+
clone: resolved.clone,
|
|
331
|
+
hub: resolved.hub,
|
|
332
|
+
set: resolved.set,
|
|
333
|
+
heldChangeSets: resolved.held,
|
|
334
|
+
now: options.now,
|
|
335
|
+
runReadiness: options.runReadiness,
|
|
336
|
+
ports: options.statusPorts,
|
|
337
|
+
});
|
|
338
|
+
console.log(formatStatus(outcome));
|
|
339
|
+
return outcome.exitCode;
|
|
340
|
+
}
|
|
341
|
+
catch (cause) {
|
|
342
|
+
console.error(`launcher-apply-plan status: ${cause instanceof ApplyPlanInputError ? cause.message : "usage: launcher-apply-plan status --repo <id>"}`);
|
|
343
|
+
return 2;
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
const BODY_HELP = `Usage: ${BODY_USAGE}
|
|
347
|
+
|
|
348
|
+
Prints the body of the pull request for the repository's stored change set, and
|
|
349
|
+
nothing else, and records the SHA-256 of exactly those bytes as the change set's
|
|
350
|
+
pullRequest.bodySha256. The approval the body shows is decided from the hub at
|
|
351
|
+
the time of the run, as materialize decides it; it is never taken from an
|
|
352
|
+
option. A planned bundle the hub stored for the change set must hold that same
|
|
353
|
+
approval. --task-record is the number of the task-record issue in the
|
|
354
|
+
repository; each --supersedes is the number of the pull request of an older
|
|
355
|
+
change set of this repository that this one replaces, and needs another stored
|
|
356
|
+
change set of the repository. A change set already bound to another body is
|
|
357
|
+
refused, and one already bound to this body prints it again. There is no way to
|
|
358
|
+
undo a binding: a mistyped --task-record or --supersedes leaves the change set
|
|
359
|
+
refused as body-bound. Pass the output to the pull request as a file with
|
|
360
|
+
--body-file; --body "$(...)" drops the final line feed the recorded hash covers.
|
|
361
|
+
|
|
362
|
+
Exit codes: 0 = the body was printed, 1 = refused (a fixed token on standard
|
|
363
|
+
error, nothing on standard output), 2 = indeterminate or a usage error.`;
|
|
364
|
+
/**
|
|
365
|
+
* The `body` subcommand. Standard output is the body and only the body, after it is recorded; a refusal prints one line of fixed
|
|
366
|
+
* tokens to standard error and never an argument.
|
|
367
|
+
*/
|
|
368
|
+
export async function bodyMain(argv, options = {}) {
|
|
369
|
+
try {
|
|
370
|
+
const parsed = parseBodyArgs(argv);
|
|
371
|
+
if (parsed.help) {
|
|
372
|
+
console.log(BODY_HELP);
|
|
373
|
+
return 0;
|
|
374
|
+
}
|
|
375
|
+
const resolved = resolveApplyInputs(parsed.id, options);
|
|
376
|
+
if ("exitCode" in resolved) {
|
|
377
|
+
console.error(`launcher-apply-plan body: indeterminate (${resolved.reason ?? "refused"})`);
|
|
378
|
+
return 2;
|
|
379
|
+
}
|
|
380
|
+
const outcome = await bodyRepository({
|
|
381
|
+
clone: resolved.clone,
|
|
382
|
+
hub: resolved.hub,
|
|
383
|
+
set: resolved.set,
|
|
384
|
+
heldChangeSets: resolved.held,
|
|
385
|
+
taskRecord: parsed.taskRecord,
|
|
386
|
+
supersedes: parsed.supersedes,
|
|
387
|
+
now: options.now,
|
|
388
|
+
runReadiness: options.runReadiness,
|
|
389
|
+
});
|
|
390
|
+
if (outcome.exitCode !== 0) {
|
|
391
|
+
console.error(`launcher-apply-plan body: ${outcome.exitCode === 1 ? "refused" : "indeterminate"} (${outcome.reason})`);
|
|
392
|
+
return outcome.exitCode;
|
|
393
|
+
}
|
|
394
|
+
process.stdout.write(outcome.body);
|
|
395
|
+
return 0;
|
|
396
|
+
}
|
|
397
|
+
catch (cause) {
|
|
398
|
+
console.error(cause instanceof BodyUsageError ? `launcher-apply-plan body: usage: ${BODY_USAGE}` : "launcher-apply-plan body: indeterminate (body-failed)");
|
|
399
|
+
return 2;
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
function parseSnapshotArgs(argv) {
|
|
403
|
+
if (argv.length === 1 && (argv[0] === "--help" || argv[0] === "-h"))
|
|
404
|
+
return { help: true };
|
|
405
|
+
const flags = new Map();
|
|
406
|
+
for (let index = 0; index < argv.length; index += 2) {
|
|
407
|
+
const name = argv[index];
|
|
408
|
+
const value = argv[index + 1];
|
|
409
|
+
if ((name !== "--request" && name !== "--out") || value === undefined || flags.has(name)) {
|
|
410
|
+
throw new RegistrySnapshotError("usage: launcher-apply-plan snapshot --request <file> [--out <file>]");
|
|
411
|
+
}
|
|
412
|
+
flags.set(name, value);
|
|
413
|
+
}
|
|
414
|
+
const requestPath = flags.get("--request");
|
|
415
|
+
if (requestPath === undefined)
|
|
416
|
+
throw new RegistrySnapshotError("--request is required");
|
|
417
|
+
const outPath = flags.get("--out");
|
|
418
|
+
return outPath === undefined ? { help: false, requestPath } : { help: false, requestPath, outPath };
|
|
419
|
+
}
|
|
420
|
+
/** Reads the request strictly; a refusal names the rule and a position, never the file's text. */
|
|
421
|
+
function readSnapshotRequest(path) {
|
|
422
|
+
let bytes;
|
|
423
|
+
try {
|
|
424
|
+
if (!statSync(path).isFile())
|
|
425
|
+
throw new RegistrySnapshotError("the --request file is not a file");
|
|
426
|
+
bytes = readFileSync(path);
|
|
427
|
+
}
|
|
428
|
+
catch (cause) {
|
|
429
|
+
if (cause instanceof RegistrySnapshotError)
|
|
430
|
+
throw cause;
|
|
431
|
+
throw new RegistrySnapshotError("the --request file could not be read");
|
|
432
|
+
}
|
|
433
|
+
try {
|
|
434
|
+
return readContractDocument(bytes);
|
|
435
|
+
}
|
|
436
|
+
catch (cause) {
|
|
437
|
+
if (!(cause instanceof ContractDocumentError))
|
|
438
|
+
throw new RegistrySnapshotError("the --request file is not strict JSON");
|
|
439
|
+
const where = cause.position === undefined ? "" : ` at position ${cause.position}`;
|
|
440
|
+
const why = cause.reason === "encoding" ? "is not valid UTF-8" : cause.reason === "repeated-key" ? "repeats a key in one object" : "is not valid JSON";
|
|
441
|
+
throw new RegistrySnapshotError(`the --request file ${why}${where}`);
|
|
442
|
+
}
|
|
443
|
+
}
|
|
444
|
+
/**
|
|
445
|
+
* The `snapshot` subcommand. Never throws: every refusal prints one line and
|
|
446
|
+
* returns 2, and nothing is written unless the whole snapshot validates.
|
|
447
|
+
*/
|
|
448
|
+
export async function snapshotMain(argv, options = {}) {
|
|
449
|
+
try {
|
|
450
|
+
const parsed = parseSnapshotArgs(argv);
|
|
451
|
+
if (parsed.help) {
|
|
452
|
+
console.log(SNAPSHOT_USAGE);
|
|
453
|
+
return 0;
|
|
454
|
+
}
|
|
455
|
+
const cwd = options.cwd ?? process.cwd();
|
|
456
|
+
const names = requestedPackageNames(readSnapshotRequest(resolve(cwd, parsed.requestPath)));
|
|
457
|
+
const snapshot = await takeRegistrySnapshot(names, options);
|
|
458
|
+
const out = resolve(cwd, parsed.outPath ?? REGISTRY_SNAPSHOT_REL);
|
|
459
|
+
try {
|
|
460
|
+
writeRegistrySnapshot(out, snapshot);
|
|
461
|
+
}
|
|
462
|
+
catch (cause) {
|
|
463
|
+
if (cause instanceof RegistrySnapshotError)
|
|
464
|
+
throw cause;
|
|
465
|
+
throw new RegistrySnapshotError(`the snapshot could not be written to ${out}`);
|
|
466
|
+
}
|
|
467
|
+
const notFound = snapshot.packages.filter((entry) => entry.status === "not-found").length;
|
|
468
|
+
console.log(`wrote ${out}: ${snapshot.packages.length} package(s), ${snapshot.packages.length - notFound} found, ${notFound} not found`);
|
|
469
|
+
return 0;
|
|
470
|
+
}
|
|
471
|
+
catch (cause) {
|
|
472
|
+
const reason = cause instanceof RegistrySnapshotError ? cause.message : `failed unexpectedly (${cause instanceof Error ? cause.name : typeof cause})`;
|
|
473
|
+
console.error(`launcher-apply-plan snapshot: ${reason}; no snapshot was written`);
|
|
474
|
+
return 2;
|
|
475
|
+
}
|
|
476
|
+
}
|
|
477
|
+
async function run() {
|
|
478
|
+
const argv = process.argv.slice(2);
|
|
479
|
+
if (argv[0] === "plan") {
|
|
480
|
+
process.exitCode = await planMain(argv.slice(1));
|
|
481
|
+
return;
|
|
482
|
+
}
|
|
483
|
+
if (argv[0] === "materialize") {
|
|
484
|
+
process.exitCode = await materializeMain(argv.slice(1));
|
|
485
|
+
return;
|
|
486
|
+
}
|
|
487
|
+
if (argv[0] === "verify") {
|
|
488
|
+
process.exitCode = await verifyMain(argv.slice(1));
|
|
489
|
+
return;
|
|
490
|
+
}
|
|
491
|
+
if (argv[0] === "status") {
|
|
492
|
+
process.exitCode = await statusMain(argv.slice(1));
|
|
493
|
+
return;
|
|
494
|
+
}
|
|
495
|
+
if (argv[0] === "body") {
|
|
496
|
+
process.exitCode = await bodyMain(argv.slice(1));
|
|
497
|
+
return;
|
|
498
|
+
}
|
|
499
|
+
if (argv[0] === "snapshot") {
|
|
500
|
+
process.exitCode = await snapshotMain(argv.slice(1));
|
|
501
|
+
return;
|
|
502
|
+
}
|
|
86
503
|
try {
|
|
87
|
-
process.exitCode = main(
|
|
504
|
+
process.exitCode = main(argv, createNodeHost());
|
|
88
505
|
}
|
|
89
506
|
catch (cause) {
|
|
90
507
|
console.error(`launcher-apply-plan: ${cause instanceof Error ? cause.message : String(cause)}`);
|
|
@@ -92,5 +509,5 @@ function run() {
|
|
|
92
509
|
}
|
|
93
510
|
}
|
|
94
511
|
if (isDirectInvocation(import.meta.url, process.argv[1]))
|
|
95
|
-
run();
|
|
512
|
+
void run();
|
|
96
513
|
//# sourceMappingURL=apply-plan-cli.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"apply-plan-cli.js","sourceRoot":"","sources":["../src/apply-plan-cli.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"apply-plan-cli.js","sourceRoot":"","sources":["../src/apply-plan-cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAC9C,OAAO,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,0CAA0C,CAAC;AACvG,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,uBAAuB,EAA0C,MAAM,iBAAiB,CAAC;AAC7I,OAAO,EACL,kBAAkB,EAClB,qBAAqB,EACrB,qBAAqB,EACrB,qBAAqB,EACrB,oBAAoB,EACpB,qBAAqB,GAEtB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAC9F,OAAO,EAAE,qBAAqB,EAAE,gBAAgB,EAAwB,MAAM,kBAAkB,CAAC;AACjG,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAoB,MAAM,aAAa,CAAC;AAK/E,MAAM,CAAC,MAAM,gBAAgB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;8DAyB8B,CAAC;AAE/D,MAAM,OAAO,mBAAoB,SAAQ,KAAK;CAAG;AAEjD,SAAS,SAAS,CAAC,IAAuB;IACxC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAC3F,MAAM,KAAK,GAAG,IAAI,GAAG,EAAkB,CAAC;IACxC,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACpD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QACzB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;QAC9B,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,QAAQ,CAAC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YAC1F,MAAM,IAAI,mBAAmB,CAAC,4EAA4E,CAAC,CAAC;QAC9G,CAAC;QACD,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACzB,CAAC;IACD,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACrC,MAAM,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACvC,MAAM,aAAa,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC1C,IAAI,QAAQ,KAAK,SAAS,IAAI,SAAS,KAAK,SAAS,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;QACrF,MAAM,IAAI,mBAAmB,CAAC,8CAA8C,CAAC,CAAC;IAChF,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,aAAa,EAAE,CAAC;AAC7D,CAAC;AAED;;;;;GAKG;AACH,SAAS,QAAQ,CAAC,IAAY,EAAE,KAAa;IAC3C,IAAI,KAAiB,CAAC;IACtB,IAAI,CAAC;QACH,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,mBAAmB,CAAC,GAAG,KAAK,uBAAuB,IAAI,EAAE,CAAC,CAAC;IACvE,CAAC;IACD,IAAI,CAAC;QACH,OAAO,oBAAoB,CAAC,KAAK,CAAC,CAAC;IACrC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,mBAAmB,CAAC,GAAG,KAAK,IAAI,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;IAC/G,CAAC;AACH,CAAC;AAED,MAAM,UAAU,IAAI,CAAC,IAAuB,EAAE,IAAuC;IACnF,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAC/B,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;QAC9B,OAAO,CAAC,CAAC;IACX,CAAC;IACD,IAAI,OAAgB,CAAC;IACrB,IAAI,QAAiB,CAAC;IACtB,IAAI,CAAC;QACH,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,QAAkB,EAAE,QAAQ,CAAC,CAAC;QACxD,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,SAAmB,EAAE,SAAS,CAAC,CAAC;IAC7D,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,wBAAwB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAChG,OAAO,CAAC,CAAC;IACX,CAAC;IACD,MAAM,cAAc,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;IACpD,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC;QAC1B,OAAO,CAAC,KAAK,CAAC,kDAAkD,cAAc,CAAC,MAAM,EAAE,CAAC,CAAC;QACzF,OAAO,CAAC,CAAC;IACX,CAAC;IACD,MAAM,eAAe,GAAG,uBAAuB,CAAC,QAAQ,CAAC,CAAC;IAC1D,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;QAC3B,OAAO,CAAC,KAAK,CAAC,mDAAmD,eAAe,CAAC,MAAM,EAAE,CAAC,CAAC;QAC3F,OAAO,CAAC,CAAC;IACX,CAAC;IACD,MAAM,MAAM,GAAG,oBAAoB,CAAC,IAAI,EAAE,MAAM,CAAC,aAAuB,EAAE,OAAsB,EAAE,QAA2B,EAAE,oBAAoB,CAAC,CAAC;IACrJ,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QAC/B,OAAO,CAAC,KAAK,CAAC,mCAAmC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;QAClE,OAAO,CAAC,CAAC;IACX,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,SAAS,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;IACpC,OAAO,CAAC,GAAG,CAAC,eAAe,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;IAChD,OAAO,CAAC,CAAC;AACX,CAAC;AAED,MAAM,CAAC,MAAM,cAAc,GAAG;;;;;;;;OAQvB,kBAAkB,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC;;;EAGvC,qBAAqB;;;;;;;;;;;;qDAY8B,CAAC;AAuBtD,MAAM,aAAa,GAAG,iBAAiB,CAAC;AAExC,SAAS,mBAAmB,CAAC,IAAuB,EAAE,KAAa;IACjE,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAC3F,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ;QAAE,MAAM,IAAI,mBAAmB,CAAC,8BAA8B,KAAK,cAAc,CAAC,CAAC;IAChI,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAE,CAAC;IACpB,MAAM,KAAK,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC9B,MAAM,IAAI,GAAG,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;IACrD,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,IAAI;QAAE,MAAM,IAAI,mBAAmB,CAAC,8BAA8B,KAAK,cAAc,CAAC,CAAC;IAC/I,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;AAC7B,CAAC;AAED,SAAS,QAAQ,CAAC,GAAW,EAAE,IAAc;IAC3C,MAAM,GAAG,GAAG,SAAS,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,sBAAsB,EAAE,IAAI,EAAE,0BAA0B,EAAE,GAAG,IAAI,CAAC,EAAE;QACtG,GAAG;QACH,QAAQ,EAAE,MAAM;QAChB,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC;KACpC,CAAC,CAAC;IACH,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACzC,OAAO,CAAC,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;AACnC,CAAC;AAED,SAAS,kBAAkB,CACzB,EAAU,EACV,OAA4B;IAE5B,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IACzC,IAAI,OAAO,CAAC,GAAG,KAAK,SAAS,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC;QAClE,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,mBAAmB,EAAE,CAAC;IAChF,CAAC;IACD,IAAI,IAAI,GAA0B,EAAE,CAAC;IACrC,IAAI,CAAC;QACH,IAAI,GAAG,oBAAoB,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC;IACjD,CAAC;IAAC,MAAM,CAAC;QACP,IAAI,GAAG,EAAE,CAAC;IACZ,CAAC;IACD,IAAI,OAAO,CAAC,cAAc,KAAK,SAAS;QAAE,IAAI,GAAG,CAAC,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;IAC7E,IAAI,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;IACtB,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QACtB,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;QACnE,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,mBAAmB,EAAE,CAAC;QACxG,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,GAAG,GAAG,OAAO,CAAC,CAAC,CAAE,CAAC;QACpB,CAAC;aAAM,CAAC;YACN,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACtG,IAAI,IAAY,CAAC;YACjB,IAAI,CAAC;gBACH,IAAI,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC;YACjC,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,mBAAmB,EAAE,CAAC;YAChF,CAAC;YACD,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAE,CAAC,UAAU,CAAC,aAAa,CAAC;YACpD,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,cAAc,MAAM,EAAE,CAAC,CAAC,CAAC;YAClE,IAAI,GAAG,KAAK,IAAI;gBAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,mBAAmB,EAAE,CAAC;YAChG,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,UAAU,KAAK,GAAG,CAAC,CAAC;YAChF,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,mBAAmB,EAAE,CAAC;YACzG,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAE,CAAC;QACrB,CAAC;IACH,CAAC;IACD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAClG,MAAM,WAAW,GACf,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,CAAU,CAAC,CAAC,CAAC;IAC3G,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,WAAW,EAAE,CAAC;AACxE,CAAC;AAED,MAAM,gBAAgB,GAAG;;;;;;;;;;;qBAWJ,CAAC;AACtB,MAAM,WAAW,GAAG;;;;;;iEAM6C,CAAC;AAElE,MAAM,WAAW,GAAG;;;;;;;;;;;;;;;;;;;;;;;sEAuBkD,CAAC;AAEvE,SAAS,iBAAiB,CAAC,KAAa,EAAE,OAAwB;IAChE,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,OAAO,KAAK,OAAO,CAAC,MAAM,GAAG,CAAC;IACnG,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC;IACzE,IAAI,OAAO,CAAC,QAAQ,KAAK,CAAC;QAAE,OAAO,CAAC,GAAG,CAAC,uBAAuB,KAAK,KAAK,MAAM,GAAG,MAAM,EAAE,CAAC,CAAC;;QACvF,OAAO,CAAC,KAAK,CAAC,uBAAuB,KAAK,KAAK,MAAM,GAAG,MAAM,EAAE,CAAC,CAAC;IACvE,OAAO,OAAO,CAAC,QAAQ,CAAC;AAC1B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,IAAuB,EAAE,UAA+B,EAAE;IAC9F,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,mBAAmB,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;QACxD,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;YAChB,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;YAC9B,OAAO,CAAC,CAAC;QACX,CAAC;QACD,MAAM,QAAQ,GAAG,kBAAkB,CAAC,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;QACxD,IAAI,UAAU,IAAI,QAAQ;YAAE,OAAO,iBAAiB,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;QAC9E,MAAM,OAAO,GAAG,MAAM,qBAAqB,CAAC;YAC1C,KAAK,EAAE,QAAQ,CAAC,KAAK;YACrB,GAAG,EAAE,QAAQ,CAAC,GAAG;YACjB,GAAG,EAAE,QAAQ,CAAC,GAAG;YACjB,KAAK,EAAE,QAAQ,CAAC,KAAK;YACrB,cAAc,EAAE,QAAQ,CAAC,IAAI;YAC7B,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,YAAY,EAAE,OAAO,CAAC,YAAY;SACnC,CAAC,CAAC;QACH,OAAO,iBAAiB,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;IACnD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,oCAAoC,KAAK,YAAY,mBAAmB,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,oDAAoD,EAAE,CAAC,CAAC;QACjK,OAAO,CAAC,CAAC;IACX,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,IAAuB,EAAE,UAA+B,EAAE;IACzF,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,mBAAmB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QACnD,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;YAChB,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;YACzB,OAAO,CAAC,CAAC;QACX,CAAC;QACD,MAAM,QAAQ,GAAG,kBAAkB,CAAC,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;QACxD,IAAI,UAAU,IAAI,QAAQ;YAAE,OAAO,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACzE,MAAM,OAAO,GAAG,MAAM,gBAAgB,CAAC;YACrC,KAAK,EAAE,QAAQ,CAAC,KAAK;YACrB,GAAG,EAAE,QAAQ,CAAC,GAAG;YACjB,GAAG,EAAE,QAAQ,CAAC,GAAG;YACjB,cAAc,EAAE,QAAQ,CAAC,IAAI;YAC7B,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,YAAY,EAAE,OAAO,CAAC,YAAY;SACnC,CAAC,CAAC;QACH,OAAO,iBAAiB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC9C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,+BAA+B,KAAK,YAAY,mBAAmB,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,+CAA+C,EAAE,CAAC,CAAC;QACvJ,OAAO,CAAC,CAAC;IACX,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,IAAuB,EAAE,UAA+B,EAAE;IACzF,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,mBAAmB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QACnD,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;YAChB,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;YACzB,OAAO,CAAC,CAAC;QACX,CAAC;QACD,MAAM,QAAQ,GAAG,kBAAkB,CAAC,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;QACxD,IAAI,UAAU,IAAI,QAAQ,EAAE,CAAC;YAC3B,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,eAAe,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YAC/E,OAAO,CAAC,CAAC;QACX,CAAC;QACD,MAAM,OAAO,GAAG,MAAM,gBAAgB,CAAC;YACrC,KAAK,EAAE,QAAQ,CAAC,KAAK;YACrB,GAAG,EAAE,QAAQ,CAAC,GAAG;YACjB,GAAG,EAAE,QAAQ,CAAC,GAAG;YACjB,cAAc,EAAE,QAAQ,CAAC,IAAI;YAC7B,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,YAAY,EAAE,OAAO,CAAC,YAAY;YAClC,KAAK,EAAE,OAAO,CAAC,WAAW;SAC3B,CAAC,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC;QACnC,OAAO,OAAO,CAAC,QAAQ,CAAC;IAC1B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,+BAA+B,KAAK,YAAY,mBAAmB,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,+CAA+C,EAAE,CAAC,CAAC;QACvJ,OAAO,CAAC,CAAC;IACX,CAAC;AACH,CAAC;AAED,MAAM,SAAS,GAAG,UAAU,UAAU;;;;;;;;;;;;;;;;;wEAiBkC,CAAC;AAEzE;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,IAAuB,EAAE,UAA+B,EAAE;IACvF,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;QACnC,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;YAChB,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YACvB,OAAO,CAAC,CAAC;QACX,CAAC;QACD,MAAM,QAAQ,GAAG,kBAAkB,CAAC,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;QACxD,IAAI,UAAU,IAAI,QAAQ,EAAE,CAAC;YAC3B,OAAO,CAAC,KAAK,CAAC,4CAA4C,QAAQ,CAAC,MAAM,IAAI,SAAS,GAAG,CAAC,CAAC;YAC3F,OAAO,CAAC,CAAC;QACX,CAAC;QACD,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC;YACnC,KAAK,EAAE,QAAQ,CAAC,KAAK;YACrB,GAAG,EAAE,QAAQ,CAAC,GAAG;YACjB,GAAG,EAAE,QAAQ,CAAC,GAAG;YACjB,cAAc,EAAE,QAAQ,CAAC,IAAI;YAC7B,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,YAAY,EAAE,OAAO,CAAC,YAAY;SACnC,CAAC,CAAC;QACH,IAAI,OAAO,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;YAC3B,OAAO,CAAC,KAAK,CAAC,6BAA6B,OAAO,CAAC,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,eAAe,KAAK,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;YACvH,OAAO,OAAO,CAAC,QAAQ,CAAC;QAC1B,CAAC;QACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACnC,OAAO,CAAC,CAAC;IACX,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,KAAK,YAAY,cAAc,CAAC,CAAC,CAAC,oCAAoC,UAAU,EAAE,CAAC,CAAC,CAAC,uDAAuD,CAAC,CAAC;QAC5J,OAAO,CAAC,CAAC;IACX,CAAC;AACH,CAAC;AAED,SAAS,iBAAiB,CAAC,IAAuB;IAChD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAC3F,MAAM,KAAK,GAAG,IAAI,GAAG,EAAkB,CAAC;IACxC,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACpD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAW,CAAC;QACnC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;QAC9B,IAAI,CAAC,IAAI,KAAK,WAAW,IAAI,IAAI,KAAK,OAAO,CAAC,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YACzF,MAAM,IAAI,qBAAqB,CAAC,qEAAqE,CAAC,CAAC;QACzG,CAAC;QACD,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACzB,CAAC;IACD,MAAM,WAAW,GAAG,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAC3C,IAAI,WAAW,KAAK,SAAS;QAAE,MAAM,IAAI,qBAAqB,CAAC,uBAAuB,CAAC,CAAC;IACxF,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACnC,OAAO,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC;AACtG,CAAC;AAED,kGAAkG;AAClG,SAAS,mBAAmB,CAAC,IAAY;IACvC,IAAI,KAAiB,CAAC;IACtB,IAAI,CAAC;QACH,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE;YAAE,MAAM,IAAI,qBAAqB,CAAC,kCAAkC,CAAC,CAAC;QAClG,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,qBAAqB;YAAE,MAAM,KAAK,CAAC;QACxD,MAAM,IAAI,qBAAqB,CAAC,sCAAsC,CAAC,CAAC;IAC1E,CAAC;IACD,IAAI,CAAC;QACH,OAAO,oBAAoB,CAAC,KAAK,CAAC,CAAC;IACrC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,CAAC,CAAC,KAAK,YAAY,qBAAqB,CAAC;YAAE,MAAM,IAAI,qBAAqB,CAAC,uCAAuC,CAAC,CAAC;QACxH,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,gBAAgB,KAAK,CAAC,QAAQ,EAAE,CAAC;QACnF,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,KAAK,cAAc,CAAC,CAAC,CAAC,6BAA6B,CAAC,CAAC,CAAC,mBAAmB,CAAC;QACvJ,MAAM,IAAI,qBAAqB,CAAC,sBAAsB,GAAG,GAAG,KAAK,EAAE,CAAC,CAAC;IACvE,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,IAAuB,EAAE,UAAkC,EAAE;IAC9F,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;QACvC,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;YAChB,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;YAC5B,OAAO,CAAC,CAAC;QACX,CAAC;QACD,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QACzC,MAAM,KAAK,GAAG,qBAAqB,CAAC,mBAAmB,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;QAC3F,MAAM,QAAQ,GAAG,MAAM,oBAAoB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAC5D,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,OAAO,IAAI,qBAAqB,CAAC,CAAC;QAClE,IAAI,CAAC;YACH,qBAAqB,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QACvC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,qBAAqB;gBAAE,MAAM,KAAK,CAAC;YACxD,MAAM,IAAI,qBAAqB,CAAC,wCAAwC,GAAG,EAAE,CAAC,CAAC;QACjF,CAAC;QACD,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,MAAM,CAAC;QAC1F,OAAO,CAAC,GAAG,CAAC,SAAS,GAAG,KAAK,QAAQ,CAAC,QAAQ,CAAC,MAAM,gBAAgB,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,QAAQ,WAAW,QAAQ,YAAY,CAAC,CAAC;QACzI,OAAO,CAAC,CAAC;IACX,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,MAAM,GAAG,KAAK,YAAY,qBAAqB,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,wBAAwB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,KAAK,GAAG,CAAC;QACtJ,OAAO,CAAC,KAAK,CAAC,iCAAiC,MAAM,2BAA2B,CAAC,CAAC;QAClF,OAAO,CAAC,CAAC;IACX,CAAC;AACH,CAAC;AAED,KAAK,UAAU,GAAG;IAChB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACnC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,MAAM,EAAE,CAAC;QACvB,OAAO,CAAC,QAAQ,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACjD,OAAO;IACT,CAAC;IACD,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,aAAa,EAAE,CAAC;QAC9B,OAAO,CAAC,QAAQ,GAAG,MAAM,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACxD,OAAO;IACT,CAAC;IACD,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE,CAAC;QACzB,OAAO,CAAC,QAAQ,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACnD,OAAO;IACT,CAAC;IACD,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE,CAAC;QACzB,OAAO,CAAC,QAAQ,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACnD,OAAO;IACT,CAAC;IACD,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,MAAM,EAAE,CAAC;QACvB,OAAO,CAAC,QAAQ,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACjD,OAAO;IACT,CAAC;IACD,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,UAAU,EAAE,CAAC;QAC3B,OAAO,CAAC,QAAQ,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACrD,OAAO;IACT,CAAC;IACD,IAAI,CAAC;QACH,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,EAAE,cAAc,EAAE,CAAC,CAAC;IAClD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,wBAAwB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAChG,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACvB,CAAC;AACH,CAAC;AACD,IAAI,kBAAkB,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAAE,KAAK,GAAG,EAAE,CAAC"}
|
package/dist/apply-plan.d.ts
CHANGED
|
@@ -1,71 +1,50 @@
|
|
|
1
|
+
import type { AdvisorPlan, EngagementBrief } from "./plan-contract.js";
|
|
1
2
|
import type { WorkspaceHost } from "./types.js";
|
|
2
|
-
export
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
export interface PlanDecision {
|
|
27
|
-
readonly at: string;
|
|
28
|
-
readonly recommended: string;
|
|
29
|
-
readonly chosen: string;
|
|
30
|
-
readonly by: string;
|
|
31
|
-
}
|
|
32
|
-
export interface AdvisorPlan {
|
|
33
|
-
readonly schemaVersion: 1;
|
|
34
|
-
readonly asOf: string;
|
|
35
|
-
readonly mandate: {
|
|
36
|
-
readonly problem: string;
|
|
37
|
-
readonly primaryProblemId: string;
|
|
38
|
-
readonly roles: readonly string[];
|
|
39
|
-
};
|
|
40
|
-
readonly whereWeAre: readonly string[];
|
|
41
|
-
readonly recommendedNext: {
|
|
42
|
-
readonly action: string;
|
|
43
|
-
readonly owner: string;
|
|
44
|
-
readonly due: string;
|
|
45
|
-
} | null;
|
|
46
|
-
readonly decisions: readonly PlanDecision[];
|
|
47
|
-
readonly blockers: readonly PlanBlocker[];
|
|
48
|
-
}
|
|
49
|
-
export type ValidationResult = {
|
|
50
|
-
readonly valid: true;
|
|
51
|
-
} | {
|
|
52
|
-
readonly valid: false;
|
|
53
|
-
readonly reason: string;
|
|
54
|
-
};
|
|
55
|
-
/** Validates an EngagementBrief's shape exactly against the #1175 contract. Never mutates, never re-derives content. */
|
|
56
|
-
export declare function validateEngagementBrief(value: unknown): ValidationResult;
|
|
57
|
-
/** Validates an AdvisorPlan's shape exactly against the #1175 contract. */
|
|
58
|
-
export declare function validateAdvisorPlan(value: unknown): ValidationResult;
|
|
3
|
+
export { validateAdvisorPlan, validateEngagementBrief } from "./plan-contract.js";
|
|
4
|
+
export type { AdvisorPlan, BlockerKind, EngagementBrief, EngagementBriefRole, EngagementContext, EngagementContextField, EngagementContextFieldId, GoalDirection, PlanBlocker, PlanDecision, PlanKit, PlanPackageAct, PlanStaffing, ValidationResult, } from "./plan-contract.js";
|
|
5
|
+
/**
|
|
6
|
+
* What an approval binds (#1178): the `subjectDigest` of the plan's latest
|
|
7
|
+
* decision, by `at`, when that decision has chosen "approved" -- the digest of
|
|
8
|
+
* the exact change the approver was shown. Otherwise null, and null binds
|
|
9
|
+
* nothing. Fails closed:
|
|
10
|
+
*
|
|
11
|
+
* - a plan that does not validate against the plan contract, rules
|
|
12
|
+
* included: null. It checks this itself rather than trusting its caller,
|
|
13
|
+
* because on an unchecked plan a time with no offset parses as local time,
|
|
14
|
+
* so the machine's time zone could decide which decision is latest;
|
|
15
|
+
* - no decisions, or any decision time that does not parse: null;
|
|
16
|
+
* - a latest decision that is not "approved": null;
|
|
17
|
+
* - an approval with no `subjectDigest`, or one that is not a sha256 digest:
|
|
18
|
+
* null -- an approval that names no bytes approves no bytes;
|
|
19
|
+
* - several decisions at the latest instant: their subject only when every
|
|
20
|
+
* one of them is "approved" with the same `subjectDigest`, else null.
|
|
21
|
+
*
|
|
22
|
+
* It says what was approved, not whether that is what is about to be applied:
|
|
23
|
+
* the caller recomputes the digest of the change it holds and refuses unless
|
|
24
|
+
* the two are equal.
|
|
25
|
+
*/
|
|
26
|
+
export declare function approvedSubject(plan: AdvisorPlan): string | null;
|
|
59
27
|
/**
|
|
60
28
|
* The plan is approved when its most recent decision (by `at`) records
|
|
61
29
|
* chosen === "approved". No decisions, or a most-recent decision that
|
|
62
30
|
* isn't "approved", is not approved -- this never assumes approval from
|
|
63
|
-
* absence.
|
|
31
|
+
* absence. Fails closed on anything that would let array order decide
|
|
32
|
+
* instead of time: a decision whose `at` does not parse to a finite time
|
|
33
|
+
* (the plan contract already refuses one; this does not rely on that), or
|
|
34
|
+
* two decisions at the same latest instant that do not all say "approved".
|
|
35
|
+
*
|
|
36
|
+
* It binds no bytes (#1178): it does not look at `subjectDigest`, so it is
|
|
37
|
+
* true for an approval that names no change at all. It says only that the
|
|
38
|
+
* latest decision is an approval. Anything that applies a plan must use
|
|
39
|
+
* `approvedSubject()` instead, and compare the subject it returns with the
|
|
40
|
+
* digest of the change it holds. The one stated exception is the legacy
|
|
41
|
+
* brief-only path, `applyEngagementBrief()`, which predates the binding.
|
|
64
42
|
*/
|
|
65
43
|
export declare function isPlanApproved(plan: AdvisorPlan): boolean;
|
|
66
44
|
export type ApplyBriefResult = {
|
|
67
45
|
readonly state: "applied";
|
|
68
46
|
readonly path: string;
|
|
47
|
+
readonly planDigest: string;
|
|
69
48
|
} | {
|
|
70
49
|
readonly state: "refused";
|
|
71
50
|
readonly reason: string;
|
|
@@ -73,7 +52,15 @@ export type ApplyBriefResult = {
|
|
|
73
52
|
/**
|
|
74
53
|
* Writes clossys/brief.json into `repositoryDirectory`, byte-identically
|
|
75
54
|
* from the validated brief -- never re-authors its prose. Refuses (does
|
|
76
|
-
* not write) unless
|
|
55
|
+
* not write) unless the plan validates and is approved and the brief,
|
|
56
|
+
* including its context snapshot, validates. Reports the canonical digest
|
|
57
|
+
* of the plan it applied.
|
|
58
|
+
*
|
|
59
|
+
* LEGACY (#1178): this path predates the approval binding. It accepts an
|
|
60
|
+
* approval whether or not it carries a `subjectDigest` and checks no
|
|
61
|
+
* binding (it uses `isPlanApproved()`), exactly as before; it is kept
|
|
62
|
+
* working, not extended. Anything that must know what an approval binds uses
|
|
63
|
+
* `approvedSubject()`.
|
|
77
64
|
*/
|
|
78
65
|
export declare function applyEngagementBrief(host: WorkspaceHost, repositoryDirectory: string, plan: AdvisorPlan, brief: EngagementBrief, briefRelPath: string): ApplyBriefResult;
|
|
79
66
|
//# sourceMappingURL=apply-plan.d.ts.map
|