@farming-labs/docs 0.2.120 → 0.2.121

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 (188) hide show
  1. package/README.md +8 -0
  2. package/dist/access.d.mts +13 -0
  3. package/dist/access.mjs +56 -0
  4. package/dist/agent-conformance.d.mts +60 -0
  5. package/dist/agent-conformance.mjs +538 -0
  6. package/dist/agent-contract.d.mts +47 -0
  7. package/dist/agent-contract.mjs +645 -0
  8. package/dist/agent-detection.d.mts +6 -0
  9. package/dist/agent-detection.mjs +83 -0
  10. package/dist/agent-evals.d.mts +224 -0
  11. package/dist/{agent-evals-BLNLvXbG.mjs → agent-evals.mjs} +7 -565
  12. package/dist/agent-feedback-evaluations-node.mjs +38 -0
  13. package/dist/agent-feedback-evaluations.d.mts +91 -0
  14. package/dist/{agent-feedback-evaluations-CcMGlgsO.mjs → agent-feedback-evaluations.mjs} +2 -2
  15. package/dist/agent-feedback-loop.d.mts +45 -0
  16. package/dist/{agent-feedback-loop-CcZL_sb1.mjs → agent-feedback-loop.mjs} +1 -1
  17. package/dist/agent-maintenance.d.mts +71 -0
  18. package/dist/{agent-maintenance-CuZ7iAKq.mjs → agent-maintenance.mjs} +1 -1
  19. package/dist/agent-provenance.d.mts +23 -0
  20. package/dist/agent-provenance.mjs +77 -0
  21. package/dist/agent-scope.mjs +321 -0
  22. package/dist/agent-skills-archive.mjs +86 -0
  23. package/dist/agent-skills-bundle.d.mts +1 -1
  24. package/dist/{agent-skills-progressive-disclosure-PjPtTYL-.mjs → agent-skills-progressive-disclosure.mjs} +2 -2
  25. package/dist/{agent-skills-server-D5IuvwM7.d.mts → agent-skills-server.d.mts} +3 -3
  26. package/dist/{agent-skills-server-BC7md56k.mjs → agent-skills-server.mjs} +2 -2
  27. package/dist/agent-skills-vite.d.mts +3 -3
  28. package/dist/agent-skills-vite.mjs +1 -2
  29. package/dist/agent-surface-drift.mjs +236 -0
  30. package/dist/{golden-evaluations-CLUViycJ.mjs → agent-usefulness.mjs} +5 -290
  31. package/dist/{content-change-hydration-wqXIZHp6.d.mts → agent.d.mts} +10 -411
  32. package/dist/agent.mjs +2729 -0
  33. package/dist/{analytics-w3FDOksr.d.mts → analytics.d.mts} +2 -2
  34. package/dist/{analytics-p8Vhhu2P.mjs → analytics.mjs} +2 -2
  35. package/dist/{sitemap-server-BUdPBcGs.d.mts → api-reference.d.mts} +2 -6
  36. package/dist/api-reference.mjs +1481 -0
  37. package/dist/{audience-exposure-DBrFWULA.d.mts → audience-exposure.d.mts} +1 -1
  38. package/dist/audience-exposure.mjs +8 -0
  39. package/dist/audience.d.mts +44 -0
  40. package/dist/audience.mjs +1654 -0
  41. package/dist/authoring-mcp.d.mts +44 -0
  42. package/dist/{authoring-mcp-CiCUQe3o.mjs → authoring-mcp.mjs} +3 -3
  43. package/dist/browser.d.mts +6 -4
  44. package/dist/browser.mjs +6 -7
  45. package/dist/build.d.mts +8 -0
  46. package/dist/build.mjs +8 -0
  47. package/dist/changelog.d.mts +20 -0
  48. package/dist/changelog.mjs +39 -0
  49. package/dist/{agent-export-CA6IUQ7T.mjs → cli/agent-export.mjs} +19 -45
  50. package/dist/{agent-CYk2DxY7.mjs → cli/agent.mjs} +6 -35
  51. package/dist/{agents-BUiVmj8i.mjs → cli/agents.mjs} +5 -18
  52. package/dist/cli/api-doctor.mjs +206 -0
  53. package/dist/{authoring-C2ymvYWl.mjs → cli/authoring.mjs} +2 -8
  54. package/dist/{cloud-6eKrlmKd.mjs → cli/cloud.mjs} +3 -3
  55. package/dist/{codeblocks-CHpgAwY-.mjs → cli/codeblocks.mjs} +2 -2
  56. package/dist/cli/config.d.mts +11 -0
  57. package/dist/{config-BZnKAj_Y.mjs → cli/config.mjs} +1 -1
  58. package/dist/cli/dev-banner.mjs +58 -0
  59. package/dist/{dev-Bnn-NUNa.mjs → cli/dev.mjs} +3 -57
  60. package/dist/{doctor-Bfkrkzad.mjs → cli/doctor.mjs} +41 -226
  61. package/dist/{downgrade-CHMta85e.mjs → cli/downgrade.mjs} +2 -2
  62. package/dist/cli/errors.d.mts +4 -0
  63. package/dist/{errors-BtnVLhNF.mjs → cli/errors.mjs} +1 -1
  64. package/dist/{feedback-evals-DMilg9pY.mjs → cli/feedback-evals.mjs} +3 -36
  65. package/dist/{feedback-DL4T5oIO.mjs → cli/feedback.mjs} +1 -1
  66. package/dist/cli/git-dates.mjs +35 -0
  67. package/dist/cli/golden-evaluations.mjs +52 -0
  68. package/dist/cli/index.d.mts +2 -3
  69. package/dist/cli/index.mjs +38 -38
  70. package/dist/{init-K0LmXDZ5.mjs → cli/init.mjs} +3 -3
  71. package/dist/{mcp-iLCmnPJI.mjs → cli/mcp.mjs} +7 -19
  72. package/dist/{openapi-diff-HcpUNjA-.mjs → cli/openapi-diff.mjs} +2 -7
  73. package/dist/{openapi-sdk-BQKC6H-_.mjs → cli/openapi-sdk.mjs} +2 -7
  74. package/dist/{openapi-source-DK6ts_Bk.mjs → cli/openapi-source.mjs} +2 -2
  75. package/dist/{package-version-HJhYeq4M.mjs → cli/package-version.mjs} +2 -2
  76. package/dist/{propose-JmUv_BTt.mjs → cli/propose.mjs} +1 -1
  77. package/dist/{review-C6EmbV0l.mjs → cli/review.mjs} +16 -15
  78. package/dist/{robots-DteZB8vl.mjs → cli/robots.mjs} +3 -7
  79. package/dist/{search-Bhuv_YsL.mjs → cli/search.mjs} +7 -20
  80. package/dist/{sitemap-DW5LDKDa.mjs → cli/sitemap.mjs} +7 -42
  81. package/dist/{skills-BAPQLSCm.mjs → cli/skills.mjs} +5 -19
  82. package/dist/{templates-BuQ8YsGv.mjs → cli/templates.mjs} +1 -1
  83. package/dist/{upgrade-DlQMOFV1.mjs → cli/upgrade.mjs} +2 -2
  84. package/dist/{utils-C7KDrPpA.mjs → cli/utils.mjs} +1 -1
  85. package/dist/client/react.d.mts +2 -18
  86. package/dist/client/react.mjs +1 -157
  87. package/dist/{cloud-analytics-D14HplI7.mjs → cloud-analytics.mjs} +1 -1
  88. package/dist/{cloud-ask-ai-BrsTXQf6.d.mts → cloud-ask-ai.d.mts} +2 -2
  89. package/dist/{cloud-ask-ai-BqKhjpS5.mjs → cloud-ask-ai.mjs} +3 -3
  90. package/dist/code-blocks.d.mts +51 -0
  91. package/dist/{code-blocks-GYdvS3BH.mjs → code-blocks.mjs} +2 -2
  92. package/dist/code-group-mdx.d.mts +11 -0
  93. package/dist/code-group-mdx.mjs +57 -0
  94. package/dist/content-change-hydration.d.mts +87 -0
  95. package/dist/{openapi-mcp-BIOTLiA7.mjs → content-change-hydration.mjs} +5 -210
  96. package/dist/content-changes.d.mts +47 -0
  97. package/dist/content-changes.mjs +216 -0
  98. package/dist/create-theme.d.mts +48 -0
  99. package/dist/create-theme.mjs +57 -0
  100. package/dist/date.d.mts +5 -0
  101. package/dist/date.mjs +17 -0
  102. package/dist/define-docs.d.mts +9 -0
  103. package/dist/define-docs.mjs +46 -0
  104. package/dist/docs-cloud-client.d.mts +18 -0
  105. package/dist/docs-cloud-client.mjs +161 -0
  106. package/dist/docs-cloud-server.d.mts +2 -2
  107. package/dist/docs-cloud-server.mjs +2 -3
  108. package/dist/heading-toc.d.mts +10 -0
  109. package/dist/heading-toc.mjs +23 -0
  110. package/dist/http-body.d.mts +14 -0
  111. package/dist/{http-body-DkAPk6D5.mjs → http-body.mjs} +1 -1
  112. package/dist/http-cache.d.mts +25 -0
  113. package/dist/http-cache.mjs +140 -0
  114. package/dist/http-link.mjs +81 -0
  115. package/dist/i18n.d.mts +18 -0
  116. package/dist/{i18n-B1gJ9EW0.mjs → i18n.mjs} +1 -1
  117. package/dist/index.d.mts +42 -674
  118. package/dist/index.mjs +40 -14
  119. package/dist/markdown-rendering.mjs +1 -1
  120. package/dist/markdown-section-cache.mjs +49 -0
  121. package/dist/markdown-sections.d.mts +47 -0
  122. package/dist/{markdown-sections-9Oxr33b-.mjs → markdown-sections.mjs} +29 -703
  123. package/dist/mcp-auth.d.mts +14 -0
  124. package/dist/mcp-auth.mjs +99 -0
  125. package/dist/mcp.d.mts +5 -3
  126. package/dist/mcp.mjs +21 -9
  127. package/dist/mdx.d.mts +6 -0
  128. package/dist/mdx.mjs +7 -0
  129. package/dist/metadata.d.mts +60 -0
  130. package/dist/{metadata-BOHn0Y5K.mjs → metadata.mjs} +2 -2
  131. package/dist/native-api-reference.mjs +968 -0
  132. package/dist/okf.d.mts +42 -0
  133. package/dist/okf.mjs +145 -0
  134. package/dist/openapi-contract.mjs +154 -0
  135. package/dist/{openapi-mcp-node-C4jUpZG6.mjs → openapi-mcp-node.mjs} +1 -1
  136. package/dist/openapi-mcp.d.mts +26 -0
  137. package/dist/openapi-mcp.mjs +132 -0
  138. package/dist/openapi-operations.d.mts +71 -0
  139. package/dist/{openapi-operations-DFpaqOqA.mjs → openapi-operations.mjs} +1 -1
  140. package/dist/openapi-overlays.mjs +221 -0
  141. package/dist/openapi-references.mjs +233 -0
  142. package/dist/pagination.d.mts +7 -0
  143. package/dist/pagination.mjs +100 -0
  144. package/dist/prompt-references.d.mts +12 -0
  145. package/dist/prompt-references.mjs +132 -0
  146. package/dist/prompt-utils.d.mts +36 -0
  147. package/dist/{prompt-utils-B5g-bv7o.mjs → prompt-utils.mjs} +1 -57
  148. package/dist/reading-time.d.mts +23 -0
  149. package/dist/reading-time.mjs +58 -0
  150. package/dist/related.d.mts +7 -0
  151. package/dist/related.mjs +50 -0
  152. package/dist/retrieval-digest.d.mts +16 -0
  153. package/dist/{retrieval-digest-CT-eIEcp.mjs → retrieval-digest.mjs} +1 -1
  154. package/dist/review.d.mts +69 -0
  155. package/dist/review.mjs +562 -0
  156. package/dist/robots.d.mts +54 -0
  157. package/dist/{robots-BYJAVeI6.mjs → robots.mjs} +5 -3
  158. package/dist/runtime.d.mts +3 -3
  159. package/dist/runtime.mjs +3 -9
  160. package/dist/search.d.mts +210 -0
  161. package/dist/search.mjs +3401 -0
  162. package/dist/server.d.mts +22 -198
  163. package/dist/server.mjs +21 -19
  164. package/dist/sidebar.d.mts +15 -0
  165. package/dist/sidebar.mjs +73 -0
  166. package/dist/sitemap-server.d.mts +7 -0
  167. package/dist/{sitemap-server-Lg3YhUx4.mjs → sitemap-server.mjs} +2 -2
  168. package/dist/{sitemap-Cl8vrixd.d.mts → sitemap.d.mts} +3 -3
  169. package/dist/sitemap.mjs +254 -0
  170. package/dist/{standards-discovery-BHPc7YIX.d.mts → standards-discovery.d.mts} +2 -2
  171. package/dist/{standards-discovery-sSEojU80.mjs → standards-discovery.mjs} +3 -139
  172. package/dist/telemetry-runtime.d.mts +42 -0
  173. package/dist/telemetry-runtime.mjs +238 -0
  174. package/dist/telemetry.d.mts +15 -0
  175. package/dist/telemetry.mjs +117 -0
  176. package/dist/{types-BJFeMXWZ.d.mts → types.d.mts} +3 -2
  177. package/dist/urls.d.mts +7 -0
  178. package/dist/urls.mjs +21 -0
  179. package/dist/utils.d.mts +8 -0
  180. package/dist/utils.mjs +22 -0
  181. package/package.json +21 -3
  182. package/dist/agent-DkAidqtV.mjs +0 -9026
  183. package/dist/api-reference-BYee4zMo.mjs +0 -3046
  184. package/dist/prompt-references-DMgbu_dz.mjs +0 -1082
  185. package/dist/retrieval-digest-AOx2-LbC.d.mts +0 -367
  186. package/dist/sidebar-CFHBj29f.mjs +0 -421
  187. package/dist/sidebar-CMPbVfGP.d.mts +0 -63
  188. /package/dist/{openapi-CfCzX_a1.mjs → cli/openapi.mjs} +0 -0
