@microwiseai/snapshot 0.8.0 → 0.9.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 (112) hide show
  1. package/dist/build-info.json +1 -0
  2. package/dist/commands/access.d.ts +25 -9
  3. package/dist/commands/access.d.ts.map +1 -1
  4. package/dist/commands/access.js +101 -47
  5. package/dist/commands/access.js.map +1 -1
  6. package/dist/commands/config.d.ts +3 -0
  7. package/dist/commands/config.d.ts.map +1 -0
  8. package/dist/commands/config.js +37 -0
  9. package/dist/commands/config.js.map +1 -0
  10. package/dist/commands/install.d.ts +54 -0
  11. package/dist/commands/install.d.ts.map +1 -1
  12. package/dist/commands/install.js +480 -65
  13. package/dist/commands/install.js.map +1 -1
  14. package/dist/commands/publish.d.ts +10 -0
  15. package/dist/commands/publish.d.ts.map +1 -1
  16. package/dist/commands/publish.js +94 -12
  17. package/dist/commands/publish.js.map +1 -1
  18. package/dist/index.js +45 -8
  19. package/dist/index.js.map +1 -1
  20. package/dist/lib/access-index.d.ts +81 -0
  21. package/dist/lib/access-index.d.ts.map +1 -0
  22. package/dist/lib/access-index.js +175 -0
  23. package/dist/lib/access-index.js.map +1 -0
  24. package/dist/lib/access-sync.d.ts +66 -17
  25. package/dist/lib/access-sync.d.ts.map +1 -1
  26. package/dist/lib/access-sync.js +391 -217
  27. package/dist/lib/access-sync.js.map +1 -1
  28. package/dist/lib/extends-access.d.ts +34 -0
  29. package/dist/lib/extends-access.d.ts.map +1 -0
  30. package/dist/lib/extends-access.js +82 -0
  31. package/dist/lib/extends-access.js.map +1 -0
  32. package/dist/lib/gitlab-publisher.d.ts +70 -0
  33. package/dist/lib/gitlab-publisher.d.ts.map +1 -0
  34. package/dist/lib/gitlab-publisher.js +165 -0
  35. package/dist/lib/gitlab-publisher.js.map +1 -0
  36. package/dist/lib/gitlab.d.ts +4 -0
  37. package/dist/lib/gitlab.d.ts.map +1 -1
  38. package/dist/lib/gitlab.js +1 -1
  39. package/dist/lib/gitlab.js.map +1 -1
  40. package/dist/lib/grant.d.ts +157 -0
  41. package/dist/lib/grant.d.ts.map +1 -0
  42. package/dist/lib/grant.js +352 -0
  43. package/dist/lib/grant.js.map +1 -0
  44. package/dist/lib/install-verify.d.ts +16 -2
  45. package/dist/lib/install-verify.d.ts.map +1 -1
  46. package/dist/lib/install-verify.js +24 -3
  47. package/dist/lib/install-verify.js.map +1 -1
  48. package/dist/lib/ledger.d.ts +13 -0
  49. package/dist/lib/ledger.d.ts.map +1 -1
  50. package/dist/lib/ledger.js.map +1 -1
  51. package/dist/lib/prerequisites.d.ts.map +1 -1
  52. package/dist/lib/prerequisites.js +4 -1
  53. package/dist/lib/prerequisites.js.map +1 -1
  54. package/dist/lib/proxy-auth-globalconfig.d.ts +55 -0
  55. package/dist/lib/proxy-auth-globalconfig.d.ts.map +1 -0
  56. package/dist/lib/proxy-auth-globalconfig.js +110 -0
  57. package/dist/lib/proxy-auth-globalconfig.js.map +1 -0
  58. package/dist/lib/semver-range.d.ts +32 -0
  59. package/dist/lib/semver-range.d.ts.map +1 -0
  60. package/dist/lib/semver-range.js +243 -0
  61. package/dist/lib/semver-range.js.map +1 -0
  62. package/dist/lib/session.d.ts +5 -0
  63. package/dist/lib/session.d.ts.map +1 -1
  64. package/dist/lib/session.js +9 -0
  65. package/dist/lib/session.js.map +1 -1
  66. package/dist/lib/skit-adapter.d.ts.map +1 -1
  67. package/dist/lib/skit-adapter.js +26 -3
  68. package/dist/lib/skit-adapter.js.map +1 -1
  69. package/dist/lib/timing.d.ts +7 -0
  70. package/dist/lib/timing.d.ts.map +1 -0
  71. package/dist/lib/timing.js +14 -0
  72. package/dist/lib/timing.js.map +1 -0
  73. package/dist/lib/types.d.ts +3 -0
  74. package/dist/lib/types.d.ts.map +1 -1
  75. package/node_modules/@microwiseai/snapshot-downgrade-guard/dist/command-specs.d.ts +25 -0
  76. package/node_modules/@microwiseai/snapshot-downgrade-guard/dist/command-specs.d.ts.map +1 -0
  77. package/node_modules/@microwiseai/snapshot-downgrade-guard/dist/command-specs.js +55 -0
  78. package/node_modules/@microwiseai/snapshot-downgrade-guard/dist/command-specs.js.map +1 -0
  79. package/node_modules/@microwiseai/snapshot-downgrade-guard/dist/config.d.ts +52 -0
  80. package/node_modules/@microwiseai/snapshot-downgrade-guard/dist/config.d.ts.map +1 -0
  81. package/node_modules/@microwiseai/snapshot-downgrade-guard/dist/config.js +62 -0
  82. package/node_modules/@microwiseai/snapshot-downgrade-guard/dist/config.js.map +1 -0
  83. package/node_modules/@microwiseai/snapshot-downgrade-guard/dist/detect.d.ts +30 -0
  84. package/node_modules/@microwiseai/snapshot-downgrade-guard/dist/detect.d.ts.map +1 -0
  85. package/node_modules/@microwiseai/snapshot-downgrade-guard/dist/detect.js +39 -0
  86. package/node_modules/@microwiseai/snapshot-downgrade-guard/dist/detect.js.map +1 -0
  87. package/node_modules/@microwiseai/snapshot-downgrade-guard/dist/index.d.ts +35 -0
  88. package/node_modules/@microwiseai/snapshot-downgrade-guard/dist/index.d.ts.map +1 -0
  89. package/node_modules/@microwiseai/snapshot-downgrade-guard/dist/index.js +31 -0
  90. package/node_modules/@microwiseai/snapshot-downgrade-guard/dist/index.js.map +1 -0
  91. package/node_modules/@microwiseai/snapshot-downgrade-guard/dist/policy.d.ts +42 -0
  92. package/node_modules/@microwiseai/snapshot-downgrade-guard/dist/policy.d.ts.map +1 -0
  93. package/node_modules/@microwiseai/snapshot-downgrade-guard/dist/policy.js +36 -0
  94. package/node_modules/@microwiseai/snapshot-downgrade-guard/dist/policy.js.map +1 -0
  95. package/node_modules/@microwiseai/snapshot-downgrade-guard/dist/report.d.ts +11 -0
  96. package/node_modules/@microwiseai/snapshot-downgrade-guard/dist/report.d.ts.map +1 -0
  97. package/node_modules/@microwiseai/snapshot-downgrade-guard/dist/report.js +46 -0
  98. package/node_modules/@microwiseai/snapshot-downgrade-guard/dist/report.js.map +1 -0
  99. package/node_modules/@microwiseai/snapshot-downgrade-guard/dist/semver.d.ts +11 -0
  100. package/node_modules/@microwiseai/snapshot-downgrade-guard/dist/semver.d.ts.map +1 -0
  101. package/node_modules/@microwiseai/snapshot-downgrade-guard/dist/semver.js +81 -0
  102. package/node_modules/@microwiseai/snapshot-downgrade-guard/dist/semver.js.map +1 -0
  103. package/node_modules/@microwiseai/snapshot-downgrade-guard/dist/types.d.ts +29 -0
  104. package/node_modules/@microwiseai/snapshot-downgrade-guard/dist/types.d.ts.map +1 -0
  105. package/node_modules/@microwiseai/snapshot-downgrade-guard/dist/types.js +6 -0
  106. package/node_modules/@microwiseai/snapshot-downgrade-guard/dist/types.js.map +1 -0
  107. package/node_modules/@microwiseai/snapshot-downgrade-guard/package.json +55 -0
  108. package/package.json +5 -2
  109. package/dist/lib/transitive-resolver.d.ts +0 -89
  110. package/dist/lib/transitive-resolver.d.ts.map +0 -1
  111. package/dist/lib/transitive-resolver.js +0 -447
  112. package/dist/lib/transitive-resolver.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"gitSha":"f9d767748eb5"}
