@farming-labs/docs 0.1.89 → 0.1.90
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/{agent-B-CYVd4D.mjs → agent-ByVfHy7k.mjs} +1 -1
- package/dist/cli/index.mjs +9 -9
- package/dist/{config-BR6CcCfr.mjs → config-UI31_wlO.mjs} +29 -1
- package/dist/{doctor-B8bT0Aol.mjs → doctor-Zn6h4wkZ.mjs} +15 -11
- package/dist/{mcp-RBCFEtoX.mjs → mcp-OuciCVEf.mjs} +1 -1
- package/dist/{robots-NI6VU8rj.mjs → robots-BHEIUAYm.mjs} +1 -1
- package/dist/{search-DrTVZ2XK.mjs → search-CHiEEXZI.mjs} +1 -1
- package/dist/{sitemap-CEE2vnGz.mjs → sitemap-Bk9HqW_J.mjs} +1 -1
- package/package.json +1 -1
|
@@ -5,7 +5,7 @@ import "./index.mjs";
|
|
|
5
5
|
import "./sitemap-server-DwEPfk13.mjs";
|
|
6
6
|
import { createFilesystemDocsMcpSource } from "./mcp.mjs";
|
|
7
7
|
import "./server.mjs";
|
|
8
|
-
import { a as loadProjectEnv, c as readNavTitle, d as readTopLevelStringProperty, f as resolveDocsConfigPath, i as loadDocsConfigModule, l as readNumberProperty, o as readBooleanProperty, p as resolveDocsContentDir, s as readEnvReferenceProperty, t as extractNestedObjectLiteral, u as readStringProperty } from "./config-
|
|
8
|
+
import { a as loadProjectEnv, c as readNavTitle, d as readTopLevelStringProperty, f as resolveDocsConfigPath, i as loadDocsConfigModule, l as readNumberProperty, o as readBooleanProperty, p as resolveDocsContentDir, s as readEnvReferenceProperty, t as extractNestedObjectLiteral, u as readStringProperty } from "./config-UI31_wlO.mjs";
|
|
9
9
|
import matter from "gray-matter";
|
|
10
10
|
import { existsSync, mkdirSync, readFileSync, readdirSync, statSync, writeFileSync } from "node:fs";
|
|
11
11
|
import path from "node:path";
|
package/dist/cli/index.mjs
CHANGED
|
@@ -83,10 +83,10 @@ async function main() {
|
|
|
83
83
|
const { dev } = await import("../dev-B5L7k3b6.mjs");
|
|
84
84
|
await dev(devOptions);
|
|
85
85
|
} else if (parsedCommand.command === "mcp") {
|
|
86
|
-
const { runMcp } = await import("../mcp-
|
|
86
|
+
const { runMcp } = await import("../mcp-OuciCVEf.mjs");
|
|
87
87
|
await runMcp(mcpOptions);
|
|
88
88
|
} else if (parsedCommand.command === "agent" && subcommand === "compact") {
|
|
89
|
-
const { compactAgentDocs, parseAgentCompactArgs, printAgentCompactHelp } = await import("../agent-
|
|
89
|
+
const { compactAgentDocs, parseAgentCompactArgs, printAgentCompactHelp } = await import("../agent-ByVfHy7k.mjs");
|
|
90
90
|
const agentCompactOptions = parseAgentCompactArgs(args.slice(2));
|
|
91
91
|
if (agentCompactOptions.help) {
|
|
92
92
|
printAgentCompactHelp();
|
|
@@ -96,11 +96,11 @@ async function main() {
|
|
|
96
96
|
} else if (parsedCommand.command === "agent") {
|
|
97
97
|
console.error(pc.red(`Unknown agent subcommand: ${subcommand ?? "(missing)"}`));
|
|
98
98
|
console.error();
|
|
99
|
-
const { printAgentCompactHelp } = await import("../agent-
|
|
99
|
+
const { printAgentCompactHelp } = await import("../agent-ByVfHy7k.mjs");
|
|
100
100
|
printAgentCompactHelp();
|
|
101
101
|
process.exit(1);
|
|
102
102
|
} else if (parsedCommand.command === "doctor") {
|
|
103
|
-
const { parseDoctorArgs, printDoctorHelp, runDoctor } = await import("../doctor-
|
|
103
|
+
const { parseDoctorArgs, printDoctorHelp, runDoctor } = await import("../doctor-Zn6h4wkZ.mjs");
|
|
104
104
|
const doctorOptions = parseDoctorArgs(args.slice(1));
|
|
105
105
|
if (doctorOptions.help) {
|
|
106
106
|
printDoctorHelp();
|
|
@@ -108,7 +108,7 @@ async function main() {
|
|
|
108
108
|
}
|
|
109
109
|
await runDoctor(doctorOptions);
|
|
110
110
|
} else if (parsedCommand.command === "search" && subcommand === "sync") {
|
|
111
|
-
const { syncSearch } = await import("../search-
|
|
111
|
+
const { syncSearch } = await import("../search-CHiEEXZI.mjs");
|
|
112
112
|
await syncSearch(searchSyncOptions);
|
|
113
113
|
} else if (parsedCommand.command === "search") {
|
|
114
114
|
console.error(pc.red(`Unknown search subcommand: ${subcommand ?? "(missing)"}`));
|
|
@@ -116,7 +116,7 @@ async function main() {
|
|
|
116
116
|
printHelp();
|
|
117
117
|
process.exit(1);
|
|
118
118
|
} else if (parsedCommand.command === "sitemap" && subcommand === "generate") {
|
|
119
|
-
const { generateSitemap, parseSitemapGenerateArgs, printSitemapGenerateHelp } = await import("../sitemap-
|
|
119
|
+
const { generateSitemap, parseSitemapGenerateArgs, printSitemapGenerateHelp } = await import("../sitemap-Bk9HqW_J.mjs");
|
|
120
120
|
const sitemapOptions = parseSitemapGenerateArgs(args.slice(2));
|
|
121
121
|
if (sitemapOptions.help) {
|
|
122
122
|
printSitemapGenerateHelp();
|
|
@@ -126,11 +126,11 @@ async function main() {
|
|
|
126
126
|
} else if (parsedCommand.command === "sitemap") {
|
|
127
127
|
console.error(pc.red(`Unknown sitemap subcommand: ${subcommand ?? "(missing)"}`));
|
|
128
128
|
console.error();
|
|
129
|
-
const { printSitemapGenerateHelp } = await import("../sitemap-
|
|
129
|
+
const { printSitemapGenerateHelp } = await import("../sitemap-Bk9HqW_J.mjs");
|
|
130
130
|
printSitemapGenerateHelp();
|
|
131
131
|
process.exit(1);
|
|
132
132
|
} else if (parsedCommand.command === "robots" && subcommand === "generate") {
|
|
133
|
-
const { generateRobots, parseRobotsGenerateArgs, printRobotsGenerateHelp } = await import("../robots-
|
|
133
|
+
const { generateRobots, parseRobotsGenerateArgs, printRobotsGenerateHelp } = await import("../robots-BHEIUAYm.mjs");
|
|
134
134
|
const robotsOptions = parseRobotsGenerateArgs(args.slice(2));
|
|
135
135
|
if (robotsOptions.help) {
|
|
136
136
|
printRobotsGenerateHelp();
|
|
@@ -140,7 +140,7 @@ async function main() {
|
|
|
140
140
|
} else if (parsedCommand.command === "robots") {
|
|
141
141
|
console.error(pc.red(`Unknown robots subcommand: ${subcommand ?? "(missing)"}`));
|
|
142
142
|
console.error();
|
|
143
|
-
const { printRobotsGenerateHelp } = await import("../robots-
|
|
143
|
+
const { printRobotsGenerateHelp } = await import("../robots-BHEIUAYm.mjs");
|
|
144
144
|
printRobotsGenerateHelp();
|
|
145
145
|
process.exit(1);
|
|
146
146
|
} else if (parsedCommand.command === "upgrade") {
|
|
@@ -115,6 +115,34 @@ function extractObjectLiteral(content, key) {
|
|
|
115
115
|
const braceEnd = findBalancedBraceEnd(content, braceStart);
|
|
116
116
|
return braceEnd === -1 ? void 0 : content.slice(braceStart + 1, braceEnd);
|
|
117
117
|
}
|
|
118
|
+
function stripLeadingPropertyTrivia(content) {
|
|
119
|
+
let current = content;
|
|
120
|
+
while (true) {
|
|
121
|
+
const trimmed = current.replace(/^\s+/, "");
|
|
122
|
+
if (trimmed.startsWith("//")) {
|
|
123
|
+
const lineEnd = trimmed.indexOf("\n");
|
|
124
|
+
current = lineEnd === -1 ? "" : trimmed.slice(lineEnd + 1);
|
|
125
|
+
continue;
|
|
126
|
+
}
|
|
127
|
+
if (trimmed.startsWith("/*")) {
|
|
128
|
+
const blockEnd = trimmed.indexOf("*/");
|
|
129
|
+
current = blockEnd === -1 ? trimmed : trimmed.slice(blockEnd + 2);
|
|
130
|
+
continue;
|
|
131
|
+
}
|
|
132
|
+
return trimmed;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
function extractTopLevelObjectLiteral(content, key) {
|
|
136
|
+
const propertyPattern = new RegExp(`^${escapeRegExp(key)}\\s*:\\s*\\{`);
|
|
137
|
+
for (const property of splitTopLevelProperties(content)) {
|
|
138
|
+
const normalizedProperty = stripLeadingPropertyTrivia(property);
|
|
139
|
+
if (!propertyPattern.test(normalizedProperty)) continue;
|
|
140
|
+
const braceStart = normalizedProperty.indexOf("{");
|
|
141
|
+
if (braceStart === -1) return void 0;
|
|
142
|
+
const braceEnd = findBalancedBraceEnd(normalizedProperty, braceStart);
|
|
143
|
+
return braceEnd === -1 ? void 0 : normalizedProperty.slice(braceStart + 1, braceEnd);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
118
146
|
function extractTopLevelConfigObject(content) {
|
|
119
147
|
for (const marker of ["defineDocs(", "export default"]) {
|
|
120
148
|
const markerIndex = content.indexOf(marker);
|
|
@@ -129,7 +157,7 @@ function extractNestedObjectLiteral(content, keys) {
|
|
|
129
157
|
if (keys.length === 0) return void 0;
|
|
130
158
|
let current = extractTopLevelConfigObject(content) ?? content;
|
|
131
159
|
for (const key of keys) {
|
|
132
|
-
const next =
|
|
160
|
+
const next = extractTopLevelObjectLiteral(current, key);
|
|
133
161
|
if (!next) return void 0;
|
|
134
162
|
current = next;
|
|
135
163
|
}
|
|
@@ -5,8 +5,8 @@ import { C as DEFAULT_MCP_WELL_KNOWN_ROUTE, T as DEFAULT_SKILL_MD_WELL_KNOWN_ROU
|
|
|
5
5
|
import "./sitemap-server-DwEPfk13.mjs";
|
|
6
6
|
import { createFilesystemDocsMcpSource, resolveDocsMcpConfig } from "./mcp.mjs";
|
|
7
7
|
import "./server.mjs";
|
|
8
|
-
import { a as loadProjectEnv, c as readNavTitle, d as readTopLevelStringProperty, f as resolveDocsConfigPath, i as loadDocsConfigModule, o as readBooleanProperty, p as resolveDocsContentDir, r as extractTopLevelConfigObject, t as extractNestedObjectLiteral } from "./config-
|
|
9
|
-
import { inspectAgentCompactionState, scanDocsPageTargets } from "./agent-
|
|
8
|
+
import { a as loadProjectEnv, c as readNavTitle, d as readTopLevelStringProperty, f as resolveDocsConfigPath, i as loadDocsConfigModule, o as readBooleanProperty, p as resolveDocsContentDir, r as extractTopLevelConfigObject, t as extractNestedObjectLiteral } from "./config-UI31_wlO.mjs";
|
|
9
|
+
import { inspectAgentCompactionState, scanDocsPageTargets } from "./agent-ByVfHy7k.mjs";
|
|
10
10
|
import { t as detectFramework } from "./utils-AmYxHDoz.mjs";
|
|
11
11
|
import { existsSync, lstatSync, readFileSync, readdirSync } from "node:fs";
|
|
12
12
|
import path from "node:path";
|
|
@@ -536,6 +536,12 @@ function percentageScore(score, maxScore) {
|
|
|
536
536
|
if (maxScore <= 0) return 0;
|
|
537
537
|
return Math.round(score / maxScore * 100);
|
|
538
538
|
}
|
|
539
|
+
function normalizedDoctorScore(score, maxScore) {
|
|
540
|
+
return {
|
|
541
|
+
score: percentageScore(score, maxScore),
|
|
542
|
+
maxScore: 100
|
|
543
|
+
};
|
|
544
|
+
}
|
|
539
545
|
function formatStatus(status) {
|
|
540
546
|
if (status === "pass") return pc.green("PASS");
|
|
541
547
|
if (status === "warn") return pc.yellow("WARN");
|
|
@@ -613,7 +619,7 @@ function compactionFreshnessScore(coverage, compactConfigured) {
|
|
|
613
619
|
}
|
|
614
620
|
if (coverage.unknownGeneratedPages > 0) return {
|
|
615
621
|
status: "pass",
|
|
616
|
-
score: compactConfigured ?
|
|
622
|
+
score: compactConfigured ? 5 : 3
|
|
617
623
|
};
|
|
618
624
|
if (coverage.freshGeneratedPages > 0) return {
|
|
619
625
|
status: "pass",
|
|
@@ -1092,8 +1098,7 @@ async function inspectAgentReadiness(options = {}) {
|
|
|
1092
1098
|
checks.push(makeCheck("compact", "Agent compaction freshness", compactionResult.status, compactionResult.score, 5, `${compactionCoverage.freshGeneratedPages} fresh, ${compactionCoverage.staleGeneratedPages} stale, ${compactionCoverage.modifiedGeneratedPages} modified, ${compactionCoverage.unknownGeneratedPages} unknown, ${compactionCoverage.tokenBudgetMissingPages} token-budget missing, and ${compactionCoverage.otherMissingPages} other missing page${compactionCoverage.otherMissingPages === 1 ? "" : "s"} across compactable docs pages.` + (compactConfigured ? " agent.compact defaults are configured." : " No agent.compact defaults were found in docs config."), compactionResult.recommendation));
|
|
1093
1099
|
const hosted = options.url ? await buildHostedAgentChecks(options.url, pages) : void 0;
|
|
1094
1100
|
if (hosted) checks.push(...hosted.checks);
|
|
1095
|
-
const score = checks.reduce((total, check) => total + check.score, 0);
|
|
1096
|
-
const maxScore = checks.reduce((total, check) => total + check.maxScore, 0);
|
|
1101
|
+
const { score, maxScore } = normalizedDoctorScore(checks.reduce((total, check) => total + check.score, 0), checks.reduce((total, check) => total + check.maxScore, 0));
|
|
1097
1102
|
return {
|
|
1098
1103
|
mode: "agent",
|
|
1099
1104
|
framework,
|
|
@@ -1103,7 +1108,7 @@ async function inspectAgentReadiness(options = {}) {
|
|
|
1103
1108
|
url: hosted?.baseUrl,
|
|
1104
1109
|
score,
|
|
1105
1110
|
maxScore,
|
|
1106
|
-
grade: gradeForAgentScore(
|
|
1111
|
+
grade: gradeForAgentScore(score),
|
|
1107
1112
|
checks,
|
|
1108
1113
|
coverage,
|
|
1109
1114
|
recommendations: checks.map((check) => check.recommendation).filter((recommendation) => Boolean(recommendation)).slice(0, 3)
|
|
@@ -1174,8 +1179,7 @@ async function inspectHumanReadiness(options = {}) {
|
|
|
1174
1179
|
checks.push(makeCheck("trust", "Trust signals", trustScore === 10 ? "pass" : "warn", trustScore, 10, githubEnabled && lastUpdatedEnabled ? "Edit links and last-updated metadata are configured." : githubEnabled ? "Edit links are configured, but last-updated metadata is not enabled." : lastUpdatedEnabled ? "Last-updated metadata is enabled, but edit links are not configured." : "Edit links and last-updated metadata are not configured.", trustScore === 10 ? void 0 : "Configure GitHub edit links and/or lastUpdated so readers can trust freshness and find the source of truth faster."));
|
|
1175
1180
|
checks.push(humanFeedbackEnabled ? makeCheck("feedback", "Reader feedback", "pass", 5, 5, "Built-in page feedback is enabled for the docs site.") : makeCheck("feedback", "Reader feedback", "warn", 0, 5, "Built-in page feedback is not enabled.", "Enable feedback if you want readers to leave quick page-level quality signals without opening an issue."));
|
|
1176
1181
|
checks.push(readingTimeEnabled ? makeCheck("reading-time", "Reading-time cues", "pass", 5, 5, "Reading time is configured for the docs site.") : makeCheck("reading-time", "Reading-time cues", "warn", 0, 5, "Reading time is not enabled.", "Enable readingTime if you want readers to get a quick effort estimate before they dive into longer pages."));
|
|
1177
|
-
const score = checks.reduce((total, check) => total + check.score, 0);
|
|
1178
|
-
const maxScore = checks.reduce((total, check) => total + check.maxScore, 0);
|
|
1182
|
+
const { score, maxScore } = normalizedDoctorScore(checks.reduce((total, check) => total + check.score, 0), checks.reduce((total, check) => total + check.maxScore, 0));
|
|
1179
1183
|
return {
|
|
1180
1184
|
mode: "human",
|
|
1181
1185
|
framework,
|
|
@@ -1184,7 +1188,7 @@ async function inspectHumanReadiness(options = {}) {
|
|
|
1184
1188
|
contentDir,
|
|
1185
1189
|
score,
|
|
1186
1190
|
maxScore,
|
|
1187
|
-
grade: gradeForHumanScore(
|
|
1191
|
+
grade: gradeForHumanScore(score),
|
|
1188
1192
|
checks,
|
|
1189
1193
|
coverage,
|
|
1190
1194
|
recommendations: checks.map((check) => check.recommendation).filter((recommendation) => Boolean(recommendation)).slice(0, 3)
|
|
@@ -1193,7 +1197,7 @@ async function inspectHumanReadiness(options = {}) {
|
|
|
1193
1197
|
function printAgentDoctorReport(report) {
|
|
1194
1198
|
console.log(`${pc.bold("@farming-labs/docs doctor")} ${pc.dim("—")} ${pc.bold("agent")}`);
|
|
1195
1199
|
console.log();
|
|
1196
|
-
console.log(`${pc.bold("Score:")} ${pc.cyan(`${report.score}
|
|
1200
|
+
console.log(`${pc.bold("Score:")} ${pc.cyan(`${report.score}%`)} ${pc.dim(`(${report.grade})`)}`);
|
|
1197
1201
|
console.log(`${pc.bold("Framework:")} ${report.framework} ${pc.dim("•")} ${pc.bold("Entry:")} ${report.entry ?? "docs"} ${pc.dim("•")} ${pc.bold("Content:")} ${report.contentDir ?? "-"}`);
|
|
1198
1202
|
if (report.url) console.log(`${pc.bold("Hosted URL:")} ${report.url}`);
|
|
1199
1203
|
console.log(`${pc.bold("Explicit agent-friendly pages:")} ${report.coverage.explicitPages}/${report.coverage.totalPages} pages ${pc.dim(`(${report.coverage.explicitCoverage}%)`)}`);
|
|
@@ -1214,7 +1218,7 @@ function printAgentDoctorReport(report) {
|
|
|
1214
1218
|
function printHumanDoctorReport(report) {
|
|
1215
1219
|
console.log(`${pc.bold("@farming-labs/docs doctor")} ${pc.dim("—")} ${pc.bold("site")}`);
|
|
1216
1220
|
console.log();
|
|
1217
|
-
console.log(`${pc.bold("Score:")} ${pc.cyan(`${report.score}
|
|
1221
|
+
console.log(`${pc.bold("Score:")} ${pc.cyan(`${report.score}%`)} ${pc.dim(`(${report.grade})`)}`);
|
|
1218
1222
|
console.log(`${pc.bold("Framework:")} ${report.framework} ${pc.dim("•")} ${pc.bold("Entry:")} ${report.entry ?? "docs"} ${pc.dim("•")} ${pc.bold("Content:")} ${report.contentDir ?? "-"}`);
|
|
1219
1223
|
console.log(`${pc.bold("Described pages:")} ${report.coverage.describedPages}/${report.coverage.totalPages} pages ${pc.dim(`(${report.coverage.descriptionCoverage}%)`)}`);
|
|
1220
1224
|
console.log();
|
|
@@ -2,7 +2,7 @@ import "./search-B5ze-heM.mjs";
|
|
|
2
2
|
import "./sitemap-server-DwEPfk13.mjs";
|
|
3
3
|
import { createFilesystemDocsMcpSource, resolveDocsMcpConfig, runDocsMcpStdio } from "./mcp.mjs";
|
|
4
4
|
import "./server.mjs";
|
|
5
|
-
import { c as readNavTitle, f as resolveDocsConfigPath, n as extractObjectLiteral, o as readBooleanProperty, p as resolveDocsContentDir, u as readStringProperty } from "./config-
|
|
5
|
+
import { c as readNavTitle, f as resolveDocsConfigPath, n as extractObjectLiteral, o as readBooleanProperty, p as resolveDocsContentDir, u as readStringProperty } from "./config-UI31_wlO.mjs";
|
|
6
6
|
import { readFileSync } from "node:fs";
|
|
7
7
|
|
|
8
8
|
//#region src/cli/mcp.ts
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { i as DOCS_ROBOTS_GENERATED_BLOCK_START, l as resolveDocsRobotsConfig, r as DOCS_ROBOTS_GENERATED_BLOCK_END, s as renderDocsRobotsGeneratedBlock, u as upsertDocsRobotsGeneratedBlock } from "./robots-DR-Gy1Hs.mjs";
|
|
2
|
-
import { d as readTopLevelStringProperty, f as resolveDocsConfigPath, i as loadDocsConfigModule, o as readBooleanProperty, t as extractNestedObjectLiteral, u as readStringProperty } from "./config-
|
|
2
|
+
import { d as readTopLevelStringProperty, f as resolveDocsConfigPath, i as loadDocsConfigModule, o as readBooleanProperty, t as extractNestedObjectLiteral, u as readStringProperty } from "./config-UI31_wlO.mjs";
|
|
3
3
|
import { t as detectFramework } from "./utils-AmYxHDoz.mjs";
|
|
4
4
|
import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
5
5
|
import path from "node:path";
|
|
@@ -2,7 +2,7 @@ import { n as buildDocsSearchDocuments, r as createAlgoliaSearchAdapter, s as cr
|
|
|
2
2
|
import "./sitemap-server-DwEPfk13.mjs";
|
|
3
3
|
import { createFilesystemDocsMcpSource } from "./mcp.mjs";
|
|
4
4
|
import "./server.mjs";
|
|
5
|
-
import { a as loadProjectEnv, d as readTopLevelStringProperty, f as resolveDocsConfigPath, p as resolveDocsContentDir } from "./config-
|
|
5
|
+
import { a as loadProjectEnv, d as readTopLevelStringProperty, f as resolveDocsConfigPath, p as resolveDocsContentDir } from "./config-UI31_wlO.mjs";
|
|
6
6
|
import { readFileSync } from "node:fs";
|
|
7
7
|
import pc from "picocolors";
|
|
8
8
|
|
|
@@ -3,7 +3,7 @@ import { a as buildDocsSitemapManifest, c as renderDocsSitemapMarkdown, l as ren
|
|
|
3
3
|
import "./sitemap-server-DwEPfk13.mjs";
|
|
4
4
|
import { createFilesystemDocsMcpSource } from "./mcp.mjs";
|
|
5
5
|
import "./server.mjs";
|
|
6
|
-
import { c as readNavTitle, d as readTopLevelStringProperty, f as resolveDocsConfigPath, i as loadDocsConfigModule, o as readBooleanProperty, p as resolveDocsContentDir, t as extractNestedObjectLiteral, u as readStringProperty } from "./config-
|
|
6
|
+
import { c as readNavTitle, d as readTopLevelStringProperty, f as resolveDocsConfigPath, i as loadDocsConfigModule, o as readBooleanProperty, p as resolveDocsContentDir, t as extractNestedObjectLiteral, u as readStringProperty } from "./config-UI31_wlO.mjs";
|
|
7
7
|
import { t as detectFramework } from "./utils-AmYxHDoz.mjs";
|
|
8
8
|
import { existsSync, mkdirSync, readFileSync, statSync, writeFileSync } from "node:fs";
|
|
9
9
|
import path from "node:path";
|