@farming-labs/docs 0.1.60 → 0.1.63
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-CCznWtjf.mjs → agent-COwO6Q6N.mjs} +2 -1
- package/dist/{agent-BQCfaA1j.mjs → agent-LSYzB5MK.mjs} +2 -2
- package/dist/cli/index.mjs +6 -6
- package/dist/{dev-VD41gGZC.mjs → dev-B_o7hWSI.mjs} +24 -10
- package/dist/{doctor-DraU0BVq.mjs → doctor-CfGThtMI.mjs} +2 -2
- package/dist/index.d.mts +3 -3
- package/dist/index.mjs +3 -3
- package/dist/mcp.d.mts +2 -1
- package/dist/mcp.mjs +120 -10
- package/dist/{search-CLoh315v.mjs → search-DVyHOFlo.mjs} +1 -1
- package/dist/{search-Cu_pxL8o.mjs → search-Ds3jiS2n.mjs} +50 -1
- package/dist/search-HlwTDHCK.d.mts +31 -0
- package/dist/server.d.mts +3 -3
- package/dist/server.mjs +2 -2
- package/dist/{types-G-xf-4_c.d.mts → types-DfiAeeHu.d.mts} +56 -1
- package/package.json +1 -1
- package/dist/search-COePaQmH.d.mts +0 -21
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { _ as renderDocsRelatedMarkdownLines } from "./search-
|
|
1
|
+
import { _ as renderDocsRelatedMarkdownLines } from "./search-Ds3jiS2n.mjs";
|
|
2
2
|
import matter from "gray-matter";
|
|
3
3
|
|
|
4
4
|
//#region src/define-docs.ts
|
|
@@ -17,6 +17,7 @@ function defineDocs(config) {
|
|
|
17
17
|
breadcrumb: config.breadcrumb,
|
|
18
18
|
sidebar: config.sidebar,
|
|
19
19
|
components: config.components,
|
|
20
|
+
analytics: config.analytics,
|
|
20
21
|
onCopyClick: config.onCopyClick,
|
|
21
22
|
feedback: config.feedback,
|
|
22
23
|
search: config.search,
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { C as renderDocsMarkdownDocument, g as findDocsMarkdownPage } from "./agent-
|
|
2
|
-
import { d as hashGeneratedAgentContent, m as serializeGeneratedAgentDocument, p as parseGeneratedAgentDocument, u as GENERATED_AGENT_PROVENANCE_VERSION } from "./search-
|
|
1
|
+
import { C as renderDocsMarkdownDocument, g as findDocsMarkdownPage } from "./agent-COwO6Q6N.mjs";
|
|
2
|
+
import { d as hashGeneratedAgentContent, m as serializeGeneratedAgentDocument, p as parseGeneratedAgentDocument, u as GENERATED_AGENT_PROVENANCE_VERSION } from "./search-Ds3jiS2n.mjs";
|
|
3
3
|
import "./index.mjs";
|
|
4
4
|
import "./prompt-utils-8nmFLQVH.mjs";
|
|
5
5
|
import { createFilesystemDocsMcpSource } from "./mcp.mjs";
|
package/dist/cli/index.mjs
CHANGED
|
@@ -80,13 +80,13 @@ async function main() {
|
|
|
80
80
|
const { init } = await import("../init-CcgI3D7-.mjs");
|
|
81
81
|
await init(initOptions);
|
|
82
82
|
} else if (parsedCommand.command === "dev") {
|
|
83
|
-
const { dev } = await import("../dev-
|
|
83
|
+
const { dev } = await import("../dev-B_o7hWSI.mjs");
|
|
84
84
|
await dev(devOptions);
|
|
85
85
|
} else if (parsedCommand.command === "mcp") {
|
|
86
86
|
const { runMcp } = await import("../mcp-BANLcwQ0.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-LSYzB5MK.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-LSYzB5MK.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-CfGThtMI.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-DVyHOFlo.mjs");
|
|
112
112
|
await syncSearch(searchSyncOptions);
|
|
113
113
|
} else if (parsedCommand.command === "search") {
|
|
114
114
|
console.error(pc.red(`Unknown search subcommand: ${subcommand ?? "(missing)"}`));
|
|
@@ -139,7 +139,7 @@ ${pc.dim("Usage:")}
|
|
|
139
139
|
|
|
140
140
|
${pc.dim("Commands:")}
|
|
141
141
|
${pc.cyan("init")} Scaffold docs in your project (default)
|
|
142
|
-
${pc.cyan("dev")} Run frameworkless docs locally from ${pc.dim("docs.
|
|
142
|
+
${pc.cyan("dev")} Run frameworkless docs locally from ${pc.dim("docs.json")}
|
|
143
143
|
${pc.cyan("agent")} Agent utilities (${pc.dim("compact")} to generate sibling agent.md files)
|
|
144
144
|
${pc.cyan("doctor")} Inspect and score agent or reader-facing docs quality
|
|
145
145
|
${pc.cyan("mcp")} Run the built-in docs MCP server over stdio
|
|
@@ -63,7 +63,8 @@ function printDevBanner({ name = "@farming-labs/docs", version = "v0.0.0", port,
|
|
|
63
63
|
|
|
64
64
|
//#endregion
|
|
65
65
|
//#region src/cli/dev.ts
|
|
66
|
-
const
|
|
66
|
+
const PRIMARY_MANAGED_CONFIG_FILE = "docs.json";
|
|
67
|
+
const LEGACY_MANAGED_CONFIG_FILE = "docs.cloud.json";
|
|
67
68
|
const DEFAULT_RUNTIME_ROOT = ".docs/site";
|
|
68
69
|
const DEFAULT_DOCS_ROOT = "docs";
|
|
69
70
|
const DEFAULT_API_REFERENCE_ROOT = "api-reference";
|
|
@@ -426,19 +427,31 @@ function detectNearestPackageManager(startDir) {
|
|
|
426
427
|
current = parent;
|
|
427
428
|
}
|
|
428
429
|
}
|
|
430
|
+
function resolveManagedConfigPath(projectRoot) {
|
|
431
|
+
const primaryPath = path.join(projectRoot, PRIMARY_MANAGED_CONFIG_FILE);
|
|
432
|
+
if (fs.existsSync(primaryPath)) return {
|
|
433
|
+
configPath: primaryPath,
|
|
434
|
+
configFileName: PRIMARY_MANAGED_CONFIG_FILE
|
|
435
|
+
};
|
|
436
|
+
const legacyPath = path.join(projectRoot, LEGACY_MANAGED_CONFIG_FILE);
|
|
437
|
+
if (fs.existsSync(legacyPath)) return {
|
|
438
|
+
configPath: legacyPath,
|
|
439
|
+
configFileName: LEGACY_MANAGED_CONFIG_FILE
|
|
440
|
+
};
|
|
441
|
+
throw new Error(`Could not find ${PRIMARY_MANAGED_CONFIG_FILE} in ${projectRoot}. Frameworkless dev expects ${PRIMARY_MANAGED_CONFIG_FILE}, ${DEFAULT_DOCS_ROOT}/, and optionally ${DEFAULT_API_REFERENCE_ROOT}/. ${LEGACY_MANAGED_CONFIG_FILE} is still supported for older repos.`);
|
|
442
|
+
}
|
|
429
443
|
function readManagedDocsProject(projectRoot) {
|
|
430
|
-
const configPath =
|
|
431
|
-
if (!fs.existsSync(configPath)) throw new Error(`Could not find ${MANAGED_CONFIG_FILE} in ${projectRoot}. Frameworkless dev expects ${MANAGED_CONFIG_FILE}, ${DEFAULT_DOCS_ROOT}/, and optionally ${DEFAULT_API_REFERENCE_ROOT}/.`);
|
|
444
|
+
const { configPath, configFileName } = resolveManagedConfigPath(projectRoot);
|
|
432
445
|
let parsedJson;
|
|
433
446
|
try {
|
|
434
447
|
parsedJson = JSON.parse(fs.readFileSync(configPath, "utf-8"));
|
|
435
448
|
} catch (error) {
|
|
436
|
-
throw new Error(`Could not parse ${
|
|
449
|
+
throw new Error(`Could not parse ${configFileName}. The file must be valid JSON.${error instanceof Error ? ` ${error.message}` : ""}`);
|
|
437
450
|
}
|
|
438
451
|
const parsed = managedConfigSchema.safeParse(parsedJson);
|
|
439
|
-
if (!parsed.success) throw new Error(`Invalid ${
|
|
452
|
+
if (!parsed.success) throw new Error(`Invalid ${configFileName}: ${formatZodError(parsed.error)}`);
|
|
440
453
|
const docsConfig = parsed.data.docs;
|
|
441
|
-
if (("mode" in docsConfig ? docsConfig.mode : docsConfig.framework === "managed" ? "frameworkless" : "framework") !== "frameworkless") throw new Error(`${
|
|
454
|
+
if (("mode" in docsConfig ? docsConfig.mode : docsConfig.framework === "managed" ? "frameworkless" : "framework") !== "frameworkless") throw new Error(`${configFileName} uses docs.mode = "framework". ${pc.cyan("docs dev")} only supports frameworkless projects right now.`);
|
|
442
455
|
const runtimeFramework = "runtime" in docsConfig && docsConfig.runtime ? docsConfig.runtime : "nextjs";
|
|
443
456
|
if (runtimeFramework !== "nextjs") throw new Error(`Frameworkless ${pc.cyan("docs dev")} currently supports only docs.runtime = "nextjs".`);
|
|
444
457
|
const docsRoot = parsed.data.content?.docsRoot ?? DEFAULT_DOCS_ROOT;
|
|
@@ -452,6 +465,7 @@ function readManagedDocsProject(projectRoot) {
|
|
|
452
465
|
const theme = resolveThemePreset(parsed.data.theme?.preset);
|
|
453
466
|
return {
|
|
454
467
|
configPath,
|
|
468
|
+
configFileName,
|
|
455
469
|
projectRoot,
|
|
456
470
|
runtimeDir,
|
|
457
471
|
runtimeFramework,
|
|
@@ -665,7 +679,7 @@ function validateManagedOpenApiSpec(project) {
|
|
|
665
679
|
if (!sourcePath) return;
|
|
666
680
|
if (!fs.existsSync(sourcePath) || !fs.statSync(sourcePath).isFile()) {
|
|
667
681
|
const relativePath = path.relative(project.projectRoot, sourcePath) || sourcePath;
|
|
668
|
-
throw new Error(`OpenAPI source not found at ${relativePath}. Update ${
|
|
682
|
+
throw new Error(`OpenAPI source not found at ${relativePath}. Update ${project.configFileName} or add the spec file and try again.`);
|
|
669
683
|
}
|
|
670
684
|
}
|
|
671
685
|
function renderAlternateSectionLayout(configImportPath) {
|
|
@@ -895,7 +909,7 @@ function materializeManagedRuntime(projectRoot) {
|
|
|
895
909
|
const hasDocsMarkdown = directoryHasMarkdown(docsSourceDir);
|
|
896
910
|
const hasApiReferenceMarkdown = directoryHasMarkdown(apiReferenceSourceDir);
|
|
897
911
|
validateManagedOpenApiSpec(project);
|
|
898
|
-
if (!hasDocsMarkdown && !hasApiReferenceMarkdown && !hasOpenApiSpec) throw new Error(`No docs content found. Add markdown files under ${project.docsRoot}/ or ${project.apiReferenceRoot}/, or point content.openapi at an OpenAPI file in ${
|
|
912
|
+
if (!hasDocsMarkdown && !hasApiReferenceMarkdown && !hasOpenApiSpec) throw new Error(`No docs content found. Add markdown files under ${project.docsRoot}/ or ${project.apiReferenceRoot}/, or point content.openapi at an OpenAPI file in ${project.configFileName}.`);
|
|
899
913
|
const templateConfig = {
|
|
900
914
|
entry: "docs",
|
|
901
915
|
theme: project.theme.templateTheme,
|
|
@@ -1140,9 +1154,9 @@ async function dev(options = {}) {
|
|
|
1140
1154
|
const runtimeInstallStamp = getRuntimeInstallStamp(project);
|
|
1141
1155
|
console.log(pc.dim("Preparing local preview..."));
|
|
1142
1156
|
if (options.verbose) {
|
|
1143
|
-
logLine("source", `${pc.cyan(
|
|
1157
|
+
logLine("source", `${pc.cyan(project.configFileName)} drives ${pc.cyan(`${project.docsRoot}/`)} and ${pc.cyan(`${project.apiReferenceRoot}/`)}`);
|
|
1144
1158
|
logLine("runtime", `Generated runtime at ${pc.cyan(path.relative(projectRoot, project.runtimeDir) || project.runtimeDir)}`);
|
|
1145
|
-
logLine("watch", `Watching ${project.docsRoot}/, ${project.apiReferenceRoot}/, and ${
|
|
1159
|
+
logLine("watch", `Watching ${project.docsRoot}/, ${project.apiReferenceRoot}/, and ${project.configFileName}`);
|
|
1146
1160
|
logLine("sync", `Loaded ${initial.docs.pageCount} docs page${initial.docs.pageCount === 1 ? "" : "s"} and ${initial.apiReference.pageCount} api-reference page${initial.apiReference.pageCount === 1 ? "" : "s"}`);
|
|
1147
1161
|
}
|
|
1148
1162
|
if (!fs.existsSync(runtimeNodeModules) || !fs.existsSync(runtimeInstallMarker) || fs.readFileSync(runtimeInstallMarker, "utf-8") !== runtimeInstallStamp) {
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { c as DEFAULT_LLMS_TXT_ROUTE, f as DEFAULT_MCP_WELL_KNOWN_ROUTE, i as DEFAULT_AGENT_SPEC_WELL_KNOWN_ROUTE, m as DEFAULT_SKILL_MD_WELL_KNOWN_ROUTE, o as DEFAULT_LLMS_FULL_TXT_ROUTE, p as DEFAULT_SKILL_MD_ROUTE, r as DEFAULT_AGENT_SPEC_WELL_KNOWN_JSON_ROUTE, t as DEFAULT_AGENT_FEEDBACK_ROUTE, u as DEFAULT_MCP_PUBLIC_ROUTE } from "./agent-
|
|
1
|
+
import { c as DEFAULT_LLMS_TXT_ROUTE, f as DEFAULT_MCP_WELL_KNOWN_ROUTE, i as DEFAULT_AGENT_SPEC_WELL_KNOWN_ROUTE, m as DEFAULT_SKILL_MD_WELL_KNOWN_ROUTE, o as DEFAULT_LLMS_FULL_TXT_ROUTE, p as DEFAULT_SKILL_MD_ROUTE, r as DEFAULT_AGENT_SPEC_WELL_KNOWN_JSON_ROUTE, t as DEFAULT_AGENT_FEEDBACK_ROUTE, u as DEFAULT_MCP_PUBLIC_ROUTE } from "./agent-COwO6Q6N.mjs";
|
|
2
2
|
import "./prompt-utils-8nmFLQVH.mjs";
|
|
3
3
|
import { createFilesystemDocsMcpSource, resolveDocsMcpConfig } from "./mcp.mjs";
|
|
4
4
|
import "./server.mjs";
|
|
5
5
|
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-Si-yUfM_.mjs";
|
|
6
|
-
import { inspectAgentCompactionState, scanDocsPageTargets } from "./agent-
|
|
6
|
+
import { inspectAgentCompactionState, scanDocsPageTargets } from "./agent-LSYzB5MK.mjs";
|
|
7
7
|
import { t as detectFramework } from "./utils-DSMXVnEu.mjs";
|
|
8
8
|
import { existsSync, lstatSync, readFileSync, readdirSync } from "node:fs";
|
|
9
9
|
import path from "node:path";
|
package/dist/index.d.mts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { $ as
|
|
1
|
+
import { $ as PageFrontmatter, A as DocsSearchAdapterContext, B as DocsTheme, C as DocsI18nConfig, D as DocsNav, E as DocsMetadata, F as DocsSearchEmbeddingsConfig, G as LlmsTxtConfig, H as FontStyle, I as DocsSearchQuery, J as OpenDocsConfig, K as McpDocsSearchConfig, L as DocsSearchResult, M as DocsSearchChunkingConfig, N as DocsSearchConfig, O as DocsRelatedItem, P as DocsSearchDocument, Q as PageActionsConfig, R as DocsSearchResultType, S as DocsFeedbackValue, T as DocsMcpToolsConfig, U as GithubConfig, V as FeedbackConfig, W as LastUpdatedConfig, X as OpenGraphImage, Y as OpenDocsProvider, Z as OrderingItem, _ as DocsAnalyticsEventType, a as ApiReferenceRenderer, at as SidebarComponentProps, b as DocsConfig, c as ChangelogFrontmatter, ct as SidebarFolderNode, d as CustomDocsSearchConfig, dt as SidebarTree, et as PageOpenGraph, f as DocsAgentFeedbackContext, ft as SimpleDocsSearchConfig, g as DocsAnalyticsEventInput, gt as UIConfig, h as DocsAnalyticsEvent, ht as TypographyConfig, i as ApiReferenceConfig, it as ResolvedDocsRelatedLink, j as DocsSearchAdapterFactory, k as DocsSearchAdapter, l as CodeBlockCopyData, lt as SidebarNode, m as DocsAnalyticsConfig, mt as TypesenseDocsSearchConfig, n as AgentFeedbackConfig, nt as PageTwitter, o as BreadcrumbConfig, ot as SidebarConfig, p as DocsAgentFeedbackData, pt as ThemeToggleConfig, q as OGConfig, r as AlgoliaDocsSearchConfig, rt as ReadingTimeConfig, s as ChangelogConfig, st as SidebarFolderIndexBehavior, t as AIConfig, tt as PageSidebarFrontmatter, u as CopyMarkdownConfig, ut as SidebarPageNode, v as DocsAnalyticsInput, w as DocsMcpConfig, x as DocsFeedbackData, y as DocsAnalyticsSource, z as DocsSearchSourcePage } from "./types-DfiAeeHu.mjs";
|
|
2
|
+
import { a as createSimpleSearchAdapter, c as resolveSearchRequestConfig, d as resolveDocsAnalyticsConfig, i as createMcpSearchAdapter, l as ResolvedDocsAnalyticsConfig, n as createAlgoliaSearchAdapter, o as createTypesenseSearchAdapter, r as createCustomSearchAdapter, s as performDocsSearch, t as buildDocsSearchDocuments, u as emitDocsAnalyticsEvent } from "./search-HlwTDHCK.mjs";
|
|
2
3
|
import { DocsMcpPage, DocsMcpResolvedConfig } from "./mcp.mjs";
|
|
3
|
-
import { a as createSimpleSearchAdapter, c as resolveSearchRequestConfig, i as createMcpSearchAdapter, n as createAlgoliaSearchAdapter, o as createTypesenseSearchAdapter, r as createCustomSearchAdapter, s as performDocsSearch, t as buildDocsSearchDocuments } from "./search-COePaQmH.mjs";
|
|
4
4
|
|
|
5
5
|
//#region src/define-docs.d.ts
|
|
6
6
|
/**
|
|
@@ -372,4 +372,4 @@ declare function buildDocsAgentDiscoverySpec({
|
|
|
372
372
|
};
|
|
373
373
|
};
|
|
374
374
|
//#endregion
|
|
375
|
-
export { type AIConfig, type AgentFeedbackConfig, type AlgoliaDocsSearchConfig, type ApiReferenceConfig, type ApiReferenceRenderer, type BreadcrumbConfig, type ChangelogConfig, type ChangelogEntrySummary, type ChangelogFrontmatter, type CodeBlockCopyData, type CopyMarkdownConfig, type CustomDocsSearchConfig, DEFAULT_AGENT_FEEDBACK_ROUTE, DEFAULT_AGENT_SPEC_ROUTE, DEFAULT_AGENT_SPEC_WELL_KNOWN_JSON_ROUTE, DEFAULT_AGENT_SPEC_WELL_KNOWN_ROUTE, DEFAULT_DOCS_API_ROUTE, DEFAULT_LLMS_FULL_TXT_ROUTE, DEFAULT_LLMS_FULL_TXT_WELL_KNOWN_ROUTE, DEFAULT_LLMS_TXT_ROUTE, DEFAULT_LLMS_TXT_WELL_KNOWN_ROUTE, DEFAULT_MCP_PUBLIC_ROUTE, DEFAULT_MCP_ROUTE, DEFAULT_MCP_WELL_KNOWN_ROUTE, DEFAULT_SKILL_MD_ROUTE, DEFAULT_SKILL_MD_WELL_KNOWN_ROUTE, type DocsAgentDiscoverySpecOptions, type DocsAgentFeedbackContext, type DocsAgentFeedbackData, type DocsAgentFeedbackDiscoveryConfig, type DocsConfig, type DocsFeedbackData, type DocsFeedbackValue, type DocsI18nConfig, type DocsLlmsDiscoveryConfig, type DocsMarkdownPage, type DocsMcpConfig, type DocsMcpToolsConfig, type DocsMetadata, type DocsNav, type DocsPathMatch, type DocsRelatedItem, type DocsSearchAdapter, type DocsSearchAdapterContext, type DocsSearchAdapterFactory, type DocsSearchChunkingConfig, type DocsSearchConfig, type DocsSearchDocument, type DocsSearchEmbeddingsConfig, type DocsSearchQuery, type DocsSearchResult, type DocsSearchResultType, type DocsSearchSourcePage, type DocsSkillDocumentOptions, type DocsTheme, type FeedbackConfig, type FontStyle, GENERATED_AGENT_PROVENANCE_MARKER, GENERATED_AGENT_PROVENANCE_VERSION, type GeneratedAgentProvenance, type GeneratedAgentSourceKind, type GithubConfig, type LastUpdatedConfig, type LlmsTxtConfig, type McpDocsSearchConfig, type OGConfig, type OpenDocsConfig, type OpenDocsProvider, type OpenGraphImage, type OrderingItem, type PageActionsConfig, type PageFrontmatter, type PageOpenGraph, type PageSidebarFrontmatter, type PageTwitter, type ReadingTimeConfig, type ResolvedChangelogConfig, type ResolvedDocsI18n, type ResolvedDocsRelatedLink, type SidebarComponentProps, type SidebarConfig, type SidebarFolderIndexBehavior, type SidebarFolderNode, type SidebarNode, type SidebarPageNode, type SidebarTree, type SimpleDocsSearchConfig, type ThemeToggleConfig, type TypesenseDocsSearchConfig, type TypographyConfig, type UIConfig, applySidebarFolderIndexBehavior, buildDocsAgentDiscoverySpec, buildDocsSearchDocuments, buildPageOpenGraph, buildPageTwitter, createAlgoliaSearchAdapter, createCustomSearchAdapter, createMcpSearchAdapter, createSimpleSearchAdapter, createTheme, createTypesenseSearchAdapter, deepMerge, defineDocs, estimateReadingTimeMinutes, extendTheme, findDocsMarkdownPage, hashGeneratedAgentContent, isDocsAgentDiscoveryRequest, isDocsMcpRequest, isDocsPublicGetRequest, isDocsSkillRequest, normalizeDocsPathSegment, normalizeDocsRelated, normalizeDocsUrlPath, normalizeGeneratedAgentContent, parseGeneratedAgentDocument, performDocsSearch, renderDocsMarkdownDocument, renderDocsRelatedMarkdownLines, renderDocsSkillDocument, resolveChangelogConfig, resolveDocsAgentMdxContent, resolveDocsI18n, resolveDocsLlmsTxtFormat, resolveDocsLocale, resolveDocsMarkdownRequest, resolveDocsPath, resolveDocsSkillFormat, resolveOGImage, resolvePageReadingTime, resolvePageSidebarFolderIndexBehavior, resolveReadingTimeFromContent, resolveReadingTimeFromSource, resolveReadingTimeOptions, resolveSearchRequestConfig, resolveSidebarFolderIndexBehavior, resolveSidebarFolderIndexBehaviorForPath, resolveTitle, serializeGeneratedAgentDocument, stripGeneratedAgentProvenance };
|
|
375
|
+
export { type AIConfig, type AgentFeedbackConfig, type AlgoliaDocsSearchConfig, type ApiReferenceConfig, type ApiReferenceRenderer, type BreadcrumbConfig, type ChangelogConfig, type ChangelogEntrySummary, type ChangelogFrontmatter, type CodeBlockCopyData, type CopyMarkdownConfig, type CustomDocsSearchConfig, DEFAULT_AGENT_FEEDBACK_ROUTE, DEFAULT_AGENT_SPEC_ROUTE, DEFAULT_AGENT_SPEC_WELL_KNOWN_JSON_ROUTE, DEFAULT_AGENT_SPEC_WELL_KNOWN_ROUTE, DEFAULT_DOCS_API_ROUTE, DEFAULT_LLMS_FULL_TXT_ROUTE, DEFAULT_LLMS_FULL_TXT_WELL_KNOWN_ROUTE, DEFAULT_LLMS_TXT_ROUTE, DEFAULT_LLMS_TXT_WELL_KNOWN_ROUTE, DEFAULT_MCP_PUBLIC_ROUTE, DEFAULT_MCP_ROUTE, DEFAULT_MCP_WELL_KNOWN_ROUTE, DEFAULT_SKILL_MD_ROUTE, DEFAULT_SKILL_MD_WELL_KNOWN_ROUTE, type DocsAgentDiscoverySpecOptions, type DocsAgentFeedbackContext, type DocsAgentFeedbackData, type DocsAgentFeedbackDiscoveryConfig, type DocsAnalyticsConfig, type DocsAnalyticsEvent, type DocsAnalyticsEventInput, type DocsAnalyticsEventType, type DocsAnalyticsInput, type DocsAnalyticsSource, type DocsConfig, type DocsFeedbackData, type DocsFeedbackValue, type DocsI18nConfig, type DocsLlmsDiscoveryConfig, type DocsMarkdownPage, type DocsMcpConfig, type DocsMcpToolsConfig, type DocsMetadata, type DocsNav, type DocsPathMatch, type DocsRelatedItem, type DocsSearchAdapter, type DocsSearchAdapterContext, type DocsSearchAdapterFactory, type DocsSearchChunkingConfig, type DocsSearchConfig, type DocsSearchDocument, type DocsSearchEmbeddingsConfig, type DocsSearchQuery, type DocsSearchResult, type DocsSearchResultType, type DocsSearchSourcePage, type DocsSkillDocumentOptions, type DocsTheme, type FeedbackConfig, type FontStyle, GENERATED_AGENT_PROVENANCE_MARKER, GENERATED_AGENT_PROVENANCE_VERSION, type GeneratedAgentProvenance, type GeneratedAgentSourceKind, type GithubConfig, type LastUpdatedConfig, type LlmsTxtConfig, type McpDocsSearchConfig, type OGConfig, type OpenDocsConfig, type OpenDocsProvider, type OpenGraphImage, type OrderingItem, type PageActionsConfig, type PageFrontmatter, type PageOpenGraph, type PageSidebarFrontmatter, type PageTwitter, type ReadingTimeConfig, type ResolvedChangelogConfig, type ResolvedDocsAnalyticsConfig, type ResolvedDocsI18n, type ResolvedDocsRelatedLink, type SidebarComponentProps, type SidebarConfig, type SidebarFolderIndexBehavior, type SidebarFolderNode, type SidebarNode, type SidebarPageNode, type SidebarTree, type SimpleDocsSearchConfig, type ThemeToggleConfig, type TypesenseDocsSearchConfig, type TypographyConfig, type UIConfig, applySidebarFolderIndexBehavior, buildDocsAgentDiscoverySpec, buildDocsSearchDocuments, buildPageOpenGraph, buildPageTwitter, createAlgoliaSearchAdapter, createCustomSearchAdapter, createMcpSearchAdapter, createSimpleSearchAdapter, createTheme, createTypesenseSearchAdapter, deepMerge, defineDocs, emitDocsAnalyticsEvent, estimateReadingTimeMinutes, extendTheme, findDocsMarkdownPage, hashGeneratedAgentContent, isDocsAgentDiscoveryRequest, isDocsMcpRequest, isDocsPublicGetRequest, isDocsSkillRequest, normalizeDocsPathSegment, normalizeDocsRelated, normalizeDocsUrlPath, normalizeGeneratedAgentContent, parseGeneratedAgentDocument, performDocsSearch, renderDocsMarkdownDocument, renderDocsRelatedMarkdownLines, renderDocsSkillDocument, resolveChangelogConfig, resolveDocsAgentMdxContent, resolveDocsAnalyticsConfig, resolveDocsI18n, resolveDocsLlmsTxtFormat, resolveDocsLocale, resolveDocsMarkdownRequest, resolveDocsPath, resolveDocsSkillFormat, resolveOGImage, resolvePageReadingTime, resolvePageSidebarFolderIndexBehavior, resolveReadingTimeFromContent, resolveReadingTimeFromSource, resolveReadingTimeOptions, resolveSearchRequestConfig, resolveSidebarFolderIndexBehavior, resolveSidebarFolderIndexBehaviorForPath, resolveTitle, serializeGeneratedAgentDocument, stripGeneratedAgentProvenance };
|
package/dist/index.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { A as resolvePageSidebarFolderIndexBehavior, B as resolveOGImage, C as renderDocsMarkdownDocument, D as resolveDocsMarkdownRequest, E as resolveDocsLlmsTxtFormat, F as resolveReadingTimeFromContent, G as createTheme, H as resolveDocsI18n, I as resolveReadingTimeFromSource, J as resolveChangelogConfig, K as extendTheme, L as resolveReadingTimeOptions, M as resolveSidebarFolderIndexBehaviorForPath, N as estimateReadingTimeMinutes, O as resolveDocsSkillFormat, P as resolvePageReadingTime, R as buildPageOpenGraph, S as normalizeDocsUrlPath, T as resolveDocsAgentMdxContent, U as resolveDocsLocale, V as resolveTitle, W as resolveDocsPath, Y as defineDocs, _ as isDocsAgentDiscoveryRequest, a as DEFAULT_DOCS_API_ROUTE, b as isDocsSkillRequest, c as DEFAULT_LLMS_TXT_ROUTE, d as DEFAULT_MCP_ROUTE, f as DEFAULT_MCP_WELL_KNOWN_ROUTE, g as findDocsMarkdownPage, h as buildDocsAgentDiscoverySpec, i as DEFAULT_AGENT_SPEC_WELL_KNOWN_ROUTE, j as resolveSidebarFolderIndexBehavior, k as applySidebarFolderIndexBehavior, l as DEFAULT_LLMS_TXT_WELL_KNOWN_ROUTE, m as DEFAULT_SKILL_MD_WELL_KNOWN_ROUTE, n as DEFAULT_AGENT_SPEC_ROUTE, o as DEFAULT_LLMS_FULL_TXT_ROUTE, p as DEFAULT_SKILL_MD_ROUTE, q as deepMerge, r as DEFAULT_AGENT_SPEC_WELL_KNOWN_JSON_ROUTE, s as DEFAULT_LLMS_FULL_TXT_WELL_KNOWN_ROUTE, t as DEFAULT_AGENT_FEEDBACK_ROUTE, u as DEFAULT_MCP_PUBLIC_ROUTE, v as isDocsMcpRequest, w as renderDocsSkillDocument, x as normalizeDocsPathSegment, y as isDocsPublicGetRequest, z as buildPageTwitter } from "./agent-
|
|
2
|
-
import { _ as renderDocsRelatedMarkdownLines, a as createSimpleSearchAdapter, c as resolveSearchRequestConfig, d as hashGeneratedAgentContent, f as normalizeGeneratedAgentContent, g as normalizeDocsRelated, h as stripGeneratedAgentProvenance, i as createMcpSearchAdapter, l as GENERATED_AGENT_PROVENANCE_MARKER, m as serializeGeneratedAgentDocument, n as createAlgoliaSearchAdapter, o as createTypesenseSearchAdapter, p as parseGeneratedAgentDocument, r as createCustomSearchAdapter, s as performDocsSearch, t as buildDocsSearchDocuments, u as GENERATED_AGENT_PROVENANCE_VERSION } from "./search-
|
|
1
|
+
import { A as resolvePageSidebarFolderIndexBehavior, B as resolveOGImage, C as renderDocsMarkdownDocument, D as resolveDocsMarkdownRequest, E as resolveDocsLlmsTxtFormat, F as resolveReadingTimeFromContent, G as createTheme, H as resolveDocsI18n, I as resolveReadingTimeFromSource, J as resolveChangelogConfig, K as extendTheme, L as resolveReadingTimeOptions, M as resolveSidebarFolderIndexBehaviorForPath, N as estimateReadingTimeMinutes, O as resolveDocsSkillFormat, P as resolvePageReadingTime, R as buildPageOpenGraph, S as normalizeDocsUrlPath, T as resolveDocsAgentMdxContent, U as resolveDocsLocale, V as resolveTitle, W as resolveDocsPath, Y as defineDocs, _ as isDocsAgentDiscoveryRequest, a as DEFAULT_DOCS_API_ROUTE, b as isDocsSkillRequest, c as DEFAULT_LLMS_TXT_ROUTE, d as DEFAULT_MCP_ROUTE, f as DEFAULT_MCP_WELL_KNOWN_ROUTE, g as findDocsMarkdownPage, h as buildDocsAgentDiscoverySpec, i as DEFAULT_AGENT_SPEC_WELL_KNOWN_ROUTE, j as resolveSidebarFolderIndexBehavior, k as applySidebarFolderIndexBehavior, l as DEFAULT_LLMS_TXT_WELL_KNOWN_ROUTE, m as DEFAULT_SKILL_MD_WELL_KNOWN_ROUTE, n as DEFAULT_AGENT_SPEC_ROUTE, o as DEFAULT_LLMS_FULL_TXT_ROUTE, p as DEFAULT_SKILL_MD_ROUTE, q as deepMerge, r as DEFAULT_AGENT_SPEC_WELL_KNOWN_JSON_ROUTE, s as DEFAULT_LLMS_FULL_TXT_WELL_KNOWN_ROUTE, t as DEFAULT_AGENT_FEEDBACK_ROUTE, u as DEFAULT_MCP_PUBLIC_ROUTE, v as isDocsMcpRequest, w as renderDocsSkillDocument, x as normalizeDocsPathSegment, y as isDocsPublicGetRequest, z as buildPageTwitter } from "./agent-COwO6Q6N.mjs";
|
|
2
|
+
import { _ as renderDocsRelatedMarkdownLines, a as createSimpleSearchAdapter, c as resolveSearchRequestConfig, d as hashGeneratedAgentContent, f as normalizeGeneratedAgentContent, g as normalizeDocsRelated, h as stripGeneratedAgentProvenance, i as createMcpSearchAdapter, l as GENERATED_AGENT_PROVENANCE_MARKER, m as serializeGeneratedAgentDocument, n as createAlgoliaSearchAdapter, o as createTypesenseSearchAdapter, p as parseGeneratedAgentDocument, r as createCustomSearchAdapter, s as performDocsSearch, t as buildDocsSearchDocuments, u as GENERATED_AGENT_PROVENANCE_VERSION, v as emitDocsAnalyticsEvent, y as resolveDocsAnalyticsConfig } from "./search-Ds3jiS2n.mjs";
|
|
3
3
|
|
|
4
|
-
export { DEFAULT_AGENT_FEEDBACK_ROUTE, DEFAULT_AGENT_SPEC_ROUTE, DEFAULT_AGENT_SPEC_WELL_KNOWN_JSON_ROUTE, DEFAULT_AGENT_SPEC_WELL_KNOWN_ROUTE, DEFAULT_DOCS_API_ROUTE, DEFAULT_LLMS_FULL_TXT_ROUTE, DEFAULT_LLMS_FULL_TXT_WELL_KNOWN_ROUTE, DEFAULT_LLMS_TXT_ROUTE, DEFAULT_LLMS_TXT_WELL_KNOWN_ROUTE, DEFAULT_MCP_PUBLIC_ROUTE, DEFAULT_MCP_ROUTE, DEFAULT_MCP_WELL_KNOWN_ROUTE, DEFAULT_SKILL_MD_ROUTE, DEFAULT_SKILL_MD_WELL_KNOWN_ROUTE, GENERATED_AGENT_PROVENANCE_MARKER, GENERATED_AGENT_PROVENANCE_VERSION, applySidebarFolderIndexBehavior, buildDocsAgentDiscoverySpec, buildDocsSearchDocuments, buildPageOpenGraph, buildPageTwitter, createAlgoliaSearchAdapter, createCustomSearchAdapter, createMcpSearchAdapter, createSimpleSearchAdapter, createTheme, createTypesenseSearchAdapter, deepMerge, defineDocs, estimateReadingTimeMinutes, extendTheme, findDocsMarkdownPage, hashGeneratedAgentContent, isDocsAgentDiscoveryRequest, isDocsMcpRequest, isDocsPublicGetRequest, isDocsSkillRequest, normalizeDocsPathSegment, normalizeDocsRelated, normalizeDocsUrlPath, normalizeGeneratedAgentContent, parseGeneratedAgentDocument, performDocsSearch, renderDocsMarkdownDocument, renderDocsRelatedMarkdownLines, renderDocsSkillDocument, resolveChangelogConfig, resolveDocsAgentMdxContent, resolveDocsI18n, resolveDocsLlmsTxtFormat, resolveDocsLocale, resolveDocsMarkdownRequest, resolveDocsPath, resolveDocsSkillFormat, resolveOGImage, resolvePageReadingTime, resolvePageSidebarFolderIndexBehavior, resolveReadingTimeFromContent, resolveReadingTimeFromSource, resolveReadingTimeOptions, resolveSearchRequestConfig, resolveSidebarFolderIndexBehavior, resolveSidebarFolderIndexBehaviorForPath, resolveTitle, serializeGeneratedAgentDocument, stripGeneratedAgentProvenance };
|
|
4
|
+
export { DEFAULT_AGENT_FEEDBACK_ROUTE, DEFAULT_AGENT_SPEC_ROUTE, DEFAULT_AGENT_SPEC_WELL_KNOWN_JSON_ROUTE, DEFAULT_AGENT_SPEC_WELL_KNOWN_ROUTE, DEFAULT_DOCS_API_ROUTE, DEFAULT_LLMS_FULL_TXT_ROUTE, DEFAULT_LLMS_FULL_TXT_WELL_KNOWN_ROUTE, DEFAULT_LLMS_TXT_ROUTE, DEFAULT_LLMS_TXT_WELL_KNOWN_ROUTE, DEFAULT_MCP_PUBLIC_ROUTE, DEFAULT_MCP_ROUTE, DEFAULT_MCP_WELL_KNOWN_ROUTE, DEFAULT_SKILL_MD_ROUTE, DEFAULT_SKILL_MD_WELL_KNOWN_ROUTE, GENERATED_AGENT_PROVENANCE_MARKER, GENERATED_AGENT_PROVENANCE_VERSION, applySidebarFolderIndexBehavior, buildDocsAgentDiscoverySpec, buildDocsSearchDocuments, buildPageOpenGraph, buildPageTwitter, createAlgoliaSearchAdapter, createCustomSearchAdapter, createMcpSearchAdapter, createSimpleSearchAdapter, createTheme, createTypesenseSearchAdapter, deepMerge, defineDocs, emitDocsAnalyticsEvent, estimateReadingTimeMinutes, extendTheme, findDocsMarkdownPage, hashGeneratedAgentContent, isDocsAgentDiscoveryRequest, isDocsMcpRequest, isDocsPublicGetRequest, isDocsSkillRequest, normalizeDocsPathSegment, normalizeDocsRelated, normalizeDocsUrlPath, normalizeGeneratedAgentContent, parseGeneratedAgentDocument, performDocsSearch, renderDocsMarkdownDocument, renderDocsRelatedMarkdownLines, renderDocsSkillDocument, resolveChangelogConfig, resolveDocsAgentMdxContent, resolveDocsAnalyticsConfig, resolveDocsI18n, resolveDocsLlmsTxtFormat, resolveDocsLocale, resolveDocsMarkdownRequest, resolveDocsPath, resolveDocsSkillFormat, resolveOGImage, resolvePageReadingTime, resolvePageSidebarFolderIndexBehavior, resolveReadingTimeFromContent, resolveReadingTimeFromSource, resolveReadingTimeOptions, resolveSearchRequestConfig, resolveSidebarFolderIndexBehavior, resolveSidebarFolderIndexBehaviorForPath, resolveTitle, serializeGeneratedAgentDocument, stripGeneratedAgentProvenance };
|
package/dist/mcp.d.mts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { N as DocsSearchConfig, Z as OrderingItem, m as DocsAnalyticsConfig, w as DocsMcpConfig, z as DocsSearchSourcePage } from "./types-DfiAeeHu.mjs";
|
|
2
2
|
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
3
3
|
|
|
4
4
|
//#region src/mcp.d.ts
|
|
@@ -68,6 +68,7 @@ interface CreateDocsMcpServerOptions {
|
|
|
68
68
|
source: DocsMcpSource;
|
|
69
69
|
mcp?: boolean | DocsMcpConfig;
|
|
70
70
|
search?: boolean | DocsSearchConfig;
|
|
71
|
+
analytics?: boolean | DocsAnalyticsConfig;
|
|
71
72
|
defaultName?: string;
|
|
72
73
|
defaultVersion?: string;
|
|
73
74
|
}
|
package/dist/mcp.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { _ as renderDocsRelatedMarkdownLines, g as normalizeDocsRelated, h as stripGeneratedAgentProvenance, s as performDocsSearch } from "./search-
|
|
1
|
+
import { _ as renderDocsRelatedMarkdownLines, g as normalizeDocsRelated, h as stripGeneratedAgentProvenance, s as performDocsSearch, v as emitDocsAnalyticsEvent } from "./search-Ds3jiS2n.mjs";
|
|
2
2
|
import matter from "gray-matter";
|
|
3
3
|
import fs from "node:fs";
|
|
4
4
|
import path from "node:path";
|
|
@@ -84,6 +84,12 @@ function createFilesystemDocsMcpSource(options = {}) {
|
|
|
84
84
|
getNavigation
|
|
85
85
|
};
|
|
86
86
|
}
|
|
87
|
+
function nowMs() {
|
|
88
|
+
return Date.now();
|
|
89
|
+
}
|
|
90
|
+
function durationMs(startedAt) {
|
|
91
|
+
return Math.max(0, Date.now() - startedAt);
|
|
92
|
+
}
|
|
87
93
|
async function createDocsMcpServer(options) {
|
|
88
94
|
const resolved = resolveDocsMcpConfig(options.mcp, {
|
|
89
95
|
defaultName: options.defaultName ?? options.source.siteTitle ?? DEFAULT_MCP_NAME,
|
|
@@ -123,7 +129,18 @@ async function createDocsMcpServer(options) {
|
|
|
123
129
|
inputSchema: listPagesInputSchema,
|
|
124
130
|
annotations: { readOnlyHint: true }
|
|
125
131
|
}, async ({ locale }) => {
|
|
132
|
+
const startedAt = nowMs();
|
|
126
133
|
const pages = toPageSummaries(dedupePages(await options.source.getPages(locale)));
|
|
134
|
+
await emitDocsAnalyticsEvent(options.analytics, {
|
|
135
|
+
type: "mcp_tool",
|
|
136
|
+
source: "mcp",
|
|
137
|
+
locale,
|
|
138
|
+
properties: {
|
|
139
|
+
tool: "list_pages",
|
|
140
|
+
resultCount: pages.length,
|
|
141
|
+
durationMs: durationMs(startedAt)
|
|
142
|
+
}
|
|
143
|
+
});
|
|
127
144
|
return { content: [{
|
|
128
145
|
type: "text",
|
|
129
146
|
text: JSON.stringify({ pages }, null, 2)
|
|
@@ -135,9 +152,20 @@ async function createDocsMcpServer(options) {
|
|
|
135
152
|
inputSchema: getNavigationInputSchema,
|
|
136
153
|
annotations: { readOnlyHint: true }
|
|
137
154
|
}, async ({ locale }) => {
|
|
155
|
+
const startedAt = nowMs();
|
|
156
|
+
const tree = await options.source.getNavigation(locale);
|
|
157
|
+
await emitDocsAnalyticsEvent(options.analytics, {
|
|
158
|
+
type: "mcp_tool",
|
|
159
|
+
source: "mcp",
|
|
160
|
+
locale,
|
|
161
|
+
properties: {
|
|
162
|
+
tool: "get_navigation",
|
|
163
|
+
durationMs: durationMs(startedAt)
|
|
164
|
+
}
|
|
165
|
+
});
|
|
138
166
|
return { content: [{
|
|
139
167
|
type: "text",
|
|
140
|
-
text: renderNavigationTree(
|
|
168
|
+
text: renderNavigationTree(tree)
|
|
141
169
|
}] };
|
|
142
170
|
});
|
|
143
171
|
if (resolved.tools.searchDocs) server.registerTool("search_docs", {
|
|
@@ -146,6 +174,7 @@ async function createDocsMcpServer(options) {
|
|
|
146
174
|
inputSchema: searchDocsInputSchema,
|
|
147
175
|
annotations: { readOnlyHint: true }
|
|
148
176
|
}, async ({ query, limit, locale }) => {
|
|
177
|
+
const startedAt = nowMs();
|
|
149
178
|
const results = await performDocsSearch({
|
|
150
179
|
pages: toSearchSourcePages(dedupePages(await options.source.getPages(locale))),
|
|
151
180
|
query,
|
|
@@ -154,6 +183,19 @@ async function createDocsMcpServer(options) {
|
|
|
154
183
|
siteTitle: options.source.siteTitle,
|
|
155
184
|
limit: limit ?? 10
|
|
156
185
|
});
|
|
186
|
+
await emitDocsAnalyticsEvent(options.analytics, {
|
|
187
|
+
type: "mcp_tool",
|
|
188
|
+
source: "mcp",
|
|
189
|
+
locale,
|
|
190
|
+
input: { query },
|
|
191
|
+
properties: {
|
|
192
|
+
tool: "search_docs",
|
|
193
|
+
queryLength: query.length,
|
|
194
|
+
limit: limit ?? 10,
|
|
195
|
+
resultCount: results.length,
|
|
196
|
+
durationMs: durationMs(startedAt)
|
|
197
|
+
}
|
|
198
|
+
});
|
|
157
199
|
return { content: [{
|
|
158
200
|
type: "text",
|
|
159
201
|
text: JSON.stringify({ results }, null, 2)
|
|
@@ -165,17 +207,73 @@ async function createDocsMcpServer(options) {
|
|
|
165
207
|
inputSchema: readPageInputSchema,
|
|
166
208
|
annotations: { readOnlyHint: true }
|
|
167
209
|
}, async ({ path: requestedPath, locale }) => {
|
|
210
|
+
const startedAt = nowMs();
|
|
168
211
|
const page = findDocsPage(dedupePages(await options.source.getPages(locale)), requestedPath, options.source.entry);
|
|
169
|
-
if (!page)
|
|
170
|
-
|
|
171
|
-
type: "
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
212
|
+
if (!page) {
|
|
213
|
+
await emitDocsAnalyticsEvent(options.analytics, {
|
|
214
|
+
type: "agent_read",
|
|
215
|
+
source: "mcp",
|
|
216
|
+
locale,
|
|
217
|
+
properties: {
|
|
218
|
+
delivery: "mcp_tool",
|
|
219
|
+
tool: "read_page",
|
|
220
|
+
requestedPath,
|
|
221
|
+
found: false,
|
|
222
|
+
durationMs: durationMs(startedAt)
|
|
223
|
+
}
|
|
224
|
+
});
|
|
225
|
+
await emitDocsAnalyticsEvent(options.analytics, {
|
|
226
|
+
type: "mcp_tool",
|
|
227
|
+
source: "mcp",
|
|
228
|
+
locale,
|
|
229
|
+
properties: {
|
|
230
|
+
tool: "read_page",
|
|
231
|
+
path: requestedPath,
|
|
232
|
+
found: false,
|
|
233
|
+
durationMs: durationMs(startedAt)
|
|
234
|
+
}
|
|
235
|
+
});
|
|
236
|
+
return {
|
|
237
|
+
content: [{
|
|
238
|
+
type: "text",
|
|
239
|
+
text: JSON.stringify({ error: `No docs page matched "${requestedPath}".` }, null, 2)
|
|
240
|
+
}],
|
|
241
|
+
isError: true
|
|
242
|
+
};
|
|
243
|
+
}
|
|
244
|
+
const document = renderPageDocument(page);
|
|
245
|
+
await emitDocsAnalyticsEvent(options.analytics, {
|
|
246
|
+
type: "agent_read",
|
|
247
|
+
source: "mcp",
|
|
248
|
+
locale,
|
|
249
|
+
path: page.url,
|
|
250
|
+
properties: {
|
|
251
|
+
delivery: "mcp_tool",
|
|
252
|
+
tool: "read_page",
|
|
253
|
+
requestedPath,
|
|
254
|
+
slug: page.slug,
|
|
255
|
+
found: true,
|
|
256
|
+
contentLength: document.length,
|
|
257
|
+
durationMs: durationMs(startedAt)
|
|
258
|
+
}
|
|
259
|
+
});
|
|
260
|
+
await emitDocsAnalyticsEvent(options.analytics, {
|
|
261
|
+
type: "mcp_tool",
|
|
262
|
+
source: "mcp",
|
|
263
|
+
locale,
|
|
264
|
+
path: page.url,
|
|
265
|
+
properties: {
|
|
266
|
+
tool: "read_page",
|
|
267
|
+
requestedPath,
|
|
268
|
+
slug: page.slug,
|
|
269
|
+
found: true,
|
|
270
|
+
contentLength: document.length,
|
|
271
|
+
durationMs: durationMs(startedAt)
|
|
272
|
+
}
|
|
273
|
+
});
|
|
176
274
|
return { content: [{
|
|
177
275
|
type: "text",
|
|
178
|
-
text:
|
|
276
|
+
text: document
|
|
179
277
|
}] };
|
|
180
278
|
});
|
|
181
279
|
return server;
|
|
@@ -213,6 +311,7 @@ function createDocsMcpHttpHandler(options) {
|
|
|
213
311
|
};
|
|
214
312
|
}
|
|
215
313
|
async function handle(request) {
|
|
314
|
+
const url = new URL(request.url);
|
|
216
315
|
const method = request.method.toUpperCase();
|
|
217
316
|
const sessionId = request.headers.get("mcp-session-id") ?? request.headers.get("Mcp-Session-Id");
|
|
218
317
|
const existing = sessionId ? sessions.get(sessionId) : void 0;
|
|
@@ -223,6 +322,17 @@ function createDocsMcpHttpHandler(options) {
|
|
|
223
322
|
parsedBody = void 0;
|
|
224
323
|
}
|
|
225
324
|
const initializeRequest = method === "POST" && parsedBody && isInitializeRequest(parsedBody);
|
|
325
|
+
await emitDocsAnalyticsEvent(options.analytics, {
|
|
326
|
+
type: "mcp_request",
|
|
327
|
+
source: "mcp",
|
|
328
|
+
url: request.url,
|
|
329
|
+
path: url.pathname,
|
|
330
|
+
properties: {
|
|
331
|
+
method,
|
|
332
|
+
hasSession: Boolean(existing),
|
|
333
|
+
initialize: Boolean(initializeRequest)
|
|
334
|
+
}
|
|
335
|
+
});
|
|
226
336
|
if (!existing) {
|
|
227
337
|
if (!initializeRequest) return createJsonErrorResponse(method === "DELETE" ? 404 : 400, "MCP session not initialized. Start with an initialize request against this endpoint.");
|
|
228
338
|
return (await createSession()).transport.handleRequest(request, parsedBody === void 0 ? void 0 : { parsedBody });
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { n as createAlgoliaSearchAdapter, o as createTypesenseSearchAdapter, t as buildDocsSearchDocuments } from "./search-
|
|
1
|
+
import { n as createAlgoliaSearchAdapter, o as createTypesenseSearchAdapter, t as buildDocsSearchDocuments } from "./search-Ds3jiS2n.mjs";
|
|
2
2
|
import "./prompt-utils-8nmFLQVH.mjs";
|
|
3
3
|
import { createFilesystemDocsMcpSource } from "./mcp.mjs";
|
|
4
4
|
import "./server.mjs";
|
|
@@ -1,3 +1,52 @@
|
|
|
1
|
+
//#region src/analytics.ts
|
|
2
|
+
function resolveConsoleLevel(value, hasEventHandler) {
|
|
3
|
+
if (value === false) return false;
|
|
4
|
+
if (value === true) return "info";
|
|
5
|
+
if (value === "log" || value === "info" || value === "debug") return value;
|
|
6
|
+
return hasEventHandler ? false : "info";
|
|
7
|
+
}
|
|
8
|
+
function resolveDocsAnalyticsConfig(analytics) {
|
|
9
|
+
if (!analytics) return {
|
|
10
|
+
enabled: false,
|
|
11
|
+
console: false,
|
|
12
|
+
includeInputs: false
|
|
13
|
+
};
|
|
14
|
+
if (analytics === true) return {
|
|
15
|
+
enabled: true,
|
|
16
|
+
console: "info",
|
|
17
|
+
includeInputs: false
|
|
18
|
+
};
|
|
19
|
+
const hasEventHandler = typeof analytics.onEvent === "function";
|
|
20
|
+
return {
|
|
21
|
+
enabled: analytics.enabled !== false,
|
|
22
|
+
console: resolveConsoleLevel(analytics.console, hasEventHandler),
|
|
23
|
+
includeInputs: analytics.includeInputs === true,
|
|
24
|
+
onEvent: analytics.onEvent
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
function normalizeAnalyticsEvent(event, config) {
|
|
28
|
+
const normalized = {
|
|
29
|
+
...event,
|
|
30
|
+
source: event.source ?? "server",
|
|
31
|
+
timestamp: event.timestamp ?? (/* @__PURE__ */ new Date()).toISOString()
|
|
32
|
+
};
|
|
33
|
+
if (!config.includeInputs && normalized.input) delete normalized.input;
|
|
34
|
+
return normalized;
|
|
35
|
+
}
|
|
36
|
+
async function emitDocsAnalyticsEvent(analytics, event) {
|
|
37
|
+
const resolved = resolveDocsAnalyticsConfig(analytics);
|
|
38
|
+
if (!resolved.enabled) return;
|
|
39
|
+
const normalized = normalizeAnalyticsEvent(event, resolved);
|
|
40
|
+
if (resolved.console) (console[resolved.console] ?? console.info).call(console, "[farming-labs:analytics]", normalized);
|
|
41
|
+
if (!resolved.onEvent) return;
|
|
42
|
+
try {
|
|
43
|
+
await resolved.onEvent(normalized);
|
|
44
|
+
} catch (error) {
|
|
45
|
+
if (resolved.console !== false) console.warn("[farming-labs:analytics] onEvent failed", error);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
//#endregion
|
|
1
50
|
//#region src/related.ts
|
|
2
51
|
function normalizeDocsRelated(value) {
|
|
3
52
|
if (!Array.isArray(value)) return [];
|
|
@@ -793,4 +842,4 @@ function createCustomSearchAdapter(adapter) {
|
|
|
793
842
|
}
|
|
794
843
|
|
|
795
844
|
//#endregion
|
|
796
|
-
export { renderDocsRelatedMarkdownLines as _, createSimpleSearchAdapter as a, resolveSearchRequestConfig as c, hashGeneratedAgentContent as d, normalizeGeneratedAgentContent as f, normalizeDocsRelated as g, stripGeneratedAgentProvenance as h, createMcpSearchAdapter as i, GENERATED_AGENT_PROVENANCE_MARKER as l, serializeGeneratedAgentDocument as m, createAlgoliaSearchAdapter as n, createTypesenseSearchAdapter as o, parseGeneratedAgentDocument as p, createCustomSearchAdapter as r, performDocsSearch as s, buildDocsSearchDocuments as t, GENERATED_AGENT_PROVENANCE_VERSION as u };
|
|
845
|
+
export { renderDocsRelatedMarkdownLines as _, createSimpleSearchAdapter as a, resolveSearchRequestConfig as c, hashGeneratedAgentContent as d, normalizeGeneratedAgentContent as f, normalizeDocsRelated as g, stripGeneratedAgentProvenance as h, createMcpSearchAdapter as i, GENERATED_AGENT_PROVENANCE_MARKER as l, serializeGeneratedAgentDocument as m, createAlgoliaSearchAdapter as n, createTypesenseSearchAdapter as o, parseGeneratedAgentDocument as p, createCustomSearchAdapter as r, performDocsSearch as s, buildDocsSearchDocuments as t, GENERATED_AGENT_PROVENANCE_VERSION as u, emitDocsAnalyticsEvent as v, resolveDocsAnalyticsConfig as y };
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { K as McpDocsSearchConfig, L as DocsSearchResult, M as DocsSearchChunkingConfig, N as DocsSearchConfig, P as DocsSearchDocument, d as CustomDocsSearchConfig, g as DocsAnalyticsEventInput, h as DocsAnalyticsEvent, j as DocsSearchAdapterFactory, k as DocsSearchAdapter, m as DocsAnalyticsConfig, mt as TypesenseDocsSearchConfig, r as AlgoliaDocsSearchConfig, z as DocsSearchSourcePage } from "./types-DfiAeeHu.mjs";
|
|
2
|
+
|
|
3
|
+
//#region src/analytics.d.ts
|
|
4
|
+
interface ResolvedDocsAnalyticsConfig {
|
|
5
|
+
enabled: boolean;
|
|
6
|
+
console: false | "log" | "info" | "debug";
|
|
7
|
+
includeInputs: boolean;
|
|
8
|
+
onEvent?: (event: DocsAnalyticsEvent) => void | Promise<void>;
|
|
9
|
+
}
|
|
10
|
+
declare function resolveDocsAnalyticsConfig(analytics?: boolean | DocsAnalyticsConfig): ResolvedDocsAnalyticsConfig;
|
|
11
|
+
declare function emitDocsAnalyticsEvent(analytics: boolean | DocsAnalyticsConfig | undefined, event: DocsAnalyticsEventInput): Promise<void>;
|
|
12
|
+
//#endregion
|
|
13
|
+
//#region src/search.d.ts
|
|
14
|
+
declare function buildDocsSearchDocuments(pages: DocsSearchSourcePage[], chunking?: DocsSearchChunkingConfig): DocsSearchDocument[];
|
|
15
|
+
declare function createSimpleSearchAdapter(): DocsSearchAdapter;
|
|
16
|
+
declare function createTypesenseSearchAdapter(config: TypesenseDocsSearchConfig): DocsSearchAdapter;
|
|
17
|
+
declare function resolveSearchRequestConfig(search: boolean | DocsSearchConfig | undefined, requestUrl?: string): boolean | DocsSearchConfig | undefined;
|
|
18
|
+
declare function createMcpSearchAdapter(config: McpDocsSearchConfig): DocsSearchAdapter;
|
|
19
|
+
declare function createAlgoliaSearchAdapter(config: AlgoliaDocsSearchConfig): DocsSearchAdapter;
|
|
20
|
+
declare function performDocsSearch(options: {
|
|
21
|
+
pages: DocsSearchSourcePage[];
|
|
22
|
+
query: string;
|
|
23
|
+
search?: boolean | DocsSearchConfig;
|
|
24
|
+
locale?: string;
|
|
25
|
+
pathname?: string;
|
|
26
|
+
siteTitle?: string;
|
|
27
|
+
limit?: number;
|
|
28
|
+
}): Promise<DocsSearchResult[]>;
|
|
29
|
+
declare function createCustomSearchAdapter(adapter: DocsSearchAdapter | DocsSearchAdapterFactory): CustomDocsSearchConfig;
|
|
30
|
+
//#endregion
|
|
31
|
+
export { createSimpleSearchAdapter as a, resolveSearchRequestConfig as c, resolveDocsAnalyticsConfig as d, createMcpSearchAdapter as i, ResolvedDocsAnalyticsConfig as l, createAlgoliaSearchAdapter as n, createTypesenseSearchAdapter as o, createCustomSearchAdapter as r, performDocsSearch as s, buildDocsSearchDocuments as t, emitDocsAnalyticsEvent as u };
|
package/dist/server.d.mts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { A as DocsSearchQuery,
|
|
1
|
+
import { A as DocsSearchAdapterContext, I as DocsSearchQuery, K as McpDocsSearchConfig, L as DocsSearchResult, N as DocsSearchConfig, P as DocsSearchDocument, Y as OpenDocsProvider, a as ApiReferenceRenderer, b as DocsConfig, g as DocsAnalyticsEventInput, h as DocsAnalyticsEvent, j as DocsSearchAdapterFactory, k as DocsSearchAdapter, m as DocsAnalyticsConfig, z as DocsSearchSourcePage } from "./types-DfiAeeHu.mjs";
|
|
2
|
+
import { a as createSimpleSearchAdapter, c as resolveSearchRequestConfig, d as resolveDocsAnalyticsConfig, i as createMcpSearchAdapter, l as ResolvedDocsAnalyticsConfig, n as createAlgoliaSearchAdapter, o as createTypesenseSearchAdapter, r as createCustomSearchAdapter, s as performDocsSearch, t as buildDocsSearchDocuments, u as emitDocsAnalyticsEvent } from "./search-HlwTDHCK.mjs";
|
|
2
3
|
import { DocsMcpHttpHandlers, DocsMcpNavigationNode, DocsMcpNavigationTree, DocsMcpPage, DocsMcpResolvedConfig, DocsMcpSource, createDocsMcpHttpHandler, createDocsMcpServer, createFilesystemDocsMcpSource, normalizeDocsMcpRoute, resolveDocsMcpConfig, runDocsMcpStdio } from "./mcp.mjs";
|
|
3
|
-
import { a as createSimpleSearchAdapter, c as resolveSearchRequestConfig, i as createMcpSearchAdapter, n as createAlgoliaSearchAdapter, o as createTypesenseSearchAdapter, r as createCustomSearchAdapter, s as performDocsSearch, t as buildDocsSearchDocuments } from "./search-COePaQmH.mjs";
|
|
4
4
|
|
|
5
5
|
//#region src/api-reference.d.ts
|
|
6
6
|
type HttpMethod = "GET" | "POST" | "PUT" | "PATCH" | "DELETE" | "OPTIONS" | "HEAD";
|
|
@@ -63,4 +63,4 @@ declare function parsePromptStringArray(value: unknown): string[] | undefined;
|
|
|
63
63
|
declare function resolvePromptProviderChoices(availableProviders?: PromptProviderInput[], preferredNames?: string[]): PromptProviderChoice[];
|
|
64
64
|
declare function sanitizePromptText(text: string): string;
|
|
65
65
|
//#endregion
|
|
66
|
-
export { type ApiReferenceFramework, type ApiReferenceRenderer, type ApiReferenceRoute, DEFAULT_PROMPT_PROVIDER_TEMPLATES, type DocsMcpHttpHandlers, type DocsMcpNavigationNode, type DocsMcpNavigationTree, type DocsMcpPage, type DocsMcpResolvedConfig, type DocsMcpSource, type DocsSearchAdapter, type DocsSearchAdapterContext, type DocsSearchAdapterFactory, type DocsSearchConfig, type DocsSearchDocument, type DocsSearchQuery, type DocsSearchResult, type DocsSearchSourcePage, type McpDocsSearchConfig, type PromptAction, type PromptProviderChoice, type ResolvedApiReferenceConfig, type SerializedOpenDocsProvider, buildApiReferenceHtmlDocument, buildApiReferenceHtmlDocumentAsync, buildApiReferenceOpenApiDocument, buildApiReferenceOpenApiDocumentAsync, buildApiReferencePageTitle, buildApiReferenceScalarCss, buildDocsSearchDocuments, createAlgoliaSearchAdapter, createCustomSearchAdapter, createDocsMcpHttpHandler, createDocsMcpServer, createFilesystemDocsMcpSource, createMcpSearchAdapter, createSimpleSearchAdapter, createTypesenseSearchAdapter, normalizeDocsMcpRoute, normalizePromptProviderName, parsePromptStringArray, performDocsSearch, resolveApiReferenceConfig, resolveApiReferenceRenderer, resolveDocsMcpConfig, resolvePromptProviderChoices, resolveSearchRequestConfig, runDocsMcpStdio, sanitizePromptText, serializeDocsIcon, serializeDocsIconRegistry, serializeOpenDocsProviders };
|
|
66
|
+
export { type ApiReferenceFramework, type ApiReferenceRenderer, type ApiReferenceRoute, DEFAULT_PROMPT_PROVIDER_TEMPLATES, type DocsAnalyticsConfig, type DocsAnalyticsEvent, type DocsAnalyticsEventInput, type DocsMcpHttpHandlers, type DocsMcpNavigationNode, type DocsMcpNavigationTree, type DocsMcpPage, type DocsMcpResolvedConfig, type DocsMcpSource, type DocsSearchAdapter, type DocsSearchAdapterContext, type DocsSearchAdapterFactory, type DocsSearchConfig, type DocsSearchDocument, type DocsSearchQuery, type DocsSearchResult, type DocsSearchSourcePage, type McpDocsSearchConfig, type PromptAction, type PromptProviderChoice, type ResolvedApiReferenceConfig, type ResolvedDocsAnalyticsConfig, type SerializedOpenDocsProvider, buildApiReferenceHtmlDocument, buildApiReferenceHtmlDocumentAsync, buildApiReferenceOpenApiDocument, buildApiReferenceOpenApiDocumentAsync, buildApiReferencePageTitle, buildApiReferenceScalarCss, buildDocsSearchDocuments, createAlgoliaSearchAdapter, createCustomSearchAdapter, createDocsMcpHttpHandler, createDocsMcpServer, createFilesystemDocsMcpSource, createMcpSearchAdapter, createSimpleSearchAdapter, createTypesenseSearchAdapter, emitDocsAnalyticsEvent, normalizeDocsMcpRoute, normalizePromptProviderName, parsePromptStringArray, performDocsSearch, resolveApiReferenceConfig, resolveApiReferenceRenderer, resolveDocsAnalyticsConfig, resolveDocsMcpConfig, resolvePromptProviderChoices, resolveSearchRequestConfig, runDocsMcpStdio, sanitizePromptText, serializeDocsIcon, serializeDocsIconRegistry, serializeOpenDocsProviders };
|
package/dist/server.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { a as createSimpleSearchAdapter, c as resolveSearchRequestConfig, i as createMcpSearchAdapter, n as createAlgoliaSearchAdapter, o as createTypesenseSearchAdapter, r as createCustomSearchAdapter, s as performDocsSearch, t as buildDocsSearchDocuments } from "./search-
|
|
1
|
+
import { a as createSimpleSearchAdapter, c as resolveSearchRequestConfig, i as createMcpSearchAdapter, n as createAlgoliaSearchAdapter, o as createTypesenseSearchAdapter, r as createCustomSearchAdapter, s as performDocsSearch, t as buildDocsSearchDocuments, v as emitDocsAnalyticsEvent, y as resolveDocsAnalyticsConfig } from "./search-Ds3jiS2n.mjs";
|
|
2
2
|
import { a as sanitizePromptText, c as serializeOpenDocsProviders, d as buildApiReferenceOpenApiDocument, f as buildApiReferenceOpenApiDocumentAsync, g as resolveApiReferenceRenderer, h as resolveApiReferenceConfig, i as resolvePromptProviderChoices, l as buildApiReferenceHtmlDocument, m as buildApiReferenceScalarCss, n as normalizePromptProviderName, o as serializeDocsIcon, p as buildApiReferencePageTitle, r as parsePromptStringArray, s as serializeDocsIconRegistry, t as DEFAULT_PROMPT_PROVIDER_TEMPLATES, u as buildApiReferenceHtmlDocumentAsync } from "./prompt-utils-8nmFLQVH.mjs";
|
|
3
3
|
import { createDocsMcpHttpHandler, createDocsMcpServer, createFilesystemDocsMcpSource, normalizeDocsMcpRoute, resolveDocsMcpConfig, runDocsMcpStdio } from "./mcp.mjs";
|
|
4
4
|
|
|
5
|
-
export { DEFAULT_PROMPT_PROVIDER_TEMPLATES, buildApiReferenceHtmlDocument, buildApiReferenceHtmlDocumentAsync, buildApiReferenceOpenApiDocument, buildApiReferenceOpenApiDocumentAsync, buildApiReferencePageTitle, buildApiReferenceScalarCss, buildDocsSearchDocuments, createAlgoliaSearchAdapter, createCustomSearchAdapter, createDocsMcpHttpHandler, createDocsMcpServer, createFilesystemDocsMcpSource, createMcpSearchAdapter, createSimpleSearchAdapter, createTypesenseSearchAdapter, normalizeDocsMcpRoute, normalizePromptProviderName, parsePromptStringArray, performDocsSearch, resolveApiReferenceConfig, resolveApiReferenceRenderer, resolveDocsMcpConfig, resolvePromptProviderChoices, resolveSearchRequestConfig, runDocsMcpStdio, sanitizePromptText, serializeDocsIcon, serializeDocsIconRegistry, serializeOpenDocsProviders };
|
|
5
|
+
export { DEFAULT_PROMPT_PROVIDER_TEMPLATES, buildApiReferenceHtmlDocument, buildApiReferenceHtmlDocumentAsync, buildApiReferenceOpenApiDocument, buildApiReferenceOpenApiDocumentAsync, buildApiReferencePageTitle, buildApiReferenceScalarCss, buildDocsSearchDocuments, createAlgoliaSearchAdapter, createCustomSearchAdapter, createDocsMcpHttpHandler, createDocsMcpServer, createFilesystemDocsMcpSource, createMcpSearchAdapter, createSimpleSearchAdapter, createTypesenseSearchAdapter, emitDocsAnalyticsEvent, normalizeDocsMcpRoute, normalizePromptProviderName, parsePromptStringArray, performDocsSearch, resolveApiReferenceConfig, resolveApiReferenceRenderer, resolveDocsAnalyticsConfig, resolveDocsMcpConfig, resolvePromptProviderChoices, resolveSearchRequestConfig, runDocsMcpStdio, sanitizePromptText, serializeDocsIcon, serializeDocsIconRegistry, serializeOpenDocsProviders };
|
|
@@ -630,6 +630,50 @@ interface PageActionsConfig {
|
|
|
630
630
|
*/
|
|
631
631
|
alignment?: "left" | "right";
|
|
632
632
|
}
|
|
633
|
+
type DocsAnalyticsSource = "client" | "server" | "mcp";
|
|
634
|
+
type DocsAnalyticsEventType = "page_view" | "search_open" | "search_close" | "search_query" | "search_result_click" | "search_error" | "ai_open" | "ai_close" | "ai_question" | "ai_response" | "ai_error" | "ai_clear" | "page_action_copy_markdown" | "page_action_open_docs_menu" | "page_action_open_docs" | "code_block_copy" | "feedback_select" | "feedback_submit" | "feedback_error" | "agent_read" | "agent_spec_request" | "agent_feedback_schema" | "agent_feedback_submit" | "agent_feedback_error" | "markdown_request" | "llms_request" | "skill_request" | "api_search" | "api_ai_request" | "api_ai_response" | "api_ai_error" | "mcp_request" | "mcp_tool";
|
|
635
|
+
interface DocsAnalyticsInput {
|
|
636
|
+
query?: string;
|
|
637
|
+
question?: string;
|
|
638
|
+
feedbackComment?: string;
|
|
639
|
+
content?: string;
|
|
640
|
+
}
|
|
641
|
+
interface DocsAnalyticsEvent {
|
|
642
|
+
type: DocsAnalyticsEventType | (string & {});
|
|
643
|
+
timestamp: string;
|
|
644
|
+
source: DocsAnalyticsSource;
|
|
645
|
+
url?: string;
|
|
646
|
+
path?: string;
|
|
647
|
+
referrer?: string;
|
|
648
|
+
locale?: string;
|
|
649
|
+
input?: DocsAnalyticsInput;
|
|
650
|
+
properties?: Record<string, unknown>;
|
|
651
|
+
}
|
|
652
|
+
type DocsAnalyticsEventInput = Omit<DocsAnalyticsEvent, "timestamp" | "source"> & {
|
|
653
|
+
timestamp?: string;
|
|
654
|
+
source?: DocsAnalyticsSource;
|
|
655
|
+
};
|
|
656
|
+
interface DocsAnalyticsConfig {
|
|
657
|
+
/** Enable analytics event emission. Defaults to `true` when this object is provided. */
|
|
658
|
+
enabled?: boolean;
|
|
659
|
+
/**
|
|
660
|
+
* Log analytics events to the console.
|
|
661
|
+
*
|
|
662
|
+
* `analytics: true` logs with `console.info`. When `onEvent` is provided,
|
|
663
|
+
* console logging is disabled unless this is set.
|
|
664
|
+
*/
|
|
665
|
+
console?: boolean | "log" | "info" | "debug";
|
|
666
|
+
/**
|
|
667
|
+
* Include raw search queries, AI questions, feedback comments, and copied
|
|
668
|
+
* content in emitted events.
|
|
669
|
+
*
|
|
670
|
+
* Defaults to `false`; events still include safe metadata such as lengths,
|
|
671
|
+
* counts, routes, status, and duration.
|
|
672
|
+
*/
|
|
673
|
+
includeInputs?: boolean;
|
|
674
|
+
/** Callback fired for every analytics event. */
|
|
675
|
+
onEvent?: (event: DocsAnalyticsEvent) => void | Promise<void>;
|
|
676
|
+
}
|
|
633
677
|
/**
|
|
634
678
|
* Configuration for the "Last updated" date display.
|
|
635
679
|
*
|
|
@@ -1624,6 +1668,17 @@ interface DocsConfig {
|
|
|
1624
1668
|
staticExport?: boolean;
|
|
1625
1669
|
/** Theme configuration - single source of truth for UI */
|
|
1626
1670
|
theme?: DocsTheme;
|
|
1671
|
+
/**
|
|
1672
|
+
* Built-in analytics event stream for docs interactions.
|
|
1673
|
+
*
|
|
1674
|
+
* - `false` or omitted -> analytics disabled (default)
|
|
1675
|
+
* - `true` -> log all framework events to the console
|
|
1676
|
+
* - `{ onEvent(event) { ... } }` -> send events to your analytics sink
|
|
1677
|
+
*
|
|
1678
|
+
* Raw queries, AI questions, feedback comments, and copied content are not
|
|
1679
|
+
* included unless `includeInputs: true` is set.
|
|
1680
|
+
*/
|
|
1681
|
+
analytics?: boolean | DocsAnalyticsConfig;
|
|
1627
1682
|
/**
|
|
1628
1683
|
* GitHub repository URL or config. Enables "Edit on GitHub" links
|
|
1629
1684
|
* on each docs page footer, pointing to the source `.mdx` file.
|
|
@@ -1989,4 +2044,4 @@ interface DocsConfig {
|
|
|
1989
2044
|
og?: OGConfig;
|
|
1990
2045
|
}
|
|
1991
2046
|
//#endregion
|
|
1992
|
-
export {
|
|
2047
|
+
export { PageFrontmatter as $, DocsSearchAdapterContext as A, DocsTheme as B, DocsI18nConfig as C, DocsNav as D, DocsMetadata as E, DocsSearchEmbeddingsConfig as F, LlmsTxtConfig as G, FontStyle as H, DocsSearchQuery as I, OpenDocsConfig as J, McpDocsSearchConfig as K, DocsSearchResult as L, DocsSearchChunkingConfig as M, DocsSearchConfig as N, DocsRelatedItem as O, DocsSearchDocument as P, PageActionsConfig as Q, DocsSearchResultType as R, DocsFeedbackValue as S, DocsMcpToolsConfig as T, GithubConfig as U, FeedbackConfig as V, LastUpdatedConfig as W, OpenGraphImage as X, OpenDocsProvider as Y, OrderingItem as Z, DocsAnalyticsEventType as _, ApiReferenceRenderer as a, SidebarComponentProps as at, DocsConfig as b, ChangelogFrontmatter as c, SidebarFolderNode as ct, CustomDocsSearchConfig as d, SidebarTree as dt, PageOpenGraph as et, DocsAgentFeedbackContext as f, SimpleDocsSearchConfig as ft, DocsAnalyticsEventInput as g, UIConfig as gt, DocsAnalyticsEvent as h, TypographyConfig as ht, ApiReferenceConfig as i, ResolvedDocsRelatedLink as it, DocsSearchAdapterFactory as j, DocsSearchAdapter as k, CodeBlockCopyData as l, SidebarNode as lt, DocsAnalyticsConfig as m, TypesenseDocsSearchConfig as mt, AgentFeedbackConfig as n, PageTwitter as nt, BreadcrumbConfig as o, SidebarConfig as ot, DocsAgentFeedbackData as p, ThemeToggleConfig as pt, OGConfig as q, AlgoliaDocsSearchConfig as r, ReadingTimeConfig as rt, ChangelogConfig as s, SidebarFolderIndexBehavior as st, AIConfig as t, PageSidebarFrontmatter as tt, CopyMarkdownConfig as u, SidebarPageNode as ut, DocsAnalyticsInput as v, DocsMcpConfig as w, DocsFeedbackData as x, DocsAnalyticsSource as y, DocsSearchSourcePage as z };
|
package/package.json
CHANGED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import { B as McpDocsSearchConfig, C as DocsSearchAdapter, D as DocsSearchConfig, E as DocsSearchChunkingConfig, N as DocsSearchSourcePage, O as DocsSearchDocument, T as DocsSearchAdapterFactory, ct as TypesenseDocsSearchConfig, d as CustomDocsSearchConfig, j as DocsSearchResult, r as AlgoliaDocsSearchConfig } from "./types-G-xf-4_c.mjs";
|
|
2
|
-
|
|
3
|
-
//#region src/search.d.ts
|
|
4
|
-
declare function buildDocsSearchDocuments(pages: DocsSearchSourcePage[], chunking?: DocsSearchChunkingConfig): DocsSearchDocument[];
|
|
5
|
-
declare function createSimpleSearchAdapter(): DocsSearchAdapter;
|
|
6
|
-
declare function createTypesenseSearchAdapter(config: TypesenseDocsSearchConfig): DocsSearchAdapter;
|
|
7
|
-
declare function resolveSearchRequestConfig(search: boolean | DocsSearchConfig | undefined, requestUrl?: string): boolean | DocsSearchConfig | undefined;
|
|
8
|
-
declare function createMcpSearchAdapter(config: McpDocsSearchConfig): DocsSearchAdapter;
|
|
9
|
-
declare function createAlgoliaSearchAdapter(config: AlgoliaDocsSearchConfig): DocsSearchAdapter;
|
|
10
|
-
declare function performDocsSearch(options: {
|
|
11
|
-
pages: DocsSearchSourcePage[];
|
|
12
|
-
query: string;
|
|
13
|
-
search?: boolean | DocsSearchConfig;
|
|
14
|
-
locale?: string;
|
|
15
|
-
pathname?: string;
|
|
16
|
-
siteTitle?: string;
|
|
17
|
-
limit?: number;
|
|
18
|
-
}): Promise<DocsSearchResult[]>;
|
|
19
|
-
declare function createCustomSearchAdapter(adapter: DocsSearchAdapter | DocsSearchAdapterFactory): CustomDocsSearchConfig;
|
|
20
|
-
//#endregion
|
|
21
|
-
export { createSimpleSearchAdapter as a, resolveSearchRequestConfig as c, createMcpSearchAdapter as i, createAlgoliaSearchAdapter as n, createTypesenseSearchAdapter as o, createCustomSearchAdapter as r, performDocsSearch as s, buildDocsSearchDocuments as t };
|