@vyuhlabs/dxkit 2.5.1 → 2.5.2

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 (91) hide show
  1. package/CHANGELOG.md +154 -0
  2. package/README.md +48 -28
  3. package/dist/analyzers/tools/tool-registry.d.ts.map +1 -1
  4. package/dist/analyzers/tools/tool-registry.js +25 -8
  5. package/dist/analyzers/tools/tool-registry.js.map +1 -1
  6. package/dist/cli.d.ts.map +1 -1
  7. package/dist/cli.js +66 -10
  8. package/dist/cli.js.map +1 -1
  9. package/dist/constants.d.ts.map +1 -1
  10. package/dist/constants.js +0 -10
  11. package/dist/constants.js.map +1 -1
  12. package/dist/detect.d.ts.map +1 -1
  13. package/dist/detect.js +0 -15
  14. package/dist/detect.js.map +1 -1
  15. package/dist/doctor.d.ts +78 -1
  16. package/dist/doctor.d.ts.map +1 -1
  17. package/dist/doctor.js +500 -101
  18. package/dist/doctor.js.map +1 -1
  19. package/dist/generator.d.ts.map +1 -1
  20. package/dist/generator.js +15 -0
  21. package/dist/generator.js.map +1 -1
  22. package/dist/languages/csharp.d.ts.map +1 -1
  23. package/dist/languages/csharp.js +1 -0
  24. package/dist/languages/csharp.js.map +1 -1
  25. package/dist/languages/go.d.ts.map +1 -1
  26. package/dist/languages/go.js +1 -0
  27. package/dist/languages/go.js.map +1 -1
  28. package/dist/languages/index.d.ts +25 -0
  29. package/dist/languages/index.d.ts.map +1 -1
  30. package/dist/languages/index.js +44 -0
  31. package/dist/languages/index.js.map +1 -1
  32. package/dist/languages/java.d.ts.map +1 -1
  33. package/dist/languages/java.js +1 -0
  34. package/dist/languages/java.js.map +1 -1
  35. package/dist/languages/kotlin.d.ts.map +1 -1
  36. package/dist/languages/kotlin.js +1 -0
  37. package/dist/languages/kotlin.js.map +1 -1
  38. package/dist/languages/python.d.ts.map +1 -1
  39. package/dist/languages/python.js +10 -1
  40. package/dist/languages/python.js.map +1 -1
  41. package/dist/languages/ruby.d.ts.map +1 -1
  42. package/dist/languages/ruby.js +1 -0
  43. package/dist/languages/ruby.js.map +1 -1
  44. package/dist/languages/rust.d.ts.map +1 -1
  45. package/dist/languages/rust.js +1 -0
  46. package/dist/languages/rust.js.map +1 -1
  47. package/dist/languages/types.d.ts +20 -0
  48. package/dist/languages/types.d.ts.map +1 -1
  49. package/dist/languages/typescript.d.ts.map +1 -1
  50. package/dist/languages/typescript.js +1 -0
  51. package/dist/languages/typescript.js.map +1 -1
  52. package/dist/prompts.d.ts.map +1 -1
  53. package/dist/prompts.js +0 -5
  54. package/dist/prompts.js.map +1 -1
  55. package/dist/setup-branch-protection.d.ts +34 -0
  56. package/dist/setup-branch-protection.d.ts.map +1 -0
  57. package/dist/setup-branch-protection.js +190 -0
  58. package/dist/setup-branch-protection.js.map +1 -0
  59. package/dist/setup-gh.d.ts +75 -0
  60. package/dist/setup-gh.d.ts.map +1 -0
  61. package/dist/setup-gh.js +213 -0
  62. package/dist/setup-gh.js.map +1 -0
  63. package/dist/setup-prebuild.d.ts +34 -0
  64. package/dist/setup-prebuild.d.ts.map +1 -0
  65. package/dist/setup-prebuild.js +181 -0
  66. package/dist/setup-prebuild.js.map +1 -0
  67. package/dist/ship-installers.d.ts.map +1 -1
  68. package/dist/ship-installers.js +19 -4
  69. package/dist/ship-installers.js.map +1 -1
  70. package/dist/types.d.ts +24 -6
  71. package/dist/types.d.ts.map +1 -1
  72. package/dist/update.d.ts +41 -0
  73. package/dist/update.d.ts.map +1 -1
  74. package/dist/update.js +154 -15
  75. package/dist/update.js.map +1 -1
  76. package/dist/upgrade.d.ts +88 -0
  77. package/dist/upgrade.d.ts.map +1 -0
  78. package/dist/upgrade.js +324 -0
  79. package/dist/upgrade.js.map +1 -0
  80. package/package.json +1 -1
  81. package/templates/.claude/skills/dxkit-action/SKILL.md +6 -6
  82. package/templates/.claude/skills/dxkit-config/SKILL.md +7 -7
  83. package/templates/.claude/skills/dxkit-fix/SKILL.md +165 -0
  84. package/templates/.claude/skills/dxkit-hooks/SKILL.md +8 -8
  85. package/templates/.claude/skills/dxkit-init/SKILL.md +3 -3
  86. package/templates/.claude/skills/dxkit-learn/SKILL.md +9 -9
  87. package/templates/.claude/skills/dxkit-onboard/SKILL.md +246 -0
  88. package/templates/.claude/skills/dxkit-reports/SKILL.md +18 -18
  89. package/templates/.claude/skills/dxkit-update/SKILL.md +164 -0
  90. package/templates/.devcontainer/devcontainer.json +6 -15
  91. package/templates/.devcontainer/post-create.sh +19 -4
