loadouts 0.2.0 → 0.2.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 (50) hide show
  1. package/README.md +3 -1
  2. package/dist/builtins/index.d.ts.map +1 -1
  3. package/dist/builtins/index.js +26 -13
  4. package/dist/builtins/index.js.map +1 -1
  5. package/dist/builtins/tools/cursor.js +2 -2
  6. package/dist/builtins/tools/cursor.js.map +1 -1
  7. package/dist/builtins/tools/opencode.d.ts.map +1 -1
  8. package/dist/builtins/tools/opencode.js +8 -2
  9. package/dist/builtins/tools/opencode.js.map +1 -1
  10. package/dist/cli/commands/check.d.ts.map +1 -1
  11. package/dist/cli/commands/check.js +17 -1
  12. package/dist/cli/commands/check.js.map +1 -1
  13. package/dist/cli/commands/doctor.d.ts.map +1 -1
  14. package/dist/cli/commands/doctor.js +484 -50
  15. package/dist/cli/commands/doctor.js.map +1 -1
  16. package/dist/cli/commands/init.d.ts.map +1 -1
  17. package/dist/cli/commands/init.js +6 -1
  18. package/dist/cli/commands/init.js.map +1 -1
  19. package/dist/cli/commands/install.d.ts +6 -3
  20. package/dist/cli/commands/install.d.ts.map +1 -1
  21. package/dist/cli/commands/install.js +225 -87
  22. package/dist/cli/commands/install.js.map +1 -1
  23. package/dist/cli/commands/rule.js +11 -7
  24. package/dist/cli/commands/rule.js.map +1 -1
  25. package/dist/cli/commands/sanitize.d.ts +3 -2
  26. package/dist/cli/commands/sanitize.d.ts.map +1 -1
  27. package/dist/cli/commands/sanitize.js +27 -13
  28. package/dist/cli/commands/sanitize.js.map +1 -1
  29. package/dist/cli/commands/skill.d.ts.map +1 -1
  30. package/dist/cli/commands/skill.js +23 -14
  31. package/dist/cli/commands/skill.js.map +1 -1
  32. package/dist/cli/commands/status.d.ts.map +1 -1
  33. package/dist/cli/commands/status.js +15 -10
  34. package/dist/cli/commands/status.js.map +1 -1
  35. package/dist/core/config.d.ts +73 -13
  36. package/dist/core/config.d.ts.map +1 -1
  37. package/dist/core/config.js +224 -34
  38. package/dist/core/config.js.map +1 -1
  39. package/dist/core/import-discovery.d.ts +9 -4
  40. package/dist/core/import-discovery.d.ts.map +1 -1
  41. package/dist/core/import-discovery.js +414 -141
  42. package/dist/core/import-discovery.js.map +1 -1
  43. package/dist/core/schema.d.ts +91 -11
  44. package/dist/core/schema.d.ts.map +1 -1
  45. package/dist/core/schema.js +28 -0
  46. package/dist/core/schema.js.map +1 -1
  47. package/docs/commands.md +4 -2
  48. package/docs/index.md +1 -0
  49. package/docs/quickstart.md +4 -1
  50. package/package.json +1 -1
@@ -9,30 +9,442 @@
9
9
  import { Command } from "commander";
10
10
  import * as os from "node:os";
11
11
  import * as path from "node:path";
12
+ import * as readline from "node:readline";
13
+ import chalk from "chalk";
12
14
  import { findNearestLoadoutRoot, getGlobalRoot } from "../../core/discovery.js";
15
+ import { registry } from "../../core/registry.js";
13
16
  import { resolveScopes, SCOPE_FLAGS } from "../../core/scope.js";
14
- import { inspectGitignoreHealth, rebuildAllGitignores, updateLoadoutsGitignore, } from "../../lib/gitignore.js";
15
- import { heading, log } from "../../lib/output.js";
17
+ import { getManagedPathsFromTarget, inspectGitignoreHealth, rebuildAllGitignores, removeLegacyRootGitignoreSection, updateTargetGitignore, updateLoadoutsGitignore, } from "../../lib/gitignore.js";
18
+ import { calculateColumnWidths, getToolColumns, renderHeader, renderSeparator, sortArtifacts, truncatePath, } from "../../lib/artifact-table.js";
19
+ import { heading, log, list } from "../../lib/output.js";
16
20
  function formatScope(scope) {
17
21
  return scope === "project" ? "project" : "global";
18
22
  }
