@farming-labs/docs 0.2.104 → 0.2.105

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 (77) hide show
  1. package/dist/{agent-NerpHcQB.mjs → agent-CaCWThBY.mjs} +4 -4
  2. package/dist/{agent-PSrgiJD8.mjs → agent-DCTGj6J7.mjs} +48 -12
  3. package/dist/{agent-evals-U9d_db2u.mjs → agent-evals-D-sPJfXz.mjs} +5 -5
  4. package/dist/{agent-export-DlBUKkTt.mjs → agent-export-GcTZPLfB.mjs} +19 -17
  5. package/dist/agent-feedback-evaluations-DQCTFegz.mjs +240 -0
  6. package/dist/agent-maintenance-CuZ7iAKq.mjs +289 -0
  7. package/dist/agent-skills-bundle.d.mts +1 -1
  8. package/dist/{agent-skills-progressive-disclosure-CfIsq4Ew.mjs → agent-skills-progressive-disclosure-DL-q4JZo.mjs} +1 -1
  9. package/dist/{agent-skills-server-CIoL58X7.d.mts → agent-skills-server-D34054x5.d.mts} +2 -2
  10. package/dist/{agent-skills-server-DFqQyO_V.mjs → agent-skills-server-Ddbf15pY.mjs} +1 -1
  11. package/dist/agent-skills-vite.d.mts +3 -3
  12. package/dist/agent-skills-vite.mjs +2 -2
  13. package/dist/{agents-D3SLnQet.mjs → agents-e1SYT64z.mjs} +11 -11
  14. package/dist/{analytics-Bx44lg6d.mjs → analytics-CqfcIBdg.mjs} +1 -1
  15. package/dist/{analytics-B-jz7re8.d.mts → analytics-aeXwEvQX.d.mts} +1 -1
  16. package/dist/{authoring-BsWXMH43.mjs → authoring-Do87QzBd.mjs} +6 -6
  17. package/dist/{authoring-mcp-BCM5CJbJ.mjs → authoring-mcp-Be7quE5R.mjs} +2 -2
  18. package/dist/browser.d.mts +3 -3
  19. package/dist/browser.mjs +2 -2
  20. package/dist/cli/index.mjs +71 -35
  21. package/dist/client/react.d.mts +1 -1
  22. package/dist/client/react.mjs +1 -1
  23. package/dist/{cloud-BLxt_HYO.mjs → cloud-Bvof6mET.mjs} +3 -3
  24. package/dist/{cloud-ask-ai-19G2HJ62.d.mts → cloud-ask-ai-BqfiQaNZ.d.mts} +1 -1
  25. package/dist/{cloud-ask-ai-DeojA5lB.mjs → cloud-ask-ai-CK2qlNns.mjs} +1 -1
  26. package/dist/{codeblocks-qHdKGVaE.mjs → codeblocks-C911CdyJ.mjs} +2 -2
  27. package/dist/{agent-C9IdC__R.d.mts → content-change-hydration-CoYRs3pC.d.mts} +704 -678
  28. package/dist/{dev-B0iHJjTz.mjs → dev-Bx0JNglW.mjs} +2 -2
  29. package/dist/docs-cloud-server.d.mts +2 -2
  30. package/dist/docs-cloud-server.mjs +2 -2
  31. package/dist/{doctor-x3k6aE2I.mjs → doctor-CtK1CRPj.mjs} +17 -17
  32. package/dist/{downgrade-Dd3vvVdD.mjs → downgrade-BXmQMkMy.mjs} +2 -2
  33. package/dist/{feedback-DdWc33oO.mjs → feedback-DWVUMrxy.mjs} +1 -1
  34. package/dist/feedback-evals-k0sFDdms.mjs +146 -0
  35. package/dist/{golden-evaluations-7k7Akp3R.mjs → golden-evaluations-De4KwoYr.mjs} +3 -3
  36. package/dist/index.d.mts +174 -9
  37. package/dist/index.mjs +14 -11
  38. package/dist/{init-DKukQdOQ.mjs → init-CCV2eRNB.mjs} +3 -3
  39. package/dist/markdown-rendering.mjs +1 -1
  40. package/dist/{markdown-sections-7OoA7ylx.mjs → markdown-sections-BKy4labo.mjs} +110 -2
  41. package/dist/{mcp-B6ZZdp6F.mjs → mcp-DsjWxF7g.mjs} +11 -11
  42. package/dist/mcp.d.mts +5 -3
  43. package/dist/mcp.mjs +92 -29
  44. package/dist/{metadata-D4v_R1t5.mjs → metadata-7htr-Xj_.mjs} +1 -1
  45. package/dist/{openapi-mcp-B7u7Y0gB.mjs → openapi-mcp-DQ3xptKo.mjs} +68 -4
  46. package/dist/openapi-mcp-node-vO3IXVGI.mjs +43 -0
  47. package/dist/{package-version-P4TT_9IO.mjs → package-version-Ci99L0yo.mjs} +1 -1
  48. package/dist/{prompt-references-Ca2Rcrpw.mjs → prompt-references-1Wce71c7.mjs} +3 -3
  49. package/dist/propose-DJOiHu9Y.mjs +73 -0
  50. package/dist/retrieval-digest-B-SgtXKK.mjs +177 -0
  51. package/dist/retrieval-digest-DyNRD-mt.d.mts +467 -0
  52. package/dist/{review-DgaNTtP0.mjs → review-XI9FXeos.mjs} +12 -12
  53. package/dist/{robots-DNod0XKB.mjs → robots-BOjWB1ky.mjs} +2 -2
  54. package/dist/{robots-msD1xoH5.mjs → robots-CzKesbdX.mjs} +6 -6
  55. package/dist/{search-CNzq9S5S.mjs → search-DwAoC9X7.mjs} +12 -12
  56. package/dist/server.d.mts +6 -308
  57. package/dist/server.mjs +13 -12
  58. package/dist/{sidebar-DmXRpAAK.d.mts → sidebar-CJze8SBi.d.mts} +1 -1
  59. package/dist/{sitemap-CHvips7o.mjs → sitemap-DOaJIKJf.mjs} +11 -11
  60. package/dist/{sitemap-server-C2TauhKa.mjs → sitemap-server-NeVu8W38.mjs} +1 -1
  61. package/dist/{skills-aaE5L1go.mjs → skills-BILSESek.mjs} +11 -11
  62. package/dist/{standards-discovery-Ckx0tN7B.mjs → standards-discovery-Bpz90VYq.mjs} +2 -177
  63. package/dist/{standards-discovery-Cqq8QmlH.d.mts → standards-discovery-Xm84bS4M.d.mts} +1 -1
  64. package/dist/{types-BthCiAD9.d.mts → types-QhYMnKvb.d.mts} +35 -2
  65. package/dist/{upgrade-B0OA_7jE.mjs → upgrade-B92U83xo.mjs} +2 -2
  66. package/package.json +1 -1
  67. package/dist/retrieval-digest-DT9Ktc4C.d.mts +0 -164
  68. /package/dist/{agent-feedback-loop-CGrc-gDW.mjs → agent-feedback-loop-vaC-M1sx.mjs} +0 -0
  69. /package/dist/{audience-exposure-BW13cI2O.d.mts → audience-exposure-CkNZNeVX.d.mts} +0 -0
  70. /package/dist/{cloud-analytics-CSyFE6SS.mjs → cloud-analytics-Ci1yiwD8.mjs} +0 -0
  71. /package/dist/{code-blocks-c3nIrWOM.mjs → code-blocks-D90CCJFs.mjs} +0 -0
  72. /package/dist/{config-BhF6J2N4.mjs → config-DrZ3fXgf.mjs} +0 -0
  73. /package/dist/{errors-B5KTe1Xo.mjs → errors-BDmra6mz.mjs} +0 -0
  74. /package/dist/{i18n-B3BIxShC.mjs → i18n-B1gJ9EW0.mjs} +0 -0
  75. /package/dist/{sidebar-IcpElOVH.mjs → sidebar-3W51s2sF.mjs} +0 -0
  76. /package/dist/{templates-m_j4ARnu.mjs → templates-DdB4BBGq.mjs} +0 -0
  77. /package/dist/{utils-DcCUwxqS.mjs → utils-Cc1SrVza.mjs} +0 -0
