docspack 0.0.1 → 0.1.0

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 (155) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +59 -0
  3. package/bin/docspack.js +25 -0
  4. package/dist/build.d.ts +31 -0
  5. package/dist/build.d.ts.map +1 -0
  6. package/dist/build.js +435 -0
  7. package/dist/build.js.map +1 -0
  8. package/dist/cli.d.ts +3 -0
  9. package/dist/cli.d.ts.map +1 -0
  10. package/dist/cli.js +763 -0
  11. package/dist/cli.js.map +1 -0
  12. package/dist/config.d.ts +41 -0
  13. package/dist/config.d.ts.map +1 -0
  14. package/dist/config.js +118 -0
  15. package/dist/config.js.map +1 -0
  16. package/dist/db.d.ts +60 -0
  17. package/dist/db.d.ts.map +1 -0
  18. package/dist/db.js +204 -0
  19. package/dist/db.js.map +1 -0
  20. package/dist/discovery.d.ts +31 -0
  21. package/dist/discovery.d.ts.map +1 -0
  22. package/dist/discovery.js +126 -0
  23. package/dist/discovery.js.map +1 -0
  24. package/dist/doctor.d.ts +25 -0
  25. package/dist/doctor.d.ts.map +1 -0
  26. package/dist/doctor.js +276 -0
  27. package/dist/doctor.js.map +1 -0
  28. package/dist/document.d.ts +13 -0
  29. package/dist/document.d.ts.map +1 -0
  30. package/dist/document.js +47 -0
  31. package/dist/document.js.map +1 -0
  32. package/dist/errors.d.ts +9 -0
  33. package/dist/errors.d.ts.map +1 -0
  34. package/dist/errors.js +10 -0
  35. package/dist/errors.js.map +1 -0
  36. package/dist/exports.d.ts +20 -0
  37. package/dist/exports.d.ts.map +1 -0
  38. package/dist/exports.js +100 -0
  39. package/dist/exports.js.map +1 -0
  40. package/dist/feedback.d.ts +68 -0
  41. package/dist/feedback.d.ts.map +1 -0
  42. package/dist/feedback.js +0 -0
  43. package/dist/feedback.js.map +1 -0
  44. package/dist/html.d.ts +4 -0
  45. package/dist/html.d.ts.map +1 -0
  46. package/dist/html.js +23 -0
  47. package/dist/html.js.map +1 -0
  48. package/dist/http.d.ts +30 -0
  49. package/dist/http.d.ts.map +1 -0
  50. package/dist/http.js +144 -0
  51. package/dist/http.js.map +1 -0
  52. package/dist/index.d.ts +25 -0
  53. package/dist/index.d.ts.map +1 -0
  54. package/dist/index.js +25 -0
  55. package/dist/index.js.map +1 -0
  56. package/dist/init/detect.d.ts +16 -0
  57. package/dist/init/detect.d.ts.map +1 -0
  58. package/dist/init/detect.js +120 -0
  59. package/dist/init/detect.js.map +1 -0
  60. package/dist/init/plan.d.ts +43 -0
  61. package/dist/init/plan.d.ts.map +1 -0
  62. package/dist/init/plan.js +145 -0
  63. package/dist/init/plan.js.map +1 -0
  64. package/dist/init/run.d.ts +28 -0
  65. package/dist/init/run.d.ts.map +1 -0
  66. package/dist/init/run.js +96 -0
  67. package/dist/init/run.js.map +1 -0
  68. package/dist/init/templates.d.ts +24 -0
  69. package/dist/init/templates.d.ts.map +1 -0
  70. package/dist/init/templates.js +181 -0
  71. package/dist/init/templates.js.map +1 -0
  72. package/dist/init/write.d.ts +20 -0
  73. package/dist/init/write.d.ts.map +1 -0
  74. package/dist/init/write.js +56 -0
  75. package/dist/init/write.js.map +1 -0
  76. package/dist/kinds.d.ts +14 -0
  77. package/dist/kinds.d.ts.map +1 -0
  78. package/dist/kinds.js +15 -0
  79. package/dist/kinds.js.map +1 -0
  80. package/dist/llms-txt.d.ts +25 -0
  81. package/dist/llms-txt.d.ts.map +1 -0
  82. package/dist/llms-txt.js +94 -0
  83. package/dist/llms-txt.js.map +1 -0
  84. package/dist/mcp.d.ts +15 -0
  85. package/dist/mcp.d.ts.map +1 -0
  86. package/dist/mcp.js +158 -0
  87. package/dist/mcp.js.map +1 -0
  88. package/dist/preview.d.ts +18 -0
  89. package/dist/preview.d.ts.map +1 -0
  90. package/dist/preview.js +72 -0
  91. package/dist/preview.js.map +1 -0
  92. package/dist/prompt.d.ts +27 -0
  93. package/dist/prompt.d.ts.map +1 -0
  94. package/dist/prompt.js +79 -0
  95. package/dist/prompt.js.map +1 -0
  96. package/dist/search.d.ts +41 -0
  97. package/dist/search.d.ts.map +1 -0
  98. package/dist/search.js +60 -0
  99. package/dist/search.js.map +1 -0
  100. package/dist/snippet.d.ts +20 -0
  101. package/dist/snippet.d.ts.map +1 -0
  102. package/dist/snippet.js +29 -0
  103. package/dist/snippet.js.map +1 -0
  104. package/dist/spec.d.ts +38 -0
  105. package/dist/spec.d.ts.map +1 -0
  106. package/dist/spec.js +105 -0
  107. package/dist/spec.js.map +1 -0
  108. package/dist/style.d.ts +33 -0
  109. package/dist/style.d.ts.map +1 -0
  110. package/dist/style.js +94 -0
  111. package/dist/style.js.map +1 -0
  112. package/dist/submit.d.ts +61 -0
  113. package/dist/submit.d.ts.map +1 -0
  114. package/dist/submit.js +111 -0
  115. package/dist/submit.js.map +1 -0
  116. package/dist/sync.d.ts +29 -0
  117. package/dist/sync.d.ts.map +1 -0
  118. package/dist/sync.js +73 -0
  119. package/dist/sync.js.map +1 -0
  120. package/dist/verify.d.ts +44 -0
  121. package/dist/verify.d.ts.map +1 -0
  122. package/dist/verify.js +291 -0
  123. package/dist/verify.js.map +1 -0
  124. package/package.json +60 -5
  125. package/src/build.ts +572 -0
  126. package/src/cli.ts +883 -0
  127. package/src/config.ts +158 -0
  128. package/src/db.ts +261 -0
  129. package/src/discovery.ts +161 -0
  130. package/src/doctor.ts +344 -0
  131. package/src/document.ts +59 -0
  132. package/src/errors.ts +10 -0
  133. package/src/exports.ts +120 -0
  134. package/src/feedback.ts +0 -0
  135. package/src/html.ts +24 -0
  136. package/src/http.ts +190 -0
  137. package/src/index.ts +132 -0
  138. package/src/init/detect.ts +142 -0
  139. package/src/init/plan.ts +215 -0
  140. package/src/init/run.ts +142 -0
  141. package/src/init/templates.ts +200 -0
  142. package/src/init/write.ts +83 -0
  143. package/src/kinds.ts +17 -0
  144. package/src/llms-txt.ts +116 -0
  145. package/src/mcp.ts +196 -0
  146. package/src/preview.ts +98 -0
  147. package/src/prompt.ts +103 -0
  148. package/src/search.ts +96 -0
  149. package/src/snippet.ts +30 -0
  150. package/src/spec.ts +138 -0
  151. package/src/style.ts +111 -0
  152. package/src/submit.ts +189 -0
  153. package/src/sync.ts +112 -0
  154. package/src/verify.ts +355 -0
  155. package/bin/cli.js +0 -2
