@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.
- package/CHANGELOG.md +154 -0
- package/README.md +48 -28
- package/dist/analyzers/tools/tool-registry.d.ts.map +1 -1
- package/dist/analyzers/tools/tool-registry.js +25 -8
- package/dist/analyzers/tools/tool-registry.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +66 -10
- package/dist/cli.js.map +1 -1
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +0 -10
- package/dist/constants.js.map +1 -1
- package/dist/detect.d.ts.map +1 -1
- package/dist/detect.js +0 -15
- package/dist/detect.js.map +1 -1
- package/dist/doctor.d.ts +78 -1
- package/dist/doctor.d.ts.map +1 -1
- package/dist/doctor.js +500 -101
- package/dist/doctor.js.map +1 -1
- package/dist/generator.d.ts.map +1 -1
- package/dist/generator.js +15 -0
- package/dist/generator.js.map +1 -1
- package/dist/languages/csharp.d.ts.map +1 -1
- package/dist/languages/csharp.js +1 -0
- package/dist/languages/csharp.js.map +1 -1
- package/dist/languages/go.d.ts.map +1 -1
- package/dist/languages/go.js +1 -0
- package/dist/languages/go.js.map +1 -1
- package/dist/languages/index.d.ts +25 -0
- package/dist/languages/index.d.ts.map +1 -1
- package/dist/languages/index.js +44 -0
- package/dist/languages/index.js.map +1 -1
- package/dist/languages/java.d.ts.map +1 -1
- package/dist/languages/java.js +1 -0
- package/dist/languages/java.js.map +1 -1
- package/dist/languages/kotlin.d.ts.map +1 -1
- package/dist/languages/kotlin.js +1 -0
- package/dist/languages/kotlin.js.map +1 -1
- package/dist/languages/python.d.ts.map +1 -1
- package/dist/languages/python.js +10 -1
- package/dist/languages/python.js.map +1 -1
- package/dist/languages/ruby.d.ts.map +1 -1
- package/dist/languages/ruby.js +1 -0
- package/dist/languages/ruby.js.map +1 -1
- package/dist/languages/rust.d.ts.map +1 -1
- package/dist/languages/rust.js +1 -0
- package/dist/languages/rust.js.map +1 -1
- package/dist/languages/types.d.ts +20 -0
- package/dist/languages/types.d.ts.map +1 -1
- package/dist/languages/typescript.d.ts.map +1 -1
- package/dist/languages/typescript.js +1 -0
- package/dist/languages/typescript.js.map +1 -1
- package/dist/prompts.d.ts.map +1 -1
- package/dist/prompts.js +0 -5
- package/dist/prompts.js.map +1 -1
- package/dist/setup-branch-protection.d.ts +34 -0
- package/dist/setup-branch-protection.d.ts.map +1 -0
- package/dist/setup-branch-protection.js +190 -0
- package/dist/setup-branch-protection.js.map +1 -0
- package/dist/setup-gh.d.ts +75 -0
- package/dist/setup-gh.d.ts.map +1 -0
- package/dist/setup-gh.js +213 -0
- package/dist/setup-gh.js.map +1 -0
- package/dist/setup-prebuild.d.ts +34 -0
- package/dist/setup-prebuild.d.ts.map +1 -0
- package/dist/setup-prebuild.js +181 -0
- package/dist/setup-prebuild.js.map +1 -0
- package/dist/ship-installers.d.ts.map +1 -1
- package/dist/ship-installers.js +19 -4
- package/dist/ship-installers.js.map +1 -1
- package/dist/types.d.ts +24 -6
- package/dist/types.d.ts.map +1 -1
- package/dist/update.d.ts +41 -0
- package/dist/update.d.ts.map +1 -1
- package/dist/update.js +154 -15
- package/dist/update.js.map +1 -1
- package/dist/upgrade.d.ts +88 -0
- package/dist/upgrade.d.ts.map +1 -0
- package/dist/upgrade.js +324 -0
- package/dist/upgrade.js.map +1 -0
- package/package.json +1 -1
- package/templates/.claude/skills/dxkit-action/SKILL.md +6 -6
- package/templates/.claude/skills/dxkit-config/SKILL.md +7 -7
- package/templates/.claude/skills/dxkit-fix/SKILL.md +165 -0
- package/templates/.claude/skills/dxkit-hooks/SKILL.md +8 -8
- package/templates/.claude/skills/dxkit-init/SKILL.md +3 -3
- package/templates/.claude/skills/dxkit-learn/SKILL.md +9 -9
- package/templates/.claude/skills/dxkit-onboard/SKILL.md +246 -0
- package/templates/.claude/skills/dxkit-reports/SKILL.md +18 -18
- package/templates/.claude/skills/dxkit-update/SKILL.md +164 -0
- package/templates/.devcontainer/devcontainer.json +6 -15
- 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
|
package/dist/update.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../src/update.ts"],"names":[],"mappings":"
|
|
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
|
-
|
|
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
|
-
//
|
|
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
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
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 (
|
|
85
|
-
logger.success(`Created: ${
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
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
|
package/dist/update.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.js","sourceRoot":"","sources":["../src/update.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
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"}
|