@farming-labs/theme 0.2.75 → 0.2.77

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.
Files changed (2) hide show
  1. package/dist/docs-api.mjs +31 -23
  2. package/package.json +2 -2
package/dist/docs-api.mjs CHANGED
@@ -4,8 +4,8 @@ import { BoundedRouteCache } from "./bounded-route-cache.mjs";
4
4
  import fs from "node:fs";
5
5
  import path from "node:path";
6
6
  import matter from "gray-matter";
7
- import { DEFAULT_A2A_AGENT_CARD_ROUTE, DEFAULT_AGENT_SKILLS_ARCHIVE_ROUTE_PATTERN, DEFAULT_AGENT_SKILLS_INDEX_ROUTE, DEFAULT_AGENT_SKILLS_ROUTE_PREFIX, DEFAULT_API_CATALOG_ROUTE, DEFAULT_LEGACY_SKILLS_INDEX_ROUTE, DEFAULT_SITEMAP_MD_DOCS_ROUTE, DOCS_AGENT_MANIFEST_FORMAT, DOCS_AGENT_MANIFEST_SCHEMA_URI, DOCS_AGENT_MANIFEST_VERSION, DOCS_MARKDOWN_SECTION_INDEX_FORMAT, acceptsDocsMarkdown, buildDocsAskAIContext, buildDocsConfigMap, buildDocsDiagnostics, createDocsAgentTraceContext, createDocsAgentTraceId, createDocsMarkdownResponse, createDocsRobotsResponse, createDocsSitemapResponse, createDocsStandardsDiscoveryResponse, detectDocsMarkdownAgentRequest, emitDocsAgentTraceEvent, emitDocsAnalyticsEvent, emitDocsTelemetryAgentSurfaceEvent, emitDocsTelemetryProjectEvent, formatDocsAskAIPackageHints, getDocsAgentManifestLinkHeader, getDocsDiscoveryLinkHeader, getDocsLlmsTxtMaxCharsIssue, getDocsMcpProtectedResourceMetadataRoutes, hasDocsMarkdownSignatureAgent, inferDocsTelemetryAgentSurface, isDocsConfigRequest, isDocsDiagnosticsRequest, normalizeDocsRelated, normalizePageAgentFrontmatter, performDocsSearch, performDocsSearchWithMetadata, renderDocsLlmsTxt, renderDocsMarkdownDocument, resolveAskAISearchRequestConfig, resolveChangelogConfig, resolveDocsAgentContractMcpTools, resolveDocsAudienceMdxContent, resolveDocsI18n, resolveDocsLlmsTxtRequest, resolveDocsLlmsTxtSections, resolveDocsLocale, resolveDocsMetadataBaseUrl, resolveDocsPublishedAgentSkill, resolveDocsRequestApiRoute, resolveDocsRetrievalLastModified, resolveDocsSearchAudience, resolveDocsSearchFilters, resolveDocsSitemapConfig, resolveDocsStandardsDiscoveryRequest, resolvePageSidebarFolderIndexBehavior, resolveSearchRequestConfig, selectDocsLlmsTxtContent, stripGeneratedAgentProvenance } from "@farming-labs/docs";
8
- import { buildApiReferenceOpenApiDocumentAsync, createDocsMcpHttpHandler, createFilesystemDocsMcpSource, readDocsSitemapManifest, resolveApiReferenceConfig, resolveConfiguredAgentSkills, resolveDocsMcpConfig } from "@farming-labs/docs/server";
7
+ import { DEFAULT_A2A_AGENT_CARD_ROUTE, DEFAULT_AGENT_SKILLS_ARCHIVE_ROUTE_PATTERN, DEFAULT_AGENT_SKILLS_INDEX_ROUTE, DEFAULT_AGENT_SKILLS_ROUTE_PREFIX, DEFAULT_API_CATALOG_ROUTE, DEFAULT_LEGACY_SKILLS_INDEX_ROUTE, DEFAULT_SITEMAP_MD_DOCS_ROUTE, DOCS_AGENT_MANIFEST_FORMAT, DOCS_AGENT_MANIFEST_SCHEMA_URI, DOCS_AGENT_MANIFEST_VERSION, DOCS_MARKDOWN_SECTION_INDEX_FORMAT, acceptsDocsMarkdown, buildDocsAskAIContext, buildDocsConfigMap, buildDocsDiagnostics, createDocsAgentTraceContext, createDocsAgentTraceId, createDocsMarkdownResponse, createDocsRobotsResponse, createDocsSitemapResponse, createDocsStandardsDiscoveryResponse, detectDocsMarkdownAgentRequest, emitDocsAgentTraceEvent, emitDocsAnalyticsEvent, emitDocsTelemetryAgentSurfaceEvent, emitDocsTelemetryProjectEvent, formatDocsAskAIPackageHints, getDocsAgentManifestLinkHeader, getDocsDiscoveryLinkHeader, getDocsLlmsTxtMaxCharsIssue, getDocsMcpProtectedResourceMetadataRoutes, hasDocsMarkdownSignatureAgent, inferDocsTelemetryAgentSurface, isDocsConfigRequest, isDocsDiagnosticsRequest, normalizeDocsRelated, normalizePageAgentFrontmatter, performDocsSearch, performDocsSearchWithMetadata, renderDocsLlmsTxt, renderDocsMarkdownDocument, resolveAskAISearchRequestConfig, resolveChangelogConfig, resolveDocsAgentContractMcpTools, resolveDocsAudienceMdxContent, resolveDocsI18n, resolveDocsLlmsTxtRequest, resolveDocsLlmsTxtSections, resolveDocsLocale, resolveDocsMetadataBaseUrl, resolveDocsPublishedAgentSkill, resolveDocsRequestApiRoute, resolveDocsRetrievalLastModified, resolveDocsSearchAudience, resolveDocsSearchError, resolveDocsSearchRequest, resolveDocsSitemapConfig, resolveDocsStandardsDiscoveryRequest, resolvePageSidebarFolderIndexBehavior, resolveSearchRequestConfig, selectDocsLlmsTxtContent, stripGeneratedAgentProvenance } from "@farming-labs/docs";
8
+ import { buildApiReferenceOpenApiDocumentAsync, createDocsMcpHttpHandler, createFilesystemDocsMcpSource, readDocsSitemapManifest, resolveApiReferenceOpenApiDiscovery, resolveConfiguredAgentSkills, resolveDocsMcpConfig } from "@farming-labs/docs/server";
9
9
 
