@dogsbay/commands 0.2.0-beta.114 → 0.2.0-beta.116

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/dist/index.js CHANGED
@@ -19,6 +19,7 @@ export { relativeHref, replaceLinkHref, replaceIncludePath, replaceMapHref, rewr
19
19
  import { CommandRegistry } from "./engine.js";
20
20
  import { validateCommand } from "./commands/validate.js";
21
21
  import { whereUsedCommand } from "./commands/where-used.js";
22
+ import { renderPageCommand } from "./commands/render-page.js";
22
23
  import { keysListCommand, keysResolveCommand } from "./commands/keys.js";
23
24
  import { topicmapResolveCommand } from "./commands/topicmap.js";
24
25
  import { reindexCommand } from "./commands/reindex.js";
@@ -26,10 +27,10 @@ import { renameFileCommand, safeDeleteCommand, extractIncludeCommand, } from "./
26
27
  import { renameKeyCommand, keyifyCommand } from "./commands/refactor-keys.js";
27
28
  import { splitTopicCommand, mergeTopicsCommand } from "./commands/refactor-structure.js";
28
29
  import { topicReadCommand, topicSetTitleCommand, sectionReplaceCommand, blockInsertCommand, blockDeleteCommand, propsGetCommand, propsSetCommand, } from "./commands/content.js";
29
- export { WELL_KNOWN_FIELDS, } from "./frontmatter-schema.js";
30
+ export { WELL_KNOWN_FIELDS, } from "@dogsbay/types";
30
31
  export { linkRetargetCommand } from "./commands/link-retarget.js";
31
32
  import { mapListCommand, mapAddRefCommand, mapMoveRefCommand, mapRemoveRefCommand, mapSetPropsCommand, } from "./commands/topicmap-edit.js";
32
- export { validateCommand, whereUsedCommand, keysListCommand, keysResolveCommand, topicmapResolveCommand, reindexCommand, renameFileCommand, safeDeleteCommand, extractIncludeCommand, renameKeyCommand, keyifyCommand, splitTopicCommand, mergeTopicsCommand, };
33
+ export { validateCommand, whereUsedCommand, renderPageCommand, keysListCommand, keysResolveCommand, topicmapResolveCommand, reindexCommand, renameFileCommand, safeDeleteCommand, extractIncludeCommand, renameKeyCommand, keyifyCommand, splitTopicCommand, mergeTopicsCommand, };
33
34
  export { contentHash } from "./commands/content.js";
34
35
  export { topicReadCommand, topicSetTitleCommand, sectionReplaceCommand, blockInsertCommand, blockDeleteCommand, propsGetCommand, propsSetCommand, } from "./commands/content.js";
35
36
  export { mapListCommand, mapAddRefCommand, mapMoveRefCommand, mapRemoveRefCommand, mapSetPropsCommand, } from "./commands/topicmap-edit.js";
@@ -65,6 +66,8 @@ export const createDefaultRegistry = () => {
65
66
  registry.register(mapMoveRefCommand);
66
67
  registry.register(mapRemoveRefCommand);
67
68
  registry.register(mapSetPropsCommand);
69
+ // documents: one page to one self-contained HTML file (@dogsbay/render)
70
+ registry.register(renderPageCommand);
68
71
  return registry;
69
72
  };
70
73
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/storage.d.ts CHANGED
@@ -14,6 +14,14 @@ export interface Storage {
14
14
  list(): Promise<string[]>;
15
15
  /** Read a file as UTF-8 text. Rejects if missing. */
16
16
  read(path: string): Promise<string>;
17
+ /**
18
+ * Read a file's bytes (render-page: the document and its images). Optional:
19
+ * storages without it embed no images. Always contained to the workspace, symlinks
20
+ * included, and refuses a file over `maxBytes` before reading it.
21
+ */
22
+ readBytes?(path: string, options?: {
23
+ maxBytes?: number;
24
+ }): Promise<Uint8Array>;
17
25
  /** Write a file (creating parent directories as needed). */
18
26
  write(path: string, content: string): Promise<void>;
19
27
  /** Delete a file. Rejects if missing. */
@@ -61,6 +69,9 @@ export declare class NodeStorage implements Storage {
61
69
  private isInsideRoot;
62
70
  list(): Promise<string[]>;
63
71
  read(path: string): Promise<string>;
72
+ readBytes(path: string, options?: {
73
+ maxBytes?: number;
74
+ }): Promise<Uint8Array>;
64
75
  write(path: string, content: string): Promise<void>;
65
76
  delete(path: string): Promise<void>;
66
77
  exists(path: string): Promise<boolean>;
@@ -1 +1 @@
1
- {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,MAAM,WAAW,OAAO;IACtB,4EAA4E;IAC5E,IAAI,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC1B,qDAAqD;IACrD,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACpC,4DAA4D;IAC5D,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACpD,yCAAyC;IACzC,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACpC,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACxC;AAED,wEAAwE;AACxE,eAAO,MAAM,oBAAoB,GAAI,MAAM,MAAM,KAAG,MAiBnD,CAAC;AAEF,yDAAyD;AACzD,qBAAa,aAAc,YAAW,OAAO;IAC3C,OAAO,CAAC,KAAK,CAAsB;gBAEvB,KAAK,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM;IAMxC,IAAI,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAIzB,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAMnC,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAInD,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAMnC,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CAG7C;AAOD;;;;GAIG;AACH,MAAM,WAAW,kBAAkB;IACjC;;;;;;;;OAQG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,qBAAa,WAAY,YAAW,OAAO;IAI7B,OAAO,CAAC,IAAI;IAHxB,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAU;IAC1C,OAAO,CAAC,QAAQ,CAA8B;gBAE1B,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,kBAAuB;YAIpD,EAAE;IAIhB,OAAO,CAAC,GAAG;IAQX,uFAAuF;YACzE,OAAO;YASP,YAAY;IAqBpB,IAAI,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAgDzB,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAKnC,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQnD,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKnC,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CAS7C"}
1
+ {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,MAAM,WAAW,OAAO;IACtB,4EAA4E;IAC5E,IAAI,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC1B,qDAAqD;IACrD,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACpC;;;;OAIG;IACH,SAAS,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IAC/E,4DAA4D;IAC5D,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACpD,yCAAyC;IACzC,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACpC,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACxC;AAED,wEAAwE;AACxE,eAAO,MAAM,oBAAoB,GAAI,MAAM,MAAM,KAAG,MAiBnD,CAAC;AAEF,yDAAyD;AACzD,qBAAa,aAAc,YAAW,OAAO;IAC3C,OAAO,CAAC,KAAK,CAAsB;gBAEvB,KAAK,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM;IAMxC,IAAI,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAIzB,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAMnC,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAInD,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAMnC,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CAG7C;AAOD;;;;GAIG;AACH,MAAM,WAAW,kBAAkB;IACjC;;;;;;;;OAQG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,qBAAa,WAAY,YAAW,OAAO;IAI7B,OAAO,CAAC,IAAI;IAHxB,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAU;IAC1C,OAAO,CAAC,QAAQ,CAA8B;gBAE1B,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,kBAAuB;YAIpD,EAAE;IAIhB,OAAO,CAAC,GAAG;IAQX,uFAAuF;YACzE,OAAO;YASP,YAAY;IAqBpB,IAAI,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAgDzB,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAKnC,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAO,GAAG,OAAO,CAAC,UAAU,CAAC;IAYjF,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQnD,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKnC,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CAS7C"}
package/dist/storage.js CHANGED
@@ -168,6 +168,20 @@ export class NodeStorage {
168
168
  const fs = await this.fs();
169
169
  return fs.readFile(await this.safeAbs(path), "utf-8");
170
170
  }
171
+ async readBytes(path, options = {}) {
172
+ const fs = await this.fs();
173
+ // Contained whatever containSymlinks says: this reads binaries for a page that leaves
174
+ // the workspace, so a symlink out (docs/k.png -> ~/.ssh/key) must not be followed.
175
+ const abs = this.abs(path);
176
+ if (!(await this.isInsideRoot(abs)))
177
+ throw new Error(`Path resolves outside the workspace root: ${path}`);
178
+ const st = await fs.stat(abs);
179
+ if (!st.isFile())
180
+ throw new Error(`Not a file: ${path}`);
181
+ if (options.maxBytes !== undefined && st.size > options.maxBytes)
182
+ throw new Error(`File is over ${options.maxBytes} bytes: ${path}`);
183
+ return new Uint8Array(await fs.readFile(abs));
184
+ }
171
185
  async write(path, content) {
172
186
  const fs = await this.fs();
173
187
  const abs = await this.safeAbs(path);
@@ -1 +1 @@
1
- {"version":3,"file":"storage.js","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"storage.js","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dogsbay/commands",
3
- "version": "0.2.0-beta.114",
3
+ "version": "0.2.0-beta.116",
4
4
  "description": "Typed, headless-first command engine for the Dogsbay platform — one zod-defined command yields CLI, JSON-RPC, and MCP surfaces",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -24,10 +24,11 @@
24
24
  "dependencies": {
25
25
  "js-yaml": "^5.2.1",
26
26
  "zod": "^4.4.3",
27
- "@dogsbay/format-dogsbay-md": "0.2.0-beta.114",
28
- "@dogsbay/minja": "0.2.0-beta.114",
29
- "@dogsbay/format-topicmap": "0.2.0-beta.114",
30
- "@dogsbay/types": "0.2.0-beta.114"
27
+ "@dogsbay/format-dogsbay-md": "0.2.0-beta.116",
28
+ "@dogsbay/format-topicmap": "0.2.0-beta.116",
29
+ "@dogsbay/types": "0.2.0-beta.116",
30
+ "@dogsbay/render": "0.2.0-beta.116",
31
+ "@dogsbay/minja": "0.2.0-beta.116"
31
32
  },
32
33
  "license": "MIT",
33
34
  "repository": {
@@ -1,49 +0,0 @@
1
- import { z } from "zod";
2
- export interface ExampleChunk {
3
- /**
4
- * Stable identity across corpus VERSIONS: hash of
5
- * page + headingPath + title + lang + occurrence-index. Two versions
6
- * of the same sample share an `id`; comparing their `contentHash`
7
- * spots drift ("samples changed between vA and vB"). Measured 96%
8
- * stable across better-auth 1.5.6→1.6.23 — see
9
- * docs-dev/corpus-pipeline-prototype.md Addendum 5.
10
- */
11
- id: string;
12
- /** Hash of `code` — differs when the sample's code changed. */
13
- contentHash: string;
14
- /** Workspace-relative page path (e.g. "content/plugins/2fa.md"). */
15
- page: string;
16
- /** Enclosing heading texts, outermost first. */
17
- headingPath: string[];
18
- /** Fence title (e.g. "auth.ts") when present. */
19
- title?: string;
20
- lang: string;
21
- /** Nearest preceding prose in the same section (plain text). */
22
- description: string;
23
- code: string;
24
- }
25
- /**
26
- * Extract example chunks from one parsed document — re-pointed to the ONE
27
- * chunker (plans/chunking-strategy.md Phase 1): `chunk(...).filter(code)`,
28
- * mapped back to the ExampleChunk shape. The PLACEMENT-based `id` scheme is
29
- * preserved verbatim (page + headingPath + title + lang + occurrence): it is
30
- * what makes example identity 96%-stable across corpus versions, and the
31
- * chunker's content-addressed ids serve a different job (diff/manifests).
32
- * Validated at 100% parity (2015/2015 samples) against the previous walker
33
- * on better-auth v1.6.23.
34
- */
35
- export declare function extractExamples(source: string, page: string): ExampleChunk[];
36
- /** Tokenize identifiers and prose alike: camelCase, paths, kebab. */
37
- export declare function tokenize(text: string): string[];
38
- export interface RankedExample extends ExampleChunk {
39
- score: number;
40
- }
41
- /** Compact BM25 over the chunk set. */
42
- export declare function rankExamples(chunks: ExampleChunk[], query: string, top: number): RankedExample[];
43
- export declare const examplesCommand: import("../engine.js").CommandDef<z.ZodObject<{
44
- query: z.ZodString;
45
- top: z.ZodDefault<z.ZodNumber>;
46
- lang: z.ZodOptional<z.ZodString>;
47
- page: z.ZodOptional<z.ZodString>;
48
- }, z.core.$strict>>;
49
- //# sourceMappingURL=examples.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"examples.d.ts","sourceRoot":"","sources":["../../src/commands/examples.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,MAAM,WAAW,YAAY;IAC3B;;;;;;;OAOG;IACH,EAAE,EAAE,MAAM,CAAC;IACX,+DAA+D;IAC/D,WAAW,EAAE,MAAM,CAAC;IACpB,oEAAoE;IACpE,IAAI,EAAE,MAAM,CAAC;IACb,gDAAgD;IAChD,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,iDAAiD;IACjD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,gEAAgE;IAChE,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;CACd;AAKD;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,YAAY,EAAE,CAwB5E;AAID,qEAAqE;AACrE,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAM/C;AAiBD,MAAM,WAAW,aAAc,SAAQ,YAAY;IACjD,KAAK,EAAE,MAAM,CAAC;CACf;AAED,uCAAuC;AACvC,wBAAgB,YAAY,CAC1B,MAAM,EAAE,YAAY,EAAE,EACtB,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,MAAM,GACV,aAAa,EAAE,CAgCjB;AAaD,eAAO,MAAM,eAAe;;;;;mBA+C1B,CAAC"}
@@ -1,173 +0,0 @@
1
- /**
2
- * `examples` — versioned code-example retrieval over a corpus
3
- * (corpus-pipeline Phase 1.5; docs-dev/corpus-pipeline-prototype.md
4
- * Addendum 4 — the "local Context7").
5
- *
6
- * Extracts every fenced code block from the workspace's markdown with
7
- * its context (heading path, nearest preceding prose as description,
8
- * fence title, language) and ranks chunks against the query with BM25.
9
- *
10
- * Version pinning is the CALLER's job by construction: the workspace
11
- * root IS the corpus checkout, so pointing the engine at a corpus repo
12
- * at tag `corpus-v1.3.34` retrieves 1.3-era examples — the cutoff-gap
13
- * flow ("give me the CURRENT canonical usage for the API I'm about to
14
- * touch") needs old versions as much as new ones.
15
- */
16
- import { createHash } from "node:crypto";
17
- import { z } from "zod";
18
- import { chunk } from "@dogsbay/chunk";
19
- import { dogsbayMdToTree } from "@dogsbay/format-dogsbay-md";
20
- import { defineCommand } from "../engine.js";
21
- const shortHash = (text) => createHash("sha256").update(text).digest("hex").slice(0, 12);
22
- /**
23
- * Extract example chunks from one parsed document — re-pointed to the ONE
24
- * chunker (plans/chunking-strategy.md Phase 1): `chunk(...).filter(code)`,
25
- * mapped back to the ExampleChunk shape. The PLACEMENT-based `id` scheme is
26
- * preserved verbatim (page + headingPath + title + lang + occurrence): it is
27
- * what makes example identity 96%-stable across corpus versions, and the
28
- * chunker's content-addressed ids serve a different job (diff/manifests).
29
- * Validated at 100% parity (2015/2015 samples) against the previous walker
30
- * on better-auth v1.6.23.
31
- */
32
- export function extractExamples(source, page) {
33
- const { tree } = dogsbayMdToTree(source);
34
- const keyCounts = new Map();
35
- return chunk(tree, { page })
36
- // The chunker sets `code` on every code chunk and skips empty fences —
37
- // the narrow here is for the type, not a runtime fallback.
38
- .filter((c) => c.kind === "code" && c.code !== undefined)
39
- .map((c) => {
40
- const lang = c.lang ?? "";
41
- const code = c.code;
42
- const baseKey = [page, c.anchor.headingPath.join(">"), c.title ?? "", lang].join("\u241f");
43
- const occurrence = keyCounts.get(baseKey) ?? 0;
44
- keyCounts.set(baseKey, occurrence + 1);
45
- return {
46
- id: shortHash(`${baseKey}\u241f${occurrence}`),
47
- contentHash: shortHash(code),
48
- page,
49
- headingPath: c.anchor.headingPath,
50
- ...(c.title === undefined ? {} : { title: c.title }),
51
- lang,
52
- description: c.description ?? "",
53
- code,
54
- };
55
- });
56
- }
57
- // ── BM25 ranking ─────────────────────────────────────────
58
- /** Tokenize identifiers and prose alike: camelCase, paths, kebab. */
59
- export function tokenize(text) {
60
- return text
61
- .replace(/([a-z0-9])([A-Z])/g, "$1 $2")
62
- .toLowerCase()
63
- .split(/[^a-z0-9]+/)
64
- .filter((t) => t.length > 1);
65
- }
66
- /** Field-weighted token bag for a chunk. */
67
- function chunkTokens(chunk) {
68
- const weighted = [];
69
- const push = (text, weight) => {
70
- const tokens = tokenize(text);
71
- for (let w = 0; w < weight; w++)
72
- weighted.push(...tokens);
73
- };
74
- push(chunk.headingPath.join(" "), 3);
75
- push(chunk.title ?? "", 3);
76
- push(chunk.description, 2);
77
- push(chunk.lang, 1);
78
- push(chunk.code, 1);
79
- return weighted;
80
- }
81
- /** Compact BM25 over the chunk set. */
82
- export function rankExamples(chunks, query, top) {
83
- const k1 = 1.4;
84
- const b = 0.75;
85
- const queryTokens = [...new Set(tokenize(query))];
86
- if (queryTokens.length === 0)
87
- return [];
88
- const docs = chunks.map(chunkTokens);
89
- const avgLen = docs.reduce((a, d) => a + d.length, 0) / Math.max(1, docs.length);
90
- const df = new Map();
91
- const tfs = docs.map((tokens) => {
92
- const tf = new Map();
93
- for (const t of tokens)
94
- tf.set(t, (tf.get(t) ?? 0) + 1);
95
- for (const t of tf.keys())
96
- df.set(t, (df.get(t) ?? 0) + 1);
97
- return tf;
98
- });
99
- const n = docs.length;
100
- const scored = chunks.map((chunk, i) => {
101
- let score = 0;
102
- for (const q of queryTokens) {
103
- const f = tfs[i].get(q) ?? 0;
104
- if (f === 0)
105
- continue;
106
- const idf = Math.log(1 + (n - (df.get(q) ?? 0) + 0.5) / ((df.get(q) ?? 0) + 0.5));
107
- score += (idf * f * (k1 + 1)) / (f + k1 * (1 - b + (b * docs[i].length) / avgLen));
108
- }
109
- return { ...chunk, score };
110
- });
111
- return scored
112
- .filter((c) => c.score > 0)
113
- .sort((a, b2) => b2.score - a.score)
114
- .slice(0, top);
115
- }
116
- // ── The command ──────────────────────────────────────────
117
- const input = z
118
- .object({
119
- query: z.string().min(1).describe("What you're trying to do or the API you're about to touch"),
120
- top: z.number().int().min(1).max(25).default(5).describe("Maximum results"),
121
- lang: z.string().optional().describe("Restrict to a fence language (e.g. ts)"),
122
- page: z.string().optional().describe("Restrict to pages whose path contains this substring"),
123
- })
124
- .strict();
125
- export const examplesCommand = defineCommand({
126
- name: "examples",
127
- writes: "none",
128
- description: "Retrieve canonical code examples from the corpus, ranked by relevance. " +
129
- "The workspace root pins the version: point it at a corpus checkout of " +
130
- "the installed version to get examples that match the user's lockfile.",
131
- input,
132
- positionals: ["query"],
133
- async run(ctx, { query, top, lang, page }) {
134
- const files = (await ctx.workspace.storage.list()).filter((f) => f.endsWith(".md"));
135
- const chunks = [];
136
- for (const file of files) {
137
- if (page && !file.includes(page))
138
- continue;
139
- let source;
140
- try {
141
- source = await ctx.workspace.storage.read(file);
142
- }
143
- catch {
144
- continue;
145
- }
146
- for (const chunk of extractExamples(source, file)) {
147
- if (lang && chunk.lang !== lang)
148
- continue;
149
- chunks.push(chunk);
150
- }
151
- }
152
- const results = rankExamples(chunks, query, top);
153
- return {
154
- data: {
155
- query,
156
- totalChunks: chunks.length,
157
- results: results.map((r) => ({
158
- id: r.id,
159
- contentHash: r.contentHash,
160
- page: r.page,
161
- headingPath: r.headingPath,
162
- title: r.title,
163
- lang: r.lang,
164
- description: r.description,
165
- code: r.code,
166
- score: Number(r.score.toFixed(3)),
167
- })),
168
- },
169
- summary: `${results.length} example(s) for "${query}" (from ${chunks.length} chunks in ${files.length} pages)`,
170
- };
171
- },
172
- });
173
- //# sourceMappingURL=examples.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"examples.js","sourceRoot":"","sources":["../../src/commands/examples.ts"],"names":[],"mappings":"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"}
@@ -1,97 +0,0 @@
1
- /** The YAML shapes a field may take. `date` accepts a Date (js-yaml parses ISO dates) or an ISO-ish string. */
2
- export type FieldType = "string" | "number" | "boolean" | "date" | "string[]" | "string|string[]" | "object" | "boolean|object" | "scalar|scalar[]";
3
- export interface FieldSpec {
4
- type: FieldType;
5
- /** Closed set of values (checked case-sensitively; a case-only miss is reported with the fix). */
6
- values?: string[];
7
- }
8
- /**
9
- * The well-known fields. Anything not listed is free-form as far as the
10
- * engine is concerned (see `unknown` above).
11
- */
12
- export declare const WELL_KNOWN_FIELDS: Record<string, FieldSpec>;
13
- /**
14
- * Fields the pipeline ACCEPTS but does not act on: they are here so imported
15
- * content does not light up as "unknown", not because setting them does
16
- * anything. Kept in one list so the docs can say so honestly.
17
- */
18
- export declare const INERT_FIELDS: Set<string>;
19
- /**
20
- * Keys the AGGREGATOR owns: the multi-source build writes them, and a writer
21
- * setting one by hand is a mistake that shows up as a page routed to the
22
- * wrong namespace/version (documented in the frontmatter-fields skill).
23
- */
24
- export declare const AGGREGATOR_OWNED: string[];
25
- /** One `propSchema` entry from dogsbay.config: a type, optionally a closed set. */
26
- export interface PropSpec {
27
- type: "string" | "number" | "boolean";
28
- enum?: string[];
29
- }
30
- export interface TaxonomySpec {
31
- values?: string[];
32
- hierarchical?: boolean;
33
- }
34
- export interface FrontmatterPolicy {
35
- /** Declared taxonomies (config `taxonomies:`), keyed by frontmatter field name. */
36
- taxonomies: Record<string, TaxonomySpec>;
37
- /**
38
- * Config `propSchema:` — the free-form `props:` bag's declared shape. It has
39
- * been in the config schema (and validated as CONFIG) since taxonomies
40
- * landed, with nothing ever checking a PAGE against it.
41
- */
42
- propSchema: Record<string, PropSpec>;
43
- /** `content.frontmatter.required`: path glob → fields that must be present. */
44
- required: Array<{
45
- glob: string;
46
- fields: string[];
47
- }>;
48
- /** `content.frontmatter.unknown`: what to do with keys nobody declared. */
49
- unknown: "ignore" | "warn" | "error";
50
- /**
51
- * The content roots (config `content.sources[].path`). The declared policy
52
- * applies to CONTENT: a README, a plan or a dev note in the same workspace
53
- * is not a page, and reporting its frontmatter is noise. Globs are matched
54
- * against the content-root-relative path, which is what a writer means by
55
- * `guides/**`.
56
- */
57
- roots: string[];
58
- /** Set when the config's policy is itself malformed — reported, never guessed around. */
59
- invalid?: string;
60
- }
61
- export declare const EMPTY_POLICY: FrontmatterPolicy;
62
- /** The type name to SHOW for a value the writer got wrong. */
63
- export declare const typeOf: (v: unknown) => string;
64
- export declare function matchesType(value: unknown, type: FieldType): boolean;
65
- /**
66
- * The near-miss values for a bad enum entry: a case-only difference first
67
- * (the overwhelmingly common typo), then a one-edit neighbour. A fix is
68
- * offered only when exactly one candidate comes back.
69
- */
70
- export declare function nearMisses(value: string, allowed: string[]): string[];
71
- /**
72
- * Whether a near miss may be APPLIED with one click, as opposed to merely
73
- * listed. Only a case difference qualifies: at edit distance 2 the single
74
- * candidate for `unstable` is `stable`, and for `review` it is `preview` —
75
- * a one-click fix that inverts the writer's meaning is worse than no fix.
76
- */
77
- export declare const isSafeAutoFix: (value: string, candidate: string) => boolean;
78
- /**
79
- * The 1-based line of a top-level key inside the frontmatter block, so a
80
- * finding can be revealed where the writer wrote it. Only the block is
81
- * scanned (the body may contain a line that looks like a key).
82
- */
83
- export declare function frontmatterKeyLines(source: string): Map<string, number>;
84
- /**
85
- * `content/guides/**` / `*.md` / `content/*​/index.md`. Deliberately small:
86
- * `**` crosses directories, `*` does not, everything else is literal.
87
- */
88
- export declare function globMatches(glob: string, path: string): boolean;
89
- /**
90
- * The path a glob is matched against: relative to the content root the doc
91
- * lives under, so `guides/**` means what the writer means when their content
92
- * is `content/guides/…`. A doc outside every declared root is not content.
93
- */
94
- export declare function contentRelativePath(policy: FrontmatterPolicy, path: string): string | null;
95
- /** Fields required for a path by the declared globs (deduped, in declaration order). */
96
- export declare function requiredFieldsFor(policy: FrontmatterPolicy, path: string): string[];
97
- //# sourceMappingURL=frontmatter-schema.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"frontmatter-schema.d.ts","sourceRoot":"","sources":["../src/frontmatter-schema.ts"],"names":[],"mappings":"AA0BA,+GAA+G;AAC/G,MAAM,MAAM,SAAS,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,GAAG,UAAU,GAAG,iBAAiB,GAAG,QAAQ,GAAG,gBAAgB,GAAG,iBAAiB,CAAC;AAEpJ,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,SAAS,CAAC;IAChB,kGAAkG;IAClG,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAED;;;GAGG;AACH,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAkDvD,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,YAAY,aAAqG,CAAC;AAE/H;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,UAAkB,CAAC;AAEhD,mFAAmF;AACnF,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;IACtC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,iBAAiB;IAChC,mFAAmF;IACnF,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACzC;;;;OAIG;IACH,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACrC,+EAA+E;IAC/E,QAAQ,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;IACpD,2EAA2E;IAC3E,OAAO,EAAE,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC;IACrC;;;;;;OAMG;IACH,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,yFAAyF;IACzF,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,eAAO,MAAM,YAAY,EAAE,iBAAoG,CAAC;AAUhI,8DAA8D;AAC9D,eAAO,MAAM,MAAM,GAAI,GAAG,OAAO,KAAG,MAMnC,CAAC;AAEF,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,GAAG,OAAO,CAkBpE;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAKrE;AAED;;;;;GAKG;AACH,eAAO,MAAM,aAAa,GAAI,OAAO,MAAM,EAAE,WAAW,MAAM,KAAG,OACT,CAAC;AAuBzD;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAcvE;AAID;;;GAGG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAM/D;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,iBAAiB,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAY1F;AAED,wFAAwF;AACxF,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,iBAAiB,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CASnF"}