@@ -0,0 +1,100 @@
1
+ import { readdir, readFile } from "node:fs/promises";
2
+ import { join, relative, sep } from "node:path";
3
+ /** Declaration forms that introduce a name a caller could write. */
4
+ const DECLARATIONS = [
5
+ /(?:^|\s)(?:export\s+)?(?:declare\s+)?(?:async\s+)?(?:function|const|let|var|class|interface|type|enum|namespace|module)\s+([A-Za-z_$][\w$]*)/g,
6
+ /(?:^|\s)(?:readonly\s+)?(?:get|set)\s+([A-Za-z_$][\w$]*)\s*\(/g,
7
+ /^\s*(?:readonly\s+)?([A-Za-z_$][\w$]*)\??\s*[(<:]/gm,
8
+ ];
9
+ const EXPORT_LIST = /export\s*(?:type\s*)?\{([^}]*)\}/g;
10
+ const MAX_FILES = 400;
11
+ const MAX_BYTES = 8_000_000;
12
+ /**
13
+ * Reads every `.d.ts` in an installed package. Reading all of them rather than following the
14
+ * entry points is deliberate: a wider set of known names means fewer false accusations, which
15
+ * matters more here than catching every last rename.
16
+ */
17
+ export async function readExportSurface(dir) {
18
+ const manifest = await readJson(join(dir, "package.json"));
19
+ if (manifest === undefined)
20
+ return undefined;
21
+ const declarations = await findDeclarationFiles(dir);
22
+ if (declarations.length === 0)
23
+ return undefined;
24
+ const names = new Set();
25
+ let budget = MAX_BYTES;
26
+ for (const file of declarations) {
27
+ if (budget <= 0)
28
+ break;
29
+ let source;
30
+ try {
31
+ source = await readFile(file, "utf8");
32
+ }
33
+ catch {
34
+ continue;
35
+ }
36
+ budget -= source.length;
37
+ collectNames(stripComments(source), names);
38
+ }
39
+ return {
40
+ name: typeof manifest.name === "string" ? manifest.name : "",
41
+ version: typeof manifest.version === "string" ? manifest.version : "",
42
+ names,
43
+ files: declarations.length,
44
+ };
45
+ }
46
+ function collectNames(source, into) {
47
+ for (const pattern of DECLARATIONS) {
48
+ pattern.lastIndex = 0;
49
+ for (const match of source.matchAll(pattern)) {
50
+ if (match[1] !== undefined)
51
+ into.add(match[1]);
52
+ }
53
+ }
54
+ EXPORT_LIST.lastIndex = 0;
55
+ for (const match of source.matchAll(EXPORT_LIST)) {
56
+ for (const entry of (match[1] ?? "").split(",")) {
57
+ // `export { internalName as publicName }` — both names are worth knowing.
58
+ for (const part of entry.split(/\s+as\s+/)) {
59
+ const name = part.trim().replace(/^type\s+/, "");
60
+ if (/^[A-Za-z_$][\w$]*$/.test(name))
61
+ into.add(name);
62
+ }
63
+ }
64
+ }
65
+ }
66
+ function stripComments(source) {
67
+ return source.replace(/\/\*[\s\S]*?\*\//g, " ").replace(/(^|\s)\/\/[^\n]*/g, "$1");
68
+ }
69
+ async function findDeclarationFiles(dir) {
70
+ let found;
71
+ try {
72
+ found = await readdir(dir, { recursive: true, withFileTypes: true });
73
+ }
74
+ catch {
75
+ return [];
76
+ }
77
+ return found
78
+ .filter((entry) => entry.isFile() && entry.name.endsWith(".d.ts") && !isVendored(dir, entry))
79
+ .map((entry) => join(entry.parentPath, entry.name))
80
+ .slice(0, MAX_FILES);
81
+ }
82
+ /**
83
+ * True for a file under a nested `node_modules`. The package's own path is almost always inside
84
+ * one, so the check has to be relative to the package root rather than absolute.
85
+ */
86
+ function isVendored(dir, entry) {
87
+ return relative(dir, entry.parentPath).split(sep).includes("node_modules");
88
+ }
89
+ async function readJson(path) {
90
+ try {
91
+ const parsed = JSON.parse(await readFile(path, "utf8"));
92
+ return typeof parsed === "object" && parsed !== null
93
+ ? parsed
94
+ : undefined;
95
+ }
96
+ catch {
97
+ return undefined;
98
+ }
99
+ }
100
+ //# sourceMappingURL=exports.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exports.js","sourceRoot":"","sources":["../src/exports.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,68 @@
1
+ import { type FindingKind } from "./kinds.js";
2
+ /**
3
+ * A documentation problem recorded on this machine.
4
+ *
5
+ * Nothing here is ever transmitted. docspack has no code that can send a finding anywhere;
6
+ * the file is for a human to read, edit and act on.
7
+ */
8
+ export interface FeedbackFinding {
9
+ /** Stable identity: two reports of the same problem share it. */
10
+ readonly fingerprint: string;
11
+ readonly chunkId: string;
12
+ readonly package: string;
13
+ readonly version: string;
14
+ readonly kind: FindingKind;
15
+ /** The falsifiable claim, in one line. */
16
+ readonly evidence: string;
17
+ readonly expected?: string;
18
+ readonly actual?: string;
19
+ /** Code that demonstrates the problem. */
20
+ readonly repro?: string;
21
+ /** How many times this problem has been recorded. */
22
+ readonly seen: number;
23
+ readonly first: string;
24
+ readonly last: string;
25
+ }
26
+ export declare const FEEDBACK_DIR = ".docspack";
27
+ export declare const FEEDBACK_FILE = "feedback.jsonl";
28
+ export interface AddOptions {
29
+ readonly cwd: string;
30
+ readonly chunkId: string;
31
+ readonly kind: string;
32
+ readonly evidence: string;
33
+ readonly expected?: string;
34
+ readonly actual?: string;
35
+ readonly repro?: string;
36
+ /** Injectable so tests do not depend on the clock. */
37
+ readonly now?: Date;
38
+ }
39
+ export interface AddResult {
40
+ readonly finding: FeedbackFinding;
41
+ /** True when this problem was already recorded and the counter went up instead. */
42
+ readonly repeat: boolean;
43
+ }
44
+ export declare function feedbackPath(cwd: string): string;
45
+ /**
46
+ * Records a finding, or increments the one already recorded for the same problem.
47
+ *
48
+ * Every rule enforced here is enforced at the point of entry rather than at a maintainer's
49
+ * inbox, which is the whole reason this is safe to give an agent: a report that cannot carry
50
+ * its evidence cannot be written down in the first place.
51
+ */
52
+ export declare function addFinding(options: AddOptions): Promise<AddResult>;
53
+ /** Recorded findings, most repeated first. Missing or damaged lines are skipped, not fatal. */
54
+ export declare function readFeedback(cwd: string): Promise<FeedbackFinding[]>;
55
+ export interface RemoveOptions {
56
+ readonly cwd: string;
57
+ /** Fingerprints to drop. Ignored when `all` is set. */
58
+ readonly fingerprints?: readonly string[];
59
+ readonly all?: boolean;
60
+ }
61
+ /** Removes findings and returns how many went away. */
62
+ export declare function removeFindings(options: RemoveOptions): Promise<number>;
63
+ /**
64
+ * Identity of a *problem*, not of a report: the same claim about the same chunk of the same
65
+ * release fingerprints the same however many readers hit it.
66
+ */
67
+ export declare function fingerprintOf(packageId: string, chunk: string, kind: FindingKind, evidence: string): string;
68
+ //# sourceMappingURL=feedback.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"feedback.d.ts","sourceRoot":"","sources":["../src/feedback.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,WAAW,EAAwB,MAAM,YAAY,CAAC;AAGpE;;;;;GAKG;AACH,MAAM,WAAW,eAAe;IAC9B,iEAAiE;IACjE,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAC3B,0CAA0C;IAC1C,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,0CAA0C;IAC1C,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,qDAAqD;IACrD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,eAAO,MAAM,YAAY,cAAc,CAAC;AACxC,eAAO,MAAM,aAAa,mBAAmB,CAAC;AAE9C,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,sDAAsD;IACtD,QAAQ,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC;CACrB;AAED,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAC;IAClC,mFAAmF;IACnF,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;CAC1B;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEhD;AAED;;;;;;GAMG;AACH,wBAAsB,UAAU,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,SAAS,CAAC,CAwCxE;AAED,+FAA+F;AAC/F,wBAAsB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC,CAgB1E;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,uDAAuD;IACvD,QAAQ,CAAC,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1C,QAAQ,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,uDAAuD;AACvD,wBAAsB,cAAc,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,CA0B5E;AAaD;;;GAGG;AACH,wBAAgB,aAAa,CAC3B,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,WAAW,EACjB,QAAQ,EAAE,MAAM,GACf,MAAM,CASR"}
Binary file
@@ -0,0 +1 @@
1
+ {"version":3,"file":"feedback.js","sourceRoot":"","sources":["../src/feedback.ts"],"names":[],"mappings":"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"}
package/dist/html.d.ts ADDED
@@ -0,0 +1,4 @@
1
+ export declare function isHtml(contentType: string, body: string): boolean;
2
+ /** Best-effort HTML to Markdown conversion for sources that do not serve Markdown. */
3
+ export declare function htmlToMarkdown(html: string): string;
4
+ //# sourceMappingURL=html.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"html.d.ts","sourceRoot":"","sources":["../src/html.ts"],"names":[],"mappings":"AAaA,wBAAgB,MAAM,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAIjE;AAED,sFAAsF;AACtF,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGnD"}
package/dist/html.js ADDED
@@ -0,0 +1,23 @@
1
+ import TurndownService from "turndown";
2
+ // Documentation pages wrap their prose in <main> or <article>; everything outside is chrome.
3
+ const MAIN_CONTENT = /<(main|article)\b[^>]*>([\s\S]*)<\/\1>/i;
4
+ const turndown = new TurndownService({
5
+ headingStyle: "atx",
6
+ codeBlockStyle: "fenced",
7
+ bulletListMarker: "-",
8
+ hr: "---",
9
+ });
10
+ turndown.remove(["script", "style", "noscript", "nav", "header", "footer", "aside", "form", "svg"]);
11
+ export function isHtml(contentType, body) {
12
+ if (/\btext\/html\b|\bapplication\/xhtml\+xml\b/i.test(contentType))
13
+ return true;
14
+ if (/\btext\/(markdown|plain)\b/i.test(contentType))
15
+ return false;
16
+ return /^\s*(?:<!doctype html|<html\b)/i.test(body);
17
+ }
18
+ /** Best-effort HTML to Markdown conversion for sources that do not serve Markdown. */
19
+ export function htmlToMarkdown(html) {
20
+ const match = MAIN_CONTENT.exec(html);
21
+ return turndown.turndown(match?.[2] ?? html).trim();
22
+ }
23
+ //# sourceMappingURL=html.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"html.js","sourceRoot":"","sources":["../src/html.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,MAAM,UAAU,CAAC;AAEvC,6FAA6F;AAC7F,MAAM,YAAY,GAAG,yCAAyC,CAAC;AAE/D,MAAM,QAAQ,GAAG,IAAI,eAAe,CAAC;IACnC,YAAY,EAAE,KAAK;IACnB,cAAc,EAAE,QAAQ;IACxB,gBAAgB,EAAE,GAAG;IACrB,EAAE,EAAE,KAAK;CACV,CAAC,CAAC;AACH,QAAQ,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;AAEpG,MAAM,UAAU,MAAM,CAAC,WAAmB,EAAE,IAAY;IACtD,IAAI,6CAA6C,CAAC,IAAI,CAAC,WAAW,CAAC;QAAE,OAAO,IAAI,CAAC;IACjF,IAAI,6BAA6B,CAAC,IAAI,CAAC,WAAW,CAAC;QAAE,OAAO,KAAK,CAAC;IAClE,OAAO,iCAAiC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACtD,CAAC;AAED,sFAAsF;AACtF,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACtC,OAAO,QAAQ,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;AACtD,CAAC"}
package/dist/http.d.ts ADDED
@@ -0,0 +1,30 @@
1
+ export type FetchLike = (url: string, init?: RequestInit) => Promise<Response>;
2
+ export interface HttpResponse {
3
+ /** Final URL after redirects, when the runtime reports one. */
4
+ readonly url: string;
5
+ readonly contentType: string;
6
+ readonly text: string;
7
+ readonly bytes: number;
8
+ }
9
+ export interface GetOptions {
10
+ readonly maxBytes?: number;
11
+ readonly headers?: Readonly<Record<string, string>>;
12
+ }
13
+ export interface HttpClientOptions {
14
+ readonly fetchImpl?: FetchLike;
15
+ readonly timeoutMs?: number;
16
+ readonly maxBytes?: number;
17
+ readonly retries?: number;
18
+ readonly userAgent?: string;
19
+ }
20
+ /** Parses a URL and rejects anything that is not http(s), including `file:` and `data:`. */
21
+ export declare function assertHttpUrl(url: string): URL;
22
+ /** Small HTTP client with byte caps, timeouts and retries. The fetch implementation is injectable. */
23
+ export declare class HttpClient {
24
+ #private;
25
+ constructor(options?: HttpClientOptions);
26
+ get(url: string, options?: GetOptions): Promise<HttpResponse>;
27
+ /** True when a HEAD request succeeds. Used to probe for optional documents. */
28
+ exists(url: string, headers?: Readonly<Record<string, string>>): Promise<boolean>;
29
+ }
30
+ //# sourceMappingURL=http.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,SAAS,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;AAE/E,MAAM,WAAW,YAAY;IAC3B,+DAA+D;IAC/D,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CACrD;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,CAAC;IAC/B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAUD,4FAA4F;AAC5F,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAW9C;AAED,sGAAsG;AACtG,qBAAa,UAAU;;gBAOT,OAAO,GAAE,iBAAsB;IAQrC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,UAAe,GAAG,OAAO,CAAC,YAAY,CAAC;IAuBvE,+EAA+E;IACzE,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;CAsGxF"}
package/dist/http.js ADDED
@@ -0,0 +1,144 @@
1
+ import { DocspackError } from "./errors.js";
2
+ const RETRY_DELAYS_MS = [250, 1000];
3
+ const DEFAULT_ACCEPT = "text/markdown, text/plain, text/html;q=0.8, */*;q=0.1";
4
+ /** Signals a transport-level failure worth retrying. */
5
+ class RetryableHttpError extends Error {
6
+ }
7
+ const delay = (ms) => new Promise((done) => setTimeout(done, ms));
8
+ /** Parses a URL and rejects anything that is not http(s), including `file:` and `data:`. */
9
+ export function assertHttpUrl(url) {
10
+ let parsed;
11
+ try {
12
+ parsed = new URL(url);
13
+ }
14
+ catch {
15
+ throw new DocspackError(`"${url}" is not a valid URL`);
16
+ }
17
+ if (parsed.protocol !== "http:" && parsed.protocol !== "https:") {
18
+ throw new DocspackError(`Refusing to fetch "${url}": only http and https URLs are supported`);
19
+ }
20
+ return parsed;
21
+ }
22
+ /** Small HTTP client with byte caps, timeouts and retries. The fetch implementation is injectable. */
23
+ export class HttpClient {
24
+ #fetch;
25
+ #timeoutMs;
26
+ #maxBytes;
27
+ #retries;
28
+ #userAgent;
29
+ constructor(options = {}) {
30
+ this.#fetch = options.fetchImpl ?? globalThis.fetch;
31
+ this.#timeoutMs = options.timeoutMs ?? 30_000;
32
+ this.#maxBytes = options.maxBytes ?? 2_000_000;
33
+ this.#retries = options.retries ?? 2;
34
+ this.#userAgent = options.userAgent ?? "docspack";
35
+ }
36
+ async get(url, options = {}) {
37
+ const maxBytes = options.maxBytes ?? this.#maxBytes;
38
+ let lastError;
39
+ for (let attempt = 0; attempt <= this.#retries; attempt += 1) {
40
+ if (attempt > 0)
41
+ await delay(RETRY_DELAYS_MS[attempt - 1] ?? 1000);
42
+ try {
43
+ return await this.#getOnce(url, maxBytes, options.headers);
44
+ }
45
+ catch (error) {
46
+ if (!(error instanceof RetryableHttpError))
47
+ throw error;
48
+ lastError = error;
49
+ }
50
+ }
51
+ throw new DocspackError(`Could not fetch ${url}: ${lastError instanceof Error ? lastError.message : "unknown error"}`, {
52
+ hint: "Check your network connection and whether the documentation host is reachable.",
53
+ cause: lastError,
54
+ });
55
+ }
56
+ /** True when a HEAD request succeeds. Used to probe for optional documents. */
57
+ async exists(url, headers) {
58
+ try {
59
+ const parsed = assertHttpUrl(url);
60
+ const response = await this.#fetch(parsed.toString(), {
61
+ method: "HEAD",
62
+ redirect: "follow",
63
+ signal: AbortSignal.timeout(this.#timeoutMs),
64
+ headers: { "user-agent": this.#userAgent, ...headers },
65
+ });
66
+ return response.ok;
67
+ }
68
+ catch {
69
+ return false;
70
+ }
71
+ }
72
+ async #getOnce(url, maxBytes, headers) {
73
+ const parsed = assertHttpUrl(url);
74
+ let response;
75
+ try {
76
+ response = await this.#fetch(parsed.toString(), {
77
+ redirect: "follow",
78
+ signal: AbortSignal.timeout(this.#timeoutMs),
79
+ headers: { "user-agent": this.#userAgent, accept: DEFAULT_ACCEPT, ...headers },
80
+ });
81
+ }
82
+ catch (error) {
83
+ throw new RetryableHttpError(error instanceof Error ? error.message : String(error));
84
+ }
85
+ if (!response.ok) {
86
+ const detail = `${response.status} ${response.statusText}`.trim();
87
+ if (response.status === 429 || response.status >= 500) {
88
+ throw new RetryableHttpError(detail);
89
+ }
90
+ throw new DocspackError(`Could not fetch ${url}: ${detail}`, response.status === 404
91
+ ? {
92
+ hint: "The document does not exist at that URL. Check the source or pick another one.",
93
+ }
94
+ : {});
95
+ }
96
+ // A redirect must not be able to move the request onto a non-http scheme.
97
+ if (response.url.length > 0)
98
+ assertHttpUrl(response.url);
99
+ const declared = Number(response.headers.get("content-length") ?? Number.NaN);
100
+ if (Number.isFinite(declared) && declared > maxBytes) {
101
+ throw new DocspackError(`${url} is ${declared} bytes, over the ${maxBytes} byte limit`, {
102
+ hint: "Raise the limit with --max-bytes, or use a smaller documentation source.",
103
+ });
104
+ }
105
+ const { text, bytes } = await this.#readCapped(response, url, maxBytes);
106
+ return {
107
+ url: response.url.length > 0 ? response.url : parsed.toString(),
108
+ contentType: response.headers.get("content-type") ?? "",
109
+ text: text.replace(/\r\n/g, "\n"),
110
+ bytes,
111
+ };
112
+ }
113
+ async #readCapped(response, url, maxBytes) {
114
+ const body = response.body;
115
+ if (body === null) {
116
+ const text = await response.text();
117
+ const bytes = Buffer.byteLength(text, "utf8");
118
+ if (bytes > maxBytes)
119
+ throw this.#tooLarge(url, maxBytes);
120
+ return { text, bytes };
121
+ }
122
+ const reader = body.getReader();
123
+ const chunks = [];
124
+ let bytes = 0;
125
+ while (true) {
126
+ const { done, value } = await reader.read();
127
+ if (done)
128
+ break;
129
+ bytes += value.byteLength;
130
+ if (bytes > maxBytes) {
131
+ await reader.cancel();
132
+ throw this.#tooLarge(url, maxBytes);
133
+ }
134
+ chunks.push(value);
135
+ }
136
+ return { text: Buffer.concat(chunks).toString("utf8"), bytes };
137
+ }
138
+ #tooLarge(url, maxBytes) {
139
+ return new DocspackError(`${url} exceeds the ${maxBytes} byte limit`, {
140
+ hint: "Raise the limit with --max-bytes, or use a smaller documentation source.",
141
+ });
142
+ }
143
+ }
144
+ //# sourceMappingURL=http.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http.js","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ export { type BuildOptions, type BuildResult, buildPackage } from "./build.js";
2
+ export { type BuildConfig, CONFIG_KEY, type FeedbackChannel, parseBuildConfig, parseFeedbackChannel, readBuildConfig, } from "./config.js";
3
+ export { defaultStorePath, type IndexedChunk, type IndexedPackage, type SearchHit, type SearchOptions, Store, silenceSqliteWarning, toFtsQuery, } from "./db.js";
4
+ export { type DiscoveredPackage, type Discovery, discoverPackages, projectPackageIds, resolvePackageDir, } from "./discovery.js";
5
+ export { type DoctorOptions, type DoctorReport, type Finding, runDoctor, type Severity, } from "./doctor.js";
6
+ export { DocspackError } from "./errors.js";
7
+ export { type ExportSurface, readExportSurface } from "./exports.js";
8
+ export { type AddOptions, type AddResult, addFinding, FEEDBACK_DIR, FEEDBACK_FILE, type FeedbackFinding, feedbackPath, fingerprintOf, type RemoveOptions, readFeedback, removeFindings, } from "./feedback.js";
9
+ export { type FetchLike, HttpClient } from "./http.js";
10
+ export { type Detected, detectProject, type PackageManager } from "./init/detect.js";
11
+ export { type InitMode, type InitOptions, type InitPlan, type InitTemplate, type InputKind, type PlannedFile, planInit, proposePackageName, } from "./init/plan.js";
12
+ export { type InitResult, type RunInitOptions, runInit } from "./init/run.js";
13
+ export { type ApplyOptions, applyPlan, renderTree, type WriteStatus, type WrittenFile, } from "./init/write.js";
14
+ export { type FindingKind, isFindingKind, KINDS } from "./kinds.js";
15
+ export { fetchableLinks, type LlmsTxtDocument, type LlmsTxtLink, type LlmsTxtSection, parseLlmsTxt, } from "./llms-txt.js";
16
+ export { createMcpServer, type McpOptions, startMcpServer } from "./mcp.js";
17
+ export { type PreviewOptions, type PreviewResult, previewPackage } from "./preview.js";
18
+ export { type Choice, defaultStreams, Prompter, type PromptStreams } from "./prompt.js";
19
+ export { DEFAULT_LIMIT, DEFAULT_MAX_TOKENS, type QueryHit, type QueryOptions, type QueryResult, queryDocs, renderAnswer, splitPackageId, } from "./search.js";
20
+ export { AGENTS_SNIPPET, FEEDBACK_SNIPPET } from "./snippet.js";
21
+ export { CHUNKS_DIR, type ChunkSpec, chunkId, estimateTokens, isCommunityPackage, isDocsPackage, isVendorPackage, LLMS_DIR, MANIFEST_FILE, type PackageManifest, packageId, parseManifest, resolveChunkFile, SCHEMA_URL, serializeManifest, } from "./spec.js";
22
+ export { type BlockedFinding, type BlockedReason, issueUrl, prepareSubmission, type RoutedFinding, renderBody, type SubmitOptions, type SubmitReport, } from "./submit.js";
23
+ export { type SyncedPackage, type SyncOptions, type SyncResult, type SyncStatus, syncProject, } from "./sync.js";
24
+ export { type DriftFinding, type VerifiedPackage, type VerifyOptions, type VerifyReport, type VerifyStatus, verifyProject, } from "./verify.js";
25
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js ADDED
@@ -0,0 +1,25 @@
1
+ export { buildPackage } from "./build.js";
2
+ export { CONFIG_KEY, parseBuildConfig, parseFeedbackChannel, readBuildConfig, } from "./config.js";
3
+ export { defaultStorePath, Store, silenceSqliteWarning, toFtsQuery, } from "./db.js";
4
+ export { discoverPackages, projectPackageIds, resolvePackageDir, } from "./discovery.js";
5
+ export { runDoctor, } from "./doctor.js";
6
+ export { DocspackError } from "./errors.js";
7
+ export { readExportSurface } from "./exports.js";
8
+ export { addFinding, FEEDBACK_DIR, FEEDBACK_FILE, feedbackPath, fingerprintOf, readFeedback, removeFindings, } from "./feedback.js";
9
+ export { HttpClient } from "./http.js";
10
+ export { detectProject } from "./init/detect.js";
11
+ export { planInit, proposePackageName, } from "./init/plan.js";
12
+ export { runInit } from "./init/run.js";
13
+ export { applyPlan, renderTree, } from "./init/write.js";
14
+ export { isFindingKind, KINDS } from "./kinds.js";
15
+ export { fetchableLinks, parseLlmsTxt, } from "./llms-txt.js";
16
+ export { createMcpServer, startMcpServer } from "./mcp.js";
17
+ export { previewPackage } from "./preview.js";
18
+ export { defaultStreams, Prompter } from "./prompt.js";
19
+ export { DEFAULT_LIMIT, DEFAULT_MAX_TOKENS, queryDocs, renderAnswer, splitPackageId, } from "./search.js";
20
+ export { AGENTS_SNIPPET, FEEDBACK_SNIPPET } from "./snippet.js";
21
+ export { CHUNKS_DIR, chunkId, estimateTokens, isCommunityPackage, isDocsPackage, isVendorPackage, LLMS_DIR, MANIFEST_FILE, packageId, parseManifest, resolveChunkFile, SCHEMA_URL, serializeManifest, } from "./spec.js";
22
+ export { issueUrl, prepareSubmission, renderBody, } from "./submit.js";
23
+ export { syncProject, } from "./sync.js";
24
+ export { verifyProject, } from "./verify.js";
25
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuC,YAAY,EAAE,MAAM,YAAY,CAAC;AAC/E,OAAO,EAEL,UAAU,EAEV,gBAAgB,EAChB,oBAAoB,EACpB,eAAe,GAChB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,gBAAgB,EAKhB,KAAK,EACL,oBAAoB,EACpB,UAAU,GACX,MAAM,SAAS,CAAC;AACjB,OAAO,EAGL,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAIL,SAAS,GAEV,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAsB,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACrE,OAAO,EAGL,UAAU,EACV,YAAY,EACZ,aAAa,EAEb,YAAY,EACZ,aAAa,EAEb,YAAY,EACZ,cAAc,GACf,MAAM,eAAe,CAAC;AACvB,OAAO,EAAkB,UAAU,EAAE,MAAM,WAAW,CAAC;AACvD,OAAO,EAAiB,aAAa,EAAuB,MAAM,kBAAkB,CAAC;AACrF,OAAO,EAOL,QAAQ,EACR,kBAAkB,GACnB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAwC,OAAO,EAAE,MAAM,eAAe,CAAC;AAC9E,OAAO,EAEL,SAAS,EACT,UAAU,GAGX,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAoB,aAAa,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACpE,OAAO,EACL,cAAc,EAId,YAAY,GACb,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,eAAe,EAAmB,cAAc,EAAE,MAAM,UAAU,CAAC;AAC5E,OAAO,EAA2C,cAAc,EAAE,MAAM,cAAc,CAAC;AACvF,OAAO,EAAe,cAAc,EAAE,QAAQ,EAAsB,MAAM,aAAa,CAAC;AACxF,OAAO,EACL,aAAa,EACb,kBAAkB,EAIlB,SAAS,EACT,YAAY,EACZ,cAAc,GACf,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChE,OAAO,EACL,UAAU,EAEV,OAAO,EACP,cAAc,EACd,kBAAkB,EAClB,aAAa,EACb,eAAe,EACf,QAAQ,EACR,aAAa,EAEb,SAAS,EACT,aAAa,EACb,gBAAgB,EAChB,UAAU,EACV,iBAAiB,GAClB,MAAM,WAAW,CAAC;AACnB,OAAO,EAGL,QAAQ,EACR,iBAAiB,EAEjB,UAAU,GAGX,MAAM,aAAa,CAAC;AACrB,OAAO,EAKL,WAAW,GACZ,MAAM,WAAW,CAAC;AACnB,OAAO,EAML,aAAa,GACd,MAAM,aAAa,CAAC"}
@@ -0,0 +1,16 @@
1
+ export type PackageManager = "pnpm" | "npm" | "yarn" | "bun";
2
+ /** What `init` learned about the project it was run in. Everything is a proposal, never a decision. */
3
+ export interface Detected {
4
+ readonly libraryName?: string;
5
+ readonly libraryVersion?: string;
6
+ readonly docsDir?: string;
7
+ readonly docsFiles?: number;
8
+ readonly openapi?: string;
9
+ readonly llmsTxt?: string;
10
+ readonly repository?: string;
11
+ readonly license?: string;
12
+ readonly packageManager: PackageManager;
13
+ readonly workspace: boolean;
14
+ }
15
+ export declare function detectProject(cwd: string): Promise<Detected>;
16
+ //# sourceMappingURL=detect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detect.d.ts","sourceRoot":"","sources":["../../src/init/detect.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,CAAC;AAE7D,uGAAuG;AACvG,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,cAAc,EAAE,cAAc,CAAC;IACxC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;CAC7B;AAYD,wBAAsB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAuBlE"}