@@ -0,0 +1,91 @@
1
+ import { DocsAgentGoldenTask } from "./types.mjs";
2
+ import { DocsAgentFeedbackImprovementReport } from "./agent-feedback-loop.mjs";
3
+ import { DocsGoldenTasksReport } from "./agent-evals.mjs";
4
+
5
+ //#region src/agent-feedback-evaluations.d.ts
6
+ declare const DOCS_AGENT_FEEDBACK_EVALUATION_CANDIDATES_FORMAT: "farming-labs-agent-feedback-evaluation-candidates.v1";
7
+ declare const DOCS_AGENT_FEEDBACK_EVALUATION_BASELINE_FORMAT: "farming-labs-agent-feedback-evaluation-baseline.v1";
8
+ declare const DOCS_AGENT_FEEDBACK_EVALUATION_REGRESSION_FORMAT: "farming-labs-agent-feedback-evaluation-regression.v1";
9
+ interface DocsAgentFeedbackEvaluationCandidate {
10
+ id: string;
11
+ fingerprint: string;
12
+ state: "candidate";
13
+ task: DocsAgentGoldenTask;
14
+ evidence: {
15
+ clusterId: string;
16
+ page: string;
17
+ occurrences: number;
18
+ outcomes: string[];
19
+ };
20
+ sanitization: {
21
+ redactionCount: number;
22
+ };
23
+ promotion: {
24
+ target: "agent.evaluations.tasks";
25
+ requiresHumanReview: true;
26
+ };
27
+ }
28
+ interface DocsAgentFeedbackEvaluationDuplicate {
29
+ clusterId: string;
30
+ taskId: string;
31
+ fingerprint: string;
32
+ reason: "existing-id" | "existing-fingerprint" | "duplicate-candidate";
33
+ }
34
+ interface DocsAgentFeedbackEvaluationCandidateRegistry {
35
+ format: typeof DOCS_AGENT_FEEDBACK_EVALUATION_CANDIDATES_FORMAT;
36
+ generatedAt: string;
37
+ sourceFeedbackCount: number;
38
+ sourceClusterCount: number;
39
+ candidateCount: number;
40
+ duplicateCount: number;
41
+ redactionCount: number;
42
+ candidates: DocsAgentFeedbackEvaluationCandidate[];
43
+ duplicates: DocsAgentFeedbackEvaluationDuplicate[];
44
+ promotion: {
45
+ mode: "review-required";
46
+ automaticallyUpdatesConfig: false;
47
+ automaticallyPublishes: false;
48
+ };
49
+ }
50
+ interface BuildDocsAgentFeedbackEvaluationCandidatesOptions {
51
+ generatedAt?: string;
52
+ existingTasks?: readonly DocsAgentGoldenTask[];
53
+ }
54
+ interface DocsAgentFeedbackEvaluationTaskBaseline {
55
+ id: string;
56
+ passed: boolean;
57
+ score: number;
58
+ }
59
+ interface DocsAgentFeedbackEvaluationBaseline {
60
+ format: typeof DOCS_AGENT_FEEDBACK_EVALUATION_BASELINE_FORMAT;
61
+ generatedAt: string;
62
+ score: number;
63
+ taskCount: number;
64
+ passedTaskCount: number;
65
+ tasks: DocsAgentFeedbackEvaluationTaskBaseline[];
66
+ }
67
+ interface DocsAgentFeedbackEvaluationRegression {
68
+ kind: "missing-task" | "new-failure" | "pass-to-fail" | "score-drop" | "suite-score-drop";
69
+ taskId?: string;
70
+ message: string;
71
+ }
72
+ interface DocsAgentFeedbackEvaluationRegressionReport {
73
+ format: typeof DOCS_AGENT_FEEDBACK_EVALUATION_REGRESSION_FORMAT;
74
+ passed: boolean;
75
+ baselineScore: number;
76
+ currentScore: number;
77
+ scoreDelta: number;
78
+ maxScoreDrop: number;
79
+ regressions: DocsAgentFeedbackEvaluationRegression[];
80
+ }
81
+ interface CompareDocsAgentFeedbackEvaluationOptions {
82
+ /** Maximum allowed score decrease for the suite and each task. @default 0 */
83
+ maxScoreDrop?: number;
84
+ /** Treat newly added failing tasks as regressions. @default true */
85
+ failOnNewFailures?: boolean;
86
+ }
87
+ declare function buildDocsAgentFeedbackEvaluationCandidates(report: DocsAgentFeedbackImprovementReport, options?: BuildDocsAgentFeedbackEvaluationCandidatesOptions): DocsAgentFeedbackEvaluationCandidateRegistry;
88
+ declare function createDocsAgentFeedbackEvaluationBaseline(report: DocsGoldenTasksReport, generatedAt?: string): DocsAgentFeedbackEvaluationBaseline;
89
+ declare function compareDocsAgentFeedbackEvaluationBaseline(current: DocsGoldenTasksReport, baseline: DocsAgentFeedbackEvaluationBaseline, options?: CompareDocsAgentFeedbackEvaluationOptions): DocsAgentFeedbackEvaluationRegressionReport;
90
+ //#endregion
91
+ export { BuildDocsAgentFeedbackEvaluationCandidatesOptions, CompareDocsAgentFeedbackEvaluationOptions, DOCS_AGENT_FEEDBACK_EVALUATION_BASELINE_FORMAT, DOCS_AGENT_FEEDBACK_EVALUATION_CANDIDATES_FORMAT, DOCS_AGENT_FEEDBACK_EVALUATION_REGRESSION_FORMAT, DocsAgentFeedbackEvaluationBaseline, DocsAgentFeedbackEvaluationCandidate, DocsAgentFeedbackEvaluationCandidateRegistry, DocsAgentFeedbackEvaluationDuplicate, DocsAgentFeedbackEvaluationRegression, DocsAgentFeedbackEvaluationRegressionReport, DocsAgentFeedbackEvaluationTaskBaseline, buildDocsAgentFeedbackEvaluationCandidates, compareDocsAgentFeedbackEvaluationBaseline, createDocsAgentFeedbackEvaluationBaseline };
@@ -1,4 +1,4 @@
1
- import { i as sha256DocsContent } from "./retrieval-digest-CT-eIEcp.mjs";
1
+ import { sha256DocsContent } from "./retrieval-digest.mjs";
2
2
 
