domain-knowledge-kit 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 +94 -0
- package/README.md +266 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +40 -0
- package/dist/cli.js.map +1 -0
- package/dist/features/adr/commands/adr-related.d.ts +14 -0
- package/dist/features/adr/commands/adr-related.d.ts.map +1 -0
- package/dist/features/adr/commands/adr-related.js +146 -0
- package/dist/features/adr/commands/adr-related.js.map +1 -0
- package/dist/features/adr/commands/adr-show.d.ts +10 -0
- package/dist/features/adr/commands/adr-show.d.ts.map +1 -0
- package/dist/features/adr/commands/adr-show.js +30 -0
- package/dist/features/adr/commands/adr-show.js.map +1 -0
- package/dist/features/pipeline/commands/render.d.ts +10 -0
- package/dist/features/pipeline/commands/render.d.ts.map +1 -0
- package/dist/features/pipeline/commands/render.js +71 -0
- package/dist/features/pipeline/commands/render.js.map +1 -0
- package/dist/features/pipeline/commands/validate.d.ts +10 -0
- package/dist/features/pipeline/commands/validate.d.ts.map +1 -0
- package/dist/features/pipeline/commands/validate.js +48 -0
- package/dist/features/pipeline/commands/validate.js.map +1 -0
- package/dist/features/pipeline/indexer.d.ts +36 -0
- package/dist/features/pipeline/indexer.d.ts.map +1 -0
- package/dist/features/pipeline/indexer.js +279 -0
- package/dist/features/pipeline/indexer.js.map +1 -0
- package/dist/features/pipeline/renderer.d.ts +42 -0
- package/dist/features/pipeline/renderer.d.ts.map +1 -0
- package/dist/features/pipeline/renderer.js +239 -0
- package/dist/features/pipeline/renderer.js.map +1 -0
- package/dist/features/pipeline/tests/indexer.test.d.ts +2 -0
- package/dist/features/pipeline/tests/indexer.test.d.ts.map +1 -0
- package/dist/features/pipeline/tests/indexer.test.js +224 -0
- package/dist/features/pipeline/tests/indexer.test.js.map +1 -0
- package/dist/features/pipeline/tests/renderer.test.d.ts +2 -0
- package/dist/features/pipeline/tests/renderer.test.d.ts.map +1 -0
- package/dist/features/pipeline/tests/renderer.test.js +252 -0
- package/dist/features/pipeline/tests/renderer.test.js.map +1 -0
- package/dist/features/pipeline/tests/validate-schemas.test.d.ts +2 -0
- package/dist/features/pipeline/tests/validate-schemas.test.d.ts.map +1 -0
- package/dist/features/pipeline/tests/validate-schemas.test.js +183 -0
- package/dist/features/pipeline/tests/validate-schemas.test.js.map +1 -0
- package/dist/features/pipeline/tests/validator.test.d.ts +2 -0
- package/dist/features/pipeline/tests/validator.test.d.ts.map +1 -0
- package/dist/features/pipeline/tests/validator.test.js +371 -0
- package/dist/features/pipeline/tests/validator.test.js.map +1 -0
- package/dist/features/pipeline/validator.d.ts +44 -0
- package/dist/features/pipeline/validator.d.ts.map +1 -0
- package/dist/features/pipeline/validator.js +289 -0
- package/dist/features/pipeline/validator.js.map +1 -0
- package/dist/features/query/commands/list.d.ts +10 -0
- package/dist/features/query/commands/list.d.ts.map +1 -0
- package/dist/features/query/commands/list.js +123 -0
- package/dist/features/query/commands/list.js.map +1 -0
- package/dist/features/query/commands/related.d.ts +10 -0
- package/dist/features/query/commands/related.d.ts.map +1 -0
- package/dist/features/query/commands/related.js +61 -0
- package/dist/features/query/commands/related.js.map +1 -0
- package/dist/features/query/commands/search.d.ts +10 -0
- package/dist/features/query/commands/search.d.ts.map +1 -0
- package/dist/features/query/commands/search.js +55 -0
- package/dist/features/query/commands/search.js.map +1 -0
- package/dist/features/query/commands/show.d.ts +10 -0
- package/dist/features/query/commands/show.d.ts.map +1 -0
- package/dist/features/query/commands/show.js +96 -0
- package/dist/features/query/commands/show.js.map +1 -0
- package/dist/features/query/searcher.d.ts +58 -0
- package/dist/features/query/searcher.d.ts.map +1 -0
- package/dist/features/query/searcher.js +185 -0
- package/dist/features/query/searcher.js.map +1 -0
- package/dist/features/query/tests/searcher.test.d.ts +2 -0
- package/dist/features/query/tests/searcher.test.d.ts.map +1 -0
- package/dist/features/query/tests/searcher.test.js +320 -0
- package/dist/features/query/tests/searcher.test.js.map +1 -0
- package/dist/shared/adr-parser.d.ts +14 -0
- package/dist/shared/adr-parser.d.ts.map +1 -0
- package/dist/shared/adr-parser.js +72 -0
- package/dist/shared/adr-parser.js.map +1 -0
- package/dist/shared/errors.d.ts +43 -0
- package/dist/shared/errors.d.ts.map +1 -0
- package/dist/shared/errors.js +60 -0
- package/dist/shared/errors.js.map +1 -0
- package/dist/shared/graph.d.ts +71 -0
- package/dist/shared/graph.d.ts.map +1 -0
- package/dist/shared/graph.js +250 -0
- package/dist/shared/graph.js.map +1 -0
- package/dist/shared/index.d.ts +16 -0
- package/dist/shared/index.d.ts.map +1 -0
- package/dist/shared/index.js +24 -0
- package/dist/shared/index.js.map +1 -0
- package/dist/shared/item-visitor.d.ts +62 -0
- package/dist/shared/item-visitor.d.ts.map +1 -0
- package/dist/shared/item-visitor.js +95 -0
- package/dist/shared/item-visitor.js.map +1 -0
- package/dist/shared/loader.d.ts +19 -0
- package/dist/shared/loader.d.ts.map +1 -0
- package/dist/shared/loader.js +166 -0
- package/dist/shared/loader.js.map +1 -0
- package/dist/shared/paths.d.ts +32 -0
- package/dist/shared/paths.d.ts.map +1 -0
- package/dist/shared/paths.js +62 -0
- package/dist/shared/paths.js.map +1 -0
- package/dist/shared/tests/graph.test.d.ts +2 -0
- package/dist/shared/tests/graph.test.d.ts.map +1 -0
- package/dist/shared/tests/graph.test.js +291 -0
- package/dist/shared/tests/graph.test.js.map +1 -0
- package/dist/shared/tests/loader.test.d.ts +2 -0
- package/dist/shared/tests/loader.test.d.ts.map +1 -0
- package/dist/shared/tests/loader.test.js +239 -0
- package/dist/shared/tests/loader.test.js.map +1 -0
- package/dist/shared/tests/verify-collision-fix.test.d.ts +2 -0
- package/dist/shared/tests/verify-collision-fix.test.d.ts.map +1 -0
- package/dist/shared/tests/verify-collision-fix.test.js +114 -0
- package/dist/shared/tests/verify-collision-fix.test.js.map +1 -0
- package/dist/shared/types/domain.d.ts +244 -0
- package/dist/shared/types/domain.d.ts.map +1 -0
- package/dist/shared/types/domain.js +6 -0
- package/dist/shared/types/domain.js.map +1 -0
- package/dist/shared/types/index.d.ts +34 -0
- package/dist/shared/types/index.d.ts.map +1 -0
- package/dist/shared/types/index.js +9 -0
- package/dist/shared/types/index.js.map +1 -0
- package/dist/shared/yaml.d.ts +13 -0
- package/dist/shared/yaml.d.ts.map +1 -0
- package/dist/shared/yaml.js +29 -0
- package/dist/shared/yaml.js.map +1 -0
- package/package.json +48 -0
- package/tools/domain-pack/schema/.gitkeep +0 -0
- package/tools/domain-pack/schema/actors.schema.json +42 -0
- package/tools/domain-pack/schema/adr-frontmatter.schema.json +51 -0
- package/tools/domain-pack/schema/aggregate.schema.json +58 -0
- package/tools/domain-pack/schema/command.schema.json +76 -0
- package/tools/domain-pack/schema/context.schema.json +51 -0
- package/tools/domain-pack/schema/event.schema.json +66 -0
- package/tools/domain-pack/schema/glossary.schema.json +33 -0
- package/tools/domain-pack/schema/index.schema.json +76 -0
- package/tools/domain-pack/schema/policy.schema.json +53 -0
- package/tools/domain-pack/schema/read-model.schema.json +39 -0
- package/tools/domain-pack/templates/.gitkeep +0 -0
- package/tools/domain-pack/templates/context.md.hbs +89 -0
- package/tools/domain-pack/templates/index.md.hbs +60 -0
- package/tools/domain-pack/templates/item.md.hbs +85 -0
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import { loadDomainModel } from "../../../shared/loader.js";
|
|
2
|
+
import { stringifyYaml } from "../../../shared/yaml.js";
|
|
3
|
+
/**
|
|
4
|
+
* Resolve an item by its composite ID and return the raw object
|
|
5
|
+
* suitable for YAML serialisation.
|
|
6
|
+
*/
|
|
7
|
+
function resolveItem(model, id) {
|
|
8
|
+
// Actor: "actor.<Name>"
|
|
9
|
+
if (id.startsWith("actor.")) {
|
|
10
|
+
const name = id.slice("actor.".length);
|
|
11
|
+
const actor = model.actors.find((a) => a.name === name);
|
|
12
|
+
if (actor)
|
|
13
|
+
return { found: true, data: actor, label: `Actor: ${name}` };
|
|
14
|
+
return { found: false };
|
|
15
|
+
}
|
|
16
|
+
// ADR: "adr-NNNN"
|
|
17
|
+
if (id.startsWith("adr-")) {
|
|
18
|
+
const adr = model.adrs.get(id);
|
|
19
|
+
if (adr)
|
|
20
|
+
return { found: true, data: adr, label: `ADR: ${adr.title}` };
|
|
21
|
+
return { found: false };
|
|
22
|
+
}
|
|
23
|
+
// Flow: "flow.<Name>"
|
|
24
|
+
if (id.startsWith("flow.")) {
|
|
25
|
+
const name = id.slice("flow.".length);
|
|
26
|
+
const flow = (model.index.flows ?? []).find((f) => f.name === name);
|
|
27
|
+
if (flow)
|
|
28
|
+
return { found: true, data: flow, label: `Flow: ${name}` };
|
|
29
|
+
return { found: false };
|
|
30
|
+
}
|
|
31
|
+
// Context: "context.<Name>"
|
|
32
|
+
if (id.startsWith("context.")) {
|
|
33
|
+
const name = id.slice("context.".length);
|
|
34
|
+
const ctx = model.contexts.get(name);
|
|
35
|
+
if (ctx)
|
|
36
|
+
return { found: true, data: ctx, label: `Context: ${name}` };
|
|
37
|
+
return { found: false };
|
|
38
|
+
}
|
|
39
|
+
// Context-scoped item: "<context>.<Name>"
|
|
40
|
+
const dotIdx = id.indexOf(".");
|
|
41
|
+
if (dotIdx > 0) {
|
|
42
|
+
const ctxName = id.slice(0, dotIdx);
|
|
43
|
+
const itemName = id.slice(dotIdx + 1);
|
|
44
|
+
const ctx = model.contexts.get(ctxName);
|
|
45
|
+
if (!ctx)
|
|
46
|
+
return { found: false };
|
|
47
|
+
// Search across all item types
|
|
48
|
+
const event = (ctx.events ?? []).find((e) => e.name === itemName);
|
|
49
|
+
if (event)
|
|
50
|
+
return { found: true, data: event, label: `Event: ${ctxName}.${itemName}` };
|
|
51
|
+
const command = (ctx.commands ?? []).find((c) => c.name === itemName);
|
|
52
|
+
if (command)
|
|
53
|
+
return { found: true, data: command, label: `Command: ${ctxName}.${itemName}` };
|
|
54
|
+
const policy = (ctx.policies ?? []).find((p) => p.name === itemName);
|
|
55
|
+
if (policy)
|
|
56
|
+
return { found: true, data: policy, label: `Policy: ${ctxName}.${itemName}` };
|
|
57
|
+
const aggregate = (ctx.aggregates ?? []).find((a) => a.name === itemName);
|
|
58
|
+
if (aggregate)
|
|
59
|
+
return { found: true, data: aggregate, label: `Aggregate: ${ctxName}.${itemName}` };
|
|
60
|
+
const readModel = (ctx.read_models ?? []).find((r) => r.name === itemName);
|
|
61
|
+
if (readModel)
|
|
62
|
+
return { found: true, data: readModel, label: `Read Model: ${ctxName}.${itemName}` };
|
|
63
|
+
const glossary = (ctx.glossary ?? []).find((g) => g.term === itemName);
|
|
64
|
+
if (glossary)
|
|
65
|
+
return { found: true, data: glossary, label: `Glossary: ${ctxName}.${itemName}` };
|
|
66
|
+
}
|
|
67
|
+
return { found: false };
|
|
68
|
+
}
|
|
69
|
+
/** Register the `show` subcommand. */
|
|
70
|
+
export function registerShow(program) {
|
|
71
|
+
program
|
|
72
|
+
.command("show <id>")
|
|
73
|
+
.description("Show full YAML for a domain item by ID (e.g. ordering.OrderPlaced, actor.Customer, adr-0001)")
|
|
74
|
+
.option("--json", "Output as JSON")
|
|
75
|
+
.option("-r, --root <path>", "Override repository root")
|
|
76
|
+
.action((id, opts) => {
|
|
77
|
+
const model = loadDomainModel({ root: opts.root });
|
|
78
|
+
const result = resolveItem(model, id);
|
|
79
|
+
if (!result.found || !result.data) {
|
|
80
|
+
if (opts.json) {
|
|
81
|
+
console.log(JSON.stringify({ error: `Item "${id}" not found` }, null, 2));
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
console.error(`Error: Item "${id}" not found.`);
|
|
85
|
+
}
|
|
86
|
+
process.exit(1);
|
|
87
|
+
}
|
|
88
|
+
if (opts.json) {
|
|
89
|
+
console.log(JSON.stringify({ id, label: result.label, data: result.data }, null, 2));
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
console.log(`\n# ${result.label}\n`);
|
|
93
|
+
console.log(stringifyYaml(result.data));
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=show.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"show.js","sourceRoot":"","sources":["../../../../src/features/query/commands/show.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import type { DomainGraph } from "../../shared/graph.js";
|
|
2
|
+
/** A single search result. */
|
|
3
|
+
export interface SearchResult {
|
|
4
|
+
/** Unique identifier (e.g. "ordering.OrderPlaced"). */
|
|
5
|
+
id: string;
|
|
6
|
+
/** Item kind. */
|
|
7
|
+
type: string;
|
|
8
|
+
/** Bounded-context name (empty for top-level items). */
|
|
9
|
+
context: string;
|
|
10
|
+
/** Human-readable display name. */
|
|
11
|
+
name: string;
|
|
12
|
+
/** Short excerpt with matching text. */
|
|
13
|
+
excerpt: string;
|
|
14
|
+
/** Computed relevance score (higher = more relevant). */
|
|
15
|
+
score: number;
|
|
16
|
+
/** Related item ids (direct relations from the index). */
|
|
17
|
+
relatedIds: string[];
|
|
18
|
+
/** ADR references attached to this item. */
|
|
19
|
+
adrIds: string[];
|
|
20
|
+
}
|
|
21
|
+
/** Filters that narrow search results. */
|
|
22
|
+
export interface SearchFilters {
|
|
23
|
+
/** Only include items in this bounded context. */
|
|
24
|
+
context?: string;
|
|
25
|
+
/** Only include items of this type. */
|
|
26
|
+
type?: string;
|
|
27
|
+
/** Only include items whose tags contain this value. */
|
|
28
|
+
tag?: string;
|
|
29
|
+
}
|
|
30
|
+
/** Options for the searcher. */
|
|
31
|
+
export interface SearcherOptions {
|
|
32
|
+
/** Override repository root. */
|
|
33
|
+
root?: string;
|
|
34
|
+
/** Override database path. */
|
|
35
|
+
dbPath?: string;
|
|
36
|
+
/** Maximum number of results to return (default: 20). */
|
|
37
|
+
limit?: number;
|
|
38
|
+
/** When provided, expand top results with graph neighbours. */
|
|
39
|
+
graph?: DomainGraph;
|
|
40
|
+
/** Number of top results to expand with graph neighbours (default: 5). */
|
|
41
|
+
expandTopN?: number;
|
|
42
|
+
/** BFS depth for graph expansion (default: 1). */
|
|
43
|
+
expandDepth?: number;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Search the FTS5 index for domain items matching `query`.
|
|
47
|
+
*
|
|
48
|
+
* Steps:
|
|
49
|
+
* 1. Run FTS5 MATCH query to get candidate rows + BM25 scores.
|
|
50
|
+
* 2. Apply boost scoring (exact-id, name, tag, glossary).
|
|
51
|
+
* 3. Apply post-FTS filters (context, type, tag).
|
|
52
|
+
* 4. Sort by final score descending.
|
|
53
|
+
* 5. If a {@link DomainGraph} is provided, expand top-N results with
|
|
54
|
+
* graph neighbours and include linked ADRs.
|
|
55
|
+
* 6. Return the capped result list.
|
|
56
|
+
*/
|
|
57
|
+
export declare function search(query: string, filters?: SearchFilters, options?: SearcherOptions): SearchResult[];
|
|
58
|
+
//# sourceMappingURL=searcher.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"searcher.d.ts","sourceRoot":"","sources":["../../../src/features/query/searcher.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AASzD,8BAA8B;AAC9B,MAAM,WAAW,YAAY;IAC3B,uDAAuD;IACvD,EAAE,EAAE,MAAM,CAAC;IACX,iBAAiB;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,wDAAwD;IACxD,OAAO,EAAE,MAAM,CAAC;IAChB,mCAAmC;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,wCAAwC;IACxC,OAAO,EAAE,MAAM,CAAC;IAChB,yDAAyD;IACzD,KAAK,EAAE,MAAM,CAAC;IACd,0DAA0D;IAC1D,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,4CAA4C;IAC5C,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,0CAA0C;AAC1C,MAAM,WAAW,aAAa;IAC5B,kDAAkD;IAClD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,uCAAuC;IACvC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,wDAAwD;IACxD,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,gCAAgC;AAChC,MAAM,WAAW,eAAe;IAC9B,gCAAgC;IAChC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,8BAA8B;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,yDAAyD;IACzD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,+DAA+D;IAC/D,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,0EAA0E;IAC1E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kDAAkD;IAClD,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AA8CD;;;;;;;;;;;GAWG;AACH,wBAAgB,MAAM,CACpB,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,aAAkB,EAC3B,OAAO,GAAE,eAAoB,GAC5B,YAAY,EAAE,CA8IhB"}
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* FTS5 searcher for domain items.
|
|
3
|
+
*
|
|
4
|
+
* Accepts a query string and optional filters (context, type, tag),
|
|
5
|
+
* performs an FTS5 MATCH query against the index built by the indexer,
|
|
6
|
+
* applies boost scoring, post-FTS filters, and graph expansion for
|
|
7
|
+
* top-N results. Returns a ranked list of search results.
|
|
8
|
+
*/
|
|
9
|
+
import { existsSync } from "node:fs";
|
|
10
|
+
import { join } from "node:path";
|
|
11
|
+
import { createRequire } from "node:module";
|
|
12
|
+
import { repoRoot } from "../../shared/paths.js";
|
|
13
|
+
// better-sqlite3 CJS interop
|
|
14
|
+
const require = createRequire(import.meta.url);
|
|
15
|
+
const Database = require("better-sqlite3");
|
|
16
|
+
// ── Score boosts ──────────────────────────────────────────────────────
|
|
17
|
+
/** Boost multipliers for different match locations. */
|
|
18
|
+
const BOOST = {
|
|
19
|
+
/** Query matches item id exactly. */
|
|
20
|
+
exactId: 10,
|
|
21
|
+
/** Query appears in item name. */
|
|
22
|
+
name: 5,
|
|
23
|
+
/** Query appears in tags. */
|
|
24
|
+
tag: 3,
|
|
25
|
+
/** Query appears in text body. */
|
|
26
|
+
text: 1,
|
|
27
|
+
};
|
|
28
|
+
// ── Helpers ───────────────────────────────────────────────────────────
|
|
29
|
+
/**
|
|
30
|
+
* Sanitise a user query for FTS5.
|
|
31
|
+
*
|
|
32
|
+
* FTS5 treats certain chars as operators. We escape double-quotes and
|
|
33
|
+
* wrap each token in quotes so special chars are treated literally.
|
|
34
|
+
* Empty queries are returned as-is (the caller should handle that).
|
|
35
|
+
*/
|
|
36
|
+
function sanitiseQuery(raw) {
|
|
37
|
+
const trimmed = raw.trim();
|
|
38
|
+
if (!trimmed)
|
|
39
|
+
return "";
|
|
40
|
+
// Split on whitespace, wrap each token in double-quotes, join with spaces.
|
|
41
|
+
// This produces an implicit AND query.
|
|
42
|
+
const tokens = trimmed.split(/\s+/).map((t) => `"${t.replace(/"/g, '""')}"`);
|
|
43
|
+
return tokens.join(" ");
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Build snippet text from matching row fields.
|
|
47
|
+
* We take the first 200 characters of the text column as an excerpt.
|
|
48
|
+
*/
|
|
49
|
+
function makeExcerpt(text, maxLen = 200) {
|
|
50
|
+
if (text.length <= maxLen)
|
|
51
|
+
return text;
|
|
52
|
+
return text.slice(0, maxLen).trimEnd() + "…";
|
|
53
|
+
}
|
|
54
|
+
// ── Public API ────────────────────────────────────────────────────────
|
|
55
|
+
/**
|
|
56
|
+
* Search the FTS5 index for domain items matching `query`.
|
|
57
|
+
*
|
|
58
|
+
* Steps:
|
|
59
|
+
* 1. Run FTS5 MATCH query to get candidate rows + BM25 scores.
|
|
60
|
+
* 2. Apply boost scoring (exact-id, name, tag, glossary).
|
|
61
|
+
* 3. Apply post-FTS filters (context, type, tag).
|
|
62
|
+
* 4. Sort by final score descending.
|
|
63
|
+
* 5. If a {@link DomainGraph} is provided, expand top-N results with
|
|
64
|
+
* graph neighbours and include linked ADRs.
|
|
65
|
+
* 6. Return the capped result list.
|
|
66
|
+
*/
|
|
67
|
+
export function search(query, filters = {}, options = {}) {
|
|
68
|
+
const root = options.root ?? repoRoot();
|
|
69
|
+
const dbPath = options.dbPath ?? join(root, ".domain-pack", "index.db");
|
|
70
|
+
const limit = options.limit ?? 20;
|
|
71
|
+
const expandTopN = options.expandTopN ?? 5;
|
|
72
|
+
const expandDepth = options.expandDepth ?? 1;
|
|
73
|
+
if (!existsSync(dbPath)) {
|
|
74
|
+
throw new Error(`Search index not found at ${dbPath}. Run 'render' first.`);
|
|
75
|
+
}
|
|
76
|
+
const ftsQuery = sanitiseQuery(query);
|
|
77
|
+
if (!ftsQuery)
|
|
78
|
+
return [];
|
|
79
|
+
const db = new Database(dbPath, { readonly: true });
|
|
80
|
+
try {
|
|
81
|
+
// ── Step 1: FTS5 MATCH ────────────────────────────────────────
|
|
82
|
+
const stmt = db.prepare(`
|
|
83
|
+
SELECT
|
|
84
|
+
id,
|
|
85
|
+
type,
|
|
86
|
+
context,
|
|
87
|
+
name,
|
|
88
|
+
tags,
|
|
89
|
+
text,
|
|
90
|
+
relations,
|
|
91
|
+
adrRefs,
|
|
92
|
+
rank
|
|
93
|
+
FROM domain_fts
|
|
94
|
+
WHERE domain_fts MATCH ?
|
|
95
|
+
ORDER BY rank
|
|
96
|
+
LIMIT 200
|
|
97
|
+
`);
|
|
98
|
+
const rows = stmt.all(ftsQuery);
|
|
99
|
+
// ── Step 2: Boost scoring ─────────────────────────────────────
|
|
100
|
+
const queryLower = query.toLowerCase();
|
|
101
|
+
const scored = rows.map((row) => {
|
|
102
|
+
// BM25 rank is negative (closer to 0 = better); invert to positive.
|
|
103
|
+
let score = -row.rank;
|
|
104
|
+
// Exact ID match
|
|
105
|
+
if (row.id.toLowerCase() === queryLower) {
|
|
106
|
+
score += BOOST.exactId;
|
|
107
|
+
}
|
|
108
|
+
// Name match
|
|
109
|
+
if (row.name.toLowerCase().includes(queryLower)) {
|
|
110
|
+
score += BOOST.name;
|
|
111
|
+
}
|
|
112
|
+
// Tag match
|
|
113
|
+
if (row.tags.toLowerCase().includes(queryLower)) {
|
|
114
|
+
score += BOOST.tag;
|
|
115
|
+
}
|
|
116
|
+
return { row, score };
|
|
117
|
+
});
|
|
118
|
+
// ── Step 3: Post-FTS filters ──────────────────────────────────
|
|
119
|
+
let filtered = scored;
|
|
120
|
+
if (filters.context) {
|
|
121
|
+
const ctx = filters.context.toLowerCase();
|
|
122
|
+
filtered = filtered.filter((s) => s.row.context.toLowerCase() === ctx);
|
|
123
|
+
}
|
|
124
|
+
if (filters.type) {
|
|
125
|
+
const t = filters.type.toLowerCase();
|
|
126
|
+
filtered = filtered.filter((s) => s.row.type.toLowerCase() === t);
|
|
127
|
+
}
|
|
128
|
+
if (filters.tag) {
|
|
129
|
+
const tag = filters.tag.toLowerCase();
|
|
130
|
+
filtered = filtered.filter((s) => s.row.tags.toLowerCase().includes(tag));
|
|
131
|
+
}
|
|
132
|
+
// ── Step 4: Sort ──────────────────────────────────────────────
|
|
133
|
+
filtered.sort((a, b) => b.score - a.score);
|
|
134
|
+
// ── Step 5: Graph expansion ───────────────────────────────────
|
|
135
|
+
const results = [];
|
|
136
|
+
const seenIds = new Set();
|
|
137
|
+
for (const { row, score } of filtered.slice(0, limit)) {
|
|
138
|
+
seenIds.add(row.id);
|
|
139
|
+
const relatedIds = safeParse(row.relations);
|
|
140
|
+
const adrIds = safeParse(row.adrRefs);
|
|
141
|
+
// Graph expansion for top-N items
|
|
142
|
+
if (options.graph && results.length < expandTopN) {
|
|
143
|
+
const expanded = options.graph.getRelated(row.id, expandDepth);
|
|
144
|
+
for (const nId of expanded) {
|
|
145
|
+
relatedIds.push(nId);
|
|
146
|
+
}
|
|
147
|
+
// Collect ADR ids from graph neighbours
|
|
148
|
+
for (const nId of expanded) {
|
|
149
|
+
if (nId.startsWith("adr-") && !adrIds.includes(nId)) {
|
|
150
|
+
adrIds.push(nId);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
// Deduplicate
|
|
155
|
+
const uniqueRelated = [...new Set(relatedIds)];
|
|
156
|
+
const uniqueAdrs = [...new Set(adrIds)];
|
|
157
|
+
results.push({
|
|
158
|
+
id: row.id,
|
|
159
|
+
type: row.type,
|
|
160
|
+
context: row.context,
|
|
161
|
+
name: row.name,
|
|
162
|
+
excerpt: makeExcerpt(row.text),
|
|
163
|
+
score: Math.round(score * 1000) / 1000,
|
|
164
|
+
relatedIds: uniqueRelated,
|
|
165
|
+
adrIds: uniqueAdrs,
|
|
166
|
+
});
|
|
167
|
+
}
|
|
168
|
+
return results;
|
|
169
|
+
}
|
|
170
|
+
finally {
|
|
171
|
+
db.close();
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
// ── Internal ──────────────────────────────────────────────────────────
|
|
175
|
+
/** Safely parse a JSON array, returning [] on failure. */
|
|
176
|
+
function safeParse(json) {
|
|
177
|
+
try {
|
|
178
|
+
const parsed = JSON.parse(json);
|
|
179
|
+
return Array.isArray(parsed) ? parsed : [];
|
|
180
|
+
}
|
|
181
|
+
catch {
|
|
182
|
+
return [];
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
//# sourceMappingURL=searcher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"searcher.js","sourceRoot":"","sources":["../../../src/features/query/searcher.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"searcher.test.d.ts","sourceRoot":"","sources":["../../../../src/features/query/tests/searcher.test.ts"],"names":[],"mappings":""}
|