@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 +4 -4
- package/dist/{chunk-4WT6AVKO.js → chunk-24JR4ZNG.js} +118 -25
- package/dist/{chunk-KFGL6DVJ.js → chunk-4O74E2PS.js} +39 -19
- package/dist/{chunk-FE3N5MAO.js → chunk-FIWVRMZN.js} +1 -1
- package/dist/{chunk-SUB3F5RO.js → chunk-U62GGKUO.js} +1 -1
- package/dist/{heal-M6V2I6DB.js → heal-2FK63EQE.js} +1 -1
- package/dist/{health-RIOSZEJP.js → health-RRIM7YAV.js} +2 -2
- package/dist/index.js +4 -4
- package/dist/{studio-7JSGAGVX.js → studio-RGXIJL3J.js} +3 -3
- package/dist/{workspace-PFUW4W65.js → workspace-47XLOUGD.js} +3 -3
- package/package.json +4 -4
package/dist/bin.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import "./chunk-
|
|
2
|
+
import "./chunk-4O74E2PS.js";
|
|
3
3
|
import "./chunk-SIDKK73N.js";
|
|
4
|
-
import "./chunk-
|
|
5
|
-
import "./chunk-
|
|
6
|
-
import "./chunk-
|
|
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(
|
|
505
|
-
|
|
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(
|
|
508
|
-
|
|
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
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
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
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
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
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
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
|
|
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(
|
|
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-
|
|
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-
|
|
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-
|
|
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"
|
|
3049
|
-
if (
|
|
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
|
|
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 =
|
|
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
|
-
|
|
6238
|
+
const files = [
|
|
6224
6239
|
join24(projectRoot, "DECANTR.md"),
|
|
6225
|
-
...walkFiles(join24(projectRoot, ".decantr", "context"))
|
|
6226
|
-
|
|
6227
|
-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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));
|
|
@@ -3,7 +3,7 @@ import {
|
|
|
3
3
|
sendProjectHealthCiFailedTelemetry,
|
|
4
4
|
sendProjectHealthPromptTelemetry,
|
|
5
5
|
sendProjectHealthReportTelemetry
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-24JR4ZNG.js";
|
|
7
7
|
|
|
8
8
|
// src/commands/health.ts
|
|
9
9
|
import { execFileSync as execFileSync2 } from "child_process";
|
|
@@ -13,8 +13,8 @@ import {
|
|
|
13
13
|
renderProjectHealthCiWorkflow,
|
|
14
14
|
shouldFailHealth,
|
|
15
15
|
writeProjectHealthCiWorkflow
|
|
16
|
-
} from "./chunk-
|
|
17
|
-
import "./chunk-
|
|
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-
|
|
1
|
+
import "./chunk-4O74E2PS.js";
|
|
2
2
|
import "./chunk-SIDKK73N.js";
|
|
3
|
-
import "./chunk-
|
|
4
|
-
import "./chunk-
|
|
5
|
-
import "./chunk-
|
|
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-
|
|
3
|
+
} from "./chunk-FIWVRMZN.js";
|
|
4
4
|
import {
|
|
5
5
|
createProjectHealthReport
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-U62GGKUO.js";
|
|
7
7
|
import {
|
|
8
8
|
sendStudioHealthRefreshedTelemetry,
|
|
9
9
|
sendStudioStartedTelemetry
|
|
10
|
-
} from "./chunk-
|
|
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-
|
|
11
|
-
import "./chunk-
|
|
12
|
-
import "./chunk-
|
|
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
|
+
"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/
|
|
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",
|