@farming-labs/docs 0.1.124 → 0.1.125

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.
@@ -4,6 +4,6 @@ import "./agent-BS39vnhS.mjs";
4
4
  import "./robots-B2BfoyVM.mjs";
5
5
  import "./sitemap-server-BZHoJHqC.mjs";
6
6
  import "./config-B8wA38OC.mjs";
7
- import { a as readPageTokenBudget, i as printAgentCompactHelp, n as inspectAgentCompactionState, o as scanDocsPageTargets, r as parseAgentCompactArgs, t as compactAgentDocs } from "./codeblocks-RacO12_K.mjs";
7
+ import { a as readPageTokenBudget, i as printAgentCompactHelp, n as inspectAgentCompactionState, o as scanDocsPageTargets, r as parseAgentCompactArgs, t as compactAgentDocs } from "./codeblocks-B4QzFqNC.mjs";
8
8
 
9
9
  export { compactAgentDocs, parseAgentCompactArgs, printAgentCompactHelp };
@@ -86,7 +86,7 @@ async function main() {
86
86
  const { runMcp } = await import("../mcp-BvERlrP_.mjs");
87
87
  await runMcp(mcpOptions);
88
88
  } else if (parsedCommand.command === "agent" && subcommand === "compact") {
89
- const { compactAgentDocs, parseAgentCompactArgs, printAgentCompactHelp } = await import("../agent-BtZrMCt8.mjs");
89
+ const { compactAgentDocs, parseAgentCompactArgs, printAgentCompactHelp } = await import("../agent-CBhuGaVu.mjs");
90
90
  const agentCompactOptions = parseAgentCompactArgs(args.slice(2));
91
91
  if (agentCompactOptions.help) {
92
92
  printAgentCompactHelp();
@@ -96,7 +96,7 @@ 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-BtZrMCt8.mjs");
99
+ const { printAgentCompactHelp } = await import("../agent-CBhuGaVu.mjs");
100
100
  printAgentCompactHelp();
101
101
  process.exit(1);
102
102
  } else if (parsedCommand.command === "agents" && subcommand === "generate") {
@@ -114,7 +114,7 @@ async function main() {
114
114
  printAgentsGenerateHelp();
115
115
  process.exit(1);
116
116
  } else if (parsedCommand.command === "doctor") {
117
- const { parseDoctorArgs, printDoctorHelp, runDoctor } = await import("../doctor-B0nFg8oM.mjs");
117
+ const { parseDoctorArgs, printDoctorHelp, runDoctor } = await import("../doctor-lV9lhqGA.mjs");
118
118
  const doctorOptions = parseDoctorArgs(args.slice(1));
119
119
  if (doctorOptions.help) {
120
120
  printDoctorHelp();
@@ -130,7 +130,7 @@ async function main() {
130
130
  }
131
131
  await runReview(reviewOptions);
132
132
  } else if ((parsedCommand.command === "codeblocks" || parsedCommand.command === "code-blocks") && subcommand === "validate") {
133
- const { parseCodeBlocksValidateArgs, printCodeBlocksValidateHelp, runCodeBlocksValidate } = await import("../codeblocks-RacO12_K.mjs");
133
+ const { parseCodeBlocksValidateArgs, printCodeBlocksValidateHelp, runCodeBlocksValidate } = await import("../codeblocks-B4QzFqNC.mjs");
134
134
  const codeBlocksOptions = parseCodeBlocksValidateArgs(args.slice(2));
135
135
  if (codeBlocksOptions.help) {
136
136
  printCodeBlocksValidateHelp();
@@ -140,7 +140,7 @@ async function main() {
140
140
  } else if (parsedCommand.command === "codeblocks" || parsedCommand.command === "code-blocks") {
141
141
  console.error(pc.red(`Unknown codeblocks subcommand: ${subcommand ?? "(missing)"}`));
142
142
  console.error();
143
- const { printCodeBlocksValidateHelp } = await import("../codeblocks-RacO12_K.mjs");
143
+ const { printCodeBlocksValidateHelp } = await import("../codeblocks-B4QzFqNC.mjs");
144
144
  printCodeBlocksValidateHelp();
145
145
  process.exit(1);
146
146
  } else if (parsedCommand.command === "search" && subcommand === "sync") {
@@ -614,6 +614,8 @@ function resolveDocsCodeBlocksValidateConfig(input) {
614
614
  teamIdEnv: "VERCEL_TEAM_ID",
615
615
  projectJson: ".vercel/project.json",
616
616
  runtime: "node24",
617
+ apiUrlEnv: "DAYTONA_API_URL",
618
+ targetEnv: "DAYTONA_TARGET",
617
619
  timeoutMs: DEFAULT_COMMAND_TIMEOUT_MS
618
620
  },
619
621
  envFile: DEFAULT_ENV_FILES,
@@ -724,7 +726,7 @@ async function validateCodeBlockPlans(input) {
724
726
  const skippedOrFailed = preflight.filter((result) => result.status === "SKIP" || result.reason);
725
727
  const plansToRun = runnable.map((result) => result.plan);
726
728
  if (plansToRun.length === 0) return skippedOrFailed;
727
- const runResults = input.config.runner.provider === "vercel-sandbox" ? await runPlansInVercelSandbox(plansToRun, input.rootDir, input.config, validationEnv.env) : await runPlansLocally(plansToRun, input.config, validationEnv.env);
729
+ const runResults = await runPlansWithConfiguredRunner(plansToRun, input.rootDir, input.config, validationEnv.env);
728
730
  return [...skippedOrFailed, ...runResults].sort((a, b) => a.id.localeCompare(b.id));
729
731
  }
730
732
  async function validateCodeBlocks(input) {
@@ -775,16 +777,24 @@ function normalizePlannerConfig(input) {
775
777
  }
776
778
  function normalizeRunnerConfig(input) {
777
779
  const config = typeof input === "string" ? { provider: input } : input ?? {};
780
+ const provider = config.provider ?? "local";
778
781
  return {
779
- provider: config.provider ?? "local",
780
- tokenEnv: config.tokenEnv ?? "VERCEL_TOKEN",
782
+ provider,
783
+ tokenEnv: config.tokenEnv ?? defaultRunnerTokenEnv(provider),
781
784
  projectIdEnv: config.projectIdEnv ?? "VERCEL_PROJECT_ID",
782
785
  teamIdEnv: config.teamIdEnv ?? "VERCEL_TEAM_ID",
783
786
  projectJson: config.projectJson === void 0 ? ".vercel/project.json" : config.projectJson,
784
787
  runtime: config.runtime ?? "node24",
788
+ apiUrlEnv: config.apiUrlEnv ?? "DAYTONA_API_URL",
789
+ targetEnv: config.targetEnv ?? "DAYTONA_TARGET",
785
790
  timeoutMs: config.timeoutMs ?? DEFAULT_COMMAND_TIMEOUT_MS
786
791
  };
787
792
  }
793
+ function defaultRunnerTokenEnv(provider) {
794
+ if (provider === "e2b") return "E2B_API_KEY";
795
+ if (provider === "daytona") return "DAYTONA_API_KEY";
796
+ return "VERCEL_TOKEN";
797
+ }
788
798
  function buildMetadataExecutionPlan(target, config) {
789
799
  const language = normalizeLanguage(target.language);
790
800
  const template = target.framework ?? templateFromLanguage(language);
@@ -1029,6 +1039,15 @@ async function runPlansLocally(plans, config, env) {
1029
1039
  });
1030
1040
  }
1031
1041
  }
1042
+ async function runPlansWithConfiguredRunner(plans, rootDir, config, env) {
1043
+ switch (config.runner.provider) {
1044
+ case "local": return runPlansLocally(plans, config, env);
1045
+ case "vercel-sandbox": return runPlansInVercelSandbox(plans, rootDir, config, env);
1046
+ case "e2b": return runPlansInE2B(plans, config, env);
1047
+ case "daytona": return runPlansInDaytona(plans, config, env);
1048
+ case "cloud": return plans.map((plan) => skippedResult(plan, "cloud runner is not available in this package yet"));
1049
+ }
1050
+ }
1032
1051
  async function runPlansInVercelSandbox(plans, rootDir, config, env) {
1033
1052
  const credentials = await resolveVercelSandboxCredentials(rootDir, config);
1034
1053
  if (credentials.missing.length > 0) return plans.map((plan) => skippedResult(plan, `missing ${credentials.missing.join(", ")}`));
@@ -1075,6 +1094,79 @@ async function runPlansInVercelSandbox(plans, rootDir, config, env) {
1075
1094
  return plans.map((plan) => skippedResult(plan, `vercel-sandbox unavailable: ${message}`));
1076
1095
  }
1077
1096
  }
1097
+ async function runPlansInE2B(plans, config, env) {
1098
+ const token = process.env[config.runner.tokenEnv];
1099
+ if (!token) return plans.map((plan) => skippedResult(plan, `missing ${config.runner.tokenEnv}`));
1100
+ const module = await importOptionalModule("e2b");
1101
+ if (!module) return plans.map((plan) => skippedResult(plan, "e2b unavailable: install the \"e2b\" package"));
1102
+ try {
1103
+ const E2BSandbox = readProviderExport(module, "default") ?? readProviderExport(module, "Sandbox");
1104
+ if (!hasCreateMethod(E2BSandbox)) return plans.map((plan) => skippedResult(plan, "e2b unavailable: missing Sandbox.create"));
1105
+ const sandbox = await withTemporaryEnv("E2B_API_KEY", token, () => E2BSandbox.create());
1106
+ try {
1107
+ return await Promise.all(plans.map(async (plan) => {
1108
+ if (!plan.command || !plan.filePath) return skippedResult(plan, "no executable command in plan");
1109
+ const command = buildSandboxShellCommand(plan);
1110
+ const runner = readObject(sandbox).commands;
1111
+ if (!hasRunMethod(runner)) return skippedResult(plan, "e2b unavailable: missing commands.run");
1112
+ try {
1113
+ return sandboxCommandResult(plan, await runner.run(command, {
1114
+ envs: env,
1115
+ timeoutMs: config.runner.timeoutMs
1116
+ }));
1117
+ } catch (error) {
1118
+ return failedSandboxResult(plan, error);
1119
+ }
1120
+ }));
1121
+ } finally {
1122
+ await cleanupProviderSandbox(sandbox);
1123
+ }
1124
+ } catch (error) {
1125
+ const message = error instanceof Error ? error.message : String(error);
1126
+ return plans.map((plan) => skippedResult(plan, `e2b unavailable: ${message}`));
1127
+ }
1128
+ }
1129
+ async function runPlansInDaytona(plans, config, env) {
1130
+ const token = process.env[config.runner.tokenEnv];
1131
+ if (!token) return plans.map((plan) => skippedResult(plan, `missing ${config.runner.tokenEnv}`));
1132
+ const module = await importOptionalModule("@daytona/sdk");
1133
+ if (!module) return plans.map((plan) => skippedResult(plan, "daytona unavailable: install the \"@daytona/sdk\" package"));
1134
+ try {
1135
+ const Daytona = readProviderExport(module, "Daytona");
1136
+ if (!hasConstructor(Daytona)) return plans.map((plan) => skippedResult(plan, "daytona unavailable: missing Daytona SDK"));
1137
+ const apiUrl = process.env[config.runner.apiUrlEnv];
1138
+ const target = process.env[config.runner.targetEnv];
1139
+ const daytona = new Daytona({
1140
+ apiKey: token,
1141
+ ...apiUrl ? { apiUrl } : {},
1142
+ ...target ? { target } : {}
1143
+ });
1144
+ if (!hasCreateMethod(daytona)) return plans.map((plan) => skippedResult(plan, "daytona unavailable: missing create"));
1145
+ const sandbox = await daytona.create({
1146
+ ephemeral: true,
1147
+ language: "typescript",
1148
+ ...Object.keys(env).length > 0 ? { envVars: env } : {}
1149
+ });
1150
+ try {
1151
+ return await Promise.all(plans.map(async (plan) => {
1152
+ if (!plan.command || !plan.filePath) return skippedResult(plan, "no executable command in plan");
1153
+ const processApi = readObject(sandbox).process;
1154
+ if (!hasExecuteCommandMethod(processApi)) return skippedResult(plan, "daytona unavailable: missing process.executeCommand");
1155
+ try {
1156
+ return sandboxCommandResult(plan, await processApi.executeCommand(buildSandboxShellCommand(plan)));
1157
+ } catch (error) {
1158
+ return failedSandboxResult(plan, error);
1159
+ }
1160
+ }));
1161
+ } finally {
1162
+ await cleanupProviderSandbox(sandbox);
1163
+ await cleanupProviderSandbox(daytona);
1164
+ }
1165
+ } catch (error) {
1166
+ const message = error instanceof Error ? error.message : String(error);
1167
+ return plans.map((plan) => skippedResult(plan, `daytona unavailable: ${message}`));
1168
+ }
1169
+ }
1078
1170
  async function resolveVercelSandboxCredentials(rootDir, config) {
1079
1171
  const projectJson = readVercelProjectJson(rootDir, config.runner.projectJson);
1080
1172
  const token = process.env[config.runner.tokenEnv];
@@ -1120,6 +1212,122 @@ function readVercelProjectJson(rootDir, projectJson) {
1120
1212
  return;
1121
1213
  }
1122
1214
  }
1215
+ async function importOptionalModule(specifier) {
1216
+ const importer = globalThis.__DOCS_CODE_BLOCKS_MODULE_IMPORTER__ ?? ((id) => import(id));
1217
+ try {
1218
+ return await importer(specifier);
1219
+ } catch {
1220
+ return;
1221
+ }
1222
+ }
1223
+ function buildSandboxShellCommand(plan) {
1224
+ const command = plan.command;
1225
+ const filePath = plan.filePath;
1226
+ if (!command || !filePath) return "";
1227
+ const sandboxDir = "/tmp/docs-codeblocks";
1228
+ const writeFileCommand = [
1229
+ "printf",
1230
+ "%s",
1231
+ Buffer.from(plan.target.code, "utf-8").toString("base64"),
1232
+ "|",
1233
+ "base64",
1234
+ "-d",
1235
+ ">",
1236
+ filePath
1237
+ ].map((part) => part === "|" || part === ">" ? part : shellEscape(part)).join(" ");
1238
+ return [
1239
+ `mkdir -p ${shellEscape(sandboxDir)}`,
1240
+ `cd ${shellEscape(sandboxDir)}`,
1241
+ writeFileCommand,
1242
+ shellJoin([command.cmd, ...command.args])
1243
+ ].join(" && ");
1244
+ }
1245
+ function shellJoin(parts) {
1246
+ return parts.map(shellEscape).join(" ");
1247
+ }
1248
+ function shellEscape(value) {
1249
+ return `'${value.replace(/'/g, "'\\''")}'`;
1250
+ }
1251
+ async function withTemporaryEnv(key, value, callback) {
1252
+ const previous = process.env[key];
1253
+ process.env[key] = value;
1254
+ try {
1255
+ return await callback();
1256
+ } finally {
1257
+ if (previous === void 0) delete process.env[key];
1258
+ else process.env[key] = previous;
1259
+ }
1260
+ }
1261
+ function sandboxCommandResult(plan, result) {
1262
+ const record = readObject(result);
1263
+ const error = readStringValue(record.error);
1264
+ const exitCode = readNumberValue(record.exitCode) ?? readNumberValue(record.code) ?? readNumberValue(record.exit_code) ?? (error ? 1 : 0);
1265
+ const stdout = readStringValue(record.stdout) ?? readStringValue(record.result) ?? readStringValue(record.text) ?? "";
1266
+ const stderr = readStringValue(record.stderr) ?? error ?? "";
1267
+ return {
1268
+ id: plan.id,
1269
+ target: plan.target,
1270
+ plan,
1271
+ status: exitCode === 0 ? "PASS" : "FAIL",
1272
+ stdout,
1273
+ stderr,
1274
+ exitCode,
1275
+ reason: exitCode === 0 ? void 0 : `exit code ${exitCode}`
1276
+ };
1277
+ }
1278
+ function failedSandboxResult(plan, error) {
1279
+ const record = readObject(error);
1280
+ return {
1281
+ id: plan.id,
1282
+ target: plan.target,
1283
+ plan,
1284
+ status: "FAIL",
1285
+ stdout: readStringValue(record.stdout),
1286
+ stderr: readStringValue(record.stderr),
1287
+ exitCode: readNumberValue(record.exitCode) ?? readNumberValue(record.code) ?? null,
1288
+ reason: error instanceof Error ? error.message : String(error)
1289
+ };
1290
+ }
1291
+ async function cleanupProviderSandbox(value) {
1292
+ const record = readObject(value);
1293
+ for (const methodName of [
1294
+ "kill",
1295
+ "close",
1296
+ "stop",
1297
+ "delete",
1298
+ "remove",
1299
+ "destroy"
1300
+ ]) {
1301
+ const method = record[methodName];
1302
+ if (typeof method !== "function") continue;
1303
+ await Promise.resolve(method.call(value)).catch(() => {});
1304
+ return;
1305
+ }
1306
+ }
1307
+ function readProviderExport(module, name) {
1308
+ return readObject(module)[name];
1309
+ }
1310
+ function readObject(value) {
1311
+ return value !== null && (typeof value === "object" || typeof value === "function") ? value : {};
1312
+ }
1313
+ function readStringValue(value) {
1314
+ return typeof value === "string" ? value : void 0;
1315
+ }
1316
+ function readNumberValue(value) {
1317
+ return typeof value === "number" ? value : void 0;
1318
+ }
1319
+ function hasCreateMethod(value) {
1320
+ return typeof readObject(value).create === "function";
1321
+ }
1322
+ function hasRunMethod(value) {
1323
+ return typeof readObject(value).run === "function";
1324
+ }
1325
+ function hasExecuteCommandMethod(value) {
1326
+ return typeof readObject(value).executeCommand === "function";
1327
+ }
1328
+ function hasConstructor(value) {
1329
+ return typeof value === "function";
1330
+ }
1123
1331
  function loadValidationEnv(rootDir, config) {
1124
1332
  const fileEnv = {};
1125
1333
  for (const file of config.envFile) {
@@ -1420,8 +1628,10 @@ function readStaticRunnerConfig(block) {
1420
1628
  const teamIdEnv = readStringProperty(block, "teamIdEnv");
1421
1629
  const projectJson = readStringProperty(block, "projectJson");
1422
1630
  const runtime = readStringProperty(block, "runtime");
1631
+ const apiUrlEnv = readStringProperty(block, "apiUrlEnv");
1632
+ const targetEnv = readStringProperty(block, "targetEnv");
1423
1633
  const timeoutMs = readNumberProperty(block, "timeoutMs");
1424
- if (provider !== "local" && provider !== "vercel-sandbox" && provider !== "cloud") return;
1634
+ if (provider !== "local" && provider !== "vercel-sandbox" && provider !== "e2b" && provider !== "daytona" && provider !== "cloud") return;
1425
1635
  return {
1426
1636
  provider,
1427
1637
  ...tokenEnv ? { tokenEnv } : {},
@@ -1429,6 +1639,8 @@ function readStaticRunnerConfig(block) {
1429
1639
  ...teamIdEnv ? { teamIdEnv } : {},
1430
1640
  ...projectJson ? { projectJson } : {},
1431
1641
  ...runtime === "node24" || runtime === "node22" || runtime === "python3.13" ? { runtime } : {},
1642
+ ...apiUrlEnv ? { apiUrlEnv } : {},
1643
+ ...targetEnv ? { targetEnv } : {},
1432
1644
  ...timeoutMs !== void 0 ? { timeoutMs } : {}
1433
1645
  };
1434
1646
  }
@@ -8,7 +8,7 @@ import { createFilesystemDocsMcpSource, resolveDocsMcpConfig } from "./mcp.mjs";
8
8
  import "./server.mjs";
9
9
  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-B8wA38OC.mjs";
10
10
  import { t as detectFramework } from "./utils-x5EtYWjC.mjs";
11
- import { n as inspectAgentCompactionState, o as scanDocsPageTargets } from "./codeblocks-RacO12_K.mjs";
11
+ import { n as inspectAgentCompactionState, o as scanDocsPageTargets } from "./codeblocks-B4QzFqNC.mjs";
12
12
  import { existsSync, lstatSync, readFileSync, readdirSync } from "node:fs";
13
13
  import path from "node:path";
14
14
  import { LATEST_PROTOCOL_VERSION } from "@modelcontextprotocol/sdk/types.js";
package/dist/index.d.mts CHANGED
@@ -1,5 +1,5 @@
1
- import { $ as DocsReviewRulesConfig, A as DocsCodeBlocksConfig, At as OpenDocsProviderId, B as DocsFeedbackValue, Bt as ResolvedDocsRelatedLink, C as DocsAskAIActionData, Ct as LlmsTxtMaxCharsMode, D as DocsAskAIFeedbackMessage, Dt as OpenDocsConfig, E as DocsAskAIFeedbackData, Et as OGConfig, F as DocsCodeBlocksValidateConfig, Ft as PageFrontmatter, G as DocsNav, Gt as SidebarNode, H as DocsMcpConfig, Ht as SidebarConfig, I as DocsCodeBlocksValidationMode, It as PageOpenGraph, J as DocsObservabilityEventInput, Jt as SimpleDocsSearchConfig, K as DocsObservabilityConfig, Kt as SidebarPageNode, L as DocsCodeBlocksValidationPolicy, Lt as PageSidebarFrontmatter, M as DocsCodeBlocksPlannerProvider, Mt as OpenGraphImage, N as DocsCodeBlocksRunnerConfig, Nt as OrderingItem, O as DocsAskAIFeedbackValue, Ot as OpenDocsProvider, P as DocsCodeBlocksRunnerProvider, Pt as PageActionsConfig, Q as DocsReviewConfig, Qt as UIConfig, R as DocsConfig, Rt as PageTwitter, S as DocsAnalyticsSource, St as LlmsTxtMaxCharsConfig, T as DocsAskAIFeedbackConfig, Tt as McpDocsSearchConfig, U as DocsMcpToolsConfig, Ut as SidebarFolderIndexBehavior, V as DocsI18nConfig, Vt as SidebarComponentProps, W as DocsMetadata, Wt as SidebarFolderNode, X as DocsReviewCiConfig, Xt as TypesenseDocsSearchConfig, Y as DocsRelatedItem, Yt as ThemeToggleConfig, Z as DocsReviewCiMode, Zt as TypographyConfig, _ as DocsAnalyticsConfig, _t as FeedbackConfig, a as ApiReferenceRenderer, at as DocsSearchAdapterContext, b as DocsAnalyticsEventType, bt as LastUpdatedConfig, c as ChangelogFrontmatter, ct as DocsSearchConfig, d as CustomDocsSearchConfig, dt as DocsSearchQuery, et as DocsReviewScoreConfig, f as DocsAgentFeedbackContext, ft as DocsSearchResult, g as DocsAgentTraceStatus, gt as DocsTheme, h as DocsAgentTraceEventType, ht as DocsSitemapConfig, i as ApiReferenceConfig, it as DocsSearchAdapter, j as DocsCodeBlocksPlannerConfig, jt as OpenDocsTarget, k as DocsAskAIMcpConfig, kt as OpenDocsProviderConfig, l as CodeBlockCopyData, lt as DocsSearchDocument, m as DocsAgentTraceEventInput, mt as DocsSearchSourcePage, n as AgentFeedbackConfig, nt as DocsRobotsConfig, o as BreadcrumbConfig, ot as DocsSearchAdapterFactory, p as DocsAgentFeedbackData, pt as DocsSearchResultType, q as DocsObservabilityEvent, qt as SidebarTree, r as AlgoliaDocsSearchConfig, rt as DocsRobotsRule, s as ChangelogConfig, st as DocsSearchChunkingConfig, t as AIConfig, tt as DocsReviewSeverity, u as CopyMarkdownConfig, ut as DocsSearchEmbeddingsConfig, v as DocsAnalyticsEvent, vt as FontStyle, w as DocsAskAIActionType, wt as LlmsTxtSectionConfig, x as DocsAnalyticsInput, xt as LlmsTxtConfig, y as DocsAnalyticsEventInput, yt as GithubConfig, z as DocsFeedbackData, zt as ReadingTimeConfig } from "./types-hDUu4K7W.mjs";
2
- import { $ as createDocsAgentTraceId, A as resolveDocsSitemapRequest, C as buildDocsSitemapManifest, D as renderDocsSitemapXml, E as renderDocsSitemapMarkdown, I as PromptAction, J as DOCS_AGENT_TRACE_EVENT_TYPES, L as PromptProviderChoice, O as resolveDocsSitemapConfig, Q as createDocsAgentTraceContext, R as SerializeOpenDocsProviderOptions, S as DocsSitemapResolvedConfig, T as readDocsSitemapManifestFromContentMap, X as ResolvedDocsAnalyticsConfig, Y as DocsAgentTraceContext, Z as ResolvedDocsObservabilityConfig, _ as DEFAULT_SITEMAP_XML_ROUTE, a as createMcpSearchAdapter, at as DocsCloudAnalyticsOptions, b as DocsSitemapManifestPage, c as formatDocsAskAIPackageHints, d as resolveAskAISearchRequestConfig, et as emitDocsAgentTraceEvent, f as resolveSearchRequestConfig, g as DEFAULT_SITEMAP_MD_WELL_KNOWN_ROUTE, h as DEFAULT_SITEMAP_MD_ROUTE, i as createCustomSearchAdapter, it as resolveDocsObservabilityConfig, j as toDocsSitemapMarkdownUrl, k as resolveDocsSitemapPageLastmod, l as inferDocsAskAIPackageHints, m as DEFAULT_SITEMAP_MD_DOCS_ROUTE, n as buildDocsSearchDocuments, nt as emitDocsObservabilityEvent, o as createSimpleSearchAdapter, ot as createDocsCloudAnalytics, p as DEFAULT_SITEMAP_MANIFEST_PATH, r as createAlgoliaSearchAdapter, rt as resolveDocsAnalyticsConfig, s as createTypesenseSearchAdapter, t as buildDocsAskAIContext, tt as emitDocsAnalyticsEvent, u as performDocsSearch, v as DocsSitemapFormat, w as createDocsSitemapResponse, x as DocsSitemapPageInput, y as DocsSitemapManifest, z as SerializedOpenDocsProvider } from "./search-mF8wT9LQ.mjs";
1
+ import { $ as DocsReviewRulesConfig, A as DocsCodeBlocksConfig, At as OpenDocsProviderId, B as DocsFeedbackValue, Bt as ResolvedDocsRelatedLink, C as DocsAskAIActionData, Ct as LlmsTxtMaxCharsMode, D as DocsAskAIFeedbackMessage, Dt as OpenDocsConfig, E as DocsAskAIFeedbackData, Et as OGConfig, F as DocsCodeBlocksValidateConfig, Ft as PageFrontmatter, G as DocsNav, Gt as SidebarNode, H as DocsMcpConfig, Ht as SidebarConfig, I as DocsCodeBlocksValidationMode, It as PageOpenGraph, J as DocsObservabilityEventInput, Jt as SimpleDocsSearchConfig, K as DocsObservabilityConfig, Kt as SidebarPageNode, L as DocsCodeBlocksValidationPolicy, Lt as PageSidebarFrontmatter, M as DocsCodeBlocksPlannerProvider, Mt as OpenGraphImage, N as DocsCodeBlocksRunnerConfig, Nt as OrderingItem, O as DocsAskAIFeedbackValue, Ot as OpenDocsProvider, P as DocsCodeBlocksRunnerProvider, Pt as PageActionsConfig, Q as DocsReviewConfig, Qt as UIConfig, R as DocsConfig, Rt as PageTwitter, S as DocsAnalyticsSource, St as LlmsTxtMaxCharsConfig, T as DocsAskAIFeedbackConfig, Tt as McpDocsSearchConfig, U as DocsMcpToolsConfig, Ut as SidebarFolderIndexBehavior, V as DocsI18nConfig, Vt as SidebarComponentProps, W as DocsMetadata, Wt as SidebarFolderNode, X as DocsReviewCiConfig, Xt as TypesenseDocsSearchConfig, Y as DocsRelatedItem, Yt as ThemeToggleConfig, Z as DocsReviewCiMode, Zt as TypographyConfig, _ as DocsAnalyticsConfig, _t as FeedbackConfig, a as ApiReferenceRenderer, at as DocsSearchAdapterContext, b as DocsAnalyticsEventType, bt as LastUpdatedConfig, c as ChangelogFrontmatter, ct as DocsSearchConfig, d as CustomDocsSearchConfig, dt as DocsSearchQuery, et as DocsReviewScoreConfig, f as DocsAgentFeedbackContext, ft as DocsSearchResult, g as DocsAgentTraceStatus, gt as DocsTheme, h as DocsAgentTraceEventType, ht as DocsSitemapConfig, i as ApiReferenceConfig, it as DocsSearchAdapter, j as DocsCodeBlocksPlannerConfig, jt as OpenDocsTarget, k as DocsAskAIMcpConfig, kt as OpenDocsProviderConfig, l as CodeBlockCopyData, lt as DocsSearchDocument, m as DocsAgentTraceEventInput, mt as DocsSearchSourcePage, n as AgentFeedbackConfig, nt as DocsRobotsConfig, o as BreadcrumbConfig, ot as DocsSearchAdapterFactory, p as DocsAgentFeedbackData, pt as DocsSearchResultType, q as DocsObservabilityEvent, qt as SidebarTree, r as AlgoliaDocsSearchConfig, rt as DocsRobotsRule, s as ChangelogConfig, st as DocsSearchChunkingConfig, t as AIConfig, tt as DocsReviewSeverity, u as CopyMarkdownConfig, ut as DocsSearchEmbeddingsConfig, v as DocsAnalyticsEvent, vt as FontStyle, w as DocsAskAIActionType, wt as LlmsTxtSectionConfig, x as DocsAnalyticsInput, xt as LlmsTxtConfig, y as DocsAnalyticsEventInput, yt as GithubConfig, z as DocsFeedbackData, zt as ReadingTimeConfig } from "./types-Dg82p0Fm.mjs";
2
+ import { $ as createDocsAgentTraceId, A as resolveDocsSitemapRequest, C as buildDocsSitemapManifest, D as renderDocsSitemapXml, E as renderDocsSitemapMarkdown, I as PromptAction, J as DOCS_AGENT_TRACE_EVENT_TYPES, L as PromptProviderChoice, O as resolveDocsSitemapConfig, Q as createDocsAgentTraceContext, R as SerializeOpenDocsProviderOptions, S as DocsSitemapResolvedConfig, T as readDocsSitemapManifestFromContentMap, X as ResolvedDocsAnalyticsConfig, Y as DocsAgentTraceContext, Z as ResolvedDocsObservabilityConfig, _ as DEFAULT_SITEMAP_XML_ROUTE, a as createMcpSearchAdapter, at as DocsCloudAnalyticsOptions, b as DocsSitemapManifestPage, c as formatDocsAskAIPackageHints, d as resolveAskAISearchRequestConfig, et as emitDocsAgentTraceEvent, f as resolveSearchRequestConfig, g as DEFAULT_SITEMAP_MD_WELL_KNOWN_ROUTE, h as DEFAULT_SITEMAP_MD_ROUTE, i as createCustomSearchAdapter, it as resolveDocsObservabilityConfig, j as toDocsSitemapMarkdownUrl, k as resolveDocsSitemapPageLastmod, l as inferDocsAskAIPackageHints, m as DEFAULT_SITEMAP_MD_DOCS_ROUTE, n as buildDocsSearchDocuments, nt as emitDocsObservabilityEvent, o as createSimpleSearchAdapter, ot as createDocsCloudAnalytics, p as DEFAULT_SITEMAP_MANIFEST_PATH, r as createAlgoliaSearchAdapter, rt as resolveDocsAnalyticsConfig, s as createTypesenseSearchAdapter, t as buildDocsAskAIContext, tt as emitDocsAnalyticsEvent, u as performDocsSearch, v as DocsSitemapFormat, w as createDocsSitemapResponse, x as DocsSitemapPageInput, y as DocsSitemapManifest, z as SerializedOpenDocsProvider } from "./search-G0otDMfP.mjs";
3
3
  import { DocsMcpPage, DocsMcpResolvedConfig } from "./mcp.mjs";
4
4
 
5
5
  //#region src/define-docs.d.ts
package/dist/mcp.d.mts CHANGED
@@ -1,4 +1,4 @@
1
- import { H as DocsMcpConfig, K as DocsObservabilityConfig, Nt as OrderingItem, _ as DocsAnalyticsConfig, ct as DocsSearchConfig, mt as DocsSearchSourcePage } from "./types-hDUu4K7W.mjs";
1
+ import { H as DocsMcpConfig, K as DocsObservabilityConfig, Nt as OrderingItem, _ as DocsAnalyticsConfig, ct as DocsSearchConfig, mt as DocsSearchSourcePage } from "./types-Dg82p0Fm.mjs";
2
2
  import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
3
3
 
4
4
  //#region src/mcp.d.ts
package/dist/mcp.mjs CHANGED
@@ -394,9 +394,9 @@ const DOCS_CONFIG_SCHEMA_OPTIONS = [
394
394
  {
395
395
  path: "codeBlocks.validate.runner",
396
396
  name: "runner",
397
- type: "\"local\" | \"vercel-sandbox\" | \"cloud\" | DocsCodeBlocksRunnerConfig",
397
+ type: "\"local\" | \"vercel-sandbox\" | \"e2b\" | \"daytona\" | \"cloud\" | DocsCodeBlocksRunnerConfig",
398
398
  default: "local",
399
- description: "Runner used to execute planned snippets. The Vercel Sandbox runner can work from `VERCEL_TOKEN` alone by auto-discovering an accessible project."
399
+ description: "Runner used to execute planned snippets. Vercel Sandbox, E2B, and Daytona use provider tokens from env vars."
400
400
  },
401
401
  {
402
402
  path: "codeBlocks.validate.env",
@@ -1,4 +1,4 @@
1
- import { Bt as ResolvedDocsRelatedLink, J as DocsObservabilityEventInput, K as DocsObservabilityConfig, Ot as OpenDocsProvider, Tt as McpDocsSearchConfig, Xt as TypesenseDocsSearchConfig, _ as DocsAnalyticsConfig, ct as DocsSearchConfig, d as CustomDocsSearchConfig, ft as DocsSearchResult, ht as DocsSitemapConfig, it as DocsSearchAdapter, jt as OpenDocsTarget, k as DocsAskAIMcpConfig, lt as DocsSearchDocument, m as DocsAgentTraceEventInput, mt as DocsSearchSourcePage, ot as DocsSearchAdapterFactory, q as DocsObservabilityEvent, r as AlgoliaDocsSearchConfig, st as DocsSearchChunkingConfig, v as DocsAnalyticsEvent, y as DocsAnalyticsEventInput } from "./types-hDUu4K7W.mjs";
1
+ import { Bt as ResolvedDocsRelatedLink, J as DocsObservabilityEventInput, K as DocsObservabilityConfig, Ot as OpenDocsProvider, Tt as McpDocsSearchConfig, Xt as TypesenseDocsSearchConfig, _ as DocsAnalyticsConfig, ct as DocsSearchConfig, d as CustomDocsSearchConfig, ft as DocsSearchResult, ht as DocsSitemapConfig, it as DocsSearchAdapter, jt as OpenDocsTarget, k as DocsAskAIMcpConfig, lt as DocsSearchDocument, m as DocsAgentTraceEventInput, mt as DocsSearchSourcePage, ot as DocsSearchAdapterFactory, q as DocsObservabilityEvent, r as AlgoliaDocsSearchConfig, st as DocsSearchChunkingConfig, v as DocsAnalyticsEvent, y as DocsAnalyticsEventInput } from "./types-Dg82p0Fm.mjs";
2
2
 
3
3
  //#region src/cloud-analytics.d.ts
4
4
  interface DocsCloudAnalyticsOptions {
package/dist/server.d.mts CHANGED
@@ -1,5 +1,5 @@
1
- import { $ as DocsReviewRulesConfig, D as DocsAskAIFeedbackMessage, E as DocsAskAIFeedbackData, J as DocsObservabilityEventInput, K as DocsObservabilityConfig, O as DocsAskAIFeedbackValue, Q as DocsReviewConfig, R as DocsConfig, T as DocsAskAIFeedbackConfig, Tt as McpDocsSearchConfig, Z as DocsReviewCiMode, _ as DocsAnalyticsConfig, a as ApiReferenceRenderer, at as DocsSearchAdapterContext, ct as DocsSearchConfig, dt as DocsSearchQuery, ft as DocsSearchResult, g as DocsAgentTraceStatus, h as DocsAgentTraceEventType, ht as DocsSitemapConfig, it as DocsSearchAdapter, k as DocsAskAIMcpConfig, lt as DocsSearchDocument, m as DocsAgentTraceEventInput, mt as DocsSearchSourcePage, ot as DocsSearchAdapterFactory, q as DocsObservabilityEvent, v as DocsAnalyticsEvent, y as DocsAnalyticsEventInput } from "./types-hDUu4K7W.mjs";
2
- import { $ as createDocsAgentTraceId, A as resolveDocsSitemapRequest, B as normalizePromptProviderName, C as buildDocsSitemapManifest, D as renderDocsSitemapXml, E as renderDocsSitemapMarkdown, F as DEFAULT_PROMPT_PROVIDER_TEMPLATES, G as serializeDocsIconRegistry, H as resolvePromptProviderChoices, I as PromptAction, J as DOCS_AGENT_TRACE_EVENT_TYPES, K as serializeOpenDocsProvider, L as PromptProviderChoice, M as DEFAULT_OPEN_DOCS_PROMPT, N as DEFAULT_OPEN_DOCS_PROVIDER_IDS, O as resolveDocsSitemapConfig, P as DEFAULT_OPEN_DOCS_TARGET, Q as createDocsAgentTraceContext, R as SerializeOpenDocsProviderOptions, S as DocsSitemapResolvedConfig, T as readDocsSitemapManifestFromContentMap, U as sanitizePromptText, V as parsePromptStringArray, W as serializeDocsIcon, X as ResolvedDocsAnalyticsConfig, Y as DocsAgentTraceContext, Z as ResolvedDocsObservabilityConfig, _ as DEFAULT_SITEMAP_XML_ROUTE, a as createMcpSearchAdapter, at as DocsCloudAnalyticsOptions, b as DocsSitemapManifestPage, c as formatDocsAskAIPackageHints, d as resolveAskAISearchRequestConfig, et as emitDocsAgentTraceEvent, f as resolveSearchRequestConfig, g as DEFAULT_SITEMAP_MD_WELL_KNOWN_ROUTE, h as DEFAULT_SITEMAP_MD_ROUTE, i as createCustomSearchAdapter, it as resolveDocsObservabilityConfig, j as toDocsSitemapMarkdownUrl, k as resolveDocsSitemapPageLastmod, l as inferDocsAskAIPackageHints, m as DEFAULT_SITEMAP_MD_DOCS_ROUTE, n as buildDocsSearchDocuments, nt as emitDocsObservabilityEvent, o as createSimpleSearchAdapter, ot as createDocsCloudAnalytics, p as DEFAULT_SITEMAP_MANIFEST_PATH, q as serializeOpenDocsProviders, r as createAlgoliaSearchAdapter, rt as resolveDocsAnalyticsConfig, s as createTypesenseSearchAdapter, t as buildDocsAskAIContext, tt as emitDocsAnalyticsEvent, u as performDocsSearch, v as DocsSitemapFormat, w as createDocsSitemapResponse, x as DocsSitemapPageInput, y as DocsSitemapManifest, z as SerializedOpenDocsProvider } from "./search-mF8wT9LQ.mjs";
1
+ import { $ as DocsReviewRulesConfig, D as DocsAskAIFeedbackMessage, E as DocsAskAIFeedbackData, J as DocsObservabilityEventInput, K as DocsObservabilityConfig, O as DocsAskAIFeedbackValue, Q as DocsReviewConfig, R as DocsConfig, T as DocsAskAIFeedbackConfig, Tt as McpDocsSearchConfig, Z as DocsReviewCiMode, _ as DocsAnalyticsConfig, a as ApiReferenceRenderer, at as DocsSearchAdapterContext, ct as DocsSearchConfig, dt as DocsSearchQuery, ft as DocsSearchResult, g as DocsAgentTraceStatus, h as DocsAgentTraceEventType, ht as DocsSitemapConfig, it as DocsSearchAdapter, k as DocsAskAIMcpConfig, lt as DocsSearchDocument, m as DocsAgentTraceEventInput, mt as DocsSearchSourcePage, ot as DocsSearchAdapterFactory, q as DocsObservabilityEvent, v as DocsAnalyticsEvent, y as DocsAnalyticsEventInput } from "./types-Dg82p0Fm.mjs";
2
+ import { $ as createDocsAgentTraceId, A as resolveDocsSitemapRequest, B as normalizePromptProviderName, C as buildDocsSitemapManifest, D as renderDocsSitemapXml, E as renderDocsSitemapMarkdown, F as DEFAULT_PROMPT_PROVIDER_TEMPLATES, G as serializeDocsIconRegistry, H as resolvePromptProviderChoices, I as PromptAction, J as DOCS_AGENT_TRACE_EVENT_TYPES, K as serializeOpenDocsProvider, L as PromptProviderChoice, M as DEFAULT_OPEN_DOCS_PROMPT, N as DEFAULT_OPEN_DOCS_PROVIDER_IDS, O as resolveDocsSitemapConfig, P as DEFAULT_OPEN_DOCS_TARGET, Q as createDocsAgentTraceContext, R as SerializeOpenDocsProviderOptions, S as DocsSitemapResolvedConfig, T as readDocsSitemapManifestFromContentMap, U as sanitizePromptText, V as parsePromptStringArray, W as serializeDocsIcon, X as ResolvedDocsAnalyticsConfig, Y as DocsAgentTraceContext, Z as ResolvedDocsObservabilityConfig, _ as DEFAULT_SITEMAP_XML_ROUTE, a as createMcpSearchAdapter, at as DocsCloudAnalyticsOptions, b as DocsSitemapManifestPage, c as formatDocsAskAIPackageHints, d as resolveAskAISearchRequestConfig, et as emitDocsAgentTraceEvent, f as resolveSearchRequestConfig, g as DEFAULT_SITEMAP_MD_WELL_KNOWN_ROUTE, h as DEFAULT_SITEMAP_MD_ROUTE, i as createCustomSearchAdapter, it as resolveDocsObservabilityConfig, j as toDocsSitemapMarkdownUrl, k as resolveDocsSitemapPageLastmod, l as inferDocsAskAIPackageHints, m as DEFAULT_SITEMAP_MD_DOCS_ROUTE, n as buildDocsSearchDocuments, nt as emitDocsObservabilityEvent, o as createSimpleSearchAdapter, ot as createDocsCloudAnalytics, p as DEFAULT_SITEMAP_MANIFEST_PATH, q as serializeOpenDocsProviders, r as createAlgoliaSearchAdapter, rt as resolveDocsAnalyticsConfig, s as createTypesenseSearchAdapter, t as buildDocsAskAIContext, tt as emitDocsAnalyticsEvent, u as performDocsSearch, v as DocsSitemapFormat, w as createDocsSitemapResponse, x as DocsSitemapPageInput, y as DocsSitemapManifest, z as SerializedOpenDocsProvider } from "./search-G0otDMfP.mjs";
3
3
  import { DocsMcpCodeExample, DocsMcpConfigSchema, DocsMcpConfigSchemaOption, DocsMcpDocsList, DocsMcpDocsPageSummary, DocsMcpDocsSection, DocsMcpHttpHandlers, DocsMcpNavigationNode, DocsMcpNavigationTree, DocsMcpPage, DocsMcpResolvedConfig, DocsMcpSource, createDocsMcpHttpHandler, createDocsMcpServer, createFilesystemDocsMcpSource, normalizeDocsMcpRoute, resolveDocsMcpConfig, runDocsMcpStdio } from "./mcp.mjs";
4
4
 
5
5
  //#region src/api-reference.d.ts
@@ -2121,7 +2121,7 @@ interface DocsReviewConfig {
2121
2121
  rules?: DocsReviewRulesConfig;
2122
2122
  }
2123
2123
  type DocsCodeBlocksPlannerProvider = "metadata" | "openai" | "openai-compatible" | "cloud";
2124
- type DocsCodeBlocksRunnerProvider = "local" | "vercel-sandbox" | "cloud";
2124
+ type DocsCodeBlocksRunnerProvider = "local" | "vercel-sandbox" | "e2b" | "daytona" | "cloud";
2125
2125
  type DocsCodeBlocksValidationMode = "plan" | "report";
2126
2126
  type DocsCodeBlocksValidationPolicy = "skip" | "warn" | "error";
2127
2127
  interface DocsCodeBlocksPlannerConfig {
@@ -2154,7 +2154,7 @@ interface DocsCodeBlocksRunnerConfig {
2154
2154
  * @default "local"
2155
2155
  */
2156
2156
  provider?: DocsCodeBlocksRunnerProvider;
2157
- /** Environment variable containing the Vercel token for `provider: "vercel-sandbox"`. */
2157
+ /** Environment variable containing the sandbox provider token. */
2158
2158
  tokenEnv?: string;
2159
2159
  /** Advanced override for the Vercel project id env var used by `provider: "vercel-sandbox"`. */
2160
2160
  projectIdEnv?: string;
@@ -2171,6 +2171,10 @@ interface DocsCodeBlocksRunnerConfig {
2171
2171
  projectJson?: string | false;
2172
2172
  /** Vercel Sandbox runtime. */
2173
2173
  runtime?: "node24" | "node22" | "python3.13";
2174
+ /** Daytona API URL env var used by `provider: "daytona"`. */
2175
+ apiUrlEnv?: string;
2176
+ /** Daytona target/region env var used by `provider: "daytona"`. */
2177
+ targetEnv?: string;
2174
2178
  /** Per-command timeout in milliseconds. */
2175
2179
  timeoutMs?: number;
2176
2180
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@farming-labs/docs",
3
- "version": "0.1.124",
3
+ "version": "0.1.125",
4
4
  "description": "Modern, flexible MDX-based docs framework — core types, config, and CLI",
5
5
  "keywords": [
6
6
  "docs",