@microwiseai/snapshot 0.5.2 → 0.7.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/dist/commands/current.d.ts +5 -1
- package/dist/commands/current.d.ts.map +1 -1
- package/dist/commands/current.js +89 -2
- package/dist/commands/current.js.map +1 -1
- package/dist/commands/doctor.d.ts +2 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +83 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/install.d.ts +41 -0
- package/dist/commands/install.d.ts.map +1 -1
- package/dist/commands/install.js +396 -216
- package/dist/commands/install.js.map +1 -1
- package/dist/commands/publish.d.ts +0 -4
- package/dist/commands/publish.d.ts.map +1 -1
- package/dist/commands/publish.js +44 -58
- package/dist/commands/publish.js.map +1 -1
- package/dist/commands/setup.d.ts +5 -0
- package/dist/commands/setup.d.ts.map +1 -0
- package/dist/commands/setup.js +52 -0
- package/dist/commands/setup.js.map +1 -0
- package/dist/index.js +22 -28
- package/dist/index.js.map +1 -1
- package/dist/lib/config.js +1 -1
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/core-floor.d.ts +49 -0
- package/dist/lib/core-floor.d.ts.map +1 -0
- package/dist/lib/core-floor.js +78 -0
- package/dist/lib/core-floor.js.map +1 -0
- package/dist/lib/gitlab.d.ts.map +1 -1
- package/dist/lib/gitlab.js +8 -6
- package/dist/lib/gitlab.js.map +1 -1
- package/dist/lib/install-verify.d.ts +101 -0
- package/dist/lib/install-verify.d.ts.map +1 -0
- package/dist/lib/install-verify.js +143 -0
- package/dist/lib/install-verify.js.map +1 -0
- package/dist/lib/ledger.d.ts +212 -0
- package/dist/lib/ledger.d.ts.map +1 -0
- package/dist/lib/ledger.js +266 -0
- package/dist/lib/ledger.js.map +1 -0
- package/dist/lib/pin-override.d.ts +53 -0
- package/dist/lib/pin-override.d.ts.map +1 -0
- package/dist/lib/pin-override.js +77 -0
- package/dist/lib/pin-override.js.map +1 -0
- package/dist/lib/prerequisites.d.ts +33 -0
- package/dist/lib/prerequisites.d.ts.map +1 -0
- package/dist/lib/prerequisites.js +123 -0
- package/dist/lib/prerequisites.js.map +1 -0
- package/dist/lib/transitive-resolver.d.ts +0 -121
- package/dist/lib/transitive-resolver.d.ts.map +1 -1
- package/dist/lib/transitive-resolver.js +0 -190
- package/dist/lib/transitive-resolver.js.map +1 -1
- package/dist/lib/version-validator.d.ts +9 -0
- package/dist/lib/version-validator.d.ts.map +1 -1
- package/dist/lib/version-validator.js +69 -0
- package/dist/lib/version-validator.js.map +1 -1
- package/package.json +9 -19
- package/dist/commands/clone-all.d.ts +0 -21
- package/dist/commands/clone-all.d.ts.map +0 -1
- package/dist/commands/clone-all.js +0 -57
- package/dist/commands/clone-all.js.map +0 -1
- package/dist/commands/preflight.d.ts +0 -31
- package/dist/commands/preflight.d.ts.map +0 -1
- package/dist/commands/preflight.js +0 -83
- package/dist/commands/preflight.js.map +0 -1
- package/dist/lib/distkit-closure-bridge.d.ts +0 -102
- package/dist/lib/distkit-closure-bridge.d.ts.map +0 -1
- package/dist/lib/distkit-closure-bridge.js +0 -177
- package/dist/lib/distkit-closure-bridge.js.map +0 -1
- package/dist/lib/distkit-closure-parity.d.ts +0 -110
- package/dist/lib/distkit-closure-parity.d.ts.map +0 -1
- package/dist/lib/distkit-closure-parity.js +0 -134
- package/dist/lib/distkit-closure-parity.js.map +0 -1
- package/dist/lib/distkit-routing-port.d.ts +0 -37
- package/dist/lib/distkit-routing-port.d.ts.map +0 -1
- package/dist/lib/distkit-routing-port.js +0 -72
- package/dist/lib/distkit-routing-port.js.map +0 -1
- package/dist/lib/install-timeline.d.ts +0 -81
- package/dist/lib/install-timeline.d.ts.map +0 -1
- package/dist/lib/install-timeline.js +0 -243
- package/dist/lib/install-timeline.js.map +0 -1
- package/dist/lib/preflight-adapter.d.ts +0 -52
- package/dist/lib/preflight-adapter.d.ts.map +0 -1
- package/dist/lib/preflight-adapter.js +0 -224
- package/dist/lib/preflight-adapter.js.map +0 -1
- package/node_modules/@gitdot/clone-lib/README.md +0 -117
- package/node_modules/@gitdot/clone-lib/dist/bin/gitdot-resolve.d.ts +0 -9
- package/node_modules/@gitdot/clone-lib/dist/bin/gitdot-resolve.d.ts.map +0 -1
- package/node_modules/@gitdot/clone-lib/dist/bin/gitdot-resolve.js +0 -154
- package/node_modules/@gitdot/clone-lib/dist/bin/gitdot-resolve.js.map +0 -1
- package/node_modules/@gitdot/clone-lib/dist/clone.d.ts +0 -21
- package/node_modules/@gitdot/clone-lib/dist/clone.d.ts.map +0 -1
- package/node_modules/@gitdot/clone-lib/dist/clone.js +0 -228
- package/node_modules/@gitdot/clone-lib/dist/clone.js.map +0 -1
- package/node_modules/@gitdot/clone-lib/dist/dotpath.d.ts +0 -10
- package/node_modules/@gitdot/clone-lib/dist/dotpath.d.ts.map +0 -1
- package/node_modules/@gitdot/clone-lib/dist/dotpath.js +0 -27
- package/node_modules/@gitdot/clone-lib/dist/dotpath.js.map +0 -1
- package/node_modules/@gitdot/clone-lib/dist/git.d.ts +0 -23
- package/node_modules/@gitdot/clone-lib/dist/git.d.ts.map +0 -1
- package/node_modules/@gitdot/clone-lib/dist/git.js +0 -134
- package/node_modules/@gitdot/clone-lib/dist/git.js.map +0 -1
- package/node_modules/@gitdot/clone-lib/dist/index.d.ts +0 -17
- package/node_modules/@gitdot/clone-lib/dist/index.d.ts.map +0 -1
- package/node_modules/@gitdot/clone-lib/dist/index.js +0 -35
- package/node_modules/@gitdot/clone-lib/dist/index.js.map +0 -1
- package/node_modules/@gitdot/clone-lib/dist/lock.d.ts +0 -24
- package/node_modules/@gitdot/clone-lib/dist/lock.d.ts.map +0 -1
- package/node_modules/@gitdot/clone-lib/dist/lock.js +0 -97
- package/node_modules/@gitdot/clone-lib/dist/lock.js.map +0 -1
- package/node_modules/@gitdot/clone-lib/dist/resolve/gitlab.d.ts +0 -15
- package/node_modules/@gitdot/clone-lib/dist/resolve/gitlab.d.ts.map +0 -1
- package/node_modules/@gitdot/clone-lib/dist/resolve/gitlab.js +0 -124
- package/node_modules/@gitdot/clone-lib/dist/resolve/gitlab.js.map +0 -1
- package/node_modules/@gitdot/clone-lib/dist/resolve/index.d.ts +0 -12
- package/node_modules/@gitdot/clone-lib/dist/resolve/index.d.ts.map +0 -1
- package/node_modules/@gitdot/clone-lib/dist/resolve/index.js +0 -31
- package/node_modules/@gitdot/clone-lib/dist/resolve/index.js.map +0 -1
- package/node_modules/@gitdot/clone-lib/dist/resolve/manifest.d.ts +0 -32
- package/node_modules/@gitdot/clone-lib/dist/resolve/manifest.d.ts.map +0 -1
- package/node_modules/@gitdot/clone-lib/dist/resolve/manifest.js +0 -159
- package/node_modules/@gitdot/clone-lib/dist/resolve/manifest.js.map +0 -1
- package/node_modules/@gitdot/clone-lib/dist/resolve/member.d.ts +0 -44
- package/node_modules/@gitdot/clone-lib/dist/resolve/member.d.ts.map +0 -1
- package/node_modules/@gitdot/clone-lib/dist/resolve/member.js +0 -163
- package/node_modules/@gitdot/clone-lib/dist/resolve/member.js.map +0 -1
- package/node_modules/@gitdot/clone-lib/dist/resolve/resolve.d.ts +0 -18
- package/node_modules/@gitdot/clone-lib/dist/resolve/resolve.d.ts.map +0 -1
- package/node_modules/@gitdot/clone-lib/dist/resolve/resolve.js +0 -155
- package/node_modules/@gitdot/clone-lib/dist/resolve/resolve.js.map +0 -1
- package/node_modules/@gitdot/clone-lib/dist/types.d.ts +0 -225
- package/node_modules/@gitdot/clone-lib/dist/types.d.ts.map +0 -1
- package/node_modules/@gitdot/clone-lib/dist/types.js +0 -9
- package/node_modules/@gitdot/clone-lib/dist/types.js.map +0 -1
- package/node_modules/@gitdot/clone-lib/package.json +0 -53
- package/node_modules/@microwiseai/install-preflight/dist/index.d.ts +0 -27
- package/node_modules/@microwiseai/install-preflight/dist/index.d.ts.map +0 -1
- package/node_modules/@microwiseai/install-preflight/dist/index.js +0 -26
- package/node_modules/@microwiseai/install-preflight/dist/index.js.map +0 -1
- package/node_modules/@microwiseai/install-preflight/dist/policy.d.ts +0 -42
- package/node_modules/@microwiseai/install-preflight/dist/policy.d.ts.map +0 -1
- package/node_modules/@microwiseai/install-preflight/dist/policy.js +0 -79
- package/node_modules/@microwiseai/install-preflight/dist/policy.js.map +0 -1
- package/node_modules/@microwiseai/install-preflight/dist/preflight.d.ts +0 -18
- package/node_modules/@microwiseai/install-preflight/dist/preflight.d.ts.map +0 -1
- package/node_modules/@microwiseai/install-preflight/dist/preflight.js +0 -0
- package/node_modules/@microwiseai/install-preflight/dist/preflight.js.map +0 -1
- package/node_modules/@microwiseai/install-preflight/dist/resolvers.d.ts +0 -26
- package/node_modules/@microwiseai/install-preflight/dist/resolvers.d.ts.map +0 -1
- package/node_modules/@microwiseai/install-preflight/dist/resolvers.js +0 -63
- package/node_modules/@microwiseai/install-preflight/dist/resolvers.js.map +0 -1
- package/node_modules/@microwiseai/install-preflight/dist/semver.d.ts +0 -45
- package/node_modules/@microwiseai/install-preflight/dist/semver.d.ts.map +0 -1
- package/node_modules/@microwiseai/install-preflight/dist/semver.js +0 -195
- package/node_modules/@microwiseai/install-preflight/dist/semver.js.map +0 -1
- package/node_modules/@microwiseai/install-preflight/dist/types.d.ts +0 -136
- package/node_modules/@microwiseai/install-preflight/dist/types.d.ts.map +0 -1
- package/node_modules/@microwiseai/install-preflight/dist/types.js +0 -11
- package/node_modules/@microwiseai/install-preflight/dist/types.js.map +0 -1
- package/node_modules/@microwiseai/install-preflight/package.json +0 -49
package/dist/index.js
CHANGED
|
@@ -6,10 +6,10 @@ import { installCommand } from './commands/install.js';
|
|
|
6
6
|
import { listCommand } from './commands/list.js';
|
|
7
7
|
import { currentCommand } from './commands/current.js';
|
|
8
8
|
import { publishCommand } from './commands/publish.js';
|
|
9
|
-
import { preflightCommand } from './commands/preflight.js';
|
|
10
9
|
import { licenseActivateCommand, licenseStatusCommand, licenseDeactivateCommand, licenseRefreshCommand, } from './commands/license.js';
|
|
11
10
|
import { accessSyncCommand } from './commands/access.js';
|
|
12
|
-
import {
|
|
11
|
+
import { doctorCommand } from './commands/doctor.js';
|
|
12
|
+
import { setupCommand } from './commands/setup.js';
|
|
13
13
|
import { reportImport } from '@microwiseai/import-telemetry';
|
|
14
14
|
import { VENDOR_NAME, PACKAGE_NAME } from './lib/config.js';
|
|
15
15
|
const require = createRequire(import.meta.url);
|
|
@@ -31,8 +31,6 @@ function shouldReportImport(argv) {
|
|
|
31
31
|
return false;
|
|
32
32
|
if (argv[0] === 'list' || argv[0] === 'help')
|
|
33
33
|
return false; // disabled/help-only
|
|
34
|
-
if (argv[0] === 'clone-all')
|
|
35
|
-
return false; // clones source, not a package install
|
|
36
34
|
return true;
|
|
37
35
|
}
|
|
38
36
|
if (shouldReportImport(process.argv.slice(2))) {
|
|
@@ -55,6 +53,8 @@ program
|
|
|
55
53
|
.option('--replace', 'Converge to this version: remove previous-version packages no longer in this snapshot (shared packages are kept)')
|
|
56
54
|
.option('-d, --dry-run', 'With --replace, show what would be removed without changing anything')
|
|
57
55
|
.option('-y, --yes', 'With --replace, skip the removal confirmation prompt')
|
|
56
|
+
.option('--no-converge', 'Raw/fast install: skip post-install convergence — only verify, and fail-loud on any divergence (convergence is ON by default)')
|
|
57
|
+
.option('--pin <spec...>', 'Override a package version without re-publishing, e.g. --pin @ist/sesh@0.4.0 (repeatable)')
|
|
58
58
|
.action(async (name, options) => {
|
|
59
59
|
await installCommand(name, options);
|
|
60
60
|
});
|
|
@@ -71,18 +71,9 @@ program
|
|
|
71
71
|
program
|
|
72
72
|
.command('current')
|
|
73
73
|
.description('Show currently installed snapshot')
|
|
74
|
-
.
|
|
75
|
-
await currentCommand();
|
|
76
|
-
});
|
|
77
|
-
program
|
|
78
|
-
.command('clone-all')
|
|
79
|
-
.description('Clone the full source closure a snapshot declares (via @gitdot/clone-lib)')
|
|
80
|
-
.option('--manifest <path>', 'Path to snapshot.json (install set + registry scope→group)', 'snapshot.json')
|
|
81
|
-
.option('--mode <mode>', 'Clone mode: head (default-branch HEAD) | pinned (exact commitSha)', 'head')
|
|
82
|
-
.option('--dest <dir>', 'Destination workspace root', process.cwd())
|
|
83
|
-
.option('--json', 'Emit the structured clone report as JSON')
|
|
74
|
+
.option('--json', 'Output the current snapshot + install ledger as JSON (provenance, AC3.1)')
|
|
84
75
|
.action(async (options) => {
|
|
85
|
-
await
|
|
76
|
+
await currentCommand(options);
|
|
86
77
|
});
|
|
87
78
|
program
|
|
88
79
|
.command('publish')
|
|
@@ -91,21 +82,9 @@ program
|
|
|
91
82
|
.option('-d, --dry-run', 'Show what would be published without publishing')
|
|
92
83
|
.option('-v, --verbose', 'Show detailed output')
|
|
93
84
|
.option('--skip-access-sync', 'Skip syncing access levels to license-api')
|
|
94
|
-
.option('--skip-preflight', 'Emergency-only: skip the anonymous end-user preflight gate')
|
|
95
|
-
.option('--no-transitive', 'Preflight: check only directly-declared pins (skip transitive discovery)')
|
|
96
85
|
.action(async (options) => {
|
|
97
86
|
await publishCommand(options);
|
|
98
87
|
});
|
|
99
|
-
program
|
|
100
|
-
.command('preflight [target]')
|
|
101
|
-
.description('Verify a snapshot installs for an anonymous end-user (401/404/range) + semver/dist-tag policy, before publishing. Target: snapshot.json path or @scope/name (default ./snapshot.json)')
|
|
102
|
-
.option('--no-transitive', 'Check only directly-declared pins (skip transitive-closure discovery)')
|
|
103
|
-
.option('--tag <tag>', 'dist-tag this publish targets (default: latest)')
|
|
104
|
-
.option('--json', 'Emit the structured preflight report as JSON')
|
|
105
|
-
.option('-v, --verbose', 'Show detailed progress')
|
|
106
|
-
.action(async (target, options) => {
|
|
107
|
-
await preflightCommand(target, options);
|
|
108
|
-
});
|
|
109
88
|
// Access management commands
|
|
110
89
|
const accessCmd = program
|
|
111
90
|
.command('access')
|
|
@@ -147,6 +126,20 @@ licenseCmd
|
|
|
147
126
|
.action(async () => {
|
|
148
127
|
await licenseRefreshCommand();
|
|
149
128
|
});
|
|
129
|
+
program
|
|
130
|
+
.command('doctor')
|
|
131
|
+
.description('Check if all prerequisites are satisfied')
|
|
132
|
+
.action(async () => {
|
|
133
|
+
await doctorCommand();
|
|
134
|
+
});
|
|
135
|
+
program
|
|
136
|
+
.command('setup')
|
|
137
|
+
.description('Install missing prerequisites')
|
|
138
|
+
.option('--auto', 'Non-interactive mode (for CI)')
|
|
139
|
+
.option('-d, --dry-run', 'Show what would be installed without installing')
|
|
140
|
+
.action(async (options) => {
|
|
141
|
+
await setupCommand(options);
|
|
142
|
+
});
|
|
150
143
|
// Show help if no command
|
|
151
144
|
if (process.argv.length === 2) {
|
|
152
145
|
console.log(chalk.blue.bold(`
|
|
@@ -160,7 +153,8 @@ if (process.argv.length === 2) {
|
|
|
160
153
|
console.log(chalk.cyan(' snapshot install @scope/name') + chalk.gray(' # Install a snapshot'));
|
|
161
154
|
console.log(chalk.cyan(' snapshot current') + chalk.gray(' # Show installed snapshot'));
|
|
162
155
|
console.log('');
|
|
163
|
-
console.log(chalk.gray('First time?
|
|
156
|
+
console.log(chalk.gray('First time? Log in or activate a license:'));
|
|
157
|
+
console.log(chalk.cyan(' npm i -g @microwiseai/cli-auth && ist auth login'));
|
|
164
158
|
console.log(chalk.cyan(' snapshot license activate <KEY>'));
|
|
165
159
|
console.log('');
|
|
166
160
|
program.help();
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/config.js
CHANGED
|
@@ -43,7 +43,7 @@ export function getGitlabToken() {
|
|
|
43
43
|
if (process.env.GITLAB_TOKEN) {
|
|
44
44
|
return process.env.GITLAB_TOKEN;
|
|
45
45
|
}
|
|
46
|
-
// 2. glpkg token — SINGLE SOURCE OF TRUTH (
|
|
46
|
+
// 2. glpkg token — SINGLE SOURCE OF TRUTH (infra2-kit migration).
|
|
47
47
|
// Legacy gitlab-config is RETIRED: no fallback. Absence => null =>
|
|
48
48
|
// caller fails loud (buildAuthHeaders), surfacing the real problem
|
|
49
49
|
// instead of silently using a stale/revoked gitlab-config token.
|
package/dist/lib/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAC7B,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAGxE,+DAA+D;AAC/D,+BAA+B;AAC/B,+DAA+D;AAE/D,8CAA8C;AAC9C,MAAM,CAAC,MAAM,kBAAkB,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,gDAAgD,CAAC;AAErH,kBAAkB;AAClB,MAAM,CAAC,MAAM,eAAe,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,iDAAiD,CAAC;AAEhH,yCAAyC;AACzC,MAAM,CAAC,MAAM,eAAe,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,WAAW,CAAC;AAE1E,kFAAkF;AAClF,+DAA+D;AAE/D,iDAAiD;AACjD,MAAM,CAAC,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,UAAU,CAAC;AAC1E,MAAM,CAAC,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,0CAA0C,CAAC;AACtG,MAAM,CAAC,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,qBAAqB,IAAI,uBAAuB,CAAC;AAWzF;;GAEG;AACH,MAAM,UAAU,iBAAiB;IAC/B,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,kBAAkB,CAAC,CAAC;QAC7D,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;YAAE,OAAO,IAAI,CAAC;QACvC,MAAM,OAAO,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAChD,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAmB,CAAC;IAC/C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAGD,MAAM,UAAU,SAAS;IACvB,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,cAAc,CAAC,CAAC;IAE7D,OAAO;QACL,SAAS;QACT,WAAW,EAAE,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC;KAC7C,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,cAAc;IAC5B,2DAA2D;IAC3D,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;QAC7B,OAAO,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;IAClC,CAAC;IAED,
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AC1.4 — core-floor assertion (beta-pipeline-robustness §4 S1, R-A).
|
|
3
|
+
*
|
|
4
|
+
* A single global npm tree can carry MULTIPLE copies of `@ist/adapters-core`
|
|
5
|
+
* (top-level + nested under other packages). The adapter registry only behaves
|
|
6
|
+
* as one singleton (S2) when every copy is at or above the floor version; an old
|
|
7
|
+
* nested copy (< floor) re-fragments the registry and re-breaks codex/adapters.
|
|
8
|
+
*
|
|
9
|
+
* This scans the raw `npm ls -g --json` dependency tree — INCLUDING nested
|
|
10
|
+
* `.dependencies` — for every copy of `pkg` whose version is below `minVersion`,
|
|
11
|
+
* and returns them as `offenders` (with the tree path to each). Pure & side-
|
|
12
|
+
* effect free; the ledger integrator wires it into install.ts for fail-loud /
|
|
13
|
+
* warning at P4.
|
|
14
|
+
*/
|
|
15
|
+
/** Default package that must meet a version floor across the whole tree. */
|
|
16
|
+
export declare const DEFAULT_CORE_FLOOR_PKG = "@ist/adapters-core";
|
|
17
|
+
/** Default floor version (inclusive): copies strictly below this are offenders. */
|
|
18
|
+
export declare const DEFAULT_CORE_FLOOR_MIN_VERSION = "0.4.2";
|
|
19
|
+
export interface CoreFloorOffender {
|
|
20
|
+
/** Tree path to the offending copy, e.g. "(root) > @ist/smon-cli > @ist/adapters-core". */
|
|
21
|
+
path: string;
|
|
22
|
+
/** The offending (below-floor) version found at that path. */
|
|
23
|
+
version: string;
|
|
24
|
+
}
|
|
25
|
+
export interface CoreFloorResult {
|
|
26
|
+
/** True iff no copy of `pkg` is below `minVersion` (or `pkg` is absent). */
|
|
27
|
+
ok: boolean;
|
|
28
|
+
/** Every below-floor copy found, in traversal order. */
|
|
29
|
+
offenders: CoreFloorOffender[];
|
|
30
|
+
}
|
|
31
|
+
export interface CoreFloorOptions {
|
|
32
|
+
/** Package whose every copy must meet the floor. Defaults to @ist/adapters-core. */
|
|
33
|
+
pkg?: string;
|
|
34
|
+
/** Inclusive floor: copies strictly below this version are offenders. Defaults to 0.4.2. */
|
|
35
|
+
minVersion?: string;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Assert that no copy of `pkg` in the raw npm-ls tree sits below `minVersion`.
|
|
39
|
+
*
|
|
40
|
+
* @param dependencyTreeRaw parsed `npm ls -g --json` output (any shape tolerated)
|
|
41
|
+
* @param options.pkg target package (default @ist/adapters-core)
|
|
42
|
+
* @param options.minVersion floor version (default 0.4.2)
|
|
43
|
+
* @returns {ok, offenders[]}. `pkg` absent → ok:true, offenders:[]. Copies whose
|
|
44
|
+
* version is not an exact semver are skipped (can't be compared).
|
|
45
|
+
*/
|
|
46
|
+
export declare function coreFloorAssert(dependencyTreeRaw: unknown, options?: CoreFloorOptions): CoreFloorResult;
|
|
47
|
+
/** Format offenders into a fail-loud, multi-line report (for the integrator). */
|
|
48
|
+
export declare function formatCoreFloorOffenders(offenders: CoreFloorOffender[], pkg?: string, minVersion?: string): string;
|
|
49
|
+
//# sourceMappingURL=core-floor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"core-floor.d.ts","sourceRoot":"","sources":["../../src/lib/core-floor.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;GAaG;AAEH,4EAA4E;AAC5E,eAAO,MAAM,sBAAsB,uBAAuB,CAAC;AAC3D,mFAAmF;AACnF,eAAO,MAAM,8BAA8B,UAAU,CAAC;AAEtD,MAAM,WAAW,iBAAiB;IAChC,2FAA2F;IAC3F,IAAI,EAAE,MAAM,CAAC;IACb,8DAA8D;IAC9D,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,eAAe;IAC9B,4EAA4E;IAC5E,EAAE,EAAE,OAAO,CAAC;IACZ,wDAAwD;IACxD,SAAS,EAAE,iBAAiB,EAAE,CAAC;CAChC;AAED,MAAM,WAAW,gBAAgB;IAC/B,oFAAoF;IACpF,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,4FAA4F;IAC5F,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AASD;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAC7B,iBAAiB,EAAE,OAAO,EAC1B,OAAO,GAAE,gBAAqB,GAC7B,eAAe,CA4CjB;AAED,iFAAiF;AACjF,wBAAgB,wBAAwB,CACtC,SAAS,EAAE,iBAAiB,EAAE,EAC9B,GAAG,GAAE,MAA+B,EACpC,UAAU,GAAE,MAAuC,GAClD,MAAM,CASR"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { isExactSemver, ltSemver } from './version-validator.js';
|
|
2
|
+
/**
|
|
3
|
+
* AC1.4 — core-floor assertion (beta-pipeline-robustness §4 S1, R-A).
|
|
4
|
+
*
|
|
5
|
+
* A single global npm tree can carry MULTIPLE copies of `@ist/adapters-core`
|
|
6
|
+
* (top-level + nested under other packages). The adapter registry only behaves
|
|
7
|
+
* as one singleton (S2) when every copy is at or above the floor version; an old
|
|
8
|
+
* nested copy (< floor) re-fragments the registry and re-breaks codex/adapters.
|
|
9
|
+
*
|
|
10
|
+
* This scans the raw `npm ls -g --json` dependency tree — INCLUDING nested
|
|
11
|
+
* `.dependencies` — for every copy of `pkg` whose version is below `minVersion`,
|
|
12
|
+
* and returns them as `offenders` (with the tree path to each). Pure & side-
|
|
13
|
+
* effect free; the ledger integrator wires it into install.ts for fail-loud /
|
|
14
|
+
* warning at P4.
|
|
15
|
+
*/
|
|
16
|
+
/** Default package that must meet a version floor across the whole tree. */
|
|
17
|
+
export const DEFAULT_CORE_FLOOR_PKG = '@ist/adapters-core';
|
|
18
|
+
/** Default floor version (inclusive): copies strictly below this are offenders. */
|
|
19
|
+
export const DEFAULT_CORE_FLOOR_MIN_VERSION = '0.4.2';
|
|
20
|
+
/**
|
|
21
|
+
* Assert that no copy of `pkg` in the raw npm-ls tree sits below `minVersion`.
|
|
22
|
+
*
|
|
23
|
+
* @param dependencyTreeRaw parsed `npm ls -g --json` output (any shape tolerated)
|
|
24
|
+
* @param options.pkg target package (default @ist/adapters-core)
|
|
25
|
+
* @param options.minVersion floor version (default 0.4.2)
|
|
26
|
+
* @returns {ok, offenders[]}. `pkg` absent → ok:true, offenders:[]. Copies whose
|
|
27
|
+
* version is not an exact semver are skipped (can't be compared).
|
|
28
|
+
*/
|
|
29
|
+
export function coreFloorAssert(dependencyTreeRaw, options = {}) {
|
|
30
|
+
const pkg = options.pkg ?? DEFAULT_CORE_FLOOR_PKG;
|
|
31
|
+
const minVersion = options.minVersion ?? DEFAULT_CORE_FLOOR_MIN_VERSION;
|
|
32
|
+
const offenders = [];
|
|
33
|
+
if (!dependencyTreeRaw || typeof dependencyTreeRaw !== 'object') {
|
|
34
|
+
return { ok: true, offenders };
|
|
35
|
+
}
|
|
36
|
+
const root = dependencyTreeRaw;
|
|
37
|
+
const rootName = typeof root.name === 'string' ? root.name : '(root)';
|
|
38
|
+
const visit = (name, node, pathSoFar) => {
|
|
39
|
+
const here = [...pathSoFar, name];
|
|
40
|
+
if (name === pkg && isExactSemver(node.version)) {
|
|
41
|
+
const version = node.version;
|
|
42
|
+
if (ltSemver(version, minVersion)) {
|
|
43
|
+
offenders.push({ path: here.join(' > '), version });
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
const deps = node.dependencies;
|
|
47
|
+
if (deps && typeof deps === 'object') {
|
|
48
|
+
for (const [childName, childNode] of Object.entries(deps)) {
|
|
49
|
+
if (childNode && typeof childNode === 'object') {
|
|
50
|
+
visit(childName, childNode, here);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
};
|
|
55
|
+
// The root object holds the tree under `.dependencies`; start traversal there
|
|
56
|
+
// (the root node itself is the global prefix, never `pkg`).
|
|
57
|
+
const rootDeps = root.dependencies;
|
|
58
|
+
if (rootDeps && typeof rootDeps === 'object') {
|
|
59
|
+
for (const [childName, childNode] of Object.entries(rootDeps)) {
|
|
60
|
+
if (childNode && typeof childNode === 'object') {
|
|
61
|
+
visit(childName, childNode, [rootName]);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
return { ok: offenders.length === 0, offenders };
|
|
66
|
+
}
|
|
67
|
+
/** Format offenders into a fail-loud, multi-line report (for the integrator). */
|
|
68
|
+
export function formatCoreFloorOffenders(offenders, pkg = DEFAULT_CORE_FLOOR_PKG, minVersion = DEFAULT_CORE_FLOOR_MIN_VERSION) {
|
|
69
|
+
const lines = [
|
|
70
|
+
`core-floor check failed: ${offenders.length} copy/copies of ${pkg} are below the ${minVersion} floor.`,
|
|
71
|
+
`Old nested copies re-fragment the adapter registry (S2) — the tree must converge to >= ${minVersion}.`,
|
|
72
|
+
];
|
|
73
|
+
for (const o of offenders) {
|
|
74
|
+
lines.push(` ✗ ${o.version} at ${o.path}`);
|
|
75
|
+
}
|
|
76
|
+
return lines.join('\n');
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=core-floor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"core-floor.js","sourceRoot":"","sources":["../../src/lib/core-floor.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/gitlab.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gitlab.d.ts","sourceRoot":"","sources":["../../src/lib/gitlab.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAK3C;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CAWlF;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAG9D;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAcjE;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAO/D;
|
|
1
|
+
{"version":3,"file":"gitlab.d.ts","sourceRoot":"","sources":["../../src/lib/gitlab.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAK3C;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CAWlF;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAG9D;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAcjE;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAO/D;AA+GD;;;;;;;;GAQG;AACH,wBAAsB,qBAAqB,CAAC,YAAY,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,QAAQ,CAAC,CAE9G;AAED;;;;;;;GAOG;AACH,wBAAsB,oBAAoB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC,CAuCvH;AAED;;GAEG;AACH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC,CAMxF"}
|
package/dist/lib/gitlab.js
CHANGED
|
@@ -129,18 +129,19 @@ async function fetchSnapshotFromProxy(snapshotSpec, authToken) {
|
|
|
129
129
|
if (!response.ok) {
|
|
130
130
|
if (response.status === 401) {
|
|
131
131
|
if (resolvedToken) {
|
|
132
|
-
throw new Error('
|
|
132
|
+
throw new Error('Session expired or invalid. Please re-authenticate:\n' +
|
|
133
|
+
' Login: npm i -g @microwiseai/cli-auth && ist auth login\n' +
|
|
133
134
|
' Refresh: snapshot license refresh');
|
|
134
135
|
}
|
|
135
136
|
else {
|
|
136
|
-
throw new Error('
|
|
137
|
-
'
|
|
137
|
+
throw new Error('Authentication required. Please log in or activate a license:\n' +
|
|
138
|
+
' Login: npm i -g @microwiseai/cli-auth && ist auth login\n' +
|
|
138
139
|
' License: snapshot license activate <KEY>');
|
|
139
140
|
}
|
|
140
141
|
}
|
|
141
142
|
if (response.status === 403) {
|
|
142
|
-
throw new Error('Access denied
|
|
143
|
-
'
|
|
143
|
+
throw new Error('Access denied. Please check your authentication:\n' +
|
|
144
|
+
' Login: npm i -g @microwiseai/cli-auth && ist auth login\n' +
|
|
144
145
|
' License: snapshot license status');
|
|
145
146
|
}
|
|
146
147
|
if (response.status === 404) {
|
|
@@ -175,7 +176,8 @@ export async function fetchSnapshotFromRepo(snapshotSpec, authToken) {
|
|
|
175
176
|
export async function listSnapshotPackages(authToken) {
|
|
176
177
|
const resolvedToken = authToken || getLicenseKey() || getProxyAuthToken();
|
|
177
178
|
if (!resolvedToken) {
|
|
178
|
-
throw new Error('
|
|
179
|
+
throw new Error('Authentication required. Please log in or activate a license:\n' +
|
|
180
|
+
' Login: npm i -g @microwiseai/cli-auth && ist auth login\n' +
|
|
179
181
|
' License: snapshot license activate <KEY>');
|
|
180
182
|
}
|
|
181
183
|
// Try registry-proxy list endpoint (if available)
|
package/dist/lib/gitlab.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gitlab.js","sourceRoot":"","sources":["../../src/lib/gitlab.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"gitlab.js","sourceRoot":"","sources":["../../src/lib/gitlab.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* S1 — Post-install verification & convergence (SSOT enforcement).
|
|
3
|
+
*
|
|
4
|
+
* The manifest (snapshot.json) is the single source of truth: it pins every npm
|
|
5
|
+
* package to one exact version. But `npm install -g` is non-deterministic — a
|
|
6
|
+
* later batch/step can silently re-dedupe an earlier explicit pin to a different
|
|
7
|
+
* version on disk (see architecture/beta-pipeline-robustness-2026-08-30 §1 E2/E4).
|
|
8
|
+
*
|
|
9
|
+
* This module answers ONE question fail-loud: after install finishes, does the
|
|
10
|
+
* disk actually match the manifest pins? If not, we report `expected X, got Y`
|
|
11
|
+
* and the caller exits non-zero (no more "green on broken").
|
|
12
|
+
*/
|
|
13
|
+
export interface VersionMismatch {
|
|
14
|
+
/** Package name, e.g. "@ist/sesh". */
|
|
15
|
+
name: string;
|
|
16
|
+
/** The exact version the manifest pinned. */
|
|
17
|
+
expected: string;
|
|
18
|
+
/** The actual version found on disk, or null if the package is missing. */
|
|
19
|
+
got: string | null;
|
|
20
|
+
}
|
|
21
|
+
export interface VerificationResult {
|
|
22
|
+
/** True iff every package in the map matches its pin on disk. */
|
|
23
|
+
ok: boolean;
|
|
24
|
+
/** Every package whose disk version != pin (or is missing). */
|
|
25
|
+
mismatches: VersionMismatch[];
|
|
26
|
+
/** Count of packages whose disk version == pin. */
|
|
27
|
+
verifiedCount: number;
|
|
28
|
+
/** Total packages checked. */
|
|
29
|
+
total: number;
|
|
30
|
+
}
|
|
31
|
+
/** A function that returns the on-disk version of a global npm package, or null. */
|
|
32
|
+
export type VersionReader = (name: string) => string | null;
|
|
33
|
+
/** Test seam: reset the cached global npm root (used by unit tests). */
|
|
34
|
+
export declare function _resetGlobalRootCache(): void;
|
|
35
|
+
/**
|
|
36
|
+
* Read the ACTUAL on-disk version of a globally-installed npm package by reading
|
|
37
|
+
* its installed package.json directly from the global root. This reflects what
|
|
38
|
+
* `require()`/the runtime will actually load — unlike `npm ls` which reports the
|
|
39
|
+
* resolution tree. One `npm root -g` call is amortized across all packages
|
|
40
|
+
* (cached), so this is O(1) process spawns regardless of package count.
|
|
41
|
+
*
|
|
42
|
+
* Returns the version string, or null if the package is not installed on disk.
|
|
43
|
+
*/
|
|
44
|
+
export declare function readInstalledNpmVersion(name: string): string | null;
|
|
45
|
+
/**
|
|
46
|
+
* Verify that every package in `installMap` (name → exact pin) is present on
|
|
47
|
+
* disk at exactly that version.
|
|
48
|
+
*
|
|
49
|
+
* Pure & side-effect free (aside from the injected reader): pass a custom
|
|
50
|
+
* `readVersion` for unit tests; defaults to reading the real global npm tree.
|
|
51
|
+
*/
|
|
52
|
+
export declare function verifyInstallMap(installMap: Record<string, string>, opts?: {
|
|
53
|
+
readVersion?: VersionReader;
|
|
54
|
+
}): VerificationResult;
|
|
55
|
+
/**
|
|
56
|
+
* S1 — convergence. Dependency-injected & pure (no console, no direct npm) so it
|
|
57
|
+
* is fully unit-testable and the integrator (install.ts) owns logging/exit.
|
|
58
|
+
*
|
|
59
|
+
* Given the manifest npm install-map and any FB pin overrides:
|
|
60
|
+
* 1. compute the effective map (pins with overrides applied),
|
|
61
|
+
* 2. verify it against the disk,
|
|
62
|
+
* 3. while unverified and within `maxRounds`, call `install(name, expected)`
|
|
63
|
+
* for each mismatched package (exact, isolated re-pin) then re-verify.
|
|
64
|
+
*
|
|
65
|
+
* Returns the FINAL VerificationResult (ok=true iff the disk converged). The
|
|
66
|
+
* integrator decides how to react (exit non-zero, log, fold into the ledger).
|
|
67
|
+
*
|
|
68
|
+
* @param installMap manifest npm pins (name → exact version)
|
|
69
|
+
* @param overrides FB pin overrides (name → version); {} for none
|
|
70
|
+
* @param deps.install re-pin one package to an exact version (side-effecting)
|
|
71
|
+
* @param deps.readVersion disk reader (defaults to readInstalledNpmVersion)
|
|
72
|
+
* @param deps.maxRounds max convergence rounds (default 3)
|
|
73
|
+
*/
|
|
74
|
+
export declare function runConverge(installMap: Record<string, string>, overrides: Record<string, string>, deps: {
|
|
75
|
+
install: (name: string, version: string) => void;
|
|
76
|
+
readVersion?: VersionReader;
|
|
77
|
+
maxRounds?: number;
|
|
78
|
+
}): VerificationResult;
|
|
79
|
+
/**
|
|
80
|
+
* Minimal read-only view of the install ledger. The ledger SCHEMA is owned by
|
|
81
|
+
* lib/ledger.ts (S3); this is a structural subset used only to read `expected`
|
|
82
|
+
* pins for offline verification (e.g. `snapshot doctor`) without importing the
|
|
83
|
+
* ledger module — so verify stays dependency-light and merge-clean.
|
|
84
|
+
*/
|
|
85
|
+
export interface LedgerLike {
|
|
86
|
+
packages?: Array<{
|
|
87
|
+
name?: unknown;
|
|
88
|
+
expected?: unknown;
|
|
89
|
+
}>;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Extract a `name → expected pin` map from a parsed ledger, defensively (unknown
|
|
93
|
+
* shapes / missing fields are skipped rather than throwing). Returns {} when the
|
|
94
|
+
* ledger has no usable expected pins.
|
|
95
|
+
*/
|
|
96
|
+
export declare function expectedMapFromLedger(ledger: LedgerLike | null | undefined): Record<string, string>;
|
|
97
|
+
/**
|
|
98
|
+
* Format mismatches into a fail-loud, multi-line `expected X, got Y` report.
|
|
99
|
+
*/
|
|
100
|
+
export declare function formatVerificationFailure(mismatches: VersionMismatch[]): string;
|
|
101
|
+
//# sourceMappingURL=install-verify.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"install-verify.d.ts","sourceRoot":"","sources":["../../src/lib/install-verify.ts"],"names":[],"mappings":"AAKA;;;;;;;;;;;GAWG;AAEH,MAAM,WAAW,eAAe;IAC9B,sCAAsC;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,6CAA6C;IAC7C,QAAQ,EAAE,MAAM,CAAC;IACjB,2EAA2E;IAC3E,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;CACpB;AAED,MAAM,WAAW,kBAAkB;IACjC,iEAAiE;IACjE,EAAE,EAAE,OAAO,CAAC;IACZ,+DAA+D;IAC/D,UAAU,EAAE,eAAe,EAAE,CAAC;IAC9B,mDAAmD;IACnD,aAAa,EAAE,MAAM,CAAC;IACtB,8BAA8B;IAC9B,KAAK,EAAE,MAAM,CAAC;CACf;AAED,oFAAoF;AACpF,MAAM,MAAM,aAAa,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;AAmB5D,wEAAwE;AACxE,wBAAgB,qBAAqB,IAAI,IAAI,CAE5C;AAED;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAYnE;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAClC,IAAI,GAAE;IAAE,WAAW,CAAC,EAAE,aAAa,CAAA;CAAO,GACzC,kBAAkB,CAsBpB;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,WAAW,CACzB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAClC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACjC,IAAI,EAAE;IACJ,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACjD,WAAW,CAAC,EAAE,aAAa,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GACA,kBAAkB,CAapB;AAED;;;;;GAKG;AACH,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,CAAC,EAAE,OAAO,CAAC;QAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;CAC1D;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAUnG;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,UAAU,EAAE,eAAe,EAAE,GAAG,MAAM,CAU/E"}
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
import { execSync } from 'child_process';
|
|
2
|
+
import { existsSync, readFileSync } from 'fs';
|
|
3
|
+
import { join } from 'path';
|
|
4
|
+
import { applyPinOverrides } from './pin-override.js';
|
|
5
|
+
let cachedGlobalRoot;
|
|
6
|
+
/**
|
|
7
|
+
* Resolve the global npm `node_modules` root once (`npm root -g`) and cache it.
|
|
8
|
+
* Returns null if npm is unavailable.
|
|
9
|
+
*/
|
|
10
|
+
function getGlobalNpmRoot() {
|
|
11
|
+
if (cachedGlobalRoot !== undefined)
|
|
12
|
+
return cachedGlobalRoot;
|
|
13
|
+
try {
|
|
14
|
+
const root = execSync('npm root -g', { encoding: 'utf-8', stdio: ['ignore', 'pipe', 'ignore'] }).trim();
|
|
15
|
+
cachedGlobalRoot = root || null;
|
|
16
|
+
}
|
|
17
|
+
catch {
|
|
18
|
+
cachedGlobalRoot = null;
|
|
19
|
+
}
|
|
20
|
+
return cachedGlobalRoot;
|
|
21
|
+
}
|
|
22
|
+
/** Test seam: reset the cached global npm root (used by unit tests). */
|
|
23
|
+
export function _resetGlobalRootCache() {
|
|
24
|
+
cachedGlobalRoot = undefined;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Read the ACTUAL on-disk version of a globally-installed npm package by reading
|
|
28
|
+
* its installed package.json directly from the global root. This reflects what
|
|
29
|
+
* `require()`/the runtime will actually load — unlike `npm ls` which reports the
|
|
30
|
+
* resolution tree. One `npm root -g` call is amortized across all packages
|
|
31
|
+
* (cached), so this is O(1) process spawns regardless of package count.
|
|
32
|
+
*
|
|
33
|
+
* Returns the version string, or null if the package is not installed on disk.
|
|
34
|
+
*/
|
|
35
|
+
export function readInstalledNpmVersion(name) {
|
|
36
|
+
const root = getGlobalNpmRoot();
|
|
37
|
+
if (!root)
|
|
38
|
+
return null;
|
|
39
|
+
// Scoped names ("@ist/sesh") join correctly into "<root>/@ist/sesh".
|
|
40
|
+
const pkgJsonPath = join(root, name, 'package.json');
|
|
41
|
+
if (!existsSync(pkgJsonPath))
|
|
42
|
+
return null;
|
|
43
|
+
try {
|
|
44
|
+
const pkg = JSON.parse(readFileSync(pkgJsonPath, 'utf-8'));
|
|
45
|
+
return typeof pkg.version === 'string' ? pkg.version : null;
|
|
46
|
+
}
|
|
47
|
+
catch {
|
|
48
|
+
return null;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Verify that every package in `installMap` (name → exact pin) is present on
|
|
53
|
+
* disk at exactly that version.
|
|
54
|
+
*
|
|
55
|
+
* Pure & side-effect free (aside from the injected reader): pass a custom
|
|
56
|
+
* `readVersion` for unit tests; defaults to reading the real global npm tree.
|
|
57
|
+
*/
|
|
58
|
+
export function verifyInstallMap(installMap, opts = {}) {
|
|
59
|
+
const readVersion = opts.readVersion ?? readInstalledNpmVersion;
|
|
60
|
+
const mismatches = [];
|
|
61
|
+
let verifiedCount = 0;
|
|
62
|
+
const names = Object.keys(installMap).sort((a, b) => a.localeCompare(b));
|
|
63
|
+
for (const name of names) {
|
|
64
|
+
const expected = installMap[name];
|
|
65
|
+
const got = readVersion(name);
|
|
66
|
+
if (got === expected) {
|
|
67
|
+
verifiedCount++;
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
mismatches.push({ name, expected, got });
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
return {
|
|
74
|
+
ok: mismatches.length === 0,
|
|
75
|
+
mismatches,
|
|
76
|
+
verifiedCount,
|
|
77
|
+
total: names.length,
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* S1 — convergence. Dependency-injected & pure (no console, no direct npm) so it
|
|
82
|
+
* is fully unit-testable and the integrator (install.ts) owns logging/exit.
|
|
83
|
+
*
|
|
84
|
+
* Given the manifest npm install-map and any FB pin overrides:
|
|
85
|
+
* 1. compute the effective map (pins with overrides applied),
|
|
86
|
+
* 2. verify it against the disk,
|
|
87
|
+
* 3. while unverified and within `maxRounds`, call `install(name, expected)`
|
|
88
|
+
* for each mismatched package (exact, isolated re-pin) then re-verify.
|
|
89
|
+
*
|
|
90
|
+
* Returns the FINAL VerificationResult (ok=true iff the disk converged). The
|
|
91
|
+
* integrator decides how to react (exit non-zero, log, fold into the ledger).
|
|
92
|
+
*
|
|
93
|
+
* @param installMap manifest npm pins (name → exact version)
|
|
94
|
+
* @param overrides FB pin overrides (name → version); {} for none
|
|
95
|
+
* @param deps.install re-pin one package to an exact version (side-effecting)
|
|
96
|
+
* @param deps.readVersion disk reader (defaults to readInstalledNpmVersion)
|
|
97
|
+
* @param deps.maxRounds max convergence rounds (default 3)
|
|
98
|
+
*/
|
|
99
|
+
export function runConverge(installMap, overrides, deps) {
|
|
100
|
+
const effectiveMap = applyPinOverrides(installMap, overrides);
|
|
101
|
+
const readVersion = deps.readVersion ?? readInstalledNpmVersion;
|
|
102
|
+
const maxRounds = deps.maxRounds ?? 3;
|
|
103
|
+
let verification = verifyInstallMap(effectiveMap, { readVersion });
|
|
104
|
+
for (let round = 1; round <= maxRounds && !verification.ok; round++) {
|
|
105
|
+
for (const m of verification.mismatches) {
|
|
106
|
+
deps.install(m.name, m.expected);
|
|
107
|
+
}
|
|
108
|
+
verification = verifyInstallMap(effectiveMap, { readVersion });
|
|
109
|
+
}
|
|
110
|
+
return verification;
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Extract a `name → expected pin` map from a parsed ledger, defensively (unknown
|
|
114
|
+
* shapes / missing fields are skipped rather than throwing). Returns {} when the
|
|
115
|
+
* ledger has no usable expected pins.
|
|
116
|
+
*/
|
|
117
|
+
export function expectedMapFromLedger(ledger) {
|
|
118
|
+
const map = {};
|
|
119
|
+
const pkgs = ledger?.packages;
|
|
120
|
+
if (!Array.isArray(pkgs))
|
|
121
|
+
return map;
|
|
122
|
+
for (const p of pkgs) {
|
|
123
|
+
if (p && typeof p.name === 'string' && typeof p.expected === 'string') {
|
|
124
|
+
map[p.name] = p.expected;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
return map;
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Format mismatches into a fail-loud, multi-line `expected X, got Y` report.
|
|
131
|
+
*/
|
|
132
|
+
export function formatVerificationFailure(mismatches) {
|
|
133
|
+
const lines = [
|
|
134
|
+
`Install verification failed: ${mismatches.length} package(s) do not match the manifest pin.`,
|
|
135
|
+
`The disk state diverged from the snapshot (SSOT). Re-run with --converge to auto-repair.`,
|
|
136
|
+
];
|
|
137
|
+
for (const m of mismatches) {
|
|
138
|
+
const got = m.got === null ? '(not installed)' : m.got;
|
|
139
|
+
lines.push(` ✗ ${m.name}: expected ${m.expected}, got ${got}`);
|
|
140
|
+
}
|
|
141
|
+
return lines.join('\n');
|
|
142
|
+
}
|
|
143
|
+
//# sourceMappingURL=install-verify.js.map
|