package/dist/update.d.ts CHANGED
@@ -1,2 +1,43 @@
1
+ import { Manifest, ManifestInstallFlags } from './types';
2
+ /**
3
+ * Re-exports the shared type so callers within the update module can
4
+ * import either name. The canonical declaration lives in `./types` so
5
+ * the manifest schema is one place.
6
+ */
7
+ export type InstallFlags = ManifestInstallFlags;
8
+ /**
9
+ * Workspace-derived flag detection. Used in two cases:
10
+ * 1. The manifest doesn't carry `installFlags` (pre-2.5.2 manifests
11
+ * written by dxkit 2.5.0 / 2.5.1).
12
+ * 2. Defensive fallback if manifest is corrupt / partial.
13
+ *
14
+ * False-positive risk is bounded — the installers themselves are
15
+ * idempotent and emit sidecars when they detect competing files, so
16
+ * even spurious detection can't clobber customer state.
17
+ */
18
+ export declare function detectInstallFlags(cwd: string): InstallFlags;
19
+ /**
20
+ * Resolves the install flags for an update. Manifest-stored values
21
+ * take precedence (canonical source of truth, set at init time);
22
+ * workspace detection is the fallback for legacy manifests.
23
+ *
24
+ * Returns the flags plus a `source` field so the caller can decide
25
+ * whether to self-migrate (write detected flags back to the manifest
26
+ * so the NEXT update reads them from the canonical source).
27
+ */
28
+ export declare function resolveInstallFlags(manifest: Manifest, cwd: string): {
29
+ flags: InstallFlags;
30
+ source: 'manifest' | 'workspace-derived';
31
+ };
32
+ /**
33
+ * Patch `installFlags` into the on-disk manifest. Used by init (after
34
+ * ship-installers complete to record what actually landed) AND by
35
+ * update's self-migration path on legacy manifests.
36
+ *
37
+ * Idempotent: writing the same flags twice is a no-op. Defensive
38
+ * against a manifest file being deleted mid-flight (returns false in
39
+ * that case rather than throwing).
40
+ */
41
+ export declare function writeInstallFlags(cwd: string, flags: InstallFlags): boolean;
1
42
  export declare function runUpdate(cwd: string, force: boolean, rescan?: boolean): Promise<void>;
2
43
  //# sourceMappingURL=update.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../src/update.ts"],"names":[],"mappings":"AAOA,wBAAsB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,UAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAuD1F"}
