@idia-ui/cli 0.2.1 → 0.2.3
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/README.md +34 -0
- package/dist/cli.js +72 -67
- package/dist/cli.js.map +1 -1
- package/package.json +1 -1
package/README.md
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# @idia-ui/cli
|
|
2
|
+
|
|
3
|
+
Doctor and add-on management for idia consumer apps (`idia-ui` binary).
|
|
4
|
+
|
|
5
|
+
## Monorepo usage
|
|
6
|
+
|
|
7
|
+
From the repo root, pass an **absolute** `--cwd` when invoking via `pnpm --filter`:
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
pnpm --filter @idia-ui/cli build
|
|
11
|
+
pnpm --filter @idia-ui/cli exec idia-ui doctor --cwd C:\path\to\apps\consumer-sandbox
|
|
12
|
+
pnpm --filter @idia-ui/cli exec idia-ui add storybook --cwd C:\path\to\apps\consumer-sandbox
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
`pnpm exec` runs from the package directory by default; `--cwd` must point at the consumer app root (where `package.json` and `.idia/manifest.json` live), not the monorepo root.
|
|
16
|
+
|
|
17
|
+
## Commands
|
|
18
|
+
|
|
19
|
+
| Command | Purpose |
|
|
20
|
+
|---------|---------|
|
|
21
|
+
| `idia-ui doctor` | Health checks (peers, manifest, navigation, optional `--full` for Storybook/brain) |
|
|
22
|
+
| `idia-ui add storybook` | Install Storybook docs pack + preset |
|
|
23
|
+
| `idia-ui add brain` | Install brain AI pack (Tier 1G experimental) |
|
|
24
|
+
| `idia-ui sync <storybook\|brain\|all>` | Align pack versions and manifest pins |
|
|
25
|
+
|
|
26
|
+
## Flags
|
|
27
|
+
|
|
28
|
+
| Flag | Behavior |
|
|
29
|
+
|------|----------|
|
|
30
|
+
| `--cwd <path>` | App root (default: `process.cwd()`) |
|
|
31
|
+
| `--full` | Include Storybook (S*) and brain (B*) checks |
|
|
32
|
+
| `--strict` | Treat warnings as failures (exit 1) |
|
|
33
|
+
| `--fix` | Limited safe repairs (manifest regenerate) |
|
|
34
|
+
| `--json` | Machine-readable output |
|
package/dist/cli.js
CHANGED
|
@@ -30,14 +30,14 @@ var import_node_path10 = require("path");
|
|
|
30
30
|
// src/commands/storybook/add.ts
|
|
31
31
|
var import_node_fs5 = require("fs");
|
|
32
32
|
var import_node_path5 = require("path");
|
|
33
|
-
var import_node_child_process = require("child_process");
|
|
34
33
|
|
|
35
34
|
// src/commands/storybook/constants.ts
|
|
36
35
|
var STORYBOOK_DOCS_VERSION = "0.2.0";
|
|
37
|
-
var STORYBOOK_PRESET_VERSION = "0.2.
|
|
36
|
+
var STORYBOOK_PRESET_VERSION = "0.2.2";
|
|
38
37
|
var STORYBOOK_CLI_VERSION = "8.4.7";
|
|
39
38
|
var STORYBOOK_DEV_DEPS = [
|
|
40
39
|
"storybook@^8.4.7",
|
|
40
|
+
"@storybook/react@^8.4.7",
|
|
41
41
|
"@storybook/react-vite@^8.4.7",
|
|
42
42
|
"@storybook/addon-docs@^8.4.7",
|
|
43
43
|
"@storybook/addon-a11y@^8.4.7",
|
|
@@ -250,10 +250,67 @@ function grepSrcForPattern(cwd, pattern) {
|
|
|
250
250
|
return false;
|
|
251
251
|
}
|
|
252
252
|
|
|
253
|
+
// src/utils/exec.ts
|
|
254
|
+
var import_node_child_process = require("child_process");
|
|
255
|
+
function pmExitCode(result) {
|
|
256
|
+
if (result.error) return 1;
|
|
257
|
+
return result.status ?? 0;
|
|
258
|
+
}
|
|
259
|
+
function spawnPm(pm, args, cwd) {
|
|
260
|
+
const isWin = process.platform === "win32";
|
|
261
|
+
return (0, import_node_child_process.spawnSync)(pm, args, {
|
|
262
|
+
cwd,
|
|
263
|
+
stdio: "inherit",
|
|
264
|
+
shell: isWin,
|
|
265
|
+
windowsHide: isWin
|
|
266
|
+
});
|
|
267
|
+
}
|
|
268
|
+
function runPmInstall(cwd, pm) {
|
|
269
|
+
const result = spawnPm(pm, installArgs(pm), cwd);
|
|
270
|
+
if (pmExitCode(result) !== 0) {
|
|
271
|
+
throw new Error(`${pm} install failed (exit ${pmExitCode(result)})`);
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
function runPmAddDev(cwd, pm, packageSpec) {
|
|
275
|
+
const result = spawnPm(pm, addDevArgs(pm, packageSpec), cwd);
|
|
276
|
+
if (pmExitCode(result) !== 0) {
|
|
277
|
+
throw new Error(`${pm} add failed for ${packageSpec} (exit ${pmExitCode(result)})`);
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
function runPmAddDevDeps(cwd, pm, packages) {
|
|
281
|
+
const result = spawnPm(pm, addDevArgsMulti(pm, packages), cwd);
|
|
282
|
+
if (pmExitCode(result) !== 0) {
|
|
283
|
+
throw new Error(`${pm} add failed (exit ${pmExitCode(result)})`);
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
function installArgs(pm) {
|
|
287
|
+
switch (pm) {
|
|
288
|
+
case "pnpm":
|
|
289
|
+
return ["install"];
|
|
290
|
+
case "yarn":
|
|
291
|
+
return ["install"];
|
|
292
|
+
default:
|
|
293
|
+
return ["install"];
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
function addDevArgs(pm, packageSpec) {
|
|
297
|
+
return addDevArgsMulti(pm, [packageSpec]);
|
|
298
|
+
}
|
|
299
|
+
function addDevArgsMulti(pm, packages) {
|
|
300
|
+
switch (pm) {
|
|
301
|
+
case "pnpm":
|
|
302
|
+
return ["add", "-D", ...packages];
|
|
303
|
+
case "yarn":
|
|
304
|
+
return ["add", "-D", ...packages];
|
|
305
|
+
default:
|
|
306
|
+
return ["install", "-D", ...packages];
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
|
|
253
310
|
// src/utils/manifest.ts
|
|
254
311
|
var import_node_fs4 = require("fs");
|
|
255
312
|
var import_node_path4 = require("path");
|
|
256
|
-
var CLI_VERSION = "0.2.
|
|
313
|
+
var CLI_VERSION = "0.2.3";
|
|
257
314
|
function readManifest(cwd) {
|
|
258
315
|
try {
|
|
259
316
|
const raw = (0, import_node_fs4.readFileSync)((0, import_node_path4.join)(cwd, ".idia", "manifest.json"), "utf8");
|
|
@@ -307,8 +364,11 @@ function parseDepSpec(spec) {
|
|
|
307
364
|
return { name: spec.slice(0, at), range: spec.slice(at + 1) };
|
|
308
365
|
}
|
|
309
366
|
function resolveDepVersion(name, range) {
|
|
310
|
-
if (name.startsWith("@idia-ui/storybook")) {
|
|
311
|
-
return
|
|
367
|
+
if (name.startsWith("@idia-ui/storybook-docs")) {
|
|
368
|
+
return `^${STORYBOOK_DOCS_VERSION}`;
|
|
369
|
+
}
|
|
370
|
+
if (name.startsWith("@idia-ui/storybook-preset-react-native-web")) {
|
|
371
|
+
return `^${STORYBOOK_PRESET_VERSION}`;
|
|
312
372
|
}
|
|
313
373
|
return `^${range.replace(/^\^/, "")}`;
|
|
314
374
|
}
|
|
@@ -326,16 +386,8 @@ function addDevDependencies(cwd) {
|
|
|
326
386
|
(0, import_node_fs5.writeFileSync)((0, import_node_path5.join)(cwd, "package.json"), `${JSON.stringify(pkg, null, 2)}
|
|
327
387
|
`, "utf8");
|
|
328
388
|
}
|
|
329
|
-
function
|
|
330
|
-
|
|
331
|
-
const result = (0, import_node_child_process.spawnSync)(pm, args, {
|
|
332
|
-
cwd,
|
|
333
|
-
stdio: "inherit",
|
|
334
|
-
shell: process.platform === "win32"
|
|
335
|
-
});
|
|
336
|
-
if (result.status !== 0) {
|
|
337
|
-
throw new Error(`${pm} install failed with exit code ${result.status ?? "unknown"}`);
|
|
338
|
-
}
|
|
389
|
+
function runPmInstall2(cwd, pm) {
|
|
390
|
+
runPmAddDevDeps(cwd, pm, STORYBOOK_DEV_DEPS);
|
|
339
391
|
}
|
|
340
392
|
function resolveCoreVersion(cwd, pkg) {
|
|
341
393
|
const installed = readInstalledVersion(cwd, "@idia-ui/core");
|
|
@@ -399,7 +451,7 @@ function runAddStorybook(options) {
|
|
|
399
451
|
addDevDependencies(cwd);
|
|
400
452
|
if (!skipInstall) {
|
|
401
453
|
console.log(`Installing Storybook devDependencies via ${pm}\u2026`);
|
|
402
|
-
|
|
454
|
+
runPmInstall2(cwd, pm);
|
|
403
455
|
} else {
|
|
404
456
|
warnings.push("Skipped package manager install (--skip-install)");
|
|
405
457
|
}
|
|
@@ -551,45 +603,6 @@ function readInstalledPackManifest(cwd, packageName, manifestFile = "pack-manife
|
|
|
551
603
|
}
|
|
552
604
|
}
|
|
553
605
|
|
|
554
|
-
// src/utils/exec.ts
|
|
555
|
-
var import_node_child_process2 = require("child_process");
|
|
556
|
-
function runPmInstall2(cwd, pm) {
|
|
557
|
-
const result = spawnCommand(pm, installArgs(pm), cwd);
|
|
558
|
-
if (result.status !== 0) {
|
|
559
|
-
throw new Error(`${pm} install failed (exit ${result.status ?? 1})`);
|
|
560
|
-
}
|
|
561
|
-
}
|
|
562
|
-
function runPmAddDev(cwd, pm, packageSpec) {
|
|
563
|
-
const result = spawnCommand(pm, addDevArgs(pm, packageSpec), cwd);
|
|
564
|
-
if (result.status !== 0) {
|
|
565
|
-
throw new Error(`${pm} add failed for ${packageSpec} (exit ${result.status ?? 1})`);
|
|
566
|
-
}
|
|
567
|
-
}
|
|
568
|
-
function installArgs(pm) {
|
|
569
|
-
switch (pm) {
|
|
570
|
-
case "pnpm":
|
|
571
|
-
return ["install"];
|
|
572
|
-
case "yarn":
|
|
573
|
-
return ["install"];
|
|
574
|
-
default:
|
|
575
|
-
return ["install"];
|
|
576
|
-
}
|
|
577
|
-
}
|
|
578
|
-
function addDevArgs(pm, packageSpec) {
|
|
579
|
-
switch (pm) {
|
|
580
|
-
case "pnpm":
|
|
581
|
-
return ["add", "-D", packageSpec];
|
|
582
|
-
case "yarn":
|
|
583
|
-
return ["add", "-D", packageSpec];
|
|
584
|
-
default:
|
|
585
|
-
return ["install", "-D", packageSpec];
|
|
586
|
-
}
|
|
587
|
-
}
|
|
588
|
-
function spawnCommand(pm, args, cwd) {
|
|
589
|
-
const command = pm === "npm" ? "npm" : pm;
|
|
590
|
-
return (0, import_node_child_process2.spawnSync)(command, args, { cwd, stdio: "inherit", shell: process.platform === "win32" });
|
|
591
|
-
}
|
|
592
|
-
|
|
593
606
|
// src/brain/install.ts
|
|
594
607
|
function copyDirRecursive(src, dest, force) {
|
|
595
608
|
(0, import_node_fs8.mkdirSync)(dest, { recursive: true });
|
|
@@ -612,7 +625,7 @@ function ensureBrainPackDependency(cwd, pm, skipInstall) {
|
|
|
612
625
|
const existing = pkg.devDependencies?.[BRAIN_PACK_NAME];
|
|
613
626
|
if (existing === spec || existing === BRAIN_PACK_VERSION) {
|
|
614
627
|
if (!skipInstall && !(0, import_node_fs8.existsSync)((0, import_node_path8.join)(cwd, "node_modules", BRAIN_PACK_NAME))) {
|
|
615
|
-
|
|
628
|
+
runPmInstall(cwd, pm);
|
|
616
629
|
}
|
|
617
630
|
return;
|
|
618
631
|
}
|
|
@@ -985,7 +998,7 @@ function runBrainChecks(cwd) {
|
|
|
985
998
|
results.push({
|
|
986
999
|
id: "B4",
|
|
987
1000
|
status: "warn",
|
|
988
|
-
message: "brain pack and storybook-docs sourceHash skew",
|
|
1001
|
+
message: "brain pack and storybook-docs sourceHash skew (expected when packs were published separately at the same minor \u2014 run idia-ui sync all to align)",
|
|
989
1002
|
fixHint: "idia-ui sync all"
|
|
990
1003
|
});
|
|
991
1004
|
}
|
|
@@ -1430,7 +1443,6 @@ function formatJsonReport(report) {
|
|
|
1430
1443
|
}
|
|
1431
1444
|
|
|
1432
1445
|
// src/commands/storybook/sync.ts
|
|
1433
|
-
var import_node_child_process3 = require("child_process");
|
|
1434
1446
|
function isStorybookInstalled2(cwd) {
|
|
1435
1447
|
return fileExists(cwd, ".storybook/main.ts");
|
|
1436
1448
|
}
|
|
@@ -1439,15 +1451,7 @@ function runPmUpdate(cwd, pm) {
|
|
|
1439
1451
|
`@idia-ui/storybook-docs@${STORYBOOK_DOCS_VERSION}`,
|
|
1440
1452
|
`@idia-ui/storybook-preset-react-native-web@${STORYBOOK_PRESET_VERSION}`
|
|
1441
1453
|
];
|
|
1442
|
-
|
|
1443
|
-
const result = (0, import_node_child_process3.spawnSync)(pm, args, {
|
|
1444
|
-
cwd,
|
|
1445
|
-
stdio: "inherit",
|
|
1446
|
-
shell: process.platform === "win32"
|
|
1447
|
-
});
|
|
1448
|
-
if (result.status !== 0) {
|
|
1449
|
-
throw new Error(`${pm} update failed with exit code ${result.status ?? "unknown"}`);
|
|
1450
|
-
}
|
|
1454
|
+
runPmAddDevDeps(cwd, pm, packages);
|
|
1451
1455
|
}
|
|
1452
1456
|
function runSyncStorybook(options) {
|
|
1453
1457
|
const { cwd, skipInstall = false } = options;
|
|
@@ -1578,6 +1582,7 @@ addCmd.command("storybook").description("Install Storybook docs pack").option("-
|
|
|
1578
1582
|
skipInstall: Boolean(opts.skipInstall),
|
|
1579
1583
|
pm: parsePm(opts.pm)
|
|
1580
1584
|
});
|
|
1585
|
+
process.exit(0);
|
|
1581
1586
|
}
|
|
1582
1587
|
);
|
|
1583
1588
|
addCmd.command("brain").description("Install brain AI pack (Phase 4 \u2014 experimental)").option("--repair", "Re-apply rules, AGENTS block, and .idia/brain/ from pack").option("--force", "Overwrite conflicts (document risk)").option("--pm <manager>", "Override package manager (pnpm|npm|yarn)").option("--cwd <path>", "App root directory", process.cwd()).action((opts) => {
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/cli.ts","../src/commands/storybook/add.ts","../src/commands/storybook/constants.ts","../src/commands/storybook/templates.ts","../src/utils/pm.ts","../src/utils/package-json.ts","../src/utils/fs.ts","../src/utils/manifest.ts","../src/brain/install.ts","../src/brain/agents-patch.ts","../src/brain/constants.ts","../src/brain/pack.ts","../src/utils/exec.ts","../src/commands/add.ts","../src/checks/packs.ts","../src/checks/manifest.ts","../src/checks/navigation.ts","../src/checks/peers.ts","../src/checks/runtime.ts","../src/checks/index.ts","../src/commands/doctor.ts","../src/commands/storybook/sync.ts","../src/commands/sync.ts"],"sourcesContent":["import { Command } from 'commander';\r\nimport { resolve } from 'node:path';\r\n\r\nimport { runAddBrain, runAddStorybook, runAddUnknown } from './commands/add.js';\r\nimport {\r\n formatHumanReport,\r\n formatJsonReport,\r\n runDoctor,\r\n} from './commands/doctor.js';\r\nimport { runSync } from './commands/sync.js';\r\nimport { CLI_VERSION } from './utils/manifest.js';\r\n\r\nconst program = new Command();\r\n\r\nprogram\r\n .name('idia-ui')\r\n .description('idia-ui CLI — doctor and add-on management for consumer apps')\r\n .version(CLI_VERSION);\r\n\r\nprogram\r\n .command('doctor')\r\n .description('Run health checks on an idia consumer app')\r\n .option('--cwd <path>', 'App root directory', process.cwd())\r\n .option('--full', 'Include Storybook (S*) and brain (B*) checks')\r\n .option('--fix', 'Limited safe repairs (manifest regenerate)')\r\n .option('--strict', 'Treat warnings as failures')\r\n .option('--json', 'Machine-readable JSON output')\r\n .action((opts: { cwd: string; full?: boolean; fix?: boolean; strict?: boolean; json?: boolean }) => {\r\n const cwd = resolve(opts.cwd);\r\n const report = runDoctor({\r\n cwd,\r\n full: Boolean(opts.full),\r\n fix: Boolean(opts.fix),\r\n strict: Boolean(opts.strict),\r\n json: Boolean(opts.json),\r\n });\r\n\r\n if (opts.json) {\r\n console.log(formatJsonReport(report));\r\n } else {\r\n console.log(formatHumanReport(report, Boolean(opts.full)));\r\n }\r\n\r\n process.exit(report.exitCode);\r\n });\r\n\r\nconst addCmd = program.command('add').description('Install idia add-on packs');\r\n\r\naddCmd\r\n .command('storybook')\r\n .description('Install Storybook docs pack')\r\n .option('--repair', 'Refresh CLI-owned Storybook files')\r\n .option('--force', 'Overwrite conflicts (document risk)')\r\n .option('--skip-install', 'Skip package manager install')\r\n .option('--pm <manager>', 'Override package manager (pnpm|npm|yarn)')\r\n .option('--cwd <path>', 'App root directory', process.cwd())\r\n .action(\r\n (opts: {\r\n repair?: boolean;\r\n force?: boolean;\r\n skipInstall?: boolean;\r\n pm?: string;\r\n cwd: string;\r\n }) => {\r\n runAddStorybook({\r\n cwd: resolve(opts.cwd),\r\n repair: Boolean(opts.repair),\r\n force: Boolean(opts.force),\r\n skipInstall: Boolean(opts.skipInstall),\r\n pm: parsePm(opts.pm),\r\n });\r\n },\r\n );\r\n\r\naddCmd\r\n .command('brain')\r\n .description('Install brain AI pack (Phase 4 — experimental)')\r\n .option('--repair', 'Re-apply rules, AGENTS block, and .idia/brain/ from pack')\r\n .option('--force', 'Overwrite conflicts (document risk)')\r\n .option('--pm <manager>', 'Override package manager (pnpm|npm|yarn)')\r\n .option('--cwd <path>', 'App root directory', process.cwd())\r\n .action((opts: { repair?: boolean; force?: boolean; pm?: string; cwd: string }) => {\r\n runAddBrain({\r\n cwd: resolve(opts.cwd),\r\n repair: Boolean(opts.repair),\r\n force: Boolean(opts.force),\r\n pm: parsePm(opts.pm),\r\n });\r\n });\r\n\r\naddCmd\r\n .argument('[target]', 'add-on target')\r\n .action((target: string | undefined) => {\r\n if (!target) {\r\n console.error('Usage: idia-ui add <storybook|brain>');\r\n process.exit(1);\r\n }\r\n runAddUnknown(target);\r\n });\r\n\r\nconst syncCmd = program\r\n .command('sync')\r\n .description('Sync installed pack versions and manifest');\r\n\r\nsyncCmd\r\n .argument('<target>', 'storybook | brain | all')\r\n .option('--force', 'Overwrite pack-owned files')\r\n .option('--pm <manager>', 'Override package manager (pnpm|npm|yarn)')\r\n .option('--cwd <path>', 'App root directory', process.cwd())\r\n .action((target: string, opts: { force?: boolean; pm?: string; cwd: string }) => {\r\n runSync(target, {\r\n cwd: resolve(opts.cwd),\r\n force: Boolean(opts.force),\r\n pm: parsePm(opts.pm),\r\n });\r\n });\r\n\r\nprogram.parse();\r\n\r\nfunction parsePm(value: string | undefined): 'pnpm' | 'npm' | 'yarn' | undefined {\r\n if (!value) return undefined;\r\n const normalized = value.toLowerCase();\r\n if (normalized === 'pnpm' || normalized === 'npm' || normalized === 'yarn') {\r\n return normalized;\r\n }\r\n console.error(`Invalid --pm value \"${value}\". Use pnpm, npm, or yarn.`);\r\n process.exit(1);\r\n}\r\n","import { mkdirSync, writeFileSync } from 'node:fs'\r\nimport { dirname, join } from 'node:path'\r\nimport { spawnSync } from 'node:child_process'\r\n\r\nimport {\r\n STORYBOOK_CLI_VERSION,\r\n STORYBOOK_DEV_DEPS,\r\n STORYBOOK_DOCS_VERSION,\r\n STORYBOOK_OWNED_FILES,\r\n STORYBOOK_PRESET_VERSION,\r\n} from './constants.js'\r\nimport { buttonStoriesTsx, storybookMainTs, storybookPreviewTsx } from './templates.js'\r\nimport type { PackageManager } from '../../utils/pm.js'\r\nimport { detectPackageManager } from '../../utils/pm.js'\r\nimport { readInstalledVersion, readPackageJson } from '../../utils/package-json.js'\r\nimport { fileExists, readTextFile } from '../../utils/fs.js'\r\nimport {\r\n CLI_VERSION,\r\n readManifest,\r\n writeManifest,\r\n} from '../../utils/manifest.js'\r\nimport type { IdiaManifest } from '../../types.js'\r\n\r\nexport type AddStorybookOptions = {\r\n cwd: string\r\n repair?: boolean\r\n force?: boolean\r\n pm?: PackageManager\r\n skipInstall?: boolean\r\n}\r\n\r\nexport type AddStorybookResult = {\r\n installed: boolean\r\n alreadyInstalled: boolean\r\n filesWritten: string[]\r\n warnings: string[]\r\n}\r\n\r\nfunction writeOwnedFile(cwd: string, relativePath: string, content: string, force: boolean): boolean {\r\n const fullPath = join(cwd, relativePath)\r\n if (fileExists(cwd, relativePath) && !force) {\r\n const existing = readTextFile(cwd, relativePath)\r\n if (existing === content) return false\r\n throw new Error(\r\n `Conflict: ${relativePath} exists with different content. Use --repair or --force.`,\r\n )\r\n }\r\n mkdirSync(dirname(fullPath), { recursive: true })\r\n writeFileSync(fullPath, content, 'utf8')\r\n return true\r\n}\r\n\r\nfunction parseDepSpec(spec: string): { name: string; range: string } {\r\n if (spec.startsWith('@')) {\r\n const at = spec.indexOf('@', 1)\r\n return { name: spec.slice(0, at), range: spec.slice(at + 1) }\r\n }\r\n const at = spec.indexOf('@')\r\n return { name: spec.slice(0, at), range: spec.slice(at + 1) }\r\n}\r\n\r\nfunction resolveDepVersion(name: string, range: string): string {\r\n if (name.startsWith('@idia-ui/storybook')) {\r\n return 'workspace:*'\r\n }\r\n return `^${range.replace(/^\\^/, '')}`\r\n}\r\n\r\nfunction addDevDependencies(cwd: string): void {\r\n const pkg = readPackageJson(cwd)\r\n if (!pkg) throw new Error('package.json not found')\r\n\r\n pkg.devDependencies ??= {}\r\n for (const spec of STORYBOOK_DEV_DEPS) {\r\n const { name, range } = parseDepSpec(spec)\r\n pkg.devDependencies[name] = resolveDepVersion(name, range)\r\n }\r\n\r\n pkg.scripts ??= {}\r\n pkg.scripts.storybook = 'storybook dev -p 6006'\r\n pkg.scripts['build-storybook'] = 'storybook build'\r\n\r\n writeFileSync(join(cwd, 'package.json'), `${JSON.stringify(pkg, null, 2)}\\n`, 'utf8')\r\n}\r\n\r\nfunction runPmInstall(cwd: string, pm: PackageManager): void {\r\n const args =\r\n pm === 'pnpm'\r\n ? ['add', '-D', ...STORYBOOK_DEV_DEPS]\r\n : pm === 'yarn'\r\n ? ['add', '-D', ...STORYBOOK_DEV_DEPS]\r\n : ['install', '-D', ...STORYBOOK_DEV_DEPS]\r\n\r\n const result = spawnSync(pm, args, {\r\n cwd,\r\n stdio: 'inherit',\r\n shell: process.platform === 'win32',\r\n })\r\n if (result.status !== 0) {\r\n throw new Error(`${pm} install failed with exit code ${result.status ?? 'unknown'}`)\r\n }\r\n}\r\n\r\nfunction resolveCoreVersion(cwd: string, pkg: NonNullable<ReturnType<typeof readPackageJson>>): string {\r\n const installed = readInstalledVersion(cwd, '@idia-ui/core')\r\n if (installed) return installed\r\n\r\n const declared = pkg.dependencies?.['@idia-ui/core'] ?? ''\r\n if (declared && !declared.startsWith('workspace')) {\r\n return declared.replace(/^[\\^~]/, '')\r\n }\r\n\r\n return '0.2.0'\r\n}\r\n\r\nfunction updateStorybookManifest(cwd: string, manifest: IdiaManifest, coreVersion: string): void {\r\n manifest.idiaCli = CLI_VERSION\r\n manifest.core = coreVersion\r\n manifest.features ??= {}\r\n manifest.features.storybook = {\r\n installed: new Date().toISOString(),\r\n storybookDocs: STORYBOOK_DOCS_VERSION,\r\n storybook: STORYBOOK_CLI_VERSION,\r\n preset: STORYBOOK_PRESET_VERSION,\r\n }\r\n writeManifest(cwd, manifest)\r\n}\r\n\r\nfunction isStorybookInstalled(cwd: string): boolean {\r\n return (\r\n fileExists(cwd, '.storybook/main.ts') &&\r\n Boolean(readPackageJson(cwd)?.devDependencies?.['@idia-ui/storybook-docs'])\r\n )\r\n}\r\n\r\nexport function runAddStorybook(options: AddStorybookOptions): AddStorybookResult {\r\n const { cwd, repair = false, force = false, skipInstall = false } = options\r\n const pm = options.pm ?? detectPackageManager(cwd)\r\n const warnings: string[] = []\r\n const filesWritten: string[] = []\r\n\r\n const pkg = readPackageJson(cwd)\r\n if (!pkg) {\r\n console.error('package.json not found — run from your app root')\r\n process.exit(1)\r\n }\r\n\r\n let manifest = readManifest(cwd)\r\n const coreVersion = resolveCoreVersion(cwd, pkg)\r\n if (!manifest) {\r\n manifest = { idiaCli: CLI_VERSION, core: coreVersion }\r\n warnings.push('Created .idia/manifest.json stub')\r\n } else {\r\n manifest.core = coreVersion\r\n }\r\n\r\n const alreadyInstalled = isStorybookInstalled(cwd)\r\n if (alreadyInstalled && !repair && !force) {\r\n console.log('Storybook already installed — idempotent skip (use --repair to refresh CLI-owned files)')\r\n updateStorybookManifest(cwd, manifest, coreVersion)\r\n return { installed: true, alreadyInstalled: true, filesWritten, warnings }\r\n }\r\n\r\n const ownedContent: Record<(typeof STORYBOOK_OWNED_FILES)[number], string> = {\r\n '.storybook/main.ts': storybookMainTs(),\r\n '.storybook/preview.tsx': storybookPreviewTsx(),\r\n 'src/stories/Button.stories.tsx': buttonStoriesTsx(),\r\n }\r\n\r\n for (const relativePath of STORYBOOK_OWNED_FILES) {\r\n if (repair || force || !fileExists(cwd, relativePath)) {\r\n const wrote = writeOwnedFile(cwd, relativePath, ownedContent[relativePath], force || repair)\r\n if (wrote) filesWritten.push(relativePath)\r\n }\r\n }\r\n\r\n addDevDependencies(cwd)\r\n\r\n if (!skipInstall) {\r\n console.log(`Installing Storybook devDependencies via ${pm}…`)\r\n runPmInstall(cwd, pm)\r\n } else {\r\n warnings.push('Skipped package manager install (--skip-install)')\r\n }\r\n\r\n updateStorybookManifest(cwd, manifest, coreVersion)\r\n\r\n console.log('\\n✓ Storybook add-on installed')\r\n console.log(` @idia-ui/storybook-docs@${STORYBOOK_DOCS_VERSION}`)\r\n console.log(` @idia-ui/storybook-preset-react-native-web@${STORYBOOK_PRESET_VERSION}`)\r\n console.log(' Run: pnpm storybook (or npm run storybook)')\r\n\r\n return { installed: true, alreadyInstalled, filesWritten, warnings }\r\n}\r\n","/** Version lockstep with @idia-ui/core minor (0.2.x). */\r\nexport const STORYBOOK_DOCS_VERSION = '0.2.0'\r\nexport const STORYBOOK_PRESET_VERSION = '0.2.1'\r\nexport const STORYBOOK_CLI_VERSION = '8.4.7'\r\n\r\nexport const STORYBOOK_DEV_DEPS = [\r\n 'storybook@^8.4.7',\r\n '@storybook/react-vite@^8.4.7',\r\n '@storybook/addon-docs@^8.4.7',\r\n '@storybook/addon-a11y@^8.4.7',\r\n '@storybook/addon-links@^8.4.7',\r\n `@idia-ui/storybook-docs@${STORYBOOK_DOCS_VERSION}`,\r\n `@idia-ui/storybook-preset-react-native-web@${STORYBOOK_PRESET_VERSION}`,\r\n 'vite@^5.4.0',\r\n] as const\r\n\r\nexport const STORYBOOK_OWNED_FILES = [\r\n '.storybook/main.ts',\r\n '.storybook/preview.tsx',\r\n 'src/stories/Button.stories.tsx',\r\n] as const\r\n","export function storybookMainTs(): string {\r\n return `import type { StorybookConfig } from '@storybook/react-vite';\r\nimport { idiaStorybookMain } from '@idia-ui/storybook-preset-react-native-web';\r\n\r\nconst config: StorybookConfig = idiaStorybookMain({\r\n stories: ['../src/stories/**/*.stories.@(ts|tsx)'],\r\n staticDirs: ['../public'],\r\n});\r\n\r\nexport default config;\r\n`\r\n}\r\n\r\nexport function storybookPreviewTsx(): string {\r\n return `import React from 'react';\r\nimport type { Preview } from '@storybook/react';\r\nimport { AppProviders } from '../src/providers/AppProviders';\r\nimport '../global.css';\r\n\r\nconst preview: Preview = {\r\n decorators: [\r\n (Story) => (\r\n <AppProviders>\r\n <Story />\r\n </AppProviders>\r\n ),\r\n ],\r\n parameters: {\r\n layout: 'centered',\r\n controls: { expanded: true },\r\n },\r\n};\r\n\r\nexport default preview;\r\n`\r\n}\r\n\r\nexport function buttonStoriesTsx(): string {\r\n return `import type { Meta, StoryObj } from '@storybook/react';\r\nimport { Button } from '@idia-ui/core';\r\nimport { BrainDocSections } from '@idia-ui/storybook-docs';\r\n\r\nconst meta = {\r\n title: 'Components/Button',\r\n component: Button,\r\n tags: ['autodocs'],\r\n parameters: {\r\n docs: {\r\n page: () => (\r\n <>\r\n <BrainDocSections\r\n componentId=\"button\"\r\n sectionIds={['intent', 'usage', 'variants', 'accessibility']}\r\n />\r\n </>\r\n ),\r\n },\r\n },\r\n args: {\r\n label: 'Button',\r\n variant: 'primary',\r\n },\r\n} satisfies Meta<typeof Button>;\r\n\r\nexport default meta;\r\n\r\ntype Story = StoryObj<typeof meta>;\r\n\r\nexport const Playground: Story = {};\r\n`\r\n}\r\n","import { existsSync } from 'node:fs';\r\nimport { dirname, join } from 'node:path';\r\n\r\nexport type PackageManager = 'pnpm' | 'npm' | 'yarn';\r\n\r\nfunction findLockfileDir(start: string): string {\r\n let dir = start;\r\n while (true) {\r\n if (existsSync(join(dir, 'pnpm-lock.yaml'))) return dir;\r\n if (existsSync(join(dir, 'yarn.lock'))) return dir;\r\n if (existsSync(join(dir, 'package-lock.json'))) return dir;\r\n const parent = dirname(dir);\r\n if (parent === dir) return start;\r\n dir = parent;\r\n }\r\n}\r\n\r\nexport function detectPackageManager(cwd: string): PackageManager {\r\n const root = findLockfileDir(cwd);\r\n if (existsSync(join(root, 'pnpm-lock.yaml'))) return 'pnpm';\r\n if (existsSync(join(root, 'yarn.lock'))) return 'yarn';\r\n return 'npm';\r\n}\r\n\r\nexport function pmAddCommand(pm: PackageManager, packages: string[]): string {\r\n const list = packages.join(' ');\r\n switch (pm) {\r\n case 'pnpm':\r\n return `pnpm add ${list}`;\r\n case 'yarn':\r\n return `yarn add ${list}`;\r\n default:\r\n return `npm install ${list}`;\r\n }\r\n}\r\n\r\nexport function pmUpdateCommand(pm: PackageManager, packages: string[]): string {\r\n const list = packages.join(' ');\r\n switch (pm) {\r\n case 'pnpm':\r\n return `pnpm update ${list}`;\r\n case 'yarn':\r\n return `yarn upgrade ${list}`;\r\n default:\r\n return `npm update ${list}`;\r\n }\r\n}\r\n","import { readFileSync } from 'node:fs';\r\nimport { join } from 'node:path';\r\n\r\nimport type { PackageJson } from '../types.js';\r\n\r\nexport function readPackageJson(cwd: string): PackageJson | null {\r\n try {\r\n const raw = readFileSync(join(cwd, 'package.json'), 'utf8');\r\n return JSON.parse(raw) as PackageJson;\r\n } catch {\r\n return null;\r\n }\r\n}\r\n\r\nexport function getDepVersion(\r\n pkg: PackageJson,\r\n name: string,\r\n): string | undefined {\r\n return pkg.dependencies?.[name] ?? pkg.devDependencies?.[name];\r\n}\r\n\r\nexport function readInstalledVersion(cwd: string, name: string): string | null {\r\n try {\r\n const pkgPath = join(cwd, 'node_modules', name, 'package.json');\r\n const raw = readFileSync(pkgPath, 'utf8');\r\n const parsed = JSON.parse(raw) as { version?: string };\r\n return parsed.version ?? null;\r\n } catch {\r\n return null;\r\n }\r\n}\r\n\r\nexport function readPeerRange(\r\n cwd: string,\r\n packageName: string,\r\n peerName: string,\r\n): string | null {\r\n try {\r\n const pkgPath = join(cwd, 'node_modules', packageName, 'package.json');\r\n const raw = readFileSync(pkgPath, 'utf8');\r\n const parsed = JSON.parse(raw) as {\r\n peerDependencies?: Record<string, string>;\r\n };\r\n return parsed.peerDependencies?.[peerName] ?? null;\r\n } catch {\r\n return null;\r\n }\r\n}\r\n\r\nexport function listIdiaPackages(pkg: PackageJson): string[] {\r\n const names = new Set<string>();\r\n for (const deps of [pkg.dependencies, pkg.devDependencies]) {\r\n if (!deps) continue;\r\n for (const name of Object.keys(deps)) {\r\n if (name.startsWith('@idia-ui/')) names.add(name);\r\n }\r\n }\r\n return [...names].sort();\r\n}\r\n","import { existsSync, readFileSync, readdirSync, statSync } from 'node:fs';\r\nimport { join } from 'node:path';\r\n\r\nimport semver from 'semver';\r\n\r\nexport function satisfiesRange(version: string, range: string): boolean {\r\n const cleaned = version.replace(/^[\\^~>=<]*/, '').split(' ')[0] ?? version;\r\n if (range === 'workspace:*' || range.startsWith('file:')) return true;\r\n const coerced = semver.coerce(cleaned);\r\n if (!coerced) return false;\r\n return semver.satisfies(coerced, range, { includePrerelease: true });\r\n}\r\n\r\nexport function getMinor(version: string): string | null {\r\n const coerced = semver.coerce(version);\r\n if (!coerced) return null;\r\n return `${coerced.major}.${coerced.minor}`;\r\n}\r\n\r\nexport function readTextFile(cwd: string, relativePath: string): string | null {\r\n try {\r\n return readFileSync(join(cwd, relativePath), 'utf8');\r\n } catch {\r\n return null;\r\n }\r\n}\r\n\r\nexport function fileExists(cwd: string, relativePath: string): boolean {\r\n try {\r\n return existsSync(join(cwd, relativePath));\r\n } catch {\r\n return false;\r\n }\r\n}\r\n\r\nexport function grepSrcForPattern(cwd: string, pattern: RegExp): boolean {\r\n const filesToScan = [\r\n 'App.tsx',\r\n 'src/providers/AppProviders.tsx',\r\n ];\r\n\r\n for (const file of filesToScan) {\r\n const content = readTextFile(cwd, file);\r\n if (content && pattern.test(content)) return true;\r\n }\r\n\r\n const srcRoot = join(cwd, 'src');\r\n try {\r\n const walk = (dir: string): boolean => {\r\n for (const entry of readdirSync(dir)) {\r\n const full = join(dir, entry);\r\n const stat = statSync(full);\r\n if (stat.isDirectory()) {\r\n if (walk(full)) return true;\r\n } else if (/\\.(tsx?|jsx?)$/.test(entry)) {\r\n const content = readFileSync(full, 'utf8');\r\n if (pattern.test(content)) return true;\r\n }\r\n }\r\n return false;\r\n };\r\n if (existsSync(srcRoot)) return walk(srcRoot);\r\n } catch {\r\n // ignore walk errors\r\n }\r\n\r\n return false;\r\n}\r\n","import { readFileSync, writeFileSync, mkdirSync } from 'node:fs';\r\nimport { dirname, join } from 'node:path';\r\n\r\nimport type { IdiaManifest } from '../types.js';\r\nimport { fileExists } from './fs.js';\r\n\r\nconst CLI_VERSION = '0.2.1';\r\n\r\nexport function readManifest(cwd: string): IdiaManifest | null {\r\n try {\r\n const raw = readFileSync(join(cwd, '.idia', 'manifest.json'), 'utf8');\r\n return JSON.parse(raw) as IdiaManifest;\r\n } catch {\r\n return null;\r\n }\r\n}\r\n\r\nexport function writeManifest(cwd: string, manifest: IdiaManifest): void {\r\n const manifestPath = join(cwd, '.idia', 'manifest.json');\r\n mkdirSync(dirname(manifestPath), { recursive: true });\r\n writeFileSync(manifestPath, `${JSON.stringify(manifest, null, 2)}\\n`, 'utf8');\r\n}\r\n\r\nexport function regenerateManifest(\r\n cwd: string,\r\n coreVersion: string,\r\n): { created: boolean; path: string } {\r\n const manifestPath = join(cwd, '.idia', 'manifest.json');\r\n const manifest: IdiaManifest = {\r\n idiaCli: CLI_VERSION,\r\n core: coreVersion,\r\n };\r\n writeManifest(cwd, manifest);\r\n return { created: true, path: manifestPath };\r\n}\r\n\r\nexport function manifestExists(cwd: string): boolean {\r\n return fileExists(cwd, '.idia/manifest.json');\r\n}\r\n\r\nexport function validateManifestShape(manifest: IdiaManifest): boolean {\r\n return (\r\n typeof manifest.idiaCli === 'string' &&\r\n typeof manifest.core === 'string' &&\r\n /^\\d+\\.\\d+\\.\\d+/.test(manifest.idiaCli) &&\r\n /^\\d+\\.\\d+\\.\\d+/.test(manifest.core)\r\n );\r\n}\r\n\r\nexport { CLI_VERSION };\r\n","import { cpSync, existsSync, mkdirSync, readdirSync, statSync } from 'node:fs';\r\nimport { join } from 'node:path';\r\n\r\nimport { patchRootAgentsMd } from './agents-patch.js';\r\nimport {\r\n BRAIN_PACK_NAME,\r\n BRAIN_PACK_VERSION,\r\n BRAIN_TIER_DISCLAIMER,\r\n} from './constants.js';\r\nimport {\r\n brainPackSpecForApp,\r\n readBrainPackManifest,\r\n resolveBrainPackRoot,\r\n} from './pack.js';\r\nimport { runPmAddDev, runPmInstall } from '../utils/exec.js';\r\nimport { fileExists } from '../utils/fs.js';\r\nimport { readInstalledVersion, readPackageJson } from '../utils/package-json.js';\r\nimport { detectPackageManager } from '../utils/pm.js';\r\nimport { readManifest, writeManifest, CLI_VERSION } from '../utils/manifest.js';\r\nimport type { IdiaManifest } from '../types.js';\r\n\r\nexport type BrainInstallOptions = {\r\n cwd: string;\r\n repair?: boolean;\r\n force?: boolean;\r\n pm?: 'pnpm' | 'npm' | 'yarn';\r\n skipInstall?: boolean;\r\n};\r\n\r\nexport type BrainInstallResult = {\r\n alreadyInstalled: boolean;\r\n packRoot: string;\r\n sourceHash: string;\r\n agentsPatch: ReturnType<typeof patchRootAgentsMd>;\r\n};\r\n\r\nfunction copyDirRecursive(src: string, dest: string, force: boolean): void {\r\n mkdirSync(dest, { recursive: true });\r\n for (const entry of readdirSync(src)) {\r\n const srcPath = join(src, entry);\r\n const destPath = join(dest, entry);\r\n const stat = statSync(srcPath);\r\n if (stat.isDirectory()) {\r\n copyDirRecursive(srcPath, destPath, force);\r\n } else {\r\n if (!force && existsSync(destPath)) continue;\r\n cpSync(srcPath, destPath);\r\n }\r\n }\r\n}\r\n\r\nfunction ensureBrainPackDependency(\r\n cwd: string,\r\n pm: 'pnpm' | 'npm' | 'yarn',\r\n skipInstall: boolean,\r\n): void {\r\n const pkg = readPackageJson(cwd);\r\n if (!pkg) throw new Error('package.json not found');\r\n\r\n const spec = brainPackSpecForApp(cwd);\r\n const existing = pkg.devDependencies?.[BRAIN_PACK_NAME];\r\n if (existing === spec || existing === BRAIN_PACK_VERSION) {\r\n if (!skipInstall && !existsSync(join(cwd, 'node_modules', BRAIN_PACK_NAME))) {\r\n runPmInstall(cwd, pm);\r\n }\r\n return;\r\n }\r\n\r\n if (!skipInstall) {\r\n runPmAddDev(cwd, pm, `${BRAIN_PACK_NAME}@${spec}`);\r\n }\r\n}\r\n\r\nfunction isBrainInstalled(cwd: string, manifest: IdiaManifest | null): boolean {\r\n const hasAgents = fileExists(cwd, '.idia/brain/AGENTS.md');\r\n const hasFeature = Boolean(manifest?.features?.brain?.brainPack);\r\n return hasAgents && hasFeature;\r\n}\r\n\r\nexport function installBrainPack(options: BrainInstallOptions): BrainInstallResult {\r\n const { cwd, repair = false, force = false, skipInstall = false } = options;\r\n const pm = options.pm ?? detectPackageManager(cwd);\r\n const manifest = readManifest(cwd);\r\n\r\n if (isBrainInstalled(cwd, manifest) && !repair && !force) {\r\n const packRoot = resolveBrainPackRoot(cwd);\r\n if (packRoot) {\r\n const packManifest = readBrainPackManifest(packRoot);\r\n return {\r\n alreadyInstalled: true,\r\n packRoot,\r\n sourceHash: packManifest?.sourceHash ?? '',\r\n agentsPatch: { status: 'merged' },\r\n };\r\n }\r\n }\r\n\r\n ensureBrainPackDependency(cwd, pm, skipInstall);\r\n\r\n const packRoot = resolveBrainPackRoot(cwd);\r\n if (!packRoot) {\r\n throw new Error(\r\n `${BRAIN_PACK_NAME} not found. Run ${pm} add -D ${BRAIN_PACK_NAME} and retry.`,\r\n );\r\n }\r\n\r\n const packManifest = readBrainPackManifest(packRoot);\r\n if (!packManifest?.sourceHash) {\r\n throw new Error(`${BRAIN_PACK_NAME} pack-manifest.json missing or invalid.`);\r\n }\r\n\r\n const brainSrc = join(packRoot, 'brain');\r\n const rulesSrc = join(packRoot, 'cursor-rules');\r\n const brainDest = join(cwd, '.idia', 'brain');\r\n const rulesDest = join(cwd, '.cursor', 'rules');\r\n\r\n copyDirRecursive(brainSrc, brainDest, force || repair);\r\n mkdirSync(rulesDest, { recursive: true });\r\n copyDirRecursive(rulesSrc, rulesDest, force || repair);\r\n\r\n const agentsPatch = patchRootAgentsMd(cwd, { repair, force });\r\n\r\n const coreVersion =\r\n readInstalledVersion(cwd, '@idia-ui/core') ??\r\n manifest?.core ??\r\n packManifest.core;\r\n\r\n const nextManifest: IdiaManifest = {\r\n idiaCli: manifest?.idiaCli ?? CLI_VERSION,\r\n core: coreVersion,\r\n features: {\r\n ...manifest?.features,\r\n brain: {\r\n installed: new Date().toISOString(),\r\n brainPack: packManifest.brainPack,\r\n sourceHash: packManifest.sourceHash,\r\n },\r\n },\r\n };\r\n writeManifest(cwd, nextManifest);\r\n\r\n return {\r\n alreadyInstalled: false,\r\n packRoot,\r\n sourceHash: packManifest.sourceHash,\r\n agentsPatch,\r\n };\r\n}\r\n\r\nexport function printBrainInstallSummary(result: BrainInstallResult): void {\r\n if (result.alreadyInstalled) {\r\n console.log('✓ brain pack already installed');\r\n console.log(` .idia/brain/AGENTS.md`);\r\n console.log(` sourceHash: ${result.sourceHash || '(unknown)'}`);\r\n console.log('');\r\n console.log(BRAIN_TIER_DISCLAIMER);\r\n return;\r\n }\r\n\r\n console.log('✓ brain pack installed to .idia/brain/');\r\n console.log('✓ cursor rules copied to .cursor/rules/idia-ui-*.mdc');\r\n\r\n switch (result.agentsPatch.status) {\r\n case 'created':\r\n console.log('✓ AGENTS.md created with idia-ui brain block');\r\n break;\r\n case 'merged':\r\n console.log('✓ AGENTS.md updated with idia-ui brain block');\r\n break;\r\n case 'replaced':\r\n console.log('✓ AGENTS.md brain block repaired');\r\n break;\r\n case 'conflict':\r\n console.warn(\r\n `⚠ AGENTS.md conflict — wrote suggested patch: ${result.agentsPatch.patchPath}`,\r\n );\r\n console.warn(' Run idia-ui add brain --repair --force to overwrite.');\r\n break;\r\n }\r\n\r\n console.log(` sourceHash: ${result.sourceHash}`);\r\n console.log('');\r\n console.log(BRAIN_TIER_DISCLAIMER);\r\n}\r\n","import { mkdirSync, writeFileSync } from 'node:fs';\r\nimport { dirname, join } from 'node:path';\r\n\r\nimport {\r\n AGENTS_BEGIN,\r\n AGENTS_BRAIN_BLOCK,\r\n AGENTS_END,\r\n} from './constants.js';\r\nimport { readTextFile } from '../utils/fs.js';\r\n\r\nexport type AgentsPatchResult =\r\n | { status: 'created' | 'merged' | 'replaced' }\r\n | { status: 'conflict'; patchPath: string };\r\n\r\nexport function patchRootAgentsMd(\r\n cwd: string,\r\n options: { repair?: boolean; force?: boolean },\r\n): AgentsPatchResult {\r\n const agentsPath = join(cwd, 'AGENTS.md');\r\n const existing = readTextFile(cwd, 'AGENTS.md');\r\n\r\n if (existing === null) {\r\n writeFileSync(agentsPath, `${AGENTS_BRAIN_BLOCK}\\n`, 'utf8');\r\n return { status: 'created' };\r\n }\r\n\r\n const hasBegin = existing.includes(AGENTS_BEGIN);\r\n const hasEnd = existing.includes(AGENTS_END);\r\n\r\n if (hasBegin && hasEnd) {\r\n if (!options.repair && !options.force) {\r\n return { status: 'merged' };\r\n }\r\n const updated = existing.replace(\r\n new RegExp(`${escapeRegExp(AGENTS_BEGIN)}[\\\\s\\\\S]*?${escapeRegExp(AGENTS_END)}`),\r\n AGENTS_BRAIN_BLOCK,\r\n );\r\n if (updated === existing && !options.force) {\r\n return { status: 'merged' };\r\n }\r\n writeFileSync(agentsPath, updated, 'utf8');\r\n return { status: 'replaced' };\r\n }\r\n\r\n if (hasBegin !== hasEnd) {\r\n if (options.force) {\r\n const withoutPartial = existing\r\n .replace(new RegExp(`${escapeRegExp(AGENTS_BEGIN)}[\\\\s\\\\S]*`), '')\r\n .replace(AGENTS_END, '');\r\n writeFileSync(\r\n agentsPath,\r\n `${withoutPartial.trimEnd()}\\n\\n${AGENTS_BRAIN_BLOCK}\\n`,\r\n 'utf8',\r\n );\r\n return { status: 'replaced' };\r\n }\r\n return writeConflictPatch(cwd, existing);\r\n }\r\n\r\n writeFileSync(agentsPath, `${existing.trimEnd()}\\n\\n${AGENTS_BRAIN_BLOCK}\\n`, 'utf8');\r\n return { status: 'merged' };\r\n}\r\n\r\nfunction writeConflictPatch(cwd: string, existing: string): AgentsPatchResult {\r\n const patchDir = join(cwd, '.idia', 'patches');\r\n mkdirSync(patchDir, { recursive: true });\r\n const patchPath = join(patchDir, 'AGENTS.md.patch');\r\n const patchBody = [\r\n '# AGENTS.md brain block patch (idia-ui add brain)',\r\n '# Apply manually or run: idia-ui add brain --repair --force',\r\n '',\r\n AGENTS_BRAIN_BLOCK,\r\n '',\r\n '# --- existing AGENTS.md preserved below ---',\r\n '',\r\n existing,\r\n ].join('\\n');\r\n writeFileSync(patchPath, patchBody, 'utf8');\r\n return { status: 'conflict', patchPath };\r\n}\r\n\r\nfunction escapeRegExp(value: string): string {\r\n return value.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\r\n}\r\n","export const BRAIN_PACK_NAME = '@idia-ui/brain-pack';\r\nexport const BRAIN_PACK_VERSION = '0.2.0';\r\n\r\nexport const BRAIN_TIER_DISCLAIMER =\r\n '@idia-ui/brain-pack is a generated AI retrieval pack for idia-ui usage guidance. It does not imply Tier 1 passive external-agent graduation, GA readiness, or full-catalog efficacy.';\r\n\r\nexport const BRAIN_DOCTOR_DISCLAIMER =\r\n 'brain pack is experimental retrieval guidance; it does not imply Tier 1P graduation';\r\n\r\nexport const AGENTS_BEGIN = '<!-- idia-ui brain:begin -->';\r\nexport const AGENTS_END = '<!-- idia-ui brain:end -->';\r\n\r\nexport const AGENTS_BRAIN_BLOCK = `${AGENTS_BEGIN}\r\n## idia-ui design-system brain\r\n\r\nFor idia-ui component usage, design-system documentation, Storybook docs, UI generation, or AI-guided UI work, read:\r\n\r\n\\`.idia/brain/AGENTS.md\\`\r\n\r\nbefore using idia-ui components.\r\n\r\nThis installed brain pack is read-only generated guidance. Do not edit files under \\`.idia/brain/\\` directly.\r\n${AGENTS_END}`;\r\n","import { existsSync, readFileSync } from 'node:fs';\r\nimport { createRequire } from 'node:module';\r\nimport { dirname, join } from 'node:path';\r\n\r\nimport { BRAIN_PACK_NAME } from './constants.js';\r\n\r\nexport type BrainPackManifest = {\r\n brainPack: string;\r\n core: string;\r\n sourceHash: string;\r\n coverage?: Record<string, unknown>;\r\n tierClaims?: Record<string, string>;\r\n};\r\n\r\nexport function resolveBrainPackRoot(cwd: string): string | null {\r\n const local = join(cwd, 'node_modules', BRAIN_PACK_NAME);\r\n if (existsSync(join(local, 'pack-manifest.json'))) return local;\r\n\r\n try {\r\n const require = createRequire(join(cwd, 'package.json'));\r\n const pkgJson = require.resolve(`${BRAIN_PACK_NAME}/package.json`);\r\n return dirname(pkgJson);\r\n } catch {\r\n return null;\r\n }\r\n}\r\n\r\nexport function readBrainPackManifest(packRoot: string): BrainPackManifest | null {\r\n try {\r\n const raw = readFileSync(join(packRoot, 'pack-manifest.json'), 'utf8');\r\n return JSON.parse(raw) as BrainPackManifest;\r\n } catch {\r\n return null;\r\n }\r\n}\r\n\r\nexport function brainPackSpecForApp(cwd: string): string {\r\n try {\r\n const pkgPath = join(cwd, 'package.json');\r\n const pkg = JSON.parse(readFileSync(pkgPath, 'utf8')) as {\r\n dependencies?: Record<string, string>;\r\n devDependencies?: Record<string, string>;\r\n };\r\n const deps = { ...pkg.dependencies, ...pkg.devDependencies };\r\n const usesWorkspace = Object.values(deps).some((v) => v === 'workspace:*');\r\n if (usesWorkspace) return 'workspace:*';\r\n } catch {\r\n // fall through\r\n }\r\n return '^0.2.0';\r\n}\r\n\r\nexport function readInstalledPackManifest(\r\n cwd: string,\r\n packageName: string,\r\n manifestFile = 'pack-manifest.json',\r\n): { sourceHash?: string } | null {\r\n try {\r\n const raw = readFileSync(\r\n join(cwd, 'node_modules', packageName, manifestFile),\r\n 'utf8',\r\n );\r\n return JSON.parse(raw) as { sourceHash?: string };\r\n } catch {\r\n return null;\r\n }\r\n}\r\n","import { spawnSync } from 'node:child_process';\r\n\r\nimport type { PackageManager } from './pm.js';\r\n\r\nexport function runPmInstall(cwd: string, pm: PackageManager): void {\r\n const result = spawnCommand(pm, installArgs(pm), cwd);\r\n if (result.status !== 0) {\r\n throw new Error(`${pm} install failed (exit ${result.status ?? 1})`);\r\n }\r\n}\r\n\r\nexport function runPmAddDev(\r\n cwd: string,\r\n pm: PackageManager,\r\n packageSpec: string,\r\n): void {\r\n const result = spawnCommand(pm, addDevArgs(pm, packageSpec), cwd);\r\n if (result.status !== 0) {\r\n throw new Error(`${pm} add failed for ${packageSpec} (exit ${result.status ?? 1})`);\r\n }\r\n}\r\n\r\nfunction installArgs(pm: PackageManager): string[] {\r\n switch (pm) {\r\n case 'pnpm':\r\n return ['install'];\r\n case 'yarn':\r\n return ['install'];\r\n default:\r\n return ['install'];\r\n }\r\n}\r\n\r\nfunction addDevArgs(pm: PackageManager, packageSpec: string): string[] {\r\n switch (pm) {\r\n case 'pnpm':\r\n return ['add', '-D', packageSpec];\r\n case 'yarn':\r\n return ['add', '-D', packageSpec];\r\n default:\r\n return ['install', '-D', packageSpec];\r\n }\r\n}\r\n\r\nfunction spawnCommand(\r\n pm: PackageManager,\r\n args: string[],\r\n cwd: string,\r\n): ReturnType<typeof spawnSync> {\r\n const command = pm === 'npm' ? 'npm' : pm;\r\n return spawnSync(command, args, { cwd, stdio: 'inherit', shell: process.platform === 'win32' });\r\n}\r\n","export { runAddStorybook } from './storybook/add.js';\r\nexport type { AddStorybookOptions } from './storybook/add.js';\r\n\r\nimport { installBrainPack, printBrainInstallSummary } from '../brain/install.js';\r\nimport { BRAIN_TIER_DISCLAIMER } from '../brain/constants.js';\r\n\r\nexport type AddBrainOptions = {\r\n cwd: string;\r\n repair?: boolean;\r\n force?: boolean;\r\n pm?: 'pnpm' | 'npm' | 'yarn';\r\n};\r\n\r\nexport function runAddBrain(options: AddBrainOptions): void {\r\n try {\r\n const result = installBrainPack({\r\n cwd: options.cwd,\r\n repair: options.repair,\r\n force: options.force,\r\n pm: options.pm,\r\n });\r\n printBrainInstallSummary(result);\r\n\r\n if (result.agentsPatch.status === 'conflict') {\r\n process.exit(1);\r\n }\r\n } catch (error) {\r\n console.error(error instanceof Error ? error.message : String(error));\r\n console.error(BRAIN_TIER_DISCLAIMER);\r\n process.exit(1);\r\n }\r\n}\r\n\r\nexport function runAddUnknown(target: string): never {\r\n console.error(`Unknown add target: ${target}`);\r\n console.error('Available: storybook, brain');\r\n process.exit(1);\r\n}\r\n","import { readFileSync, readdirSync } from 'node:fs';\r\nimport { join } from 'node:path';\r\n\r\nimport type { CheckResult } from '../types.js';\r\nimport { BRAIN_DOCTOR_DISCLAIMER } from '../brain/constants.js';\r\nimport {\r\n readBrainPackManifest,\r\n readInstalledPackManifest,\r\n resolveBrainPackRoot,\r\n} from '../brain/pack.js';\r\nimport { fileExists, getMinor, readTextFile } from '../utils/fs.js';\r\nimport { readInstalledVersion } from '../utils/package-json.js';\r\nimport { readManifest } from '../utils/manifest.js';\r\n\r\nfunction readCoverageManifest(cwd: string): {\r\n components?: Record<string, { coverage?: string }>;\r\n} | null {\r\n try {\r\n const raw = readFileSync(\r\n join(cwd, 'node_modules/@idia-ui/storybook-docs/fragments/coverage-manifest.json'),\r\n 'utf8',\r\n );\r\n return JSON.parse(raw) as { components?: Record<string, { coverage?: string }> };\r\n } catch {\r\n return null;\r\n }\r\n}\r\n\r\nfunction listStoryComponentIds(cwd: string): string[] {\r\n const storiesDir = join(cwd, 'src/stories');\r\n const ids = new Set<string>();\r\n\r\n try {\r\n for (const file of readdirSync(storiesDir)) {\r\n const match = file.match(/^([A-Za-z]+)\\.stories\\.(tsx?|jsx?)$/);\r\n if (match) {\r\n ids.add(match[1].toLowerCase());\r\n }\r\n }\r\n } catch {\r\n return [];\r\n }\r\n\r\n return [...ids].sort();\r\n}\r\n\r\nexport function runStorybookChecks(cwd: string): CheckResult[] {\r\n const hasPreview = fileExists(cwd, '.storybook/preview.tsx');\r\n const storybookDocs = fileExists(\r\n cwd,\r\n 'node_modules/@idia-ui/storybook-docs/package.json',\r\n );\r\n\r\n if (!hasPreview && !storybookDocs) {\r\n return [\r\n {\r\n id: 'S1',\r\n status: 'info',\r\n message: 'Storybook not installed — skipping S* checks',\r\n },\r\n {\r\n id: 'S2',\r\n status: 'skip',\r\n message: '@idia-ui/storybook-docs not installed',\r\n },\r\n {\r\n id: 'S3',\r\n status: 'skip',\r\n message: 'storybook fragment manifest not available',\r\n },\r\n ];\r\n }\r\n\r\n const results: CheckResult[] = [];\r\n\r\n const preview = readTextFile(cwd, '.storybook/preview.tsx');\r\n const importsTamagui =\r\n preview !== null &&\r\n (/tamagui\\.config/.test(preview) || /AppProviders/.test(preview));\r\n\r\n if (importsTamagui) {\r\n results.push({\r\n id: 'S1',\r\n status: 'pass',\r\n message: '.storybook/preview.tsx wires AppProviders (shared token parity)',\r\n });\r\n } else {\r\n results.push({\r\n id: 'S1',\r\n status: 'fail',\r\n message: '.storybook/preview.tsx missing AppProviders / tamagui.config wiring',\r\n fixHint: 'idia-ui add storybook --repair',\r\n });\r\n }\r\n\r\n const docsVersion = readInstalledVersion(cwd, '@idia-ui/storybook-docs');\r\n const coreVersion = readInstalledVersion(cwd, '@idia-ui/core');\r\n const docsMinor = docsVersion ? getMinor(docsVersion) : null;\r\n const coreMinor = coreVersion ? getMinor(coreVersion) : null;\r\n\r\n if (!storybookDocs) {\r\n results.push({\r\n id: 'S2',\r\n status: 'warn',\r\n message: '@idia-ui/storybook-docs not installed',\r\n fixHint: 'idia-ui add storybook',\r\n });\r\n } else if (docsMinor && coreMinor && docsMinor === coreMinor) {\r\n results.push({\r\n id: 'S2',\r\n status: 'pass',\r\n message: `@idia-ui/storybook-docs@${docsVersion} matches @idia-ui/core@${coreVersion} minor`,\r\n });\r\n } else {\r\n results.push({\r\n id: 'S2',\r\n status: 'warn',\r\n message: `storybook-docs minor (${docsMinor ?? 'unknown'}) ≠ core minor (${coreMinor ?? 'unknown'})`,\r\n fixHint: 'idia-ui sync storybook',\r\n });\r\n }\r\n\r\n const coverage = readCoverageManifest(cwd);\r\n const coveredIds = coverage?.components ? Object.keys(coverage.components) : [];\r\n const storyIds = listStoryComponentIds(cwd);\r\n const uncovered = storyIds.filter((id) => !coveredIds.includes(id));\r\n\r\n if (!coverage) {\r\n results.push({\r\n id: 'S3',\r\n status: 'warn',\r\n message: 'coverage manifest not readable',\r\n fixHint: 'idia-ui sync storybook',\r\n });\r\n } else if (uncovered.length === 0) {\r\n results.push({\r\n id: 'S3',\r\n status: 'pass',\r\n message:\r\n coveredIds.length > 0\r\n ? `fragment manifest covers ${coveredIds.length} Wave 1 components; story files aligned`\r\n : 'fragment manifest present; no src/stories/ files to cross-ref',\r\n });\r\n if (coveredIds.length > 0 && coveredIds.length < 10) {\r\n results.push({\r\n id: 'S3-info',\r\n status: 'info',\r\n message: `storybook-docs pack has doc fragments for ${coveredIds.length} components. Other components render without brain prose.`,\r\n });\r\n }\r\n } else {\r\n results.push({\r\n id: 'S3',\r\n status: 'warn',\r\n message: `stories without fragments: ${uncovered.join(', ')}`,\r\n fixHint: 'upgrade @idia-ui/storybook-docs or remove uncovered stories',\r\n });\r\n }\r\n\r\n const manifest = readManifest(cwd);\r\n if (storybookDocs && !manifest?.features?.storybook) {\r\n results.push({\r\n id: 'S-manifest',\r\n status: 'warn',\r\n message: 'manifest features.storybook missing',\r\n fixHint: 'idia-ui sync storybook',\r\n });\r\n }\r\n\r\n return results;\r\n}\r\n\r\nfunction readStorybookDocsSourceHash(cwd: string): string | null {\r\n return (\r\n readInstalledPackManifest(\r\n cwd,\r\n '@idia-ui/storybook-docs',\r\n 'fragments/coverage-manifest.json',\r\n )?.sourceHash ??\r\n readInstalledPackManifest(cwd, '@idia-ui/storybook-docs', 'coverage-manifest.json')\r\n ?.sourceHash ??\r\n readInstalledPackManifest(cwd, '@idia-ui/storybook-docs')?.sourceHash ??\r\n null\r\n );\r\n}\r\n\r\nfunction readPackSourceHash(cwd: string, packageName: string): string | null {\r\n if (packageName === '@idia-ui/storybook-docs') {\r\n return readStorybookDocsSourceHash(cwd);\r\n }\r\n return readInstalledPackManifest(cwd, packageName)?.sourceHash ?? null;\r\n}\r\n\r\nexport function runBrainChecks(cwd: string): CheckResult[] {\r\n const brainPackInstalled = fileExists(\r\n cwd,\r\n 'node_modules/@idia-ui/brain-pack/package.json',\r\n );\r\n const brainAgents = fileExists(cwd, '.idia/brain/AGENTS.md');\r\n const rootAgents = readTextFile(cwd, 'AGENTS.md');\r\n const hasBrainBlock =\r\n rootAgents !== null &&\r\n /idia-ui brain:begin/.test(rootAgents) &&\r\n /idia-ui brain:end/.test(rootAgents);\r\n\r\n if (!brainPackInstalled && !brainAgents) {\r\n return [\r\n {\r\n id: 'B1',\r\n status: 'warn',\r\n message: 'brain pack not installed',\r\n fixHint: 'Run idia-ui add brain',\r\n },\r\n {\r\n id: 'B2',\r\n status: 'skip',\r\n message: 'AGENTS.md brain block not present',\r\n },\r\n {\r\n id: 'B3',\r\n status: 'skip',\r\n message: 'brain sourceHash coupling not checked',\r\n },\r\n {\r\n id: 'B4',\r\n status: 'skip',\r\n message: 'brain/storybook hash coupling not checked',\r\n },\r\n ];\r\n }\r\n\r\n const results: CheckResult[] = [];\r\n const manifest = readManifest(cwd);\r\n const manifestHash = manifest?.features?.brain?.sourceHash as string | undefined;\r\n const packRoot = resolveBrainPackRoot(cwd);\r\n const packManifest = packRoot ? readBrainPackManifest(packRoot) : null;\r\n const packHash = packManifest?.sourceHash;\r\n\r\n results.push({\r\n id: 'B1',\r\n status: brainAgents ? 'pass' : 'warn',\r\n message: brainAgents\r\n ? '✓ brain pack installed'\r\n : '.idia/brain/AGENTS.md missing',\r\n fixHint: brainAgents ? undefined : 'idia-ui add brain',\r\n });\r\n\r\n results.push({\r\n id: 'B2',\r\n status: hasBrainBlock ? 'pass' : 'warn',\r\n message: hasBrainBlock\r\n ? 'root AGENTS.md contains idia-ui brain block'\r\n : 'root AGENTS.md missing idia-ui brain:begin/end block',\r\n fixHint: hasBrainBlock ? undefined : 'idia-ui add brain --repair',\r\n });\r\n\r\n if (manifestHash && packHash && manifestHash === packHash) {\r\n results.push({\r\n id: 'B3',\r\n status: 'pass',\r\n message: 'manifest sourceHash matches installed brain pack',\r\n });\r\n } else if (manifestHash && packHash) {\r\n results.push({\r\n id: 'B3',\r\n status: 'warn',\r\n message: 'manifest sourceHash drifted from brain pack pin',\r\n fixHint: 'idia-ui sync brain',\r\n });\r\n } else {\r\n results.push({\r\n id: 'B3',\r\n status: 'warn',\r\n message: 'manifest sourceHash missing or brain pack not resolved',\r\n fixHint: 'idia-ui sync brain',\r\n });\r\n }\r\n\r\n const storybookHash = readStorybookDocsSourceHash(cwd);\r\n const storybookDocsInstalled = fileExists(\r\n cwd,\r\n 'node_modules/@idia-ui/storybook-docs/package.json',\r\n );\r\n if (!storybookDocsInstalled) {\r\n results.push({\r\n id: 'B4',\r\n status: 'skip',\r\n message: 'storybook-docs not installed — B4 hash coupling skipped',\r\n });\r\n } else if (!storybookHash) {\r\n results.push({\r\n id: 'B4',\r\n status: 'warn',\r\n message: 'storybook-docs installed but coverage-manifest sourceHash not readable',\r\n fixHint: 'idia-ui sync storybook',\r\n });\r\n } else if (packHash && storybookHash === packHash) {\r\n results.push({\r\n id: 'B4',\r\n status: 'pass',\r\n message: 'brain pack and storybook-docs share sourceHash (same generate run)',\r\n });\r\n } else {\r\n results.push({\r\n id: 'B4',\r\n status: 'warn',\r\n message: 'brain pack and storybook-docs sourceHash skew',\r\n fixHint: 'idia-ui sync all',\r\n });\r\n }\r\n\r\n results.push({\r\n id: 'B-tier',\r\n status: 'info',\r\n message: `⚠ ${BRAIN_DOCTOR_DISCLAIMER}`,\r\n });\r\n\r\n return results;\r\n}\r\n\r\nexport function runCustomCheck(cwd: string): CheckResult[] {\r\n const hasStories = fileExists(cwd, 'src/stories');\r\n if (!hasStories) {\r\n return [\r\n {\r\n id: 'C1',\r\n status: 'skip',\r\n message: 'no src/stories/ directory (Storybook not configured)',\r\n },\r\n ];\r\n }\r\n\r\n return [\r\n {\r\n id: 'C1',\r\n status: 'info',\r\n message: 'wrapper/story coverage check not implemented (stub)',\r\n fixHint: 'Add stories for components in src/components/',\r\n },\r\n ];\r\n}\r\n","import type { CheckResult } from '../types.js';\r\nimport {\r\n manifestExists,\r\n readManifest,\r\n regenerateManifest,\r\n validateManifestShape,\r\n} from '../utils/manifest.js';\r\nimport { readInstalledVersion, readPackageJson } from '../utils/package-json.js';\r\n\r\nexport function runManifestCheck(\r\n cwd: string,\r\n fix: boolean,\r\n): { results: CheckResult[]; fixed: boolean } {\r\n const results: CheckResult[] = [];\r\n let fixed = false;\r\n\r\n if (!manifestExists(cwd)) {\r\n if (fix) {\r\n const pkg = readPackageJson(cwd);\r\n const coreVersion =\r\n readInstalledVersion(cwd, '@idia-ui/core') ??\r\n pkg?.dependencies?.['@idia-ui/core']?.replace(/^[\\^~]/, '') ??\r\n '0.2.0';\r\n regenerateManifest(cwd, coreVersion);\r\n fixed = true;\r\n results.push({\r\n id: 'M1',\r\n status: 'pass',\r\n message: '.idia/manifest.json regenerated',\r\n fixHint: 'Created manifest with idiaCli + core versions',\r\n });\r\n return { results, fixed };\r\n }\r\n\r\n results.push({\r\n id: 'M1',\r\n status: 'warn',\r\n message: '.idia/manifest.json missing',\r\n fixHint: 'Run idia-ui doctor --fix or idia-ui sync all after first add-on',\r\n });\r\n return { results, fixed };\r\n }\r\n\r\n const manifest = readManifest(cwd);\r\n if (!manifest || !validateManifestShape(manifest)) {\r\n results.push({\r\n id: 'M1',\r\n status: 'fail',\r\n message: '.idia/manifest.json invalid or unparseable',\r\n fixHint: 'Run idia-ui doctor --fix to regenerate',\r\n });\r\n return { results, fixed };\r\n }\r\n\r\n results.push({\r\n id: 'M1',\r\n status: 'pass',\r\n message: `.idia/manifest.json valid (core ${manifest.core}, cli ${manifest.idiaCli})`,\r\n });\r\n\r\n return { results, fixed };\r\n}\r\n","import type { CheckResult } from '../types.js';\r\nimport { grepSrcForPattern, readTextFile } from '../utils/fs.js';\r\n\r\nexport function runNavigationChecks(cwd: string): CheckResult[] {\r\n const results: CheckResult[] = [];\r\n const providers =\r\n readTextFile(cwd, 'src/providers/AppProviders.tsx') ??\r\n readTextFile(cwd, 'src/providers/AppProviders.ts');\r\n\r\n // N1\r\n if (providers && /NavigationContainer/.test(providers)) {\r\n results.push({\r\n id: 'N1',\r\n status: 'pass',\r\n message: 'NavigationContainer in provider tree',\r\n });\r\n } else {\r\n results.push({\r\n id: 'N1',\r\n status: 'fail',\r\n message: 'NavigationContainer not found in AppProviders',\r\n fixHint: 'Wrap navigation in NavigationContainer per templates/consumer-app',\r\n });\r\n }\r\n\r\n // N2 — NavigationProvider if idia Link/navigate used\r\n const usesIdiaNav =\r\n grepSrcForPattern(cwd, /\\bLink\\b.*@idia-ui\\/core/) ||\r\n grepSrcForPattern(cwd, /NavigationProvider/) ||\r\n grepSrcForPattern(cwd, /useIdiaNavigation|navigateTo/);\r\n\r\n if (usesIdiaNav) {\r\n const hasNavProvider = providers\r\n ? /NavigationProvider/.test(providers)\r\n : grepSrcForPattern(cwd, /NavigationProvider/);\r\n if (!hasNavProvider) {\r\n results.push({\r\n id: 'N2',\r\n status: 'warn',\r\n message: 'idia Link/navigation helpers used but NavigationProvider missing',\r\n fixHint: 'Wrap navigation ref with NavigationProvider from @idia-ui/core',\r\n });\r\n } else {\r\n results.push({\r\n id: 'N2',\r\n status: 'pass',\r\n message: 'NavigationProvider present',\r\n });\r\n }\r\n } else {\r\n results.push({\r\n id: 'N2',\r\n status: 'pass',\r\n message: 'idia Link/navigation helpers not used (NavigationProvider optional)',\r\n });\r\n }\r\n\r\n return results;\r\n}\r\n","import type { CheckResult } from '../types.js';\r\nimport {\r\n getDepVersion,\r\n readInstalledVersion,\r\n readPeerRange,\r\n readPackageJson,\r\n} from '../utils/package-json.js';\r\nimport { satisfiesRange } from '../utils/fs.js';\r\nimport { detectPackageManager, pmAddCommand } from '../utils/pm.js';\r\n\r\nconst P2_PACKAGES = [\r\n 'react-native-reanimated',\r\n 'react-native-gesture-handler',\r\n 'react-native-screens',\r\n 'react-native-safe-area-context',\r\n] as const;\r\n\r\nconst BARREL_REQUIRED_PEERS = ['zustand', '@tanstack/react-table'] as const;\r\n\r\nconst BARREL_OPTIONAL_PEERS = [\r\n 'react-image-crop',\r\n '@fullcalendar/core',\r\n '@fullcalendar/daygrid',\r\n '@fullcalendar/timegrid',\r\n '@fullcalendar/interaction',\r\n '@fullcalendar/multimonth',\r\n '@fullcalendar/list',\r\n '@fullcalendar/react',\r\n] as const;\r\n\r\nexport function runPeerChecks(cwd: string): CheckResult[] {\r\n const pkg = readPackageJson(cwd);\r\n if (!pkg) {\r\n return [\r\n {\r\n id: 'P0',\r\n status: 'fail',\r\n message: 'package.json not found or unreadable',\r\n fixHint: 'Run idia-ui doctor from your app root',\r\n },\r\n ];\r\n }\r\n\r\n const pm = detectPackageManager(cwd);\r\n const results: CheckResult[] = [];\r\n\r\n // P1 — tamagui peer range\r\n const tamaguiVersion =\r\n readInstalledVersion(cwd, 'tamagui') ??\r\n getDepVersion(pkg, 'tamagui')?.replace(/^[\\^~]/, '') ??\r\n null;\r\n const coreRange =\r\n readPeerRange(cwd, '@idia-ui/core', 'tamagui') ??\r\n readPeerRange(cwd, '@idia-ui/theme', 'tamagui') ??\r\n '^1.70.0';\r\n\r\n if (!tamaguiVersion) {\r\n results.push({\r\n id: 'P1',\r\n status: 'fail',\r\n message: 'tamagui not installed',\r\n fixHint: pmAddCommand(pm, ['tamagui@^1.144.0']),\r\n });\r\n } else if (!satisfiesRange(tamaguiVersion, coreRange)) {\r\n results.push({\r\n id: 'P1',\r\n status: 'fail',\r\n message: `tamagui ${tamaguiVersion} outside peer range ${coreRange}`,\r\n fixHint: pmAddCommand(pm, [`tamagui@${coreRange}`]),\r\n });\r\n } else {\r\n results.push({\r\n id: 'P1',\r\n status: 'pass',\r\n message: `tamagui ${tamaguiVersion} in peer range`,\r\n });\r\n }\r\n\r\n // P2 — navigation/gesture peers\r\n const missingP2 = P2_PACKAGES.filter((name) => {\r\n const installed = readInstalledVersion(cwd, name);\r\n const declared = getDepVersion(pkg, name);\r\n return !installed && !declared;\r\n });\r\n\r\n if (missingP2.length > 0) {\r\n results.push({\r\n id: 'P2',\r\n status: 'fail',\r\n message: `missing navigation/gesture peers: ${missingP2.join(', ')}`,\r\n fixHint: pmAddCommand(pm, [...missingP2]),\r\n });\r\n } else {\r\n results.push({\r\n id: 'P2',\r\n status: 'pass',\r\n message:\r\n 'gesture-handler, reanimated, screens, safe-area-context present',\r\n });\r\n }\r\n\r\n // P3 — @idia-ui/* alignment + barrel peers\r\n const idiaPkgs = Object.keys({\r\n ...pkg.dependencies,\r\n ...pkg.devDependencies,\r\n }).filter((n) => n.startsWith('@idia-ui/'));\r\n\r\n const idiaVersions = idiaPkgs\r\n .map((name) => {\r\n const v =\r\n readInstalledVersion(cwd, name) ??\r\n getDepVersion(pkg, name)?.replace(/^[\\^~]/, '');\r\n return v ? { name, version: v } : null;\r\n })\r\n .filter((x): x is { name: string; version: string } => x !== null);\r\n\r\n const minors = new Set(\r\n idiaVersions\r\n .map((p) => {\r\n const parts = p.version.split('.');\r\n return parts.length >= 2 ? `${parts[0]}.${parts[1]}` : null;\r\n })\r\n .filter((m): m is string => m !== null && !m.includes('workspace')),\r\n );\r\n\r\n if (idiaVersions.length === 0) {\r\n results.push({\r\n id: 'P3',\r\n status: 'fail',\r\n message: 'no @idia-ui/* packages in dependencies',\r\n fixHint: pmAddCommand(pm, ['@idia-ui/core@latest', '@idia-ui/theme@latest']),\r\n });\r\n } else if (minors.size > 1) {\r\n results.push({\r\n id: 'P3',\r\n status: 'fail',\r\n message: `@idia-ui/* minor versions misaligned: ${[...minors].join(', ')}`,\r\n fixHint: `${pm === 'pnpm' ? 'pnpm' : pm} update @idia-ui/*`,\r\n });\r\n } else {\r\n results.push({\r\n id: 'P3',\r\n status: 'pass',\r\n message: `@idia-ui/* versions aligned (${idiaVersions.map((p) => `${p.name}@${p.version}`).join(', ')})`,\r\n });\r\n }\r\n\r\n for (const peer of BARREL_REQUIRED_PEERS) {\r\n const installed = readInstalledVersion(cwd, peer);\r\n const declared = getDepVersion(pkg, peer);\r\n if (!installed && !declared) {\r\n results.push({\r\n id: 'P3',\r\n status: 'fail',\r\n message: `barrel peer ${peer} not installed (required for @idia-ui/core Table graph)`,\r\n fixHint: `${pmAddCommand(pm, [peer])} — see docs/generated/peer-dep-matrix.md`,\r\n });\r\n }\r\n }\r\n\r\n for (const peer of BARREL_OPTIONAL_PEERS) {\r\n const installed = readInstalledVersion(cwd, peer);\r\n const declared = getDepVersion(pkg, peer);\r\n if (!installed && !declared) {\r\n results.push({\r\n id: 'P3',\r\n status: 'warn',\r\n message: `optional peer ${peer} not installed (barrel may require it)`,\r\n fixHint: `Install per peer-dep-matrix.md: ${pmAddCommand(pm, [peer])}`,\r\n });\r\n }\r\n }\r\n\r\n return results;\r\n}\r\n","import type { CheckResult } from '../types.js';\r\nimport { fileExists, grepSrcForPattern, readTextFile } from '../utils/fs.js';\r\n\r\nconst OVERLAY_IMPORT =\r\n /from\\s+['\"]@idia-ui\\/core['\"][\\s\\S]*?(Modal|Toast|Dialog|ConfirmationModal)/;\r\n\r\nexport function runRuntimeChecks(cwd: string): CheckResult[] {\r\n const results: CheckResult[] = [];\r\n\r\n // R1\r\n if (fileExists(cwd, 'tamagui.config.ts')) {\r\n results.push({\r\n id: 'R1',\r\n status: 'pass',\r\n message: 'tamagui.config.ts found',\r\n });\r\n } else {\r\n results.push({\r\n id: 'R1',\r\n status: 'fail',\r\n message: 'tamagui.config.ts missing at app root',\r\n fixHint: 'Restore from templates/consumer-app or re-scaffold',\r\n });\r\n }\r\n\r\n // R2\r\n const providers =\r\n readTextFile(cwd, 'src/providers/AppProviders.tsx') ??\r\n readTextFile(cwd, 'src/providers/AppProviders.ts');\r\n\r\n if (!providers) {\r\n results.push({\r\n id: 'R2',\r\n status: 'fail',\r\n message: 'AppProviders not found',\r\n fixHint: 'Add src/providers/AppProviders.tsx per templates/consumer-app',\r\n });\r\n } else {\r\n const hasTamagui = /TamaguiProvider/.test(providers);\r\n const hasTheme = /ThemeProvider/.test(providers) && /@idia-ui\\/theme/.test(providers);\r\n if (hasTamagui && hasTheme) {\r\n results.push({\r\n id: 'R2',\r\n status: 'pass',\r\n message: 'AppProviders: TamaguiProvider + ThemeProvider',\r\n });\r\n } else {\r\n results.push({\r\n id: 'R2',\r\n status: 'fail',\r\n message: 'AppProviders missing TamaguiProvider and/or ThemeProvider (@idia-ui/theme)',\r\n fixHint: 'Compare src/providers/AppProviders.tsx with templates/consumer-app',\r\n });\r\n }\r\n }\r\n\r\n // R3 — overlay providers\r\n const usesOverlays =\r\n grepSrcForPattern(cwd, OVERLAY_IMPORT) ||\r\n grepSrcForPattern(cwd, /\\b(Modal|Toast|Dialog)\\b.*@idia-ui\\/core/);\r\n\r\n if (usesOverlays) {\r\n const hasModal = providers ? /ModalProvider/.test(providers) : false;\r\n const hasToast = providers ? /ToastProvider/.test(providers) : false;\r\n if (!hasModal || !hasToast) {\r\n results.push({\r\n id: 'R3',\r\n status: 'warn',\r\n message: 'overlay components imported but ModalProvider/ToastProvider missing',\r\n fixHint: 'Add ModalProvider and ToastProvider to AppProviders per template',\r\n });\r\n } else {\r\n results.push({\r\n id: 'R3',\r\n status: 'pass',\r\n message: 'overlay providers present',\r\n });\r\n }\r\n } else {\r\n results.push({\r\n id: 'R3',\r\n status: 'pass',\r\n message: 'no overlay imports detected (Modal/Toast providers optional)',\r\n });\r\n }\r\n\r\n // R4 — font gate\r\n const fontGate =\r\n (providers && /waitForWebFonts/.test(providers)) ||\r\n grepSrcForPattern(cwd, /expo-font/) ||\r\n grepSrcForPattern(cwd, /useFonts/);\r\n\r\n if (fontGate) {\r\n results.push({\r\n id: 'R4',\r\n status: 'pass',\r\n message: 'web font gate configured (waitForWebFonts or expo-font)',\r\n });\r\n } else {\r\n results.push({\r\n id: 'R4',\r\n status: 'warn',\r\n message: 'no waitForWebFonts or expo-font pattern detected',\r\n fixHint: 'Copy font loading pattern from templates/consumer-app AppProviders',\r\n });\r\n }\r\n\r\n return results;\r\n}\r\n","import { runBrainChecks, runCustomCheck, runStorybookChecks } from './packs.js';\r\nimport { runManifestCheck } from './manifest.js';\r\nimport { runNavigationChecks } from './navigation.js';\r\nimport { runPeerChecks } from './peers.js';\r\nimport { runRuntimeChecks } from './runtime.js';\r\nimport type { CheckResult, DoctorOptions } from '../types.js';\r\n\r\nexport function runAllChecks(options: DoctorOptions): CheckResult[] {\r\n const { cwd, full, fix } = options;\r\n const checks: CheckResult[] = [];\r\n\r\n checks.push(...runPeerChecks(cwd));\r\n checks.push(...runRuntimeChecks(cwd));\r\n checks.push(...runNavigationChecks(cwd));\r\n\r\n const { results: manifestResults } = runManifestCheck(cwd, fix);\r\n checks.push(...manifestResults);\r\n\r\n if (full) {\r\n checks.push(...runStorybookChecks(cwd));\r\n checks.push(...runBrainChecks(cwd));\r\n checks.push(...runCustomCheck(cwd));\r\n }\r\n\r\n return checks;\r\n}\r\n\r\nexport function summarizeChecks(\r\n checks: CheckResult[],\r\n strict: boolean,\r\n): { passed: number; warnings: number; failures: number; skipped: number; exitCode: number } {\r\n let passed = 0;\r\n let warnings = 0;\r\n let failures = 0;\r\n let skipped = 0;\r\n\r\n for (const check of checks) {\r\n switch (check.status) {\r\n case 'pass':\r\n passed++;\r\n break;\r\n case 'warn':\r\n warnings++;\r\n break;\r\n case 'fail':\r\n failures++;\r\n break;\r\n case 'skip':\r\n case 'info':\r\n skipped++;\r\n break;\r\n }\r\n }\r\n\r\n let exitCode = 0;\r\n if (failures > 0) exitCode = 1;\r\n else if (strict && warnings > 0) exitCode = 1;\r\n\r\n return { passed, warnings, failures, skipped, exitCode };\r\n}\r\n","import { runAllChecks, summarizeChecks } from '../checks/index.js';\r\nimport type { DoctorOptions, DoctorReport } from '../types.js';\r\n\r\nconst STATUS_ICON: Record<string, string> = {\r\n pass: '✓',\r\n warn: '⚠',\r\n fail: '✗',\r\n info: 'ℹ',\r\n skip: '○',\r\n};\r\n\r\nexport function runDoctor(options: DoctorOptions): DoctorReport {\r\n const checks = runAllChecks(options);\r\n const summary = summarizeChecks(checks, options.strict);\r\n\r\n return {\r\n checks,\r\n summary: {\r\n passed: summary.passed,\r\n warnings: summary.warnings,\r\n failures: summary.failures,\r\n skipped: summary.skipped,\r\n },\r\n exitCode: summary.exitCode,\r\n };\r\n}\r\n\r\nexport function formatHumanReport(report: DoctorReport, full: boolean): string {\r\n const lines: string[] = ['idia-ui doctor', ''];\r\n\r\n for (const check of report.checks) {\r\n const icon = STATUS_ICON[check.status] ?? '·';\r\n lines.push(`${icon} ${check.id} ${check.message}`);\r\n if (check.fixHint && (check.status === 'fail' || check.status === 'warn')) {\r\n lines.push(` → ${check.fixHint}`);\r\n }\r\n }\r\n\r\n lines.push('');\r\n const { passed, warnings, failures } = report.summary;\r\n const mode = full ? 'full' : 'quick';\r\n lines.push(\r\n `${passed} passed, ${warnings} warnings, ${failures} failures (${mode} scan) — exit ${report.exitCode}`,\r\n );\r\n\r\n return lines.join('\\n');\r\n}\r\n\r\nexport function formatJsonReport(report: DoctorReport): string {\r\n return JSON.stringify(\r\n {\r\n checks: report.checks.map((c) => ({\r\n id: c.id,\r\n status: c.status,\r\n message: c.message,\r\n ...(c.fixHint ? { fixHint: c.fixHint } : {}),\r\n })),\r\n summary: report.summary,\r\n exitCode: report.exitCode,\r\n },\r\n null,\r\n 2,\r\n );\r\n}\r\n","import { spawnSync } from 'node:child_process'\r\n\r\nimport {\r\n STORYBOOK_CLI_VERSION,\r\n STORYBOOK_DOCS_VERSION,\r\n STORYBOOK_PRESET_VERSION,\r\n} from './constants.js'\r\nimport type { PackageManager } from '../../utils/pm.js'\r\nimport { detectPackageManager } from '../../utils/pm.js'\r\nimport { readInstalledVersion, readPackageJson } from '../../utils/package-json.js'\r\nimport { fileExists } from '../../utils/fs.js'\r\nimport { CLI_VERSION, readManifest, writeManifest } from '../../utils/manifest.js'\r\n\r\nexport type SyncStorybookOptions = {\r\n cwd: string\r\n pm?: PackageManager\r\n skipInstall?: boolean\r\n}\r\n\r\nexport type SyncStorybookResult = {\r\n synced: boolean\r\n message: string\r\n}\r\n\r\nfunction isStorybookInstalled(cwd: string): boolean {\r\n return fileExists(cwd, '.storybook/main.ts')\r\n}\r\n\r\nfunction runPmUpdate(cwd: string, pm: PackageManager): void {\r\n const packages = [\r\n `@idia-ui/storybook-docs@${STORYBOOK_DOCS_VERSION}`,\r\n `@idia-ui/storybook-preset-react-native-web@${STORYBOOK_PRESET_VERSION}`,\r\n ]\r\n\r\n const args =\r\n pm === 'pnpm'\r\n ? ['add', '-D', ...packages]\r\n : pm === 'yarn'\r\n ? ['add', '-D', ...packages]\r\n : ['install', '-D', ...packages]\r\n\r\n const result = spawnSync(pm, args, {\r\n cwd,\r\n stdio: 'inherit',\r\n shell: process.platform === 'win32',\r\n })\r\n if (result.status !== 0) {\r\n throw new Error(`${pm} update failed with exit code ${result.status ?? 'unknown'}`)\r\n }\r\n}\r\n\r\nexport function runSyncStorybook(options: SyncStorybookOptions): SyncStorybookResult {\r\n const { cwd, skipInstall = false } = options\r\n const pm = options.pm ?? detectPackageManager(cwd)\r\n\r\n if (!isStorybookInstalled(cwd)) {\r\n console.error('Storybook not installed — run idia-ui add storybook first')\r\n process.exit(1)\r\n }\r\n\r\n const manifest = readManifest(cwd)\r\n if (!manifest) {\r\n console.error('.idia/manifest.json missing — run idia-ui doctor --fix')\r\n process.exit(1)\r\n }\r\n\r\n const corePkg = readPackageJson(cwd)\r\n const coreVersion =\r\n readInstalledVersion(cwd, '@idia-ui/core') ??\r\n corePkg?.dependencies?.['@idia-ui/core']?.replace(/^[\\^~]/, '') ??\r\n manifest.core\r\n\r\n if (!skipInstall) {\r\n console.log(`Syncing storybook packs via ${pm}…`)\r\n runPmUpdate(cwd, pm)\r\n }\r\n\r\n manifest.idiaCli = CLI_VERSION\r\n manifest.core = coreVersion\r\n manifest.features ??= {}\r\n manifest.features.storybook = {\r\n installed: (manifest.features.storybook as { installed?: string } | undefined)?.installed ??\r\n new Date().toISOString(),\r\n storybookDocs: STORYBOOK_DOCS_VERSION,\r\n storybook: STORYBOOK_CLI_VERSION,\r\n preset: STORYBOOK_PRESET_VERSION,\r\n }\r\n writeManifest(cwd, manifest)\r\n\r\n console.log(`✓ Synced @idia-ui/storybook-docs@${STORYBOOK_DOCS_VERSION}`)\r\n console.log(`✓ Synced @idia-ui/storybook-preset-react-native-web@${STORYBOOK_PRESET_VERSION}`)\r\n\r\n return {\r\n synced: true,\r\n message: `storybook-docs@${STORYBOOK_DOCS_VERSION} aligned with core@${coreVersion}`,\r\n }\r\n}\r\n\r\n","import { installBrainPack, printBrainInstallSummary } from '../brain/install.js';\r\nimport { BRAIN_DOCTOR_DISCLAIMER, BRAIN_TIER_DISCLAIMER } from '../brain/constants.js';\r\nimport { runSyncStorybook as syncStorybookPack } from './storybook/sync.js';\r\nimport { fileExists } from '../utils/fs.js';\r\nimport { readManifest } from '../utils/manifest.js';\r\n\r\nexport type SyncOptions = {\r\n cwd: string;\r\n repair?: boolean;\r\n force?: boolean;\r\n pm?: 'pnpm' | 'npm' | 'yarn';\r\n};\r\n\r\nexport function runSyncBrain(options: SyncOptions): void {\r\n try {\r\n const result = installBrainPack({\r\n cwd: options.cwd,\r\n repair: true,\r\n force: options.force,\r\n pm: options.pm,\r\n });\r\n console.log('✓ brain pack synced');\r\n printBrainInstallSummary(result);\r\n } catch (error) {\r\n console.error(error instanceof Error ? error.message : String(error));\r\n console.error(BRAIN_TIER_DISCLAIMER);\r\n process.exit(1);\r\n }\r\n}\r\n\r\nexport function runSyncStorybook(options: SyncOptions): void {\r\n syncStorybookPack({\r\n cwd: options.cwd,\r\n pm: options.pm,\r\n });\r\n}\r\n\r\nexport function runSyncAll(options: SyncOptions): void {\r\n const { cwd } = options;\r\n const manifest = readManifest(cwd);\r\n const hasStorybook =\r\n fileExists(cwd, '.storybook/main.ts') || Boolean(manifest?.features?.storybook);\r\n const hasBrain = Boolean(manifest?.features?.brain?.brainPack);\r\n\r\n if (!hasStorybook && !hasBrain) {\r\n console.error('No storybook or brain features installed — run idia-ui add storybook or add brain first');\r\n process.exit(1);\r\n }\r\n\r\n if (hasStorybook) {\r\n syncStorybookPack({ cwd, pm: options.pm });\r\n } else {\r\n console.log('○ storybook not installed — skipping storybook sync');\r\n }\r\n\r\n if (hasBrain) {\r\n runSyncBrain(options);\r\n } else {\r\n console.log('○ brain not installed — skipping brain sync');\r\n console.error(BRAIN_DOCTOR_DISCLAIMER);\r\n }\r\n\r\n console.log('');\r\n console.log('✓ sync all complete');\r\n}\r\n\r\nexport function runSync(target: string, options: SyncOptions): void {\r\n switch (target) {\r\n case 'brain':\r\n runSyncBrain(options);\r\n break;\r\n case 'storybook':\r\n runSyncStorybook(options);\r\n break;\r\n case 'all':\r\n runSyncAll(options);\r\n break;\r\n default:\r\n console.error(`Unknown sync target: ${target}`);\r\n console.error('Available: storybook | brain | all');\r\n process.exit(1);\r\n }\r\n}\r\n"],"mappings":"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","names":["import_node_path","import_node_fs","import_node_path","import_node_fs","import_node_path","import_node_fs","import_node_path","semver","import_node_fs","import_node_path","at","import_node_fs","import_node_path","import_node_fs","import_node_path","import_node_fs","import_node_path","require","import_node_child_process","runPmInstall","runPmInstall","packRoot","packManifest","import_node_fs","import_node_path","import_node_child_process","isStorybookInstalled","runSyncStorybook"]}
|
|
1
|
+
{"version":3,"sources":["../src/cli.ts","../src/commands/storybook/add.ts","../src/commands/storybook/constants.ts","../src/commands/storybook/templates.ts","../src/utils/pm.ts","../src/utils/package-json.ts","../src/utils/fs.ts","../src/utils/exec.ts","../src/utils/manifest.ts","../src/brain/install.ts","../src/brain/agents-patch.ts","../src/brain/constants.ts","../src/brain/pack.ts","../src/commands/add.ts","../src/checks/packs.ts","../src/checks/manifest.ts","../src/checks/navigation.ts","../src/checks/peers.ts","../src/checks/runtime.ts","../src/checks/index.ts","../src/commands/doctor.ts","../src/commands/storybook/sync.ts","../src/commands/sync.ts"],"sourcesContent":["import { Command } from 'commander';\r\nimport { resolve } from 'node:path';\r\n\r\nimport { runAddBrain, runAddStorybook, runAddUnknown } from './commands/add.js';\r\nimport {\r\n formatHumanReport,\r\n formatJsonReport,\r\n runDoctor,\r\n} from './commands/doctor.js';\r\nimport { runSync } from './commands/sync.js';\r\nimport { CLI_VERSION } from './utils/manifest.js';\r\n\r\nconst program = new Command();\r\n\r\nprogram\r\n .name('idia-ui')\r\n .description('idia-ui CLI — doctor and add-on management for consumer apps')\r\n .version(CLI_VERSION);\r\n\r\nprogram\r\n .command('doctor')\r\n .description('Run health checks on an idia consumer app')\r\n .option('--cwd <path>', 'App root directory', process.cwd())\r\n .option('--full', 'Include Storybook (S*) and brain (B*) checks')\r\n .option('--fix', 'Limited safe repairs (manifest regenerate)')\r\n .option('--strict', 'Treat warnings as failures')\r\n .option('--json', 'Machine-readable JSON output')\r\n .action((opts: { cwd: string; full?: boolean; fix?: boolean; strict?: boolean; json?: boolean }) => {\r\n const cwd = resolve(opts.cwd);\r\n const report = runDoctor({\r\n cwd,\r\n full: Boolean(opts.full),\r\n fix: Boolean(opts.fix),\r\n strict: Boolean(opts.strict),\r\n json: Boolean(opts.json),\r\n });\r\n\r\n if (opts.json) {\r\n console.log(formatJsonReport(report));\r\n } else {\r\n console.log(formatHumanReport(report, Boolean(opts.full)));\r\n }\r\n\r\n process.exit(report.exitCode);\r\n });\r\n\r\nconst addCmd = program.command('add').description('Install idia add-on packs');\r\n\r\naddCmd\r\n .command('storybook')\r\n .description('Install Storybook docs pack')\r\n .option('--repair', 'Refresh CLI-owned Storybook files')\r\n .option('--force', 'Overwrite conflicts (document risk)')\r\n .option('--skip-install', 'Skip package manager install')\r\n .option('--pm <manager>', 'Override package manager (pnpm|npm|yarn)')\r\n .option('--cwd <path>', 'App root directory', process.cwd())\r\n .action(\r\n (opts: {\r\n repair?: boolean;\r\n force?: boolean;\r\n skipInstall?: boolean;\r\n pm?: string;\r\n cwd: string;\r\n }) => {\r\n runAddStorybook({\r\n cwd: resolve(opts.cwd),\r\n repair: Boolean(opts.repair),\r\n force: Boolean(opts.force),\r\n skipInstall: Boolean(opts.skipInstall),\r\n pm: parsePm(opts.pm),\r\n });\r\n process.exit(0);\r\n },\r\n );\r\n\r\naddCmd\r\n .command('brain')\r\n .description('Install brain AI pack (Phase 4 — experimental)')\r\n .option('--repair', 'Re-apply rules, AGENTS block, and .idia/brain/ from pack')\r\n .option('--force', 'Overwrite conflicts (document risk)')\r\n .option('--pm <manager>', 'Override package manager (pnpm|npm|yarn)')\r\n .option('--cwd <path>', 'App root directory', process.cwd())\r\n .action((opts: { repair?: boolean; force?: boolean; pm?: string; cwd: string }) => {\r\n runAddBrain({\r\n cwd: resolve(opts.cwd),\r\n repair: Boolean(opts.repair),\r\n force: Boolean(opts.force),\r\n pm: parsePm(opts.pm),\r\n });\r\n });\r\n\r\naddCmd\r\n .argument('[target]', 'add-on target')\r\n .action((target: string | undefined) => {\r\n if (!target) {\r\n console.error('Usage: idia-ui add <storybook|brain>');\r\n process.exit(1);\r\n }\r\n runAddUnknown(target);\r\n });\r\n\r\nconst syncCmd = program\r\n .command('sync')\r\n .description('Sync installed pack versions and manifest');\r\n\r\nsyncCmd\r\n .argument('<target>', 'storybook | brain | all')\r\n .option('--force', 'Overwrite pack-owned files')\r\n .option('--pm <manager>', 'Override package manager (pnpm|npm|yarn)')\r\n .option('--cwd <path>', 'App root directory', process.cwd())\r\n .action((target: string, opts: { force?: boolean; pm?: string; cwd: string }) => {\r\n runSync(target, {\r\n cwd: resolve(opts.cwd),\r\n force: Boolean(opts.force),\r\n pm: parsePm(opts.pm),\r\n });\r\n });\r\n\r\nprogram.parse();\r\n\r\nfunction parsePm(value: string | undefined): 'pnpm' | 'npm' | 'yarn' | undefined {\r\n if (!value) return undefined;\r\n const normalized = value.toLowerCase();\r\n if (normalized === 'pnpm' || normalized === 'npm' || normalized === 'yarn') {\r\n return normalized;\r\n }\r\n console.error(`Invalid --pm value \"${value}\". Use pnpm, npm, or yarn.`);\r\n process.exit(1);\r\n}\r\n","import { mkdirSync, writeFileSync } from 'node:fs'\r\nimport { dirname, join } from 'node:path'\r\n\r\nimport {\r\n STORYBOOK_CLI_VERSION,\r\n STORYBOOK_DEV_DEPS,\r\n STORYBOOK_DOCS_VERSION,\r\n STORYBOOK_OWNED_FILES,\r\n STORYBOOK_PRESET_VERSION,\r\n} from './constants.js'\r\nimport { buttonStoriesTsx, storybookMainTs, storybookPreviewTsx } from './templates.js'\r\nimport type { PackageManager } from '../../utils/pm.js'\r\nimport { detectPackageManager } from '../../utils/pm.js'\r\nimport { readInstalledVersion, readPackageJson } from '../../utils/package-json.js'\r\nimport { fileExists, readTextFile } from '../../utils/fs.js'\r\nimport { runPmAddDevDeps } from '../../utils/exec.js'\r\nimport {\r\n CLI_VERSION,\r\n readManifest,\r\n writeManifest,\r\n} from '../../utils/manifest.js'\r\nimport type { IdiaManifest } from '../../types.js'\r\n\r\nexport type AddStorybookOptions = {\r\n cwd: string\r\n repair?: boolean\r\n force?: boolean\r\n pm?: PackageManager\r\n skipInstall?: boolean\r\n}\r\n\r\nexport type AddStorybookResult = {\r\n installed: boolean\r\n alreadyInstalled: boolean\r\n filesWritten: string[]\r\n warnings: string[]\r\n}\r\n\r\nfunction writeOwnedFile(cwd: string, relativePath: string, content: string, force: boolean): boolean {\r\n const fullPath = join(cwd, relativePath)\r\n if (fileExists(cwd, relativePath) && !force) {\r\n const existing = readTextFile(cwd, relativePath)\r\n if (existing === content) return false\r\n throw new Error(\r\n `Conflict: ${relativePath} exists with different content. Use --repair or --force.`,\r\n )\r\n }\r\n mkdirSync(dirname(fullPath), { recursive: true })\r\n writeFileSync(fullPath, content, 'utf8')\r\n return true\r\n}\r\n\r\nfunction parseDepSpec(spec: string): { name: string; range: string } {\r\n if (spec.startsWith('@')) {\r\n const at = spec.indexOf('@', 1)\r\n return { name: spec.slice(0, at), range: spec.slice(at + 1) }\r\n }\r\n const at = spec.indexOf('@')\r\n return { name: spec.slice(0, at), range: spec.slice(at + 1) }\r\n}\r\n\r\nfunction resolveDepVersion(name: string, range: string): string {\r\n if (name.startsWith('@idia-ui/storybook-docs')) {\r\n return `^${STORYBOOK_DOCS_VERSION}`\r\n }\r\n if (name.startsWith('@idia-ui/storybook-preset-react-native-web')) {\r\n return `^${STORYBOOK_PRESET_VERSION}`\r\n }\r\n return `^${range.replace(/^\\^/, '')}`\r\n}\r\n\r\nfunction addDevDependencies(cwd: string): void {\r\n const pkg = readPackageJson(cwd)\r\n if (!pkg) throw new Error('package.json not found')\r\n\r\n pkg.devDependencies ??= {}\r\n for (const spec of STORYBOOK_DEV_DEPS) {\r\n const { name, range } = parseDepSpec(spec)\r\n pkg.devDependencies[name] = resolveDepVersion(name, range)\r\n }\r\n\r\n pkg.scripts ??= {}\r\n pkg.scripts.storybook = 'storybook dev -p 6006'\r\n pkg.scripts['build-storybook'] = 'storybook build'\r\n\r\n writeFileSync(join(cwd, 'package.json'), `${JSON.stringify(pkg, null, 2)}\\n`, 'utf8')\r\n}\r\n\r\nfunction runPmInstall(cwd: string, pm: PackageManager): void {\r\n runPmAddDevDeps(cwd, pm, STORYBOOK_DEV_DEPS)\r\n}\r\n\r\nfunction resolveCoreVersion(cwd: string, pkg: NonNullable<ReturnType<typeof readPackageJson>>): string {\r\n const installed = readInstalledVersion(cwd, '@idia-ui/core')\r\n if (installed) return installed\r\n\r\n const declared = pkg.dependencies?.['@idia-ui/core'] ?? ''\r\n if (declared && !declared.startsWith('workspace')) {\r\n return declared.replace(/^[\\^~]/, '')\r\n }\r\n\r\n return '0.2.0'\r\n}\r\n\r\nfunction updateStorybookManifest(cwd: string, manifest: IdiaManifest, coreVersion: string): void {\r\n manifest.idiaCli = CLI_VERSION\r\n manifest.core = coreVersion\r\n manifest.features ??= {}\r\n manifest.features.storybook = {\r\n installed: new Date().toISOString(),\r\n storybookDocs: STORYBOOK_DOCS_VERSION,\r\n storybook: STORYBOOK_CLI_VERSION,\r\n preset: STORYBOOK_PRESET_VERSION,\r\n }\r\n writeManifest(cwd, manifest)\r\n}\r\n\r\nfunction isStorybookInstalled(cwd: string): boolean {\r\n return (\r\n fileExists(cwd, '.storybook/main.ts') &&\r\n Boolean(readPackageJson(cwd)?.devDependencies?.['@idia-ui/storybook-docs'])\r\n )\r\n}\r\n\r\nexport function runAddStorybook(options: AddStorybookOptions): AddStorybookResult {\r\n const { cwd, repair = false, force = false, skipInstall = false } = options\r\n const pm = options.pm ?? detectPackageManager(cwd)\r\n const warnings: string[] = []\r\n const filesWritten: string[] = []\r\n\r\n const pkg = readPackageJson(cwd)\r\n if (!pkg) {\r\n console.error('package.json not found — run from your app root')\r\n process.exit(1)\r\n }\r\n\r\n let manifest = readManifest(cwd)\r\n const coreVersion = resolveCoreVersion(cwd, pkg)\r\n if (!manifest) {\r\n manifest = { idiaCli: CLI_VERSION, core: coreVersion }\r\n warnings.push('Created .idia/manifest.json stub')\r\n } else {\r\n manifest.core = coreVersion\r\n }\r\n\r\n const alreadyInstalled = isStorybookInstalled(cwd)\r\n if (alreadyInstalled && !repair && !force) {\r\n console.log('Storybook already installed — idempotent skip (use --repair to refresh CLI-owned files)')\r\n updateStorybookManifest(cwd, manifest, coreVersion)\r\n return { installed: true, alreadyInstalled: true, filesWritten, warnings }\r\n }\r\n\r\n const ownedContent: Record<(typeof STORYBOOK_OWNED_FILES)[number], string> = {\r\n '.storybook/main.ts': storybookMainTs(),\r\n '.storybook/preview.tsx': storybookPreviewTsx(),\r\n 'src/stories/Button.stories.tsx': buttonStoriesTsx(),\r\n }\r\n\r\n for (const relativePath of STORYBOOK_OWNED_FILES) {\r\n if (repair || force || !fileExists(cwd, relativePath)) {\r\n const wrote = writeOwnedFile(cwd, relativePath, ownedContent[relativePath], force || repair)\r\n if (wrote) filesWritten.push(relativePath)\r\n }\r\n }\r\n\r\n addDevDependencies(cwd)\r\n\r\n if (!skipInstall) {\r\n console.log(`Installing Storybook devDependencies via ${pm}…`)\r\n runPmInstall(cwd, pm)\r\n } else {\r\n warnings.push('Skipped package manager install (--skip-install)')\r\n }\r\n\r\n updateStorybookManifest(cwd, manifest, coreVersion)\r\n\r\n console.log('\\n✓ Storybook add-on installed')\r\n console.log(` @idia-ui/storybook-docs@${STORYBOOK_DOCS_VERSION}`)\r\n console.log(` @idia-ui/storybook-preset-react-native-web@${STORYBOOK_PRESET_VERSION}`)\r\n console.log(' Run: pnpm storybook (or npm run storybook)')\r\n\r\n return { installed: true, alreadyInstalled, filesWritten, warnings }\r\n}\r\n","/** Version lockstep with @idia-ui/core minor (0.2.x). */\r\nexport const STORYBOOK_DOCS_VERSION = '0.2.0'\r\nexport const STORYBOOK_PRESET_VERSION = '0.2.2'\r\nexport const STORYBOOK_CLI_VERSION = '8.4.7'\r\n\r\nexport const STORYBOOK_DEV_DEPS = [\r\n 'storybook@^8.4.7',\r\n '@storybook/react@^8.4.7',\r\n '@storybook/react-vite@^8.4.7',\r\n '@storybook/addon-docs@^8.4.7',\r\n '@storybook/addon-a11y@^8.4.7',\r\n '@storybook/addon-links@^8.4.7',\r\n `@idia-ui/storybook-docs@${STORYBOOK_DOCS_VERSION}`,\r\n `@idia-ui/storybook-preset-react-native-web@${STORYBOOK_PRESET_VERSION}`,\r\n 'vite@^5.4.0',\r\n] as const\r\n\r\nexport const STORYBOOK_OWNED_FILES = [\r\n '.storybook/main.ts',\r\n '.storybook/preview.tsx',\r\n 'src/stories/Button.stories.tsx',\r\n] as const\r\n","export function storybookMainTs(): string {\r\n return `import type { StorybookConfig } from '@storybook/react-vite';\r\nimport { idiaStorybookMain } from '@idia-ui/storybook-preset-react-native-web';\r\n\r\nconst config: StorybookConfig = idiaStorybookMain({\r\n stories: ['../src/stories/**/*.stories.@(ts|tsx)'],\r\n staticDirs: ['../public'],\r\n});\r\n\r\nexport default config;\r\n`\r\n}\r\n\r\nexport function storybookPreviewTsx(): string {\r\n return `import React from 'react';\r\nimport type { Preview } from '@storybook/react';\r\nimport { AppProviders } from '../src/providers/AppProviders';\r\nimport '../global.css';\r\n\r\nconst preview: Preview = {\r\n decorators: [\r\n (Story) => (\r\n <AppProviders>\r\n <Story />\r\n </AppProviders>\r\n ),\r\n ],\r\n parameters: {\r\n layout: 'centered',\r\n controls: { expanded: true },\r\n },\r\n};\r\n\r\nexport default preview;\r\n`\r\n}\r\n\r\nexport function buttonStoriesTsx(): string {\r\n return `import type { Meta, StoryObj } from '@storybook/react';\r\nimport { Button } from '@idia-ui/core';\r\nimport { BrainDocSections } from '@idia-ui/storybook-docs';\r\n\r\nconst meta = {\r\n title: 'Components/Button',\r\n component: Button,\r\n tags: ['autodocs'],\r\n parameters: {\r\n docs: {\r\n page: () => (\r\n <>\r\n <BrainDocSections\r\n componentId=\"button\"\r\n sectionIds={['intent', 'usage', 'variants', 'accessibility']}\r\n />\r\n </>\r\n ),\r\n },\r\n },\r\n args: {\r\n label: 'Button',\r\n variant: 'primary',\r\n },\r\n} satisfies Meta<typeof Button>;\r\n\r\nexport default meta;\r\n\r\ntype Story = StoryObj<typeof meta>;\r\n\r\nexport const Playground: Story = {};\r\n`\r\n}\r\n","import { existsSync } from 'node:fs';\r\nimport { dirname, join } from 'node:path';\r\n\r\nexport type PackageManager = 'pnpm' | 'npm' | 'yarn';\r\n\r\nfunction findLockfileDir(start: string): string {\r\n let dir = start;\r\n while (true) {\r\n if (existsSync(join(dir, 'pnpm-lock.yaml'))) return dir;\r\n if (existsSync(join(dir, 'yarn.lock'))) return dir;\r\n if (existsSync(join(dir, 'package-lock.json'))) return dir;\r\n const parent = dirname(dir);\r\n if (parent === dir) return start;\r\n dir = parent;\r\n }\r\n}\r\n\r\nexport function detectPackageManager(cwd: string): PackageManager {\r\n const root = findLockfileDir(cwd);\r\n if (existsSync(join(root, 'pnpm-lock.yaml'))) return 'pnpm';\r\n if (existsSync(join(root, 'yarn.lock'))) return 'yarn';\r\n return 'npm';\r\n}\r\n\r\nexport function pmAddCommand(pm: PackageManager, packages: string[]): string {\r\n const list = packages.join(' ');\r\n switch (pm) {\r\n case 'pnpm':\r\n return `pnpm add ${list}`;\r\n case 'yarn':\r\n return `yarn add ${list}`;\r\n default:\r\n return `npm install ${list}`;\r\n }\r\n}\r\n\r\nexport function pmUpdateCommand(pm: PackageManager, packages: string[]): string {\r\n const list = packages.join(' ');\r\n switch (pm) {\r\n case 'pnpm':\r\n return `pnpm update ${list}`;\r\n case 'yarn':\r\n return `yarn upgrade ${list}`;\r\n default:\r\n return `npm update ${list}`;\r\n }\r\n}\r\n","import { readFileSync } from 'node:fs';\r\nimport { join } from 'node:path';\r\n\r\nimport type { PackageJson } from '../types.js';\r\n\r\nexport function readPackageJson(cwd: string): PackageJson | null {\r\n try {\r\n const raw = readFileSync(join(cwd, 'package.json'), 'utf8');\r\n return JSON.parse(raw) as PackageJson;\r\n } catch {\r\n return null;\r\n }\r\n}\r\n\r\nexport function getDepVersion(\r\n pkg: PackageJson,\r\n name: string,\r\n): string | undefined {\r\n return pkg.dependencies?.[name] ?? pkg.devDependencies?.[name];\r\n}\r\n\r\nexport function readInstalledVersion(cwd: string, name: string): string | null {\r\n try {\r\n const pkgPath = join(cwd, 'node_modules', name, 'package.json');\r\n const raw = readFileSync(pkgPath, 'utf8');\r\n const parsed = JSON.parse(raw) as { version?: string };\r\n return parsed.version ?? null;\r\n } catch {\r\n return null;\r\n }\r\n}\r\n\r\nexport function readPeerRange(\r\n cwd: string,\r\n packageName: string,\r\n peerName: string,\r\n): string | null {\r\n try {\r\n const pkgPath = join(cwd, 'node_modules', packageName, 'package.json');\r\n const raw = readFileSync(pkgPath, 'utf8');\r\n const parsed = JSON.parse(raw) as {\r\n peerDependencies?: Record<string, string>;\r\n };\r\n return parsed.peerDependencies?.[peerName] ?? null;\r\n } catch {\r\n return null;\r\n }\r\n}\r\n\r\nexport function listIdiaPackages(pkg: PackageJson): string[] {\r\n const names = new Set<string>();\r\n for (const deps of [pkg.dependencies, pkg.devDependencies]) {\r\n if (!deps) continue;\r\n for (const name of Object.keys(deps)) {\r\n if (name.startsWith('@idia-ui/')) names.add(name);\r\n }\r\n }\r\n return [...names].sort();\r\n}\r\n","import { existsSync, readFileSync, readdirSync, statSync } from 'node:fs';\r\nimport { join } from 'node:path';\r\n\r\nimport semver from 'semver';\r\n\r\nexport function satisfiesRange(version: string, range: string): boolean {\r\n const cleaned = version.replace(/^[\\^~>=<]*/, '').split(' ')[0] ?? version;\r\n if (range === 'workspace:*' || range.startsWith('file:')) return true;\r\n const coerced = semver.coerce(cleaned);\r\n if (!coerced) return false;\r\n return semver.satisfies(coerced, range, { includePrerelease: true });\r\n}\r\n\r\nexport function getMinor(version: string): string | null {\r\n const coerced = semver.coerce(version);\r\n if (!coerced) return null;\r\n return `${coerced.major}.${coerced.minor}`;\r\n}\r\n\r\nexport function readTextFile(cwd: string, relativePath: string): string | null {\r\n try {\r\n return readFileSync(join(cwd, relativePath), 'utf8');\r\n } catch {\r\n return null;\r\n }\r\n}\r\n\r\nexport function fileExists(cwd: string, relativePath: string): boolean {\r\n try {\r\n return existsSync(join(cwd, relativePath));\r\n } catch {\r\n return false;\r\n }\r\n}\r\n\r\nexport function grepSrcForPattern(cwd: string, pattern: RegExp): boolean {\r\n const filesToScan = [\r\n 'App.tsx',\r\n 'src/providers/AppProviders.tsx',\r\n ];\r\n\r\n for (const file of filesToScan) {\r\n const content = readTextFile(cwd, file);\r\n if (content && pattern.test(content)) return true;\r\n }\r\n\r\n const srcRoot = join(cwd, 'src');\r\n try {\r\n const walk = (dir: string): boolean => {\r\n for (const entry of readdirSync(dir)) {\r\n const full = join(dir, entry);\r\n const stat = statSync(full);\r\n if (stat.isDirectory()) {\r\n if (walk(full)) return true;\r\n } else if (/\\.(tsx?|jsx?)$/.test(entry)) {\r\n const content = readFileSync(full, 'utf8');\r\n if (pattern.test(content)) return true;\r\n }\r\n }\r\n return false;\r\n };\r\n if (existsSync(srcRoot)) return walk(srcRoot);\r\n } catch {\r\n // ignore walk errors\r\n }\r\n\r\n return false;\r\n}\r\n","import { spawnSync } from 'node:child_process';\r\n\r\nimport type { PackageManager } from './pm.js';\r\n\r\n/** Windows: shell:true so pnpm/npm resolve correctly; normalize null status when no spawn error. */\r\nfunction pmExitCode(result: ReturnType<typeof spawnSync>): number {\r\n if (result.error) return 1;\r\n return result.status ?? 0;\r\n}\r\n\r\nexport function spawnPm(\r\n pm: PackageManager,\r\n args: string[],\r\n cwd: string,\r\n): ReturnType<typeof spawnSync> {\r\n const isWin = process.platform === 'win32';\r\n return spawnSync(pm, args, {\r\n cwd,\r\n stdio: 'inherit',\r\n shell: isWin,\r\n windowsHide: isWin,\r\n });\r\n}\r\n\r\nexport function runPmInstall(cwd: string, pm: PackageManager): void {\r\n const result = spawnPm(pm, installArgs(pm), cwd);\r\n if (pmExitCode(result) !== 0) {\r\n throw new Error(`${pm} install failed (exit ${pmExitCode(result)})`);\r\n }\r\n}\r\n\r\nexport function runPmAddDev(\r\n cwd: string,\r\n pm: PackageManager,\r\n packageSpec: string,\r\n): void {\r\n const result = spawnPm(pm, addDevArgs(pm, packageSpec), cwd);\r\n if (pmExitCode(result) !== 0) {\r\n throw new Error(`${pm} add failed for ${packageSpec} (exit ${pmExitCode(result)})`);\r\n }\r\n}\r\n\r\nexport function runPmAddDevDeps(\r\n cwd: string,\r\n pm: PackageManager,\r\n packages: readonly string[],\r\n): void {\r\n const result = spawnPm(pm, addDevArgsMulti(pm, packages), cwd);\r\n if (pmExitCode(result) !== 0) {\r\n throw new Error(`${pm} add failed (exit ${pmExitCode(result)})`);\r\n }\r\n}\r\n\r\nfunction installArgs(pm: PackageManager): string[] {\r\n switch (pm) {\r\n case 'pnpm':\r\n return ['install'];\r\n case 'yarn':\r\n return ['install'];\r\n default:\r\n return ['install'];\r\n }\r\n}\r\n\r\nfunction addDevArgs(pm: PackageManager, packageSpec: string): string[] {\r\n return addDevArgsMulti(pm, [packageSpec]);\r\n}\r\n\r\nfunction addDevArgsMulti(pm: PackageManager, packages: readonly string[]): string[] {\r\n switch (pm) {\r\n case 'pnpm':\r\n return ['add', '-D', ...packages];\r\n case 'yarn':\r\n return ['add', '-D', ...packages];\r\n default:\r\n return ['install', '-D', ...packages];\r\n }\r\n}\r\n","import { readFileSync, writeFileSync, mkdirSync } from 'node:fs';\r\nimport { dirname, join } from 'node:path';\r\n\r\nimport type { IdiaManifest } from '../types.js';\r\nimport { fileExists } from './fs.js';\r\n\r\nconst CLI_VERSION = '0.2.3';\r\n\r\nexport function readManifest(cwd: string): IdiaManifest | null {\r\n try {\r\n const raw = readFileSync(join(cwd, '.idia', 'manifest.json'), 'utf8');\r\n return JSON.parse(raw) as IdiaManifest;\r\n } catch {\r\n return null;\r\n }\r\n}\r\n\r\nexport function writeManifest(cwd: string, manifest: IdiaManifest): void {\r\n const manifestPath = join(cwd, '.idia', 'manifest.json');\r\n mkdirSync(dirname(manifestPath), { recursive: true });\r\n writeFileSync(manifestPath, `${JSON.stringify(manifest, null, 2)}\\n`, 'utf8');\r\n}\r\n\r\nexport function regenerateManifest(\r\n cwd: string,\r\n coreVersion: string,\r\n): { created: boolean; path: string } {\r\n const manifestPath = join(cwd, '.idia', 'manifest.json');\r\n const manifest: IdiaManifest = {\r\n idiaCli: CLI_VERSION,\r\n core: coreVersion,\r\n };\r\n writeManifest(cwd, manifest);\r\n return { created: true, path: manifestPath };\r\n}\r\n\r\nexport function manifestExists(cwd: string): boolean {\r\n return fileExists(cwd, '.idia/manifest.json');\r\n}\r\n\r\nexport function validateManifestShape(manifest: IdiaManifest): boolean {\r\n return (\r\n typeof manifest.idiaCli === 'string' &&\r\n typeof manifest.core === 'string' &&\r\n /^\\d+\\.\\d+\\.\\d+/.test(manifest.idiaCli) &&\r\n /^\\d+\\.\\d+\\.\\d+/.test(manifest.core)\r\n );\r\n}\r\n\r\nexport { CLI_VERSION };\r\n","import { cpSync, existsSync, mkdirSync, readdirSync, statSync } from 'node:fs';\r\nimport { join } from 'node:path';\r\n\r\nimport { patchRootAgentsMd } from './agents-patch.js';\r\nimport {\r\n BRAIN_PACK_NAME,\r\n BRAIN_PACK_VERSION,\r\n BRAIN_TIER_DISCLAIMER,\r\n} from './constants.js';\r\nimport {\r\n brainPackSpecForApp,\r\n readBrainPackManifest,\r\n resolveBrainPackRoot,\r\n} from './pack.js';\r\nimport { runPmAddDev, runPmInstall } from '../utils/exec.js';\r\nimport { fileExists } from '../utils/fs.js';\r\nimport { readInstalledVersion, readPackageJson } from '../utils/package-json.js';\r\nimport { detectPackageManager } from '../utils/pm.js';\r\nimport { readManifest, writeManifest, CLI_VERSION } from '../utils/manifest.js';\r\nimport type { IdiaManifest } from '../types.js';\r\n\r\nexport type BrainInstallOptions = {\r\n cwd: string;\r\n repair?: boolean;\r\n force?: boolean;\r\n pm?: 'pnpm' | 'npm' | 'yarn';\r\n skipInstall?: boolean;\r\n};\r\n\r\nexport type BrainInstallResult = {\r\n alreadyInstalled: boolean;\r\n packRoot: string;\r\n sourceHash: string;\r\n agentsPatch: ReturnType<typeof patchRootAgentsMd>;\r\n};\r\n\r\nfunction copyDirRecursive(src: string, dest: string, force: boolean): void {\r\n mkdirSync(dest, { recursive: true });\r\n for (const entry of readdirSync(src)) {\r\n const srcPath = join(src, entry);\r\n const destPath = join(dest, entry);\r\n const stat = statSync(srcPath);\r\n if (stat.isDirectory()) {\r\n copyDirRecursive(srcPath, destPath, force);\r\n } else {\r\n if (!force && existsSync(destPath)) continue;\r\n cpSync(srcPath, destPath);\r\n }\r\n }\r\n}\r\n\r\nfunction ensureBrainPackDependency(\r\n cwd: string,\r\n pm: 'pnpm' | 'npm' | 'yarn',\r\n skipInstall: boolean,\r\n): void {\r\n const pkg = readPackageJson(cwd);\r\n if (!pkg) throw new Error('package.json not found');\r\n\r\n const spec = brainPackSpecForApp(cwd);\r\n const existing = pkg.devDependencies?.[BRAIN_PACK_NAME];\r\n if (existing === spec || existing === BRAIN_PACK_VERSION) {\r\n if (!skipInstall && !existsSync(join(cwd, 'node_modules', BRAIN_PACK_NAME))) {\r\n runPmInstall(cwd, pm);\r\n }\r\n return;\r\n }\r\n\r\n if (!skipInstall) {\r\n runPmAddDev(cwd, pm, `${BRAIN_PACK_NAME}@${spec}`);\r\n }\r\n}\r\n\r\nfunction isBrainInstalled(cwd: string, manifest: IdiaManifest | null): boolean {\r\n const hasAgents = fileExists(cwd, '.idia/brain/AGENTS.md');\r\n const hasFeature = Boolean(manifest?.features?.brain?.brainPack);\r\n return hasAgents && hasFeature;\r\n}\r\n\r\nexport function installBrainPack(options: BrainInstallOptions): BrainInstallResult {\r\n const { cwd, repair = false, force = false, skipInstall = false } = options;\r\n const pm = options.pm ?? detectPackageManager(cwd);\r\n const manifest = readManifest(cwd);\r\n\r\n if (isBrainInstalled(cwd, manifest) && !repair && !force) {\r\n const packRoot = resolveBrainPackRoot(cwd);\r\n if (packRoot) {\r\n const packManifest = readBrainPackManifest(packRoot);\r\n return {\r\n alreadyInstalled: true,\r\n packRoot,\r\n sourceHash: packManifest?.sourceHash ?? '',\r\n agentsPatch: { status: 'merged' },\r\n };\r\n }\r\n }\r\n\r\n ensureBrainPackDependency(cwd, pm, skipInstall);\r\n\r\n const packRoot = resolveBrainPackRoot(cwd);\r\n if (!packRoot) {\r\n throw new Error(\r\n `${BRAIN_PACK_NAME} not found. Run ${pm} add -D ${BRAIN_PACK_NAME} and retry.`,\r\n );\r\n }\r\n\r\n const packManifest = readBrainPackManifest(packRoot);\r\n if (!packManifest?.sourceHash) {\r\n throw new Error(`${BRAIN_PACK_NAME} pack-manifest.json missing or invalid.`);\r\n }\r\n\r\n const brainSrc = join(packRoot, 'brain');\r\n const rulesSrc = join(packRoot, 'cursor-rules');\r\n const brainDest = join(cwd, '.idia', 'brain');\r\n const rulesDest = join(cwd, '.cursor', 'rules');\r\n\r\n copyDirRecursive(brainSrc, brainDest, force || repair);\r\n mkdirSync(rulesDest, { recursive: true });\r\n copyDirRecursive(rulesSrc, rulesDest, force || repair);\r\n\r\n const agentsPatch = patchRootAgentsMd(cwd, { repair, force });\r\n\r\n const coreVersion =\r\n readInstalledVersion(cwd, '@idia-ui/core') ??\r\n manifest?.core ??\r\n packManifest.core;\r\n\r\n const nextManifest: IdiaManifest = {\r\n idiaCli: manifest?.idiaCli ?? CLI_VERSION,\r\n core: coreVersion,\r\n features: {\r\n ...manifest?.features,\r\n brain: {\r\n installed: new Date().toISOString(),\r\n brainPack: packManifest.brainPack,\r\n sourceHash: packManifest.sourceHash,\r\n },\r\n },\r\n };\r\n writeManifest(cwd, nextManifest);\r\n\r\n return {\r\n alreadyInstalled: false,\r\n packRoot,\r\n sourceHash: packManifest.sourceHash,\r\n agentsPatch,\r\n };\r\n}\r\n\r\nexport function printBrainInstallSummary(result: BrainInstallResult): void {\r\n if (result.alreadyInstalled) {\r\n console.log('✓ brain pack already installed');\r\n console.log(` .idia/brain/AGENTS.md`);\r\n console.log(` sourceHash: ${result.sourceHash || '(unknown)'}`);\r\n console.log('');\r\n console.log(BRAIN_TIER_DISCLAIMER);\r\n return;\r\n }\r\n\r\n console.log('✓ brain pack installed to .idia/brain/');\r\n console.log('✓ cursor rules copied to .cursor/rules/idia-ui-*.mdc');\r\n\r\n switch (result.agentsPatch.status) {\r\n case 'created':\r\n console.log('✓ AGENTS.md created with idia-ui brain block');\r\n break;\r\n case 'merged':\r\n console.log('✓ AGENTS.md updated with idia-ui brain block');\r\n break;\r\n case 'replaced':\r\n console.log('✓ AGENTS.md brain block repaired');\r\n break;\r\n case 'conflict':\r\n console.warn(\r\n `⚠ AGENTS.md conflict — wrote suggested patch: ${result.agentsPatch.patchPath}`,\r\n );\r\n console.warn(' Run idia-ui add brain --repair --force to overwrite.');\r\n break;\r\n }\r\n\r\n console.log(` sourceHash: ${result.sourceHash}`);\r\n console.log('');\r\n console.log(BRAIN_TIER_DISCLAIMER);\r\n}\r\n","import { mkdirSync, writeFileSync } from 'node:fs';\r\nimport { dirname, join } from 'node:path';\r\n\r\nimport {\r\n AGENTS_BEGIN,\r\n AGENTS_BRAIN_BLOCK,\r\n AGENTS_END,\r\n} from './constants.js';\r\nimport { readTextFile } from '../utils/fs.js';\r\n\r\nexport type AgentsPatchResult =\r\n | { status: 'created' | 'merged' | 'replaced' }\r\n | { status: 'conflict'; patchPath: string };\r\n\r\nexport function patchRootAgentsMd(\r\n cwd: string,\r\n options: { repair?: boolean; force?: boolean },\r\n): AgentsPatchResult {\r\n const agentsPath = join(cwd, 'AGENTS.md');\r\n const existing = readTextFile(cwd, 'AGENTS.md');\r\n\r\n if (existing === null) {\r\n writeFileSync(agentsPath, `${AGENTS_BRAIN_BLOCK}\\n`, 'utf8');\r\n return { status: 'created' };\r\n }\r\n\r\n const hasBegin = existing.includes(AGENTS_BEGIN);\r\n const hasEnd = existing.includes(AGENTS_END);\r\n\r\n if (hasBegin && hasEnd) {\r\n if (!options.repair && !options.force) {\r\n return { status: 'merged' };\r\n }\r\n const updated = existing.replace(\r\n new RegExp(`${escapeRegExp(AGENTS_BEGIN)}[\\\\s\\\\S]*?${escapeRegExp(AGENTS_END)}`),\r\n AGENTS_BRAIN_BLOCK,\r\n );\r\n if (updated === existing && !options.force) {\r\n return { status: 'merged' };\r\n }\r\n writeFileSync(agentsPath, updated, 'utf8');\r\n return { status: 'replaced' };\r\n }\r\n\r\n if (hasBegin !== hasEnd) {\r\n if (options.force) {\r\n const withoutPartial = existing\r\n .replace(new RegExp(`${escapeRegExp(AGENTS_BEGIN)}[\\\\s\\\\S]*`), '')\r\n .replace(AGENTS_END, '');\r\n writeFileSync(\r\n agentsPath,\r\n `${withoutPartial.trimEnd()}\\n\\n${AGENTS_BRAIN_BLOCK}\\n`,\r\n 'utf8',\r\n );\r\n return { status: 'replaced' };\r\n }\r\n return writeConflictPatch(cwd, existing);\r\n }\r\n\r\n writeFileSync(agentsPath, `${existing.trimEnd()}\\n\\n${AGENTS_BRAIN_BLOCK}\\n`, 'utf8');\r\n return { status: 'merged' };\r\n}\r\n\r\nfunction writeConflictPatch(cwd: string, existing: string): AgentsPatchResult {\r\n const patchDir = join(cwd, '.idia', 'patches');\r\n mkdirSync(patchDir, { recursive: true });\r\n const patchPath = join(patchDir, 'AGENTS.md.patch');\r\n const patchBody = [\r\n '# AGENTS.md brain block patch (idia-ui add brain)',\r\n '# Apply manually or run: idia-ui add brain --repair --force',\r\n '',\r\n AGENTS_BRAIN_BLOCK,\r\n '',\r\n '# --- existing AGENTS.md preserved below ---',\r\n '',\r\n existing,\r\n ].join('\\n');\r\n writeFileSync(patchPath, patchBody, 'utf8');\r\n return { status: 'conflict', patchPath };\r\n}\r\n\r\nfunction escapeRegExp(value: string): string {\r\n return value.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\r\n}\r\n","export const BRAIN_PACK_NAME = '@idia-ui/brain-pack';\r\nexport const BRAIN_PACK_VERSION = '0.2.0';\r\n\r\nexport const BRAIN_TIER_DISCLAIMER =\r\n '@idia-ui/brain-pack is a generated AI retrieval pack for idia-ui usage guidance. It does not imply Tier 1 passive external-agent graduation, GA readiness, or full-catalog efficacy.';\r\n\r\nexport const BRAIN_DOCTOR_DISCLAIMER =\r\n 'brain pack is experimental retrieval guidance; it does not imply Tier 1P graduation';\r\n\r\nexport const AGENTS_BEGIN = '<!-- idia-ui brain:begin -->';\r\nexport const AGENTS_END = '<!-- idia-ui brain:end -->';\r\n\r\nexport const AGENTS_BRAIN_BLOCK = `${AGENTS_BEGIN}\r\n## idia-ui design-system brain\r\n\r\nFor idia-ui component usage, design-system documentation, Storybook docs, UI generation, or AI-guided UI work, read:\r\n\r\n\\`.idia/brain/AGENTS.md\\`\r\n\r\nbefore using idia-ui components.\r\n\r\nThis installed brain pack is read-only generated guidance. Do not edit files under \\`.idia/brain/\\` directly.\r\n${AGENTS_END}`;\r\n","import { existsSync, readFileSync } from 'node:fs';\r\nimport { createRequire } from 'node:module';\r\nimport { dirname, join } from 'node:path';\r\n\r\nimport { BRAIN_PACK_NAME } from './constants.js';\r\n\r\nexport type BrainPackManifest = {\r\n brainPack: string;\r\n core: string;\r\n sourceHash: string;\r\n coverage?: Record<string, unknown>;\r\n tierClaims?: Record<string, string>;\r\n};\r\n\r\nexport function resolveBrainPackRoot(cwd: string): string | null {\r\n const local = join(cwd, 'node_modules', BRAIN_PACK_NAME);\r\n if (existsSync(join(local, 'pack-manifest.json'))) return local;\r\n\r\n try {\r\n const require = createRequire(join(cwd, 'package.json'));\r\n const pkgJson = require.resolve(`${BRAIN_PACK_NAME}/package.json`);\r\n return dirname(pkgJson);\r\n } catch {\r\n return null;\r\n }\r\n}\r\n\r\nexport function readBrainPackManifest(packRoot: string): BrainPackManifest | null {\r\n try {\r\n const raw = readFileSync(join(packRoot, 'pack-manifest.json'), 'utf8');\r\n return JSON.parse(raw) as BrainPackManifest;\r\n } catch {\r\n return null;\r\n }\r\n}\r\n\r\nexport function brainPackSpecForApp(cwd: string): string {\r\n try {\r\n const pkgPath = join(cwd, 'package.json');\r\n const pkg = JSON.parse(readFileSync(pkgPath, 'utf8')) as {\r\n dependencies?: Record<string, string>;\r\n devDependencies?: Record<string, string>;\r\n };\r\n const deps = { ...pkg.dependencies, ...pkg.devDependencies };\r\n const usesWorkspace = Object.values(deps).some((v) => v === 'workspace:*');\r\n if (usesWorkspace) return 'workspace:*';\r\n } catch {\r\n // fall through\r\n }\r\n return '^0.2.0';\r\n}\r\n\r\nexport function readInstalledPackManifest(\r\n cwd: string,\r\n packageName: string,\r\n manifestFile = 'pack-manifest.json',\r\n): { sourceHash?: string } | null {\r\n try {\r\n const raw = readFileSync(\r\n join(cwd, 'node_modules', packageName, manifestFile),\r\n 'utf8',\r\n );\r\n return JSON.parse(raw) as { sourceHash?: string };\r\n } catch {\r\n return null;\r\n }\r\n}\r\n","export { runAddStorybook } from './storybook/add.js';\r\nexport type { AddStorybookOptions } from './storybook/add.js';\r\n\r\nimport { installBrainPack, printBrainInstallSummary } from '../brain/install.js';\r\nimport { BRAIN_TIER_DISCLAIMER } from '../brain/constants.js';\r\n\r\nexport type AddBrainOptions = {\r\n cwd: string;\r\n repair?: boolean;\r\n force?: boolean;\r\n pm?: 'pnpm' | 'npm' | 'yarn';\r\n};\r\n\r\nexport function runAddBrain(options: AddBrainOptions): void {\r\n try {\r\n const result = installBrainPack({\r\n cwd: options.cwd,\r\n repair: options.repair,\r\n force: options.force,\r\n pm: options.pm,\r\n });\r\n printBrainInstallSummary(result);\r\n\r\n if (result.agentsPatch.status === 'conflict') {\r\n process.exit(1);\r\n }\r\n } catch (error) {\r\n console.error(error instanceof Error ? error.message : String(error));\r\n console.error(BRAIN_TIER_DISCLAIMER);\r\n process.exit(1);\r\n }\r\n}\r\n\r\nexport function runAddUnknown(target: string): never {\r\n console.error(`Unknown add target: ${target}`);\r\n console.error('Available: storybook, brain');\r\n process.exit(1);\r\n}\r\n","import { readFileSync, readdirSync } from 'node:fs';\r\nimport { join } from 'node:path';\r\n\r\nimport type { CheckResult } from '../types.js';\r\nimport { BRAIN_DOCTOR_DISCLAIMER } from '../brain/constants.js';\r\nimport {\r\n readBrainPackManifest,\r\n readInstalledPackManifest,\r\n resolveBrainPackRoot,\r\n} from '../brain/pack.js';\r\nimport { fileExists, getMinor, readTextFile } from '../utils/fs.js';\r\nimport { readInstalledVersion } from '../utils/package-json.js';\r\nimport { readManifest } from '../utils/manifest.js';\r\n\r\nfunction readCoverageManifest(cwd: string): {\r\n components?: Record<string, { coverage?: string }>;\r\n} | null {\r\n try {\r\n const raw = readFileSync(\r\n join(cwd, 'node_modules/@idia-ui/storybook-docs/fragments/coverage-manifest.json'),\r\n 'utf8',\r\n );\r\n return JSON.parse(raw) as { components?: Record<string, { coverage?: string }> };\r\n } catch {\r\n return null;\r\n }\r\n}\r\n\r\nfunction listStoryComponentIds(cwd: string): string[] {\r\n const storiesDir = join(cwd, 'src/stories');\r\n const ids = new Set<string>();\r\n\r\n try {\r\n for (const file of readdirSync(storiesDir)) {\r\n const match = file.match(/^([A-Za-z]+)\\.stories\\.(tsx?|jsx?)$/);\r\n if (match) {\r\n ids.add(match[1].toLowerCase());\r\n }\r\n }\r\n } catch {\r\n return [];\r\n }\r\n\r\n return [...ids].sort();\r\n}\r\n\r\nexport function runStorybookChecks(cwd: string): CheckResult[] {\r\n const hasPreview = fileExists(cwd, '.storybook/preview.tsx');\r\n const storybookDocs = fileExists(\r\n cwd,\r\n 'node_modules/@idia-ui/storybook-docs/package.json',\r\n );\r\n\r\n if (!hasPreview && !storybookDocs) {\r\n return [\r\n {\r\n id: 'S1',\r\n status: 'info',\r\n message: 'Storybook not installed — skipping S* checks',\r\n },\r\n {\r\n id: 'S2',\r\n status: 'skip',\r\n message: '@idia-ui/storybook-docs not installed',\r\n },\r\n {\r\n id: 'S3',\r\n status: 'skip',\r\n message: 'storybook fragment manifest not available',\r\n },\r\n ];\r\n }\r\n\r\n const results: CheckResult[] = [];\r\n\r\n const preview = readTextFile(cwd, '.storybook/preview.tsx');\r\n const importsTamagui =\r\n preview !== null &&\r\n (/tamagui\\.config/.test(preview) || /AppProviders/.test(preview));\r\n\r\n if (importsTamagui) {\r\n results.push({\r\n id: 'S1',\r\n status: 'pass',\r\n message: '.storybook/preview.tsx wires AppProviders (shared token parity)',\r\n });\r\n } else {\r\n results.push({\r\n id: 'S1',\r\n status: 'fail',\r\n message: '.storybook/preview.tsx missing AppProviders / tamagui.config wiring',\r\n fixHint: 'idia-ui add storybook --repair',\r\n });\r\n }\r\n\r\n const docsVersion = readInstalledVersion(cwd, '@idia-ui/storybook-docs');\r\n const coreVersion = readInstalledVersion(cwd, '@idia-ui/core');\r\n const docsMinor = docsVersion ? getMinor(docsVersion) : null;\r\n const coreMinor = coreVersion ? getMinor(coreVersion) : null;\r\n\r\n if (!storybookDocs) {\r\n results.push({\r\n id: 'S2',\r\n status: 'warn',\r\n message: '@idia-ui/storybook-docs not installed',\r\n fixHint: 'idia-ui add storybook',\r\n });\r\n } else if (docsMinor && coreMinor && docsMinor === coreMinor) {\r\n results.push({\r\n id: 'S2',\r\n status: 'pass',\r\n message: `@idia-ui/storybook-docs@${docsVersion} matches @idia-ui/core@${coreVersion} minor`,\r\n });\r\n } else {\r\n results.push({\r\n id: 'S2',\r\n status: 'warn',\r\n message: `storybook-docs minor (${docsMinor ?? 'unknown'}) ≠ core minor (${coreMinor ?? 'unknown'})`,\r\n fixHint: 'idia-ui sync storybook',\r\n });\r\n }\r\n\r\n const coverage = readCoverageManifest(cwd);\r\n const coveredIds = coverage?.components ? Object.keys(coverage.components) : [];\r\n const storyIds = listStoryComponentIds(cwd);\r\n const uncovered = storyIds.filter((id) => !coveredIds.includes(id));\r\n\r\n if (!coverage) {\r\n results.push({\r\n id: 'S3',\r\n status: 'warn',\r\n message: 'coverage manifest not readable',\r\n fixHint: 'idia-ui sync storybook',\r\n });\r\n } else if (uncovered.length === 0) {\r\n results.push({\r\n id: 'S3',\r\n status: 'pass',\r\n message:\r\n coveredIds.length > 0\r\n ? `fragment manifest covers ${coveredIds.length} Wave 1 components; story files aligned`\r\n : 'fragment manifest present; no src/stories/ files to cross-ref',\r\n });\r\n if (coveredIds.length > 0 && coveredIds.length < 10) {\r\n results.push({\r\n id: 'S3-info',\r\n status: 'info',\r\n message: `storybook-docs pack has doc fragments for ${coveredIds.length} components. Other components render without brain prose.`,\r\n });\r\n }\r\n } else {\r\n results.push({\r\n id: 'S3',\r\n status: 'warn',\r\n message: `stories without fragments: ${uncovered.join(', ')}`,\r\n fixHint: 'upgrade @idia-ui/storybook-docs or remove uncovered stories',\r\n });\r\n }\r\n\r\n const manifest = readManifest(cwd);\r\n if (storybookDocs && !manifest?.features?.storybook) {\r\n results.push({\r\n id: 'S-manifest',\r\n status: 'warn',\r\n message: 'manifest features.storybook missing',\r\n fixHint: 'idia-ui sync storybook',\r\n });\r\n }\r\n\r\n return results;\r\n}\r\n\r\nfunction readStorybookDocsSourceHash(cwd: string): string | null {\r\n return (\r\n readInstalledPackManifest(\r\n cwd,\r\n '@idia-ui/storybook-docs',\r\n 'fragments/coverage-manifest.json',\r\n )?.sourceHash ??\r\n readInstalledPackManifest(cwd, '@idia-ui/storybook-docs', 'coverage-manifest.json')\r\n ?.sourceHash ??\r\n readInstalledPackManifest(cwd, '@idia-ui/storybook-docs')?.sourceHash ??\r\n null\r\n );\r\n}\r\n\r\nfunction readPackSourceHash(cwd: string, packageName: string): string | null {\r\n if (packageName === '@idia-ui/storybook-docs') {\r\n return readStorybookDocsSourceHash(cwd);\r\n }\r\n return readInstalledPackManifest(cwd, packageName)?.sourceHash ?? null;\r\n}\r\n\r\nexport function runBrainChecks(cwd: string): CheckResult[] {\r\n const brainPackInstalled = fileExists(\r\n cwd,\r\n 'node_modules/@idia-ui/brain-pack/package.json',\r\n );\r\n const brainAgents = fileExists(cwd, '.idia/brain/AGENTS.md');\r\n const rootAgents = readTextFile(cwd, 'AGENTS.md');\r\n const hasBrainBlock =\r\n rootAgents !== null &&\r\n /idia-ui brain:begin/.test(rootAgents) &&\r\n /idia-ui brain:end/.test(rootAgents);\r\n\r\n if (!brainPackInstalled && !brainAgents) {\r\n return [\r\n {\r\n id: 'B1',\r\n status: 'warn',\r\n message: 'brain pack not installed',\r\n fixHint: 'Run idia-ui add brain',\r\n },\r\n {\r\n id: 'B2',\r\n status: 'skip',\r\n message: 'AGENTS.md brain block not present',\r\n },\r\n {\r\n id: 'B3',\r\n status: 'skip',\r\n message: 'brain sourceHash coupling not checked',\r\n },\r\n {\r\n id: 'B4',\r\n status: 'skip',\r\n message: 'brain/storybook hash coupling not checked',\r\n },\r\n ];\r\n }\r\n\r\n const results: CheckResult[] = [];\r\n const manifest = readManifest(cwd);\r\n const manifestHash = manifest?.features?.brain?.sourceHash as string | undefined;\r\n const packRoot = resolveBrainPackRoot(cwd);\r\n const packManifest = packRoot ? readBrainPackManifest(packRoot) : null;\r\n const packHash = packManifest?.sourceHash;\r\n\r\n results.push({\r\n id: 'B1',\r\n status: brainAgents ? 'pass' : 'warn',\r\n message: brainAgents\r\n ? '✓ brain pack installed'\r\n : '.idia/brain/AGENTS.md missing',\r\n fixHint: brainAgents ? undefined : 'idia-ui add brain',\r\n });\r\n\r\n results.push({\r\n id: 'B2',\r\n status: hasBrainBlock ? 'pass' : 'warn',\r\n message: hasBrainBlock\r\n ? 'root AGENTS.md contains idia-ui brain block'\r\n : 'root AGENTS.md missing idia-ui brain:begin/end block',\r\n fixHint: hasBrainBlock ? undefined : 'idia-ui add brain --repair',\r\n });\r\n\r\n if (manifestHash && packHash && manifestHash === packHash) {\r\n results.push({\r\n id: 'B3',\r\n status: 'pass',\r\n message: 'manifest sourceHash matches installed brain pack',\r\n });\r\n } else if (manifestHash && packHash) {\r\n results.push({\r\n id: 'B3',\r\n status: 'warn',\r\n message: 'manifest sourceHash drifted from brain pack pin',\r\n fixHint: 'idia-ui sync brain',\r\n });\r\n } else {\r\n results.push({\r\n id: 'B3',\r\n status: 'warn',\r\n message: 'manifest sourceHash missing or brain pack not resolved',\r\n fixHint: 'idia-ui sync brain',\r\n });\r\n }\r\n\r\n const storybookHash = readStorybookDocsSourceHash(cwd);\r\n const storybookDocsInstalled = fileExists(\r\n cwd,\r\n 'node_modules/@idia-ui/storybook-docs/package.json',\r\n );\r\n if (!storybookDocsInstalled) {\r\n results.push({\r\n id: 'B4',\r\n status: 'skip',\r\n message: 'storybook-docs not installed — B4 hash coupling skipped',\r\n });\r\n } else if (!storybookHash) {\r\n results.push({\r\n id: 'B4',\r\n status: 'warn',\r\n message: 'storybook-docs installed but coverage-manifest sourceHash not readable',\r\n fixHint: 'idia-ui sync storybook',\r\n });\r\n } else if (packHash && storybookHash === packHash) {\r\n results.push({\r\n id: 'B4',\r\n status: 'pass',\r\n message: 'brain pack and storybook-docs share sourceHash (same generate run)',\r\n });\r\n } else {\r\n results.push({\r\n id: 'B4',\r\n status: 'warn',\r\n message:\r\n 'brain pack and storybook-docs sourceHash skew (expected when packs were published separately at the same minor — run idia-ui sync all to align)',\r\n fixHint: 'idia-ui sync all',\r\n });\r\n }\r\n\r\n results.push({\r\n id: 'B-tier',\r\n status: 'info',\r\n message: `⚠ ${BRAIN_DOCTOR_DISCLAIMER}`,\r\n });\r\n\r\n return results;\r\n}\r\n\r\nexport function runCustomCheck(cwd: string): CheckResult[] {\r\n const hasStories = fileExists(cwd, 'src/stories');\r\n if (!hasStories) {\r\n return [\r\n {\r\n id: 'C1',\r\n status: 'skip',\r\n message: 'no src/stories/ directory (Storybook not configured)',\r\n },\r\n ];\r\n }\r\n\r\n return [\r\n {\r\n id: 'C1',\r\n status: 'info',\r\n message: 'wrapper/story coverage check not implemented (stub)',\r\n fixHint: 'Add stories for components in src/components/',\r\n },\r\n ];\r\n}\r\n","import type { CheckResult } from '../types.js';\r\nimport {\r\n manifestExists,\r\n readManifest,\r\n regenerateManifest,\r\n validateManifestShape,\r\n} from '../utils/manifest.js';\r\nimport { readInstalledVersion, readPackageJson } from '../utils/package-json.js';\r\n\r\nexport function runManifestCheck(\r\n cwd: string,\r\n fix: boolean,\r\n): { results: CheckResult[]; fixed: boolean } {\r\n const results: CheckResult[] = [];\r\n let fixed = false;\r\n\r\n if (!manifestExists(cwd)) {\r\n if (fix) {\r\n const pkg = readPackageJson(cwd);\r\n const coreVersion =\r\n readInstalledVersion(cwd, '@idia-ui/core') ??\r\n pkg?.dependencies?.['@idia-ui/core']?.replace(/^[\\^~]/, '') ??\r\n '0.2.0';\r\n regenerateManifest(cwd, coreVersion);\r\n fixed = true;\r\n results.push({\r\n id: 'M1',\r\n status: 'pass',\r\n message: '.idia/manifest.json regenerated',\r\n fixHint: 'Created manifest with idiaCli + core versions',\r\n });\r\n return { results, fixed };\r\n }\r\n\r\n results.push({\r\n id: 'M1',\r\n status: 'warn',\r\n message: '.idia/manifest.json missing',\r\n fixHint: 'Run idia-ui doctor --fix or idia-ui sync all after first add-on',\r\n });\r\n return { results, fixed };\r\n }\r\n\r\n const manifest = readManifest(cwd);\r\n if (!manifest || !validateManifestShape(manifest)) {\r\n results.push({\r\n id: 'M1',\r\n status: 'fail',\r\n message: '.idia/manifest.json invalid or unparseable',\r\n fixHint: 'Run idia-ui doctor --fix to regenerate',\r\n });\r\n return { results, fixed };\r\n }\r\n\r\n results.push({\r\n id: 'M1',\r\n status: 'pass',\r\n message: `.idia/manifest.json valid (core ${manifest.core}, cli ${manifest.idiaCli})`,\r\n });\r\n\r\n return { results, fixed };\r\n}\r\n","import type { CheckResult } from '../types.js';\r\nimport { grepSrcForPattern, readTextFile } from '../utils/fs.js';\r\n\r\nexport function runNavigationChecks(cwd: string): CheckResult[] {\r\n const results: CheckResult[] = [];\r\n const providers =\r\n readTextFile(cwd, 'src/providers/AppProviders.tsx') ??\r\n readTextFile(cwd, 'src/providers/AppProviders.ts');\r\n\r\n // N1\r\n if (providers && /NavigationContainer/.test(providers)) {\r\n results.push({\r\n id: 'N1',\r\n status: 'pass',\r\n message: 'NavigationContainer in provider tree',\r\n });\r\n } else {\r\n results.push({\r\n id: 'N1',\r\n status: 'fail',\r\n message: 'NavigationContainer not found in AppProviders',\r\n fixHint: 'Wrap navigation in NavigationContainer per templates/consumer-app',\r\n });\r\n }\r\n\r\n // N2 — NavigationProvider if idia Link/navigate used\r\n const usesIdiaNav =\r\n grepSrcForPattern(cwd, /\\bLink\\b.*@idia-ui\\/core/) ||\r\n grepSrcForPattern(cwd, /NavigationProvider/) ||\r\n grepSrcForPattern(cwd, /useIdiaNavigation|navigateTo/);\r\n\r\n if (usesIdiaNav) {\r\n const hasNavProvider = providers\r\n ? /NavigationProvider/.test(providers)\r\n : grepSrcForPattern(cwd, /NavigationProvider/);\r\n if (!hasNavProvider) {\r\n results.push({\r\n id: 'N2',\r\n status: 'warn',\r\n message: 'idia Link/navigation helpers used but NavigationProvider missing',\r\n fixHint: 'Wrap navigation ref with NavigationProvider from @idia-ui/core',\r\n });\r\n } else {\r\n results.push({\r\n id: 'N2',\r\n status: 'pass',\r\n message: 'NavigationProvider present',\r\n });\r\n }\r\n } else {\r\n results.push({\r\n id: 'N2',\r\n status: 'pass',\r\n message: 'idia Link/navigation helpers not used (NavigationProvider optional)',\r\n });\r\n }\r\n\r\n return results;\r\n}\r\n","import type { CheckResult } from '../types.js';\r\nimport {\r\n getDepVersion,\r\n readInstalledVersion,\r\n readPeerRange,\r\n readPackageJson,\r\n} from '../utils/package-json.js';\r\nimport { satisfiesRange } from '../utils/fs.js';\r\nimport { detectPackageManager, pmAddCommand } from '../utils/pm.js';\r\n\r\nconst P2_PACKAGES = [\r\n 'react-native-reanimated',\r\n 'react-native-gesture-handler',\r\n 'react-native-screens',\r\n 'react-native-safe-area-context',\r\n] as const;\r\n\r\nconst BARREL_REQUIRED_PEERS = ['zustand', '@tanstack/react-table'] as const;\r\n\r\nconst BARREL_OPTIONAL_PEERS = [\r\n 'react-image-crop',\r\n '@fullcalendar/core',\r\n '@fullcalendar/daygrid',\r\n '@fullcalendar/timegrid',\r\n '@fullcalendar/interaction',\r\n '@fullcalendar/multimonth',\r\n '@fullcalendar/list',\r\n '@fullcalendar/react',\r\n] as const;\r\n\r\nexport function runPeerChecks(cwd: string): CheckResult[] {\r\n const pkg = readPackageJson(cwd);\r\n if (!pkg) {\r\n return [\r\n {\r\n id: 'P0',\r\n status: 'fail',\r\n message: 'package.json not found or unreadable',\r\n fixHint: 'Run idia-ui doctor from your app root',\r\n },\r\n ];\r\n }\r\n\r\n const pm = detectPackageManager(cwd);\r\n const results: CheckResult[] = [];\r\n\r\n // P1 — tamagui peer range\r\n const tamaguiVersion =\r\n readInstalledVersion(cwd, 'tamagui') ??\r\n getDepVersion(pkg, 'tamagui')?.replace(/^[\\^~]/, '') ??\r\n null;\r\n const coreRange =\r\n readPeerRange(cwd, '@idia-ui/core', 'tamagui') ??\r\n readPeerRange(cwd, '@idia-ui/theme', 'tamagui') ??\r\n '^1.70.0';\r\n\r\n if (!tamaguiVersion) {\r\n results.push({\r\n id: 'P1',\r\n status: 'fail',\r\n message: 'tamagui not installed',\r\n fixHint: pmAddCommand(pm, ['tamagui@^1.144.0']),\r\n });\r\n } else if (!satisfiesRange(tamaguiVersion, coreRange)) {\r\n results.push({\r\n id: 'P1',\r\n status: 'fail',\r\n message: `tamagui ${tamaguiVersion} outside peer range ${coreRange}`,\r\n fixHint: pmAddCommand(pm, [`tamagui@${coreRange}`]),\r\n });\r\n } else {\r\n results.push({\r\n id: 'P1',\r\n status: 'pass',\r\n message: `tamagui ${tamaguiVersion} in peer range`,\r\n });\r\n }\r\n\r\n // P2 — navigation/gesture peers\r\n const missingP2 = P2_PACKAGES.filter((name) => {\r\n const installed = readInstalledVersion(cwd, name);\r\n const declared = getDepVersion(pkg, name);\r\n return !installed && !declared;\r\n });\r\n\r\n if (missingP2.length > 0) {\r\n results.push({\r\n id: 'P2',\r\n status: 'fail',\r\n message: `missing navigation/gesture peers: ${missingP2.join(', ')}`,\r\n fixHint: pmAddCommand(pm, [...missingP2]),\r\n });\r\n } else {\r\n results.push({\r\n id: 'P2',\r\n status: 'pass',\r\n message:\r\n 'gesture-handler, reanimated, screens, safe-area-context present',\r\n });\r\n }\r\n\r\n // P3 — @idia-ui/* alignment + barrel peers\r\n const idiaPkgs = Object.keys({\r\n ...pkg.dependencies,\r\n ...pkg.devDependencies,\r\n }).filter((n) => n.startsWith('@idia-ui/'));\r\n\r\n const idiaVersions = idiaPkgs\r\n .map((name) => {\r\n const v =\r\n readInstalledVersion(cwd, name) ??\r\n getDepVersion(pkg, name)?.replace(/^[\\^~]/, '');\r\n return v ? { name, version: v } : null;\r\n })\r\n .filter((x): x is { name: string; version: string } => x !== null);\r\n\r\n const minors = new Set(\r\n idiaVersions\r\n .map((p) => {\r\n const parts = p.version.split('.');\r\n return parts.length >= 2 ? `${parts[0]}.${parts[1]}` : null;\r\n })\r\n .filter((m): m is string => m !== null && !m.includes('workspace')),\r\n );\r\n\r\n if (idiaVersions.length === 0) {\r\n results.push({\r\n id: 'P3',\r\n status: 'fail',\r\n message: 'no @idia-ui/* packages in dependencies',\r\n fixHint: pmAddCommand(pm, ['@idia-ui/core@latest', '@idia-ui/theme@latest']),\r\n });\r\n } else if (minors.size > 1) {\r\n results.push({\r\n id: 'P3',\r\n status: 'fail',\r\n message: `@idia-ui/* minor versions misaligned: ${[...minors].join(', ')}`,\r\n fixHint: `${pm === 'pnpm' ? 'pnpm' : pm} update @idia-ui/*`,\r\n });\r\n } else {\r\n results.push({\r\n id: 'P3',\r\n status: 'pass',\r\n message: `@idia-ui/* versions aligned (${idiaVersions.map((p) => `${p.name}@${p.version}`).join(', ')})`,\r\n });\r\n }\r\n\r\n for (const peer of BARREL_REQUIRED_PEERS) {\r\n const installed = readInstalledVersion(cwd, peer);\r\n const declared = getDepVersion(pkg, peer);\r\n if (!installed && !declared) {\r\n results.push({\r\n id: 'P3',\r\n status: 'fail',\r\n message: `barrel peer ${peer} not installed (required for @idia-ui/core Table graph)`,\r\n fixHint: `${pmAddCommand(pm, [peer])} — see docs/generated/peer-dep-matrix.md`,\r\n });\r\n }\r\n }\r\n\r\n for (const peer of BARREL_OPTIONAL_PEERS) {\r\n const installed = readInstalledVersion(cwd, peer);\r\n const declared = getDepVersion(pkg, peer);\r\n if (!installed && !declared) {\r\n results.push({\r\n id: 'P3',\r\n status: 'warn',\r\n message: `optional peer ${peer} not installed (barrel may require it)`,\r\n fixHint: `Install per peer-dep-matrix.md: ${pmAddCommand(pm, [peer])}`,\r\n });\r\n }\r\n }\r\n\r\n return results;\r\n}\r\n","import type { CheckResult } from '../types.js';\r\nimport { fileExists, grepSrcForPattern, readTextFile } from '../utils/fs.js';\r\n\r\nconst OVERLAY_IMPORT =\r\n /from\\s+['\"]@idia-ui\\/core['\"][\\s\\S]*?(Modal|Toast|Dialog|ConfirmationModal)/;\r\n\r\nexport function runRuntimeChecks(cwd: string): CheckResult[] {\r\n const results: CheckResult[] = [];\r\n\r\n // R1\r\n if (fileExists(cwd, 'tamagui.config.ts')) {\r\n results.push({\r\n id: 'R1',\r\n status: 'pass',\r\n message: 'tamagui.config.ts found',\r\n });\r\n } else {\r\n results.push({\r\n id: 'R1',\r\n status: 'fail',\r\n message: 'tamagui.config.ts missing at app root',\r\n fixHint: 'Restore from templates/consumer-app or re-scaffold',\r\n });\r\n }\r\n\r\n // R2\r\n const providers =\r\n readTextFile(cwd, 'src/providers/AppProviders.tsx') ??\r\n readTextFile(cwd, 'src/providers/AppProviders.ts');\r\n\r\n if (!providers) {\r\n results.push({\r\n id: 'R2',\r\n status: 'fail',\r\n message: 'AppProviders not found',\r\n fixHint: 'Add src/providers/AppProviders.tsx per templates/consumer-app',\r\n });\r\n } else {\r\n const hasTamagui = /TamaguiProvider/.test(providers);\r\n const hasTheme = /ThemeProvider/.test(providers) && /@idia-ui\\/theme/.test(providers);\r\n if (hasTamagui && hasTheme) {\r\n results.push({\r\n id: 'R2',\r\n status: 'pass',\r\n message: 'AppProviders: TamaguiProvider + ThemeProvider',\r\n });\r\n } else {\r\n results.push({\r\n id: 'R2',\r\n status: 'fail',\r\n message: 'AppProviders missing TamaguiProvider and/or ThemeProvider (@idia-ui/theme)',\r\n fixHint: 'Compare src/providers/AppProviders.tsx with templates/consumer-app',\r\n });\r\n }\r\n }\r\n\r\n // R3 — overlay providers\r\n const usesOverlays =\r\n grepSrcForPattern(cwd, OVERLAY_IMPORT) ||\r\n grepSrcForPattern(cwd, /\\b(Modal|Toast|Dialog)\\b.*@idia-ui\\/core/);\r\n\r\n if (usesOverlays) {\r\n const hasModal = providers ? /ModalProvider/.test(providers) : false;\r\n const hasToast = providers ? /ToastProvider/.test(providers) : false;\r\n if (!hasModal || !hasToast) {\r\n results.push({\r\n id: 'R3',\r\n status: 'warn',\r\n message: 'overlay components imported but ModalProvider/ToastProvider missing',\r\n fixHint: 'Add ModalProvider and ToastProvider to AppProviders per template',\r\n });\r\n } else {\r\n results.push({\r\n id: 'R3',\r\n status: 'pass',\r\n message: 'overlay providers present',\r\n });\r\n }\r\n } else {\r\n results.push({\r\n id: 'R3',\r\n status: 'pass',\r\n message: 'no overlay imports detected (Modal/Toast providers optional)',\r\n });\r\n }\r\n\r\n // R4 — font gate\r\n const fontGate =\r\n (providers && /waitForWebFonts/.test(providers)) ||\r\n grepSrcForPattern(cwd, /expo-font/) ||\r\n grepSrcForPattern(cwd, /useFonts/);\r\n\r\n if (fontGate) {\r\n results.push({\r\n id: 'R4',\r\n status: 'pass',\r\n message: 'web font gate configured (waitForWebFonts or expo-font)',\r\n });\r\n } else {\r\n results.push({\r\n id: 'R4',\r\n status: 'warn',\r\n message: 'no waitForWebFonts or expo-font pattern detected',\r\n fixHint: 'Copy font loading pattern from templates/consumer-app AppProviders',\r\n });\r\n }\r\n\r\n return results;\r\n}\r\n","import { runBrainChecks, runCustomCheck, runStorybookChecks } from './packs.js';\r\nimport { runManifestCheck } from './manifest.js';\r\nimport { runNavigationChecks } from './navigation.js';\r\nimport { runPeerChecks } from './peers.js';\r\nimport { runRuntimeChecks } from './runtime.js';\r\nimport type { CheckResult, DoctorOptions } from '../types.js';\r\n\r\nexport function runAllChecks(options: DoctorOptions): CheckResult[] {\r\n const { cwd, full, fix } = options;\r\n const checks: CheckResult[] = [];\r\n\r\n checks.push(...runPeerChecks(cwd));\r\n checks.push(...runRuntimeChecks(cwd));\r\n checks.push(...runNavigationChecks(cwd));\r\n\r\n const { results: manifestResults } = runManifestCheck(cwd, fix);\r\n checks.push(...manifestResults);\r\n\r\n if (full) {\r\n checks.push(...runStorybookChecks(cwd));\r\n checks.push(...runBrainChecks(cwd));\r\n checks.push(...runCustomCheck(cwd));\r\n }\r\n\r\n return checks;\r\n}\r\n\r\nexport function summarizeChecks(\r\n checks: CheckResult[],\r\n strict: boolean,\r\n): { passed: number; warnings: number; failures: number; skipped: number; exitCode: number } {\r\n let passed = 0;\r\n let warnings = 0;\r\n let failures = 0;\r\n let skipped = 0;\r\n\r\n for (const check of checks) {\r\n switch (check.status) {\r\n case 'pass':\r\n passed++;\r\n break;\r\n case 'warn':\r\n warnings++;\r\n break;\r\n case 'fail':\r\n failures++;\r\n break;\r\n case 'skip':\r\n case 'info':\r\n skipped++;\r\n break;\r\n }\r\n }\r\n\r\n let exitCode = 0;\r\n if (failures > 0) exitCode = 1;\r\n else if (strict && warnings > 0) exitCode = 1;\r\n\r\n return { passed, warnings, failures, skipped, exitCode };\r\n}\r\n","import { runAllChecks, summarizeChecks } from '../checks/index.js';\r\nimport type { DoctorOptions, DoctorReport } from '../types.js';\r\n\r\nconst STATUS_ICON: Record<string, string> = {\r\n pass: '✓',\r\n warn: '⚠',\r\n fail: '✗',\r\n info: 'ℹ',\r\n skip: '○',\r\n};\r\n\r\nexport function runDoctor(options: DoctorOptions): DoctorReport {\r\n const checks = runAllChecks(options);\r\n const summary = summarizeChecks(checks, options.strict);\r\n\r\n return {\r\n checks,\r\n summary: {\r\n passed: summary.passed,\r\n warnings: summary.warnings,\r\n failures: summary.failures,\r\n skipped: summary.skipped,\r\n },\r\n exitCode: summary.exitCode,\r\n };\r\n}\r\n\r\nexport function formatHumanReport(report: DoctorReport, full: boolean): string {\r\n const lines: string[] = ['idia-ui doctor', ''];\r\n\r\n for (const check of report.checks) {\r\n const icon = STATUS_ICON[check.status] ?? '·';\r\n lines.push(`${icon} ${check.id} ${check.message}`);\r\n if (check.fixHint && (check.status === 'fail' || check.status === 'warn')) {\r\n lines.push(` → ${check.fixHint}`);\r\n }\r\n }\r\n\r\n lines.push('');\r\n const { passed, warnings, failures } = report.summary;\r\n const mode = full ? 'full' : 'quick';\r\n lines.push(\r\n `${passed} passed, ${warnings} warnings, ${failures} failures (${mode} scan) — exit ${report.exitCode}`,\r\n );\r\n\r\n return lines.join('\\n');\r\n}\r\n\r\nexport function formatJsonReport(report: DoctorReport): string {\r\n return JSON.stringify(\r\n {\r\n checks: report.checks.map((c) => ({\r\n id: c.id,\r\n status: c.status,\r\n message: c.message,\r\n ...(c.fixHint ? { fixHint: c.fixHint } : {}),\r\n })),\r\n summary: report.summary,\r\n exitCode: report.exitCode,\r\n },\r\n null,\r\n 2,\r\n );\r\n}\r\n","import {\r\n STORYBOOK_CLI_VERSION,\r\n STORYBOOK_DOCS_VERSION,\r\n STORYBOOK_PRESET_VERSION,\r\n} from './constants.js'\r\nimport type { PackageManager } from '../../utils/pm.js'\r\nimport { detectPackageManager } from '../../utils/pm.js'\r\nimport { readInstalledVersion, readPackageJson } from '../../utils/package-json.js'\r\nimport { fileExists } from '../../utils/fs.js'\r\nimport { runPmAddDevDeps } from '../../utils/exec.js'\r\nimport { CLI_VERSION, readManifest, writeManifest } from '../../utils/manifest.js'\r\n\r\nexport type SyncStorybookOptions = {\r\n cwd: string\r\n pm?: PackageManager\r\n skipInstall?: boolean\r\n}\r\n\r\nexport type SyncStorybookResult = {\r\n synced: boolean\r\n message: string\r\n}\r\n\r\nfunction isStorybookInstalled(cwd: string): boolean {\r\n return fileExists(cwd, '.storybook/main.ts')\r\n}\r\n\r\nfunction runPmUpdate(cwd: string, pm: PackageManager): void {\r\n const packages = [\r\n `@idia-ui/storybook-docs@${STORYBOOK_DOCS_VERSION}`,\r\n `@idia-ui/storybook-preset-react-native-web@${STORYBOOK_PRESET_VERSION}`,\r\n ]\r\n runPmAddDevDeps(cwd, pm, packages)\r\n}\r\n\r\nexport function runSyncStorybook(options: SyncStorybookOptions): SyncStorybookResult {\r\n const { cwd, skipInstall = false } = options\r\n const pm = options.pm ?? detectPackageManager(cwd)\r\n\r\n if (!isStorybookInstalled(cwd)) {\r\n console.error('Storybook not installed — run idia-ui add storybook first')\r\n process.exit(1)\r\n }\r\n\r\n const manifest = readManifest(cwd)\r\n if (!manifest) {\r\n console.error('.idia/manifest.json missing — run idia-ui doctor --fix')\r\n process.exit(1)\r\n }\r\n\r\n const corePkg = readPackageJson(cwd)\r\n const coreVersion =\r\n readInstalledVersion(cwd, '@idia-ui/core') ??\r\n corePkg?.dependencies?.['@idia-ui/core']?.replace(/^[\\^~]/, '') ??\r\n manifest.core\r\n\r\n if (!skipInstall) {\r\n console.log(`Syncing storybook packs via ${pm}…`)\r\n runPmUpdate(cwd, pm)\r\n }\r\n\r\n manifest.idiaCli = CLI_VERSION\r\n manifest.core = coreVersion\r\n manifest.features ??= {}\r\n manifest.features.storybook = {\r\n installed: (manifest.features.storybook as { installed?: string } | undefined)?.installed ??\r\n new Date().toISOString(),\r\n storybookDocs: STORYBOOK_DOCS_VERSION,\r\n storybook: STORYBOOK_CLI_VERSION,\r\n preset: STORYBOOK_PRESET_VERSION,\r\n }\r\n writeManifest(cwd, manifest)\r\n\r\n console.log(`✓ Synced @idia-ui/storybook-docs@${STORYBOOK_DOCS_VERSION}`)\r\n console.log(`✓ Synced @idia-ui/storybook-preset-react-native-web@${STORYBOOK_PRESET_VERSION}`)\r\n\r\n return {\r\n synced: true,\r\n message: `storybook-docs@${STORYBOOK_DOCS_VERSION} aligned with core@${coreVersion}`,\r\n }\r\n}\r\n\r\n","import { installBrainPack, printBrainInstallSummary } from '../brain/install.js';\r\nimport { BRAIN_DOCTOR_DISCLAIMER, BRAIN_TIER_DISCLAIMER } from '../brain/constants.js';\r\nimport { runSyncStorybook as syncStorybookPack } from './storybook/sync.js';\r\nimport { fileExists } from '../utils/fs.js';\r\nimport { readManifest } from '../utils/manifest.js';\r\n\r\nexport type SyncOptions = {\r\n cwd: string;\r\n repair?: boolean;\r\n force?: boolean;\r\n pm?: 'pnpm' | 'npm' | 'yarn';\r\n};\r\n\r\nexport function runSyncBrain(options: SyncOptions): void {\r\n try {\r\n const result = installBrainPack({\r\n cwd: options.cwd,\r\n repair: true,\r\n force: options.force,\r\n pm: options.pm,\r\n });\r\n console.log('✓ brain pack synced');\r\n printBrainInstallSummary(result);\r\n } catch (error) {\r\n console.error(error instanceof Error ? error.message : String(error));\r\n console.error(BRAIN_TIER_DISCLAIMER);\r\n process.exit(1);\r\n }\r\n}\r\n\r\nexport function runSyncStorybook(options: SyncOptions): void {\r\n syncStorybookPack({\r\n cwd: options.cwd,\r\n pm: options.pm,\r\n });\r\n}\r\n\r\nexport function runSyncAll(options: SyncOptions): void {\r\n const { cwd } = options;\r\n const manifest = readManifest(cwd);\r\n const hasStorybook =\r\n fileExists(cwd, '.storybook/main.ts') || Boolean(manifest?.features?.storybook);\r\n const hasBrain = Boolean(manifest?.features?.brain?.brainPack);\r\n\r\n if (!hasStorybook && !hasBrain) {\r\n console.error('No storybook or brain features installed — run idia-ui add storybook or add brain first');\r\n process.exit(1);\r\n }\r\n\r\n if (hasStorybook) {\r\n syncStorybookPack({ cwd, pm: options.pm });\r\n } else {\r\n console.log('○ storybook not installed — skipping storybook sync');\r\n }\r\n\r\n if (hasBrain) {\r\n runSyncBrain(options);\r\n } else {\r\n console.log('○ brain not installed — skipping brain sync');\r\n console.error(BRAIN_DOCTOR_DISCLAIMER);\r\n }\r\n\r\n console.log('');\r\n console.log('✓ sync all complete');\r\n}\r\n\r\nexport function runSync(target: string, options: SyncOptions): void {\r\n switch (target) {\r\n case 'brain':\r\n runSyncBrain(options);\r\n break;\r\n case 'storybook':\r\n runSyncStorybook(options);\r\n break;\r\n case 'all':\r\n runSyncAll(options);\r\n break;\r\n default:\r\n console.error(`Unknown sync target: ${target}`);\r\n console.error('Available: storybook | brain | all');\r\n process.exit(1);\r\n }\r\n}\r\n"],"mappings":"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","names":["import_node_path","import_node_fs","import_node_path","import_node_fs","import_node_path","import_node_fs","import_node_path","semver","import_node_fs","import_node_path","at","runPmInstall","import_node_fs","import_node_path","import_node_fs","import_node_path","import_node_fs","import_node_path","require","packRoot","packManifest","import_node_fs","import_node_path","isStorybookInstalled","runSyncStorybook"]}
|