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.
- package/LICENSE +21 -0
- package/README.md +59 -0
- package/bin/docspack.js +25 -0
- package/dist/build.d.ts +31 -0
- package/dist/build.d.ts.map +1 -0
- package/dist/build.js +435 -0
- package/dist/build.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +763 -0
- package/dist/cli.js.map +1 -0
- package/dist/config.d.ts +41 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +118 -0
- package/dist/config.js.map +1 -0
- package/dist/db.d.ts +60 -0
- package/dist/db.d.ts.map +1 -0
- package/dist/db.js +204 -0
- package/dist/db.js.map +1 -0
- package/dist/discovery.d.ts +31 -0
- package/dist/discovery.d.ts.map +1 -0
- package/dist/discovery.js +126 -0
- package/dist/discovery.js.map +1 -0
- package/dist/doctor.d.ts +25 -0
- package/dist/doctor.d.ts.map +1 -0
- package/dist/doctor.js +276 -0
- package/dist/doctor.js.map +1 -0
- package/dist/document.d.ts +13 -0
- package/dist/document.d.ts.map +1 -0
- package/dist/document.js +47 -0
- package/dist/document.js.map +1 -0
- package/dist/errors.d.ts +9 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +10 -0
- package/dist/errors.js.map +1 -0
- package/dist/exports.d.ts +20 -0
- package/dist/exports.d.ts.map +1 -0
- package/dist/exports.js +100 -0
- package/dist/exports.js.map +1 -0
- package/dist/feedback.d.ts +68 -0
- package/dist/feedback.d.ts.map +1 -0
- package/dist/feedback.js +0 -0
- package/dist/feedback.js.map +1 -0
- package/dist/html.d.ts +4 -0
- package/dist/html.d.ts.map +1 -0
- package/dist/html.js +23 -0
- package/dist/html.js.map +1 -0
- package/dist/http.d.ts +30 -0
- package/dist/http.d.ts.map +1 -0
- package/dist/http.js +144 -0
- package/dist/http.js.map +1 -0
- package/dist/index.d.ts +25 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +25 -0
- package/dist/index.js.map +1 -0
- package/dist/init/detect.d.ts +16 -0
- package/dist/init/detect.d.ts.map +1 -0
- package/dist/init/detect.js +120 -0
- package/dist/init/detect.js.map +1 -0
- package/dist/init/plan.d.ts +43 -0
- package/dist/init/plan.d.ts.map +1 -0
- package/dist/init/plan.js +145 -0
- package/dist/init/plan.js.map +1 -0
- package/dist/init/run.d.ts +28 -0
- package/dist/init/run.d.ts.map +1 -0
- package/dist/init/run.js +96 -0
- package/dist/init/run.js.map +1 -0
- package/dist/init/templates.d.ts +24 -0
- package/dist/init/templates.d.ts.map +1 -0
- package/dist/init/templates.js +181 -0
- package/dist/init/templates.js.map +1 -0
- package/dist/init/write.d.ts +20 -0
- package/dist/init/write.d.ts.map +1 -0
- package/dist/init/write.js +56 -0
- package/dist/init/write.js.map +1 -0
- package/dist/kinds.d.ts +14 -0
- package/dist/kinds.d.ts.map +1 -0
- package/dist/kinds.js +15 -0
- package/dist/kinds.js.map +1 -0
- package/dist/llms-txt.d.ts +25 -0
- package/dist/llms-txt.d.ts.map +1 -0
- package/dist/llms-txt.js +94 -0
- package/dist/llms-txt.js.map +1 -0
- package/dist/mcp.d.ts +15 -0
- package/dist/mcp.d.ts.map +1 -0
- package/dist/mcp.js +158 -0
- package/dist/mcp.js.map +1 -0
- package/dist/preview.d.ts +18 -0
- package/dist/preview.d.ts.map +1 -0
- package/dist/preview.js +72 -0
- package/dist/preview.js.map +1 -0
- package/dist/prompt.d.ts +27 -0
- package/dist/prompt.d.ts.map +1 -0
- package/dist/prompt.js +79 -0
- package/dist/prompt.js.map +1 -0
- package/dist/search.d.ts +41 -0
- package/dist/search.d.ts.map +1 -0
- package/dist/search.js +60 -0
- package/dist/search.js.map +1 -0
- package/dist/snippet.d.ts +20 -0
- package/dist/snippet.d.ts.map +1 -0
- package/dist/snippet.js +29 -0
- package/dist/snippet.js.map +1 -0
- package/dist/spec.d.ts +38 -0
- package/dist/spec.d.ts.map +1 -0
- package/dist/spec.js +105 -0
- package/dist/spec.js.map +1 -0
- package/dist/style.d.ts +33 -0
- package/dist/style.d.ts.map +1 -0
- package/dist/style.js +94 -0
- package/dist/style.js.map +1 -0
- package/dist/submit.d.ts +61 -0
- package/dist/submit.d.ts.map +1 -0
- package/dist/submit.js +111 -0
- package/dist/submit.js.map +1 -0
- package/dist/sync.d.ts +29 -0
- package/dist/sync.d.ts.map +1 -0
- package/dist/sync.js +73 -0
- package/dist/sync.js.map +1 -0
- package/dist/verify.d.ts +44 -0
- package/dist/verify.d.ts.map +1 -0
- package/dist/verify.js +291 -0
- package/dist/verify.js.map +1 -0
- package/package.json +60 -5
- package/src/build.ts +572 -0
- package/src/cli.ts +883 -0
- package/src/config.ts +158 -0
- package/src/db.ts +261 -0
- package/src/discovery.ts +161 -0
- package/src/doctor.ts +344 -0
- package/src/document.ts +59 -0
- package/src/errors.ts +10 -0
- package/src/exports.ts +120 -0
- package/src/feedback.ts +0 -0
- package/src/html.ts +24 -0
- package/src/http.ts +190 -0
- package/src/index.ts +132 -0
- package/src/init/detect.ts +142 -0
- package/src/init/plan.ts +215 -0
- package/src/init/run.ts +142 -0
- package/src/init/templates.ts +200 -0
- package/src/init/write.ts +83 -0
- package/src/kinds.ts +17 -0
- package/src/llms-txt.ts +116 -0
- package/src/mcp.ts +196 -0
- package/src/preview.ts +98 -0
- package/src/prompt.ts +103 -0
- package/src/search.ts +96 -0
- package/src/snippet.ts +30 -0
- package/src/spec.ts +138 -0
- package/src/style.ts +111 -0
- package/src/submit.ts +189 -0
- package/src/sync.ts +112 -0
- package/src/verify.ts +355 -0
- package/bin/cli.js +0 -2
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 docspack contributors
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# docspack
|
|
2
|
+
|
|
3
|
+
**Local, version-locked documentation for AI agents.**
|
|
4
|
+
|
|
5
|
+
Documentation ships as npm packages (`@stripe/docspack`, `@docspack-community/jira`).
|
|
6
|
+
`docspack` indexes the ones your project depends on into a global SQLite database with
|
|
7
|
+
FTS5, and serves them to agents over MCP — offline, instant, and matched to the exact
|
|
8
|
+
versions you installed.
|
|
9
|
+
|
|
10
|
+
```bash
|
|
11
|
+
pnpm add -D @acme/docspack
|
|
12
|
+
npx docspack sync
|
|
13
|
+
npx docspack search "webhook signature"
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
Give an agent access with one command:
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
claude mcp add docspack -- npx -y docspack mcp
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
The MCP server exposes `query_local_docs` (`query`, optional `packageFilter`), returns the
|
|
23
|
+
best-ranked chunks, and caps a response at 3,000 tokens. It also exposes
|
|
24
|
+
`record_docs_problem`, the equivalent of `docspack feedback add` — it appends to a local file
|
|
25
|
+
and cannot send anything anywhere.
|
|
26
|
+
|
|
27
|
+
## Commands
|
|
28
|
+
|
|
29
|
+
```
|
|
30
|
+
docspack sync Index the docs packages this project depends on
|
|
31
|
+
docspack search <query> Full-text search the local index
|
|
32
|
+
docspack list Show this project's docs packages and their index state
|
|
33
|
+
docspack verify Check the docs still describe the code you installed
|
|
34
|
+
docspack feedback <sub> Record documentation problems: add, list, submit, remove
|
|
35
|
+
docspack mcp Run the MCP server over stdio
|
|
36
|
+
docspack build [source] Generate a docs package for publishing
|
|
37
|
+
docspack sources List curated sources that `docspack build` can fetch
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
## Authoring
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
npx docspack build --from ./docs --name @acme/docspack --pkg-version 1.4.0
|
|
44
|
+
npx docspack build --openapi ./openapi.json --name @acme/docspack --pkg-version 1.4.0
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
Writes `.llms/manifest.json`, `.llms/chunks/*.md` and an `llms.txt` table of contents,
|
|
48
|
+
ready for `npm publish`.
|
|
49
|
+
|
|
50
|
+
## Requirements
|
|
51
|
+
|
|
52
|
+
Node 22.5 or newer — the index uses `node:sqlite` from the standard library, so there is
|
|
53
|
+
no native module to build.
|
|
54
|
+
|
|
55
|
+
Full documentation: https://github.com/docspack/docspack
|
|
56
|
+
|
|
57
|
+
## License
|
|
58
|
+
|
|
59
|
+
MIT
|
package/bin/docspack.js
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Launcher for the compiled CLI.
|
|
4
|
+
*
|
|
5
|
+
* `bin` cannot point straight at `dist/cli.js`: a package manager links bin files during
|
|
6
|
+
* install, which in this repository happens before anything is compiled. pnpm finds no
|
|
7
|
+
* `dist/cli.js`, warns, and silently skips the link — so every later `docspack …` fails with
|
|
8
|
+
* "command not found", including the one that builds this package's own documentation.
|
|
9
|
+
*
|
|
10
|
+
* This file is committed, so the link always succeeds. `dist/` only has to exist by the time
|
|
11
|
+
* someone actually runs the command.
|
|
12
|
+
*/
|
|
13
|
+
import { existsSync } from "node:fs";
|
|
14
|
+
import { fileURLToPath } from "node:url";
|
|
15
|
+
|
|
16
|
+
const cli = new URL("../dist/cli.js", import.meta.url);
|
|
17
|
+
|
|
18
|
+
if (existsSync(fileURLToPath(cli))) {
|
|
19
|
+
await import(cli.href);
|
|
20
|
+
} else {
|
|
21
|
+
process.stderr.write(
|
|
22
|
+
"docspack is not built: dist/cli.js is missing.\nRun `pnpm turbo build --filter docspack` and try again.\n",
|
|
23
|
+
);
|
|
24
|
+
process.exitCode = 1;
|
|
25
|
+
}
|
package/dist/build.d.ts
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { HttpClient } from "./http.js";
|
|
2
|
+
export interface BuildOptions {
|
|
3
|
+
/** Directory the docs package is written to. */
|
|
4
|
+
readonly out: string;
|
|
5
|
+
readonly name?: string;
|
|
6
|
+
readonly version?: string;
|
|
7
|
+
/** Directory of Markdown files to package. */
|
|
8
|
+
readonly from?: string;
|
|
9
|
+
/** OpenAPI document (JSON) to package, one chunk per operation. */
|
|
10
|
+
readonly openapi?: string;
|
|
11
|
+
/** Registry id or llms.txt URL to fetch and package. */
|
|
12
|
+
readonly source?: string;
|
|
13
|
+
readonly pages?: number;
|
|
14
|
+
readonly maxChunkTokens?: number;
|
|
15
|
+
readonly http?: HttpClient;
|
|
16
|
+
readonly onProgress?: (message: string) => void;
|
|
17
|
+
}
|
|
18
|
+
export interface BuildResult {
|
|
19
|
+
readonly name: string;
|
|
20
|
+
readonly version: string;
|
|
21
|
+
readonly dir: string;
|
|
22
|
+
readonly chunks: number;
|
|
23
|
+
readonly tokens: number;
|
|
24
|
+
readonly warnings: readonly string[];
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Generates a docs package: `.llms/manifest.json`, `.llms/chunks/*.md` and an `llms.txt` table of
|
|
28
|
+
* contents, ready to publish to npm as `@vendor/docspack`.
|
|
29
|
+
*/
|
|
30
|
+
export declare function buildPackage(input: BuildOptions): Promise<BuildResult>;
|
|
31
|
+
//# sourceMappingURL=build.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../src/build.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAWvC,MAAM,WAAW,YAAY;IAC3B,gDAAgD;IAChD,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,8CAA8C;IAC9C,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,mEAAmE;IACnE,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,wDAAwD;IACxD,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,IAAI,CAAC,EAAE,UAAU,CAAC;IAC3B,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACjD;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;CACtC;AAkBD;;;GAGG;AACH,wBAAsB,YAAY,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC,CAsD5E"}
|
package/dist/build.js
ADDED
|
@@ -0,0 +1,435 @@
|
|
|
1
|
+
import { mkdir, readdir, readFile, rm, writeFile } from "node:fs/promises";
|
|
2
|
+
import { join, relative, sep } from "node:path";
|
|
3
|
+
import { findEntry } from "@docspack/registry";
|
|
4
|
+
import { readBuildConfig } from "./config.js";
|
|
5
|
+
import { cleanDocument } from "./document.js";
|
|
6
|
+
import { DocspackError } from "./errors.js";
|
|
7
|
+
import { htmlToMarkdown, isHtml } from "./html.js";
|
|
8
|
+
import { HttpClient } from "./http.js";
|
|
9
|
+
import { fetchableLinks, parseLlmsTxt } from "./llms-txt.js";
|
|
10
|
+
import { CHUNKS_DIR, estimateTokens, LLMS_DIR, MANIFEST_FILE, serializeManifest, } from "./spec.js";
|
|
11
|
+
const DEFAULT_MAX_CHUNK_TOKENS = 800;
|
|
12
|
+
const MARKDOWN = /\.(md|mdx|markdown)$/i;
|
|
13
|
+
const HTTP_METHODS = ["get", "post", "put", "patch", "delete", "head", "options"];
|
|
14
|
+
/**
|
|
15
|
+
* Generates a docs package: `.llms/manifest.json`, `.llms/chunks/*.md` and an `llms.txt` table of
|
|
16
|
+
* contents, ready to publish to npm as `@vendor/docspack`.
|
|
17
|
+
*/
|
|
18
|
+
export async function buildPackage(input) {
|
|
19
|
+
const warnings = [];
|
|
20
|
+
const options = await withConfig(input);
|
|
21
|
+
const identity = await resolveIdentity(options);
|
|
22
|
+
const documents = await collect(options, warnings);
|
|
23
|
+
if (documents.length === 0) {
|
|
24
|
+
throw new DocspackError("No documentation found to package", {
|
|
25
|
+
hint: "Point --from at a directory of Markdown files, or pass --openapi or a source.",
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
const maxTokens = options.maxChunkTokens ?? DEFAULT_MAX_CHUNK_TOKENS;
|
|
29
|
+
const { chunks, files } = chunkDocuments(documents, maxTokens);
|
|
30
|
+
const llmsDir = join(options.out, LLMS_DIR);
|
|
31
|
+
await rm(llmsDir, { recursive: true, force: true });
|
|
32
|
+
await mkdir(join(llmsDir, CHUNKS_DIR), { recursive: true });
|
|
33
|
+
for (const file of files) {
|
|
34
|
+
await writeFile(join(llmsDir, file.path), file.contents, "utf8");
|
|
35
|
+
}
|
|
36
|
+
await writeFile(join(llmsDir, MANIFEST_FILE), serializeManifest({ name: identity.name, version: identity.version, chunks }), "utf8");
|
|
37
|
+
await writeFile(join(options.out, "llms.txt"), renderLlmsTxt(identity.name, chunks), "utf8");
|
|
38
|
+
if (identity.createPackageJson) {
|
|
39
|
+
await writeFile(join(options.out, "package.json"), `${JSON.stringify({
|
|
40
|
+
name: identity.name,
|
|
41
|
+
version: identity.version,
|
|
42
|
+
description: `Documentation package for ${identity.name}, for use with docspack.`,
|
|
43
|
+
files: [LLMS_DIR, "llms.txt"],
|
|
44
|
+
}, null, 2)}\n`, "utf8");
|
|
45
|
+
}
|
|
46
|
+
return {
|
|
47
|
+
name: identity.name,
|
|
48
|
+
version: identity.version,
|
|
49
|
+
dir: options.out,
|
|
50
|
+
chunks: chunks.length,
|
|
51
|
+
tokens: chunks.reduce((total, chunk) => total + chunk.tokens, 0),
|
|
52
|
+
warnings,
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Fills in build options from the package's `docspack` key. Explicit options always win, and an
|
|
57
|
+
* explicit input silences every configured input so the two can never combine into a conflict.
|
|
58
|
+
*/
|
|
59
|
+
async function withConfig(options) {
|
|
60
|
+
const config = await readBuildConfig(options.out);
|
|
61
|
+
const hasInput = options.from !== undefined || options.openapi !== undefined || options.source !== undefined;
|
|
62
|
+
return {
|
|
63
|
+
...options,
|
|
64
|
+
...(hasInput
|
|
65
|
+
? {}
|
|
66
|
+
: {
|
|
67
|
+
// Configured paths are written relative to the package, which is where the author
|
|
68
|
+
// thinks about them; flags stay relative to the working directory.
|
|
69
|
+
...(config.from === undefined ? {} : { from: join(options.out, config.from) }),
|
|
70
|
+
...(config.openapi === undefined ? {} : { openapi: join(options.out, config.openapi) }),
|
|
71
|
+
...(config.source === undefined ? {} : { source: config.source }),
|
|
72
|
+
}),
|
|
73
|
+
...(options.maxChunkTokens === undefined && config.maxChunkTokens !== undefined
|
|
74
|
+
? { maxChunkTokens: config.maxChunkTokens }
|
|
75
|
+
: {}),
|
|
76
|
+
...(options.pages === undefined && config.pages !== undefined ? { pages: config.pages } : {}),
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
async function resolveIdentity(options) {
|
|
80
|
+
let existing = {};
|
|
81
|
+
let found = false;
|
|
82
|
+
try {
|
|
83
|
+
existing = JSON.parse(await readFile(join(options.out, "package.json"), "utf8"));
|
|
84
|
+
found = true;
|
|
85
|
+
}
|
|
86
|
+
catch (error) {
|
|
87
|
+
if (error.code !== "ENOENT")
|
|
88
|
+
throw error;
|
|
89
|
+
}
|
|
90
|
+
const name = options.name ?? (typeof existing.name === "string" ? existing.name : undefined);
|
|
91
|
+
const version = options.version ?? (typeof existing.version === "string" ? existing.version : undefined);
|
|
92
|
+
if (name === undefined) {
|
|
93
|
+
throw new DocspackError("The package needs a name", {
|
|
94
|
+
hint: "Pass --name @vendor/docspack, or run inside a directory that has a package.json.",
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
if (version === undefined) {
|
|
98
|
+
throw new DocspackError("The package needs a version", { hint: "Pass --version 1.0.0." });
|
|
99
|
+
}
|
|
100
|
+
return { name, version, createPackageJson: !found };
|
|
101
|
+
}
|
|
102
|
+
async function collect(options, warnings) {
|
|
103
|
+
const chosen = [options.from, options.openapi, options.source].filter((value) => value !== undefined);
|
|
104
|
+
if (chosen.length > 1) {
|
|
105
|
+
throw new DocspackError("Choose one input: --from, --openapi or a source");
|
|
106
|
+
}
|
|
107
|
+
if (options.openapi !== undefined)
|
|
108
|
+
return collectFromOpenApi(options.openapi);
|
|
109
|
+
if (options.source !== undefined)
|
|
110
|
+
return collectFromSource(options, warnings);
|
|
111
|
+
return collectFromDirectory(options.from ?? join(options.out, "docs"));
|
|
112
|
+
}
|
|
113
|
+
async function collectFromDirectory(dir) {
|
|
114
|
+
let found;
|
|
115
|
+
try {
|
|
116
|
+
found = await readdir(dir, { recursive: true, withFileTypes: true });
|
|
117
|
+
}
|
|
118
|
+
catch (error) {
|
|
119
|
+
if (error.code === "ENOENT") {
|
|
120
|
+
throw new DocspackError(`No such directory: ${dir}`, {
|
|
121
|
+
hint: "Pass --from <dir> to point at your Markdown documentation.",
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
throw error;
|
|
125
|
+
}
|
|
126
|
+
const documents = [];
|
|
127
|
+
const paths = found
|
|
128
|
+
.filter((entry) => entry.isFile() && MARKDOWN.test(entry.name))
|
|
129
|
+
.map((entry) => join(entry.parentPath, entry.name))
|
|
130
|
+
.sort();
|
|
131
|
+
for (const path of paths) {
|
|
132
|
+
const cleaned = cleanDocument(await readFile(path, "utf8"));
|
|
133
|
+
if (cleaned.text.length === 0)
|
|
134
|
+
continue;
|
|
135
|
+
const relativePath = relative(dir, path).split(sep).join("/");
|
|
136
|
+
documents.push({
|
|
137
|
+
title: cleaned.title ?? firstHeading(cleaned.text) ?? relativePath.replace(MARKDOWN, ""),
|
|
138
|
+
origin: relativePath,
|
|
139
|
+
text: cleaned.text,
|
|
140
|
+
...(cleaned.tags.length === 0 ? {} : { tags: cleaned.tags }),
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
return documents;
|
|
144
|
+
}
|
|
145
|
+
async function collectFromSource(options, warnings) {
|
|
146
|
+
const spec = options.source ?? "";
|
|
147
|
+
const entry = findEntry(spec);
|
|
148
|
+
const url = entry?.llmsTxt ?? spec;
|
|
149
|
+
if (!/^https?:\/\//i.test(url)) {
|
|
150
|
+
throw new DocspackError(`"${spec}" is not a registry id or an llms.txt URL`, {
|
|
151
|
+
hint: "Run `docspack sources` to list the curated ids.",
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
const http = options.http ?? new HttpClient({ userAgent: "docspack" });
|
|
155
|
+
options.onProgress?.(`fetching ${url}`);
|
|
156
|
+
const index = await http.get(url, { maxBytes: 4_000_000 });
|
|
157
|
+
const parsed = parseLlmsTxt(index.text);
|
|
158
|
+
const documents = [];
|
|
159
|
+
const links = fetchableLinks(parsed).slice(0, options.pages ?? 50);
|
|
160
|
+
for (const link of links) {
|
|
161
|
+
options.onProgress?.(`fetching ${link.url}`);
|
|
162
|
+
try {
|
|
163
|
+
const response = await http.get(link.url, { maxBytes: 2_000_000 });
|
|
164
|
+
const text = (isHtml(response.contentType, response.text) ? htmlToMarkdown(response.text) : response.text).trim();
|
|
165
|
+
if (text.length === 0) {
|
|
166
|
+
warnings.push(`skipped ${link.url}: document was empty`);
|
|
167
|
+
continue;
|
|
168
|
+
}
|
|
169
|
+
documents.push({
|
|
170
|
+
title: link.title.length > 0 ? link.title : (firstHeading(text) ?? link.url),
|
|
171
|
+
origin: link.url,
|
|
172
|
+
text,
|
|
173
|
+
...(link.notes === undefined ? {} : { tags: [link.notes] }),
|
|
174
|
+
});
|
|
175
|
+
}
|
|
176
|
+
catch (error) {
|
|
177
|
+
warnings.push(`skipped ${link.url}: ${error instanceof Error ? error.message : String(error)}`);
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
if (fetchableLinks(parsed).length > links.length) {
|
|
181
|
+
warnings.push(`packaged ${links.length} of ${fetchableLinks(parsed).length} linked documents (raise with --pages)`);
|
|
182
|
+
}
|
|
183
|
+
return documents;
|
|
184
|
+
}
|
|
185
|
+
async function collectFromOpenApi(file) {
|
|
186
|
+
let parsed;
|
|
187
|
+
try {
|
|
188
|
+
parsed = JSON.parse(await readFile(file, "utf8"));
|
|
189
|
+
}
|
|
190
|
+
catch (error) {
|
|
191
|
+
throw new DocspackError(`Could not read the OpenAPI document ${file}`, {
|
|
192
|
+
hint: "Only JSON is supported. Convert YAML with a tool such as `yq -o json`.",
|
|
193
|
+
cause: error,
|
|
194
|
+
});
|
|
195
|
+
}
|
|
196
|
+
const spec = parsed;
|
|
197
|
+
const documents = [];
|
|
198
|
+
const apiTitle = typeof spec.info?.title === "string" ? spec.info.title : "API";
|
|
199
|
+
if (typeof spec.info?.description === "string" && spec.info.description.trim().length > 0) {
|
|
200
|
+
documents.push({
|
|
201
|
+
title: `${apiTitle} overview`,
|
|
202
|
+
origin: file,
|
|
203
|
+
text: spec.info.description.trim(),
|
|
204
|
+
atomic: true,
|
|
205
|
+
tags: ["overview", "introduction"],
|
|
206
|
+
});
|
|
207
|
+
}
|
|
208
|
+
for (const [path, item] of Object.entries(spec.paths ?? {})) {
|
|
209
|
+
if (typeof item !== "object" || item === null)
|
|
210
|
+
continue;
|
|
211
|
+
const pathItem = item;
|
|
212
|
+
for (const method of HTTP_METHODS) {
|
|
213
|
+
const operation = pathItem[method];
|
|
214
|
+
if (typeof operation !== "object" || operation === null)
|
|
215
|
+
continue;
|
|
216
|
+
documents.push(renderOperation(method, path, operation, file));
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
if (documents.length === 0) {
|
|
220
|
+
throw new DocspackError(`No operations found in ${file}`, {
|
|
221
|
+
hint: "The document needs a `paths` object with at least one operation.",
|
|
222
|
+
});
|
|
223
|
+
}
|
|
224
|
+
return documents;
|
|
225
|
+
}
|
|
226
|
+
function renderOperation(method, path, operation, file) {
|
|
227
|
+
const summary = typeof operation.summary === "string" ? operation.summary : "";
|
|
228
|
+
const description = typeof operation.description === "string" ? operation.description : "";
|
|
229
|
+
const operationId = typeof operation.operationId === "string" ? operation.operationId : undefined;
|
|
230
|
+
const tags = Array.isArray(operation.tags)
|
|
231
|
+
? operation.tags.filter((tag) => typeof tag === "string")
|
|
232
|
+
: [];
|
|
233
|
+
const lines = [`${method.toUpperCase()} ${path}`, ""];
|
|
234
|
+
if (summary.length > 0)
|
|
235
|
+
lines.push(summary, "");
|
|
236
|
+
if (description.length > 0)
|
|
237
|
+
lines.push(description, "");
|
|
238
|
+
if (operationId !== undefined)
|
|
239
|
+
lines.push(`Operation: \`${operationId}\``, "");
|
|
240
|
+
const parameters = Array.isArray(operation.parameters) ? operation.parameters : [];
|
|
241
|
+
if (parameters.length > 0) {
|
|
242
|
+
lines.push("## Parameters", "");
|
|
243
|
+
for (const raw of parameters) {
|
|
244
|
+
if (typeof raw !== "object" || raw === null)
|
|
245
|
+
continue;
|
|
246
|
+
const parameter = raw;
|
|
247
|
+
if (typeof parameter.name !== "string")
|
|
248
|
+
continue;
|
|
249
|
+
const location = typeof parameter.in === "string" ? parameter.in : "query";
|
|
250
|
+
const required = parameter.required === true ? ", required" : "";
|
|
251
|
+
const note = typeof parameter.description === "string" && parameter.description.length > 0
|
|
252
|
+
? ` — ${parameter.description}`
|
|
253
|
+
: "";
|
|
254
|
+
lines.push(`- \`${parameter.name}\` (${location}${required})${note}`);
|
|
255
|
+
}
|
|
256
|
+
lines.push("");
|
|
257
|
+
}
|
|
258
|
+
const responses = operation.responses;
|
|
259
|
+
if (typeof responses === "object" && responses !== null) {
|
|
260
|
+
lines.push("## Responses", "");
|
|
261
|
+
for (const [status, raw] of Object.entries(responses)) {
|
|
262
|
+
const detail = typeof raw === "object" &&
|
|
263
|
+
raw !== null &&
|
|
264
|
+
typeof raw.description === "string"
|
|
265
|
+
? ` — ${raw.description}`
|
|
266
|
+
: "";
|
|
267
|
+
lines.push(`- \`${status}\`${detail}`);
|
|
268
|
+
}
|
|
269
|
+
lines.push("");
|
|
270
|
+
}
|
|
271
|
+
return {
|
|
272
|
+
title: summary.length > 0 ? summary : `${method.toUpperCase()} ${path}`,
|
|
273
|
+
origin: `${file}#${method} ${path}`,
|
|
274
|
+
text: lines.join("\n").trim(),
|
|
275
|
+
atomic: true,
|
|
276
|
+
tags: [
|
|
277
|
+
method,
|
|
278
|
+
...tags,
|
|
279
|
+
...path.split("/").filter((part) => part.length > 0 && !part.startsWith("{")),
|
|
280
|
+
],
|
|
281
|
+
...(operationId === undefined ? {} : { entities: [operationId] }),
|
|
282
|
+
};
|
|
283
|
+
}
|
|
284
|
+
function chunkDocuments(documents, maxTokens) {
|
|
285
|
+
const chunks = [];
|
|
286
|
+
const files = [];
|
|
287
|
+
const taken = new Set();
|
|
288
|
+
for (const document of documents) {
|
|
289
|
+
const sections = document.atomic === true
|
|
290
|
+
? [{ heading: document.title, body: document.text }]
|
|
291
|
+
: splitMarkdown(document.text, document.title, maxTokens);
|
|
292
|
+
for (const section of sections) {
|
|
293
|
+
const id = uniqueId(slugify(`${document.title}-${section.heading}`, "chunk"), taken);
|
|
294
|
+
const contents = `# ${section.heading}\n\n<!-- docspack: from ${document.origin} -->\n\n${section.body}\n`;
|
|
295
|
+
const file = `${CHUNKS_DIR}/${id}.md`;
|
|
296
|
+
files.push({ path: file, contents });
|
|
297
|
+
chunks.push({
|
|
298
|
+
id,
|
|
299
|
+
file,
|
|
300
|
+
tokens: estimateTokens(contents),
|
|
301
|
+
tags: uniqueWords([document.title, section.heading, ...(document.tags ?? [])]),
|
|
302
|
+
entities: [...new Set([...(document.entities ?? []), ...extractEntities(section.body)])],
|
|
303
|
+
});
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
return { chunks, files };
|
|
307
|
+
}
|
|
308
|
+
/**
|
|
309
|
+
* Splits Markdown at `##` headings, then `###`, then paragraphs, until every piece fits the token
|
|
310
|
+
* budget. Retrieval works best when a chunk answers one question.
|
|
311
|
+
*/
|
|
312
|
+
function splitMarkdown(text, title, maxTokens) {
|
|
313
|
+
const sections = splitAtLevel(text, 2, title);
|
|
314
|
+
const result = [];
|
|
315
|
+
for (const section of sections) {
|
|
316
|
+
if (estimateTokens(section.body) <= maxTokens) {
|
|
317
|
+
if (section.body.trim().length > 0)
|
|
318
|
+
result.push(section);
|
|
319
|
+
continue;
|
|
320
|
+
}
|
|
321
|
+
const deeper = splitAtLevel(section.body, 3, section.heading);
|
|
322
|
+
for (const part of deeper) {
|
|
323
|
+
if (estimateTokens(part.body) <= maxTokens) {
|
|
324
|
+
if (part.body.trim().length > 0)
|
|
325
|
+
result.push(part);
|
|
326
|
+
continue;
|
|
327
|
+
}
|
|
328
|
+
result.push(...splitParagraphs(part.body, maxTokens).map((body, index) => ({
|
|
329
|
+
heading: index === 0 ? part.heading : `${part.heading} (${index + 1})`,
|
|
330
|
+
body,
|
|
331
|
+
})));
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
return result.length > 0 ? result : [{ heading: title, body: text }];
|
|
335
|
+
}
|
|
336
|
+
function splitAtLevel(text, level, fallbackHeading) {
|
|
337
|
+
const marker = new RegExp(`^#{${level}}\\s+(.+?)\\s*$`);
|
|
338
|
+
const sections = [];
|
|
339
|
+
let current = { heading: fallbackHeading, body: [] };
|
|
340
|
+
let inFence = false;
|
|
341
|
+
for (const line of text.split("\n")) {
|
|
342
|
+
if (/^\s*(?:```|~~~)/.test(line))
|
|
343
|
+
inFence = !inFence;
|
|
344
|
+
const match = inFence ? null : marker.exec(line);
|
|
345
|
+
if (match?.[1] !== undefined) {
|
|
346
|
+
if (current.body.join("\n").trim().length > 0)
|
|
347
|
+
sections.push(current);
|
|
348
|
+
current = { heading: match[1], body: [] };
|
|
349
|
+
continue;
|
|
350
|
+
}
|
|
351
|
+
current.body.push(line);
|
|
352
|
+
}
|
|
353
|
+
if (current.body.join("\n").trim().length > 0)
|
|
354
|
+
sections.push(current);
|
|
355
|
+
return sections.map((section) => ({
|
|
356
|
+
heading: section.heading,
|
|
357
|
+
body: section.body.join("\n").trim(),
|
|
358
|
+
}));
|
|
359
|
+
}
|
|
360
|
+
function splitParagraphs(text, maxTokens) {
|
|
361
|
+
const parts = [];
|
|
362
|
+
let buffer = [];
|
|
363
|
+
for (const paragraph of text.split(/\n{2,}/)) {
|
|
364
|
+
const candidate = [...buffer, paragraph].join("\n\n");
|
|
365
|
+
if (buffer.length > 0 && estimateTokens(candidate) > maxTokens) {
|
|
366
|
+
parts.push(buffer.join("\n\n"));
|
|
367
|
+
buffer = [paragraph];
|
|
368
|
+
}
|
|
369
|
+
else {
|
|
370
|
+
buffer.push(paragraph);
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
if (buffer.length > 0)
|
|
374
|
+
parts.push(buffer.join("\n\n"));
|
|
375
|
+
return parts;
|
|
376
|
+
}
|
|
377
|
+
/** Pulls dotted or called identifiers out of inline code, e.g. `Stripe.setApiKey`. */
|
|
378
|
+
function extractEntities(body) {
|
|
379
|
+
const found = new Set();
|
|
380
|
+
for (const match of body.matchAll(/`([A-Za-z_$][\w$]*(?:\.[A-Za-z_$][\w$]*)+)\(?\)?`/g)) {
|
|
381
|
+
if (match[1] !== undefined)
|
|
382
|
+
found.add(match[1]);
|
|
383
|
+
}
|
|
384
|
+
return [...found].slice(0, 20);
|
|
385
|
+
}
|
|
386
|
+
/** Reduces a heading to a chunk id: lowercase, hyphen-separated, no path separators. */
|
|
387
|
+
function slugify(input, fallback) {
|
|
388
|
+
const slug = input
|
|
389
|
+
.toLowerCase()
|
|
390
|
+
.normalize("NFKD")
|
|
391
|
+
.replace(/[^a-z0-9]+/g, "-")
|
|
392
|
+
.replace(/^-+|-+$/g, "")
|
|
393
|
+
.slice(0, 60)
|
|
394
|
+
.replace(/-+$/g, "");
|
|
395
|
+
return slug.length > 0 ? slug : fallback;
|
|
396
|
+
}
|
|
397
|
+
function uniqueWords(inputs) {
|
|
398
|
+
const words = new Set();
|
|
399
|
+
for (const input of inputs) {
|
|
400
|
+
for (const word of input.toLowerCase().match(/[\p{L}\p{N}]{2,}/gu) ?? []) {
|
|
401
|
+
words.add(word);
|
|
402
|
+
}
|
|
403
|
+
}
|
|
404
|
+
return [...words].slice(0, 24);
|
|
405
|
+
}
|
|
406
|
+
function uniqueId(base, taken) {
|
|
407
|
+
let candidate = base;
|
|
408
|
+
let counter = 2;
|
|
409
|
+
while (taken.has(candidate)) {
|
|
410
|
+
candidate = `${base}-${counter}`;
|
|
411
|
+
counter += 1;
|
|
412
|
+
}
|
|
413
|
+
taken.add(candidate);
|
|
414
|
+
return candidate;
|
|
415
|
+
}
|
|
416
|
+
function renderLlmsTxt(name, chunks) {
|
|
417
|
+
const lines = [
|
|
418
|
+
`# ${name}`,
|
|
419
|
+
"",
|
|
420
|
+
`> Documentation package for ${name}. Generated by docspack; the machine-readable payload is in ${LLMS_DIR}/.`,
|
|
421
|
+
"",
|
|
422
|
+
"## Chunks",
|
|
423
|
+
"",
|
|
424
|
+
...chunks.map((chunk) => {
|
|
425
|
+
const tags = chunk.tags.slice(0, 6).join(", ");
|
|
426
|
+
return `- [${chunk.id}](${LLMS_DIR}/${chunk.file})${tags.length > 0 ? `: ${tags}` : ""}`;
|
|
427
|
+
}),
|
|
428
|
+
"",
|
|
429
|
+
];
|
|
430
|
+
return lines.join("\n");
|
|
431
|
+
}
|
|
432
|
+
function firstHeading(text) {
|
|
433
|
+
return /^#{1,3}\s+(.+)$/m.exec(text)?.[1]?.trim();
|
|
434
|
+
}
|
|
435
|
+
//# sourceMappingURL=build.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build.js","sourceRoot":"","sources":["../src/build.ts"],"names":[],"mappings":"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"}
|
package/dist/cli.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
|