10
10
  //#region src/docs-api.ts
11
11
  /**
@@ -197,18 +197,6 @@ function isRobotsDiscoveryEnabled(robots) {
197
197
  function isApiReferenceOpenApiRequest(url) {
198
198
  return url.searchParams.get("format")?.trim() === "openapi";
199
199
  }
200
- function resolveApiReferenceOpenApiDiscovery(value) {
201
- const apiReference = resolveApiReferenceConfig(value);
202
- if (!apiReference.enabled) return { enabled: false };
203
- return {
204
- enabled: true,
205
- url: `${DEFAULT_DOCS_API_ROUTE}?format=openapi`,
206
- urlSource: "default",
207
- source: apiReference.specUrl ? "configured" : "generated",
208
- specUrl: apiReference.specUrl,
209
- apiReferencePath: `/${apiReference.path}`
210
- };
211
- }
212
200
  function buildAgentSpec({ origin, entry, apiRoute, apiCatalog, i18n, search, mcp, feedback, llms, sitemap, robots, openapi, publishedSkills = [], agentCard }) {
213
201
  const normalizedEntry = normalizePathSegment(entry) || "docs";
214
202
  const localesEnabled = i18n !== null;
@@ -426,6 +414,10 @@ function buildAgentSpec({ origin, entry, apiRoute, apiCatalog, i18n, search, mcp
426
414
  "tags"
427
415
  ],
428
416
  warningsField: "warnings",
417
+ cursorParam: "cursor",
418
+ nextCursorField: "nextCursor",
419
+ hasMoreField: "hasMore",
420
+ totalField: "total",
429
421
  defaultAudience: "human",
430
422
  supportedAudiences: ["human", "agent"]
431
423
  },
@@ -2462,8 +2454,10 @@ function readApiReferenceConfig(root) {
2462
2454
  const pathMatch = block.match(/path\s*:\s*["']([^"']+)["']/);
2463
2455
  const routeRootMatch = block.match(/routeRoot\s*:\s*["']([^"']+)["']/);
2464
2456
  const specUrlMatch = block.match(/specUrl\s*:\s*["']([^"']+)["']/);
2457
+ const catalogTargetsMatch = block.match(/catalogTargets\s*:\s*\[([\s\S]*?)\]/);
2465
2458
  const rendererMatch = block.match(/renderer\s*:\s*["'](fumadocs|scalar)["']/);
2466
2459
  const excludeMatch = block.match(/exclude\s*:\s*\[([\s\S]*?)\]/);
2460
+ const catalogTargets = catalogTargetsMatch?.[1] === void 0 ? void 0 : Array.from(catalogTargetsMatch[1].matchAll(/["']([^"']+)["']/g)).map((match) => match[1]).filter(Boolean);
2467
2461
  const exclude = excludeMatch?.[1] === void 0 ? void 0 : Array.from(excludeMatch[1].matchAll(/["']([^"']+)["']/g)).map((match) => match[1]).filter(Boolean);
2468
2462
  const renderer = rendererMatch?.[1] === "fumadocs" || rendererMatch?.[1] === "scalar" ? rendererMatch[1] : void 0;
2469
2463
  return {
@@ -2471,6 +2465,7 @@ function readApiReferenceConfig(root) {
2471
2465
  path: pathMatch?.[1],
2472
2466
  routeRoot: routeRootMatch?.[1],
2473
2467
  specUrl: specUrlMatch?.[1],
2468
+ catalogTargets,
2474
2469
  renderer,
2475
2470
  exclude
2476
2471
  };
@@ -3166,8 +3161,15 @@ function createDocsAPI(options) {
3166
3161
  }
3167
3162
  const query = url.searchParams.get("query")?.trim();
3168
3163
  const audience = resolveDocsSearchAudience(url.searchParams.get("audience"));
3169
- const filters = resolveDocsSearchFilters(url.searchParams);
3170
- const structured = url.searchParams.get("response") === "structured";
3164
+ let searchRequest;
3165
+ try {
3166
+ searchRequest = resolveDocsSearchRequest(url.searchParams);
3167
+ } catch (error) {
3168
+ const searchError = resolveDocsSearchError(error);
3169
+ if (!searchError) throw error;
3170
+ return Response.json({ error: searchError }, { status: 400 });
3171
+ }
3172
+ const { filters, structured, cursor, limit } = searchRequest;
3171
3173
  if (!query && !structured) return new Response("[]", { headers: { "Content-Type": "application/json" } });
3172
3174
  const searchOptions = {
3173
3175
  pages: getIndexes(ctx),
@@ -3179,19 +3181,25 @@ function createDocsAPI(options) {
3179
3181
  pathname: url.searchParams.get("pathname") ?? void 0,
3180
3182
  siteTitle: llmsConfig.siteTitle ?? "Documentation",
3181
3183
  baseUrl: markdownMetadataBaseUrl || url.origin,
3182
- syncBaseUrl: markdownMetadataBaseUrl ?? null
3184
+ syncBaseUrl: markdownMetadataBaseUrl ?? null,
3185
+ cursor,
3186
+ limit
3183
3187
  };
3184
- if (!query) {
3185
- const searchResponse = structured ? await performDocsSearchWithMetadata(searchOptions) : [];
3186
- return new Response(JSON.stringify(searchResponse), { headers: { "Content-Type": "application/json" } });
3187
- }
3188
3188
  const searchStartedAt = Date.now();
3189
- const searchResponse = structured ? await performDocsSearchWithMetadata(searchOptions) : await performDocsSearch(searchOptions);
3189
+ let searchResponse;
3190
+ try {
3191
+ searchResponse = structured ? await performDocsSearchWithMetadata(searchOptions) : query ? await performDocsSearch(searchOptions) : [];
3192
+ } catch (error) {
3193
+ const searchError = resolveDocsSearchError(error);
3194
+ if (!searchError) throw error;
3195
+ return Response.json({ error: searchError }, { status: 400 });
3196
+ }
3197
+ if (!query) return Response.json(searchResponse);
3190
3198
  const resultCount = Array.isArray(searchResponse) ? searchResponse.length : searchResponse.resultCount;
3191
3199
  await emitDocsAnalyticsEvent(analytics, {
3192
3200
  type: "api_search",
3193
3201
  source: "server",
3194
- url: request.url,
3202
+ url: `${url.origin}${url.pathname}`,
3195
3203
  path: url.pathname,
3196
3204
  locale: ctx.locale,
3197
3205
  input: { query },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@farming-labs/theme",
3
- "version": "0.2.75",
3
+ "version": "0.2.77",
4
4
  "description": "Theme package for @farming-labs/docs — layout, provider, MDX components, and styles",
5
5
  "keywords": [
6
6
  "docs",
@@ -148,7 +148,7 @@
148
148
  "tsdown": "^0.20.3",
149
149
  "typescript": "^5.9.3",
150
150
  "vitest": "^4.1.8",
151
- "@farming-labs/docs": "0.2.75"
151
+ "@farming-labs/docs": "0.2.77"
152
152
  },
153
153
  "peerDependencies": {
154
154
  "@farming-labs/docs": ">=0.0.1",