@farming-labs/svelte 0.1.96 → 0.1.98

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/server.js +60 -1
  2. package/package.json +2 -2
package/dist/server.js CHANGED
@@ -30,7 +30,7 @@
30
30
  import fs from "node:fs";
31
31
  import path from "node:path";
32
32
  import matter from "gray-matter";
33
- import { applySidebarFolderIndexBehavior, buildDocsAskAIContext, buildDocsAgentDiscoverySpec, createDocsSitemapResponse, createDocsAgentTraceContext, createDocsAgentTraceId, emitDocsAgentTraceEvent, emitDocsAnalyticsEvent, formatDocsAskAIPackageHints, findDocsMarkdownPage, getDocsLlmsTxtMaxCharsIssue, getDocsMarkdownCanonicalLinkHeader, getDocsMarkdownVaryHeader, isDocsAgentDiscoveryRequest, isDocsSkillRequest, normalizeDocsRelated, performDocsSearch, renderDocsMarkdownDocument, renderDocsMarkdownNotFound, renderDocsLlmsTxt, renderDocsSkillDocument, readDocsSitemapManifestFromContentMap, stripGeneratedAgentProvenance, resolveDocsAgentMdxContent, resolvePageSidebarFolderIndexBehavior, resolveAskAISearchRequestConfig, resolveSearchRequestConfig, resolveDocsI18n, resolveDocsLlmsTxtRequest, resolveDocsLocale, resolveDocsMarkdownRequest, resolveDocsMetadataBaseUrl, resolveDocsPath, resolvePageReadingTime, resolveReadingTimeOptions, resolveDocsSitemapPageLastmod, resolveDocsSkillFormat, renderDocsPageStructuredDataJson, selectDocsLlmsTxtContent, } from "@farming-labs/docs";
33
+ import { applySidebarFolderIndexBehavior, buildDocsAskAIContext, buildDocsAgentDiscoverySpec, createDocsRobotsResponse, createDocsSitemapResponse, createDocsAgentTraceContext, createDocsAgentTraceId, emitDocsAgentTraceEvent, emitDocsAnalyticsEvent, formatDocsAskAIPackageHints, findDocsMarkdownPage, getDocsLlmsTxtMaxCharsIssue, getDocsMarkdownCanonicalLinkHeader, getDocsMarkdownVaryHeader, isDocsAgentDiscoveryRequest, isDocsSkillRequest, normalizeDocsRelated, parseDocsAgentFeedbackData, performDocsSearch, renderDocsMarkdownDocument, renderDocsMarkdownNotFound, renderDocsLlmsTxt, renderDocsSkillDocument, readDocsSitemapManifestFromContentMap, stripGeneratedAgentProvenance, resolveDocsAgentMdxContent, resolveDocsAgentFeedbackConfig, resolveDocsAgentFeedbackRequest, resolvePageSidebarFolderIndexBehavior, resolveAskAISearchRequestConfig, resolveSearchRequestConfig, resolveDocsI18n, resolveDocsLlmsTxtRequest, resolveDocsLocale, resolveDocsMarkdownRequest, resolveDocsMetadataBaseUrl, resolveDocsPath, resolvePageReadingTime, resolveReadingTimeOptions, resolveDocsSitemapPageLastmod, resolveDocsSkillFormat, renderDocsPageStructuredDataJson, selectDocsLlmsTxtContent, validateDocsAgentFeedbackPayload, } from "@farming-labs/docs";
34
34
  import { createDocsMcpHttpHandler, readDocsSitemapManifest, resolveDocsMcpConfig, serializeDocsIconRegistry, serializeOpenDocsProviders, } from "@farming-labs/docs/server";
35
35
  import { loadDocsNavTree, loadDocsContent, flattenNavTree } from "./content.js";
36
36
  import { renderMarkdown } from "./markdown.js";
