kibi-cli 2.36.0 → 2.39.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/dist/cli-json-command.d.ts.map +1 -1
- package/dist/cli-json-command.js +4 -0
- package/dist/cli-operation-metadata.d.ts +1 -1
- package/dist/cli-operation-metadata.js +1 -1
- package/dist/cli-register-foundation.d.ts.map +1 -1
- package/dist/cli-register-foundation.js +2 -1
- package/dist/cli-register-maintenance.d.ts.map +1 -1
- package/dist/cli-register-maintenance.js +5 -0
- package/dist/cli-register-reporting.d.ts.map +1 -1
- package/dist/cli-register-reporting.js +1 -0
- package/dist/cli-validate.d.ts.map +1 -1
- package/dist/cli-validate.js +21 -2
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +19 -1
- package/dist/commands/aggregated-checks.d.ts.map +1 -1
- package/dist/commands/aggregated-checks.js +89 -16
- package/dist/commands/coverage.d.ts +1 -0
- package/dist/commands/coverage.d.ts.map +1 -1
- package/dist/commands/coverage.js +40 -0
- package/dist/commands/doctor.d.ts +5 -0
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +70 -35
- package/dist/commands/github-init.d.ts.map +1 -1
- package/dist/commands/github-init.js +4 -2
- package/dist/commands/hook-managers.d.ts +43 -0
- package/dist/commands/hook-managers.d.ts.map +1 -0
- package/dist/commands/hook-managers.js +426 -0
- package/dist/commands/init.d.ts +1 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +40 -5
- package/dist/commands/migrate.d.ts.map +1 -1
- package/dist/commands/migrate.js +9 -3
- package/dist/commands/sync/persistence.d.ts.map +1 -1
- package/dist/commands/sync/persistence.js +49 -1
- package/dist/commands/telemetry.d.ts +7 -0
- package/dist/commands/telemetry.d.ts.map +1 -0
- package/dist/commands/telemetry.js +23 -0
- package/dist/decision-firmness.d.ts.map +1 -1
- package/dist/decision-firmness.js +11 -14
- package/dist/engine-limits.d.ts.map +1 -1
- package/dist/engine-limits.js +8 -10
- package/dist/entity-body-context.d.ts.map +1 -1
- package/dist/entity-body-context.js +39 -36
- package/dist/extractors/markdown.d.ts +6 -0
- package/dist/extractors/markdown.d.ts.map +1 -1
- package/dist/extractors/markdown.js +21 -0
- package/dist/extractors/symbol-coordinates.d.ts.map +1 -1
- package/dist/extractors/symbol-coordinates.js +23 -4
- package/dist/firm-decision-edit.d.ts.map +1 -1
- package/dist/firm-decision-edit.js +1 -3
- package/dist/intent-search.d.ts +5 -1
- package/dist/intent-search.d.ts.map +1 -1
- package/dist/intent-search.js +118 -33
- package/dist/logic/ir.d.ts.map +1 -1
- package/dist/logic/ir.js +82 -108
- package/dist/operations/bootstrap/discovery-evidence.d.ts.map +1 -1
- package/dist/operations/bootstrap/discovery-evidence.js +44 -2
- package/dist/operations/bootstrap/discovery.d.ts.map +1 -1
- package/dist/operations/bootstrap/discovery.js +1 -0
- package/dist/operations/bootstrap/guidance-actions.d.ts.map +1 -1
- package/dist/operations/bootstrap/guidance-actions.js +2 -1
- package/dist/operations/bootstrap/plugin-offers.d.ts +11 -2
- package/dist/operations/bootstrap/plugin-offers.d.ts.map +1 -1
- package/dist/operations/bootstrap/plugin-offers.js +48 -9
- package/dist/operations/proof/claim-bindings.d.ts.map +1 -1
- package/dist/operations/proof/claim-bindings.js +1 -0
- package/dist/operations/proof/code-certificates.d.ts +2 -0
- package/dist/operations/proof/code-certificates.d.ts.map +1 -1
- package/dist/operations/proof/code-certificates.js +34 -14
- package/dist/operations/proof/code-models.d.ts.map +1 -1
- package/dist/operations/proof/code-models.js +19 -5
- package/dist/operations/proof/code-runner.d.ts +16 -0
- package/dist/operations/proof/code-runner.d.ts.map +1 -1
- package/dist/operations/proof/code-runner.js +42 -6
- package/dist/operations/proof/explain.d.ts +63 -0
- package/dist/operations/proof/explain.d.ts.map +1 -1
- package/dist/operations/proof/explain.js +162 -0
- package/dist/operations/semantic-advisor/analyze-prose.d.ts +9 -1
- package/dist/operations/semantic-advisor/analyze-prose.d.ts.map +1 -1
- package/dist/operations/semantic-advisor/analyze-prose.js +21 -0
- package/dist/operations/semantic-advisor/case-preview.d.ts +24 -0
- package/dist/operations/semantic-advisor/case-preview.d.ts.map +1 -0
- package/dist/operations/semantic-advisor/case-preview.js +216 -0
- package/dist/operations/semantic-advisor/shared.d.ts.map +1 -1
- package/dist/operations/semantic-advisor/shared.js +3 -0
- package/dist/operations/semantic-advisor/types.d.ts +23 -0
- package/dist/operations/semantic-advisor/types.d.ts.map +1 -1
- package/dist/plugins/approved-source-analyzers.generated.d.ts +11 -8
- package/dist/plugins/approved-source-analyzers.generated.d.ts.map +1 -1
- package/dist/plugins/approved-source-analyzers.generated.js +11 -8
- package/dist/plugins/compose-search-hints.d.ts +29 -0
- package/dist/plugins/compose-search-hints.d.ts.map +1 -0
- package/dist/plugins/compose-search-hints.js +94 -0
- package/dist/plugins/external-allowlist.d.ts +7 -0
- package/dist/plugins/external-allowlist.d.ts.map +1 -1
- package/dist/plugins/external-allowlist.js +11 -0
- package/dist/plugins/registry.d.ts +8 -1
- package/dist/plugins/registry.d.ts.map +1 -1
- package/dist/plugins/registry.js +22 -3
- package/dist/plugins/source-classification.d.ts +2 -2
- package/dist/plugins/source-classification.d.ts.map +1 -1
- package/dist/plugins/source-classification.js +25 -1
- package/dist/prolog/codec.d.ts.map +1 -1
- package/dist/prolog/codec.js +10 -20
- package/dist/public/impact/coverage-depth-quality.d.ts.map +1 -1
- package/dist/public/impact/coverage-depth-quality.js +32 -16
- package/dist/public/impact/full-kb-quality.d.ts +6 -0
- package/dist/public/impact/full-kb-quality.d.ts.map +1 -1
- package/dist/public/impact/full-kb-quality.js +8 -3
- package/dist/public/impact/requirement-quality.d.ts.map +1 -1
- package/dist/public/impact/requirement-quality.js +56 -29
- package/dist/public/operations/catalog.d.ts +44 -4
- package/dist/public/operations/catalog.d.ts.map +1 -1
- package/dist/public/operations/check-executor.d.ts +6 -0
- package/dist/public/operations/check-executor.d.ts.map +1 -1
- package/dist/public/operations/check-executor.js +34 -2
- package/dist/public/operations/discovery-executors.d.ts +5 -1
- package/dist/public/operations/discovery-executors.d.ts.map +1 -1
- package/dist/public/operations/discovery-executors.js +65 -4
- package/dist/public/operations/evidence-floor.d.ts +8 -1
- package/dist/public/operations/evidence-floor.d.ts.map +1 -1
- package/dist/public/operations/evidence-floor.js +3 -4
- package/dist/public/operations/migration-plan.d.ts.map +1 -1
- package/dist/public/operations/migration-plan.js +41 -10
- package/dist/public/operations/node-ports.d.ts.map +1 -1
- package/dist/public/operations/node-ports.js +3 -1
- package/dist/public/operations/repair-plan.d.ts +46 -0
- package/dist/public/operations/repair-plan.d.ts.map +1 -1
- package/dist/public/operations/repair-plan.js +110 -1
- package/dist/public/operations/schema6-check-actions.js +1 -1
- package/dist/public/operations/source-analysis-cache.d.ts +22 -0
- package/dist/public/operations/source-analysis-cache.d.ts.map +1 -0
- package/dist/public/operations/source-analysis-cache.js +157 -0
- package/dist/public/operations/specs/check-rules.generated.d.ts +1 -1
- package/dist/public/operations/specs/check-rules.generated.d.ts.map +1 -1
- package/dist/public/operations/specs/check-rules.generated.js +2 -1
- package/dist/public/operations/specs/check.d.ts +1 -1
- package/dist/public/operations/specs/discovery.d.ts +7 -2
- package/dist/public/operations/specs/discovery.d.ts.map +1 -1
- package/dist/public/operations/specs/discovery.js +7 -2
- package/dist/public/operations/specs/mutation-schemas.d.ts +36 -1
- package/dist/public/operations/specs/mutation-schemas.d.ts.map +1 -1
- package/dist/public/operations/specs/mutation-schemas.js +30 -0
- package/dist/public/operations/specs/upsert.d.ts +36 -1
- package/dist/public/operations/specs/upsert.d.ts.map +1 -1
- package/dist/public/operations/symbol-granularity-check.d.ts +3 -1
- package/dist/public/operations/symbol-granularity-check.d.ts.map +1 -1
- package/dist/public/operations/symbol-granularity-check.js +21 -7
- package/dist/public/proof-protocol.d.ts +6 -1
- package/dist/public/proof-protocol.d.ts.map +1 -1
- package/dist/public/proof-protocol.js +12 -3
- package/dist/public/proof-sources.d.ts +2 -0
- package/dist/public/proof-sources.d.ts.map +1 -1
- package/dist/public/proof-sources.js +32 -6
- package/dist/public/schemas/entity.d.ts.map +1 -1
- package/dist/public/schemas/entity.js +59 -0
- package/dist/public/skills/kibi-bootstrap/SKILL.md +2 -2
- package/dist/public/skills/kibi-commit-review/SKILL.md +6 -2
- package/dist/public/skills/kibi-decisions/SKILL.md +7 -2
- package/dist/public/skills/kibi-decisions/resources/signoff-views.md +3 -1
- package/dist/public/skills/kibi-usage/SKILL.md +50 -3
- package/dist/public/skills/kibi-usage/resources/fact-lanes.md +34 -0
- package/dist/public/skills/kibi-usage/resources/proof.md +13 -5
- package/dist/public/skills/kibi-usage/resources/workflows.md +10 -0
- package/dist/relationships/shards.d.ts +2 -0
- package/dist/relationships/shards.d.ts.map +1 -1
- package/dist/relationships/shards.js +25 -1
- package/dist/schemas/entity.schema.json +98 -1
- package/dist/search-answer.d.ts +3 -2
- package/dist/search-answer.d.ts.map +1 -1
- package/dist/search-answer.js +57 -4
- package/dist/search-hints.d.ts +58 -0
- package/dist/search-hints.d.ts.map +1 -0
- package/dist/search-hints.js +187 -0
- package/dist/search-ranking.d.ts +7 -0
- package/dist/search-ranking.d.ts.map +1 -1
- package/dist/search-ranking.js +54 -56
- package/dist/search-token-cache.d.ts +30 -0
- package/dist/search-token-cache.d.ts.map +1 -0
- package/dist/search-token-cache.js +86 -0
- package/dist/traceability/impact-knowledge.d.ts.map +1 -1
- package/dist/traceability/impact-knowledge.js +2 -0
- package/dist/traceability/temp-kb.d.ts.map +1 -1
- package/dist/traceability/temp-kb.js +11 -1
- package/dist/types/entities.d.ts +12 -0
- package/dist/types/entities.d.ts.map +1 -1
- package/dist/usage-telemetry.d.ts +20 -0
- package/dist/usage-telemetry.d.ts.map +1 -0
- package/dist/usage-telemetry.js +93 -0
- package/dist/utils/branch-resolver.d.ts.map +1 -1
- package/dist/utils/branch-resolver.js +1 -0
- package/dist/utils/rule-registry.generated.d.ts +5 -0
- package/dist/utils/rule-registry.generated.d.ts.map +1 -1
- package/dist/utils/rule-registry.generated.js +6 -0
- package/package.json +5 -4
- package/schema/entities.pl +12 -0
- package/src/public/impact/coverage-depth-quality.ts +59 -21
- package/src/public/impact/full-kb-quality.ts +15 -1
- package/src/public/impact/requirement-quality.ts +95 -38
- package/src/public/operations/check-executor.ts +41 -1
- package/src/public/operations/discovery-executors.ts +92 -4
- package/src/public/operations/evidence-floor.ts +15 -3
- package/src/public/operations/migration-plan.ts +41 -9
- package/src/public/operations/node-ports.ts +3 -1
- package/src/public/operations/repair-plan.ts +152 -1
- package/src/public/operations/schema6-check-actions.ts +1 -1
- package/src/public/operations/source-analysis-cache.ts +196 -0
- package/src/public/operations/specs/check-rules.generated.ts +2 -1
- package/src/public/operations/specs/discovery.ts +8 -2
- package/src/public/operations/specs/mutation-schemas.ts +34 -0
- package/src/public/operations/symbol-granularity-check.ts +25 -5
- package/src/public/proof-protocol-types.d.ts +1 -1
- package/src/public/proof-protocol.ts +18 -4
- package/src/public/proof-sources.ts +37 -6
- package/src/public/schemas/entity.ts +65 -0
- package/src/public/skills/kibi-bootstrap/SKILL.md +2 -2
- package/src/public/skills/kibi-commit-review/SKILL.md +6 -2
- package/src/public/skills/kibi-decisions/SKILL.md +7 -2
- package/src/public/skills/kibi-decisions/resources/signoff-views.md +3 -1
- package/src/public/skills/kibi-usage/SKILL.md +50 -3
- package/src/public/skills/kibi-usage/resources/fact-lanes.md +34 -0
- package/src/public/skills/kibi-usage/resources/proof.md +13 -5
- package/src/public/skills/kibi-usage/resources/workflows.md +10 -0
- package/src/schemas/entity.schema.json +98 -1
package/dist/intent-search.js
CHANGED
|
@@ -3,7 +3,8 @@ import { bodySnippetLine } from "./entity-body-context.js";
|
|
|
3
3
|
import { escapeAtom, normalizeEntityId, parseTriples } from "./prolog/codec.js";
|
|
4
4
|
import { isProvenanceStub } from "./provenance-stub.js";
|
|
5
5
|
import { listSearchCandidates, loadEntityRows, loadSearchCandidates, } from "./public/operations/discovery-entities.js";
|
|
6
|
-
import {
|
|
6
|
+
import { loadMarkdownBodySync } from "./search-ranking.js";
|
|
7
|
+
import { openSearchTokenCache, tokenSourceHash, } from "./search-token-cache.js";
|
|
7
8
|
const GRAPH_RELATIONSHIPS = [
|
|
8
9
|
"implements",
|
|
9
10
|
"covered_by",
|
|
@@ -33,6 +34,7 @@ const FACET_NAMES = [
|
|
|
33
34
|
const STOP_WORDS = new Set([
|
|
34
35
|
"a",
|
|
35
36
|
"about",
|
|
37
|
+
"after",
|
|
36
38
|
"an",
|
|
37
39
|
"and",
|
|
38
40
|
"any",
|
|
@@ -40,12 +42,14 @@ const STOP_WORDS = new Set([
|
|
|
40
42
|
"as",
|
|
41
43
|
"at",
|
|
42
44
|
"be",
|
|
45
|
+
"before",
|
|
43
46
|
"by",
|
|
44
47
|
"can",
|
|
45
48
|
"could",
|
|
46
49
|
"did",
|
|
47
50
|
"do",
|
|
48
51
|
"does",
|
|
52
|
+
"each",
|
|
49
53
|
"for",
|
|
50
54
|
"from",
|
|
51
55
|
"govern",
|
|
@@ -65,6 +69,7 @@ const STOP_WORDS = new Set([
|
|
|
65
69
|
"of",
|
|
66
70
|
"on",
|
|
67
71
|
"or",
|
|
72
|
+
"other",
|
|
68
73
|
"our",
|
|
69
74
|
"should",
|
|
70
75
|
"so",
|
|
@@ -100,7 +105,7 @@ const STOP_WORDS = new Set([
|
|
|
100
105
|
]);
|
|
101
106
|
// Statuses whose entities no longer govern. They stay findable but rank
|
|
102
107
|
// below current entities and are labelled in the match reasons.
|
|
103
|
-
const NON_GOVERNING_STATUSES = new Set([
|
|
108
|
+
export const NON_GOVERNING_STATUSES = new Set([
|
|
104
109
|
"superseded",
|
|
105
110
|
"deprecated",
|
|
106
111
|
"rejected",
|
|
@@ -169,7 +174,10 @@ function normalize(value) {
|
|
|
169
174
|
.replace(/[^a-z0-9\s]+/g, " ")
|
|
170
175
|
.split(/\s+/)
|
|
171
176
|
.filter(Boolean)
|
|
172
|
-
.map((token) => token.length > 4 &&
|
|
177
|
+
.map((token) => token.length > 4 &&
|
|
178
|
+
token.endsWith("s") &&
|
|
179
|
+
!token.endsWith("ss") &&
|
|
180
|
+
!token.endsWith("ies")
|
|
173
181
|
? token.slice(0, -1)
|
|
174
182
|
: token)
|
|
175
183
|
.map(stem)
|
|
@@ -177,11 +185,15 @@ function normalize(value) {
|
|
|
177
185
|
}
|
|
178
186
|
// A deliberately small suffix stripper so a question's verb meets the
|
|
179
187
|
// entity's noun ("contradict" / "contradiction" / "contradictory",
|
|
180
|
-
// "detached" / "detach"). Short tokens are
|
|
188
|
+
// "detached" / "detach", "applied" / "applies" / "apply"). Short tokens are
|
|
189
|
+
// left alone.
|
|
181
190
|
const STEM_SUFFIXES = ["ation", "ion", "ing", "ory", "ed"];
|
|
191
|
+
const Y_SUFFIX = /(?<=[^aeiou])i(?:es|ed)$/;
|
|
182
192
|
function stem(token) {
|
|
183
193
|
if (token.length < 6 || /\d/.test(token))
|
|
184
194
|
return token;
|
|
195
|
+
if (Y_SUFFIX.test(token))
|
|
196
|
+
return token.replace(Y_SUFFIX, "y");
|
|
185
197
|
let stemmed = token;
|
|
186
198
|
for (const suffix of STEM_SUFFIXES) {
|
|
187
199
|
if (stemmed.endsWith(suffix) && stemmed.length - suffix.length >= 4) {
|
|
@@ -193,10 +205,13 @@ function stem(token) {
|
|
|
193
205
|
? stemmed.slice(0, -1)
|
|
194
206
|
: stemmed;
|
|
195
207
|
}
|
|
208
|
+
// Stop words as normalize leaves them ("before" becomes "befor"), so a
|
|
209
|
+
// stemmed stop word is dropped too.
|
|
210
|
+
const STOP_TOKENS = new Set(Array.from(STOP_WORDS).flatMap((word) => [word, normalize(word)]));
|
|
196
211
|
function tokens(value) {
|
|
197
212
|
return Array.from(new Set(normalize(value)
|
|
198
213
|
.split(" ")
|
|
199
|
-
.filter((token) => token.length > 0 && !
|
|
214
|
+
.filter((token) => token.length > 0 && !STOP_TOKENS.has(token))));
|
|
200
215
|
}
|
|
201
216
|
/** The signal tokens intent ranking compares (stop words dropped, stemmed). */
|
|
202
217
|
// implements REQ-kibi-contradiction-review-candidates
|
|
@@ -323,13 +338,38 @@ function facetValues(facets) {
|
|
|
323
338
|
// tokenized once. Keyed weakly by the entity object, so nothing outlives the
|
|
324
339
|
// search that loaded it.
|
|
325
340
|
const ENTITY_TOKENS = new WeakMap();
|
|
326
|
-
//
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
341
|
+
// The tokenizer a cached entry was built with: the code of every function
|
|
342
|
+
// that decides an entity's tokens, so a change to any of them starts a fresh
|
|
343
|
+
// cache instead of reusing tokens the new code would not produce.
|
|
344
|
+
let tokenizerFingerprint;
|
|
345
|
+
function tokenizer() {
|
|
346
|
+
tokenizerFingerprint ??= tokenSourceHash([
|
|
347
|
+
...[
|
|
348
|
+
normalize,
|
|
349
|
+
stem,
|
|
350
|
+
tokens,
|
|
351
|
+
expandIdentifiers,
|
|
352
|
+
splitIdentifier,
|
|
353
|
+
entityText,
|
|
354
|
+
stringValues,
|
|
355
|
+
metadataText,
|
|
356
|
+
computeEntityTokens,
|
|
357
|
+
].map(String),
|
|
358
|
+
...STOP_TOKENS,
|
|
359
|
+
]);
|
|
360
|
+
return tokenizerFingerprint;
|
|
361
|
+
}
|
|
362
|
+
const TOKEN_CACHES = new Map();
|
|
363
|
+
function tokenCache(workspaceRoot) {
|
|
364
|
+
let cache = TOKEN_CACHES.get(workspaceRoot);
|
|
365
|
+
if (cache === undefined) {
|
|
366
|
+
cache = openSearchTokenCache(workspaceRoot, tokenizer());
|
|
367
|
+
TOKEN_CACHES.set(workspaceRoot, cache);
|
|
368
|
+
}
|
|
369
|
+
return cache;
|
|
370
|
+
}
|
|
371
|
+
function metadataText(entity) {
|
|
372
|
+
return [
|
|
333
373
|
entity.id,
|
|
334
374
|
entity.type,
|
|
335
375
|
entity.source,
|
|
@@ -339,14 +379,55 @@ function entityTokens(entity, body) {
|
|
|
339
379
|
...stringValues(entity.tags),
|
|
340
380
|
]
|
|
341
381
|
.filter((value) => typeof value === "string")
|
|
342
|
-
.join(" ")
|
|
343
|
-
|
|
344
|
-
|
|
382
|
+
.join(" ");
|
|
383
|
+
}
|
|
384
|
+
function computeEntityTokens(entity, body) {
|
|
385
|
+
const title = normalize(String(entity.title ?? ""));
|
|
386
|
+
const metadata = normalize(metadataText(entity));
|
|
387
|
+
return {
|
|
345
388
|
title: new Set(tokens(title)),
|
|
346
389
|
metadata: new Set(tokens(metadata)),
|
|
347
390
|
bodyTokens: new Set(tokens(normalize(body ?? ""))),
|
|
348
391
|
document: tokens(`${entityText(entity)} ${body ?? ""}`),
|
|
349
392
|
};
|
|
393
|
+
}
|
|
394
|
+
// implements REQ-kibi-intent-aware-source-discovery
|
|
395
|
+
function entityTokens(entity, body, cache) {
|
|
396
|
+
const cached = ENTITY_TOKENS.get(entity);
|
|
397
|
+
if (cached !== undefined && cached.body === body)
|
|
398
|
+
return cached;
|
|
399
|
+
let computed;
|
|
400
|
+
if (cache === undefined) {
|
|
401
|
+
computed = { body, ...computeEntityTokens(entity, body) };
|
|
402
|
+
}
|
|
403
|
+
else {
|
|
404
|
+
const key = `${String(entity.type ?? "")}::${String(entity.id ?? "")}`;
|
|
405
|
+
const hash = tokenSourceHash([
|
|
406
|
+
String(entity.title ?? ""),
|
|
407
|
+
metadataText(entity),
|
|
408
|
+
entityText(entity),
|
|
409
|
+
body ?? "",
|
|
410
|
+
]);
|
|
411
|
+
const stored = cache.get(key, hash);
|
|
412
|
+
if (stored !== undefined) {
|
|
413
|
+
computed = {
|
|
414
|
+
body,
|
|
415
|
+
title: new Set(stored.title),
|
|
416
|
+
metadata: new Set(stored.metadata),
|
|
417
|
+
bodyTokens: new Set(stored.bodyTokens),
|
|
418
|
+
document: stored.document,
|
|
419
|
+
};
|
|
420
|
+
}
|
|
421
|
+
else {
|
|
422
|
+
computed = { body, ...computeEntityTokens(entity, body) };
|
|
423
|
+
cache.set(key, hash, {
|
|
424
|
+
title: [...computed.title],
|
|
425
|
+
metadata: [...computed.metadata],
|
|
426
|
+
bodyTokens: [...computed.bodyTokens],
|
|
427
|
+
document: computed.document,
|
|
428
|
+
});
|
|
429
|
+
}
|
|
430
|
+
}
|
|
350
431
|
ENTITY_TOKENS.set(entity, computed);
|
|
351
432
|
return computed;
|
|
352
433
|
}
|
|
@@ -431,26 +512,24 @@ function scoreEntity(entity, queryTokens, facets, sourceEvidence, graphEvidence,
|
|
|
431
512
|
}
|
|
432
513
|
return { score, reasons, matchedFacets };
|
|
433
514
|
}
|
|
434
|
-
function buildDocumentFrequency(entities, bodies) {
|
|
515
|
+
function buildDocumentFrequency(entities, bodies, cache) {
|
|
435
516
|
const frequency = new Map();
|
|
436
517
|
for (const entity of entities) {
|
|
437
|
-
const seen = entityTokens(entity, bodies.get(entity) ?? null).document;
|
|
518
|
+
const seen = entityTokens(entity, bodies.get(entity) ?? null, cache).document;
|
|
438
519
|
for (const token of seen)
|
|
439
520
|
frequency.set(token, (frequency.get(token) ?? 0) + 1);
|
|
440
521
|
}
|
|
441
522
|
return frequency;
|
|
442
523
|
}
|
|
443
|
-
|
|
444
|
-
|
|
524
|
+
// Bodies are read one after another: a search reads thousands of small
|
|
525
|
+
// files, and synchronous reads of those finish many times sooner than
|
|
526
|
+
// batches of asynchronous ones.
|
|
445
527
|
// implements REQ-kibi-intent-aware-source-discovery
|
|
446
|
-
|
|
447
|
-
const
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
const batch = missing.slice(start, start + BODY_READ_CONCURRENCY);
|
|
452
|
-
const loaded = await Promise.all(batch.map((source) => loadMarkdownBody(source, workspaceRoot)));
|
|
453
|
-
batch.forEach((source, index) => cache.set(source, loaded[index] ?? null));
|
|
528
|
+
function readBodies(entities, workspaceRoot, cache) {
|
|
529
|
+
for (const entity of entities) {
|
|
530
|
+
const source = String(entity.source ?? "");
|
|
531
|
+
if (!cache.has(source))
|
|
532
|
+
cache.set(source, loadMarkdownBodySync(source, workspaceRoot));
|
|
454
533
|
}
|
|
455
534
|
return new Map(entities.map((entity) => [
|
|
456
535
|
entity,
|
|
@@ -468,8 +547,10 @@ export async function rankIntentEntities(entities, options, workspaceRoot, graph
|
|
|
468
547
|
// words of one clause do not dilute a match on another.
|
|
469
548
|
const clauseTokenSets = queryClauses(query).map((clause) => Array.from(new Set([...clause, ...facetTokens])));
|
|
470
549
|
const emphasis = codeSpanTokens(query);
|
|
471
|
-
const bodies =
|
|
472
|
-
const
|
|
550
|
+
const bodies = readBodies(entities, workspaceRoot, bodyCache);
|
|
551
|
+
const cache = tokenCache(workspaceRoot);
|
|
552
|
+
const documentFrequency = buildDocumentFrequency(entities, bodies, cache);
|
|
553
|
+
cache.save();
|
|
473
554
|
const supersededIds = new Set(graphEdges
|
|
474
555
|
.filter((edge) => edge.relationship === "supersedes")
|
|
475
556
|
.map((edge) => edge.to));
|
|
@@ -621,11 +702,11 @@ export function graphGoal(seedIds, depth) {
|
|
|
621
702
|
const ids = seedIds.map((id) => `'${escapeAtom(id)}'`).join(",");
|
|
622
703
|
const relationships = GRAPH_RELATIONSHIPS.join(",");
|
|
623
704
|
if (depth === 1) {
|
|
624
|
-
return `
|
|
705
|
+
return `kb_relationship_edges([${relationships}], [${ids}], Edges)`;
|
|
625
706
|
}
|
|
626
|
-
return `
|
|
707
|
+
return `kb_relationship_edges([${relationships}], [${ids}], Edges)`;
|
|
627
708
|
}
|
|
628
|
-
async function queryGraphEdges(prolog, seedIds) {
|
|
709
|
+
export async function queryGraphEdges(prolog, seedIds) {
|
|
629
710
|
if (seedIds.length === 0)
|
|
630
711
|
return [];
|
|
631
712
|
const result = await prolog.query(graphGoal(seedIds, 1));
|
|
@@ -701,10 +782,14 @@ async function loadIntentCandidates(prolog, options) {
|
|
|
701
782
|
return Array.from(candidates.values()).slice(0, MAX_CANDIDATES);
|
|
702
783
|
}
|
|
703
784
|
// implements REQ-kibi-intent-aware-source-discovery
|
|
704
|
-
export async function executeIntentSearch(options, prolog, workspaceRoot
|
|
785
|
+
export async function executeIntentSearch(options, prolog, workspaceRoot,
|
|
786
|
+
// implements REQ-kibi-search-hints-host
|
|
787
|
+
/** Receives the candidate rows and bodies the ranking read, for reuse. */
|
|
788
|
+
onCorpus) {
|
|
705
789
|
const candidates = await loadIntentCandidates(prolog, options);
|
|
706
790
|
// Both ranking passes read the same Markdown bodies; read each file once.
|
|
707
791
|
const bodies = new Map();
|
|
792
|
+
onCorpus?.(candidates, bodies);
|
|
708
793
|
const firstPass = await rankIntentEntities(candidates, options, workspaceRoot, [], bodies);
|
|
709
794
|
const sourceSeeds = firstPass.matches
|
|
710
795
|
.filter((match) => match.evidence.sourceMatches.length > 0)
|
package/dist/logic/ir.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ir.d.ts","sourceRoot":"","sources":["../../src/logic/ir.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"ir.d.ts","sourceRoot":"","sources":["../../src/logic/ir.ts"],"names":[],"mappings":"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"}
|