3
3
  //#region src/agent-feedback-evaluations.ts
4
4
  const DOCS_AGENT_FEEDBACK_EVALUATION_CANDIDATES_FORMAT = "farming-labs-agent-feedback-evaluation-candidates.v1";
@@ -237,4 +237,4 @@ function compareDocsAgentFeedbackEvaluationBaseline(current, baseline, options =
237
237
  }
238
238
 
239
239
  //#endregion
240
- export { compareDocsAgentFeedbackEvaluationBaseline as a, buildDocsAgentFeedbackEvaluationCandidates as i, DOCS_AGENT_FEEDBACK_EVALUATION_CANDIDATES_FORMAT as n, createDocsAgentFeedbackEvaluationBaseline as o, DOCS_AGENT_FEEDBACK_EVALUATION_REGRESSION_FORMAT as r, DOCS_AGENT_FEEDBACK_EVALUATION_BASELINE_FORMAT as t };
240
+ export { DOCS_AGENT_FEEDBACK_EVALUATION_BASELINE_FORMAT, DOCS_AGENT_FEEDBACK_EVALUATION_CANDIDATES_FORMAT, DOCS_AGENT_FEEDBACK_EVALUATION_REGRESSION_FORMAT, buildDocsAgentFeedbackEvaluationCandidates, compareDocsAgentFeedbackEvaluationBaseline, createDocsAgentFeedbackEvaluationBaseline };
@@ -0,0 +1,45 @@
1
+ import { DocsAgentFeedbackData, DocsAgentGoldenTask } from "./types.mjs";
2
+
3
+ //#region src/agent-feedback-loop.d.ts
4
+ declare const DOCS_AGENT_FEEDBACK_IMPROVEMENT_FORMAT: "farming-labs-agent-feedback-improvements.v1";
5
+ interface DocsAgentFeedbackImprovementOptions {
6
+ /** Minimum failed reports required before a cluster becomes recurring. @default 2 */
7
+ minOccurrences?: number;
8
+ /** Stable report timestamp override for tests and reproducible automation. */
9
+ generatedAt?: string;
10
+ }
11
+ interface DocsAgentFeedbackIssueDraft {
12
+ title: string;
13
+ body: string;
14
+ labels: string[];
15
+ }
16
+ interface DocsAgentFeedbackCluster {
17
+ id: string;
18
+ page: string;
19
+ task: string;
20
+ occurrences: number;
21
+ outcomes: string[];
22
+ missingContext: string[];
23
+ docIssues: string[];
24
+ suggestedImprovements: string[];
25
+ goldenTask?: DocsAgentGoldenTask;
26
+ issue: DocsAgentFeedbackIssueDraft;
27
+ }
28
+ interface DocsAgentFeedbackImprovementReport {
29
+ format: typeof DOCS_AGENT_FEEDBACK_IMPROVEMENT_FORMAT;
30
+ generatedAt: string;
31
+ feedbackCount: number;
32
+ failureCount: number;
33
+ recurringClusterCount: number;
34
+ clusters: DocsAgentFeedbackCluster[];
35
+ goldenTasks: DocsAgentGoldenTask[];
36
+ issueDrafts: DocsAgentFeedbackIssueDraft[];
37
+ pullRequestDraft: {
38
+ title: string;
39
+ body: string;
40
+ };
41
+ }
42
+ declare function analyzeDocsAgentFeedback(feedback: readonly DocsAgentFeedbackData[], options?: DocsAgentFeedbackImprovementOptions): DocsAgentFeedbackImprovementReport;
43
+ declare function readDocsAgentFeedbackFile(filePath: string): DocsAgentFeedbackData[];
44
+ //#endregion
45
+ export { DOCS_AGENT_FEEDBACK_IMPROVEMENT_FORMAT, DocsAgentFeedbackCluster, DocsAgentFeedbackImprovementOptions, DocsAgentFeedbackImprovementReport, DocsAgentFeedbackIssueDraft, analyzeDocsAgentFeedback, readDocsAgentFeedbackFile };
@@ -193,4 +193,4 @@ function readDocsAgentFeedbackFile(filePath) {
193
193
  }
