@jafreck/lore 0.3.2 → 0.3.4
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 +16 -18
- package/dist/cli.js +6 -1
- package/dist/cli.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -2
- package/dist/index.js.map +1 -1
- package/dist/indexer/embedder.d.ts +20 -31
- package/dist/indexer/embedder.d.ts.map +1 -1
- package/dist/indexer/embedder.js +34 -150
- package/dist/indexer/embedder.js.map +1 -1
- package/dist/indexer/extractors/cpp.d.ts.map +1 -1
- package/dist/indexer/extractors/cpp.js +67 -2
- package/dist/indexer/extractors/cpp.js.map +1 -1
- package/dist/indexer/extractors/csharp.d.ts.map +1 -1
- package/dist/indexer/extractors/csharp.js +3 -0
- package/dist/indexer/extractors/csharp.js.map +1 -1
- package/dist/indexer/extractors/elixir.js +4 -1
- package/dist/indexer/extractors/elixir.js.map +1 -1
- package/dist/indexer/extractors/go.d.ts.map +1 -1
- package/dist/indexer/extractors/go.js +1 -0
- package/dist/indexer/extractors/go.js.map +1 -1
- package/dist/indexer/extractors/java.d.ts.map +1 -1
- package/dist/indexer/extractors/java.js +2 -0
- package/dist/indexer/extractors/java.js.map +1 -1
- package/dist/indexer/extractors/julia.d.ts.map +1 -1
- package/dist/indexer/extractors/julia.js +26 -3
- package/dist/indexer/extractors/julia.js.map +1 -1
- package/dist/indexer/extractors/kotlin.d.ts.map +1 -1
- package/dist/indexer/extractors/kotlin.js +2 -0
- package/dist/indexer/extractors/kotlin.js.map +1 -1
- package/dist/indexer/extractors/objc.d.ts.map +1 -1
- package/dist/indexer/extractors/objc.js +7 -1
- package/dist/indexer/extractors/objc.js.map +1 -1
- package/dist/indexer/extractors/ocaml.js +10 -2
- package/dist/indexer/extractors/ocaml.js.map +1 -1
- package/dist/indexer/extractors/php.d.ts.map +1 -1
- package/dist/indexer/extractors/php.js +4 -0
- package/dist/indexer/extractors/php.js.map +1 -1
- package/dist/indexer/extractors/ruby.d.ts.map +1 -1
- package/dist/indexer/extractors/ruby.js +6 -3
- package/dist/indexer/extractors/ruby.js.map +1 -1
- package/dist/indexer/extractors/rust.d.ts.map +1 -1
- package/dist/indexer/extractors/rust.js +3 -0
- package/dist/indexer/extractors/rust.js.map +1 -1
- package/dist/indexer/extractors/swift.d.ts.map +1 -1
- package/dist/indexer/extractors/swift.js +3 -0
- package/dist/indexer/extractors/swift.js.map +1 -1
- package/dist/indexer/extractors/typescript.d.ts.map +1 -1
- package/dist/indexer/extractors/typescript.js +4 -0
- package/dist/indexer/extractors/typescript.js.map +1 -1
- package/dist/indexer/extractors/zig.d.ts.map +1 -1
- package/dist/indexer/extractors/zig.js +22 -11
- package/dist/indexer/extractors/zig.js.map +1 -1
- package/dist/indexer/lsp/client.d.ts.map +1 -1
- package/dist/indexer/lsp/client.js +2 -0
- package/dist/indexer/lsp/client.js.map +1 -1
- package/dist/indexer/lsp/registry.d.ts.map +1 -1
- package/dist/indexer/lsp/registry.js +0 -1
- package/dist/indexer/lsp/registry.js.map +1 -1
- package/dist/indexer/parser.d.ts.map +1 -1
- package/dist/indexer/parser.js +30 -7
- package/dist/indexer/parser.js.map +1 -1
- package/dist/indexer/stages/source-index.d.ts.map +1 -1
- package/dist/indexer/stages/source-index.js +3 -2
- package/dist/indexer/stages/source-index.js.map +1 -1
- package/dist/indexer/walker.d.ts.map +1 -1
- package/dist/indexer/walker.js +0 -1
- package/dist/indexer/walker.js.map +1 -1
- package/dist/lore-server/server.d.ts.map +1 -1
- package/dist/lore-server/server.js +3 -3
- package/dist/lore-server/server.js.map +1 -1
- package/dist/lore-server/tools/graph.d.ts +6 -1
- package/dist/lore-server/tools/graph.d.ts.map +1 -1
- package/dist/lore-server/tools/graph.js +180 -209
- package/dist/lore-server/tools/graph.js.map +1 -1
- package/dist/process-tracker.d.ts +33 -0
- package/dist/process-tracker.d.ts.map +1 -0
- package/dist/process-tracker.js +52 -0
- package/dist/process-tracker.js.map +1 -0
- package/dist/runtime.d.ts +7 -2
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +25 -15
- package/dist/runtime.js.map +1 -1
- package/package.json +9 -5
- package/dist/indexer/ensure-python-deps.d.ts +0 -22
- package/dist/indexer/ensure-python-deps.d.ts.map +0 -1
- package/dist/indexer/ensure-python-deps.js +0 -47
- package/dist/indexer/ensure-python-deps.js.map +0 -1
- package/dist/indexer/extractors/dart.d.ts +0 -12
- package/dist/indexer/extractors/dart.d.ts.map +0 -1
- package/dist/indexer/extractors/dart.js +0 -213
- package/dist/indexer/extractors/dart.js.map +0 -1
package/dist/runtime.js
CHANGED
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
* handled in one place.
|
|
11
11
|
*/
|
|
12
12
|
import { getLogger } from './logger.js';
|
|
13
|
+
import { killAllTracked } from './process-tracker.js';
|
|
13
14
|
// ─── LoreRuntime ──────────────────────────────────────────────────────────────
|
|
14
15
|
/**
|
|
15
16
|
* Owns the lifecycle of all long-lived Lore resources.
|
|
@@ -57,8 +58,8 @@ export class LoreRuntime {
|
|
|
57
58
|
// ── Embedder ─────────────────────────────────────────────────────────────
|
|
58
59
|
if (this.config.embeddingModel) {
|
|
59
60
|
try {
|
|
60
|
-
const {
|
|
61
|
-
const provider = new
|
|
61
|
+
const { TransformersJsProvider } = await import('./indexer/embedder.js');
|
|
62
|
+
const provider = new TransformersJsProvider(this.config.embeddingModel);
|
|
62
63
|
await provider.init();
|
|
63
64
|
this._embedder = provider;
|
|
64
65
|
this.log.startup('embedding model loaded', {
|
|
@@ -128,26 +129,35 @@ export class LoreRuntime {
|
|
|
128
129
|
}
|
|
129
130
|
}
|
|
130
131
|
/**
|
|
131
|
-
* Register process-level signal handlers (`SIGINT`, `SIGTERM`) that
|
|
132
|
-
*
|
|
132
|
+
* Register process-level signal handlers (`SIGINT`, `SIGTERM`) that
|
|
133
|
+
* gracefully tear down all managed resources before exiting.
|
|
134
|
+
*
|
|
135
|
+
* A second signal while shutdown is in progress forces an immediate exit.
|
|
136
|
+
* As a safety net, `killAllTracked()` runs synchronously on the `exit`
|
|
137
|
+
* event to SIGTERM any child processes that slipped past the async path
|
|
138
|
+
* (e.g. LSP servers spawned by an in-flight pipeline stage).
|
|
133
139
|
*/
|
|
134
140
|
installSignalHandlers() {
|
|
141
|
+
let shuttingDown = false;
|
|
135
142
|
const handler = () => {
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
}
|
|
141
|
-
// Dispose embedder best-effort in background, then exit.
|
|
142
|
-
if (this._embedder) {
|
|
143
|
-
this._embedder.dispose().catch(() => { });
|
|
144
|
-
this._embedder = null;
|
|
143
|
+
if (shuttingDown) {
|
|
144
|
+
// Second signal — force-kill children and bail.
|
|
145
|
+
killAllTracked();
|
|
146
|
+
process.exit(1);
|
|
145
147
|
}
|
|
146
|
-
|
|
147
|
-
|
|
148
|
+
shuttingDown = true;
|
|
149
|
+
this.shutdown()
|
|
150
|
+
.catch(() => { })
|
|
151
|
+
.finally(() => {
|
|
152
|
+
killAllTracked();
|
|
153
|
+
process.exit(0);
|
|
154
|
+
});
|
|
148
155
|
};
|
|
149
156
|
process.on('SIGINT', handler);
|
|
150
157
|
process.on('SIGTERM', handler);
|
|
158
|
+
// Last-resort: kill any children that are still alive when the
|
|
159
|
+
// process is about to exit (covers unexpected exits / unhandled errors).
|
|
160
|
+
process.once('exit', () => killAllTracked());
|
|
151
161
|
}
|
|
152
162
|
}
|
|
153
163
|
//# sourceMappingURL=runtime.js.map
|
package/dist/runtime.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAMH,OAAO,EAAE,SAAS,EAAmB,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAMH,OAAO,EAAE,SAAS,EAAmB,MAAM,aAAa,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAsCtD,iFAAiF;AAEjF;;;;;;;;;;GAUG;AACH,MAAM,OAAO,WAAW;IACb,MAAM,CAAgB;IACtB,GAAG,CAAa;IAEjB,SAAS,GAA6B,IAAI,CAAC;IAC3C,UAAU,GAAqB,IAAI,CAAC;IACpC,QAAQ,GAAG,KAAK,CAAC;IAEzB,YAAY,MAAqB,EAAE,MAAmB;QACpD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,GAAG,GAAG,MAAM,IAAI,SAAS,EAAE,CAAC;IACnC,CAAC;IAED,8EAA8E;IAE9E,8EAA8E;IAC9E,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC;IACrC,CAAC;IAED,kFAAkF;IAClF,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,UAAU,IAAI,SAAS,CAAC;IACtC,CAAC;IAED,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAED,8EAA8E;IAE9E;;;;OAIG;IACH,KAAK,CAAC,KAAK;QACT,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAO;QAC1B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QAErB,4EAA4E;QAC5E,IAAI,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;YAC/B,IAAI,CAAC;gBACH,MAAM,EAAE,sBAAsB,EAAE,GAAG,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAC;gBACzE,MAAM,QAAQ,GAAG,IAAI,sBAAsB,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;gBACxE,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;gBACtB,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;gBAC1B,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,wBAAwB,EAAE;oBACzC,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC,cAAc;oBAC1C,cAAc,EAAE,IAAI;iBACrB,CAAC,CAAC;YACL,CAAC;YAAC,MAAM,CAAC;gBACP,IAAI,CAAC,GAAG,CAAC,IAAI,CACX,SAAS,EACT,4DAA4D,EAC5D,EAAE,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,CAC/C,CAAC;YACJ,CAAC;QACH,CAAC;QAED,4EAA4E;QAC5E,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,KAAK,OAAO,EAAE,CAAC;YACxC,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAC;YAC7D,MAAM,OAAO,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE;gBAC5E,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO;gBAC5B,iBAAiB,EAAE,IAAI,CAAC,MAAM,CAAC,iBAAiB;gBAChD,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,SAAS;gBACjC,QAAQ,EAAE,IAAI,CAAC,SAAS,IAAI,SAAS;aACtC,CAAC,CAAC;YACH,OAAO,CAAC,KAAK,EAAE,CAAC;YAChB,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC;YAC1B,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,oBAAoB,EAAE;gBACrC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO;gBAC5B,gBAAgB,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS;aACnC,CAAC,CAAC;YACH,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,oBAAoB,EAAE,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,gBAAgB,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,GAAG,IAAI,CACzJ,CAAC;QACJ,CAAC;aAAM,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,KAAK,MAAM,EAAE,CAAC;YAC9C,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAC;YAC3D,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE;gBAC1E,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO;gBAC5B,iBAAiB,EAAE,IAAI,CAAC,MAAM,CAAC,iBAAiB;gBAChD,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,SAAS;gBACjC,QAAQ,EAAE,IAAI,CAAC,SAAS,IAAI,SAAS;aACtC,CAAC,CAAC;YACH,MAAM,CAAC,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC;YACzB,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,mBAAmB,EAAE;gBACpC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO;gBAC5B,gBAAgB,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS;aACnC,CAAC,CAAC;YACH,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,mBAAmB,EAAE,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,gBAAgB,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,GAAG,IAAI,CACxJ,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,QAAQ;QACZ,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE,OAAO;QAC3B,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;QAEtB,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;YACvB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACzB,CAAC;QAED,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;YACjC,CAAC;YAAC,MAAM,CAAC;gBACP,iBAAiB;YACnB,CAAC;YACD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACxB,CAAC;IACH,CAAC;IAED;;;;;;;;OAQG;IACH,qBAAqB;QACnB,IAAI,YAAY,GAAG,KAAK,CAAC;QAEzB,MAAM,OAAO,GAAG,GAAG,EAAE;YACnB,IAAI,YAAY,EAAE,CAAC;gBACjB,gDAAgD;gBAChD,cAAc,EAAE,CAAC;gBACjB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YACD,YAAY,GAAG,IAAI,CAAC;YAEpB,IAAI,CAAC,QAAQ,EAAE;iBACZ,KAAK,CAAC,GAAG,EAAE,GAAqB,CAAC,CAAC;iBAClC,OAAO,CAAC,GAAG,EAAE;gBACZ,cAAc,EAAE,CAAC;gBACjB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC,CAAC,CAAC;QACP,CAAC,CAAC;QAEF,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC9B,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAE/B,+DAA+D;QAC/D,yEAAyE;QACzE,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,cAAc,EAAE,CAAC,CAAC;IAC/C,CAAC;CACF"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jafreck/lore",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.4",
|
|
4
4
|
"description": "Language-aware codebase indexer — tree-sitter parsing, symbol extraction, call-graph construction, and optional embeddings for semantic search",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -35,6 +35,7 @@
|
|
|
35
35
|
"prepare": "npm run build",
|
|
36
36
|
"prepublishOnly": "npm run clean && npm run build",
|
|
37
37
|
"test": "vitest run",
|
|
38
|
+
"test:lsp-smoke": "vitest run tests/indexer/lsp/smoke.test.ts",
|
|
38
39
|
"coverage": "vitest run --coverage"
|
|
39
40
|
},
|
|
40
41
|
"repository": {
|
|
@@ -56,9 +57,14 @@
|
|
|
56
57
|
"access": "public"
|
|
57
58
|
},
|
|
58
59
|
"dependencies": {
|
|
60
|
+
"@elm-tooling/tree-sitter-elm": "^5.9.0",
|
|
61
|
+
"@huggingface/transformers": "^3.8.1",
|
|
59
62
|
"@modelcontextprotocol/sdk": "^1.27.1",
|
|
63
|
+
"@tree-sitter-grammars/tree-sitter-lua": "^0.4.1",
|
|
64
|
+
"@tree-sitter-grammars/tree-sitter-zig": "^1.1.2",
|
|
60
65
|
"better-sqlite3": "^12.6.2",
|
|
61
66
|
"fast-glob": "^3.3.3",
|
|
67
|
+
"node-gyp-build": "^4.8.4",
|
|
62
68
|
"simple-git": "^3.32.3",
|
|
63
69
|
"sqlite-vec": "^0.1.6",
|
|
64
70
|
"tree-sitter": "0.25.0",
|
|
@@ -66,16 +72,13 @@
|
|
|
66
72
|
"tree-sitter-c": "^0.24.1",
|
|
67
73
|
"tree-sitter-c-sharp": "^0.23.1",
|
|
68
74
|
"tree-sitter-cpp": "^0.23.4",
|
|
69
|
-
"tree-sitter-dart": "^1.0.0",
|
|
70
75
|
"tree-sitter-elixir": "^0.3.5",
|
|
71
|
-
"tree-sitter-elm": "^4.5.0",
|
|
72
76
|
"tree-sitter-go": ">=0.23.4",
|
|
73
77
|
"tree-sitter-haskell": "^0.23.1",
|
|
74
78
|
"tree-sitter-java": "^0.23.5",
|
|
75
79
|
"tree-sitter-javascript": "^0.25.0",
|
|
76
80
|
"tree-sitter-julia": "^0.23.1",
|
|
77
81
|
"tree-sitter-kotlin": "^0.3.8",
|
|
78
|
-
"tree-sitter-lua": "^2.1.3",
|
|
79
82
|
"tree-sitter-objc": "^3.0.2",
|
|
80
83
|
"tree-sitter-ocaml": "^0.24.2",
|
|
81
84
|
"tree-sitter-php": "^0.24.2",
|
|
@@ -85,14 +88,15 @@
|
|
|
85
88
|
"tree-sitter-scala": "^0.24.0",
|
|
86
89
|
"tree-sitter-swift": "^0.7.1",
|
|
87
90
|
"tree-sitter-typescript": "^0.23.2",
|
|
88
|
-
"tree-sitter-zig": "^0.2.0",
|
|
89
91
|
"zod": "^4.3"
|
|
90
92
|
},
|
|
91
93
|
"devDependencies": {
|
|
92
94
|
"@types/better-sqlite3": "^7.6.13",
|
|
93
95
|
"@types/node": "^22",
|
|
94
96
|
"@vitest/coverage-v8": "^4.0",
|
|
97
|
+
"pyright": "^1.1.406",
|
|
95
98
|
"typescript": "^5.9",
|
|
99
|
+
"typescript-language-server": "^5.0.1",
|
|
96
100
|
"vitest": "^4.0"
|
|
97
101
|
},
|
|
98
102
|
"engines": {
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @module indexer/ensure-python-deps
|
|
3
|
-
*
|
|
4
|
-
* Validates that the Python environment has the packages required for
|
|
5
|
-
* embedding generation (`sentence-transformers`, `torch`). If missing,
|
|
6
|
-
* attempts an automatic `pip install` before the first embedding run.
|
|
7
|
-
*
|
|
8
|
-
* This is only used when `loreIndex.embeddings.enabled` is `true` in the
|
|
9
|
-
* migration config.
|
|
10
|
-
*/
|
|
11
|
-
/**
|
|
12
|
-
* Checks whether each of `REQUIRED_PACKAGES` is importable by the given Python
|
|
13
|
-
* binary. For any missing package, runs `pip install sentence-transformers`
|
|
14
|
-
* (which pulls in `torch` as a transitive dependency).
|
|
15
|
-
*
|
|
16
|
-
* Throws if the Python binary is not found or if `pip install` fails.
|
|
17
|
-
*
|
|
18
|
-
* @param pythonBin Path to the Python 3 interpreter (default: `'python3'`).
|
|
19
|
-
* @param timeout Maximum milliseconds to wait for the install (default: 5 min).
|
|
20
|
-
*/
|
|
21
|
-
export declare function ensurePythonDeps(pythonBin?: string, timeout?: number): Promise<void>;
|
|
22
|
-
//# sourceMappingURL=ensure-python-deps.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ensure-python-deps.d.ts","sourceRoot":"","sources":["../../src/indexer/ensure-python-deps.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAUH;;;;;;;;;GASG;AACH,wBAAsB,gBAAgB,CACpC,SAAS,SAAY,EACrB,OAAO,SAAa,GACnB,OAAO,CAAC,IAAI,CAAC,CAyBf"}
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @module indexer/ensure-python-deps
|
|
3
|
-
*
|
|
4
|
-
* Validates that the Python environment has the packages required for
|
|
5
|
-
* embedding generation (`sentence-transformers`, `torch`). If missing,
|
|
6
|
-
* attempts an automatic `pip install` before the first embedding run.
|
|
7
|
-
*
|
|
8
|
-
* This is only used when `loreIndex.embeddings.enabled` is `true` in the
|
|
9
|
-
* migration config.
|
|
10
|
-
*/
|
|
11
|
-
import { execFile } from 'node:child_process';
|
|
12
|
-
import { promisify } from 'node:util';
|
|
13
|
-
const execFileAsync = promisify(execFile);
|
|
14
|
-
/** Python packages required by the sentence-transformers embedding provider. */
|
|
15
|
-
const REQUIRED_PACKAGES = ['sentence_transformers', 'torch'];
|
|
16
|
-
/**
|
|
17
|
-
* Checks whether each of `REQUIRED_PACKAGES` is importable by the given Python
|
|
18
|
-
* binary. For any missing package, runs `pip install sentence-transformers`
|
|
19
|
-
* (which pulls in `torch` as a transitive dependency).
|
|
20
|
-
*
|
|
21
|
-
* Throws if the Python binary is not found or if `pip install` fails.
|
|
22
|
-
*
|
|
23
|
-
* @param pythonBin Path to the Python 3 interpreter (default: `'python3'`).
|
|
24
|
-
* @param timeout Maximum milliseconds to wait for the install (default: 5 min).
|
|
25
|
-
*/
|
|
26
|
-
export async function ensurePythonDeps(pythonBin = 'python3', timeout = 5 * 60_000) {
|
|
27
|
-
// Probe which packages are already available.
|
|
28
|
-
const missing = [];
|
|
29
|
-
for (const pkg of REQUIRED_PACKAGES) {
|
|
30
|
-
try {
|
|
31
|
-
await execFileAsync(pythonBin, ['-c', `import ${pkg}`], { timeout: 10_000 });
|
|
32
|
-
}
|
|
33
|
-
catch {
|
|
34
|
-
missing.push(pkg);
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
if (missing.length === 0)
|
|
38
|
-
return;
|
|
39
|
-
// `sentence-transformers` transitively installs torch, so a single pip
|
|
40
|
-
// install call is sufficient.
|
|
41
|
-
await execFileAsync(pythonBin, ['-m', 'pip', 'install', '--quiet', 'sentence-transformers'], { timeout });
|
|
42
|
-
// Verify the install succeeded.
|
|
43
|
-
for (const pkg of REQUIRED_PACKAGES) {
|
|
44
|
-
await execFileAsync(pythonBin, ['-c', `import ${pkg}`], { timeout: 10_000 });
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
//# sourceMappingURL=ensure-python-deps.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ensure-python-deps.js","sourceRoot":"","sources":["../../src/indexer/ensure-python-deps.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,MAAM,aAAa,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;AAE1C,gFAAgF;AAChF,MAAM,iBAAiB,GAAG,CAAC,uBAAuB,EAAE,OAAO,CAAC,CAAC;AAE7D;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,SAAS,GAAG,SAAS,EACrB,OAAO,GAAG,CAAC,GAAG,MAAM;IAEpB,8CAA8C;IAC9C,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,KAAK,MAAM,GAAG,IAAI,iBAAiB,EAAE,CAAC;QACpC,IAAI,CAAC;YACH,MAAM,aAAa,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,UAAU,GAAG,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;QAC/E,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACpB,CAAC;IACH,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAEjC,uEAAuE;IACvE,8BAA8B;IAC9B,MAAM,aAAa,CACjB,SAAS,EACT,CAAC,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,uBAAuB,CAAC,EAC5D,EAAE,OAAO,EAAE,CACZ,CAAC;IAEF,gCAAgC;IAChC,KAAK,MAAM,GAAG,IAAI,iBAAiB,EAAE,CAAC;QACpC,MAAM,aAAa,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,UAAU,GAAG,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;IAC/E,CAAC;AACH,CAAC"}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @module indexer/extractors/dart
|
|
3
|
-
*
|
|
4
|
-
* Dart language extractor. Extracts function declarations, class/mixin/enum/
|
|
5
|
-
* extension declarations, method declarations, and import directives.
|
|
6
|
-
*/
|
|
7
|
-
import type Parser from 'tree-sitter';
|
|
8
|
-
import { type ExtractionResult, type SymbolExtractor } from './types.js';
|
|
9
|
-
export declare class DartExtractor implements SymbolExtractor {
|
|
10
|
-
extract(tree: Parser.Tree, _source: string, _filePath: string): ExtractionResult;
|
|
11
|
-
}
|
|
12
|
-
//# sourceMappingURL=dart.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"dart.d.ts","sourceRoot":"","sources":["../../../src/indexer/extractors/dart.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AACtC,OAAO,EACL,KAAK,gBAAgB,EAOrB,KAAK,eAAe,EAMrB,MAAM,YAAY,CAAC;AAWpB,qBAAa,aAAc,YAAW,eAAe;IACnD,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,gBAAgB;CA8DjF"}
|
|
@@ -1,213 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @module indexer/extractors/dart
|
|
3
|
-
*
|
|
4
|
-
* Dart language extractor. Extracts function declarations, class/mixin/enum/
|
|
5
|
-
* extension declarations, method declarations, and import directives.
|
|
6
|
-
*/
|
|
7
|
-
import { createTypeRefEmitter, emptyResult, findEnclosingSymbolName, nodeSignature, walk, } from './types.js';
|
|
8
|
-
const DART_SYMBOL_NODE_TYPES = [
|
|
9
|
-
'function_declaration',
|
|
10
|
-
'function_signature',
|
|
11
|
-
'method_signature',
|
|
12
|
-
'class_definition',
|
|
13
|
-
];
|
|
14
|
-
// ─── DartExtractor ────────────────────────────────────────────────────────────
|
|
15
|
-
export class DartExtractor {
|
|
16
|
-
extract(tree, _source, _filePath) {
|
|
17
|
-
const result = emptyResult();
|
|
18
|
-
for (const node of walk(tree.rootNode)) {
|
|
19
|
-
switch (node.type) {
|
|
20
|
-
case 'function_signature':
|
|
21
|
-
case 'function_declaration':
|
|
22
|
-
result.symbols.push(extractFunction(node));
|
|
23
|
-
extractDartFunctionTypeRefs(node, result.typeRefs);
|
|
24
|
-
break;
|
|
25
|
-
case 'method_signature':
|
|
26
|
-
result.symbols.push(extractFunction(node));
|
|
27
|
-
extractDartFunctionTypeRefs(node, result.typeRefs);
|
|
28
|
-
break;
|
|
29
|
-
case 'class_definition':
|
|
30
|
-
result.symbols.push(extractNamedNode(node, 'class'));
|
|
31
|
-
extractDartInheritance(node, result.relationships, result.typeRefs);
|
|
32
|
-
extractDartClassFieldTypeRefs(node, result.typeRefs);
|
|
33
|
-
break;
|
|
34
|
-
case 'mixin_declaration':
|
|
35
|
-
result.symbols.push(extractNamedNode(node, 'mixin'));
|
|
36
|
-
break;
|
|
37
|
-
case 'enum_declaration':
|
|
38
|
-
result.symbols.push(extractNamedNode(node, 'enum'));
|
|
39
|
-
break;
|
|
40
|
-
case 'extension_declaration':
|
|
41
|
-
result.symbols.push(extractNamedNode(node, 'extension'));
|
|
42
|
-
break;
|
|
43
|
-
case 'import_or_export':
|
|
44
|
-
result.imports.push(extractImport(node));
|
|
45
|
-
break;
|
|
46
|
-
// Dart uses several node types for calls depending on the grammar version
|
|
47
|
-
case 'function_expression_invocation':
|
|
48
|
-
case 'method_invocation': {
|
|
49
|
-
const ref = extractCallRef(node);
|
|
50
|
-
if (ref)
|
|
51
|
-
result.callRefs.push(ref);
|
|
52
|
-
break;
|
|
53
|
-
}
|
|
54
|
-
case 'initialized_variable_definition': {
|
|
55
|
-
extractDartVarTypeRef(node, result.typeRefs);
|
|
56
|
-
break;
|
|
57
|
-
}
|
|
58
|
-
case 'as_expression': {
|
|
59
|
-
extractDartCastTypeRef(node, result.typeRefs);
|
|
60
|
-
break;
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
// Fallback: scan all nodes for unvisited call-like patterns
|
|
65
|
-
for (const node of walk(tree.rootNode)) {
|
|
66
|
-
if (node.type === 'identifier'
|
|
67
|
-
&& node.parent?.type === 'selector'
|
|
68
|
-
&& node.parent.parent?.type === 'assignable_expression') {
|
|
69
|
-
// method call via cascade or chain
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
return result;
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
// ─── Helpers ──────────────────────────────────────────────────────────────────
|
|
76
|
-
function extractFunction(node) {
|
|
77
|
-
const nameNode = node.childForFieldName('name') ??
|
|
78
|
-
node.namedChildren.find(c => c.type === 'identifier');
|
|
79
|
-
return {
|
|
80
|
-
name: nameNode?.text ?? '',
|
|
81
|
-
kind: 'function',
|
|
82
|
-
startLine: node.startPosition.row,
|
|
83
|
-
endLine: node.endPosition.row,
|
|
84
|
-
signature: nodeSignature(node),
|
|
85
|
-
};
|
|
86
|
-
}
|
|
87
|
-
function extractNamedNode(node, kind) {
|
|
88
|
-
const nameNode = node.childForFieldName('name') ??
|
|
89
|
-
node.namedChildren.find(c => c.type === 'identifier');
|
|
90
|
-
return {
|
|
91
|
-
name: nameNode?.text ?? '',
|
|
92
|
-
kind,
|
|
93
|
-
startLine: node.startPosition.row,
|
|
94
|
-
endLine: node.endPosition.row,
|
|
95
|
-
signature: nodeSignature(node),
|
|
96
|
-
};
|
|
97
|
-
}
|
|
98
|
-
function extractCallRef(node) {
|
|
99
|
-
const fnNode = node.childForFieldName('function') ?? node.childForFieldName('name');
|
|
100
|
-
if (!fnNode)
|
|
101
|
-
return null;
|
|
102
|
-
return {
|
|
103
|
-
callerSymbol: findEnclosingSymbolName(node, DART_SYMBOL_NODE_TYPES),
|
|
104
|
-
calleeRaw: fnNode.text,
|
|
105
|
-
line: node.startPosition.row,
|
|
106
|
-
character: node.startPosition.column,
|
|
107
|
-
};
|
|
108
|
-
}
|
|
109
|
-
function extractImport(node) {
|
|
110
|
-
// `import 'package:foo/bar.dart';` or `export 'package:foo/bar.dart';`
|
|
111
|
-
const text = node.text
|
|
112
|
-
.replace(/^(import|export)\s+/, '')
|
|
113
|
-
.replace(/\s*;?\s*$/, '')
|
|
114
|
-
.trim();
|
|
115
|
-
// Strip quotes
|
|
116
|
-
const source = text.replace(/^['"]|['"]$/g, '').split(/\s/)[0] ?? '';
|
|
117
|
-
// Check for `show` / `hide` clauses
|
|
118
|
-
const importedNames = [];
|
|
119
|
-
const showMatch = text.match(/show\s+([\w,\s]+)/);
|
|
120
|
-
if (showMatch) {
|
|
121
|
-
importedNames.push(...showMatch[1].split(',').map(s => s.trim()).filter(Boolean));
|
|
122
|
-
}
|
|
123
|
-
return { source, importedNames };
|
|
124
|
-
}
|
|
125
|
-
// ─── Inheritance / type-ref extraction ─────────────────────────────────────────
|
|
126
|
-
function extractDartInheritance(classNode, relationships, typeRefs) {
|
|
127
|
-
const name = classNode.childForFieldName('name')?.text ??
|
|
128
|
-
classNode.namedChildren.find(c => c.type === 'identifier')?.text ?? '';
|
|
129
|
-
if (!name)
|
|
130
|
-
return;
|
|
131
|
-
for (const child of classNode.namedChildren) {
|
|
132
|
-
if (child.type === 'superclass') {
|
|
133
|
-
const typeNode = child.namedChildren[0];
|
|
134
|
-
if (typeNode) {
|
|
135
|
-
relationships.push({ kind: 'extends', fromSymbol: name, toSymbol: typeNode.text, line: typeNode.startPosition.row, character: typeNode.startPosition.column });
|
|
136
|
-
typeRefs.push({ enclosingSymbol: name, typeRaw: typeNode.text, refKind: 'bound', line: typeNode.startPosition.row, character: typeNode.startPosition.column });
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
if (child.type === 'interfaces' || child.type === 'mixins') {
|
|
140
|
-
for (const iface of child.namedChildren) {
|
|
141
|
-
if (iface.type === 'type_identifier' || iface.type === 'identifier') {
|
|
142
|
-
relationships.push({ kind: 'implements', fromSymbol: name, toSymbol: iface.text, line: iface.startPosition.row, character: iface.startPosition.column });
|
|
143
|
-
typeRefs.push({ enclosingSymbol: name, typeRaw: iface.text, refKind: 'bound', line: iface.startPosition.row, character: iface.startPosition.column });
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
}
|
|
149
|
-
function extractDartTypeName(typeNode) {
|
|
150
|
-
if (typeNode.type === 'type_identifier' || typeNode.type === 'identifier')
|
|
151
|
-
return typeNode.text;
|
|
152
|
-
if (typeNode.type === 'type_name')
|
|
153
|
-
return typeNode.text;
|
|
154
|
-
return null;
|
|
155
|
-
}
|
|
156
|
-
const emitDartTypeRef = createTypeRefEmitter({
|
|
157
|
-
extractTypeName: extractDartTypeName,
|
|
158
|
-
genericNodeType: 'type_name',
|
|
159
|
-
argListNodeType: 'type_arguments',
|
|
160
|
-
});
|
|
161
|
-
function extractDartFunctionTypeRefs(funcNode, refs) {
|
|
162
|
-
const funcName = funcNode.childForFieldName('name')?.text ??
|
|
163
|
-
funcNode.namedChildren.find(c => c.type === 'identifier')?.text ?? '';
|
|
164
|
-
// Return type
|
|
165
|
-
const returnType = funcNode.childForFieldName('type') ?? funcNode.namedChildren.find(c => c.type === 'type_identifier' || c.type === 'type_name');
|
|
166
|
-
if (returnType) {
|
|
167
|
-
emitDartTypeRef(refs, funcName, returnType, 'return');
|
|
168
|
-
}
|
|
169
|
-
// Parameters
|
|
170
|
-
const params = funcNode.namedChildren.find(c => c.type === 'formal_parameter_list');
|
|
171
|
-
if (params) {
|
|
172
|
-
for (const param of params.namedChildren) {
|
|
173
|
-
const typeNode = param.namedChildren.find(c => c.type === 'type_identifier');
|
|
174
|
-
if (typeNode) {
|
|
175
|
-
emitDartTypeRef(refs, funcName, typeNode, 'parameter');
|
|
176
|
-
}
|
|
177
|
-
}
|
|
178
|
-
}
|
|
179
|
-
}
|
|
180
|
-
function extractDartClassFieldTypeRefs(classNode, refs) {
|
|
181
|
-
const className = classNode.childForFieldName('name')?.text ??
|
|
182
|
-
classNode.namedChildren.find(c => c.type === 'identifier')?.text ?? '';
|
|
183
|
-
const body = classNode.childForFieldName('body') ?? classNode.namedChildren.find(c => c.type === 'class_body');
|
|
184
|
-
if (!body)
|
|
185
|
-
return;
|
|
186
|
-
// Only walk direct children of the class body — avoid recursing into nested classes
|
|
187
|
-
for (const child of body.namedChildren) {
|
|
188
|
-
if (child.type === 'class_definition')
|
|
189
|
-
continue; // skip nested classes
|
|
190
|
-
if (child.type === 'initialized_variable_definition' || child.type === 'declaration') {
|
|
191
|
-
const typeNode = child.namedChildren.find(c => c.type === 'type_identifier');
|
|
192
|
-
if (typeNode) {
|
|
193
|
-
emitDartTypeRef(refs, className, typeNode, 'field');
|
|
194
|
-
}
|
|
195
|
-
}
|
|
196
|
-
}
|
|
197
|
-
}
|
|
198
|
-
function extractDartVarTypeRef(node, refs) {
|
|
199
|
-
const typeNode = node.namedChildren.find(c => c.type === 'type_identifier');
|
|
200
|
-
if (!typeNode)
|
|
201
|
-
return;
|
|
202
|
-
const enclosing = findEnclosingSymbolName(node, DART_SYMBOL_NODE_TYPES);
|
|
203
|
-
emitDartTypeRef(refs, enclosing, typeNode, 'variable');
|
|
204
|
-
}
|
|
205
|
-
function extractDartCastTypeRef(node, refs) {
|
|
206
|
-
// expr as Type
|
|
207
|
-
const typeNode = node.namedChildren.find(c => c.type === 'type_identifier');
|
|
208
|
-
if (!typeNode)
|
|
209
|
-
return;
|
|
210
|
-
const enclosing = findEnclosingSymbolName(node, DART_SYMBOL_NODE_TYPES);
|
|
211
|
-
emitDartTypeRef(refs, enclosing, typeNode, 'cast');
|
|
212
|
-
}
|
|
213
|
-
//# sourceMappingURL=dart.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"dart.js","sourceRoot":"","sources":["../../../src/indexer/extractors/dart.ts"],"names":[],"mappings":"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"}
|