@@ -1,7 +1,7 @@
1
- import { At as DEFAULT_SITEMAP_XML_ROUTE, Hn as DEFAULT_MCP_WELL_KNOWN_ROUTE, Ot as DEFAULT_SITEMAP_MD_ROUTE, c as DEFAULT_AGENT_SPEC_WELL_KNOWN_JSON_ROUTE, f as DEFAULT_DOCS_CONFIG_ROUTE, h as DEFAULT_LLMS_FULL_TXT_ROUTE, i as DEFAULT_AGENT_FEEDBACK_ROUTE, m as DEFAULT_DOCS_DIAGNOSTICS_ROUTE, t as DEFAULT_AGENTS_MD_ROUTE, v as DEFAULT_LLMS_TXT_ROUTE, x as DEFAULT_SKILL_MD_ROUTE } from "./agent-PSrgiJD8.mjs";
2
- import { C as DOCS_AGENT_MANIFEST_SCHEMA_MEDIA_TYPE, S as DOCS_AGENT_MANIFEST_FORMAT, T as DOCS_AGENT_MANIFEST_VERSION, f as DEFAULT_AGENT_SKILLS_ROUTE_PREFIX, n as API_CATALOG_MEDIA_TYPE, r as API_CATALOG_PROFILE_URI, t as AGENT_SKILLS_DISCOVERY_SCHEMA_URI, u as DEFAULT_AGENT_SKILLS_INDEX_ROUTE, v as DEFAULT_API_CATALOG_ROUTE, w as DOCS_AGENT_MANIFEST_SCHEMA_URI } from "./standards-discovery-Ckx0tN7B.mjs";
1
+ import { Un as DEFAULT_MCP_WELL_KNOWN_ROUTE, c as DEFAULT_AGENT_SPEC_WELL_KNOWN_JSON_ROUTE, f as DEFAULT_DOCS_CONFIG_ROUTE, h as DEFAULT_LLMS_FULL_TXT_ROUTE, i as DEFAULT_AGENT_FEEDBACK_ROUTE, jt as DEFAULT_SITEMAP_XML_ROUTE, kt as DEFAULT_SITEMAP_MD_ROUTE, m as DEFAULT_DOCS_DIAGNOSTICS_ROUTE, t as DEFAULT_AGENTS_MD_ROUTE, v as DEFAULT_LLMS_TXT_ROUTE, x as DEFAULT_SKILL_MD_ROUTE } from "./agent-DCTGj6J7.mjs";
2
+ import { C as DOCS_AGENT_MANIFEST_SCHEMA_MEDIA_TYPE, S as DOCS_AGENT_MANIFEST_FORMAT, T as DOCS_AGENT_MANIFEST_VERSION, f as DEFAULT_AGENT_SKILLS_ROUTE_PREFIX, n as API_CATALOG_MEDIA_TYPE, r as API_CATALOG_PROFILE_URI, t as AGENT_SKILLS_DISCOVERY_SCHEMA_URI, u as DEFAULT_AGENT_SKILLS_INDEX_ROUTE, v as DEFAULT_API_CATALOG_ROUTE, w as DOCS_AGENT_MANIFEST_SCHEMA_URI } from "./standards-discovery-Bpz90VYq.mjs";
3
3
  import { isDocsAgentSkillName, validateDocsAgentSkillFrontmatter } from "./agent-skills-spec.mjs";
