@farming-labs/docs 0.2.59 → 0.2.60

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.
@@ -67,6 +67,7 @@ async function main() {
67
67
  setup: subcommand === "setup",
68
68
  deploymentId: typeof flags.deployment === "string" ? flags.deployment : void 0,
69
69
  apiBaseUrl: typeof flags["api-base-url"] === "string" ? flags["api-base-url"] : typeof flags.url === "string" ? flags.url : void 0,
70
+ client: typeof flags.client === "string" ? flags.client : void 0,
70
71
  json: typeof flags.json === "boolean" ? flags.json : void 0
71
72
  };
72
73
  const devOptions = {
@@ -105,10 +106,10 @@ async function main() {
105
106
  ]
106
107
  };
107
108
  if (!parsedCommand.command || parsedCommand.command === "init") {
108
- const { init } = await import("../init-B_9ENq8Z.mjs");
109
+ const { init } = await import("../init-Bd_k06bR.mjs");
109
110
  await init(initOptions);
110
111
  } else if (parsedCommand.command === "dev") {
111
- const { dev } = await import("../dev-CAQlbguk.mjs");
112
+ const { dev } = await import("../dev-DgY5xGl9.mjs");
112
113
  await dev(devOptions);
113
114
  } else if (parsedCommand.command === "deploy") {
114
115
  const { runCloudDeploy } = await import("../cloud-BH_sHX64.mjs");
@@ -138,7 +139,7 @@ async function main() {
138
139
  printCloudHelp();
139
140
  process.exit(1);
140
141
  } else if (parsedCommand.command === "mcp") {
141
- const { runMcp } = await import("../mcp-BAJr3wC2.mjs");
142
+ const { runMcp } = await import("../mcp-B_yXL5G5.mjs");
142
143
  await runMcp(mcpOptions);
143
144
  } else if (parsedCommand.command === "agent" && subcommand === "compact") {
144
145
  const { compactAgentDocs, parseAgentCompactArgs, printAgentCompactHelp } = await import("../agent-DlxriaTs.mjs").then((n) => n.t);
@@ -316,7 +317,8 @@ ${pc.dim("Options for mcp:")}
316
317
  ${pc.cyan("--config <path>")} Use a custom docs config path instead of ${pc.dim("docs.config.ts[x]")}
317
318
  ${pc.cyan("mcp setup --deployment <id>")} Print Docs Cloud hosted MCP setup for a deployment id
318
319
  ${pc.cyan("--api-base-url <url>")} Override the hosted Docs Cloud API base URL for ${pc.cyan("mcp setup")}
319
- ${pc.cyan("--json")} Print MCP client JSON only for ${pc.cyan("mcp setup")}
320
+ ${pc.cyan("--client <name>")} Emit native config for ${pc.dim("claude-code")}, ${pc.dim("cursor")}, or ${pc.dim("vscode")}
321
+ ${pc.cyan("--json")} Print the selected MCP client JSON only for ${pc.cyan("mcp setup")}
320
322
 
321
323
  ${pc.dim("Options for dev:")}
322
324
  ${pc.cyan("--port <number>")} Run the frameworkless preview on a custom port
@@ -1,5 +1,5 @@
1
1
  import { i as detectPackageManagerFromProject } from "./utils-6UCLxv4B.mjs";
2
- import { K as rootLayoutTemplate, W as postcssConfigTemplate, g as docsLayoutTemplate, v as globalCssTemplate, yt as tsconfigTemplate } from "./templates-CfQjpDWW.mjs";
2
+ import { K as rootLayoutTemplate, W as postcssConfigTemplate, g as docsLayoutTemplate, v as globalCssTemplate, yt as tsconfigTemplate } from "./templates-DNw15P-x.mjs";
3
3
  import fs from "node:fs";
4
4
  import path from "node:path";
5
5
  import { spawn } from "node:child_process";
@@ -1,5 +1,5 @@
1
1
  import { a as devInstallCommand, c as fileExists, d as readFileSafe, f as spawnAndWaitFor, i as detectPackageManagerFromProject, l as formatPackageManagerDetection, n as detectGlobalCssFiles, o as exec, p as writeFileSafe, r as detectNextAppDir, t as detectFramework, u as installCommand } from "./utils-6UCLxv4B.mjs";
2
- import { $ as svelteDocsPublicHookTemplate, A as nextConfigMergedTemplate, B as nuxtServerApiDocsRouteTemplate, C as injectRootProviderIntoLayout, D as injectTanstackVitePlugins, E as injectTanstackRootProviderIntoRoute, F as nuxtDocsConfigTemplate, G as quickstartPageTemplate, H as nuxtServerDocsPublicMiddlewareTemplate, I as nuxtDocsPageTemplate, J as svelteDocsApiRouteTemplate, K as rootLayoutTemplate, L as nuxtGlobalCssTemplate, M as nextLocaleDocPageTemplate, N as nextLocalizedPageTemplate, O as installationPageTemplate, P as nuxtConfigTemplate, Q as svelteDocsPageTemplate, R as nuxtInstallationPageTemplate, S as injectNuxtCssImport, T as injectSvelteDocsPublicHook, U as nuxtWelcomePageTemplate, V as nuxtServerApiReferenceRouteTemplate, W as postcssConfigTemplate, X as svelteDocsLayoutServerTemplate, Y as svelteDocsConfigTemplate, Z as svelteDocsLayoutTemplate, _ as getAstroAdapterPkg, _t as tanstackViteConfigTemplate, a as astroDocsIndexTemplate, at as svelteWelcomePageTemplate, b as injectAstroDocsMiddleware, bt as welcomePageTemplate, c as astroDocsServerTemplate, ct as tanstackDocsCatchAllRouteTemplate, d as astroQuickstartPageTemplate, dt as tanstackDocsIndexRouteTemplate, et as svelteDocsServerTemplate, f as astroWelcomePageTemplate, ft as tanstackDocsPublicRouteTemplate, g as docsLayoutTemplate, gt as tanstackRootRouteTemplate, h as docsConfigTemplate, ht as tanstackQuickstartPageTemplate, i as astroDocsConfigTemplate, it as svelteRootLayoutTemplate, j as nextConfigTemplate, k as nextApiReferencePageTemplate, l as astroGlobalCssTemplate, lt as tanstackDocsConfigTemplate, m as customThemeTsTemplate, mt as tanstackInstallationPageTemplate, n as astroApiRouteTemplate, nt as svelteInstallationPageTemplate, o as astroDocsMiddlewareTemplate, ot as tanstackApiDocsRouteTemplate, p as customThemeCssTemplate, pt as tanstackDocsServerTemplate, q as svelteApiReferenceRouteTemplate, r as astroConfigTemplate, rt as svelteQuickstartPageTemplate, s as astroDocsPageTemplate, st as tanstackApiReferenceRouteTemplate, t as astroApiReferenceRouteTemplate, tt as svelteGlobalCssTemplate, u as astroInstallationPageTemplate, ut as tanstackDocsFunctionsTemplate, v as globalCssTemplate, vt as tanstackWelcomePageTemplate, w as injectSvelteCssImport, x as injectCssImport, y as injectAstroCssImport, yt as tsconfigTemplate, z as nuxtQuickstartPageTemplate } from "./templates-CfQjpDWW.mjs";
2
+ import { $ as svelteDocsPublicHookTemplate, A as nextConfigMergedTemplate, B as nuxtServerApiDocsRouteTemplate, C as injectRootProviderIntoLayout, D as injectTanstackVitePlugins, E as injectTanstackRootProviderIntoRoute, F as nuxtDocsConfigTemplate, G as quickstartPageTemplate, H as nuxtServerDocsPublicMiddlewareTemplate, I as nuxtDocsPageTemplate, J as svelteDocsApiRouteTemplate, K as rootLayoutTemplate, L as nuxtGlobalCssTemplate, M as nextLocaleDocPageTemplate, N as nextLocalizedPageTemplate, O as installationPageTemplate, P as nuxtConfigTemplate, Q as svelteDocsPageTemplate, R as nuxtInstallationPageTemplate, S as injectNuxtCssImport, T as injectSvelteDocsPublicHook, U as nuxtWelcomePageTemplate, V as nuxtServerApiReferenceRouteTemplate, W as postcssConfigTemplate, X as svelteDocsLayoutServerTemplate, Y as svelteDocsConfigTemplate, Z as svelteDocsLayoutTemplate, _ as getAstroAdapterPkg, _t as tanstackViteConfigTemplate, a as astroDocsIndexTemplate, at as svelteWelcomePageTemplate, b as injectAstroDocsMiddleware, bt as welcomePageTemplate, c as astroDocsServerTemplate, ct as tanstackDocsCatchAllRouteTemplate, d as astroQuickstartPageTemplate, dt as tanstackDocsIndexRouteTemplate, et as svelteDocsServerTemplate, f as astroWelcomePageTemplate, ft as tanstackDocsPublicRouteTemplate, g as docsLayoutTemplate, gt as tanstackRootRouteTemplate, h as docsConfigTemplate, ht as tanstackQuickstartPageTemplate, i as astroDocsConfigTemplate, it as svelteRootLayoutTemplate, j as nextConfigTemplate, k as nextApiReferencePageTemplate, l as astroGlobalCssTemplate, lt as tanstackDocsConfigTemplate, m as customThemeTsTemplate, mt as tanstackInstallationPageTemplate, n as astroApiRouteTemplate, nt as svelteInstallationPageTemplate, o as astroDocsMiddlewareTemplate, ot as tanstackApiDocsRouteTemplate, p as customThemeCssTemplate, pt as tanstackDocsServerTemplate, q as svelteApiReferenceRouteTemplate, r as astroConfigTemplate, rt as svelteQuickstartPageTemplate, s as astroDocsPageTemplate, st as tanstackApiReferenceRouteTemplate, t as astroApiReferenceRouteTemplate, tt as svelteGlobalCssTemplate, u as astroInstallationPageTemplate, ut as tanstackDocsFunctionsTemplate, v as globalCssTemplate, vt as tanstackWelcomePageTemplate, w as injectSvelteCssImport, x as injectCssImport, y as injectAstroCssImport, yt as tsconfigTemplate, z as nuxtQuickstartPageTemplate } from "./templates-DNw15P-x.mjs";
3
3
  import fs from "node:fs";
4
4
  import path from "node:path";
5
5
  import pc from "picocolors";
@@ -10,6 +10,16 @@ import { readFileSync } from "node:fs";
10
10
  import pc from "picocolors";
11
11
 
12
12
  //#region src/cli/mcp.ts
13
+ const HOSTED_MCP_CLIENTS = [
14
+ "claude-code",
15
+ "cursor",
16
+ "vscode"
17
+ ];
18
+ const HOSTED_MCP_CLIENT_LABELS = {
19
+ "claude-code": "Claude Code",
20
+ cursor: "Cursor",
21
+ vscode: "VS Code"
22
+ };
13
23
  async function runMcp(options = {}) {
14
24
  if (options.setup) {
15
25
  printHostedMcpSetup(options);
@@ -35,6 +45,38 @@ async function runMcp(options = {}) {
35
45
  function normalizeApiBaseUrl(value) {
36
46
  return (value?.trim() || "https://api.farming-labs.dev").replace(/\/+$/g, "");
37
47
  }
48
+ function normalizeHostedMcpClient(value) {
49
+ const normalized = value?.trim().toLowerCase() || "claude-code";
50
+ if (normalized === "claude") return "claude-code";
51
+ if (HOSTED_MCP_CLIENTS.includes(normalized)) return normalized;
52
+ throw new Error(`Unsupported MCP client "${value}". Expected one of: ${HOSTED_MCP_CLIENTS.join(", ")}.`);
53
+ }
54
+ function createHostedMcpClientConfig(deploymentId, apiBaseUrl, clientName) {
55
+ const endpoint = `${normalizeApiBaseUrl(apiBaseUrl)}/v1/mcp/${deploymentId.trim()}`;
56
+ const client = normalizeHostedMcpClient(clientName);
57
+ if (client === "cursor") return { mcpServers: { "docs-cloud": {
58
+ url: endpoint,
59
+ headers: { Authorization: "Bearer ${env:DOCS_CLOUD_API_KEY}" }
60
+ } } };
61
+ if (client === "vscode") return {
62
+ inputs: [{
63
+ type: "promptString",
64
+ id: "docs-cloud-api-key",
65
+ description: "Docs Cloud API key",
66
+ password: true
67
+ }],
68
+ servers: { "docs-cloud": {
69
+ type: "http",
70
+ url: endpoint,
71
+ headers: { Authorization: "Bearer ${input:docs-cloud-api-key}" }
72
+ } }
73
+ };
74
+ return { mcpServers: { "docs-cloud": {
75
+ type: "http",
76
+ url: endpoint,
77
+ headers: { Authorization: "Bearer ${DOCS_CLOUD_API_KEY}" }
78
+ } } };
79
+ }
38
80
  function printHostedMcpSetup(options) {
39
81
  const deploymentId = options.deploymentId?.trim();
40
82
  if (!deploymentId) {
@@ -43,17 +85,9 @@ function printHostedMcpSetup(options) {
43
85
  console.error(`Run ${pc.cyan("npx @farming-labs/docs mcp setup --deployment <deployment-id>")}.`);
44
86
  process.exit(1);
45
87
  }
88
+ const client = normalizeHostedMcpClient(options.client);
89
+ const jsonConfig = createHostedMcpClientConfig(deploymentId, options.apiBaseUrl, client);
46
90
  const endpoint = `${normalizeApiBaseUrl(options.apiBaseUrl)}/v1/mcp/${deploymentId}`;
47
- const jsonConfig = { mcpServers: { "docs-cloud": {
48
- command: "npx",
49
- args: [
50
- "@farming-labs/docs",
51
- "mcp",
52
- "setup",
53
- "--deployment",
54
- deploymentId
55
- ]
56
- } } };
57
91
  if (options.json) {
58
92
  console.log(JSON.stringify(jsonConfig, null, 2));
59
93
  return;
@@ -61,19 +95,18 @@ function printHostedMcpSetup(options) {
61
95
  console.log(pc.bold("Docs Cloud MCP deployment"));
62
96
  console.log(pc.dim(`Deployment: ${deploymentId}`));
63
97
  console.log();
64
- console.log(pc.cyan("CLI stdio"));
65
- console.log(` npx @farming-labs/docs mcp setup --deployment ${deploymentId}`);
66
- console.log();
67
- console.log(pc.cyan("Streamable HTTP"));
98
+ console.log(pc.cyan("Streamable HTTP (recommended)"));
68
99
  console.log(` ${endpoint}`);
69
100
  console.log();
70
101
  console.log(pc.cyan("SSE"));
71
102
  console.log(` ${endpoint}/sse`);
72
103
  console.log();
73
- console.log(pc.cyan("MCP client JSON"));
104
+ console.log(pc.cyan(`MCP client JSON (${HOSTED_MCP_CLIENT_LABELS[client]})`));
74
105
  console.log(JSON.stringify(jsonConfig, null, 2));
75
106
  console.log();
76
- console.log(pc.dim("Set DOCS_CLOUD_API_KEY in the agent environment before connecting."));
107
+ if (client === "vscode") console.log(pc.dim("VS Code prompts for the API key once and stores it securely."));
108
+ else console.log(pc.dim("The config reads DOCS_CLOUD_API_KEY from the MCP client environment; no secret is embedded."));
109
+ console.log(pc.dim("Use --client cursor or --client vscode to emit another native format."));
77
110
  }
78
111
  function readMcpConfig(content) {
79
112
  if (content.match(/mcp\s*:\s*false/)) return false;
@@ -886,6 +886,7 @@ function tanstackDocsPublicRouteTemplate(useAlias, filePath, entry) {
886
886
  import { createFileRoute } from "@tanstack/react-router";
887
887
  import { isDocsMcpRequest, isDocsPublicGetRequest } from "@farming-labs/docs";
888
888
  import { docsServer } from "${useAlias ? "@/lib/docs.server" : relativeImport(filePath, "src/lib/docs.server.ts")}";
889
+ import docsConfig from "${tanstackDocsConfigImport(filePath)}";
889
890
 
890
891
  const docsEntry = ${JSON.stringify(entry)};
891
892
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@farming-labs/docs",
3
- "version": "0.2.59",
3
+ "version": "0.2.60",
4
4
  "description": "Modern, flexible MDX-based docs framework — core types, config, and CLI",
5
5
  "keywords": [
6
6
  "docs",