@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.
Files changed (159) hide show
  1. package/dist/commands/current.d.ts +5 -1
  2. package/dist/commands/current.d.ts.map +1 -1
  3. package/dist/commands/current.js +89 -2
  4. package/dist/commands/current.js.map +1 -1
  5. package/dist/commands/doctor.d.ts +2 -0
  6. package/dist/commands/doctor.d.ts.map +1 -0
  7. package/dist/commands/doctor.js +83 -0
  8. package/dist/commands/doctor.js.map +1 -0
  9. package/dist/commands/install.d.ts +41 -0
  10. package/dist/commands/install.d.ts.map +1 -1
  11. package/dist/commands/install.js +396 -216
  12. package/dist/commands/install.js.map +1 -1
  13. package/dist/commands/publish.d.ts +0 -4
  14. package/dist/commands/publish.d.ts.map +1 -1
  15. package/dist/commands/publish.js +44 -58
  16. package/dist/commands/publish.js.map +1 -1
  17. package/dist/commands/setup.d.ts +5 -0
  18. package/dist/commands/setup.d.ts.map +1 -0
  19. package/dist/commands/setup.js +52 -0
  20. package/dist/commands/setup.js.map +1 -0
  21. package/dist/index.js +22 -28
  22. package/dist/index.js.map +1 -1
  23. package/dist/lib/config.js +1 -1
  24. package/dist/lib/config.js.map +1 -1
  25. package/dist/lib/core-floor.d.ts +49 -0
  26. package/dist/lib/core-floor.d.ts.map +1 -0
  27. package/dist/lib/core-floor.js +78 -0
  28. package/dist/lib/core-floor.js.map +1 -0
  29. package/dist/lib/gitlab.d.ts.map +1 -1
  30. package/dist/lib/gitlab.js +8 -6
  31. package/dist/lib/gitlab.js.map +1 -1
  32. package/dist/lib/install-verify.d.ts +101 -0
  33. package/dist/lib/install-verify.d.ts.map +1 -0
  34. package/dist/lib/install-verify.js +143 -0
  35. package/dist/lib/install-verify.js.map +1 -0
  36. package/dist/lib/ledger.d.ts +212 -0
  37. package/dist/lib/ledger.d.ts.map +1 -0
  38. package/dist/lib/ledger.js +266 -0
  39. package/dist/lib/ledger.js.map +1 -0
  40. package/dist/lib/pin-override.d.ts +53 -0
  41. package/dist/lib/pin-override.d.ts.map +1 -0
  42. package/dist/lib/pin-override.js +77 -0
  43. package/dist/lib/pin-override.js.map +1 -0
  44. package/dist/lib/prerequisites.d.ts +33 -0
  45. package/dist/lib/prerequisites.d.ts.map +1 -0
  46. package/dist/lib/prerequisites.js +123 -0
  47. package/dist/lib/prerequisites.js.map +1 -0
  48. package/dist/lib/transitive-resolver.d.ts +0 -121
  49. package/dist/lib/transitive-resolver.d.ts.map +1 -1
  50. package/dist/lib/transitive-resolver.js +0 -190
  51. package/dist/lib/transitive-resolver.js.map +1 -1
  52. package/dist/lib/version-validator.d.ts +9 -0
  53. package/dist/lib/version-validator.d.ts.map +1 -1
  54. package/dist/lib/version-validator.js +69 -0
  55. package/dist/lib/version-validator.js.map +1 -1
  56. package/package.json +9 -19
  57. package/dist/commands/clone-all.d.ts +0 -21
  58. package/dist/commands/clone-all.d.ts.map +0 -1
  59. package/dist/commands/clone-all.js +0 -57
  60. package/dist/commands/clone-all.js.map +0 -1
  61. package/dist/commands/preflight.d.ts +0 -31
  62. package/dist/commands/preflight.d.ts.map +0 -1
  63. package/dist/commands/preflight.js +0 -83
  64. package/dist/commands/preflight.js.map +0 -1
  65. package/dist/lib/distkit-closure-bridge.d.ts +0 -102
  66. package/dist/lib/distkit-closure-bridge.d.ts.map +0 -1
  67. package/dist/lib/distkit-closure-bridge.js +0 -177
  68. package/dist/lib/distkit-closure-bridge.js.map +0 -1
  69. package/dist/lib/distkit-closure-parity.d.ts +0 -110
  70. package/dist/lib/distkit-closure-parity.d.ts.map +0 -1
  71. package/dist/lib/distkit-closure-parity.js +0 -134
  72. package/dist/lib/distkit-closure-parity.js.map +0 -1
  73. package/dist/lib/distkit-routing-port.d.ts +0 -37
  74. package/dist/lib/distkit-routing-port.d.ts.map +0 -1
  75. package/dist/lib/distkit-routing-port.js +0 -72
  76. package/dist/lib/distkit-routing-port.js.map +0 -1
  77. package/dist/lib/install-timeline.d.ts +0 -81
  78. package/dist/lib/install-timeline.d.ts.map +0 -1
  79. package/dist/lib/install-timeline.js +0 -243
  80. package/dist/lib/install-timeline.js.map +0 -1
  81. package/dist/lib/preflight-adapter.d.ts +0 -52
  82. package/dist/lib/preflight-adapter.d.ts.map +0 -1
  83. package/dist/lib/preflight-adapter.js +0 -224
  84. package/dist/lib/preflight-adapter.js.map +0 -1
  85. package/node_modules/@gitdot/clone-lib/README.md +0 -117
  86. package/node_modules/@gitdot/clone-lib/dist/bin/gitdot-resolve.d.ts +0 -9
  87. package/node_modules/@gitdot/clone-lib/dist/bin/gitdot-resolve.d.ts.map +0 -1
  88. package/node_modules/@gitdot/clone-lib/dist/bin/gitdot-resolve.js +0 -154
  89. package/node_modules/@gitdot/clone-lib/dist/bin/gitdot-resolve.js.map +0 -1
  90. package/node_modules/@gitdot/clone-lib/dist/clone.d.ts +0 -21
  91. package/node_modules/@gitdot/clone-lib/dist/clone.d.ts.map +0 -1
  92. package/node_modules/@gitdot/clone-lib/dist/clone.js +0 -228
  93. package/node_modules/@gitdot/clone-lib/dist/clone.js.map +0 -1
  94. package/node_modules/@gitdot/clone-lib/dist/dotpath.d.ts +0 -10
  95. package/node_modules/@gitdot/clone-lib/dist/dotpath.d.ts.map +0 -1
  96. package/node_modules/@gitdot/clone-lib/dist/dotpath.js +0 -27
  97. package/node_modules/@gitdot/clone-lib/dist/dotpath.js.map +0 -1
  98. package/node_modules/@gitdot/clone-lib/dist/git.d.ts +0 -23
  99. package/node_modules/@gitdot/clone-lib/dist/git.d.ts.map +0 -1
  100. package/node_modules/@gitdot/clone-lib/dist/git.js +0 -134
  101. package/node_modules/@gitdot/clone-lib/dist/git.js.map +0 -1
  102. package/node_modules/@gitdot/clone-lib/dist/index.d.ts +0 -17
  103. package/node_modules/@gitdot/clone-lib/dist/index.d.ts.map +0 -1
  104. package/node_modules/@gitdot/clone-lib/dist/index.js +0 -35
  105. package/node_modules/@gitdot/clone-lib/dist/index.js.map +0 -1
  106. package/node_modules/@gitdot/clone-lib/dist/lock.d.ts +0 -24
  107. package/node_modules/@gitdot/clone-lib/dist/lock.d.ts.map +0 -1
  108. package/node_modules/@gitdot/clone-lib/dist/lock.js +0 -97
  109. package/node_modules/@gitdot/clone-lib/dist/lock.js.map +0 -1
  110. package/node_modules/@gitdot/clone-lib/dist/resolve/gitlab.d.ts +0 -15
  111. package/node_modules/@gitdot/clone-lib/dist/resolve/gitlab.d.ts.map +0 -1
  112. package/node_modules/@gitdot/clone-lib/dist/resolve/gitlab.js +0 -124
  113. package/node_modules/@gitdot/clone-lib/dist/resolve/gitlab.js.map +0 -1
  114. package/node_modules/@gitdot/clone-lib/dist/resolve/index.d.ts +0 -12
  115. package/node_modules/@gitdot/clone-lib/dist/resolve/index.d.ts.map +0 -1
  116. package/node_modules/@gitdot/clone-lib/dist/resolve/index.js +0 -31
  117. package/node_modules/@gitdot/clone-lib/dist/resolve/index.js.map +0 -1
  118. package/node_modules/@gitdot/clone-lib/dist/resolve/manifest.d.ts +0 -32
  119. package/node_modules/@gitdot/clone-lib/dist/resolve/manifest.d.ts.map +0 -1
  120. package/node_modules/@gitdot/clone-lib/dist/resolve/manifest.js +0 -159
  121. package/node_modules/@gitdot/clone-lib/dist/resolve/manifest.js.map +0 -1
  122. package/node_modules/@gitdot/clone-lib/dist/resolve/member.d.ts +0 -44
  123. package/node_modules/@gitdot/clone-lib/dist/resolve/member.d.ts.map +0 -1
  124. package/node_modules/@gitdot/clone-lib/dist/resolve/member.js +0 -163
  125. package/node_modules/@gitdot/clone-lib/dist/resolve/member.js.map +0 -1
  126. package/node_modules/@gitdot/clone-lib/dist/resolve/resolve.d.ts +0 -18
  127. package/node_modules/@gitdot/clone-lib/dist/resolve/resolve.d.ts.map +0 -1
  128. package/node_modules/@gitdot/clone-lib/dist/resolve/resolve.js +0 -155
  129. package/node_modules/@gitdot/clone-lib/dist/resolve/resolve.js.map +0 -1
  130. package/node_modules/@gitdot/clone-lib/dist/types.d.ts +0 -225
  131. package/node_modules/@gitdot/clone-lib/dist/types.d.ts.map +0 -1
  132. package/node_modules/@gitdot/clone-lib/dist/types.js +0 -9
  133. package/node_modules/@gitdot/clone-lib/dist/types.js.map +0 -1
  134. package/node_modules/@gitdot/clone-lib/package.json +0 -53
  135. package/node_modules/@microwiseai/install-preflight/dist/index.d.ts +0 -27
  136. package/node_modules/@microwiseai/install-preflight/dist/index.d.ts.map +0 -1
  137. package/node_modules/@microwiseai/install-preflight/dist/index.js +0 -26
  138. package/node_modules/@microwiseai/install-preflight/dist/index.js.map +0 -1
  139. package/node_modules/@microwiseai/install-preflight/dist/policy.d.ts +0 -42
  140. package/node_modules/@microwiseai/install-preflight/dist/policy.d.ts.map +0 -1
  141. package/node_modules/@microwiseai/install-preflight/dist/policy.js +0 -79
  142. package/node_modules/@microwiseai/install-preflight/dist/policy.js.map +0 -1
  143. package/node_modules/@microwiseai/install-preflight/dist/preflight.d.ts +0 -18
  144. package/node_modules/@microwiseai/install-preflight/dist/preflight.d.ts.map +0 -1
  145. package/node_modules/@microwiseai/install-preflight/dist/preflight.js +0 -0
  146. package/node_modules/@microwiseai/install-preflight/dist/preflight.js.map +0 -1
  147. package/node_modules/@microwiseai/install-preflight/dist/resolvers.d.ts +0 -26
  148. package/node_modules/@microwiseai/install-preflight/dist/resolvers.d.ts.map +0 -1
  149. package/node_modules/@microwiseai/install-preflight/dist/resolvers.js +0 -63
  150. package/node_modules/@microwiseai/install-preflight/dist/resolvers.js.map +0 -1
  151. package/node_modules/@microwiseai/install-preflight/dist/semver.d.ts +0 -45
  152. package/node_modules/@microwiseai/install-preflight/dist/semver.d.ts.map +0 -1
  153. package/node_modules/@microwiseai/install-preflight/dist/semver.js +0 -195
  154. package/node_modules/@microwiseai/install-preflight/dist/semver.js.map +0 -1
  155. package/node_modules/@microwiseai/install-preflight/dist/types.d.ts +0 -136
  156. package/node_modules/@microwiseai/install-preflight/dist/types.d.ts.map +0 -1
  157. package/node_modules/@microwiseai/install-preflight/dist/types.js +0 -11
  158. package/node_modules/@microwiseai/install-preflight/dist/types.js.map +0 -1
  159. package/node_modules/@microwiseai/install-preflight/package.json +0 -49