@@ -1,17 +1,33 @@
1
1
  /**
2
- * Access command - Manage package access levels
2
+ * Access commands
3
3
  *
4
- * Commands:
5
- * snapshot access sync [path] - Sync access with license-api
4
+ * snapshot access sync [path] - RETIRED (license-api write path)
5
+ * snapshot access-index <snapshot> --version … - backfill access-index.json
6
6
  */
7
- interface AccessSyncOptions {
8
- verbose?: boolean;
7
+ export declare const ACCESS_SYNC_RETIRED_MESSAGE: string;
8
+ /** Disabled: fails loudly with the contract reference. No network calls. */
9
+ export declare function accessSyncCommand(): Promise<void>;
10
+ export interface AccessIndexOptions {
11
+ version?: string[];
12
+ all?: boolean;
13
+ force?: boolean;
9
14
  dryRun?: boolean;
10
- skipTransitive?: boolean;
15
+ allowPartial?: boolean;
16
+ /** --dry-run output directory (one file per version). */
17
+ out?: string;
18
+ verbose?: boolean;
19
+ }
20
+ export interface AccessIndexOutcome {
21
+ version: string;
22
+ status: 'uploaded' | 'dry-run' | 'skipped-exists' | 'failed' | 'not-found';
23
+ packages?: number;
24
+ detail?: string;
25
+ file?: string;
11
26
  }
12
27
  /**
13
- * Sync access levels for a snapshot
28
+ * Backfill access-index.json for already-published snapshot versions.
29
+ * snapshot.json is read from the registry (never a local file); only
30
+ * access-index.json is uploaded — the tarball is never re-published.
14
31
  */
15
- export declare function accessSyncCommand(snapshotPath?: string, options?: AccessSyncOptions): Promise<void>;
16
- export {};
32
+ export declare function accessIndexCommand(snapshotArg: string, options?: AccessIndexOptions): Promise<AccessIndexOutcome[]>;
17
33
  //# sourceMappingURL=access.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"access.d.ts","sourceRoot":"","sources":["../../src/commands/access.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAQH,UAAU,iBAAiB;IACzB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AA0BD;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,YAAY,CAAC,EAAE,MAAM,EACrB,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,IAAI,CAAC,CAmCf"}
1
+ {"version":3,"file":"access.d.ts","sourceRoot":"","sources":["../../src/commands/access.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAmBH,eAAO,MAAM,2BAA2B,QAM8C,CAAC;AAEvF,4EAA4E;AAC5E,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC,CAKvD;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,yDAAyD;IACzD,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,UAAU,GAAG,SAAS,GAAG,gBAAgB,GAAG,QAAQ,GAAG,WAAW,CAAC;IAC3E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;;GAIG;AACH,wBAAsB,kBAAkB,CACtC,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,kBAAuB,GAC/B,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAwF/B"}
@@ -1,68 +1,122 @@
1
1
  /**
2
- * Access command - Manage package access levels
2
+ * Access commands
3
3
  *
4
- * Commands:
5
- * snapshot access sync [path] - Sync access with license-api
4
+ * snapshot access sync [path] - RETIRED (license-api write path)
5
+ * snapshot access-index <snapshot> --version … - backfill access-index.json
6
6
  */
7
- import { readFile } from 'node:fs/promises';
8
- import { join, resolve } from 'node:path';
9
7
  import chalk from 'chalk';
10
- import { syncPackageAccess } from '../lib/access-sync.js';
11
- /**
12
- * Read snapshot.json from given path or current directory
13
- */
14
- async function readSnapshot(snapshotPath) {
15
- const targetPath = snapshotPath
16
- ? resolve(snapshotPath)
17
- : join(process.cwd(), 'snapshot.json');
18
- // If path is a directory, append snapshot.json
19
- const finalPath = targetPath.endsWith('.json')
20
- ? targetPath
21
- : join(targetPath, 'snapshot.json');
22
- try {
23
- const content = await readFile(finalPath, 'utf-8');
24
- return JSON.parse(content);
25
- }
26
- catch (error) {
27
- if (error.code === 'ENOENT') {
28
- throw new Error(`snapshot.json not found at: ${finalPath}`);
29
- }
30
- throw new Error(`Failed to read snapshot.json: ${error instanceof Error ? error.message : String(error)}`);
31
- }
8
+ import { fetchSnapshotFromRepo, parseSnapshotSpec, snapshotNameToPackageName } from '../lib/gitlab.js';
9
+ import { ACCESS_INDEX_FILE, PartialClosureError, generateAccessIndex, listGenericPackageVersions, listPackageFiles, serializeAccessIndex, uploadAccessIndex, } from '../lib/access-index.js';
10
+ import { compareVersions, parseVersion } from '../lib/semver-range.js';
11
+ import { describeIndex, writeIndexFile } from './publish.js';
12
+ import { join, resolve } from 'node:path';
13
+ import { mkdir } from 'node:fs/promises';
14
+ export const ACCESS_SYNC_RETIRED_MESSAGE = '`snapshot access sync` is retired: license-api package_access is no longer written.\n' +
15
+ ' Contract (global snapshot-tier-access, 2026-09-28 owner decision): "license-api package_access 에\n' +
16
+ ' snapshot 의존 패키지를 등록하지 않음(access-sync 의 license-api 쓰기 경로 폐기)".\n' +
17
+ ' Serving SSOT is access-index.json in each published snapshot version:\n' +
18
+ ' - new versions: snapshot publish (uploads it automatically)\n' +
19
+ ' - existing versions: snapshot access-index <snapshot> --version <v> (or --all)';
20
+ /** Disabled: fails loudly with the contract reference. No network calls. */
21
+ export async function accessSyncCommand() {
22
+ console.error();
23
+ console.error(chalk.red('Error:'), ACCESS_SYNC_RETIRED_MESSAGE);
24
+ console.error();
25
+ process.exitCode = 1;
32
26
  }
33
27
  /**
34
- * Sync access levels for a snapshot
28
+ * Backfill access-index.json for already-published snapshot versions.
29
+ * snapshot.json is read from the registry (never a local file); only
30
+ * access-index.json is uploaded — the tarball is never re-published.
35
31
  */
36
- export async function accessSyncCommand(snapshotPath, options = {}) {
37
- const { verbose = false, dryRun = false, skipTransitive = false } = options;
38
- console.log();
39
- console.log(chalk.cyan('Syncing package access...'));
32
+ export async function accessIndexCommand(snapshotArg, options = {}) {
33
+ const { force = false, dryRun = false, allowPartial = false, verbose = false } = options;
34
+ const outcomes = [];
40
35
  try {
41
- const snapshot = await readSnapshot(snapshotPath);
42
- if (!snapshot.access) {
43
- console.log(chalk.yellow('\n Warning: No "access" field in snapshot.json'));
44
- console.log(chalk.dim(' Add "access": "public", "access": "authenticated", or "access": { "type": "licensed", "productId": "..." }'));
45
- console.log();
46
- return;
36
+ if (allowPartial && !dryRun) {
37
+ throw new Error('--allow-partial is only allowed with --dry-run (a partial access-index must not be uploaded)');
47
38
  }
48
- console.log(chalk.dim(` Snapshot: ${snapshot.name} v${snapshot.version}`));
49
- const result = await syncPackageAccess(snapshot, {
50
- verbose,
51
- dryRun,
52
- includeTransitive: !skipTransitive,
53
- });
54
- if (result.success) {
55
- console.log(chalk.green('\n✓ Access sync completed!'));
39
+ const { name, version: specVersion } = parseSnapshotSpec(snapshotArg);
40
+ const packageName = snapshotNameToPackageName(name);
41
+ const published = await listGenericPackageVersions(packageName);
42
+ const byVersion = new Map(published.map((p) => [p.version, p]));
43
+ let targets;
44
+ if (options.all) {
45
+ targets = [...byVersion.keys()];
56
46
  }
57
47
  else {
58
- console.log(chalk.yellow('\n⚠ Access sync completed with some failures'));
48
+ targets = [...(options.version ?? []), ...(specVersion ? [specVersion] : [])];
49
+ }
50
+ targets = [...new Set(targets)].sort((a, b) => {
51
+ const pa = parseVersion(a);
52
+ const pb = parseVersion(b);
53
+ return pa && pb ? compareVersions(pa, pb) : a.localeCompare(b);
54
+ });
55
+ if (targets.length === 0) {
56
+ throw new Error('No version given: use --version <v> (repeatable) or --all');
57
+ }
58
+ console.log();
59
+ console.log(chalk.cyan(`access-index backfill: ${name} (${targets.length} version(s))${dryRun ? ' [dry-run]' : ''}`));
60
+ for (const version of targets) {
61
+ const pkg = byVersion.get(version);
62
+ if (!pkg) {
63
+ console.log(chalk.red(` ✗ ${version}: not published (${packageName})`));
64
+ outcomes.push({ version, status: 'not-found' });
65
+ continue;
66
+ }
67
+ try {
68
+ const files = await listPackageFiles(pkg);
69
+ if (files.includes(ACCESS_INDEX_FILE) && !force) {
70
+ console.log(chalk.dim(` ⊘ ${version}: ${ACCESS_INDEX_FILE} already present (use --force to re-upload)`));
71
+ outcomes.push({ version, status: 'skipped-exists' });
72
+ continue;
73
+ }
74
+ const snapshot = await fetchSnapshotFromRepo(`${name}@${version}`);
75
+ if (snapshot.name !== name || snapshot.version !== version) {
76
+ throw new Error(`registry snapshot.json says ${snapshot.name}@${snapshot.version}, expected ${name}@${version}`);
77
+ }
78
+ const { index, gaps } = await generateAccessIndex(snapshot, { allowPartial, verbose });
79
+ for (const g of gaps)
80
+ console.log(chalk.yellow(` gap (--allow-partial): ${g}`));
81
+ const body = serializeAccessIndex(index);
82
+ if (dryRun) {
83
+ let file;
84
+ if (options.out) {
85
+ await mkdir(resolve(options.out), { recursive: true });
86
+ file = await writeIndexFile(body, join(options.out, `${packageName}-${version}.${ACCESS_INDEX_FILE}`));
87
+ }
88
+ else {
89
+ file = await writeIndexFile(body);
90
+ }
91
+ console.log(chalk.yellow(` [dry-run] ${version}: ${describeIndex(index)} → ${file}`));
92
+ outcomes.push({ version, status: 'dry-run', packages: index.packages.length, file });
93
+ }
94
+ else {
95
+ await uploadAccessIndex(pkg, body);
96
+ console.log(chalk.green(` ✓ ${version}: uploaded — ${describeIndex(index)}`));
97
+ outcomes.push({ version, status: 'uploaded', packages: index.packages.length });
98
+ }
99
+ }
100
+ catch (error) {
101
+ const detail = error instanceof PartialClosureError
102
+ ? `partial closure: ${error.gaps.join('; ')}`
103
+ : error instanceof Error ? error.message : String(error);
104
+ console.log(chalk.red(` ✗ ${version}: ${detail}`));
105
+ outcomes.push({ version, status: 'failed', detail });
106
+ }
59
107
  }
108
+ const count = (s) => outcomes.filter((o) => o.status === s).length;
60
109
  console.log();
110
+ console.log(` uploaded ${count('uploaded')}, dry-run ${count('dry-run')}, skipped ${count('skipped-exists')}, ` +
111
+ `failed ${count('failed')}, not-found ${count('not-found')}`);
112
+ if (count('failed') + count('not-found') > 0)
113
+ process.exitCode = 1;
61
114
  }
62
115
  catch (error) {
63
116
  console.error();
64
117
  console.error(chalk.red('Error:'), error instanceof Error ? error.message : String(error));
65
118
  process.exitCode = 1;
66
119
  }
120
+ return outcomes;
67
121
  }
68
122
  //# sourceMappingURL=access.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"access.js","sourceRoot":"","sources":["../../src/commands/access.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"access.js","sourceRoot":"","sources":["../../src/commands/access.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export declare function configGetCommand(key?: string): Promise<void>;
2
+ export declare function configSetCommand(key: string, value: string): Promise<void>;
3
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"AAuBA,wBAAsB,gBAAgB,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAQlE;AAED,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAahF"}
@@ -0,0 +1,37 @@
1
+ import chalk from 'chalk';
2
+ import { getConfigPath, getMachineDowngradeMode, setMachineDowngradeMode, asDowngradeMode, DOWNGRADE_MODES, } from '@microwiseai/snapshot-downgrade-guard';
3
+ /**
4
+ * Thin `snapshot config` command. All read/write logic lives in
5
+ * @microwiseai/snapshot-downgrade-guard so core stays a thin wire. Currently
6
+ * only `install.onDowngrade` is supported.
7
+ */
8
+ const SUPPORTED_KEYS = ['install.onDowngrade'];
9
+ function unknownKey(key) {
10
+ console.log(chalk.red(`Unknown config key: ${key}`));
11
+ console.log(chalk.gray(`Supported keys: ${SUPPORTED_KEYS.join(', ')}`));
12
+ process.exit(1);
13
+ }
14
+ export async function configGetCommand(key) {
15
+ const current = getMachineDowngradeMode() ?? '(unset — default: refuse)';
16
+ if (!key || key === 'install.onDowngrade') {
17
+ if (!key)
18
+ console.log(chalk.gray(`Config file: ${getConfigPath()}`));
19
+ console.log(`install.onDowngrade = ${current}`);
20
+ return;
21
+ }
22
+ unknownKey(key);
23
+ }
24
+ export async function configSetCommand(key, value) {
25
+ if (key !== 'install.onDowngrade')
26
+ unknownKey(key);
27
+ const mode = asDowngradeMode(value);
28
+ if (!mode) {
29
+ console.log(chalk.red(`Invalid value for install.onDowngrade: "${value}"`));
30
+ console.log(chalk.gray(`Allowed values: ${DOWNGRADE_MODES.join(', ')}`));
31
+ process.exit(1);
32
+ }
33
+ setMachineDowngradeMode(mode);
34
+ console.log(chalk.green('✓') + ` install.onDowngrade = ${mode}`);
35
+ console.log(chalk.gray(`Saved to ${getConfigPath()}`));
36
+ }
37
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EACL,aAAa,EACb,uBAAuB,EACvB,uBAAuB,EACvB,eAAe,EACf,eAAe,GAChB,MAAM,uCAAuC,CAAC;AAE/C;;;;GAIG;AAEH,MAAM,cAAc,GAAG,CAAC,qBAAqB,CAAU,CAAC;AAExD,SAAS,UAAU,CAAC,GAAW;IAC7B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,uBAAuB,GAAG,EAAE,CAAC,CAAC,CAAC;IACrD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,mBAAmB,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IACxE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,GAAY;IACjD,MAAM,OAAO,GAAG,uBAAuB,EAAE,IAAI,2BAA2B,CAAC;IACzE,IAAI,CAAC,GAAG,IAAI,GAAG,KAAK,qBAAqB,EAAE,CAAC;QAC1C,IAAI,CAAC,GAAG;YAAE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC;QACrE,OAAO,CAAC,GAAG,CAAC,yBAAyB,OAAO,EAAE,CAAC,CAAC;QAChD,OAAO;IACT,CAAC;IACD,UAAU,CAAC,GAAG,CAAC,CAAC;AAClB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,GAAW,EAAE,KAAa;IAC/D,IAAI,GAAG,KAAK,qBAAqB;QAAE,UAAU,CAAC,GAAG,CAAC,CAAC;IAEnD,MAAM,IAAI,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;IACpC,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,2CAA2C,KAAK,GAAG,CAAC,CAAC,CAAC;QAC5E,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,mBAAmB,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QACzE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,uBAAuB,CAAC,IAAI,CAAC,CAAC;IAC9B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,0BAA0B,IAAI,EAAE,CAAC,CAAC;IACjE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC;AACzD,CAAC"}
@@ -1,9 +1,44 @@
1
1
  import type { Snapshot, InstallerConfig } from '../lib/types.js';
2
+ import { type DowngradeMode } from '@microwiseai/snapshot-downgrade-guard';
2
3
  import { StepRecorder } from '../lib/ledger.js';
3
4
  export interface InstallResult {
4
5
  installed: string[];
5
6
  failed: string[];
6
7
  }
8
+ export declare class DowngradeRefusedError extends Error {
9
+ constructor(message: string);
10
+ }
11
+ /**
12
+ * Publish (or clear) the downgrade policy resolved upstream by installCommand so
13
+ * the exec boundary reuses it. Exported as a test seam.
14
+ */
15
+ export declare function setActiveDowngradeMode(mode: DowngradeMode | undefined): void;
16
+ /**
17
+ * Run a command with FULLY LIVE output (spawn, async).
18
+ *
19
+ * Why spawn+async (not execSync): npm writes its progress bar to STDERR, and the
20
+ * previous `execSync(stdio:['inherit','inherit','pipe'])` piped stderr — which
21
+ * (a) hid npm's live progress (looked "frozen" for tens of seconds) and
22
+ * (b) blocked the event loop so no JS spinner could ever turn. Inheriting all
23
+ * three streams lets npm's own progress render live to the terminal while the
24
+ * event loop stays free. See install-speed-visibility work (B).
25
+ *
26
+ * On failure we can no longer capture the stderr text (it went straight to the
27
+ * terminal, so the user already SAW it) — `lastCommandError` carries the exit
28
+ * code instead.
29
+ */
30
+ export declare function runCommand(command: string): Promise<boolean>;
31
+ /**
32
+ * Synchronous streaming variant — used ONLY by the converge re-pin callback,
33
+ * which is invoked from the pure/sync `runConverge` (lib/install-verify.ts).
34
+ * Keeping this sync avoids making `runConverge` async (which would ripple into
35
+ * its unit-test suite and break its pure-function contract). `spawnSync` with
36
+ * inherited stdio still streams npm's live progress to the terminal (the child
37
+ * writes directly to the inherited fd), so the converge phase no longer looks
38
+ * frozen either — it only blocks the JS event loop for its (batched, rare)
39
+ * duration.
40
+ */
41
+ export declare function runCommandSync(command: string): boolean;
7
42
  export interface InstallSnapshotOptions {
8
43
  useProxy?: boolean;
9
44
  autoDetect?: boolean;
@@ -20,6 +55,18 @@ export interface InstallSnapshotOptions {
20
55
  * base layer cannot clobber an override with its original pin.
21
56
  */
22
57
  overrides?: Record<string, string>;
58
+ /**
59
+ * grant-unify P1 — awaited before each long phase (every kit/skit install
60
+ * group) so an active snapshot grant can be re-issued before its TTL runs
61
+ * out. Unset (SNAPSHOT_GRANT_MODE=off) → no-op.
62
+ */
63
+ beforePhase?: (phase: string) => Promise<void>;
64
+ /**
65
+ * grant-unify P1 — skit session source read right before each kit install
66
+ * (grant mode: the CURRENT istsg_ token, so re-issues are honored). Takes
67
+ * precedence over `sessionId` for skit installs only. Unset → `sessionId`.
68
+ */
69
+ skitSessionId?: () => string | undefined;
23
70
  }
24
71
  /**
25
72
  * FB — the subset of pin overrides that actually apply to this install (i.e. the
@@ -60,6 +107,13 @@ export interface InstallCommandOptions {
60
107
  * (repeatable). Applied to the whole install + recorded in the ledger.
61
108
  */
62
109
  pin?: string[];
110
+ /**
111
+ * One-shot downgrade escape hatch (CLI `--allow-downgrade`). When true, an
112
+ * install that would downgrade already-installed global tooling proceeds
113
+ * anyway (equivalent to env SNAPSHOT_ALLOW_LOCAL=1). Highest-priority policy
114
+ * layer. See @microwiseai/snapshot-downgrade-guard.
115
+ */
116
+ allowDowngrade?: boolean;
63
117
  }
64
118
  export declare function installCommand(name: string, options?: InstallCommandOptions): Promise<void>;
65
119
  //# 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;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"}
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;AAiBjE,OAAO,EAOL,KAAK,aAAa,EACnB,MAAM,uCAAuC,CAAC;AAc/C,OAAO,EACL,YAAY,EAIb,MAAM,kBAAkB,CAAC;AAsB1B,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAwPD,qBAAa,qBAAsB,SAAQ,KAAK;gBAClC,OAAO,EAAE,MAAM;CAI5B;AAGD;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,aAAa,GAAG,SAAS,GAAG,IAAI,CAE5E;AAgDD;;;;;;;;;;;;;GAaG;AAEH,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAyB5D;AAED;;;;;;;;;GASG;AAEH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAgBvD;AAgSD,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;IACnC;;;;OAIG;IACH,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/C;;;;OAIG;IACH,aAAa,CAAC,EAAE,MAAM,MAAM,GAAG,SAAS,CAAC;CAC1C;AAuDD;;;;;;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,CAmZjF;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;IACf;;;;;OAKG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAoLD,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,qBAA0B,GAAG,OAAO,CAAC,IAAI,CAAC,CA23BrG"}