@@ -582,6 +582,12 @@ export function createDocsServer(config = {}) {
582
582
  const mcpConfig = resolveDocsMcpConfig(config.mcp, {
583
583
  defaultName: llmsTitle,
584
584
  });
585
+ const agentFeedbackConfig = resolveDocsAgentFeedbackConfig(config.feedback);
586
+ const agentFeedbackDiscovery = {
587
+ enabled: agentFeedbackConfig.enabled,
588
+ route: "/api/docs?feedback=agent",
589
+ schemaRoute: "/api/docs?feedback=agent&schema=1",
590
+ };
585
591
  const llmsCache = new Map();
586
592
  function getLlmsContent(ctx) {
587
593
  const key = ctx.locale ?? "__default__";
@@ -619,6 +625,7 @@ export function createDocsServer(config = {}) {
619
625
  i18n,
620
626
  search: config.search,
621
627
  mcp: mcpConfig,
628
+ feedback: agentFeedbackDiscovery,
622
629
  llms: {
623
630
  enabled: llmsEnabled,
624
631
  baseUrl: llmsBaseUrl || undefined,
@@ -640,6 +647,25 @@ export function createDocsServer(config = {}) {
640
647
  },
641
648
  });
642
649
  }
650
+ const agentFeedbackRequest = resolveDocsAgentFeedbackRequest(event.url, agentFeedbackConfig);
651
+ if (agentFeedbackRequest) {
652
+ if (agentFeedbackRequest.kind === "submit") {
653
+ return new Response(JSON.stringify({ error: "Method Not Allowed" }), {
654
+ status: 405,
655
+ headers: {
656
+ Allow: "POST",
657
+ "Content-Type": "application/json; charset=utf-8",
658
+ },
659
+ });
660
+ }
661
+ return new Response(JSON.stringify(agentFeedbackConfig.schema, null, 2), {
662
+ headers: {
663
+ "Content-Type": "application/schema+json; charset=utf-8",
664
+ "Cache-Control": "public, max-age=0, s-maxage=3600",
665
+ "X-Robots-Tag": "noindex",
666
+ },
667
+ });
668
+ }
643
669
  if (isDocsSkillRequest(event.url) || resolveDocsSkillFormat(event.url) === "skill") {
644
670
  return new Response(readRootSkillDocument(preloaded, rootDir) ??
645
671
  renderDocsSkillDocument({
@@ -647,6 +673,7 @@ export function createDocsServer(config = {}) {
647
673
  entry,
648
674
  search: config.search,
649
675
  mcp: mcpConfig,
676
+ feedback: agentFeedbackDiscovery,
650
677
  llms: {
651
678
  enabled: llmsEnabled,
652
679
  baseUrl: llmsBaseUrl || undefined,
@@ -679,6 +706,15 @@ export function createDocsServer(config = {}) {
679
706
  });
680
707
  if (sitemapResponse)
681
708
  return sitemapResponse;
709
+ const robotsResponse = createDocsRobotsResponse({
710
+ request: event.request,
711
+ entry,
712
+ sitemap: config.sitemap,
713
+ baseUrl: llmsBaseUrl || event.url.origin,
714
+ robots: config.robots,
715
+ });
716
+ if (robotsResponse)
717
+ return robotsResponse;
682
718
  const markdownRequest = resolveDocsMarkdownRequest(entry, event.url, event.request);
683
719
  if (markdownRequest) {
684
720
  const document = getMarkdownDocument(ctx, markdownRequest.requestedPath);
@@ -815,6 +851,29 @@ export function createDocsServer(config = {}) {
815
851
  const DEFAULT_SYSTEM_PROMPT = buildDefaultSystemPrompt();
816
852
  async function POST(event) {
817
853
  const requestUrl = new URL(event.request.url);
854
+ const agentFeedbackRequest = resolveDocsAgentFeedbackRequest(requestUrl, agentFeedbackConfig);
855
+ if (agentFeedbackRequest) {
856
+ if (agentFeedbackRequest.kind === "schema") {
857
+ return new Response(JSON.stringify({ error: "Method Not Allowed" }), {
858
+ status: 405,
859
+ headers: {
860
+ Allow: "GET",
861
+ "Content-Type": "application/json; charset=utf-8",
862
+ },
863
+ });
864
+ }
865
+ const parsed = await parseDocsAgentFeedbackData(event.request);
866
+ if (!parsed.ok)
867
+ return parsed.response;
868
+ const payloadError = validateDocsAgentFeedbackPayload(parsed.data.payload, agentFeedbackConfig.payloadSchema);
869
+ if (payloadError)
870
+ return Response.json({ error: payloadError }, { status: 400 });
871
+ if (!agentFeedbackConfig.onFeedback) {
872
+ return Response.json({ ok: true, handled: false }, { status: 202 });
873
+ }
874
+ await agentFeedbackConfig.onFeedback(parsed.data);
875
+ return Response.json({ ok: true, handled: true }, { status: 201 });
876
+ }
818
877
  const requestStartedAt = Date.now();
819
878
  const trace = createDocsAgentTraceContext("ask-ai");
820
879
  const runSpanId = createDocsAgentTraceId("span");
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@farming-labs/svelte",
3
- "version": "0.1.96",
3
+ "version": "0.1.98",
4
4
  "description": "SvelteKit adapter for @farming-labs/docs — content loading and navigation utilities",
5
5
  "keywords": [
6
6
  "docs",
@@ -56,7 +56,7 @@
56
56
  "devDependencies": {
57
57
  "@types/node": "^22.10.0",
58
58
  "typescript": "^5.9.3",
59
- "@farming-labs/docs": "0.1.96"
59
+ "@farming-labs/docs": "0.1.98"
60
60
  },
61
61
  "peerDependencies": {
62
62
  "@farming-labs/docs": "*"