1
+ {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../src/update.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAezD;;;;GAIG;AACH,MAAM,MAAM,YAAY,GAAG,oBAAoB,CAAC;AAEhD;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY,CAY5D;AAED;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,QAAQ,EAClB,GAAG,EAAE,MAAM,GACV;IAAE,KAAK,EAAE,YAAY,CAAC;IAAC,MAAM,EAAE,UAAU,GAAG,mBAAmB,CAAA;CAAE,CAKnE;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO,CAW3E;AAsBD,wBAAsB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,UAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAgI1F"}
package/dist/update.js CHANGED
@@ -33,12 +33,88 @@ var __importStar = (this && this.__importStar) || (function () {
33
33
  };
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.detectInstallFlags = detectInstallFlags;
37
+ exports.resolveInstallFlags = resolveInstallFlags;
38
+ exports.writeInstallFlags = writeInstallFlags;
36
39
  exports.runUpdate = runUpdate;
37
40
  const fs = __importStar(require("fs"));
38
41
  const path = __importStar(require("path"));
39
42
  const detect_1 = require("./detect");
40
43
  const generator_1 = require("./generator");
44
+ const ship_installers_1 = require("./ship-installers");
41
45
  const logger = __importStar(require("./logger"));
46
+ /**
47
+ * Workspace-derived flag detection. Used in two cases:
48
+ * 1. The manifest doesn't carry `installFlags` (pre-2.5.2 manifests
49
+ * written by dxkit 2.5.0 / 2.5.1).
50
+ * 2. Defensive fallback if manifest is corrupt / partial.
51
+ *
52
+ * False-positive risk is bounded — the installers themselves are
53
+ * idempotent and emit sidecars when they detect competing files, so
54
+ * even spurious detection can't clobber customer state.
55
+ */
56
+ function detectInstallFlags(cwd) {
57
+ return {
58
+ withDxkitAgents: fs.existsSync(path.join(cwd, '.claude', 'skills', 'dxkit-learn')),
59
+ withHooks: fs.existsSync(path.join(cwd, '.githooks', 'pre-push')),
60
+ withPrecommit: fs.existsSync(path.join(cwd, '.githooks', 'pre-commit')),
61
+ withDevcontainer: fs.existsSync(path.join(cwd, '.devcontainer', 'devcontainer.json')),
62
+ withCiGuardrails: fs.existsSync(path.join(cwd, '.github', 'workflows', 'dxkit-guardrails.yml')),
63
+ withBaselineRefresh: fs.existsSync(path.join(cwd, '.github', 'workflows', 'dxkit-baseline-refresh.yml')),
64
+ withPrReview: fs.existsSync(path.join(cwd, '.github', 'workflows', 'pr-review.yml')),
65
+ };
66
+ }
67
+ /**
68
+ * Resolves the install flags for an update. Manifest-stored values
69
+ * take precedence (canonical source of truth, set at init time);
70
+ * workspace detection is the fallback for legacy manifests.
71
+ *
72
+ * Returns the flags plus a `source` field so the caller can decide
73
+ * whether to self-migrate (write detected flags back to the manifest
74
+ * so the NEXT update reads them from the canonical source).
75
+ */
76
+ function resolveInstallFlags(manifest, cwd) {
77
+ if (manifest.installFlags) {
78
+ return { flags: manifest.installFlags, source: 'manifest' };
79
+ }
80
+ return { flags: detectInstallFlags(cwd), source: 'workspace-derived' };
81
+ }
82
+ /**
83
+ * Patch `installFlags` into the on-disk manifest. Used by init (after
84
+ * ship-installers complete to record what actually landed) AND by
85
+ * update's self-migration path on legacy manifests.
86
+ *
87
+ * Idempotent: writing the same flags twice is a no-op. Defensive
88
+ * against a manifest file being deleted mid-flight (returns false in
89
+ * that case rather than throwing).
90
+ */
91
+ function writeInstallFlags(cwd, flags) {
92
+ const manifestPath = path.join(cwd, '.vyuh-dxkit.json');
93
+ if (!fs.existsSync(manifestPath))
94
+ return false;
95
+ try {
96
+ const manifest = JSON.parse(fs.readFileSync(manifestPath, 'utf-8'));
97
+ manifest.installFlags = flags;
98
+ fs.writeFileSync(manifestPath, JSON.stringify(manifest, null, 2) + '\n');
99
+ return true;
100
+ }
101
+ catch {
102
+ return false;
103
+ }
104
+ }
105
+ function mergeShipResult(agg, result) {
106
+ agg.created.push(...result.installed);
107
+ agg.skipped.push(...result.skipped);
108
+ // Sidecars are conflict-reference files written into a `.dxkit-reference/`
109
+ // subdir when the customer already had a competing file at the target
110
+ // path. Surface them as notes so the customer knows where to look for
111
+ // the reference content without conflating them with regular installs.
112
+ for (const sidecar of result.sidecars) {
113
+ agg.notes.push(`Sidecar reference: ${sidecar} (your file at the canonical path was preserved)`);
114
+ }
115
+ if (result.notes)
116
+ agg.notes.push(...result.notes);
117
+ }
42
118
  async function runUpdate(cwd, force, rescan = false) {
43
119
  logger.header('vyuh-dxkit update');
44
120
  const manifestPath = path.join(cwd, '.vyuh-dxkit.json');
@@ -55,20 +131,37 @@ async function runUpdate(cwd, force, rescan = false) {
55
131
  process.exit(1);
56
132
  }
57
133
  logger.info(`Previous init: ${manifest.generatedAt} (mode: ${manifest.mode})`);
58
- // Re-detect stack
134
+ const { flags, source } = resolveInstallFlags(manifest, cwd);
135
+ const flagSummary = Object.entries(flags)
136
+ .filter(([, v]) => v)
137
+ .map(([k]) => k)
138
+ .join(', ');
139
+ if (flagSummary) {
140
+ const sourceTag = source === 'manifest' ? 'manifest' : 'detected from workspace';
141
+ logger.info(`Install surfaces (${sourceTag}): ${flagSummary}`);
142
+ }
143
+ // Self-migrate: if the manifest didn't carry installFlags (legacy
144
+ // pre-2.5.2 manifest), stamp the detected flags back so the NEXT
145
+ // update reads from the canonical source instead of re-detecting.
146
+ if (source === 'workspace-derived') {
147
+ if (writeInstallFlags(cwd, flags)) {
148
+ logger.dim(' → Stamped install flags into manifest for future updates.');
149
+ }
150
+ }
59
151
  logger.info('Re-detecting stack...');
60
152
  const detected = (0, detect_1.detect)(cwd);
61
- // Merge: new detection overrides, but preserve mode and thresholds from manifest
62
153
  const config = {
63
154
  ...detected,
64
155
  coverageThreshold: manifest.config.coverageThreshold,
65
156
  claudeCode: manifest.config.claudeCode,
66
157
  };
67
- // Merge languages: keep enabled if previously enabled OR newly detected
158
+ // Merge languages: keep enabled if previously enabled OR newly detected.
159
+ // Preserves customer-pinned active packs even if detection no longer
160
+ // sees the source files (e.g. mid-refactor).
68
161
  for (const lang of Object.keys(config.languages)) {
69
162
  config.languages[lang] = config.languages[lang] || manifest.config.languages[lang];
70
163
  }
71
- // If rescan requested, remove codebase skill so it gets regenerated
164
+ // --rescan: clear the codebase skill so it gets regenerated fresh.
72
165
  if (rescan) {
73
166
  const codebasePath = path.join(cwd, '.claude', 'skills', 'codebase');
74
167
  if (fs.existsSync(codebasePath)) {
@@ -76,18 +169,64 @@ async function runUpdate(cwd, force, rescan = false) {
76
169
  logger.info('Cleared codebase skill for rescan');
77
170
  }
78
171
  }
79
- // Re-generate (noScan=false so codebase gets regenerated if rescan or first time)
80
- const result = await (0, generator_1.generate)(cwd, config, manifest.mode, force, false);
81
- // Summary
82
- console.log('');
172
+ const aggregate = {
173
+ created: [],
174
+ skipped: [],
175
+ overwritten: [],
176
+ notes: [],
177
+ };
178
+ // ─── Core generation (templates + per-language rules + dxkit skills) ────
179
+ // Re-run the template-driven generator with the same withDxkitAgents
180
+ // choice the customer's original init landed on. Pre-this-change the
181
+ // update CLI always passed `withDxkitAgents=false` so the six dxkit-*
182
+ // skills never got refreshed — a new dxkit-* skill prose change in a
183
+ // later dxkit version couldn't reach customers who'd already initialized.
184
+ const generated = await (0, generator_1.generate)(cwd, config, manifest.mode, force, false, flags.withDxkitAgents);
185
+ aggregate.created.push(...generated.created);
186
+ aggregate.skipped.push(...generated.skipped);
187
+ aggregate.overwritten.push(...generated.overwritten);
188
+ // ─── Optional ship surfaces (devcontainer / hooks / CI / PR review) ─────
189
+ // Each installer is idempotent and renders sidecars when the customer
190
+ // has a conflicting file unless --force is passed. So re-running them
191
+ // here picks up template changes (e.g. the per-stack devcontainer
192
+ // extensions from 2.5.1 / Sprint 1.5) without clobbering customer edits.
193
+ if (flags.withDevcontainer) {
194
+ mergeShipResult(aggregate, (0, ship_installers_1.installDevcontainer)(cwd, { force }));
195
+ }
196
+ if (flags.withHooks) {
197
+ mergeShipResult(aggregate, (0, ship_installers_1.installHooks)(cwd, { force, withPrecommit: flags.withPrecommit }));
198
+ // The postinstall hook chain — reinstall in case the customer's
199
+ // package.json grew its own postinstall after init landed.
200
+ mergeShipResult(aggregate, (0, ship_installers_1.installHooksPostinstall)(cwd, { force }));
201
+ }
202
+ if (flags.withCiGuardrails) {
203
+ mergeShipResult(aggregate, (0, ship_installers_1.installCiGuardrails)(cwd, { force }));
204
+ }
205
+ if (flags.withBaselineRefresh) {
206
+ mergeShipResult(aggregate, (0, ship_installers_1.installCiBaselineRefresh)(cwd, { force }));
207
+ }
208
+ if (flags.withPrReview) {
209
+ mergeShipResult(aggregate, (0, ship_installers_1.installPrReview)(cwd, { force }));
210
+ }
211
+ // Ignore files (.gitignore + .dxkit-ignore) — always refresh because
212
+ // their content can grow with new dxkit features (e.g. graphify-out/
213
+ // entry added in 2.5.1).
214
+ mergeShipResult(aggregate, (0, ship_installers_1.installIgnoreFiles)(cwd, { force }));
215
+ // ─── Summary ───────────────────────────────────────────────────────────
216
+ console.log(''); // slop-ok
83
217
  logger.header('Update Summary');
84
- if (result.created.length)
85
- logger.success(`Created: ${result.created.length} new files`);
86
- if (result.skipped.length)
87
- logger.warn(`Skipped: ${result.skipped.length} files (preserved)`);
88
- if (result.overwritten.length)
89
- logger.info(`Updated: ${result.overwritten.length} files`);
90
- console.log('');
218
+ if (aggregate.created.length) {
219
+ logger.success(`Created: ${aggregate.created.length} new file(s)`);
220
+ }
221
+ if (aggregate.overwritten.length) {
222
+ logger.info(`Updated: ${aggregate.overwritten.length} file(s)`);
223
+ }
224
+ if (aggregate.skipped.length) {
225
+ logger.warn(`Skipped: ${aggregate.skipped.length} file(s) (preserved — pass --force to overwrite)`);
226
+ }
227
+ for (const note of aggregate.notes)
228
+ logger.dim(note);
229
+ console.log(''); // slop-ok
91
230
  logger.success('Update complete. Evolved files (gotchas, conventions) preserved.');
92
231
  }
93
232
  //# sourceMappingURL=update.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"update.js","sourceRoot":"","sources":["../src/update.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"update.js","sourceRoot":"","sources":["../src/update.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,88 @@
1
+ /**
2
+ * `vyuh-dxkit upgrade` — combined CLI for the dxkit upgrade flow.
3
+ *
4
+ * Two modes, one subcommand:
5
+ *
6
+ * `--plan [--json]` — preview only. Emits UpgradePlan JSON
7
+ * (consumed by dxkit-update skill) or text-prose summary. No
8
+ * mutations. Used to inspect what an upgrade would do before
9
+ * committing.
10
+ *
11
+ * (no flag, or `--yes`) — execute. Runs the three-step upgrade:
12
+ * 1. `npm install @vyuhlabs/dxkit@<target>` (binary)
13
+ * 2. `npx vyuh-dxkit update` (scaffold refresh)
14
+ * 3. `npx vyuh-dxkit doctor` (verify)
15
+ * Then prints devcontainer-rebuild instructions if .devcontainer/
16
+ * was refreshed.
17
+ *
18
+ * Architectural mirror of the doctor → dxkit-fix pattern: structured
19
+ * CLI output (--plan --json) for skill consumption, execution mode
20
+ * for direct human use. Same shape, different content.
21
+ */
22
+ export type DeltaKind = 'none' | 'patch' | 'minor' | 'major' | 'downgrade';
23
+ export interface UpgradeStep {
24
+ /** Shell command to run (verbatim — what gets executed). */
25
+ command: string;
26
+ /** One-line purpose shown in plan + before each execution. */
27
+ purpose: string;
28
+ /** Optional steps the customer can decline (e.g. devcontainer rebuild). */
29
+ optional?: boolean;
30
+ }
31
+ export interface UpgradePlan {
32
+ schema: 'upgrade-plan.v1';
33
+ generatedAt: string;
34
+ cwd: string;
35
+ current: {
36
+ /** Installed binary version (from `npx vyuh-dxkit --version`). */
37
+ binary: string | null;
38
+ /** Scaffold version recorded in manifest. */
39
+ scaffold: string | null;
40
+ };
41
+ /** Target version — `--target=X.Y.Z` or 'latest' from npm. */
42
+ target: string;
43
+ delta: DeltaKind;
44
+ /**
45
+ * Recommended execution sequence. Each step is independently
46
+ * idempotent — re-running is safe.
47
+ */
48
+ steps: UpgradeStep[];
49
+ /**
50
+ * Customer-facing warnings (peer-dep risks, breaking changes,
51
+ * "devcontainer will need rebuild after"). Empty when nothing
52
+ * actionable.
53
+ */
54
+ warnings: string[];
55
+ /**
56
+ * Brief note pointing the customer at the canonical changelog.
57
+ * Detailed per-version highlight parsing is a future enhancement —
58
+ * for now we keep this simple and link to the source of truth.
59
+ */
60
+ changelogNote: string;
61
+ }
62
+ export interface UpgradeOpts {
63
+ /** Pin to a specific version. Default: latest from npm. */
64
+ target?: string;
65
+ /** Skip interactive confirmations. */
66
+ yes?: boolean;
67
+ /** Print commands without executing. */
68
+ dryRun?: boolean;
69
+ /** Emit plan only; don't execute. */
70
+ planOnly?: boolean;
71
+ /** Emit plan as JSON instead of prose (only meaningful with planOnly). */
72
+ json?: boolean;
73
+ /**
74
+ * Injectable version reads. Useful for tests that need deterministic
75
+ * plans without subprocess fanout; production code leaves these
76
+ * undefined and the readers shell out as needed.
77
+ */
78
+ _readBinary?: (cwd: string) => string | null;
79
+ _readLatest?: () => string;
80
+ }
81
+ /**
82
+ * Classify the delta between two semver-shaped strings. Returns
83
+ * `'none'` if equal, `'downgrade'` if target < current.
84
+ */
85
+ export declare function classifyDelta(current: string | null, target: string): DeltaKind;
86
+ export declare function buildUpgradePlan(cwd: string, opts?: UpgradeOpts): UpgradePlan;
87
+ export declare function runUpgrade(cwd: string, opts?: UpgradeOpts): Promise<void>;
88
+ //# sourceMappingURL=upgrade.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upgrade.d.ts","sourceRoot":"","sources":["../src/upgrade.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAQH,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,WAAW,CAAC;AAE3E,MAAM,WAAW,WAAW;IAC1B,4DAA4D;IAC5D,OAAO,EAAE,MAAM,CAAC;IAChB,8DAA8D;IAC9D,OAAO,EAAE,MAAM,CAAC;IAChB,2EAA2E;IAC3E,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,iBAAiB,CAAC;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE;QACP,kEAAkE;QAClE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;QACtB,6CAA6C;QAC7C,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;KACzB,CAAC;IACF,8DAA8D;IAC9D,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,SAAS,CAAC;IACjB;;;OAGG;IACH,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB;;;;OAIG;IACH,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB;;;;OAIG;IACH,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,WAAW;IAC1B,2DAA2D;IAC3D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,sCAAsC;IACtC,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,wCAAwC;IACxC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,qCAAqC;IACrC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,0EAA0E;IAC1E,IAAI,CAAC,EAAE,OAAO,CAAC;IACf;;;;OAIG;IACH,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;IAC7C,WAAW,CAAC,EAAE,MAAM,MAAM,CAAC;CAC5B;AA4CD;;;GAGG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,EAAE,MAAM,EAAE,MAAM,GAAG,SAAS,CAY/E;AAMD,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,GAAE,WAAgB,GAAG,WAAW,CA6FjF;AAyHD,wBAAsB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,GAAE,WAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAcnF"}