@clossys/launcher 0.3.0 → 0.4.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 +1328 -60
- package/contracts/conversation-contract.md +2 -1
- 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 +453 -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 +799 -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 +157 -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 +381 -0
- package/dist/change-set-contract.d.ts.map +1 -0
- package/dist/change-set-contract.js +738 -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/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 +2840 -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 +34 -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 +187 -0
- package/dist/ledger-contract.d.ts.map +1 -0
- package/dist/ledger-contract.js +532 -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 +198 -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 +840 -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 +250 -0
- package/dist/plan-bundle.d.ts.map +1 -0
- package/dist/plan-bundle.js +827 -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 +493 -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 +34 -0
- package/dist/setup-template-scripts.d.ts.map +1 -0
- package/dist/setup-template-scripts.js +557 -0
- package/dist/setup-template-scripts.js.map +1 -0
- package/dist/setup-templates.d.ts +54 -0
- package/dist/setup-templates.d.ts.map +1 -0
- package/dist/setup-templates.js +427 -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 -5
- package/skeleton/README.md +14 -9
- package/skeleton/package.json +2 -1
- package/skill/SKILL.md +20 -16
- package/skill-catalogue/advisor/SKILL.md +100 -11
- package/skill-catalogue/architect/SKILL.md +2 -13
- package/skill-catalogue/bouncer/SKILL.md +2 -13
- package/skill-catalogue/builder/SKILL.md +2 -13
- package/skill-catalogue/butler/SKILL.md +2 -13
- package/skill-catalogue/controller/SKILL.md +2 -13
- package/skill-catalogue/customer/SKILL.md +4 -13
- package/skill-catalogue/designer/SKILL.md +9 -14
- package/skill-catalogue/giver/SKILL.md +2 -13
- package/skill-catalogue/influencer/SKILL.md +2 -13
- package/skill-catalogue/inspector/SKILL.md +2 -13
- package/skill-catalogue/integrator/SKILL.md +2 -13
- package/skill-catalogue/keeper/SKILL.md +2 -13
- package/skill-catalogue/launcher/SKILL.md +20 -16
- package/skill-catalogue/locksmith/SKILL.md +2 -13
- package/skill-catalogue/messenger/SKILL.md +2 -13
- package/skill-catalogue/observer/SKILL.md +2 -13
- package/skill-catalogue/publisher/SKILL.md +11 -17
- package/skill-catalogue/starter/SKILL.md +3 -13
- package/skill-catalogue/strategist/SKILL.md +14 -17
- package/skill-catalogue/writer/SKILL.md +7 -14
- package/src/admission-fixture.ts +572 -0
- package/src/admission.ts +816 -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 +164 -0
- package/src/body-command.ts +162 -0
- package/src/change-set-contract.ts +937 -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/generated/contract-schema.generated.ts +520 -0
- package/src/generated/package-scope.generated.ts +10 -0
- package/src/generated/plan-contracts.generated.ts +2840 -0
- package/src/host.ts +10 -0
- package/src/identity.ts +51 -0
- package/src/index.ts +72 -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 +637 -0
- package/src/ledger-trust.ts +267 -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 +886 -0
- package/src/observe-repository.ts +1365 -0
- package/src/plan-bundle-setup-fixture.ts +200 -0
- package/src/plan-bundle.ts +964 -0
- package/src/plan-command.ts +509 -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 +571 -0
- package/src/setup-templates.ts +471 -0
- package/src/skills.ts +161 -18
- package/src/status.ts +557 -0
- package/src/types.ts +148 -13
- package/CHANGELOG.md +0 -131
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
import { mkdir, mkdtemp, realpath, rm, writeFile } from "node:fs/promises";
|
|
2
|
+
import { tmpdir } from "node:os";
|
|
3
|
+
import { delimiter, isAbsolute, join } from "node:path";
|
|
4
|
+
|
|
5
|
+
export type LockfileTool = "npm" | "pnpm" | "yarn";
|
|
6
|
+
|
|
7
|
+
export interface LockfileToolEnvInput {
|
|
8
|
+
readonly tool: LockfileTool;
|
|
9
|
+
/** Absolute scratch directory (a fresh mkdtemp outside the regenerated root). */
|
|
10
|
+
readonly scratch: string;
|
|
11
|
+
/** The publishing registry, without trailing slash. Used for COREPACK_NPM_REGISTRY. */
|
|
12
|
+
readonly registry: string;
|
|
13
|
+
/** Whether the tool is launched through corepack (pnpm and Yarn). */
|
|
14
|
+
readonly corepack: boolean;
|
|
15
|
+
/** The parent environment; only PATH and COREPACK_HOME are ever read from it. */
|
|
16
|
+
readonly parent: Readonly<Record<string, string | undefined>>;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/** Every key lockfileToolEnv can produce, for callers asserting an exact key set. */
|
|
20
|
+
export const LOCKFILE_TOOL_ENV_KEYS = Object.freeze([
|
|
21
|
+
"PATH",
|
|
22
|
+
"HOME",
|
|
23
|
+
"USERPROFILE",
|
|
24
|
+
"TMPDIR",
|
|
25
|
+
"TMP",
|
|
26
|
+
"TEMP",
|
|
27
|
+
"XDG_CONFIG_HOME",
|
|
28
|
+
"XDG_CACHE_HOME",
|
|
29
|
+
"XDG_DATA_HOME",
|
|
30
|
+
"XDG_STATE_HOME",
|
|
31
|
+
"npm_config_userconfig",
|
|
32
|
+
"npm_config_globalconfig",
|
|
33
|
+
"npm_config_cache",
|
|
34
|
+
"npm_config_ignore_scripts",
|
|
35
|
+
"npm_config_audit",
|
|
36
|
+
"npm_config_fund",
|
|
37
|
+
"npm_config_update_notifier",
|
|
38
|
+
"pnpm_config_update_notifier",
|
|
39
|
+
"YARN_ENABLE_SCRIPTS",
|
|
40
|
+
"YARN_ENABLE_TELEMETRY",
|
|
41
|
+
"YARN_ENABLE_GLOBAL_CACHE",
|
|
42
|
+
"YARN_CACHE_FOLDER",
|
|
43
|
+
"COREPACK_ENABLE_DOWNLOAD_PROMPT",
|
|
44
|
+
"COREPACK_NPM_REGISTRY",
|
|
45
|
+
"COREPACK_HOME",
|
|
46
|
+
"COREPACK_ENV_FILE",
|
|
47
|
+
] as const);
|
|
48
|
+
|
|
49
|
+
const nonEmptyString = (value: string | undefined): value is string => typeof value === "string" && value.length > 0;
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Keeps only absolute entries of a PATH-shaped string, in their original order.
|
|
53
|
+
* An empty, `.` or otherwise relative entry would resolve against the child's
|
|
54
|
+
* cwd (the regenerated repository root), letting a committed file shadow
|
|
55
|
+
* `npm`, `corepack`, or npm's own `git` lookup. Falls back to /usr/bin:/bin
|
|
56
|
+
* when nothing absolute remains.
|
|
57
|
+
*/
|
|
58
|
+
function absolutePathEntries(path: string): string {
|
|
59
|
+
const entries = path.split(delimiter).filter((entry) => entry.length > 0 && isAbsolute(entry));
|
|
60
|
+
return entries.length > 0 ? entries.join(delimiter) : "/usr/bin:/bin";
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* Builds the child environment from a literal allow-list. Never spreads the
|
|
65
|
+
* parent. Creates nothing on disk: the empty config files and cache paths it
|
|
66
|
+
* names are made by prepareLockfileScratch. User and global config are two
|
|
67
|
+
* distinct empty files: npm 11 refuses to load one file as both.
|
|
68
|
+
*/
|
|
69
|
+
export function lockfileToolEnv(input: LockfileToolEnvInput): Record<string, string> {
|
|
70
|
+
const { tool, scratch, registry, corepack, parent } = input;
|
|
71
|
+
const home = join(scratch, "home");
|
|
72
|
+
const tmp = join(scratch, "tmp");
|
|
73
|
+
const env: Record<string, string> = {
|
|
74
|
+
PATH: absolutePathEntries(nonEmptyString(parent.PATH) ? parent.PATH : "/usr/bin:/bin"),
|
|
75
|
+
HOME: home,
|
|
76
|
+
USERPROFILE: home,
|
|
77
|
+
TMPDIR: tmp,
|
|
78
|
+
TMP: tmp,
|
|
79
|
+
TEMP: tmp,
|
|
80
|
+
XDG_CONFIG_HOME: join(scratch, "xdg", "config"),
|
|
81
|
+
XDG_CACHE_HOME: join(scratch, "xdg", "cache"),
|
|
82
|
+
XDG_DATA_HOME: join(scratch, "xdg", "data"),
|
|
83
|
+
XDG_STATE_HOME: join(scratch, "xdg", "state"),
|
|
84
|
+
npm_config_userconfig: join(scratch, "empty-npmrc"),
|
|
85
|
+
npm_config_globalconfig: join(scratch, "empty-global-npmrc"),
|
|
86
|
+
npm_config_cache: join(scratch, "npm-cache"),
|
|
87
|
+
npm_config_ignore_scripts: "true",
|
|
88
|
+
npm_config_audit: "false",
|
|
89
|
+
npm_config_fund: "false",
|
|
90
|
+
npm_config_update_notifier: "false",
|
|
91
|
+
};
|
|
92
|
+
// pnpm 12 reads its update check from this key only, not npm_config_update_notifier.
|
|
93
|
+
if (tool === "pnpm") env.pnpm_config_update_notifier = "false";
|
|
94
|
+
if (tool === "yarn") {
|
|
95
|
+
env.YARN_ENABLE_SCRIPTS = "0";
|
|
96
|
+
env.YARN_ENABLE_TELEMETRY = "0";
|
|
97
|
+
env.YARN_ENABLE_GLOBAL_CACHE = "0";
|
|
98
|
+
env.YARN_CACHE_FOLDER = join(scratch, "yarn-cache");
|
|
99
|
+
}
|
|
100
|
+
if (corepack) {
|
|
101
|
+
env.COREPACK_ENABLE_DOWNLOAD_PROMPT = "0";
|
|
102
|
+
env.COREPACK_NPM_REGISTRY = registry;
|
|
103
|
+
env.COREPACK_ENV_FILE = "0";
|
|
104
|
+
if (nonEmptyString(parent.COREPACK_HOME)) env.COREPACK_HOME = parent.COREPACK_HOME;
|
|
105
|
+
}
|
|
106
|
+
return env;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
export interface LockfileScratch {
|
|
110
|
+
readonly path: string;
|
|
111
|
+
/** Removes the scratch directory; safe to call twice. */
|
|
112
|
+
remove(): Promise<void>;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
const SCRATCH_SUBDIRECTORIES = ["home", "tmp", join("xdg", "config"), join("xdg", "cache"), join("xdg", "data"), join("xdg", "state"), "npm-cache", "yarn-cache"];
|
|
116
|
+
|
|
117
|
+
/** Creates a fresh scratch directory under the OS temp root with the empty config file and home/cache/xdg subdirectories. */
|
|
118
|
+
export async function prepareLockfileScratch(): Promise<LockfileScratch> {
|
|
119
|
+
const root = await mkdtemp(join(await realpath(tmpdir()), "launcher-lockfile-"));
|
|
120
|
+
try {
|
|
121
|
+
for (const subdirectory of SCRATCH_SUBDIRECTORIES) await mkdir(join(root, subdirectory), { recursive: true });
|
|
122
|
+
for (const file of ["empty-npmrc", "empty-global-npmrc"]) await writeFile(join(root, file), "", { mode: 0o600 });
|
|
123
|
+
} catch (cause) {
|
|
124
|
+
await rm(root, { recursive: true, force: true });
|
|
125
|
+
throw cause;
|
|
126
|
+
}
|
|
127
|
+
return {
|
|
128
|
+
path: root,
|
|
129
|
+
remove: () => rm(root, { recursive: true, force: true }),
|
|
130
|
+
};
|
|
131
|
+
}
|