194
194
 
195
195
  //#endregion
196
- export { analyzeDocsAgentFeedback as n, readDocsAgentFeedbackFile as r, DOCS_AGENT_FEEDBACK_IMPROVEMENT_FORMAT as t };
196
+ export { DOCS_AGENT_FEEDBACK_IMPROVEMENT_FORMAT, analyzeDocsAgentFeedback, readDocsAgentFeedbackFile };
@@ -0,0 +1,71 @@
1
+ import { DocsAgentGoldenTask } from "./types.mjs";
2
+
3
+ //#region src/agent-maintenance.d.ts
4
+ declare const DOCS_AGENT_MAINTENANCE_PROPOSAL_FORMAT: "farming-labs-agent-maintenance-proposals.v1";
5
+ type DocsAgentMaintenanceSignalSource = "agent-feedback" | "ask-ai" | "git" | "issue" | "mcp" | "search" | "support";
6
+ type DocsAgentMaintenanceSeverity = "info" | "warning" | "error" | "critical";
7
+ interface DocsAgentMaintenanceSignal {
8
+ source: DocsAgentMaintenanceSignalSource;
9
+ /** Untrusted evidence summary. It is never interpreted as an instruction. */
10
+ summary: string;
11
+ /** Stable grouping key shared across signal sources. Defaults to task or summary. */
12
+ topic?: string;
13
+ page?: string;
14
+ task?: string;
15
+ severity?: DocsAgentMaintenanceSeverity;
16
+ /** Aggregated occurrence count represented by this signal. @default 1 */
17
+ count?: number;
18
+ }
19
+ interface DocsAgentMaintenanceIssueDraft {
20
+ title: string;
21
+ body: string;
22
+ labels: string[];
23
+ }
24
+ interface DocsAgentMaintenanceProposal {
25
+ id: string;
26
+ page: string;
27
+ topic: string;
28
+ task?: string;
29
+ impactScore: number;
30
+ occurrenceCount: number;
31
+ severity: DocsAgentMaintenanceSeverity;
32
+ sources: DocsAgentMaintenanceSignalSource[];
33
+ evidence: Array<{
34
+ source: DocsAgentMaintenanceSignalSource;
35
+ summary: string;
36
+ count: number;
37
+ }>;
38
+ recommendedActions: string[];
39
+ acceptanceCriteria: string[];
40
+ goldenTask?: DocsAgentGoldenTask;
41
+ issueDraft: DocsAgentMaintenanceIssueDraft;
42
+ }
43
+ interface DocsAgentMaintenanceProposalReport {
44
+ format: typeof DOCS_AGENT_MAINTENANCE_PROPOSAL_FORMAT;
45
+ generatedAt: string;
46
+ signalCount: number;
47
+ representedOccurrences: number;
48
+ proposalCount: number;
49
+ proposals: DocsAgentMaintenanceProposal[];
50
+ goldenTasks: DocsAgentGoldenTask[];
51
+ issueDrafts: DocsAgentMaintenanceIssueDraft[];
52
+ pullRequestDraft: {
53
+ title: string;
54
+ body: string;
55
+ };
56
+ execution: {
57
+ mode: "draft-only";
58
+ writesDocumentation: false;
59
+ publishesChanges: false;
60
+ requiresHumanReview: true;
61
+ };
62
+ }
63
+ interface AnalyzeDocsAgentMaintenanceSignalsOptions {
64
+ /** Minimum represented occurrences required before a proposal is emitted. @default 2 */
65
+ minOccurrences?: number;
66
+ generatedAt?: string;
67
+ }
68
+ declare function analyzeDocsAgentMaintenanceSignals(signals: readonly DocsAgentMaintenanceSignal[], options?: AnalyzeDocsAgentMaintenanceSignalsOptions): DocsAgentMaintenanceProposalReport;
69
+ declare function parseDocsAgentMaintenanceSignals(content: string): DocsAgentMaintenanceSignal[];
70
+ //#endregion
71
+ export { AnalyzeDocsAgentMaintenanceSignalsOptions, DOCS_AGENT_MAINTENANCE_PROPOSAL_FORMAT, DocsAgentMaintenanceIssueDraft, DocsAgentMaintenanceProposal, DocsAgentMaintenanceProposalReport, DocsAgentMaintenanceSeverity, DocsAgentMaintenanceSignal, DocsAgentMaintenanceSignalSource, analyzeDocsAgentMaintenanceSignals, parseDocsAgentMaintenanceSignals };
@@ -286,4 +286,4 @@ function parseDocsAgentMaintenanceSignals(content) {
286
286
  }