4
- import { n as DEFAULT_ROBOTS_TXT_ROUTE } from "./robots-DNod0XKB.mjs";
4
+ import { n as DEFAULT_ROBOTS_TXT_ROUTE } from "./robots-BOjWB1ky.mjs";
5
5
  import matter from "gray-matter";
6
6
 
7
7
  //#region src/define-docs.ts
@@ -0,0 +1,73 @@
1
+ import { n as analyzeDocsAgentMaintenanceSignals, r as parseDocsAgentMaintenanceSignals } from "./agent-maintenance-CuZ7iAKq.mjs";
2
+ import { mkdirSync, readFileSync, renameSync, writeFileSync } from "node:fs";
3
+ import path from "node:path";
4
+ import pc from "picocolors";
5
+
6
+ //#region src/cli/propose.ts
7
+ function parseAgentMaintenanceProposeArgs(argv) {
8
+ const options = { inputs: [] };
9
+ for (let index = 0; index < argv.length; index += 1) {
10
+ const argument = argv[index];
11
+ if (argument === "--write") options.write = true;
12
+ else if (argument === "--json") options.json = true;
13
+ else if (argument === "--help" || argument === "-h") options.help = true;
14
+ else if (argument === "--input" || argument === "--output" || argument === "--min-occurrences") {
15
+ const value = argv[index + 1];
16
+ if (!value || value.startsWith("--")) throw new Error(`${argument} requires a value.`);
17
+ index += 1;
18
+ if (argument === "--input") options.inputs.push(value);
19
+ else if (argument === "--output") options.output = value;
20
+ else {
21
+ const parsed = Number(value);
22
+ if (!Number.isInteger(parsed) || parsed < 1 || parsed > 100) throw new Error("--min-occurrences must be an integer from 1 through 100.");
23
+ options.minOccurrences = parsed;
24
+ }
25
+ } else throw new Error(`Unknown agent propose flag: ${argument}`);
26
+ }
27
+ return options;
28
+ }
29
+ function resolveProjectPath(rootDir, value) {
30
+ if (path.isAbsolute(value)) throw new Error("Maintenance paths must be project-relative.");
31
+ const candidate = path.resolve(rootDir, value);
32
+ const relative = path.relative(rootDir, candidate);
33
+ if (relative.startsWith("..") || path.isAbsolute(relative)) throw new Error("Maintenance paths must stay inside the project root.");
34
+ return candidate;
35
+ }
36
+ function writeReport(outputPath, report) {
37
+ mkdirSync(path.dirname(outputPath), { recursive: true });
38
+ const temporaryPath = `${outputPath}.${process.pid}.tmp`;
39
+ writeFileSync(temporaryPath, `${JSON.stringify(report, null, 2)}\n`, "utf8");
40
+ renameSync(temporaryPath, outputPath);
41
+ }
42
+ async function runAgentMaintenancePropose(options = {}) {
43
+ const rootDir = path.resolve(options.rootDir ?? process.cwd());
44
+ const report = analyzeDocsAgentMaintenanceSignals((options.inputs && options.inputs.length > 0 ? options.inputs : [".farming-labs/agent-feedback-improvements.json"]).flatMap((input) => parseDocsAgentMaintenanceSignals(readFileSync(resolveProjectPath(rootDir, input), "utf8"))), { minOccurrences: options.minOccurrences });
45
+ if (options.write) {
46
+ const outputPath = resolveProjectPath(rootDir, options.output ?? ".farming-labs/agent-maintenance-proposals.json");
47
+ writeReport(outputPath, report);
48
+ if (!options.json) console.log(pc.green(`Wrote ${path.relative(rootDir, outputPath)} with ${report.proposalCount} reviewable proposal${report.proposalCount === 1 ? "" : "s"}.`));
49
+ }
50
+ if (options.json || !options.write) console.log(JSON.stringify(report, null, 2));
51
+ return report;
52
+ }
53
+ function printAgentMaintenanceProposeHelp() {
54
+ console.log(`${pc.bold("docs agent propose")} — turn recurring signals into reviewable maintenance drafts
55
+
56
+ ${pc.dim("Usage:")}
57
+ docs agent propose --input .farming-labs/agent-feedback-improvements.json
58
+ docs agent propose --input search-signals.jsonl --input support-signals.json --write
59
+
60
+ ${pc.dim("Options:")}
61
+ ${pc.cyan("--input <path>")} Repeatable JSON/JSONL signal or feedback report
62
+ ${pc.cyan("--min-occurrences <1-100>")} Proposal threshold (default: 2)
63
+ ${pc.cyan("--write")} Write the draft-only proposal report
64
+ ${pc.cyan("--output <path>")} Output path (default: .farming-labs/agent-maintenance-proposals.json)
65
+ ${pc.cyan("--json")} Print JSON when writing
66
+
67
+ Signal sources: agent-feedback, ask-ai, git, issue, mcp, search, support.
68
+ The command never edits documentation, creates issues, publishes branches, or merges changes.
69
+ `);
70
+ }
71
+
72
+ //#endregion
73
+ export { parseAgentMaintenanceProposeArgs, printAgentMaintenanceProposeHelp, runAgentMaintenancePropose };
@@ -0,0 +1,177 @@
1
+ //#region src/retrieval-digest.ts
2
+ const SHA256_INITIAL_STATE = [
3
+ 1779033703,
4
+ 3144134277,
5
+ 1013904242,
6
+ 2773480762,
7
+ 1359893119,
8
+ 2600822924,
9
+ 528734635,
10
+ 1541459225
11
+ ];
12
+ const SHA256_ROUND_CONSTANTS = [
13
+ 1116352408,
14
+ 1899447441,
15
+ 3049323471,
16
+ 3921009573,
17
+ 961987163,
18
+ 1508970993,
19
+ 2453635748,
20
+ 2870763221,
21
+ 3624381080,
22
+ 310598401,
23
+ 607225278,
24
+ 1426881987,
25
+ 1925078388,
26
+ 2162078206,
27
+ 2614888103,
28
+ 3248222580,
29
+ 3835390401,
30
+ 4022224774,
31
+ 264347078,
32
+ 604807628,
33
+ 770255983,
34
+ 1249150122,
35
+ 1555081692,
36
+ 1996064986,
37
+ 2554220882,
38
+ 2821834349,
39
+ 2952996808,
40
+ 3210313671,
41
+ 3336571891,
42
+ 3584528711,
43
+ 113926993,
44
+ 338241895,
45
+ 666307205,
46
+ 773529912,
47
+ 1294757372,
48
+ 1396182291,
49
+ 1695183700,
50
+ 1986661051,
51
+ 2177026350,
52
+ 2456956037,
53
+ 2730485921,
54
+ 2820302411,
55
+ 3259730800,
56
+ 3345764771,
57
+ 3516065817,
58
+ 3600352804,
59
+ 4094571909,
60
+ 275423344,
61
+ 430227734,
62
+ 506948616,
63
+ 659060556,
64
+ 883997877,
65
+ 958139571,
66
+ 1322822218,
67
+ 1537002063,
68
+ 1747873779,
69
+ 1955562222,
70
+ 2024104815,
71
+ 2227730452,
72
+ 2361852424,
73
+ 2428436474,
74
+ 2756734187,
75
+ 3204031479,
76
+ 3329325298
77
+ ];
78
+ function rotateRight(value, bits) {
79
+ return value >>> bits | value << 32 - bits;
80
+ }
81
+ function normalizeDigestContent(value) {
82
+ return value.replace(/\r\n?/gu, "\n").replace(/^\uFEFF/u, "").trimEnd();
83
+ }
84
+ function toSha256Bytes(value) {
85
+ return typeof value === "string" ? new TextEncoder().encode(value) : value;
86
+ }
87
+ /** Validate the bounded HTTP(S) URL or root-relative URI reference used by provenance. */
88
+ function isDocsRetrievalCanonicalUrl(value) {
89
+ const hasUnsafeCharacter = value.includes("\\") || Array.from(value).some((character) => {
90
+ const codePoint = character.codePointAt(0) ?? 0;
91
+ return codePoint <= 31 || codePoint === 127;
92
+ });
93
+ if (!value || value !== value.trim() || value.length > 4096 || hasUnsafeCharacter) return false;
94
+ if (/^\/(?!\/)/u.test(value)) try {
95
+ new URL(value, "https://docs.local");
96
+ return true;
97
+ } catch {
98
+ return false;
99
+ }
100
+ try {
101
+ const url = new URL(value);
102
+ return (url.protocol === "http:" || url.protocol === "https:") && !url.username && !url.password;
103
+ } catch {
104
+ return false;
105
+ }
106
+ }
107
+ /** Hash exact bytes with portable SHA-256 in Node, edge, and browser runtimes. */
108
+ function sha256DocsContent(value) {
109
+ const input = toSha256Bytes(value);
110
+ const paddedLength = Math.ceil((input.length + 9) / 64) * 64;
111
+ const padded = new Uint8Array(paddedLength);
112
+ padded.set(input);
113
+ padded[input.length] = 128;
114
+ const bitLength = input.length * 8;
115
+ const dataView = new DataView(padded.buffer);
116
+ dataView.setUint32(paddedLength - 8, Math.floor(bitLength / 4294967296), false);
117
+ dataView.setUint32(paddedLength - 4, bitLength >>> 0, false);
118
+ const state = Uint32Array.from(SHA256_INITIAL_STATE);
119
+ const words = new Uint32Array(64);
120
+ for (let offset = 0; offset < padded.length; offset += 64) {
121
+ for (let index = 0; index < 16; index += 1) words[index] = dataView.getUint32(offset + index * 4, false);
122
+ for (let index = 16; index < 64; index += 1) {
123
+ const previous15 = words[index - 15];
124
+ const previous2 = words[index - 2];
125
+ const sigma0 = rotateRight(previous15, 7) ^ rotateRight(previous15, 18) ^ previous15 >>> 3;
126
+ const sigma1 = rotateRight(previous2, 17) ^ rotateRight(previous2, 19) ^ previous2 >>> 10;
127
+ words[index] = words[index - 16] + sigma0 + words[index - 7] + sigma1 >>> 0;
128
+ }
129
+ let a = state[0];
130
+ let b = state[1];
131
+ let c = state[2];
132
+ let d = state[3];
133
+ let e = state[4];
134
+ let f = state[5];
135
+ let g = state[6];
136
+ let h = state[7];
137
+ for (let index = 0; index < 64; index += 1) {
138
+ const sum1 = rotateRight(e, 6) ^ rotateRight(e, 11) ^ rotateRight(e, 25);
139
+ const choice = e & f ^ ~e & g;
140
+ const temporary1 = h + sum1 + choice + SHA256_ROUND_CONSTANTS[index] + words[index] >>> 0;
141
+ const temporary2 = (rotateRight(a, 2) ^ rotateRight(a, 13) ^ rotateRight(a, 22)) + (a & b ^ a & c ^ b & c) >>> 0;
142
+ h = g;
143
+ g = f;
144
+ f = e;
145
+ e = d + temporary1 >>> 0;
146
+ d = c;
147
+ c = b;
148
+ b = a;
149
+ a = temporary1 + temporary2 >>> 0;
150
+ }
151
+ state[0] = state[0] + a >>> 0;
152
+ state[1] = state[1] + b >>> 0;
153
+ state[2] = state[2] + c >>> 0;
154
+ state[3] = state[3] + d >>> 0;
155
+ state[4] = state[4] + e >>> 0;
156
+ state[5] = state[5] + f >>> 0;
157
+ state[6] = state[6] + g >>> 0;
158
+ state[7] = state[7] + h >>> 0;
159
+ }
160
+ return Array.from(state, (word) => word.toString(16).padStart(8, "0")).join("");
161
+ }
162
+ /** Hash exact message-content bytes with portable SHA-256. */
163
+ function digestDocsContent(value) {
164
+ return `sha256:${sha256DocsContent(value)}`;
165
+ }
166
+ /**
167
+ * Hash the normalized retrieval projection used by search provenance.
168
+ *
169
+ * The projection removes one leading BOM, normalizes line endings to LF, and trims
170
+ * trailing whitespace. This deliberately differs from HTTP digests over exact bytes.
171
+ */
172
+ function digestDocsRetrievalContent(value) {
173
+ return digestDocsContent(normalizeDigestContent(value));
174
+ }
175
+
176
+ //#endregion
177
+ export { sha256DocsContent as i, digestDocsRetrievalContent as n, isDocsRetrievalCanonicalUrl as r, digestDocsContent as t };