@@ -1,2 +1,6 @@
1
- export declare function currentCommand(): Promise<void>;
1
+ export interface CurrentCommandOptions {
2
+ /** Emit machine-readable JSON (current snapshot + install ledger) instead of the pretty view. */
3
+ json?: boolean;
4
+ }
5
+ export declare function currentCommand(options?: CurrentCommandOptions): Promise<void>;
2
6
  //# sourceMappingURL=current.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"current.d.ts","sourceRoot":"","sources":["../../src/commands/current.ts"],"names":[],"mappings":"AAGA,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAiCpD"}
1
+ {"version":3,"file":"current.d.ts","sourceRoot":"","sources":["../../src/commands/current.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,qBAAqB;IACpC,iGAAiG;IACjG,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAaD,wBAAsB,cAAc,CAAC,OAAO,CAAC,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CA8CnF"}
@@ -1,12 +1,31 @@
1
1
  import chalk from 'chalk';
2
2
  import { getCurrentSnapshot } from '../lib/snapshot.js';
3
- export async function currentCommand() {
3
+ import { readLedger } from '../lib/ledger.js';
4
+ /**
5
+ * Whether the `--json` flag was passed. Read from the options object when the
6
+ * CLI wires it (index.ts), else self-parse process.argv so `snapshot current
7
+ * --json` works standalone (index.ts option definitions are the verify worker's
8
+ * lane; this keeps current.ts self-contained).
9
+ */
10
+ function wantsJson(options) {
11
+ if (options?.json)
12
+ return true;
13
+ return process.argv.includes('--json');
14
+ }
15
+ export async function currentCommand(options) {
16
+ const current = getCurrentSnapshot();
17
+ const ledger = readLedger();
18
+ // ---- Machine-readable output (AC3.1: answer "where did this come from?"
19
+ // purely from the ledger, no reverse engineering) ----
20
+ if (wantsJson(options)) {
21
+ console.log(JSON.stringify({ current, ledger }, null, 2));
22
+ return;
23
+ }
4
24
  console.log(chalk.blue.bold(`
5
25
  ╔══════════════════════════════════════════════════════════════╗
6
26
  ║ Current Snapshot ║
7
27
  ╚══════════════════════════════════════════════════════════════╝
8
28
  `));
9
- const current = getCurrentSnapshot();
10
29
  if (!current) {
11
30
  console.log(chalk.yellow('No snapshot currently installed.'));
12
31
  console.log(chalk.gray('Use: snapshot install <name> to install a snapshot'));
@@ -28,5 +47,73 @@ export async function currentCommand() {
28
47
  console.log(chalk.green(` ✓ ${skit}`));
29
48
  }
30
49
  }
50
+ // ---- Install ledger (S3): package provenance + step order ----
51
+ if (ledger) {
52
+ printLedger(ledger);
53
+ }
54
+ }
55
+ /** Pretty-print the ledger's provenance, install steps, overrides and verdict. */
56
+ function printLedger(ledger) {
57
+ console.log('');
58
+ console.log(chalk.blue.bold('── Install ledger (provenance) ──'));
59
+ console.log(chalk.gray(`Recorded: ${new Date(ledger.recordedAt).toLocaleString()} · cli v${ledger.cliVersion} · registry ${ledger.registry}`));
60
+ if (ledger.packages.length > 0) {
61
+ console.log('');
62
+ console.log(chalk.gray('Package provenance (resolved ← expected):'));
63
+ for (const p of ledger.packages) {
64
+ const resolved = p.resolved ?? chalk.red('(not installed)');
65
+ const diverged = p.expected && p.resolved && p.expected !== p.resolved;
66
+ const head = diverged
67
+ ? chalk.yellow(` ⚠ ${p.name} ${p.resolved} ≠ pin ${p.expected}`)
68
+ : chalk.green(` ✓ ${p.name} ${resolved}`);
69
+ console.log(head);
70
+ console.log(chalk.gray(` ${p.resolutionSource}`));
71
+ if (p.tarballUrl)
72
+ console.log(chalk.gray(` tarball: ${p.tarballUrl}`));
73
+ }
74
+ }
75
+ if (ledger.installSteps.length > 0) {
76
+ console.log('');
77
+ console.log(chalk.gray('Install steps (in order):'));
78
+ for (const s of ledger.installSteps) {
79
+ const mark = s.result === 'ok' ? chalk.green('ok') : s.result === 'fallback' ? chalk.yellow('fallback') : chalk.red('failed');
80
+ console.log(chalk.gray(` ${s.order}. [${s.phase}/${s.installer}] ${mark} — ${s.specs.length} spec(s)`));
81
+ }
82
+ }
83
+ if (ledger.overrides && Object.keys(ledger.overrides).length > 0) {
84
+ console.log('');
85
+ console.log(chalk.gray('Pin overrides (FB):'));
86
+ for (const [name, version] of Object.entries(ledger.overrides)) {
87
+ console.log(chalk.cyan(` ⇄ ${name} → ${version}`));
88
+ }
89
+ }
90
+ if (ledger.verification) {
91
+ const v = ledger.verification;
92
+ console.log('');
93
+ if (v.ok) {
94
+ console.log(chalk.green(`✓ Verified ${v.verifiedCount}/${v.total} — disk matches manifest pins`));
95
+ }
96
+ else {
97
+ console.log(chalk.red(`✗ Verified ${v.verifiedCount}/${v.total} — disk diverged from manifest pins:`));
98
+ for (const m of v.mismatches) {
99
+ const got = m.got === null ? '(not installed)' : m.got;
100
+ console.log(chalk.red(` ${m.name}: expected ${m.expected}, got ${got}`));
101
+ }
102
+ }
103
+ }
104
+ // AC1.4 — core-floor (nested singleton floor).
105
+ if (ledger.coreFloor) {
106
+ const cf = ledger.coreFloor;
107
+ console.log('');
108
+ if (cf.ok) {
109
+ console.log(chalk.green(`✓ Core-floor: every ${cf.pkg} copy is >= ${cf.minVersion} (S2 singleton intact)`));
110
+ }
111
+ else {
112
+ console.log(chalk.red(`✗ Core-floor: ${cf.offenders.length} ${cf.pkg} copy/copies below ${cf.minVersion}:`));
113
+ for (const o of cf.offenders) {
114
+ console.log(chalk.red(` ${o.version} at ${o.path}`));
115
+ }
116
+ }
117
+ }
31
118
  }
32
119
  //# sourceMappingURL=current.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"current.js","sourceRoot":"","sources":["../../src/commands/current.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAExD,MAAM,CAAC,KAAK,UAAU,cAAc;IAClC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;;;;CAI7B,CAAC,CAAC,CAAC;IAEF,MAAM,OAAO,GAAG,kBAAkB,EAAE,CAAC;IAErC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,kCAAkC,CAAC,CAAC,CAAC;QAC9D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,oDAAoD,CAAC,CAAC,CAAC;QAC9E,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,OAAO,CAAC,IAAI,KAAK,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IACzE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC,CAAC;IACxF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,IAAI,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC;QAC/C,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;YACnC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC,CAAC;QACzC,CAAC;IACH,CAAC;IAED,IAAI,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9C,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAC5C,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YACjC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"current.js","sourceRoot":"","sources":["../../src/commands/current.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function doctorCommand(): Promise<void>;
2
+ //# sourceMappingURL=doctor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AAoDA,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAuCnD"}
@@ -0,0 +1,83 @@
1
+ import chalk from 'chalk';
2
+ import { existsSync, readFileSync } from 'fs';
3
+ import { join } from 'path';
4
+ import { checkPrerequisites, MINIMAL_PREREQUISITES } from '../lib/prerequisites.js';
5
+ import { getConfig } from '../lib/config.js';
6
+ import { verifyInstallMap, expectedMapFromLedger, } from '../lib/install-verify.js';
7
+ /**
8
+ * S1 — offline install verification for `snapshot doctor`.
9
+ *
10
+ * Reads the manifest `expected` pins recorded in the install ledger
11
+ * (~/.config/ist-snapshot/ledger.json — schema owned by lib/ledger.ts) and
12
+ * re-checks them against the current global npm disk. This catches drift that
13
+ * happened AFTER install (e.g. a later `npm i -g` regressed a pin), turning
14
+ * silent "green on broken" into a visible ❌. Purely offline (no re-fetch).
15
+ *
16
+ * Degrades gracefully: if the ledger is absent/unparseable/empty (older install
17
+ * or none), it prints nothing and doctor behaves as before.
18
+ */
19
+ function verifyInstallFromLedger() {
20
+ const ledgerPath = join(getConfig().configDir, 'ledger.json');
21
+ if (!existsSync(ledgerPath))
22
+ return;
23
+ let parsed = null;
24
+ try {
25
+ parsed = JSON.parse(readFileSync(ledgerPath, 'utf-8'));
26
+ }
27
+ catch {
28
+ return; // corrupt ledger — don't crash doctor
29
+ }
30
+ const expected = expectedMapFromLedger(parsed);
31
+ if (Object.keys(expected).length === 0)
32
+ return;
33
+ console.log('');
34
+ console.log(chalk.blue('Verifying install against manifest pins (from ledger)...\n'));
35
+ const v = verifyInstallMap(expected);
36
+ if (v.ok) {
37
+ console.log(chalk.green(` ✅ verified ${v.verifiedCount}/${v.total} — disk matches manifest pins`));
38
+ return;
39
+ }
40
+ console.log(chalk.red(` ❌ verified ${v.verifiedCount}/${v.total} — disk diverged from manifest pins:`));
41
+ for (const m of v.mismatches) {
42
+ const got = m.got === null ? '(not installed)' : m.got;
43
+ console.log(chalk.red(` ${m.name}: expected ${m.expected}, got ${got}`));
44
+ }
45
+ console.log(chalk.gray(' Fix: snapshot install <name> --converge'));
46
+ }
47
+ export async function doctorCommand() {
48
+ console.log(chalk.blue('Checking prerequisites...\n'));
49
+ const results = checkPrerequisites(MINIMAL_PREREQUISITES);
50
+ const missing = results.filter(r => !r.installed);
51
+ // Print results
52
+ for (const r of results) {
53
+ const icon = r.installed ? chalk.green('✅') : chalk.red('❌');
54
+ console.log(` ${icon} ${r.name}`);
55
+ if (!r.installed) {
56
+ console.log(chalk.gray(` Required by: ${r.requiredBy.join(', ')}`));
57
+ if (r.installCommand) {
58
+ console.log(chalk.gray(` Fix: ${r.installCommand}`));
59
+ }
60
+ if (r.guide) {
61
+ console.log(chalk.gray(` ${r.guide}`));
62
+ }
63
+ }
64
+ }
65
+ console.log('');
66
+ if (missing.length === 0) {
67
+ console.log(chalk.green('All prerequisites satisfied! ✓'));
68
+ }
69
+ else {
70
+ console.log(chalk.yellow(`${missing.length} issue(s) found.`));
71
+ const fixable = missing.filter(r => r.installCommand);
72
+ if (fixable.length > 0) {
73
+ console.log(chalk.gray(`Run 'snapshot setup' to install ${fixable.length} missing prerequisite(s).`));
74
+ }
75
+ const manual = missing.filter(r => !r.installCommand);
76
+ if (manual.length > 0) {
77
+ console.log(chalk.gray(`${manual.length} require manual action (see above).`));
78
+ }
79
+ }
80
+ // S1 — surface install verification (disk vs manifest pins) from the ledger.
81
+ verifyInstallFromLedger();
82
+ }
83
+ //# sourceMappingURL=doctor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import type { Snapshot, InstallerConfig } from '../lib/types.js';
2
+ import { StepRecorder } from '../lib/ledger.js';
2
3
  export interface InstallResult {
3
4
  installed: string[];
4
5
  failed: string[];
@@ -7,11 +8,37 @@ export interface InstallSnapshotOptions {
7
8
  useProxy?: boolean;
8
9
  autoDetect?: boolean;
9
10
  sessionId?: string;
11
+ /**
12
+ * S3 — install-step recorder. When present, each npm batch / fallback /
13
+ * parallel / skit step appends an ordered entry for the install ledger. The
14
+ * same instance is threaded through the entire recursive extends chain.
15
+ */
16
+ recorder?: StepRecorder;
17
+ /**
18
+ * FB — pin overrides (name → exact version), applied to every install map in
19
+ * this snapshot AND its extends chain (threaded through the recursion) so a
20
+ * base layer cannot clobber an override with its original pin.
21
+ */
22
+ overrides?: Record<string, string>;
10
23
  }
24
+ /**
25
+ * FB — the subset of pin overrides that actually apply to this install (i.e. the
26
+ * overridden package IS declared in the effective npm map). These are the
27
+ * packages we targeted-converge so a --pin always holds even without a global
28
+ * --converge. Overrides for packages not in the snapshot are dropped (already
29
+ * warned via unmatchedOverrides). Returns name → override version.
30
+ */
31
+ export declare function overrideConvergeTargets(effectiveNpmMap: Record<string, string>, overrides: Record<string, string>): Record<string, string>;
11
32
  export declare function installSnapshot(snapshot: Snapshot, depth?: number, parentInstallers?: Record<string, InstallerConfig>, options?: InstallSnapshotOptions): Promise<{
12
33
  result: InstallResult;
13
34
  installers: Record<string, InstallerConfig>;
14
35
  }>;
36
+ /**
37
+ * Recursively collect all packages from snapshot and its extends chain.
38
+ * This ensures .npmrc is configured with ALL scopes before installation begins,
39
+ * including scopes from base snapshots (e.g., @microwiseai from @ist/minimal).
40
+ */
41
+ export declare function collectAllPackages(snapshot: Snapshot): Promise<Record<string, string>>;
15
42
  export interface InstallCommandOptions {
16
43
  /** Converge onto the new version: remove previous-version-only packages (ADR 001). */
17
44
  replace?: boolean;
@@ -19,6 +46,20 @@ export interface InstallCommandOptions {
19
46
  dryRun?: boolean;
20
47
  /** Skip the removal confirmation prompt. */
21
48
  yes?: boolean;
49
+ /**
50
+ * S1 — post-install convergence. ON BY DEFAULT (undefined ⇒ true). When true,
51
+ * a disk divergence from the manifest pins is auto-repaired (bounded rounds);
52
+ * an UNREPAIRABLE residual still fails-loud (exit 1) — no green-on-broken. Set
53
+ * false (CLI `--no-converge`) for a raw/fast install that only verifies and
54
+ * fails-loud on divergence without attempting repair. (Core-floor offenders
55
+ * always fail-loud regardless of mode.)
56
+ */
57
+ converge?: boolean;
58
+ /**
59
+ * FB — pin overrides without re-publishing, e.g. ["@ist/sesh@0.4.0"]
60
+ * (repeatable). Applied to the whole install + recorded in the ledger.
61
+ */
62
+ pin?: string[];
22
63
  }
23
64
  export declare function installCommand(name: string, options?: InstallCommandOptions): Promise<void>;
24
65
  //# sourceMappingURL=install.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAwBjE,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAsmBD,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAsB,eAAe,CACnC,QAAQ,EAAE,QAAQ,EAClB,KAAK,GAAE,MAAU,EACjB,gBAAgB,GAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAM,EACtD,OAAO,GAAE,sBAA2B,GACnC,OAAO,CAAC;IAAE,MAAM,EAAE,aAAa,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAA;CAAE,CAAC,CA8VjF;AA4FD,MAAM,WAAW,qBAAqB;IACpC,sFAAsF;IACtF,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,yEAAyE;IACzE,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,4CAA4C;IAC5C,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAoLD,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,qBAA0B,GAAG,OAAO,CAAC,IAAI,CAAC,CA0brG"}
1
+ {"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAgBjE,OAAO,EACL,YAAY,EAIb,MAAM,kBAAkB,CAAC;AAsB1B,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAqgBD,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACpC;AAuBD;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CACrC,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACvC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAChC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAMxB;AAED,wBAAsB,eAAe,CACnC,QAAQ,EAAE,QAAQ,EAClB,KAAK,GAAE,MAAU,EACjB,gBAAgB,GAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAM,EACtD,OAAO,GAAE,sBAA2B,GACnC,OAAO,CAAC;IAAE,MAAM,EAAE,aAAa,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAA;CAAE,CAAC,CA0YjF;AAwDD;;;;GAIG;AACH,wBAAsB,kBAAkB,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CA6B5F;AAED,MAAM,WAAW,qBAAqB;IACpC,sFAAsF;IACtF,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,yEAAyE;IACzE,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,4CAA4C;IAC5C,GAAG,CAAC,EAAE,OAAO,CAAC;IACd;;;;;;;OAOG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;OAGG;IACH,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC;CAChB;AAoLD,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,qBAA0B,GAAG,OAAO,CAAC,IAAI,CAAC,CAwoBrG"}