287
287
 
288
288
  //#endregion
289
- export { analyzeDocsAgentMaintenanceSignals as n, parseDocsAgentMaintenanceSignals as r, DOCS_AGENT_MAINTENANCE_PROPOSAL_FORMAT as t };
289
+ export { DOCS_AGENT_MAINTENANCE_PROPOSAL_FORMAT, analyzeDocsAgentMaintenanceSignals, parseDocsAgentMaintenanceSignals };
@@ -0,0 +1,23 @@
1
+ //#region src/agent-provenance.d.ts
2
+ declare const GENERATED_AGENT_PROVENANCE_MARKER = "@farming-labs/docs:generated";
3
+ declare const GENERATED_AGENT_PROVENANCE_VERSION = 1;
4
+ type GeneratedAgentSourceKind = "resolved-page" | "agent-md";
5
+ interface GeneratedAgentProvenance {
6
+ version: number;
7
+ sourceKind: GeneratedAgentSourceKind;
8
+ sourceHash: string;
9
+ settingsHash: string;
10
+ outputHash: string;
11
+ generatedAt: string;
12
+ }
13
+ interface ParsedGeneratedAgentDocument {
14
+ provenance?: GeneratedAgentProvenance;
15
+ content: string;
16
+ }
17
+ declare function normalizeGeneratedAgentContent(value: string): string;
18
+ declare function hashGeneratedAgentContent(value: string): string;
19
+ declare function parseGeneratedAgentDocument(raw: string): ParsedGeneratedAgentDocument;
20
+ declare function stripGeneratedAgentProvenance(raw: string): string;
21
+ declare function serializeGeneratedAgentDocument(content: string, provenance: GeneratedAgentProvenance): string;
22
+ //#endregion
23
+ export { GENERATED_AGENT_PROVENANCE_MARKER, GENERATED_AGENT_PROVENANCE_VERSION, GeneratedAgentProvenance, GeneratedAgentSourceKind, hashGeneratedAgentContent, normalizeGeneratedAgentContent, parseGeneratedAgentDocument, serializeGeneratedAgentDocument, stripGeneratedAgentProvenance };
@@ -0,0 +1,77 @@
1
+ //#region src/agent-provenance.ts
2
+ const GENERATED_AGENT_PROVENANCE_MARKER = "@farming-labs/docs:generated";
3
+ const GENERATED_AGENT_PROVENANCE_VERSION = 1;
4
+ function normalizeLineEndings(value) {
5
+ return value.replace(/\r\n?/g, "\n").replace(/^\uFEFF/, "");
6
+ }
7
+ function normalizeGeneratedAgentContent(value) {
8
+ return normalizeLineEndings(value).trimEnd();
9
+ }
10
+ function hashGeneratedAgentContent(value) {
11
+ const normalized = normalizeGeneratedAgentContent(value);
12
+ const bytes = new TextEncoder().encode(normalized);
13
+ let hash = 14695981039346656037n;
14
+ for (const byte of bytes) {
15
+ hash ^= BigInt(byte);
16
+ hash = BigInt.asUintN(64, hash * 1099511628211n);
17
+ }
18
+ return `fnv1a64:${hash.toString(16).padStart(16, "0")}`;
19
+ }
20
+ function parseProvenanceBlock(rawBlock) {
21
+ const entries = /* @__PURE__ */ new Map();
22
+ for (const line of rawBlock.split("\n")) {
23
+ const trimmed = line.trim();
24
+ if (!trimmed) continue;
25
+ const separatorIndex = trimmed.indexOf("=");
26
+ if (separatorIndex <= 0) continue;
27
+ const key = trimmed.slice(0, separatorIndex).trim();
28
+ const value = trimmed.slice(separatorIndex + 1).trim();
29
+ if (!key || !value) continue;
30
+ entries.set(key, value);
31
+ }
32
+ const version = Number.parseInt(entries.get("version") ?? "", 10);
33
+ const sourceKind = entries.get("sourceKind");
34
+ const sourceHash = entries.get("sourceHash");
35
+ const settingsHash = entries.get("settingsHash");
36
+ const outputHash = entries.get("outputHash");
37
+ const generatedAt = entries.get("generatedAt");
38
+ if (!Number.isFinite(version) || sourceKind !== "resolved-page" && sourceKind !== "agent-md" || !sourceHash || !settingsHash || !outputHash || !generatedAt) return;
39
+ return {
40
+ version,
41
+ sourceKind,
42
+ sourceHash,
43
+ settingsHash,
44
+ outputHash,
45
+ generatedAt
46
+ };
47
+ }
48
+ function parseGeneratedAgentDocument(raw) {
49
+ const normalized = normalizeLineEndings(raw);
50
+ const headerPattern = new RegExp(`^<!-- ${GENERATED_AGENT_PROVENANCE_MARKER}\\n([\\s\\S]*?)\\n-->\\n?`);
51
+ const match = normalized.match(headerPattern);
52
+ if (!match) return { content: normalized };
53
+ return {
54
+ provenance: parseProvenanceBlock(match[1]),
55
+ content: normalized.slice(match[0].length)
56
+ };
57
+ }
58
+ function stripGeneratedAgentProvenance(raw) {
59
+ return parseGeneratedAgentDocument(raw).content;
60
+ }
61
+ function serializeGeneratedAgentDocument(content, provenance) {
62
+ const normalizedContent = normalizeGeneratedAgentContent(content);
63
+ return `${[
64
+ `<!-- ${GENERATED_AGENT_PROVENANCE_MARKER}`,
65
+ `version=${provenance.version}`,
66
+ `sourceKind=${provenance.sourceKind}`,
67
+ `sourceHash=${provenance.sourceHash}`,
68
+ `settingsHash=${provenance.settingsHash}`,
69
+ `outputHash=${provenance.outputHash}`,
70
+ `generatedAt=${provenance.generatedAt}`,
71
+ "-->",
72
+ normalizedContent
73
+ ].join("\n")}\n`;
74
+ }
75
+
76
+ //#endregion
77
+ export { GENERATED_AGENT_PROVENANCE_MARKER, GENERATED_AGENT_PROVENANCE_VERSION, hashGeneratedAgentContent, normalizeGeneratedAgentContent, parseGeneratedAgentDocument, serializeGeneratedAgentDocument, stripGeneratedAgentProvenance };
@@ -0,0 +1,321 @@
1
+ //#region src/agent-scope.ts
2
+ /** Normalize framework aliases used by page metadata, agent contracts, MCP, and evaluations. */
3
+ function normalizeAgentFramework(value) {
4
+ const normalized = value.toLowerCase().replace(/[^a-z0-9]/gu, "");
5
+ if ([
6
+ "next",
7
+ "nextjs",
8
+ "nextjsapp",
9
+ "reactnext"
10
+ ].includes(normalized)) return "nextjs";
11
+ if ([
12
+ "tanstack",
13
+ "tanstackstart",
14
+ "start"
15
+ ].includes(normalized)) return "tanstackstart";
16
+ if (["svelte", "sveltekit"].includes(normalized)) return "sveltekit";
17
+ if (["nuxt", "nuxtjs"].includes(normalized)) return "nuxt";
18
+ return normalized;
19
+ }
20
+ function normalizeAgentLocale(value) {
21
+ return value.trim().toLowerCase().replace(/_/gu, "-");
22
+ }
23
+ function normalizeAgentVersion(value) {
24
+ return value.trim().toLowerCase().replace(/^v(?=\d)/u, "");
25
+ }
26
+ function normalizeAgentScopeValues(value) {
27
+ const values = Array.isArray(value) ? value : typeof value === "string" ? [value] : [];
28
+ return Array.from(new Set(values.map((item) => item.trim()).filter(Boolean)));
29
+ }
30
+ function compareVersions(left, right) {
31
+ for (let index = 0; index < 3; index += 1) if (left[index] !== right[index]) return left[index] > right[index] ? 1 : -1;
32
+ return 0;
33
+ }
34
+ function parseExactVersion(value) {
35
+ const match = normalizeAgentVersion(value).match(/^(\d+)(?:\.(\d+))?(?:\.(\d+))?(?:-[0-9a-z.-]+)?(?:\+[0-9a-z.-]+)?$/iu);
36
+ if (!match) return void 0;
37
+ return [
38
+ Number(match[1]),
39
+ Number(match[2] ?? 0),
40
+ Number(match[3] ?? 0)
41
+ ];
42
+ }
43
+ function parseVersionOperand(value) {
44
+ const normalized = normalizeAgentVersion(value);
45
+ if (normalized === "*" || normalized === "x") return {
46
+ version: [
47
+ 0,
48
+ 0,
49
+ 0
50
+ ],
51
+ components: 0,
52
+ wildcard: true
53
+ };
54
+ const match = normalized.match(/^(\d+)(?:\.(\d+|x|\*))?(?:\.(\d+|x|\*))?$/iu);
55
+ if (!match) return void 0;
56
+ const raw = [
57
+ match[1],
58
+ match[2],
59
+ match[3]
60
+ ];
61
+ const wildcardIndex = raw.findIndex((part, index) => index > 0 && (part?.toLowerCase() === "x" || part === "*"));
62
+ if (wildcardIndex >= 0 && raw.slice(wildcardIndex + 1).some((part) => part && part.toLowerCase() !== "x" && part !== "*")) return;
63
+ const components = wildcardIndex >= 0 ? wildcardIndex : raw.filter(Boolean).length;
64
+ return {
65
+ version: [
66
+ Number(raw[0]),
67
+ Number(raw[1] ?? 0) || 0,
68
+ Number(raw[2] ?? 0) || 0
69
+ ],
70
+ components,
71
+ wildcard: wildcardIndex >= 0
72
+ };
73
+ }
74
+ function nextVersionBoundary(operand) {
75
+ const [major, minor] = operand.version;
76
+ if (operand.components <= 0) return void 0;
77
+ if (operand.components === 1) return [
78
+ major + 1,
79
+ 0,
80
+ 0
81
+ ];
82
+ return [
83
+ major,
84
+ minor + 1,
85
+ 0
86
+ ];
87
+ }
88
+ function operandRange(operand) {
89
+ if (operand.components === 0) return {
90
+ minimumInclusive: true,
91
+ maximumInclusive: false
92
+ };
93
+ if (operand.components < 3 || operand.wildcard) return {
94
+ minimum: operand.version,
95
+ minimumInclusive: true,
96
+ maximum: nextVersionBoundary(operand),
97
+ maximumInclusive: false
98
+ };
99
+ return {
100
+ minimum: operand.version,
101
+ minimumInclusive: true,
102
+ maximum: operand.version,
103
+ maximumInclusive: true
104
+ };
105
+ }
106
+ function caretRange(operand) {
107
+ const [major, minor, patch] = operand.version;
108
+ let maximum;
109
+ if (major > 0) maximum = [
110
+ major + 1,
111
+ 0,
112
+ 0
113
+ ];
114
+ else if (operand.components <= 1) maximum = [
115
+ 1,
116
+ 0,
117
+ 0
118
+ ];
119
+ else if (minor > 0 || operand.components === 2) maximum = [
120
+ 0,
121
+ minor + 1,
122
+ 0
123
+ ];
124
+ else maximum = [
125
+ 0,
126
+ 0,
127
+ patch + 1
128
+ ];
129
+ return {
130
+ minimum: operand.version,
131
+ minimumInclusive: true,
132
+ maximum,
133
+ maximumInclusive: false
134
+ };
135
+ }
136
+ function tildeRange(operand) {
137
+ const [major, minor] = operand.version;
138
+ const maximum = operand.components <= 1 ? [
139
+ major + 1,
140
+ 0,
141
+ 0
142
+ ] : [
143
+ major,
144
+ minor + 1,
145
+ 0
146
+ ];
147
+ return {
148
+ minimum: operand.version,
149
+ minimumInclusive: true,
150
+ maximum,
151
+ maximumInclusive: false
152
+ };
153
+ }
154
+ function intersectRanges(left, right) {
155
+ let minimum = left.minimum;
156
+ let minimumInclusive = left.minimumInclusive;
157
+ if (!minimum || right.minimum && compareVersions(right.minimum, minimum) > 0) {
158
+ minimum = right.minimum;
159
+ minimumInclusive = right.minimumInclusive;
160
+ } else if (right.minimum && compareVersions(right.minimum, minimum) === 0) minimumInclusive = minimumInclusive && right.minimumInclusive;
161
+ let maximum = left.maximum;
162
+ let maximumInclusive = left.maximumInclusive;
163
+ if (!maximum || right.maximum && compareVersions(right.maximum, maximum) < 0) {
164
+ maximum = right.maximum;
165
+ maximumInclusive = right.maximumInclusive;
166
+ } else if (right.maximum && compareVersions(right.maximum, maximum) === 0) maximumInclusive = maximumInclusive && right.maximumInclusive;
167
+ if (minimum && maximum) {
168
+ const compared = compareVersions(minimum, maximum);
169
+ if (compared > 0 || compared === 0 && !(minimumInclusive && maximumInclusive)) return void 0;
170
+ }
171
+ return {
172
+ minimum,
173
+ minimumInclusive,
174
+ maximum,
175
+ maximumInclusive
176
+ };
177
+ }
178
+ function comparatorRange(operator, operand) {
179
+ if (!operator || operator === "=") return operandRange(operand);
180
+ if (operator === ">=") return {
181
+ minimum: operand.version,
182
+ minimumInclusive: true,
183
+ maximumInclusive: false
184
+ };
185
+ if (operator === ">") {
186
+ const partialBoundary = operand.components < 3 ? nextVersionBoundary(operand) : void 0;
187
+ return {
188
+ minimum: partialBoundary ?? operand.version,
189
+ minimumInclusive: Boolean(partialBoundary),
190
+ maximumInclusive: false
191
+ };
192
+ }
193
+ if (operator === "<") return {
194
+ minimumInclusive: true,
195
+ maximum: operand.version,
196
+ maximumInclusive: false
197
+ };
198
+ const partialBoundary = operand.components < 3 ? nextVersionBoundary(operand) : void 0;
199
+ return {
200
+ minimumInclusive: true,
201
+ maximum: partialBoundary ?? operand.version,
202
+ maximumInclusive: !partialBoundary
203
+ };
204
+ }
205
+ function parseVersionRangeBranch(value) {
206
+ const branch = normalizeAgentVersion(value).trim();
207
+ if (!branch) return void 0;
208
+ const hyphen = branch.match(/^(.+?)\s+-\s+(.+)$/u);
209
+ if (hyphen) {
210
+ const minimumOperand = parseVersionOperand(hyphen[1]);
211
+ const maximumOperand = parseVersionOperand(hyphen[2]);
212
+ if (!minimumOperand || !maximumOperand) return void 0;
213
+ const maximumBoundary = maximumOperand.components < 3 ? nextVersionBoundary(maximumOperand) : maximumOperand.version;
214
+ return intersectRanges({
215
+ minimum: minimumOperand.version,
216
+ minimumInclusive: true,
217
+ maximumInclusive: false
218
+ }, {
219
+ minimumInclusive: true,
220
+ maximum: maximumBoundary,
221
+ maximumInclusive: maximumOperand.components === 3
222
+ });
223
+ }
224
+ const special = branch.match(/^(\^|~)\s*(.+)$/u);
225
+ if (special) {
226
+ const operand = parseVersionOperand(special[2]);
227
+ if (!operand || operand.components === 0) return void 0;
228
+ return special[1] === "^" ? caretRange(operand) : tildeRange(operand);
229
+ }
230
+ const comparators = Array.from(branch.matchAll(/(>=|<=|>|<|=)\s*([^\s]+)/gu));
231
+ if (comparators.length > 0) {
232
+ if (comparators.map((match) => match[0]).join(" ").replace(/\s+/gu, " ") !== branch.replace(/\s+/gu, " ")) return void 0;
233
+ let range = {
234
+ minimumInclusive: true,
235
+ maximumInclusive: false
236
+ };
237
+ for (const comparator of comparators) {
238
+ const operand = parseVersionOperand(comparator[2]);
239
+ if (!operand) return void 0;
240
+ const next = intersectRanges(range, comparatorRange(comparator[1], operand));
241
+ if (!next) return void 0;
242
+ range = next;
243
+ }
244
+ return range;
245
+ }
246
+ const operand = parseVersionOperand(branch);
247
+ return operand ? operandRange(operand) : void 0;
248
+ }
249
+ function parseVersionRanges(value) {
250
+ return normalizeAgentVersion(value).split("||").map((branch) => parseVersionRangeBranch(branch)).filter((range) => Boolean(range));
251
+ }
252
+ function parseVersionConstraintBranches(value) {
253
+ const ranges = parseVersionRanges(value);
254
+ if (ranges.length > 0) return ranges.map((range) => ({
255
+ kind: "range",
256
+ range
257
+ }));
258
+ const normalized = normalizeAgentVersion(value);
259
+ return normalized ? [{
260
+ kind: "opaque",
261
+ value: normalized
262
+ }] : [];
263
+ }
264
+ function intersectVersionConstraintBranches(left, right) {
265
+ if (left.kind === "opaque" || right.kind === "opaque") return left.kind === "opaque" && right.kind === "opaque" && left.value === right.value ? left : void 0;
266
+ const range = intersectRanges(left.range, right.range);
267
+ return range ? {
268
+ kind: "range",
269
+ range
270
+ } : void 0;
271
+ }
272
+ /**
273
+ * Return true when choosing one alternative from every group can select one shared version.
274
+ *
275
+ * Each inner group is an OR list while the groups themselves are intersected. Computing the
276
+ * accumulated range prevents pairwise matches from accepting three mutually incompatible scopes.
277
+ */
278
+ function agentVersionConstraintGroupsOverlap(groups) {
279
+ if (groups.length === 0) return false;
280
+ let intersections = groups[0].flatMap(parseVersionConstraintBranches);
281
+ if (intersections.length === 0) return false;
282
+ for (const group of groups.slice(1)) {
283
+ const branches = group.flatMap(parseVersionConstraintBranches);
284
+ if (branches.length === 0) return false;
285
+ intersections = intersections.flatMap((intersection) => branches.map((branch) => intersectVersionConstraintBranches(intersection, branch)).filter((value) => Boolean(value)));
286
+ if (intersections.length === 0) return false;
287
+ }
288
+ return true;
289
+ }
290
+ function rangeContains(range, version) {
291
+ if (range.minimum) {
292
+ const compared = compareVersions(version, range.minimum);
293
+ if (compared < 0 || compared === 0 && !range.minimumInclusive) return false;
294
+ }
295
+ if (range.maximum) {
296
+ const compared = compareVersions(version, range.maximum);
297
+ if (compared > 0 || compared === 0 && !range.maximumInclusive) return false;
298
+ }
299
+ return true;
300
+ }
301
+ function rangesOverlap(left, right) {
302
+ return Boolean(intersectRanges(left, right));
303
+ }
304
+ /** Match an exact requested version against an exact or range-like documented constraint. */
305
+ function agentVersionConstraintMatches(requested, constraint) {
306
+ if (normalizeAgentVersion(requested) === normalizeAgentVersion(constraint)) return Boolean(normalizeAgentVersion(requested));
307
+ const wanted = parseExactVersion(requested);
308
+ if (!wanted) return false;
309
+ return parseVersionRanges(constraint).some((range) => rangeContains(range, wanted));
310
+ }
311
+ /** Return true when two exact or range-like documented version constraints can select one version. */
312
+ function agentVersionConstraintsOverlap(left, right) {
313
+ const normalizedLeft = normalizeAgentVersion(left);
314
+ if (normalizedLeft === normalizeAgentVersion(right)) return Boolean(normalizedLeft);
315
+ const leftRanges = parseVersionRanges(left);
316
+ const rightRanges = parseVersionRanges(right);
317
+ return leftRanges.some((leftRange) => rightRanges.some((rightRange) => rangesOverlap(leftRange, rightRange)));
318
+ }
319
+
320
+ //#endregion
321
+ export { agentVersionConstraintGroupsOverlap, agentVersionConstraintMatches, agentVersionConstraintsOverlap, normalizeAgentFramework, normalizeAgentLocale, normalizeAgentScopeValues, normalizeAgentVersion };