@reqlan/analytical 0.9.1 → 0.10.1
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 +19 -2
- package/README.template.md +1 -1
- package/out/core/barrel-page.d.ts +2 -1
- package/out/core/barrel-page.js +18 -83
- package/out/core/barrel-page.js.map +1 -1
- package/out/core/base-discovery.d.ts +6 -0
- package/out/core/base-discovery.js +47 -2
- package/out/core/base-discovery.js.map +1 -1
- package/out/core/create-base.js +10 -14
- package/out/core/create-base.js.map +1 -1
- package/out/core/file-reference-resolve.js +3 -1
- package/out/core/file-reference-resolve.js.map +1 -1
- package/out/core/index-error.d.ts +3 -3
- package/out/core/index-error.js.map +1 -1
- package/out/core/index-state-types.d.ts +47 -0
- package/out/core/index-state-types.js +11 -0
- package/out/core/index-state-types.js.map +1 -0
- package/out/core/path-relative.d.ts +15 -0
- package/out/core/path-relative.js +84 -0
- package/out/core/path-relative.js.map +1 -0
- package/out/core/rqignore.js +62 -62
- package/out/core/rqignore.js.map +1 -1
- package/out/core/types.d.ts +4 -3
- package/out/core/types.js +4 -1
- package/out/core/types.js.map +1 -1
- package/out/core/workspace-paths.d.ts +1 -2
- package/out/core/workspace-paths.js +6 -46
- package/out/core/workspace-paths.js.map +1 -1
- package/out/export/build-export-snapshot.js +1 -1
- package/out/export/build-export-snapshot.js.map +1 -1
- package/out/export/export-utils.d.ts +5 -0
- package/out/export/export-utils.js +38 -0
- package/out/export/export-utils.js.map +1 -0
- package/out/export/write-csv-export.js +1 -1
- package/out/export/write-csv-export.js.map +1 -1
- package/out/export/write-markdown-export.js +1 -1
- package/out/export/write-markdown-export.js.map +1 -1
- package/out/index-store/base-registry.d.ts +2 -3
- package/out/index-store/base-registry.js +8 -4
- package/out/index-store/base-registry.js.map +1 -1
- package/out/index-store/fuzzy-search-hit.d.ts +10 -0
- package/out/index-store/fuzzy-search-hit.js +2 -0
- package/out/index-store/fuzzy-search-hit.js.map +1 -0
- package/out/index-store/index-diagnostics-store.d.ts +4 -0
- package/out/index-store/index-diagnostics-store.js +44 -88
- package/out/index-store/index-diagnostics-store.js.map +1 -1
- package/out/index-store/index-file-error.d.ts +1 -1
- package/out/index-store/index-parse-issues.d.ts +4 -3
- package/out/index-store/index-parse-issues.js +0 -38
- package/out/index-store/index-parse-issues.js.map +1 -1
- package/out/index-store/index-status.d.ts +1 -1
- package/out/index-store/sqlite-store.d.ts +6 -2
- package/out/index-store/sqlite-store.js +70 -613
- package/out/index-store/sqlite-store.js.map +1 -1
- package/out/index-store/webview-graph-queries.d.ts +5 -0
- package/out/index-store/webview-graph-queries.js.map +1 -1
- package/out/index-store/workspace-index-file.d.ts +3 -14
- package/out/index-store/workspace-index-file.js +1 -114
- package/out/index-store/workspace-index-file.js.map +1 -1
- package/out/index-store/workspace-index-sync.d.ts +4 -17
- package/out/index-store/workspace-index-sync.js +29 -11
- package/out/index-store/workspace-index-sync.js.map +1 -1
- package/out/index-store/workspace-index.d.ts +36 -9
- package/out/index-store/workspace-index.js +223 -120
- package/out/index-store/workspace-index.js.map +1 -1
- package/out/index.d.ts +16 -43
- package/out/index.js +9 -25
- package/out/index.js.map +1 -1
- package/out/native/generated.d.ts +102 -0
- package/out/native/generated.js +4 -0
- package/out/native/generated.js.map +1 -0
- package/out/native/index.d.ts +17 -0
- package/out/native/index.js +12 -0
- package/out/native/index.js.map +1 -0
- package/out/native/load-native.d.ts +50 -0
- package/out/native/load-native.js +186 -0
- package/out/native/load-native.js.map +1 -0
- package/out/{analysis-api.d.ts → native/native-analysis-api.d.ts} +19 -19
- package/out/native/native-analysis-api.js +212 -0
- package/out/native/native-analysis-api.js.map +1 -0
- package/out/native/native-index-store.d.ts +5 -0
- package/out/native/native-index-store.js +6 -0
- package/out/native/native-index-store.js.map +1 -0
- package/out/native/native-sql-db.d.ts +135 -0
- package/out/native/native-sql-db.js +217 -0
- package/out/native/native-sql-db.js.map +1 -0
- package/out/native/native-workspace-index.d.ts +164 -0
- package/out/native/native-workspace-index.js +283 -0
- package/out/native/native-workspace-index.js.map +1 -0
- package/out/native/open-analysis-api.d.ts +16 -0
- package/out/native/open-analysis-api.js +21 -0
- package/out/native/open-analysis-api.js.map +1 -0
- package/out/native/parse-source.d.ts +24 -0
- package/out/native/parse-source.js +26 -0
- package/out/native/parse-source.js.map +1 -0
- package/package.json +18 -30
- package/out/analysis/analyser-registry.d.ts +0 -21
- package/out/analysis/analyser-registry.js +0 -33
- package/out/analysis/analyser-registry.js.map +0 -1
- package/out/analysis/completion-tracking-analyser.d.ts +0 -3
- package/out/analysis/completion-tracking-analyser.js +0 -37
- package/out/analysis/completion-tracking-analyser.js.map +0 -1
- package/out/analysis/contextual-search.d.ts +0 -26
- package/out/analysis/contextual-search.js +0 -94
- package/out/analysis/contextual-search.js.map +0 -1
- package/out/analysis/deprecation-impact-analyser.d.ts +0 -3
- package/out/analysis/deprecation-impact-analyser.js +0 -21
- package/out/analysis/deprecation-impact-analyser.js.map +0 -1
- package/out/analysis/file-related-analyser.d.ts +0 -5
- package/out/analysis/file-related-analyser.js +0 -41
- package/out/analysis/file-related-analyser.js.map +0 -1
- package/out/analysis/fuzzy-search-analyser.d.ts +0 -17
- package/out/analysis/fuzzy-search-analyser.js +0 -25
- package/out/analysis/fuzzy-search-analyser.js.map +0 -1
- package/out/analysis/fuzzy-search-worker-client.d.ts +0 -39
- package/out/analysis/fuzzy-search-worker-client.js +0 -178
- package/out/analysis/fuzzy-search-worker-client.js.map +0 -1
- package/out/analysis/fuzzy-search-worker.d.ts +0 -32
- package/out/analysis/fuzzy-search-worker.js +0 -81
- package/out/analysis/fuzzy-search-worker.js.map +0 -1
- package/out/analysis/fuzzy-search.d.ts +0 -62
- package/out/analysis/fuzzy-search.js +0 -471
- package/out/analysis/fuzzy-search.js.map +0 -1
- package/out/analysis/git-dates-analyser.d.ts +0 -12
- package/out/analysis/git-dates-analyser.js +0 -96
- package/out/analysis/git-dates-analyser.js.map +0 -1
- package/out/analysis/list-ideas-analyser.d.ts +0 -3
- package/out/analysis/list-ideas-analyser.js +0 -7
- package/out/analysis/list-ideas-analyser.js.map +0 -1
- package/out/analysis/local-graph-analyser.d.ts +0 -6
- package/out/analysis/local-graph-analyser.js +0 -42
- package/out/analysis/local-graph-analyser.js.map +0 -1
- package/out/analysis/semantic-search-analyser.d.ts +0 -8
- package/out/analysis/semantic-search-analyser.js +0 -51
- package/out/analysis/semantic-search-analyser.js.map +0 -1
- package/out/analysis-api.js +0 -199
- package/out/analysis-api.js.map +0 -1
- package/out/core/analytical-store.d.ts +0 -85
- package/out/core/analytical-store.js +0 -143
- package/out/core/analytical-store.js.map +0 -1
- package/out/core/context-model.d.ts +0 -204
- package/out/core/context-model.js +0 -36
- package/out/core/context-model.js.map +0 -1
- package/out/core/context-signals.d.ts +0 -154
- package/out/core/context-signals.js +0 -406
- package/out/core/context-signals.js.map +0 -1
- package/out/create-runtime.d.ts +0 -47
- package/out/create-runtime.js +0 -79
- package/out/create-runtime.js.map +0 -1
- package/out/export/export-html.d.ts +0 -4
- package/out/export/export-html.js +0 -12
- package/out/export/export-html.js.map +0 -1
- package/out/export/html-export-assets.d.ts +0 -3
- package/out/export/html-export-assets.js +0 -2294
- package/out/export/html-export-assets.js.map +0 -1
- package/out/export/html-export-template.d.ts +0 -18
- package/out/export/html-export-template.js +0 -1154
- package/out/export/html-export-template.js.map +0 -1
- package/out/export/html-export-utils.d.ts +0 -86
- package/out/export/html-export-utils.js +0 -485
- package/out/export/html-export-utils.js.map +0 -1
- package/out/export/write-html-export.d.ts +0 -2
- package/out/export/write-html-export.js +0 -181
- package/out/export/write-html-export.js.map +0 -1
- package/out/graph/physics-core-source.d.ts +0 -5
- package/out/graph/physics-core-source.js +0 -8
- package/out/graph/physics-core-source.js.map +0 -1
- package/out/graph/physics-core.d.ts +0 -141
- package/out/graph/physics-core.js +0 -237
- package/out/graph/physics-core.js.map +0 -1
- package/out/index-store/file-treatment.d.ts +0 -40
- package/out/index-store/file-treatment.js +0 -144
- package/out/index-store/file-treatment.js.map +0 -1
- package/out/index-store/idea-extractor.d.ts +0 -11
- package/out/index-store/idea-extractor.js +0 -351
- package/out/index-store/idea-extractor.js.map +0 -1
- package/out/index-store/overview-coverage.d.ts +0 -23
- package/out/index-store/overview-coverage.js +0 -254
- package/out/index-store/overview-coverage.js.map +0 -1
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Registry and contracts for graph analysers.
|
|
3
|
-
*/
|
|
4
|
-
import type { AnalyticalStore } from '../core/analytical-store.js';
|
|
5
|
-
import type { SqliteIndexStore } from '../index-store/sqlite-store.js';
|
|
6
|
-
export interface AnalyserContext {
|
|
7
|
-
store: SqliteIndexStore;
|
|
8
|
-
analytical: AnalyticalStore;
|
|
9
|
-
workspaceRoot?: string;
|
|
10
|
-
}
|
|
11
|
-
export interface Analyser<TParams = unknown, TResult = unknown> {
|
|
12
|
-
readonly id: string;
|
|
13
|
-
run(context: AnalyserContext, params: TParams): Promise<TResult> | TResult;
|
|
14
|
-
}
|
|
15
|
-
export declare class AnalyserRegistry {
|
|
16
|
-
private readonly analysers;
|
|
17
|
-
register<TParams, TResult>(analyser: Analyser<TParams, TResult>): void;
|
|
18
|
-
get(id: string): Analyser | undefined;
|
|
19
|
-
run<TParams, TResult>(context: AnalyserContext, id: string, params: TParams): Promise<TResult>;
|
|
20
|
-
list(): string[];
|
|
21
|
-
}
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
export class AnalyserRegistry {
|
|
2
|
-
constructor() {
|
|
3
|
-
this.analysers = new Map();
|
|
4
|
-
}
|
|
5
|
-
register(analyser) {
|
|
6
|
-
this.analysers.set(analyser.id, analyser);
|
|
7
|
-
}
|
|
8
|
-
get(id) {
|
|
9
|
-
return this.analysers.get(id);
|
|
10
|
-
}
|
|
11
|
-
async run(context, id, params) {
|
|
12
|
-
const analyser = this.analysers.get(id);
|
|
13
|
-
if (!analyser) {
|
|
14
|
-
throw new Error(`Unknown analyser: ${id}`);
|
|
15
|
-
}
|
|
16
|
-
const { startAnalysis, completeAnalysis, failAnalysis } = context.analytical.getState();
|
|
17
|
-
startAnalysis(id, params);
|
|
18
|
-
try {
|
|
19
|
-
const result = await analyser.run(context, params);
|
|
20
|
-
completeAnalysis(id, result);
|
|
21
|
-
return result;
|
|
22
|
-
}
|
|
23
|
-
catch (error) {
|
|
24
|
-
const message = error instanceof Error ? error.message : String(error);
|
|
25
|
-
failAnalysis(id, message);
|
|
26
|
-
throw error;
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
list() {
|
|
30
|
-
return [...this.analysers.keys()];
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
//# sourceMappingURL=analyser-registry.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"analyser-registry.js","sourceRoot":"","sources":["../../src/analysis/analyser-registry.ts"],"names":[],"mappings":"AAiBA,MAAM,OAAO,gBAAgB;IAA7B;QACqB,cAAS,GAAG,IAAI,GAAG,EAAsC,CAAC;IA+B/E,CAAC;IA7BG,QAAQ,CAAmB,QAAoC;QAC3D,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,EAAE,QAAsC,CAAC,CAAC;IAC5E,CAAC;IAED,GAAG,CAAC,EAAU;QACV,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAClC,CAAC;IAED,KAAK,CAAC,GAAG,CAAmB,OAAwB,EAAE,EAAU,EAAE,MAAe;QAC7E,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACxC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,qBAAqB,EAAE,EAAE,CAAC,CAAC;QAC/C,CAAC;QACD,MAAM,EAAE,aAAa,EAAE,gBAAgB,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC;QACxF,aAAa,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;QAC1B,IAAI,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAY,CAAC;YAC9D,gBAAgB,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;YAC7B,OAAO,MAAM,CAAC;QAClB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACvE,YAAY,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;YAC1B,MAAM,KAAK,CAAC;QAChB,CAAC;IACL,CAAC;IAED,IAAI;QACA,OAAO,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC;IACtC,CAAC;CACJ"}
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
import { isDeprecated, ideaStatus, parseAttributes } from '../core/types.js';
|
|
2
|
-
const OUTSTANDING_STATUSES = new Set(['pending', 'todo', 'open', 'in_progress', 'blocked', 'stub']);
|
|
3
|
-
export const completionTrackingAnalyser = {
|
|
4
|
-
id: 'completion_tracking',
|
|
5
|
-
async run({ store }) {
|
|
6
|
-
const ideas = await store.listAllIdeas();
|
|
7
|
-
const allRaw = await store.getAllIdeasRaw();
|
|
8
|
-
const byStatus = {};
|
|
9
|
-
const byTag = {};
|
|
10
|
-
const outstanding = [];
|
|
11
|
-
const deprecated = [];
|
|
12
|
-
for (const idea of ideas) {
|
|
13
|
-
const raw = allRaw.find(entry => entry.id === idea.id);
|
|
14
|
-
const attributes = parseAttributes(raw?.attributesJson ?? '{}');
|
|
15
|
-
const status = ideaStatus(attributes) ?? 'unspecified';
|
|
16
|
-
byStatus[status] = (byStatus[status] ?? 0) + 1;
|
|
17
|
-
for (const tag of idea.tags) {
|
|
18
|
-
byTag[tag] = (byTag[tag] ?? 0) + 1;
|
|
19
|
-
}
|
|
20
|
-
if (isDeprecated(attributes) || idea.tags.some(tag => tag.toLowerCase() === 'deprecated')) {
|
|
21
|
-
deprecated.push(idea);
|
|
22
|
-
}
|
|
23
|
-
else if (OUTSTANDING_STATUSES.has(status.toLowerCase()) ||
|
|
24
|
-
idea.tags.some(tag => ['todo', 'stub', 'open'].includes(tag.toLowerCase()))) {
|
|
25
|
-
outstanding.push(idea);
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
return {
|
|
29
|
-
total: ideas.length,
|
|
30
|
-
byStatus,
|
|
31
|
-
byTag,
|
|
32
|
-
outstanding,
|
|
33
|
-
deprecated
|
|
34
|
-
};
|
|
35
|
-
}
|
|
36
|
-
};
|
|
37
|
-
//# sourceMappingURL=completion-tracking-analyser.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"completion-tracking-analyser.js","sourceRoot":"","sources":["../../src/analysis/completion-tracking-analyser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAI7E,MAAM,oBAAoB,GAAG,IAAI,GAAG,CAAC,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC;AAEpG,MAAM,CAAC,MAAM,0BAA0B,GAAsC;IACzE,EAAE,EAAE,qBAAqB;IACzB,KAAK,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE;QACf,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,YAAY,EAAE,CAAC;QACzC,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,cAAc,EAAE,CAAC;QAC5C,MAAM,QAAQ,GAA2B,EAAE,CAAC;QAC5C,MAAM,KAAK,GAA2B,EAAE,CAAC;QACzC,MAAM,WAAW,GAAkB,EAAE,CAAC;QACtC,MAAM,UAAU,GAAkB,EAAE,CAAC;QAErC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACvB,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC,CAAC;YACvD,MAAM,UAAU,GAAG,eAAe,CAAC,GAAG,EAAE,cAAc,IAAI,IAAI,CAAC,CAAC;YAChE,MAAM,MAAM,GAAG,UAAU,CAAC,UAAU,CAAC,IAAI,aAAa,CAAC;YACvD,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;YAE/C,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;gBAC1B,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;YACvC,CAAC;YAED,IAAI,YAAY,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,YAAY,CAAC,EAAE,CAAC;gBACxF,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC1B,CAAC;iBAAM,IACH,oBAAoB,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;gBAC9C,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,EAC7E,CAAC;gBACC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC3B,CAAC;QACL,CAAC;QAED,OAAO;YACH,KAAK,EAAE,KAAK,CAAC,MAAM;YACnB,QAAQ;YACR,KAAK;YACL,WAAW;YACX,UAAU;SACb,CAAC;IACN,CAAC;CACJ,CAAC"}
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
import { type EdgeRecord, type IdeaSummary, type SemanticMatch } from '../core/types.js';
|
|
2
|
-
/** Unreachable ideas use this hop for decay (same as 8 hops → score / 256). */
|
|
3
|
-
export declare const CONTEXT_UNREACHABLE_HOP = 8;
|
|
4
|
-
export interface SearchContextStore {
|
|
5
|
-
getIdea(id: string): Promise<IdeaSummary | undefined>;
|
|
6
|
-
getIdeasInFile(fileUri: string): Promise<IdeaSummary[]>;
|
|
7
|
-
searchByNameOrSummary(query: string): Promise<IdeaSummary[]>;
|
|
8
|
-
getAllEdges(): Promise<EdgeRecord[]>;
|
|
9
|
-
}
|
|
10
|
-
export interface SearchContextIndex {
|
|
11
|
-
toIndexedUri(filePathOrUri: string): string;
|
|
12
|
-
}
|
|
13
|
-
/** Strip optional `[…]` wrappers from a context token. */
|
|
14
|
-
export declare function normalizeContextRef(raw: string): string;
|
|
15
|
-
/**
|
|
16
|
-
* Resolve relative paths / `path#idea` / bare idea names to unique idea ids.
|
|
17
|
-
* Unknown tokens are skipped.
|
|
18
|
-
*/
|
|
19
|
-
export declare function resolveSearchContextRefs(index: SearchContextIndex, store: SearchContextStore, refs: readonly string[]): Promise<string[]>;
|
|
20
|
-
/** Apply `finalScore = textScore * 2^(-minHop)` and append context reasons. */
|
|
21
|
-
export declare function applyContextDistanceScoring(matches: SemanticMatch[], distances: Map<string, number>): SemanticMatch[];
|
|
22
|
-
/**
|
|
23
|
-
* Load edges, compute multi-source hop distances, and re-rank semantic matches.
|
|
24
|
-
* Returns matches unchanged when `contextIdeaIds` is empty.
|
|
25
|
-
*/
|
|
26
|
-
export declare function rerankMatchesWithContext(store: SearchContextStore, matches: SemanticMatch[], contextIdeaIds: readonly string[]): Promise<SemanticMatch[]>;
|
|
@@ -1,94 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Context-biased search: resolve path/idea refs and re-rank by hop distance.
|
|
3
|
-
* rq:["../../../../reqlan rq/core_analysis/search.rq".contextual_search]
|
|
4
|
-
*/
|
|
5
|
-
import { hopDistancesFromCenters } from '../core/context-signals.js';
|
|
6
|
-
import { ideaId } from '../core/types.js';
|
|
7
|
-
/** Unreachable ideas use this hop for decay (same as 8 hops → score / 256). */
|
|
8
|
-
export const CONTEXT_UNREACHABLE_HOP = 8;
|
|
9
|
-
/** Strip optional `[…]` wrappers from a context token. */
|
|
10
|
-
export function normalizeContextRef(raw) {
|
|
11
|
-
const trimmed = raw.trim();
|
|
12
|
-
if (trimmed.startsWith('[') && trimmed.endsWith(']') && trimmed.length >= 2) {
|
|
13
|
-
return trimmed.slice(1, -1).trim();
|
|
14
|
-
}
|
|
15
|
-
return trimmed;
|
|
16
|
-
}
|
|
17
|
-
/**
|
|
18
|
-
* Resolve relative paths / `path#idea` / bare idea names to unique idea ids.
|
|
19
|
-
* Unknown tokens are skipped.
|
|
20
|
-
*/
|
|
21
|
-
export async function resolveSearchContextRefs(index, store, refs) {
|
|
22
|
-
const ids = new Set();
|
|
23
|
-
for (const raw of refs) {
|
|
24
|
-
const token = normalizeContextRef(raw);
|
|
25
|
-
if (!token) {
|
|
26
|
-
continue;
|
|
27
|
-
}
|
|
28
|
-
const hashIndex = token.lastIndexOf('#');
|
|
29
|
-
if (hashIndex > 0) {
|
|
30
|
-
const pathPart = token.slice(0, hashIndex);
|
|
31
|
-
const namePart = token.slice(hashIndex + 1);
|
|
32
|
-
if (pathPart && namePart) {
|
|
33
|
-
const id = ideaId(index.toIndexedUri(pathPart), namePart);
|
|
34
|
-
const idea = await store.getIdea(id);
|
|
35
|
-
if (idea) {
|
|
36
|
-
ids.add(idea.id);
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
continue;
|
|
40
|
-
}
|
|
41
|
-
if (token.toLowerCase().endsWith('.rq')) {
|
|
42
|
-
const fileUri = index.toIndexedUri(token);
|
|
43
|
-
for (const idea of await store.getIdeasInFile(fileUri)) {
|
|
44
|
-
ids.add(idea.id);
|
|
45
|
-
}
|
|
46
|
-
continue;
|
|
47
|
-
}
|
|
48
|
-
// Try as indexed file path even without .rq suffix.
|
|
49
|
-
const asFile = index.toIndexedUri(token);
|
|
50
|
-
const inFile = await store.getIdeasInFile(asFile);
|
|
51
|
-
if (inFile.length > 0) {
|
|
52
|
-
for (const idea of inFile) {
|
|
53
|
-
ids.add(idea.id);
|
|
54
|
-
}
|
|
55
|
-
continue;
|
|
56
|
-
}
|
|
57
|
-
const candidates = await store.searchByNameOrSummary(token);
|
|
58
|
-
for (const idea of candidates) {
|
|
59
|
-
if (idea.name === token) {
|
|
60
|
-
ids.add(idea.id);
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
return [...ids];
|
|
65
|
-
}
|
|
66
|
-
/** Apply `finalScore = textScore * 2^(-minHop)` and append context reasons. */
|
|
67
|
-
export function applyContextDistanceScoring(matches, distances) {
|
|
68
|
-
return matches.map(match => {
|
|
69
|
-
const hop = distances.get(match.idea.id);
|
|
70
|
-
const effectiveHop = hop === undefined ? CONTEXT_UNREACHABLE_HOP : hop;
|
|
71
|
-
const reason = hop === undefined ? 'context:unreachable' : `context:${hop} hops`;
|
|
72
|
-
return {
|
|
73
|
-
...match,
|
|
74
|
-
score: match.score * Math.pow(0.5, effectiveHop),
|
|
75
|
-
reasons: [...match.reasons, reason]
|
|
76
|
-
};
|
|
77
|
-
});
|
|
78
|
-
}
|
|
79
|
-
/**
|
|
80
|
-
* Load edges, compute multi-source hop distances, and re-rank semantic matches.
|
|
81
|
-
* Returns matches unchanged when `contextIdeaIds` is empty.
|
|
82
|
-
*/
|
|
83
|
-
export async function rerankMatchesWithContext(store, matches, contextIdeaIds) {
|
|
84
|
-
if (contextIdeaIds.length === 0 || matches.length === 0) {
|
|
85
|
-
return matches;
|
|
86
|
-
}
|
|
87
|
-
const edges = await store.getAllEdges();
|
|
88
|
-
const hopEdges = edges
|
|
89
|
-
.filter((edge) => Boolean(edge.targetId))
|
|
90
|
-
.map(edge => ({ sourceId: edge.sourceId, targetId: edge.targetId }));
|
|
91
|
-
const distances = hopDistancesFromCenters(contextIdeaIds, hopEdges);
|
|
92
|
-
return applyContextDistanceScoring(matches, distances).sort((left, right) => right.score - left.score);
|
|
93
|
-
}
|
|
94
|
-
//# sourceMappingURL=contextual-search.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"contextual-search.js","sourceRoot":"","sources":["../../src/analysis/contextual-search.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import { isDeprecated, parseAttributes } from '../core/types.js';
|
|
2
|
-
export const deprecationImpactAnalyser = {
|
|
3
|
-
id: 'deprecation_impact_analysis',
|
|
4
|
-
async run({ store }) {
|
|
5
|
-
const impacts = [];
|
|
6
|
-
const allIdeas = await store.listAllIdeas();
|
|
7
|
-
const allRaw = await store.getAllIdeasRaw();
|
|
8
|
-
for (const idea of allIdeas) {
|
|
9
|
-
const raw = allRaw.find(entry => entry.id === idea.id);
|
|
10
|
-
const attributes = parseAttributes(raw?.attributesJson ?? '{}');
|
|
11
|
-
if (!isDeprecated(attributes)) {
|
|
12
|
-
continue;
|
|
13
|
-
}
|
|
14
|
-
const inbound = await store.getEdgesTo(idea.id);
|
|
15
|
-
const dependents = (await Promise.all(inbound.map(edge => store.getIdea(edge.sourceId)))).filter((entry) => entry !== undefined);
|
|
16
|
-
impacts.push({ deprecated: idea, dependents });
|
|
17
|
-
}
|
|
18
|
-
return impacts;
|
|
19
|
-
}
|
|
20
|
-
};
|
|
21
|
-
//# sourceMappingURL=deprecation-impact-analyser.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"deprecation-impact-analyser.js","sourceRoot":"","sources":["../../src/analysis/deprecation-impact-analyser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAIjE,MAAM,CAAC,MAAM,yBAAyB,GAAwC;IAC1E,EAAE,EAAE,6BAA6B;IACjC,KAAK,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE;QACf,MAAM,OAAO,GAAwB,EAAE,CAAC;QACxC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,YAAY,EAAE,CAAC;QAC5C,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,cAAc,EAAE,CAAC;QAC5C,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;YAC1B,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC,CAAC;YACvD,MAAM,UAAU,GAAG,eAAe,CAAC,GAAG,EAAE,cAAc,IAAI,IAAI,CAAC,CAAC;YAChE,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC5B,SAAS;YACb,CAAC;YACD,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAChD,MAAM,UAAU,GAAG,CACf,MAAM,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CACvE,CAAC,MAAM,CAAC,CAAC,KAAK,EAAsC,EAAE,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC;YAC7E,OAAO,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;QACnD,CAAC;QACD,OAAO,OAAO,CAAC;IACnB,CAAC;CACJ,CAAC"}
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
import { basename } from 'node:path';
|
|
2
|
-
import { matchFileReferenceTarget } from '../core/file-path-match.js';
|
|
3
|
-
import { toWorkspaceRelativePath } from '../core/workspace-paths.js';
|
|
4
|
-
export const fileRelatedAnalyser = {
|
|
5
|
-
id: 'file_related_requirements',
|
|
6
|
-
async run({ store, workspaceRoot }, { fileUri }) {
|
|
7
|
-
const indexedFileUri = workspaceRoot ? toWorkspaceRelativePath(fileUri, workspaceRoot) : fileUri;
|
|
8
|
-
const ideasInFile = await store.getIdeasInFile(indexedFileUri);
|
|
9
|
-
const fileName = basename(indexedFileUri);
|
|
10
|
-
const referencingIds = new Set();
|
|
11
|
-
const folderReferencingIds = new Set();
|
|
12
|
-
for (const edge of await store.getAllEdges()) {
|
|
13
|
-
if (edge.targetId && ideasInFile.some(idea => idea.id === edge.targetId)) {
|
|
14
|
-
referencingIds.add(edge.sourceId);
|
|
15
|
-
}
|
|
16
|
-
if (edge.kind === 'file_reference' && edge.targetFile) {
|
|
17
|
-
const match = matchFileReferenceTarget(edge.targetFile, indexedFileUri, fileName);
|
|
18
|
-
if (match === 'file') {
|
|
19
|
-
referencingIds.add(edge.sourceId);
|
|
20
|
-
}
|
|
21
|
-
else if (match === 'folder') {
|
|
22
|
-
folderReferencingIds.add(edge.sourceId);
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
const loadIdeas = async (ids) => (await Promise.all([...ids].map(id => store.getIdea(id)))).filter((idea) => idea !== undefined);
|
|
27
|
-
const referencingIdeas = await loadIdeas(referencingIds);
|
|
28
|
-
const folderReferencingIdeas = (await loadIdeas(folderReferencingIds)).filter(idea => !referencingIds.has(idea.id));
|
|
29
|
-
const commentLinkedIdeas = (await Promise.all((await store.getEdgesReferencingFile(fileName))
|
|
30
|
-
.filter(edge => edge.kind === 'comment_link')
|
|
31
|
-
.map(edge => (edge.targetId ? store.getIdea(edge.targetId) : Promise.resolve(undefined))))).filter((idea) => idea !== undefined);
|
|
32
|
-
return {
|
|
33
|
-
fileUri: indexedFileUri,
|
|
34
|
-
ideasInFile,
|
|
35
|
-
referencingIdeas,
|
|
36
|
-
commentLinkedIdeas,
|
|
37
|
-
folderReferencingIdeas
|
|
38
|
-
};
|
|
39
|
-
}
|
|
40
|
-
};
|
|
41
|
-
//# sourceMappingURL=file-related-analyser.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"file-related-analyser.js","sourceRoot":"","sources":["../../src/analysis/file-related-analyser.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Analyser entry for fuzzy idea search.
|
|
3
|
-
* rq:["../../../../reqlan rq/core_analysis/search.rq".fuzzy_search]
|
|
4
|
-
* rq:["../../../../reqlan rq/core_analysis/search.rq".fuzzy_search_whitespace]
|
|
5
|
-
*/
|
|
6
|
-
import type { Analyser } from './analyser-registry.js';
|
|
7
|
-
import { type FuzzySearchHit } from './fuzzy-search.js';
|
|
8
|
-
export interface FuzzySearchParams {
|
|
9
|
-
query: string;
|
|
10
|
-
/** Cap results after ranking; omit for uncapped (caller paginates). */
|
|
11
|
-
limit?: number;
|
|
12
|
-
/** When true, empty query returns no hits instead of every non-ideaset idea. */
|
|
13
|
-
requireQuery?: boolean;
|
|
14
|
-
/** When true mid-run, scoring aborts and returns no hits (superseded request). */
|
|
15
|
-
isCancelled?: () => boolean;
|
|
16
|
-
}
|
|
17
|
-
export declare const fuzzySearchAnalyser: Analyser<FuzzySearchParams, FuzzySearchHit[]>;
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
import { filterAndScoreIdeasAsync } from './fuzzy-search.js';
|
|
2
|
-
export const fuzzySearchAnalyser = {
|
|
3
|
-
id: 'fuzzy_search',
|
|
4
|
-
async run({ store }, { query, limit, requireQuery = false, isCancelled }) {
|
|
5
|
-
const trimmed = query.trim();
|
|
6
|
-
if (requireQuery && !trimmed) {
|
|
7
|
-
return [];
|
|
8
|
-
}
|
|
9
|
-
if (isCancelled?.()) {
|
|
10
|
-
return [];
|
|
11
|
-
}
|
|
12
|
-
const ideas = await store.listAllIdeas();
|
|
13
|
-
// listAllIdeas is sync under sql.js — yield so openIdea / newer searches can run.
|
|
14
|
-
await new Promise(resolve => setTimeout(resolve, 0));
|
|
15
|
-
if (isCancelled?.()) {
|
|
16
|
-
return [];
|
|
17
|
-
}
|
|
18
|
-
const hits = await filterAndScoreIdeasAsync(ideas, trimmed, { isCancelled });
|
|
19
|
-
if (hits === undefined || isCancelled?.()) {
|
|
20
|
-
return [];
|
|
21
|
-
}
|
|
22
|
-
return limit === undefined ? hits : hits.slice(0, Math.max(0, limit));
|
|
23
|
-
}
|
|
24
|
-
};
|
|
25
|
-
//# sourceMappingURL=fuzzy-search-analyser.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"fuzzy-search-analyser.js","sourceRoot":"","sources":["../../src/analysis/fuzzy-search-analyser.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,wBAAwB,EAAuB,MAAM,mBAAmB,CAAC;AAYlF,MAAM,CAAC,MAAM,mBAAmB,GAAkD;IAC9E,EAAE,EAAE,cAAc;IAClB,KAAK,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,GAAG,KAAK,EAAE,WAAW,EAAE;QACpE,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;QAC7B,IAAI,YAAY,IAAI,CAAC,OAAO,EAAE,CAAC;YAC3B,OAAO,EAAE,CAAC;QACd,CAAC;QACD,IAAI,WAAW,EAAE,EAAE,EAAE,CAAC;YAClB,OAAO,EAAE,CAAC;QACd,CAAC;QACD,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,YAAY,EAAE,CAAC;QACzC,kFAAkF;QAClF,MAAM,IAAI,OAAO,CAAO,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;QAC3D,IAAI,WAAW,EAAE,EAAE,EAAE,CAAC;YAClB,OAAO,EAAE,CAAC;QACd,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,wBAAwB,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC;QAC7E,IAAI,IAAI,KAAK,SAAS,IAAI,WAAW,EAAE,EAAE,EAAE,CAAC;YACxC,OAAO,EAAE,CAAC;QACd,CAAC;QACD,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;IAC1E,CAAC;CACJ,CAAC"}
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
import type { IdeaSummary } from '../core/types.js';
|
|
2
|
-
import type { FuzzySearchHit } from './fuzzy-search.js';
|
|
3
|
-
/** Resolve the bundled worker script next to the extension host output. */
|
|
4
|
-
export declare function resolveFuzzySearchWorkerPath(explicit?: string): string;
|
|
5
|
-
export interface FuzzySearchWorkerSearchResult {
|
|
6
|
-
hits: FuzzySearchHit[];
|
|
7
|
-
total: number;
|
|
8
|
-
truncated: boolean;
|
|
9
|
-
}
|
|
10
|
-
/**
|
|
11
|
-
* Owns a single worker that holds the idea catalog and scores queries off-thread.
|
|
12
|
-
*/
|
|
13
|
-
export declare class FuzzySearchWorkerClient {
|
|
14
|
-
private worker;
|
|
15
|
-
private readonly pending;
|
|
16
|
-
private catalogEpoch;
|
|
17
|
-
private disposed;
|
|
18
|
-
private readonly workerPath;
|
|
19
|
-
constructor(options?: {
|
|
20
|
-
workerPath?: string;
|
|
21
|
-
});
|
|
22
|
-
get hasCatalog(): boolean;
|
|
23
|
-
setCatalog(ideas: readonly IdeaSummary[]): Promise<number>;
|
|
24
|
-
clearCatalog(): void;
|
|
25
|
-
search(query: string, requestId: number, options?: {
|
|
26
|
-
limit?: number;
|
|
27
|
-
requireQuery?: boolean;
|
|
28
|
-
}): Promise<FuzzySearchWorkerSearchResult>;
|
|
29
|
-
/** Drop in-flight search promises so callers can move on (worker may still finish). */
|
|
30
|
-
cancelSearches(requestId?: number): void;
|
|
31
|
-
dispose(): void;
|
|
32
|
-
private ensureWorker;
|
|
33
|
-
private post;
|
|
34
|
-
private onMessage;
|
|
35
|
-
}
|
|
36
|
-
export declare class SearchCancelledError extends Error {
|
|
37
|
-
readonly requestId: number;
|
|
38
|
-
constructor(requestId: number);
|
|
39
|
-
}
|
|
@@ -1,178 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Host-side client for the fuzzy-search worker thread.
|
|
3
|
-
* rq:["../../../../reqlan rq/core_analysis/search.rq".fuzzy_search]
|
|
4
|
-
*/
|
|
5
|
-
import { existsSync } from 'node:fs';
|
|
6
|
-
import { dirname, join } from 'node:path';
|
|
7
|
-
import { fileURLToPath } from 'node:url';
|
|
8
|
-
import { Worker } from 'node:worker_threads';
|
|
9
|
-
function moduleDirectory() {
|
|
10
|
-
if (typeof __dirname === 'string') {
|
|
11
|
-
return __dirname;
|
|
12
|
-
}
|
|
13
|
-
const metaUrl = (0, eval)('import.meta.url');
|
|
14
|
-
return dirname(fileURLToPath(metaUrl));
|
|
15
|
-
}
|
|
16
|
-
/** Resolve the bundled worker script next to the extension host output. */
|
|
17
|
-
export function resolveFuzzySearchWorkerPath(explicit) {
|
|
18
|
-
if (explicit) {
|
|
19
|
-
return explicit;
|
|
20
|
-
}
|
|
21
|
-
const dir = moduleDirectory();
|
|
22
|
-
const candidates = [
|
|
23
|
-
join(dir, 'fuzzy-search-worker.cjs'),
|
|
24
|
-
join(dir, 'fuzzy-search-worker.js'),
|
|
25
|
-
join(dir, '..', 'fuzzy-search-worker.cjs'),
|
|
26
|
-
join(dir, 'extension', 'fuzzy-search-worker.cjs')
|
|
27
|
-
];
|
|
28
|
-
for (const candidate of candidates) {
|
|
29
|
-
if (existsSync(candidate)) {
|
|
30
|
-
return candidate;
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
return candidates[0];
|
|
34
|
-
}
|
|
35
|
-
/**
|
|
36
|
-
* Owns a single worker that holds the idea catalog and scores queries off-thread.
|
|
37
|
-
*/
|
|
38
|
-
export class FuzzySearchWorkerClient {
|
|
39
|
-
constructor(options) {
|
|
40
|
-
this.pending = new Map();
|
|
41
|
-
this.catalogEpoch = 0;
|
|
42
|
-
this.disposed = false;
|
|
43
|
-
this.workerPath = resolveFuzzySearchWorkerPath(options?.workerPath);
|
|
44
|
-
}
|
|
45
|
-
get hasCatalog() {
|
|
46
|
-
return this.catalogEpoch > 0;
|
|
47
|
-
}
|
|
48
|
-
async setCatalog(ideas) {
|
|
49
|
-
this.ensureWorker();
|
|
50
|
-
const epoch = ++this.catalogEpoch;
|
|
51
|
-
const compact = ideas.map(idea => ({
|
|
52
|
-
id: idea.id,
|
|
53
|
-
name: idea.name,
|
|
54
|
-
kind: idea.kind,
|
|
55
|
-
fileUri: idea.fileUri,
|
|
56
|
-
summary: idea.summary,
|
|
57
|
-
lineStart: idea.lineStart,
|
|
58
|
-
tags: idea.tags
|
|
59
|
-
}));
|
|
60
|
-
this.post({ type: 'setCatalog', ideas: compact });
|
|
61
|
-
return epoch;
|
|
62
|
-
}
|
|
63
|
-
clearCatalog() {
|
|
64
|
-
this.catalogEpoch = 0;
|
|
65
|
-
if (this.worker) {
|
|
66
|
-
this.post({ type: 'clearCatalog' });
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
search(query, requestId, options) {
|
|
70
|
-
this.ensureWorker();
|
|
71
|
-
return new Promise((resolve, reject) => {
|
|
72
|
-
this.pending.set(requestId, { resolve, reject });
|
|
73
|
-
this.post({
|
|
74
|
-
type: 'search',
|
|
75
|
-
requestId,
|
|
76
|
-
query,
|
|
77
|
-
limit: options?.limit,
|
|
78
|
-
requireQuery: options?.requireQuery
|
|
79
|
-
});
|
|
80
|
-
});
|
|
81
|
-
}
|
|
82
|
-
/** Drop in-flight search promises so callers can move on (worker may still finish). */
|
|
83
|
-
cancelSearches(requestId) {
|
|
84
|
-
if (this.worker) {
|
|
85
|
-
this.post({ type: 'cancel', requestId });
|
|
86
|
-
}
|
|
87
|
-
if (requestId === undefined) {
|
|
88
|
-
for (const [id, pending] of this.pending) {
|
|
89
|
-
pending.reject(new SearchCancelledError(id));
|
|
90
|
-
}
|
|
91
|
-
this.pending.clear();
|
|
92
|
-
return;
|
|
93
|
-
}
|
|
94
|
-
const pending = this.pending.get(requestId);
|
|
95
|
-
if (pending) {
|
|
96
|
-
this.pending.delete(requestId);
|
|
97
|
-
pending.reject(new SearchCancelledError(requestId));
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
dispose() {
|
|
101
|
-
this.disposed = true;
|
|
102
|
-
for (const [id, pending] of this.pending) {
|
|
103
|
-
pending.reject(new SearchCancelledError(id));
|
|
104
|
-
}
|
|
105
|
-
this.pending.clear();
|
|
106
|
-
const worker = this.worker;
|
|
107
|
-
this.worker = undefined;
|
|
108
|
-
void worker?.terminate();
|
|
109
|
-
}
|
|
110
|
-
ensureWorker() {
|
|
111
|
-
if (this.disposed) {
|
|
112
|
-
throw new Error('FuzzySearchWorkerClient is disposed');
|
|
113
|
-
}
|
|
114
|
-
if (this.worker) {
|
|
115
|
-
return this.worker;
|
|
116
|
-
}
|
|
117
|
-
const worker = new Worker(this.workerPath);
|
|
118
|
-
worker.on('message', (message) => {
|
|
119
|
-
this.onMessage(message);
|
|
120
|
-
});
|
|
121
|
-
worker.on('error', error => {
|
|
122
|
-
for (const [, pending] of this.pending) {
|
|
123
|
-
pending.reject(error instanceof Error ? error : new Error(String(error)));
|
|
124
|
-
}
|
|
125
|
-
this.pending.clear();
|
|
126
|
-
this.worker = undefined;
|
|
127
|
-
});
|
|
128
|
-
worker.on('exit', code => {
|
|
129
|
-
if (this.disposed) {
|
|
130
|
-
return;
|
|
131
|
-
}
|
|
132
|
-
this.worker = undefined;
|
|
133
|
-
if (code !== 0 && this.pending.size > 0) {
|
|
134
|
-
const error = new Error(`fuzzy-search worker exited with code ${code}`);
|
|
135
|
-
for (const [, pending] of this.pending) {
|
|
136
|
-
pending.reject(error);
|
|
137
|
-
}
|
|
138
|
-
this.pending.clear();
|
|
139
|
-
}
|
|
140
|
-
});
|
|
141
|
-
this.worker = worker;
|
|
142
|
-
return worker;
|
|
143
|
-
}
|
|
144
|
-
post(message) {
|
|
145
|
-
this.ensureWorker().postMessage(message);
|
|
146
|
-
}
|
|
147
|
-
onMessage(message) {
|
|
148
|
-
if (!message || typeof message !== 'object' || !('type' in message)) {
|
|
149
|
-
return;
|
|
150
|
-
}
|
|
151
|
-
const pending = this.pending.get(message.requestId);
|
|
152
|
-
if (!pending) {
|
|
153
|
-
return;
|
|
154
|
-
}
|
|
155
|
-
this.pending.delete(message.requestId);
|
|
156
|
-
if (message.type === 'result') {
|
|
157
|
-
pending.resolve({
|
|
158
|
-
hits: message.hits,
|
|
159
|
-
total: message.total,
|
|
160
|
-
truncated: message.truncated
|
|
161
|
-
});
|
|
162
|
-
return;
|
|
163
|
-
}
|
|
164
|
-
if (message.type === 'cancelled') {
|
|
165
|
-
pending.reject(new SearchCancelledError(message.requestId));
|
|
166
|
-
return;
|
|
167
|
-
}
|
|
168
|
-
pending.reject(new Error(message.message));
|
|
169
|
-
}
|
|
170
|
-
}
|
|
171
|
-
export class SearchCancelledError extends Error {
|
|
172
|
-
constructor(requestId) {
|
|
173
|
-
super(`Search ${requestId} cancelled`);
|
|
174
|
-
this.name = 'SearchCancelledError';
|
|
175
|
-
this.requestId = requestId;
|
|
176
|
-
}
|
|
177
|
-
}
|
|
178
|
-
//# sourceMappingURL=fuzzy-search-worker-client.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"fuzzy-search-worker-client.js","sourceRoot":"","sources":["../../src/analysis/fuzzy-search-worker-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
import { type FuzzySearchHit } from './fuzzy-search.js';
|
|
2
|
-
import type { IdeaSummary } from '../core/types.js';
|
|
3
|
-
export type FuzzySearchWorkerIdea = Pick<IdeaSummary, 'id' | 'name' | 'kind' | 'fileUri' | 'summary' | 'lineStart' | 'tags'>;
|
|
4
|
-
export type FuzzySearchWorkerInbound = {
|
|
5
|
-
type: 'setCatalog';
|
|
6
|
-
ideas: FuzzySearchWorkerIdea[];
|
|
7
|
-
} | {
|
|
8
|
-
type: 'clearCatalog';
|
|
9
|
-
} | {
|
|
10
|
-
type: 'search';
|
|
11
|
-
requestId: number;
|
|
12
|
-
query: string;
|
|
13
|
-
limit?: number;
|
|
14
|
-
requireQuery?: boolean;
|
|
15
|
-
} | {
|
|
16
|
-
type: 'cancel';
|
|
17
|
-
requestId?: number;
|
|
18
|
-
};
|
|
19
|
-
export type FuzzySearchWorkerOutbound = {
|
|
20
|
-
type: 'result';
|
|
21
|
-
requestId: number;
|
|
22
|
-
hits: FuzzySearchHit[];
|
|
23
|
-
total: number;
|
|
24
|
-
truncated: boolean;
|
|
25
|
-
} | {
|
|
26
|
-
type: 'error';
|
|
27
|
-
requestId: number;
|
|
28
|
-
message: string;
|
|
29
|
-
} | {
|
|
30
|
-
type: 'cancelled';
|
|
31
|
-
requestId: number;
|
|
32
|
-
};
|