docspack 0.2.0 → 0.4.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/README.md +9 -3
- package/dist/build.d.ts +21 -0
- package/dist/build.d.ts.map +1 -1
- package/dist/build.js +194 -31
- package/dist/build.js.map +1 -1
- package/dist/cli.js +74 -131
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +7 -2
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +20 -1
- package/dist/config.js.map +1 -1
- package/dist/db.d.ts +8 -4
- package/dist/db.d.ts.map +1 -1
- package/dist/db.js +13 -7
- package/dist/db.js.map +1 -1
- package/dist/doctor.d.ts.map +1 -1
- package/dist/doctor.js +47 -4
- package/dist/doctor.js.map +1 -1
- package/dist/document.d.ts +2 -0
- package/dist/document.d.ts.map +1 -1
- package/dist/document.js +7 -3
- package/dist/document.js.map +1 -1
- package/dist/eval.d.ts +52 -0
- package/dist/eval.d.ts.map +1 -0
- package/dist/eval.js +101 -0
- package/dist/eval.js.map +1 -0
- package/dist/help.d.ts +31 -0
- package/dist/help.d.ts.map +1 -0
- package/dist/help.js +342 -0
- package/dist/help.js.map +1 -0
- package/dist/index.d.ts +4 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -1
- package/dist/index.js.map +1 -1
- package/dist/preview.d.ts.map +1 -1
- package/dist/preview.js +4 -2
- package/dist/preview.js.map +1 -1
- package/dist/search.d.ts +7 -0
- package/dist/search.d.ts.map +1 -1
- package/dist/search.js +33 -3
- package/dist/search.js.map +1 -1
- package/dist/spec.d.ts +27 -1
- package/dist/spec.d.ts.map +1 -1
- package/dist/spec.js +53 -5
- package/dist/spec.js.map +1 -1
- package/dist/stopwords.d.ts +14 -0
- package/dist/stopwords.d.ts.map +1 -0
- package/dist/stopwords.js +121 -0
- package/dist/stopwords.js.map +1 -0
- package/dist/sync.js +1 -1
- package/dist/sync.js.map +1 -1
- package/dist/verify.d.ts +8 -2
- package/dist/verify.d.ts.map +1 -1
- package/dist/verify.js +84 -23
- package/dist/verify.js.map +1 -1
- package/package.json +1 -1
- package/src/build.ts +261 -33
- package/src/cli.ts +91 -138
- package/src/config.ts +35 -5
- package/src/db.ts +13 -7
- package/src/doctor.ts +49 -5
- package/src/document.ts +13 -4
- package/src/eval.ts +149 -0
- package/src/help.ts +382 -0
- package/src/index.ts +20 -0
- package/src/preview.ts +4 -1
- package/src/search.ts +41 -3
- package/src/spec.ts +84 -6
- package/src/stopwords.ts +120 -0
- package/src/sync.ts +1 -1
- package/src/verify.ts +108 -28
package/dist/doctor.js
CHANGED
|
@@ -18,11 +18,13 @@ export async function runDoctor(options) {
|
|
|
18
18
|
// are opinions about writing. Only the first kind may block a publish by default.
|
|
19
19
|
const prose = options.pedantic === true ? "warn" : "info";
|
|
20
20
|
const pkg = await readJson(join(options.dir, "package.json"));
|
|
21
|
-
const
|
|
22
|
-
if (
|
|
21
|
+
const loaded = await loadManifest(llmsDir, findings);
|
|
22
|
+
if (loaded === undefined) {
|
|
23
23
|
return { ok: false, findings, chunks: 0, tokens: 0 };
|
|
24
24
|
}
|
|
25
|
+
const { manifest, raw } = loaded;
|
|
25
26
|
checkPackageJson(pkg, manifest, findings);
|
|
27
|
+
checkUnknownFields(raw, findings);
|
|
26
28
|
let tokens = 0;
|
|
27
29
|
let newestSource = 0;
|
|
28
30
|
const seen = new Map();
|
|
@@ -55,7 +57,7 @@ export async function runDoctor(options) {
|
|
|
55
57
|
});
|
|
56
58
|
continue;
|
|
57
59
|
}
|
|
58
|
-
const size = chunk.tokens
|
|
60
|
+
const size = chunk.tokens ?? estimateTokens(text);
|
|
59
61
|
tokens += size;
|
|
60
62
|
if (size > MAX_CHUNK_TOKENS) {
|
|
61
63
|
findings.push({
|
|
@@ -182,7 +184,8 @@ async function loadManifest(llmsDir, findings) {
|
|
|
182
184
|
return undefined;
|
|
183
185
|
}
|
|
184
186
|
try {
|
|
185
|
-
|
|
187
|
+
const parsed = JSON.parse(raw);
|
|
188
|
+
return { manifest: parseManifest(parsed, `${LLMS_DIR}/${MANIFEST_FILE}`), raw: parsed };
|
|
186
189
|
}
|
|
187
190
|
catch (error) {
|
|
188
191
|
findings.push({
|
|
@@ -195,6 +198,46 @@ async function loadManifest(llmsDir, findings) {
|
|
|
195
198
|
return undefined;
|
|
196
199
|
}
|
|
197
200
|
}
|
|
201
|
+
/** Every key the format defines. `additionalProperties` is true, so nothing else is read. */
|
|
202
|
+
const MANIFEST_KEYS = new Set(["$schema", "name", "version", "documents", "chunks"]);
|
|
203
|
+
const CHUNK_KEYS = new Set(["id", "file", "tokens", "tags", "entities", "documents"]);
|
|
204
|
+
/**
|
|
205
|
+
* Reports keys outside the closed set.
|
|
206
|
+
*
|
|
207
|
+
* Unknown fields are accepted and ignored, which is the forward-compatibility rule and worth
|
|
208
|
+
* keeping — but it also means `"tokens"` written as `"token"` validates, publishes, and does
|
|
209
|
+
* nothing. A publisher is the one party who can still tell a typo from an extension, so the
|
|
210
|
+
* check belongs here rather than in the reader, at a severity `--strict` fails on.
|
|
211
|
+
*/
|
|
212
|
+
function checkUnknownFields(raw, findings) {
|
|
213
|
+
const root = raw;
|
|
214
|
+
const unknown = Object.keys(root).filter((key) => !MANIFEST_KEYS.has(key));
|
|
215
|
+
if (unknown.length > 0) {
|
|
216
|
+
findings.push({
|
|
217
|
+
check: "unknown-field",
|
|
218
|
+
severity: "warn",
|
|
219
|
+
message: `the manifest has ${unknown.length === 1 ? "a field" : "fields"} nothing reads: ${unknown.join(", ")}`,
|
|
220
|
+
where: `${LLMS_DIR}/${MANIFEST_FILE}`,
|
|
221
|
+
fix: "Remove it, or correct the spelling. Unknown fields are accepted and ignored.",
|
|
222
|
+
});
|
|
223
|
+
}
|
|
224
|
+
const chunks = Array.isArray(root.chunks) ? root.chunks : [];
|
|
225
|
+
for (const entry of chunks) {
|
|
226
|
+
if (typeof entry !== "object" || entry === null)
|
|
227
|
+
continue;
|
|
228
|
+
const chunk = entry;
|
|
229
|
+
const extra = Object.keys(chunk).filter((key) => !CHUNK_KEYS.has(key));
|
|
230
|
+
if (extra.length === 0)
|
|
231
|
+
continue;
|
|
232
|
+
findings.push({
|
|
233
|
+
check: "unknown-field",
|
|
234
|
+
severity: "warn",
|
|
235
|
+
message: `chunk "${String(chunk.id)}" has ${extra.length === 1 ? "a field" : "fields"} nothing reads: ${extra.join(", ")}`,
|
|
236
|
+
where: `${LLMS_DIR}/${MANIFEST_FILE}`,
|
|
237
|
+
fix: "Remove it, or correct the spelling. Unknown fields are accepted and ignored.",
|
|
238
|
+
});
|
|
239
|
+
}
|
|
240
|
+
}
|
|
198
241
|
function checkPackageJson(pkg, manifest, findings) {
|
|
199
242
|
if (pkg === undefined) {
|
|
200
243
|
findings.push({
|
package/dist/doctor.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../src/doctor.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../src/doctor.ts"],"names":[],"mappings":"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"}
|
package/dist/document.d.ts
CHANGED
|
@@ -4,6 +4,8 @@ export interface CleanedDocument {
|
|
|
4
4
|
readonly title?: string;
|
|
5
5
|
/** Keywords taken from front matter, indexed alongside the prose. */
|
|
6
6
|
readonly tags: readonly string[];
|
|
7
|
+
/** Libraries this document describes, when it describes fewer than the whole package. */
|
|
8
|
+
readonly documents: readonly string[];
|
|
7
9
|
}
|
|
8
10
|
/**
|
|
9
11
|
* Prepares a source document for chunking: lifts front matter into metadata the index can use,
|
package/dist/document.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"document.d.ts","sourceRoot":"","sources":["../src/document.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,qEAAqE;IACrE,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,qEAAqE;IACrE,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"document.d.ts","sourceRoot":"","sources":["../src/document.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,qEAAqE;IACrE,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,qEAAqE;IACrE,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,yFAAyF;IACzF,QAAQ,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;CACvC;AAID;;;GAGG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,eAAe,CAY1D"}
|
package/dist/document.js
CHANGED
|
@@ -8,21 +8,23 @@ export function cleanDocument(raw) {
|
|
|
8
8
|
const match = FRONT_MATTER.exec(raw);
|
|
9
9
|
const body = stripBoilerplate(match === null ? raw : raw.slice(match[0].length)).trim();
|
|
10
10
|
if (match?.[1] === undefined)
|
|
11
|
-
return { text: body, tags: [] };
|
|
11
|
+
return { text: body, tags: [], documents: [] };
|
|
12
12
|
const meta = parseFrontMatter(match[1]);
|
|
13
13
|
return {
|
|
14
14
|
text: body,
|
|
15
15
|
...(meta.title === undefined ? {} : { title: meta.title }),
|
|
16
16
|
tags: meta.tags,
|
|
17
|
+
documents: meta.documents,
|
|
17
18
|
};
|
|
18
19
|
}
|
|
19
20
|
/**
|
|
20
|
-
* Reads the
|
|
21
|
+
* Reads the three front matter fields worth reading. This is deliberately not a YAML parser:
|
|
21
22
|
* anything more complex is not metadata a retrieval index can use.
|
|
22
23
|
*/
|
|
23
24
|
function parseFrontMatter(block) {
|
|
24
25
|
let title;
|
|
25
26
|
const tags = [];
|
|
27
|
+
const documents = [];
|
|
26
28
|
for (const line of block.split("\n")) {
|
|
27
29
|
const entry = /^\s*([A-Za-z_][\w-]*)\s*:\s*(.*)$/.exec(line);
|
|
28
30
|
if (entry?.[1] === undefined || entry[2] === undefined)
|
|
@@ -34,8 +36,10 @@ function parseFrontMatter(block) {
|
|
|
34
36
|
if ((key === "tags" || key === "keywords") && value.startsWith("[")) {
|
|
35
37
|
tags.push(...splitList(value));
|
|
36
38
|
}
|
|
39
|
+
if (key === "documents" && value.startsWith("["))
|
|
40
|
+
documents.push(...splitList(value));
|
|
37
41
|
}
|
|
38
|
-
return { ...(title === undefined ? {} : { title }), tags };
|
|
42
|
+
return { ...(title === undefined ? {} : { title }), tags, documents };
|
|
39
43
|
}
|
|
40
44
|
function splitList(value) {
|
|
41
45
|
return value
|
package/dist/document.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"document.js","sourceRoot":"","sources":["../src/document.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"document.js","sourceRoot":"","sources":["../src/document.ts"],"names":[],"mappings":"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"}
|
package/dist/eval.d.ts
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/** One question, and the chunk ids that would be a correct answer to it. */
|
|
2
|
+
export interface EvalCase {
|
|
3
|
+
readonly query: string;
|
|
4
|
+
/** Bare chunk ids, as they appear in the manifest. Any one of them counts as a hit. */
|
|
5
|
+
readonly expect: readonly string[];
|
|
6
|
+
}
|
|
7
|
+
export interface EvalCaseResult extends EvalCase {
|
|
8
|
+
/** Chunk ids returned, in rank order. */
|
|
9
|
+
readonly returned: readonly string[];
|
|
10
|
+
/** 1-based rank of the first expected chunk, or 0 when none of them came back. */
|
|
11
|
+
readonly rank: number;
|
|
12
|
+
readonly tokens: number;
|
|
13
|
+
}
|
|
14
|
+
export interface EvalReport {
|
|
15
|
+
readonly cases: readonly EvalCaseResult[];
|
|
16
|
+
/** Cases where an expected chunk came back at all, within `limit`. */
|
|
17
|
+
readonly hits: number;
|
|
18
|
+
/** Cases where an expected chunk came back first. */
|
|
19
|
+
readonly top1: number;
|
|
20
|
+
readonly total: number;
|
|
21
|
+
/** Mean tokens per answer — what tuning the chunk budget trades retrieval against. */
|
|
22
|
+
readonly averageTokens: number;
|
|
23
|
+
readonly limit: number;
|
|
24
|
+
readonly ok: boolean;
|
|
25
|
+
}
|
|
26
|
+
export interface EvalOptions {
|
|
27
|
+
readonly dir: string;
|
|
28
|
+
readonly cases: readonly EvalCase[];
|
|
29
|
+
readonly limit?: number;
|
|
30
|
+
readonly maxTokens?: number;
|
|
31
|
+
/** Percentage of cases that must return an expected chunk. Below it, `ok` is false. */
|
|
32
|
+
readonly minHitRate?: number;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Answers a set of questions from a package on disk and reports how often the right chunk came
|
|
36
|
+
* back.
|
|
37
|
+
*
|
|
38
|
+
* `doctor` cannot see this. Every chunk can be well-formed, well-tagged and the right size while
|
|
39
|
+
* the package still answers the wrong question, and the highest-leverage authoring decision —
|
|
40
|
+
* the chunk budget — trades two things off against each other in a way only measurement settles:
|
|
41
|
+
* bm25 normalizes for length, so retrieval prefers small chunks, while an answer capped at three
|
|
42
|
+
* of them prefers large ones.
|
|
43
|
+
*/
|
|
44
|
+
export declare function evaluatePackage(options: EvalOptions): Promise<EvalReport>;
|
|
45
|
+
/**
|
|
46
|
+
* Reads an evaluation set: a JSON array of `{ query, expect }`, where `expect` is a chunk id or
|
|
47
|
+
* an array of them. Malformed entries are an error rather than a skip — a gate that silently
|
|
48
|
+
* evaluates nine of ten questions reports a hit rate that is not about the set it was given.
|
|
49
|
+
*/
|
|
50
|
+
export declare function readEvalSet(file: string): Promise<readonly EvalCase[]>;
|
|
51
|
+
export declare function parseEvalSet(value: unknown, where: string): readonly EvalCase[];
|
|
52
|
+
//# sourceMappingURL=eval.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"eval.d.ts","sourceRoot":"","sources":["../src/eval.ts"],"names":[],"mappings":"AAKA,4EAA4E;AAC5E,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,uFAAuF;IACvF,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;CACpC;AAED,MAAM,WAAW,cAAe,SAAQ,QAAQ;IAC9C,yCAAyC;IACzC,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,kFAAkF;IAClF,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,KAAK,EAAE,SAAS,cAAc,EAAE,CAAC;IAC1C,sEAAsE;IACtE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,qDAAqD;IACrD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,sFAAsF;IACtF,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,KAAK,EAAE,SAAS,QAAQ,EAAE,CAAC;IACpC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,uFAAuF;IACvF,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED;;;;;;;;;GASG;AACH,wBAAsB,eAAe,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,CAwC/E;AAQD;;;;GAIG;AACH,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,QAAQ,EAAE,CAAC,CAkB5E;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,QAAQ,EAAE,CAuB/E"}
|
package/dist/eval.js
ADDED
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { readFile } from "node:fs/promises";
|
|
2
|
+
import { DocspackError } from "./errors.js";
|
|
3
|
+
import { previewPackage } from "./preview.js";
|
|
4
|
+
import { DEFAULT_LIMIT, DEFAULT_MAX_TOKENS } from "./search.js";
|
|
5
|
+
/**
|
|
6
|
+
* Answers a set of questions from a package on disk and reports how often the right chunk came
|
|
7
|
+
* back.
|
|
8
|
+
*
|
|
9
|
+
* `doctor` cannot see this. Every chunk can be well-formed, well-tagged and the right size while
|
|
10
|
+
* the package still answers the wrong question, and the highest-leverage authoring decision —
|
|
11
|
+
* the chunk budget — trades two things off against each other in a way only measurement settles:
|
|
12
|
+
* bm25 normalizes for length, so retrieval prefers small chunks, while an answer capped at three
|
|
13
|
+
* of them prefers large ones.
|
|
14
|
+
*/
|
|
15
|
+
export async function evaluatePackage(options) {
|
|
16
|
+
if (options.cases.length === 0) {
|
|
17
|
+
throw new DocspackError("The evaluation set is empty", {
|
|
18
|
+
hint: "Add at least one { query, expect } entry.",
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
const limit = options.limit ?? DEFAULT_LIMIT;
|
|
22
|
+
const cases = [];
|
|
23
|
+
for (const entry of options.cases) {
|
|
24
|
+
const result = await previewPackage({
|
|
25
|
+
dir: options.dir,
|
|
26
|
+
query: entry.query,
|
|
27
|
+
limit,
|
|
28
|
+
maxTokens: options.maxTokens ?? DEFAULT_MAX_TOKENS,
|
|
29
|
+
});
|
|
30
|
+
// A hit is compared on the bare id: an eval set written by the author must not have to
|
|
31
|
+
// restate the package name and version it is already sitting inside.
|
|
32
|
+
const returned = result.hits.map((hit) => bareChunkId(hit.chunkId));
|
|
33
|
+
const expected = new Set(entry.expect);
|
|
34
|
+
const rank = returned.findIndex((id) => expected.has(id)) + 1;
|
|
35
|
+
cases.push({ ...entry, returned, rank, tokens: result.tokens });
|
|
36
|
+
}
|
|
37
|
+
const hits = cases.filter((entry) => entry.rank > 0).length;
|
|
38
|
+
const total = cases.length;
|
|
39
|
+
const rate = (hits / total) * 100;
|
|
40
|
+
return {
|
|
41
|
+
cases,
|
|
42
|
+
hits,
|
|
43
|
+
top1: cases.filter((entry) => entry.rank === 1).length,
|
|
44
|
+
total,
|
|
45
|
+
averageTokens: Math.round(cases.reduce((sum, entry) => sum + entry.tokens, 0) / total),
|
|
46
|
+
limit,
|
|
47
|
+
ok: options.minHitRate === undefined || rate >= options.minHitRate,
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
/** `@acme/docspack@1.4.0/api-auth` -> `api-auth`. */
|
|
51
|
+
function bareChunkId(id) {
|
|
52
|
+
const slash = id.lastIndexOf("/");
|
|
53
|
+
return slash === -1 ? id : id.slice(slash + 1);
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Reads an evaluation set: a JSON array of `{ query, expect }`, where `expect` is a chunk id or
|
|
57
|
+
* an array of them. Malformed entries are an error rather than a skip — a gate that silently
|
|
58
|
+
* evaluates nine of ten questions reports a hit rate that is not about the set it was given.
|
|
59
|
+
*/
|
|
60
|
+
export async function readEvalSet(file) {
|
|
61
|
+
let raw;
|
|
62
|
+
try {
|
|
63
|
+
raw = await readFile(file, "utf8");
|
|
64
|
+
}
|
|
65
|
+
catch {
|
|
66
|
+
throw new DocspackError(`Could not read the evaluation set ${file}`, {
|
|
67
|
+
hint: 'It is a JSON array of { "query": "…", "expect": "chunk-id" }.',
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
let parsed;
|
|
71
|
+
try {
|
|
72
|
+
parsed = JSON.parse(raw);
|
|
73
|
+
}
|
|
74
|
+
catch (error) {
|
|
75
|
+
throw new DocspackError(`${file} is not valid JSON`, { cause: error });
|
|
76
|
+
}
|
|
77
|
+
return parseEvalSet(parsed, file);
|
|
78
|
+
}
|
|
79
|
+
export function parseEvalSet(value, where) {
|
|
80
|
+
const fail = (message) => {
|
|
81
|
+
throw new DocspackError(`${where}: ${message}`, {
|
|
82
|
+
hint: 'Each entry is { "query": "how do I …", "expect": "chunk-id" }.',
|
|
83
|
+
});
|
|
84
|
+
};
|
|
85
|
+
if (!Array.isArray(value))
|
|
86
|
+
fail("expected a JSON array of evaluation cases");
|
|
87
|
+
return value.map((entry, index) => {
|
|
88
|
+
if (typeof entry !== "object" || entry === null)
|
|
89
|
+
return fail(`case #${index} is not an object`);
|
|
90
|
+
const record = entry;
|
|
91
|
+
if (typeof record.query !== "string" || record.query.trim().length === 0) {
|
|
92
|
+
return fail(`case #${index} needs a non-empty "query"`);
|
|
93
|
+
}
|
|
94
|
+
const expect = Array.isArray(record.expect) ? record.expect : [record.expect];
|
|
95
|
+
if (expect.length === 0 || expect.some((id) => typeof id !== "string" || id.length === 0)) {
|
|
96
|
+
return fail(`case "${record.query}" needs "expect": a chunk id, or an array of them`);
|
|
97
|
+
}
|
|
98
|
+
return { query: record.query, expect: expect };
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=eval.js.map
|
package/dist/eval.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"eval.js","sourceRoot":"","sources":["../src/eval.ts"],"names":[],"mappings":"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"}
|
package/dist/help.d.ts
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The help text, per command.
|
|
3
|
+
*
|
|
4
|
+
* `docspack <command> --help` printed the global help, so no flag was discoverable from the CLI
|
|
5
|
+
* at all — `doctor --pedantic`, `ask --max-tokens` and `init --mirror` were findable only by
|
|
6
|
+
* reading the source. That matters more than usual for a tool whose main user is an agent that
|
|
7
|
+
* will not open a browser, and it is why the global page now points at these rather than trying
|
|
8
|
+
* to list every flag of every command in one block.
|
|
9
|
+
*/
|
|
10
|
+
export interface CommandHelp {
|
|
11
|
+
readonly name: string;
|
|
12
|
+
/** The line this command shows in the global help and on the site. */
|
|
13
|
+
readonly summary: string;
|
|
14
|
+
readonly group: "core" | "authoring";
|
|
15
|
+
readonly usage: string;
|
|
16
|
+
/** Flags this command reads, beyond the global ones. */
|
|
17
|
+
readonly options: readonly (readonly [string, string])[];
|
|
18
|
+
readonly detail?: readonly string[];
|
|
19
|
+
readonly examples: readonly string[];
|
|
20
|
+
}
|
|
21
|
+
export declare const COMMANDS: readonly CommandHelp[];
|
|
22
|
+
export declare function findCommandHelp(name: string): CommandHelp | undefined;
|
|
23
|
+
/** The page one command prints for `docspack <command> --help`. */
|
|
24
|
+
export declare function commandHelpText(command: CommandHelp): string;
|
|
25
|
+
/**
|
|
26
|
+
* The global page. It lists the commands and the options that apply to all of them, and points
|
|
27
|
+
* at the per-command pages for the rest — one list of every flag of every command was what made
|
|
28
|
+
* the flags unfindable in the first place.
|
|
29
|
+
*/
|
|
30
|
+
export declare function globalHelpText(storePath: string, notIndexed: number, noMatch: number): string;
|
|
31
|
+
//# sourceMappingURL=help.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"help.d.ts","sourceRoot":"","sources":["../src/help.ts"],"names":[],"mappings":"AAEA;;;;;;;;GAQG;AACH,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,sEAAsE;IACtE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,CAAC;IACrC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,wDAAwD;IACxD,QAAQ,CAAC,OAAO,EAAE,SAAS,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC;IACzD,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;CACtC;AAYD,eAAO,MAAM,QAAQ,EAAE,SAAS,WAAW,EAyO1C,CAAC;AAWF,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,CAErE;AAQD,mEAAmE;AACnE,wBAAgB,eAAe,CAAC,OAAO,EAAE,WAAW,GAAG,MAAM,CAwB5D;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CA8D7F"}
|