19
- function renderHealthReport(scope, rootPath, projectRoot, report, verbose) {
20
- const scopeLabel = formatScope(scope);
21
- if (report.hasLegacyRootSection) {
22
- const rootGitignore = path.join(projectRoot, ".gitignore");
23
- log.warn(`[${scopeLabel}] legacy managed section found in ${rootGitignore}`);
23
+ function createPrompt() {
24
+ return readline.createInterface({
25
+ input: process.stdin,
26
+ output: process.stdout,
27
+ });
28
+ }
29
+ async function askQuestion(rl, question) {
30
+ return new Promise((resolve) => {
31
+ rl.question(question, (answer) => {
32
+ resolve(answer.trim().toLowerCase());
33
+ });
34
+ });
35
+ }
36
+ function renderHealthTable(healthByScope) {
37
+ const rows = healthByScope.map(({ scope, report }) => {
38
+ const status = report.issues === 0 ? "healthy" : "issues";
39
+ const targetCell = report.targetMismatches.length === 0 ? "✓" : `~${report.targetMismatches.length}`;
40
+ return {
41
+ scope: formatScope(scope),
42
+ legacy: report.hasLegacyRootSection ? "!" : "✓",
43
+ state: report.loadoutsStateOutOfDate ? "!" : "✓",
44
+ targets: targetCell,
45
+ status,
46
+ };
47
+ });
48
+ if (rows.length === 0) {
49
+ log.dim(" No scopes available.");
50
+ return;
24
51
  }
25
- if (report.loadoutsStateOutOfDate) {
26
- log.warn(`[${scopeLabel}] ${path.join(rootPath, ".gitignore")} is missing required state entries`);
52
+ const scopeWidth = Math.max("scope".length, ...rows.map((r) => r.scope.length));
53
+ const statusWidth = Math.max("status".length, ...rows.map((r) => r.status.length));
54
+ const header = [
55
+ chalk.dim("scope".padEnd(scopeWidth)),
56
+ chalk.dim("legacy"),
57
+ chalk.dim("state"),
58
+ chalk.dim("targets"),
59
+ chalk.dim("status".padEnd(statusWidth)),
60
+ ].join(" ");
61
+ console.log(` ${header}`);
62
+ const separator = [
63
+ "─".repeat(scopeWidth),
64
+ "─".repeat("legacy".length),
65
+ "─".repeat("state".length),
66
+ "─".repeat("targets".length),
67
+ "─".repeat(statusWidth),
68
+ ].join(" ");
69
+ console.log(chalk.dim(` ${separator}`));
70
+ for (const row of rows) {
71
+ const legacy = row.legacy === "!" ? chalk.red("!") : chalk.green("✓");
72
+ const state = row.state === "!" ? chalk.red("!") : chalk.green("✓");
73
+ const targets = row.targets.startsWith("~")
74
+ ? chalk.yellow(row.targets)
75
+ : chalk.green(row.targets);
76
+ const status = row.status === "healthy"
77
+ ? chalk.green(row.status.padEnd(statusWidth))
78
+ : chalk.yellow(row.status.padEnd(statusWidth));
79
+ console.log(` ${row.scope.padEnd(scopeWidth)} ${legacy.padEnd("legacy".length)} ${state.padEnd("state".length)} ${targets.padEnd("targets".length)} ${status}`);
80
+ }
81
+ }
82
+ function analyzeDrift(healthByScope) {
83
+ const driftByScope = new Map();
84
+ for (const { scope, rootPath, projectRoot, report } of healthByScope) {
85
+ if (report.issues === 0)
86
+ continue;
87
+ if (report.targetMismatches.length > 0) {
88
+ const scopeDrift = driftByScope.get(scope) ??
89
+ { tools: new Set(), artifacts: new Map(), unresolvedPaths: new Set() };
90
+ for (const mismatch of report.targetMismatches) {
91
+ const expected = new Set(mismatch.expectedPaths);
92
+ const actual = new Set(mismatch.actualPaths);
93
+ const tool = inferToolForTarget(scope, projectRoot, mismatch.targetDir);
94
+ if (tool) {
95
+ scopeDrift.tools.add(tool);
96
+ }
97
+ for (const expectedPath of mismatch.expectedPaths) {
98
+ const artifact = inferArtifactFromGitignorePath(expectedPath);
99
+ if (!artifact || !tool)
100
+ continue;
101
+ const key = `${artifact.kind}:${artifact.name}`;
102
+ const row = scopeDrift.artifacts.get(key) ??
103
+ {
104
+ kind: artifact.kind,
105
+ name: artifact.name,
106
+ toolStatus: new Map(),
107
+ missingPaths: new Map(),
108
+ stalePaths: new Map(),
109
+ };
110
+ const status = actual.has(expectedPath) ? "ok" : "missing";
111
+ const existing = row.toolStatus.get(tool);
112
+ if (!existing || status === "missing") {
113
+ row.toolStatus.set(tool, status);
114
+ }
115
+ if (status === "missing") {
116
+ row.missingPaths.set(tool, [...(row.missingPaths.get(tool) ?? []), expectedPath]);
117
+ }
118
+ scopeDrift.artifacts.set(key, row);
119
+ }
120
+ for (const actualPath of mismatch.actualPaths) {
121
+ if (expected.has(actualPath))
122
+ continue;
123
+ const artifact = inferArtifactFromGitignorePath(actualPath);
124
+ if (!artifact || !tool) {
125
+ const targetGitignore = formatPath(path.join(mismatch.targetDir, ".gitignore"), projectRoot);
126
+ scopeDrift.unresolvedPaths.add(`${targetGitignore}: ${actualPath}`);
127
+ continue;
128
+ }
129
+ const key = `${artifact.kind}:${artifact.name}`;
130
+ const row = scopeDrift.artifacts.get(key) ??
131
+ {
132
+ kind: artifact.kind,
133
+ name: artifact.name,
134
+ toolStatus: new Map(),
135
+ missingPaths: new Map(),
136
+ stalePaths: new Map(),
137
+ };
138
+ const existing = row.toolStatus.get(tool);
139
+ if (existing !== "missing") {
140
+ row.toolStatus.set(tool, "stale");
141
+ }
142
+ row.stalePaths.set(tool, [...(row.stalePaths.get(tool) ?? []), actualPath]);
143
+ scopeDrift.artifacts.set(key, row);
144
+ }
145
+ }
146
+ driftByScope.set(scope, scopeDrift);
147
+ }
27
148
  }
28
- if (report.targetMismatches.length > 0) {
29
- log.warn(`[${scopeLabel}] ${report.targetMismatches.length} target .gitignore file(s) out of date`);
30
- if (verbose) {
149
+ const scopeDrifts = [...driftByScope.entries()].map(([scope, drift]) => ({
150
+ scope,
151
+ tools: [...drift.tools],
152
+ artifacts: [...drift.artifacts.values()],
153
+ unresolvedPaths: [...drift.unresolvedPaths].sort(),
154
+ }));
155
+ return { scopeDrifts };
156
+ }
157
+ function renderHealthDetails(healthByScope, analysis, verbose) {
158
+ const issueDetails = [];
159
+ for (const { scope, rootPath, projectRoot, report } of healthByScope) {
160
+ if (report.issues === 0)
161
+ continue;
162
+ const scopeLabel = `[${formatScope(scope)}]`;
163
+ if (report.hasLegacyRootSection) {
164
+ const rootGitignore = path.join(projectRoot, ".gitignore");
165
+ log.warn(`${scopeLabel} legacy managed section in ${rootGitignore}`);
166
+ issueDetails.push({
167
+ scope: formatScope(scope),
168
+ issue: "legacy",
169
+ path: formatPath(rootGitignore, projectRoot),
170
+ reason: "legacy managed marker section present",
171
+ });
172
+ }
173
+ if (report.loadoutsStateOutOfDate) {
174
+ log.warn(`${scopeLabel} ${path.join(rootPath, ".gitignore")} missing required state entries`);
175
+ issueDetails.push({
176
+ scope: formatScope(scope),
177
+ issue: "state",
178
+ path: formatPath(path.join(rootPath, ".gitignore"), projectRoot),
179
+ reason: "required state entries missing or stale",
180
+ });
181
+ }
182
+ if (report.targetMismatches.length > 0) {
183
+ log.warn(`${scopeLabel} ${report.targetMismatches.length} target .gitignore file(s) out of date`);
31
184
  for (const mismatch of report.targetMismatches) {
32
- log.dim(` ${mismatch.targetDir}: expected ${mismatch.expectedPaths.length}, found ${mismatch.actualPaths.length}`);
185
+ const expected = new Set(mismatch.expectedPaths);
186
+ const actual = new Set(mismatch.actualPaths);
187
+ const missing = mismatch.expectedPaths.filter((p) => !actual.has(p)).length;
188
+ const stale = mismatch.actualPaths.filter((p) => !expected.has(p)).length;
189
+ const unknownExpected = mismatch.expectedPaths.filter((p) => !inferArtifactFromGitignorePath(p)).length;
190
+ const unknownActual = mismatch.actualPaths.filter((p) => !inferArtifactFromGitignorePath(p)).length;
191
+ const reasons = [];
192
+ if (missing > 0)
193
+ reasons.push(`${missing} missing`);
194
+ if (stale > 0)
195
+ reasons.push(`${stale} stale`);
196
+ if (unknownExpected > 0)
197
+ reasons.push(`${unknownExpected} unknown expected`);
198
+ if (unknownActual > 0)
199
+ reasons.push(`${unknownActual} unknown stale`);
200
+ if (reasons.length === 0)
201
+ reasons.push("managed section differs");
202
+ issueDetails.push({
203
+ scope: formatScope(scope),
204
+ issue: "target",
205
+ path: formatPath(path.join(mismatch.targetDir, ".gitignore"), projectRoot),
206
+ reason: reasons.join(", "),
207
+ });
33
208
  }
34
209
  }
35
210
  }
211
+ if (issueDetails.length > 0) {
212
+ console.log();
213
+ renderIssueDetailsTable(issueDetails);
214
+ }
215
+ for (const scopeDrift of analysis.scopeDrifts) {
216
+ if (scopeDrift.artifacts.length === 0)
217
+ continue;
218
+ console.log();
219
+ renderArtifactDriftTable(scopeDrift);
220
+ if (verbose && scopeDrift.unresolvedPaths.length > 0) {
221
+ console.log();
222
+ log.info(`[${formatScope(scopeDrift.scope)}] unmanaged stale entries`);
223
+ list(scopeDrift.unresolvedPaths);
224
+ }
225
+ }
226
+ }
227
+ function renderIssueDetailsTable(rows) {
228
+ log.info("Issue details");
229
+ const scopeWidth = Math.max("scope".length, ...rows.map((r) => r.scope.length));
230
+ const issueWidth = Math.max("issue".length, ...rows.map((r) => r.issue.length));
231
+ const pathWidth = Math.max("path".length, ...rows.map((r) => r.path.length));
232
+ const header = [
233
+ chalk.dim("scope".padEnd(scopeWidth)),
234
+ chalk.dim("issue".padEnd(issueWidth)),
235
+ chalk.dim("path".padEnd(pathWidth)),
236
+ chalk.dim("reason"),
237
+ ].join(" ");
238
+ console.log(` ${header}`);
239
+ const separator = [
240
+ "─".repeat(scopeWidth),
241
+ "─".repeat(issueWidth),
242
+ "─".repeat(pathWidth),
243
+ "─".repeat("reason".length),
244
+ ].join(" ");
245
+ console.log(chalk.dim(` ${separator}`));
246
+ for (const row of rows) {
247
+ console.log(` ${row.scope.padEnd(scopeWidth)} ${row.issue.padEnd(issueWidth)} ${row.path.padEnd(pathWidth)} ${row.reason}`);
248
+ }
249
+ }
250
+ function inferToolForTarget(scope, projectRoot, targetDir) {
251
+ const normalizedTarget = path.resolve(targetDir);
252
+ for (const tool of registry.allTools()) {
253
+ const base = tool.basePath[scope];
254
+ const resolvedBase = path.resolve(path.isAbsolute(base) ? base : path.join(projectRoot, base));
255
+ if (resolvedBase === normalizedTarget) {
256
+ return tool.name;
257
+ }
258
+ }
259
+ return null;
260
+ }
261
+ function inferArtifactFromGitignorePath(relativePath) {
262
+ const normalized = relativePath.replace(/\\/g, "/").replace(/\/$/, "");
263
+ const skillMatch = normalized.match(/^skills\/([^/]+)/);
264
+ if (skillMatch)
265
+ return { kind: "skill", name: skillMatch[1] };
266
+ const ruleMatch = normalized.match(/^rules\/(.+)\.md$/);
267
+ if (ruleMatch)
268
+ return { kind: "rule", name: ruleMatch[1] };
269
+ const promptMatch = normalized.match(/^prompts\/(.+)\.md$/);
270
+ if (promptMatch)
271
+ return { kind: "prompt", name: promptMatch[1] };
272
+ const instructionMatch = normalized.match(/^instructions\/(.+\.md)$/);
273
+ if (instructionMatch)
274
+ return { kind: "instruction", name: instructionMatch[1] };
275
+ const extensionMatch = normalized.match(/^extensions\/(.+)$/);
276
+ if (extensionMatch)
277
+ return { kind: "extension", name: extensionMatch[1] };
278
+ const themeMatch = normalized.match(/^themes\/(.+)$/);
279
+ if (themeMatch)
280
+ return { kind: "theme", name: themeMatch[1] };
281
+ const pluginMatch = normalized.match(/^opencode\/plugins\/(.+)$/);
282
+ if (pluginMatch)
283
+ return { kind: "opencode-plugin", name: pluginMatch[1] };
284
+ const opencodeConfigMatch = normalized.match(/^opencode\/(.+)$/);
285
+ if (opencodeConfigMatch)
286
+ return { kind: "opencode-config", name: opencodeConfigMatch[1] };
287
+ if (/\.md$/i.test(normalized) && !normalized.includes("/")) {
288
+ return { kind: "instruction", name: normalized };
289
+ }
290
+ return null;
291
+ }
292
+ function formatPath(absPath, projectRoot) {
293
+ const home = os.homedir();
294
+ if (absPath === projectRoot)
295
+ return ".";
296
+ if (absPath.startsWith(projectRoot + path.sep)) {
297
+ return path.relative(projectRoot, absPath);
298
+ }
299
+ if (absPath === home)
300
+ return "~";
301
+ if (absPath.startsWith(home + path.sep)) {
302
+ return `~/${path.relative(home, absPath)}`;
303
+ }
304
+ return absPath;
305
+ }
306
+ function renderArtifactDriftTable(scopeDrift) {
307
+ const rowsWithDrift = scopeDrift.artifacts.filter((row) => [...row.toolStatus.values()].some((status) => status !== "ok"));
308
+ if (rowsWithDrift.length === 0) {
309
+ return;
310
+ }
311
+ const sortedRows = sortArtifacts(rowsWithDrift);
312
+ const allTools = registry.allTools().map((tool) => tool.name);
313
+ const tools = allTools.filter((tool) => scopeDrift.tools.includes(tool));
314
+ log.info(`[${formatScope(scopeDrift.scope)}] artifact drift by target`);
315
+ const { kindWidth, nameWidth } = calculateColumnWidths(sortedRows);
316
+ const toolCols = getToolColumns(tools);
317
+ renderHeader(kindWidth, nameWidth, toolCols);
318
+ renderSeparator(kindWidth, nameWidth, toolCols);
319
+ for (const row of sortedRows) {
320
+ const kindCell = chalk.dim(row.kind.padEnd(kindWidth));
321
+ const nameCell = truncatePath(row.name, nameWidth).padEnd(nameWidth);
322
+ const toolCells = toolCols
323
+ .map((column) => {
324
+ const status = row.toolStatus.get(column.tool);
325
+ if (!status) {
326
+ return chalk.dim("—") + " ".repeat(column.width - 1);
327
+ }
328
+ const symbol = status === "missing" ? chalk.red("!") : status === "stale" ? chalk.yellow("~") : chalk.green("✓");
329
+ return symbol + " ".repeat(column.width - 1);
330
+ })
331
+ .join(" ");
332
+ console.log(` ${kindCell} ${nameCell} ${toolCells}`);
333
+ }
334
+ console.log();
335
+ log.dim(" ! missing expected entry");
336
+ log.dim(" ~ stale extra entry");
337
+ log.dim(" ✓ in sync");
338
+ }
339
+ function getToolTargetDir(scope, projectRoot, tool) {
340
+ const toolDef = registry.getTool(tool);
341
+ if (!toolDef) {
342
+ throw new Error(`Unknown tool: ${tool}`);
343
+ }
344
+ const base = toolDef.basePath[scope];
345
+ return path.isAbsolute(base) ? base : path.join(projectRoot, base);
346
+ }
347
+ function applyArtifactFix(scope, projectRoot, artifact) {
348
+ const tools = new Set([
349
+ ...artifact.missingPaths.keys(),
350
+ ...artifact.stalePaths.keys(),
351
+ ]);
352
+ for (const tool of tools) {
353
+ const targetDir = getToolTargetDir(scope, projectRoot, tool);
354
+ const managed = new Set(getManagedPathsFromTarget(targetDir));
355
+ for (const stalePath of artifact.stalePaths.get(tool) ?? []) {
356
+ managed.delete(stalePath);
357
+ }
358
+ for (const missingPath of artifact.missingPaths.get(tool) ?? []) {
359
+ managed.add(missingPath);
360
+ }
361
+ updateTargetGitignore(targetDir, [...managed].sort());
362
+ }
363
+ }
364
+ function collectFixActions(healthByScope, analysis) {
365
+ const actions = [];
366
+ for (const { scope, rootPath, projectRoot, report } of healthByScope) {
367
+ const scopeLabel = formatScope(scope);
368
+ let artifactFixCount = 0;
369
+ if (report.hasLegacyRootSection) {
370
+ const gitignorePath = path.join(projectRoot, ".gitignore");
371
+ actions.push({
372
+ label: `[${scopeLabel}] remove legacy managed section from ${gitignorePath}`,
373
+ apply: () => removeLegacyRootGitignoreSection(projectRoot),
374
+ });
375
+ }
376
+ if (report.loadoutsStateOutOfDate) {
377
+ const gitignorePath = path.join(rootPath, ".gitignore");
378
+ actions.push({
379
+ label: `[${scopeLabel}] update ${gitignorePath} state entries`,
380
+ apply: () => updateLoadoutsGitignore(rootPath),
381
+ });
382
+ }
383
+ const scopeDrift = analysis.scopeDrifts.find((item) => item.scope === scope);
384
+ if (scopeDrift) {
385
+ for (const artifact of sortArtifacts(scopeDrift.artifacts)) {
386
+ const hasDrift = [...artifact.toolStatus.values()].some((status) => status !== "ok");
387
+ if (!hasDrift)
388
+ continue;
389
+ const driftTools = [...artifact.toolStatus.entries()]
390
+ .filter(([, status]) => status !== "ok")
391
+ .map(([tool]) => tool);
392
+ actions.push({
393
+ label: `[${scopeLabel}] fix ${artifact.kind}/${artifact.name} on ${driftTools.join(", ")}`,
394
+ apply: () => applyArtifactFix(scope, projectRoot, artifact),
395
+ });
396
+ artifactFixCount += 1;
397
+ }
398
+ if (scopeDrift.unresolvedPaths.length > 0) {
399
+ actions.push({
400
+ label: `[${scopeLabel}] rebuild ${report.targetMismatches.length} target .gitignore file(s) (fallback for unresolved paths)`,
401
+ apply: () => rebuildAllGitignores(rootPath, projectRoot, scope),
402
+ });
403
+ }
404
+ }
405
+ if (report.targetMismatches.length > 0 && artifactFixCount === 0) {
406
+ actions.push({
407
+ label: `[${scopeLabel}] rebuild ${report.targetMismatches.length} target .gitignore file(s)`,
408
+ apply: () => rebuildAllGitignores(rootPath, projectRoot, scope),
409
+ });
410
+ }
411
+ }
412
+ return actions;
413
+ }
414
+ async function promptFixActions(actions) {
415
+ if (actions.length === 0)
416
+ return [];
417
+ if (!process.stdin.isTTY || !process.stdout.isTTY) {
418
+ log.warn("Interactive selection requires a TTY; run with --yes to apply all fixes.");
419
+ return [];
420
+ }
421
+ console.log();
422
+ log.info("Select fixes to apply (artifact-by-artifact):");
423
+ actions.forEach((action, idx) => {
424
+ console.log(` ${chalk.dim(String(idx + 1) + ".")} ${action.label}`);
425
+ });
426
+ log.dim(" Enter numbers (for example: 1,3), 'a' for all, 'q' to cancel, or press Enter for all.");
427
+ const rl = createPrompt();
428
+ try {
429
+ const answer = await askQuestion(rl, "Apply fixes: ");
430
+ if (answer === "q" || answer === "quit" || answer === "cancel")
431
+ return [];
432
+ if (!answer)
433
+ return actions;
434
+ if (answer === "a" || answer === "all")
435
+ return actions;
436
+ const selected = new Set();
437
+ for (const token of answer.split(",").map((s) => s.trim())) {
438
+ const idx = Number.parseInt(token, 10);
439
+ if (!Number.isNaN(idx) && idx >= 1 && idx <= actions.length) {
440
+ selected.add(idx - 1);
441
+ }
442
+ }
443
+ return [...selected].sort((a, b) => a - b).map((idx) => actions[idx]);
444
+ }
445
+ finally {
446
+ rl.close();
447
+ }
36
448
  }
37
449
  async function resolveRootInfo(scope, cwd) {
38
450
  if (scope === "project") {
@@ -47,63 +459,85 @@ async function resolveRootInfo(scope, cwd) {
47
459
  return { rootPath: root.path, projectRoot: os.homedir() };
48
460
  }
49
461
  export const doctorCommand = new Command("doctor")
50
- .description("Check and repair loadout health (migrations, gitignore drift)")
462
+ .description("Diagnose loadout health and optionally fix drift")
51
463
  .option(...SCOPE_FLAGS.local)
52
464
  .option(...SCOPE_FLAGS.global)
53
465
  .option(...SCOPE_FLAGS.all)
54
- .option("--check", "Check only (do not modify files)")
466
+ .option("--check", "Check only (default)")
467
+ .option("--fix", "Apply selected fixes interactively")
468
+ .option("-y, --yes", "Apply all available fixes without prompting")
55
469
  .option("-v, --verbose", "Show detailed diagnostics")
56
470
  .action(async (options) => {
471
+ if (options.check && options.fix) {
472
+ log.error("--check and --fix cannot be used together");
473
+ process.exit(1);
474
+ }
57
475
  const cwd = process.cwd();
58
476
  const scopes = await resolveScopes(options, cwd);
59
477
  heading("Loadout doctor");
60
478
  console.log();
61
- let initialIssues = 0;
62
- let remainingIssues = 0;
479
+ const healthByScope = [];
63
480
  for (const scope of scopes) {
64
481
  const info = await resolveRootInfo(scope, cwd);
65
482
  if (!info)
66
483
  continue;
67
- const before = inspectGitignoreHealth(info.rootPath, info.projectRoot, scope);
68
- initialIssues += before.issues;
69
- if (before.issues === 0) {
70
- log.success(`[${formatScope(scope)}] healthy`);
71
- continue;
72
- }
73
- renderHealthReport(scope, info.rootPath, info.projectRoot, before, !!options.verbose);
74
- if (options.check) {
75
- remainingIssues += before.issues;
76
- continue;
77
- }
78
- rebuildAllGitignores(info.rootPath, info.projectRoot, scope);
79
- updateLoadoutsGitignore(info.rootPath);
80
- const after = inspectGitignoreHealth(info.rootPath, info.projectRoot, scope);
81
- remainingIssues += after.issues;
82
- if (after.issues === 0) {
83
- log.success(`[${formatScope(scope)}] repaired`);
84
- }
85
- else {
86
- log.warn(`[${formatScope(scope)}] repairs incomplete`);
87
- renderHealthReport(scope, info.rootPath, info.projectRoot, after, true);
88
- }
484
+ const report = inspectGitignoreHealth(info.rootPath, info.projectRoot, scope);
485
+ healthByScope.push({
486
+ scope,
487
+ rootPath: info.rootPath,
488
+ projectRoot: info.projectRoot,
489
+ report,
490
+ });
89
491
  }
90
- console.log();
91
- if (options.check) {
92
- if (initialIssues > 0) {
93
- log.warn(`Found ${initialIssues} issue(s)`);
94
- process.exit(1);
95
- }
96
- log.success("All checked scopes are healthy");
492
+ if (healthByScope.length === 0) {
493
+ log.warn("No loadout roots found for selected scope(s)");
97
494
  return;
98
495
  }
496
+ renderHealthTable(healthByScope);
497
+ const initialIssues = healthByScope.reduce((sum, item) => sum + item.report.issues, 0);
498
+ console.log();
99
499
  if (initialIssues === 0) {
100
- log.success("All checked scopes are already healthy");
500
+ log.success("All checked scopes are healthy");
101
501
  return;
102
502
  }
103
- if (remainingIssues > 0) {
104
- log.warn(`Repaired ${initialIssues - remainingIssues} issue(s); ${remainingIssues} remain`);
503
+ const analysis = analyzeDrift(healthByScope);
504
+ renderHealthDetails(healthByScope, analysis, !!options.verbose);
505
+ console.log();
506
+ if (!options.fix) {
507
+ log.warn(`Found ${initialIssues} issue(s)`);
508
+ log.dim("Run 'loadouts doctor --fix' to choose fixes interactively.");
105
509
  process.exit(1);
106
510
  }
107
- log.success(`Repaired ${initialIssues} issue(s)`);
511
+ const actions = collectFixActions(healthByScope, analysis);
512
+ const selectedFromPrompt = options.yes ? actions : await promptFixActions(actions);
513
+ const selectedActions = !options.yes && selectedFromPrompt.length === 0 && actions.length > 0
514
+ ? actions
515
+ : selectedFromPrompt;
516
+ if (selectedActions.length === 0) {
517
+ log.warn("No fixes selected");
518
+ process.exit(1);
519
+ }
520
+ console.log();
521
+ for (const action of selectedActions) {
522
+ log.info(`Applying: ${action.label}`);
523
+ action.apply();
524
+ }
525
+ const afterHealthByScope = healthByScope.map((item) => ({
526
+ ...item,
527
+ report: inspectGitignoreHealth(item.rootPath, item.projectRoot, item.scope),
528
+ }));
529
+ const remainingIssues = afterHealthByScope.reduce((sum, item) => sum + item.report.issues, 0);
530
+ console.log();
531
+ heading("Post-fix health");
532
+ console.log();
533
+ renderHealthTable(afterHealthByScope);
534
+ console.log();
535
+ if (remainingIssues === 0) {
536
+ log.success(`Repaired ${initialIssues} issue(s)`);
537
+ return;
538
+ }
539
+ log.warn(`Repaired ${initialIssues - remainingIssues} issue(s); ${remainingIssues} remain`);
540
+ log.dim("Run 'loadouts doctor --fix' again to resolve remaining issues.");
541
+ process.exit(1);
108
542
  });
109
543
  //# sourceMappingURL=doctor.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../../src/cli/commands/doctor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../../src/cli/commands/doctor.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAsNpC;;;;GAIG;AACH,wBAAsB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CA+D7E;AAED,eAAO,MAAM,WAAW,SASpB,CAAC"}
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA8NpC;;;;GAIG;AACH,wBAAsB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CA+D7E;AAED,eAAO,MAAM,WAAW,SASpB,CAAC"}
@@ -157,7 +157,12 @@ Add your project-specific guidelines here.
157
157
  });
158
158
  });
159
159
  if (answer !== "n" && answer !== "no") {
160
- await runInstall(projectRoot, loadoutPath, {
160
+ await runInstall({
161
+ scope: "project",
162
+ configPath: loadoutPath,
163
+ statePath: path.join(loadoutPath, ".state.json"),
164
+ projectRoot,
165
+ }, {
161
166
  to: "base",
162
167
  });
163
168
  }