@decantr/cli 3.5.3 → 3.5.5

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/dist/bin.js CHANGED
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
- import "./chunk-KFGL6DVJ.js";
2
+ import "./chunk-4O74E2PS.js";
3
3
  import "./chunk-SIDKK73N.js";
4
- import "./chunk-FE3N5MAO.js";
5
- import "./chunk-SUB3F5RO.js";
6
- import "./chunk-4WT6AVKO.js";
4
+ import "./chunk-FIWVRMZN.js";
5
+ import "./chunk-U62GGKUO.js";
6
+ import "./chunk-24JR4ZNG.js";
@@ -328,7 +328,7 @@ function scanAmbientContext(projectRoot) {
328
328
 
329
329
  // src/analyzers/routes.ts
330
330
  import { existsSync as existsSync2, readdirSync as readdirSync2, readFileSync as readFileSync2, statSync as statSync2 } from "fs";
331
- import { join as join2, relative as relative2 } from "path";
331
+ import { extname as extname2, join as join2, relative as relative2 } from "path";
332
332
  var SKIP_DIRS2 = /* @__PURE__ */ new Set(["node_modules", ".next", ".git", "api", "_app", "_document"]);
333
333
  function shouldSkipDir2(name) {
334
334
  return name.startsWith("_") || name.startsWith(".") || SKIP_DIRS2.has(name);
@@ -458,6 +458,18 @@ function walkSvelteKitRoutes(dir, baseDir, segments) {
458
458
  var ROUTER_FILE_EXTENSIONS = /* @__PURE__ */ new Set([".tsx", ".ts", ".jsx", ".js"]);
459
459
  var ROUTE_VARIABLE_NAMES = "(?:path|pathname|route|currentPath|currentRoute|locationPath|activePath)";
460
460
  var ROUTE_ASSET_EXTENSION_RE = /\.(?:avif|bmp|css|gif|ico|jpeg|jpg|js|json|map|mp4|pdf|png|svg|webp|woff2?)$/i;
461
+ var JSX_ROUTE_PATH_RE = /<(?:Route|[A-Z][\w.]*Route)\b[^>]*\bpath\s*=\s*(?:"([^"]+)"|'([^']+)'|{\s*"([^"]+)"\s*}|{\s*'([^']+)'\s*}|{\s*`([^`]+)`\s*})/g;
462
+ var OBJECT_ROUTE_PATH_RE = /\bpath\s*:\s*(?:"([^"]+)"|'([^']+)'|`([^`]+)`)/g;
463
+ var STATIC_HTML_ENTRY_FILES = [
464
+ "index.html",
465
+ "docs/index.html",
466
+ "src/index.html",
467
+ "public/index.html",
468
+ "dist/index.html"
469
+ ];
470
+ var STATIC_HTML_ROUTE_DIRS = ["demos", "examples"];
471
+ var MAX_STATIC_HTML_ROUTES = 80;
472
+ var MAX_STATIC_HTML_CANDIDATES = 1e3;
461
473
  function collectRouteCandidateFiles(dir, files, depth = 0) {
462
474
  if (depth > 5) return;
463
475
  let entries;
@@ -501,11 +513,13 @@ function scanReactRouter(projectRoot) {
501
513
  const relativePath = relative2(projectRoot, absolutePath);
502
514
  const pathMatches = /* @__PURE__ */ new Set();
503
515
  if (isReactRouterFile) {
504
- for (const match of content.matchAll(/<Route\b[^>]*\bpath=["'`]([^"'`]+)["'`]/g)) {
505
- pathMatches.add(match[1]);
516
+ for (const match of content.matchAll(JSX_ROUTE_PATH_RE)) {
517
+ const route = firstRouteLiteralMatch(match);
518
+ if (route) pathMatches.add(route);
506
519
  }
507
- for (const match of content.matchAll(/\bpath\s*:\s*["'`]([^"'`]+)["'`]/g)) {
508
- pathMatches.add(match[1]);
520
+ for (const match of content.matchAll(OBJECT_ROUTE_PATH_RE)) {
521
+ const route = firstRouteLiteralMatch(match);
522
+ if (route) pathMatches.add(route);
509
523
  }
510
524
  }
511
525
  for (const route of detectDeclarativeRouteSpecRoutes(content)) {
@@ -519,35 +533,110 @@ function scanReactRouter(projectRoot) {
519
533
  pathMatches.add("/");
520
534
  }
521
535
  for (const path of pathMatches) {
522
- const routePath = normalizeDetectedRouteLiteral(path);
523
- if (!routePath || routeMap.has(routePath)) continue;
524
- routeMap.set(routePath, {
525
- path: routePath,
526
- file: relativePath,
527
- hasLayout: false
528
- });
536
+ for (const routePath of normalizeDetectedRouteLiterals(path)) {
537
+ if (routeMap.has(routePath)) continue;
538
+ routeMap.set(routePath, {
539
+ path: routePath,
540
+ file: relativePath,
541
+ hasLayout: false
542
+ });
543
+ }
529
544
  }
530
545
  }
531
546
  return [...routeMap.values()];
532
547
  }
533
- function normalizeDetectedRouteLiteral(value) {
534
- const cleaned = value.trim().split(/[?#]/)[0];
535
- if (!cleaned || cleaned === "/") return "/";
536
- if (cleaned === "*" || cleaned === "**" || cleaned.startsWith("#")) return null;
537
- if (!cleaned.startsWith("/") || cleaned.startsWith("//")) return null;
538
- if (ROUTE_ASSET_EXTENSION_RE.test(cleaned)) return null;
539
- return cleaned.replace(/\/+$/g, "") || "/";
548
+ function firstRouteLiteralMatch(match) {
549
+ return match.slice(1).find((value) => typeof value === "string") ?? null;
550
+ }
551
+ function normalizeDetectedRouteLiterals(value) {
552
+ const withoutHash = value.trim().split("#")[0];
553
+ const cleaned = withoutHash.includes("?") && !withoutHash.endsWith(")?") ? withoutHash.split("?")[0] : withoutHash;
554
+ if (!cleaned || cleaned === "/") return ["/"];
555
+ if (cleaned === "*" || cleaned === "**" || cleaned.startsWith("#")) return [];
556
+ if (cleaned === "/*" || cleaned === "/**") return [];
557
+ if (!cleaned.startsWith("/") || cleaned.startsWith("//")) return [];
558
+ if (ROUTE_ASSET_EXTENSION_RE.test(cleaned)) return [];
559
+ const optionalGroup = cleaned.match(/^\/\(([^()]+)\)\?$/);
560
+ if (optionalGroup) {
561
+ return [
562
+ "/",
563
+ ...optionalGroup[1].split("|").map((segment) => segment.trim()).filter(Boolean).map((segment) => `/${segment}`)
564
+ ];
565
+ }
566
+ const withoutTrailingWildcard = cleaned.endsWith("*") && !cleaned.endsWith("/*") && !/:\w+\*$/.test(cleaned) ? cleaned.slice(0, -1) : cleaned;
567
+ const normalized2 = withoutTrailingWildcard.replace(/\/+$/g, "") || "/";
568
+ if (normalized2 === "/*" || normalized2 === "/**") return [];
569
+ return [normalized2];
540
570
  }
541
571
  function collectRouteLiterals(pattern, content, routes) {
542
572
  let count = 0;
543
573
  for (const match of content.matchAll(pattern)) {
544
- const route = normalizeDetectedRouteLiteral(match[1] ?? "");
545
- if (!route) continue;
546
- routes.add(route);
547
- count += 1;
574
+ for (const route of normalizeDetectedRouteLiterals(match[1] ?? "")) {
575
+ routes.add(route);
576
+ count += 1;
577
+ }
548
578
  }
549
579
  return count;
550
580
  }
581
+ function htmlRouteFromFile(file) {
582
+ let withoutExt = file.slice(0, -extname2(file).length).replace(/\\/g, "/");
583
+ if (withoutExt.endsWith("/index")) withoutExt = withoutExt.slice(0, -"/index".length);
584
+ if (withoutExt === "index" || withoutExt === "docs" || withoutExt === "src" || withoutExt === "public" || withoutExt === "dist") {
585
+ return "/";
586
+ }
587
+ return `/${withoutExt.split("/").filter(Boolean).join("/")}` || "/";
588
+ }
589
+ function collectStaticHtmlFiles(dir, projectRoot, files, depth = 0) {
590
+ if (depth > 5 || files.length >= MAX_STATIC_HTML_CANDIDATES) return;
591
+ let entries;
592
+ try {
593
+ entries = readdirSync2(dir).sort();
594
+ } catch {
595
+ return;
596
+ }
597
+ for (const entry of entries) {
598
+ if (files.length >= MAX_STATIC_HTML_CANDIDATES) return;
599
+ if (entry.startsWith(".") || entry === "node_modules") continue;
600
+ const fullPath = join2(dir, entry);
601
+ try {
602
+ const stat = statSync2(fullPath);
603
+ if (stat.isDirectory()) {
604
+ collectStaticHtmlFiles(fullPath, projectRoot, files, depth + 1);
605
+ } else if (stat.isFile() && /\.(?:html|htm)$/i.test(entry)) {
606
+ files.push(relative2(projectRoot, fullPath).replace(/\\/g, "/"));
607
+ }
608
+ } catch {
609
+ }
610
+ }
611
+ }
612
+ function staticHtmlFilePriority(file) {
613
+ const base = file.split("/").pop()?.toLowerCase();
614
+ if (base === "index.html" || base === "index.htm") return 0;
615
+ if (base === "default.html" || base === "default.htm") return 1;
616
+ return 2;
617
+ }
618
+ function scanStaticHtmlRoutes(projectRoot) {
619
+ const routes = /* @__PURE__ */ new Map();
620
+ for (const file of STATIC_HTML_ENTRY_FILES) {
621
+ if (!existsSync2(join2(projectRoot, file))) continue;
622
+ routes.set("/", { path: "/", file, hasLayout: false });
623
+ break;
624
+ }
625
+ for (const dir of STATIC_HTML_ROUTE_DIRS) {
626
+ const fullDir = join2(projectRoot, dir);
627
+ if (!existsSync2(fullDir)) continue;
628
+ const files = [];
629
+ collectStaticHtmlFiles(fullDir, projectRoot, files);
630
+ for (const file of files.sort(
631
+ (a, b) => staticHtmlFilePriority(a) - staticHtmlFilePriority(b) || a.localeCompare(b)
632
+ )) {
633
+ const routePath = htmlRouteFromFile(file);
634
+ if (routes.has(routePath)) continue;
635
+ routes.set(routePath, { path: routePath, file, hasLayout: false });
636
+ }
637
+ }
638
+ return [...routes.values()].slice(0, MAX_STATIC_HTML_ROUTES);
639
+ }
551
640
  function detectPathnameBranchRoutes(content) {
552
641
  const routes = /* @__PURE__ */ new Set();
553
642
  const comparison = new RegExp(
@@ -719,6 +808,10 @@ function scanRoutes(projectRoot) {
719
808
  if (reactRouterRoutes.length > 0) {
720
809
  return { strategy: "react-router", routes: reactRouterRoutes };
721
810
  }
811
+ const staticHtmlRoutes = scanStaticHtmlRoutes(projectRoot);
812
+ if (staticHtmlRoutes.length > 0) {
813
+ return { strategy: "static-html", routes: staticHtmlRoutes };
814
+ }
722
815
  return { strategy: "none", routes: [] };
723
816
  }
724
817
 
@@ -1514,7 +1607,7 @@ function buildGuardRegistryContext(projectRoot = process.cwd()) {
1514
1607
 
1515
1608
  // src/lib/scan-interactions.ts
1516
1609
  import { existsSync as existsSync8, readdirSync as readdirSync6, readFileSync as readFileSync8, statSync as statSync4 } from "fs";
1517
- import { extname as extname2, join as join8, relative as relative4 } from "path";
1610
+ import { extname as extname3, join as join8, relative as relative4 } from "path";
1518
1611
  import { verifyInteractionsInSource } from "@decantr/verifier";
1519
1612
  var SCAN_EXTENSIONS = /* @__PURE__ */ new Set([".tsx", ".jsx", ".ts", ".js", ".html", ".mdx"]);
1520
1613
  var SKIP_DIRECTORIES = /* @__PURE__ */ new Set([
@@ -1566,7 +1659,7 @@ function walkSourceTree(rootDir) {
1566
1659
  const relativePath = relative4(rootDir, fullPath) || entry;
1567
1660
  if (s.isDirectory()) {
1568
1661
  walk2(fullPath);
1569
- } else if (s.isFile() && SCAN_EXTENSIONS.has(extname2(entry))) {
1662
+ } else if (s.isFile() && SCAN_EXTENSIONS.has(extname3(entry))) {
1570
1663
  if (s.size > MAX_FILE_SIZE) continue;
1571
1664
  if (isNonUiInteractionSource(relativePath)) continue;
1572
1665
  try {
@@ -22,7 +22,7 @@ import {
22
22
  listWorkspaceCandidates,
23
23
  listWorkspaceProjects,
24
24
  shouldFailWorkspaceHealth
25
- } from "./chunk-FE3N5MAO.js";
25
+ } from "./chunk-FIWVRMZN.js";
26
26
  import {
27
27
  acceptBrownfieldLocalLaw,
28
28
  acceptStyleBridge,
@@ -52,7 +52,7 @@ import {
52
52
  writeBrownfieldCodifyProposal,
53
53
  writeHostedPatternMappingProposal,
54
54
  writeStyleBridgeProposal
55
- } from "./chunk-SUB3F5RO.js";
55
+ } from "./chunk-U62GGKUO.js";
56
56
  import {
57
57
  buildGuardRegistryContext,
58
58
  createDoctrineMap,
@@ -69,7 +69,7 @@ import {
69
69
  sendCliCommandTelemetry,
70
70
  sendNewProjectCompletedTelemetry,
71
71
  writeDoctrineMap
72
- } from "./chunk-4WT6AVKO.js";
72
+ } from "./chunk-24JR4ZNG.js";
73
73
 
74
74
  // src/index.ts
75
75
  import { existsSync as existsSync29, mkdirSync as mkdirSync16, readdirSync as readdirSync8, readFileSync as readFileSync22, writeFileSync as writeFileSync19 } from "fs";
@@ -2940,6 +2940,21 @@ var RULE_FILES = [
2940
2940
  ".github/copilot-instructions.md",
2941
2941
  ".windsurfrules"
2942
2942
  ];
2943
+ var STATIC_HTML_ENTRY_FILES = [
2944
+ "index.html",
2945
+ "docs/index.html",
2946
+ "src/index.html",
2947
+ "public/index.html",
2948
+ "dist/index.html"
2949
+ ];
2950
+ var STATIC_HTML_ROUTE_DIRS = ["demos", "examples"];
2951
+ function hasAnyFile(projectRoot, relPaths) {
2952
+ return relPaths.some((relPath) => existsSync10(join12(projectRoot, relPath)));
2953
+ }
2954
+ function hasStaticHtmlSurface(projectRoot) {
2955
+ if (hasAnyFile(projectRoot, STATIC_HTML_ENTRY_FILES)) return true;
2956
+ return STATIC_HTML_ROUTE_DIRS.some((dir) => existsSync10(join12(projectRoot, dir, "index.html")));
2957
+ }
2943
2958
  function readPackageJson(dir) {
2944
2959
  const path = join12(dir, "package.json");
2945
2960
  if (!existsSync10(path)) return null;
@@ -3045,8 +3060,8 @@ function detectProject(projectRoot = process.cwd()) {
3045
3060
  } catch {
3046
3061
  }
3047
3062
  }
3048
- if (result.framework === "unknown" && !existsSync10(packageJsonPath)) {
3049
- if (existsSync10(join12(projectRoot, "index.html"))) {
3063
+ if (result.framework === "unknown") {
3064
+ if (hasStaticHtmlSurface(projectRoot)) {
3050
3065
  result.framework = "html";
3051
3066
  }
3052
3067
  }
@@ -4251,7 +4266,7 @@ function rel(root, path) {
4251
4266
  const value = relative4(root, path).replace(/\\/g, "/");
4252
4267
  return value || ".";
4253
4268
  }
4254
- function hasAnyFile(dir, names) {
4269
+ function hasAnyFile2(dir, names) {
4255
4270
  for (const name of names) {
4256
4271
  const path = join17(dir, name);
4257
4272
  if (existsSync15(path)) return name;
@@ -4280,7 +4295,7 @@ function detectDesignAuthority(workspaceRoot, appRoot) {
4280
4295
  }
4281
4296
  for (const root of [appRoot, workspaceRoot]) {
4282
4297
  const label = root === appRoot ? "app" : "workspace";
4283
- const tailwind = hasAnyFile(root, [
4298
+ const tailwind = hasAnyFile2(root, [
4284
4299
  "tailwind.config.js",
4285
4300
  "tailwind.config.ts",
4286
4301
  "tailwind.config.mjs",
@@ -6220,11 +6235,16 @@ function walkFiles(dir) {
6220
6235
  return files;
6221
6236
  }
6222
6237
  function trackedGeneratedFiles(projectRoot) {
6223
- return [
6238
+ const files = [
6224
6239
  join24(projectRoot, "DECANTR.md"),
6225
- ...walkFiles(join24(projectRoot, ".decantr", "context")),
6226
- ...["global.css", "tokens.css", "treatments.css", "decantr-bridge.css"].map((file) => join24(projectRoot, "src", "styles", file)).filter((path) => existsSync22(path))
6227
- ].filter((path) => existsSync22(path));
6240
+ ...walkFiles(join24(projectRoot, ".decantr", "context"))
6241
+ ];
6242
+ if (!isContractOnlyProject2(projectRoot)) {
6243
+ files.push(
6244
+ ...["global.css", "tokens.css", "treatments.css", "decantr-bridge.css"].map((file) => join24(projectRoot, "src", "styles", file)).filter((path) => existsSync22(path))
6245
+ );
6246
+ }
6247
+ return files.filter((path) => existsSync22(path));
6228
6248
  }
6229
6249
  function snapshotGeneratedFiles(projectRoot) {
6230
6250
  const map = /* @__PURE__ */ new Map();
@@ -11073,7 +11093,7 @@ async function cmdAdoptWorkflow(args) {
11073
11093
  await cmdGraph(projectRoot, { displayRoot: process.cwd() });
11074
11094
  if (process.exitCode && process.exitCode !== 0) return;
11075
11095
  if (runVerify) {
11076
- const { cmdHealth } = await import("./health-RIOSZEJP.js");
11096
+ const { cmdHealth } = await import("./health-RRIM7YAV.js");
11077
11097
  await cmdHealth(projectRoot, {
11078
11098
  browser: runBrowser,
11079
11099
  browserBaseUrl: baseUrl,
@@ -11147,7 +11167,7 @@ async function cmdVerifyWorkflow(args) {
11147
11167
  return;
11148
11168
  }
11149
11169
  if (workspaceMode) {
11150
- const { cmdWorkspace } = await import("./workspace-PFUW4W65.js");
11170
+ const { cmdWorkspace } = await import("./workspace-47XLOUGD.js");
11151
11171
  await cmdWorkspace(process.cwd(), ["workspace", "health", ...withoutWorkflowOnlyFlags(args)]);
11152
11172
  return;
11153
11173
  }
@@ -11180,7 +11200,7 @@ async function cmdVerifyWorkflow(args) {
11180
11200
  }
11181
11201
  let guardExitCode;
11182
11202
  if (brownfield) {
11183
- const { cmdHeal, collectCheckIssues } = await import("./heal-M6V2I6DB.js");
11203
+ const { cmdHeal, collectCheckIssues } = await import("./heal-2FK63EQE.js");
11184
11204
  if (quietOutput) {
11185
11205
  const result = collectCheckIssues(workspaceInfo.appRoot, { brownfield: true });
11186
11206
  guardExitCode = result.issues.some((issue) => issue.type === "error") ? 1 : void 0;
@@ -11190,7 +11210,7 @@ async function cmdVerifyWorkflow(args) {
11190
11210
  process.exitCode = void 0;
11191
11211
  }
11192
11212
  }
11193
- const { cmdHealth, parseHealthArgs } = await import("./health-RIOSZEJP.js");
11213
+ const { cmdHealth, parseHealthArgs } = await import("./health-RRIM7YAV.js");
11194
11214
  await cmdHealth(workspaceInfo.appRoot, parseHealthArgs(healthArgs));
11195
11215
  if (localPatterns) {
11196
11216
  const validation = validateLocalLaw(workspaceInfo.appRoot);
@@ -12827,7 +12847,7 @@ async function main() {
12827
12847
  `${YELLOW13}Note: \`decantr heal\` is deprecated. Use \`decantr check\` instead.${RESET17}`
12828
12848
  );
12829
12849
  }
12830
- const { cmdHeal } = await import("./heal-M6V2I6DB.js");
12850
+ const { cmdHeal } = await import("./heal-2FK63EQE.js");
12831
12851
  const { flags } = parseLooseArgs(args);
12832
12852
  const workspaceInfo = resolveWorkflowProject(flags, "check");
12833
12853
  if (!workspaceInfo) break;
@@ -12852,7 +12872,7 @@ async function main() {
12852
12872
  const { flags } = parseLooseArgs(args);
12853
12873
  const workspaceInfo = resolveWorkflowProject(flags, "health");
12854
12874
  if (!workspaceInfo) break;
12855
- const { cmdHealth, parseHealthArgs } = await import("./health-RIOSZEJP.js");
12875
+ const { cmdHealth, parseHealthArgs } = await import("./health-RRIM7YAV.js");
12856
12876
  await cmdHealth(workspaceInfo.appRoot, parseHealthArgs(stripProjectArgs(args)));
12857
12877
  } catch (e) {
12858
12878
  console.error(error2(e.message));
@@ -12880,7 +12900,7 @@ async function main() {
12880
12900
  cmdStudioHelp();
12881
12901
  break;
12882
12902
  }
12883
- const { cmdStudio, parseStudioArgs } = await import("./studio-7JSGAGVX.js");
12903
+ const { cmdStudio, parseStudioArgs } = await import("./studio-RGXIJL3J.js");
12884
12904
  await cmdStudio(process.cwd(), parseStudioArgs(args));
12885
12905
  } catch (e) {
12886
12906
  console.error(error2(e.message));
@@ -12894,7 +12914,7 @@ async function main() {
12894
12914
  cmdWorkspaceHelp();
12895
12915
  break;
12896
12916
  }
12897
- const { cmdWorkspace } = await import("./workspace-PFUW4W65.js");
12917
+ const { cmdWorkspace } = await import("./workspace-47XLOUGD.js");
12898
12918
  await cmdWorkspace(process.cwd(), args);
12899
12919
  } catch (e) {
12900
12920
  console.error(error2(e.message));
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  createProjectHealthReport,
3
3
  listWorkspaceAppCandidates
4
- } from "./chunk-SUB3F5RO.js";
4
+ } from "./chunk-U62GGKUO.js";
5
5
 
6
6
  // src/commands/workspace.ts
7
7
  import { execFileSync } from "child_process";
@@ -3,7 +3,7 @@ import {
3
3
  sendProjectHealthCiFailedTelemetry,
4
4
  sendProjectHealthPromptTelemetry,
5
5
  sendProjectHealthReportTelemetry
6
- } from "./chunk-4WT6AVKO.js";
6
+ } from "./chunk-24JR4ZNG.js";
7
7
 
8
8
  // src/commands/health.ts
9
9
  import { execFileSync as execFileSync2 } from "child_process";
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  cmdHeal,
3
3
  collectCheckIssues
4
- } from "./chunk-4WT6AVKO.js";
4
+ } from "./chunk-24JR4ZNG.js";
5
5
  export {
6
6
  cmdHeal,
7
7
  collectCheckIssues
@@ -13,8 +13,8 @@ import {
13
13
  renderProjectHealthCiWorkflow,
14
14
  shouldFailHealth,
15
15
  writeProjectHealthCiWorkflow
16
- } from "./chunk-SUB3F5RO.js";
17
- import "./chunk-4WT6AVKO.js";
16
+ } from "./chunk-U62GGKUO.js";
17
+ import "./chunk-24JR4ZNG.js";
18
18
  export {
19
19
  cmdHealth,
20
20
  collectDesignTokenEvidence,
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
- import "./chunk-KFGL6DVJ.js";
1
+ import "./chunk-4O74E2PS.js";
2
2
  import "./chunk-SIDKK73N.js";
3
- import "./chunk-FE3N5MAO.js";
4
- import "./chunk-SUB3F5RO.js";
5
- import "./chunk-4WT6AVKO.js";
3
+ import "./chunk-FIWVRMZN.js";
4
+ import "./chunk-U62GGKUO.js";
5
+ import "./chunk-24JR4ZNG.js";
@@ -1,13 +1,13 @@
1
1
  import {
2
2
  createWorkspaceHealthReport
3
- } from "./chunk-FE3N5MAO.js";
3
+ } from "./chunk-FIWVRMZN.js";
4
4
  import {
5
5
  createProjectHealthReport
6
- } from "./chunk-SUB3F5RO.js";
6
+ } from "./chunk-U62GGKUO.js";
7
7
  import {
8
8
  sendStudioHealthRefreshedTelemetry,
9
9
  sendStudioStartedTelemetry
10
- } from "./chunk-4WT6AVKO.js";
10
+ } from "./chunk-24JR4ZNG.js";
11
11
 
12
12
  // src/commands/studio.ts
13
13
  import { existsSync, readFileSync } from "fs";
@@ -7,9 +7,9 @@ import {
7
7
  listWorkspaceProjects,
8
8
  parseWorkspaceArgs,
9
9
  shouldFailWorkspaceHealth
10
- } from "./chunk-FE3N5MAO.js";
11
- import "./chunk-SUB3F5RO.js";
12
- import "./chunk-4WT6AVKO.js";
10
+ } from "./chunk-FIWVRMZN.js";
11
+ import "./chunk-U62GGKUO.js";
12
+ import "./chunk-24JR4ZNG.js";
13
13
  export {
14
14
  cmdWorkspace,
15
15
  createWorkspaceHealthReport,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@decantr/cli",
3
- "version": "3.5.3",
3
+ "version": "3.5.5",
4
4
  "description": "Decantr CLI - adopt, verify, graph, and govern frontend codebases touched by AI agents",
5
5
  "keywords": [
6
6
  "decantr",
@@ -49,11 +49,11 @@
49
49
  },
50
50
  "dependencies": {
51
51
  "ajv": "^8.20.0",
52
- "@decantr/essence-spec": "3.4.0",
53
52
  "@decantr/core": "3.5.0",
54
- "@decantr/verifier": "3.5.3",
53
+ "@decantr/essence-spec": "3.4.0",
55
54
  "@decantr/registry": "3.4.0",
56
- "@decantr/telemetry": "3.4.0"
55
+ "@decantr/telemetry": "3.4.0",
56
+ "@decantr/verifier": "3.5.5"
57
57
  },
58
58
  "scripts": {
59
59
  "build": "tsup",