@backbencher/brain 0.0.0-stage → 0.1.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/CHANGELOG.md +298 -0
- package/EMBEDDINGS.md +355 -0
- package/LICENSE +21 -0
- package/README.md +415 -2
- package/bin/bb +13 -0
- package/dist/analysis-exclusions-7ZJDXOVZ.js +35 -0
- package/dist/brain-index-health-Q5APTJQL.js +17 -0
- package/dist/brain-relationship-enrichment-MYR2AM4F.js +558 -0
- package/dist/brain.sql-EIM4WS4D.js +29 -0
- package/dist/chunk-22V37YTK.js +1758 -0
- package/dist/chunk-2BSKD7O3.js +40 -0
- package/dist/chunk-2DE27DVC.js +1314 -0
- package/dist/chunk-2RRBMNBQ.js +322 -0
- package/dist/chunk-2WXYNLBA.js +29 -0
- package/dist/chunk-3CTFIJJB.js +17 -0
- package/dist/chunk-3ZTOHHSW.js +2104 -0
- package/dist/chunk-4H22TLOT.js +543 -0
- package/dist/chunk-5BVAH26D.js +340 -0
- package/dist/chunk-62DHLYW6.js +3427 -0
- package/dist/chunk-7AN7U5IZ.js +371 -0
- package/dist/chunk-7DRPNVIN.js +782 -0
- package/dist/chunk-7MBYT777.js +174 -0
- package/dist/chunk-AHDWGM7Q.js +236 -0
- package/dist/chunk-B5GEAAYF.js +818 -0
- package/dist/chunk-BEIZZ73B.js +1479 -0
- package/dist/chunk-BQ3OVQ3P.js +125 -0
- package/dist/chunk-D2Q4Y47A.js +53 -0
- package/dist/chunk-DIYAGQJL.js +34 -0
- package/dist/chunk-DWKXZ6IF.js +336 -0
- package/dist/chunk-DYM4FQEE.js +90 -0
- package/dist/chunk-ENW4BTBA.js +930 -0
- package/dist/chunk-EWMWK7WN.js +75 -0
- package/dist/chunk-EY5ZZUUA.js +626 -0
- package/dist/chunk-GBI7V7KY.js +69 -0
- package/dist/chunk-GEFFO6O2.js +152 -0
- package/dist/chunk-HJEWO5EV.js +247 -0
- package/dist/chunk-HQSPJDHI.js +613 -0
- package/dist/chunk-KAET47ZL.js +125 -0
- package/dist/chunk-KCDECRJY.js +440 -0
- package/dist/chunk-L5TDYKYK.js +76 -0
- package/dist/chunk-MLKGABMK.js +9 -0
- package/dist/chunk-NO3U3FJQ.js +201 -0
- package/dist/chunk-OWISBAOF.js +61 -0
- package/dist/chunk-QKTRECYS.js +1119 -0
- package/dist/chunk-QLK6ED4Q.js +235 -0
- package/dist/chunk-R2GW4F6R.js +19 -0
- package/dist/chunk-RCMTFSEF.js +87 -0
- package/dist/chunk-RM3PY6TG.js +376 -0
- package/dist/chunk-ROMM6KMC.js +433 -0
- package/dist/chunk-SGGCSHAX.js +12050 -0
- package/dist/chunk-SK6YVHFZ.js +211 -0
- package/dist/chunk-SM7RFQRO.js +214 -0
- package/dist/chunk-UGR4QIGS.js +67 -0
- package/dist/chunk-UQNQZXHY.js +711 -0
- package/dist/chunk-UUNHHX4M.js +13 -0
- package/dist/chunk-VL52PL2T.js +71 -0
- package/dist/chunk-WIG36E67.js +196 -0
- package/dist/chunk-XHK3WWGB.js +7436 -0
- package/dist/chunk-XTQM2IP3.js +2863 -0
- package/dist/chunk-ZE2LG76D.js +1296 -0
- package/dist/chunk-ZETTGPAW.js +6950 -0
- package/dist/cli/index.js +37 -0
- package/dist/config-HZAAYDP3.js +10 -0
- package/dist/content-search-7XIP555Q.js +593 -0
- package/dist/database-76RP44JG.js +9 -0
- package/dist/doctor-ANGETYMN.js +395 -0
- package/dist/edit-engine-CG72LDZD.js +51 -0
- package/dist/engine-BKEOGN7N.js +11 -0
- package/dist/engine-VIW6NSKO.js +18 -0
- package/dist/fingerprint-OBLIMZLP.js +33 -0
- package/dist/framework-intelligence-3LORTPOX.js +860 -0
- package/dist/freshness-3K6VU5OT.js +174 -0
- package/dist/graph-engine-HBSQNPTB.js +21 -0
- package/dist/graph_request-Q6NKB6N2.js +350 -0
- package/dist/impact_request-LYP672WE.js +68 -0
- package/dist/index-space-IUUN5WYV.js +15 -0
- package/dist/index-status-7OVGYSGW.js +34 -0
- package/dist/index.js +159 -0
- package/dist/instance-FO6QZRLH.js +19 -0
- package/dist/language-detection-DFCAU5DZ.js +11 -0
- package/dist/lsp/server.js +4301 -0
- package/dist/mcp/server.js +132 -0
- package/dist/onboard-DIQZV2NW.js +161 -0
- package/dist/override-companion-pass-XR7MHTP7.js +117 -0
- package/dist/parallel-indexer-FK2XKZXY.js +88 -0
- package/dist/pool-worker.js +1153 -0
- package/dist/project-health-6XPENVAA.js +94 -0
- package/dist/project-index-5SDPHITE.js +57 -0
- package/dist/project-registry-ZJ3DVUGO.js +355 -0
- package/dist/real-bash-analyzer-EJAU5LW5.js +2201 -0
- package/dist/real-c-analyzer-HBD3FNNH.js +5942 -0
- package/dist/real-clean-analyzer-4EEZLPV5.js +3470 -0
- package/dist/real-clojure-analyzer-Q55EBOO2.js +2818 -0
- package/dist/real-cpp-analyzer-IVVOD25R.js +4101 -0
- package/dist/real-csharp-analyzer-ZBNLNJZJ.js +3298 -0
- package/dist/real-css-analyzer-6XRQLUN7.js +15 -0
- package/dist/real-dart-analyzer-OLR72EFW.js +3944 -0
- package/dist/real-elixir-analyzer-MQWGAH2I.js +2192 -0
- package/dist/real-erlang-analyzer-7BVPQEHO.js +1731 -0
- package/dist/real-fsharp-analyzer-C2UPFNOA.js +2390 -0
- package/dist/real-go-analyzer-UKGI43YS.js +4126 -0
- package/dist/real-graphql-analyzer-VE2EEFII.js +1442 -0
- package/dist/real-groovy-analyzer-W26VACFW.js +2285 -0
- package/dist/real-haskell-analyzer-5CVVAJRX.js +2533 -0
- package/dist/real-hcl-analyzer-5ZT4U43N.js +725 -0
- package/dist/real-html-analyzer-JWNX3C6I.js +1759 -0
- package/dist/real-java-analyzer-GU42VBGQ.js +4677 -0
- package/dist/real-javascript-analyzer-QA4QOJ6W.js +14 -0
- package/dist/real-json-analyzer-MPA6PRXL.js +1640 -0
- package/dist/real-julia-analyzer-22CWYQMN.js +2085 -0
- package/dist/real-kotlin-analyzer-QDZJLXXU.js +3956 -0
- package/dist/real-lua-analyzer-G7NHLYKS.js +1957 -0
- package/dist/real-makefile-analyzer-OCY3GT5N.js +920 -0
- package/dist/real-markdown-analyzer-TEJK2JXJ.js +1215 -0
- package/dist/real-matlab-analyzer-Q5SWLN7Z.js +480 -0
- package/dist/real-nim-analyzer-YLXSK563.js +3603 -0
- package/dist/real-objective-c-analyzer-D23ACC2R.js +1518 -0
- package/dist/real-perl-analyzer-WWTRHYDT.js +1865 -0
- package/dist/real-php-analyzer-JNKJHTCL.js +9368 -0
- package/dist/real-powershell-analyzer-XRSNQERV.js +2915 -0
- package/dist/real-protobuf-analyzer-3OKUCZ7T.js +867 -0
- package/dist/real-python-analyzer-VXAFWI72.js +4880 -0
- package/dist/real-r-analyzer-ZGAIDVI4.js +2596 -0
- package/dist/real-ruby-analyzer-X2KTLVBH.js +2429 -0
- package/dist/real-rust-analyzer-OFFHPL2A.js +3359 -0
- package/dist/real-scala-analyzer-TSTW27J6.js +3293 -0
- package/dist/real-scss-analyzer-AVWYPSOQ.js +1515 -0
- package/dist/real-solidity-analyzer-UCI2KWUB.js +2608 -0
- package/dist/real-sql-analyzer-F77ZMQXR.js +3840 -0
- package/dist/real-svelte-analyzer-SF7NRUO5.js +2532 -0
- package/dist/real-swift-analyzer-MN5QT3QN.js +2311 -0
- package/dist/real-toml-analyzer-66L7BDCQ.js +929 -0
- package/dist/real-typescript-analyzer-6KEMVDWQ.js +14 -0
- package/dist/real-vb-analyzer-VICVPOP7.js +3145 -0
- package/dist/real-vba-analyzer-HXLTTHKM.js +466 -0
- package/dist/real-vue-analyzer-QXR56CFV.js +2680 -0
- package/dist/real-xml-analyzer-YL465ZJW.js +2405 -0
- package/dist/real-yaml-analyzer-SUBCBNSI.js +3528 -0
- package/dist/real-zig-analyzer-HIQLZMGY.js +2430 -0
- package/dist/regex-search-NJKHMZNO.js +239 -0
- package/dist/rules-ACHPB7QU.js +152 -0
- package/dist/scoped-path-MJYWJZQX.js +11 -0
- package/dist/setup-show-NT5ZHYNE.js +15 -0
- package/dist/setup-wizard-G5YYR5T6.js +24 -0
- package/dist/symbol-search-GZJIM2J2.js +16 -0
- package/dist/taint-KXUHHPIE.js +202 -0
- package/dist/taint-analyzer-N7YLZU3N.js +163 -0
- package/dist/tool-handlers-OJDC35DI.js +72 -0
- package/dist/tool-registry-BPEJNSZG.js +17 -0
- package/dist/tool-validation-Q57YMMBX.js +32 -0
- package/dist/type-inference-QMT2RMLV.js +13 -0
- package/dist/vector-binary-LMY4QGAN.js +19 -0
- package/dist/version-ABP2TUL2.js +9 -0
- package/dist/wasm-NMWO3WXY.js +16 -0
- package/docs/EMBEDDINGS.md +132 -0
- package/docs/README.md +178 -0
- package/docs/data/m10-baseline.json +602 -0
- package/docs/data/m10-benchmark-baseline.json +57 -0
- package/docs/data/m10-benchmark-last-run.json +127 -0
- package/docs/data/m10-final-audit.json +215 -0
- package/docs/data/m12-final-audit.json +138 -0
- package/docs/data/m12-surface-matrix.json +50 -0
- package/docs/data/public-tools.json +1902 -0
- package/docs/indexing/DEAD-ASSETS.md +88 -0
- package/docs/indexing/INDEXER-REVIEW.md +634 -0
- package/docs/indexing/PERFORMANCE-FINDINGS.md +106 -0
- package/docs/indexing/README.md +427 -0
- package/docs/indexing/discovery-matrix.md +41 -0
- package/docs/indexing/embeddings.md +325 -0
- package/docs/indexing/environment-variables.md +77 -0
- package/docs/indexing/performance.md +323 -0
- package/docs/indexing/resume.md +345 -0
- package/docs/indexing/troubleshooting.md +391 -0
- package/docs/man/bb.1 +190 -0
- package/docs/tools/bb_analyze.md +147 -0
- package/docs/tools/bb_annotate.md +110 -0
- package/docs/tools/bb_annotations.md +106 -0
- package/docs/tools/bb_ask.md +101 -0
- package/docs/tools/bb_cross_language.md +103 -0
- package/docs/tools/bb_doc.md +169 -0
- package/docs/tools/bb_edit.md +185 -0
- package/docs/tools/bb_graph.md +169 -0
- package/docs/tools/bb_health.md +156 -0
- package/docs/tools/bb_impact.md +117 -0
- package/docs/tools/bb_index.md +108 -0
- package/docs/tools/bb_migrate.md +135 -0
- package/docs/tools/bb_patterns.md +140 -0
- package/docs/tools/bb_search.md +150 -0
- package/docs/tools/bb_security.md +100 -0
- package/docs/tools/bb_visualize.md +184 -0
- package/grammars/README.md +57 -0
- package/grammars/THIRD-PARTY-NOTICES.md +50 -0
- package/grammars/tree-sitter-c/LICENSE +21 -0
- package/grammars/tree-sitter-clojure/LICENSE.md +21 -0
- package/grammars/tree-sitter-cpp/LICENSE +21 -0
- package/grammars/tree-sitter-csharp/LICENSE +21 -0
- package/grammars/tree-sitter-css/LICENSE +21 -0
- package/grammars/tree-sitter-css/README.md +21 -0
- package/grammars/tree-sitter-dart/LICENSE +20 -0
- package/grammars/tree-sitter-dart-upstream/LICENSE +20 -0
- package/grammars/tree-sitter-dart-upstream/README.md +18 -0
- package/grammars/tree-sitter-elixir/LICENSE +176 -0
- package/grammars/tree-sitter-elixir/README.md +11 -0
- package/grammars/tree-sitter-fsharp/LICENSE +21 -0
- package/grammars/tree-sitter-fsharp/README.md +45 -0
- package/grammars/tree-sitter-graphql/LICENSE +21 -0
- package/grammars/tree-sitter-graphql/README.md +106 -0
- package/grammars/tree-sitter-groovy/LICENSE +21 -0
- package/grammars/tree-sitter-groovy/README.md +4 -0
- package/grammars/tree-sitter-haskell/LICENSE +21 -0
- package/grammars/tree-sitter-haskell/README.md +394 -0
- package/grammars/tree-sitter-hcl/CHANGELOG.md +102 -0
- package/grammars/tree-sitter-hcl/LICENSE +201 -0
- package/grammars/tree-sitter-hcl/README.md +39 -0
- package/grammars/tree-sitter-html/LICENSE +21 -0
- package/grammars/tree-sitter-html/README.md +21 -0
- package/grammars/tree-sitter-julia/LICENSE +21 -0
- package/grammars/tree-sitter-julia/README.md +24 -0
- package/grammars/tree-sitter-kotlin/LICENSE +9 -0
- package/grammars/tree-sitter-lua/LICENSE.md +21 -0
- package/grammars/tree-sitter-lua/README.md +29 -0
- package/grammars/tree-sitter-make/LICENSE +21 -0
- package/grammars/tree-sitter-matlab/LICENSE +19 -0
- package/grammars/tree-sitter-matlab/README.md +99 -0
- package/grammars/tree-sitter-nim/LICENSE +373 -0
- package/grammars/tree-sitter-nim/README.md +46 -0
- package/grammars/tree-sitter-objc/LICENSE +21 -0
- package/grammars/tree-sitter-objc/README.md +20 -0
- package/grammars/tree-sitter-perl/LICENSE +7 -0
- package/grammars/tree-sitter-perl/README.md +100 -0
- package/grammars/tree-sitter-powershell/LICENSE +21 -0
- package/grammars/tree-sitter-powershell/README.md +7 -0
- package/grammars/tree-sitter-proto/LICENSE +21 -0
- package/grammars/tree-sitter-proto/README.md +105 -0
- package/grammars/tree-sitter-r/LICENSE +9 -0
- package/grammars/tree-sitter-r/README.md +66 -0
- package/grammars/tree-sitter-ruby/LICENSE +22 -0
- package/grammars/tree-sitter-scss/LICENSE +21 -0
- package/grammars/tree-sitter-scss/README.md +17 -0
- package/grammars/tree-sitter-solidity/LICENSE +7 -0
- package/grammars/tree-sitter-sql/LICENSE +21 -0
- package/grammars/tree-sitter-typescript/LICENSE +21 -0
- package/grammars/tree-sitter-vba/LICENSE +21 -0
- package/grammars/tree-sitter-vba/README.md +738 -0
- package/grammars/tree-sitter-vbnet/LICENSE +21 -0
- package/grammars/tree-sitter-vbnet/README.md +322 -0
- package/grammars/tree-sitter-xml/LICENSE +19 -0
- package/grammars/tree-sitter-yaml/LICENSE +20 -0
- package/grammars/tree-sitter-yaml/README.md +21 -0
- package/package.json +184 -4
- package/wasm/dart.wasm +0 -0
- package/wasm/tree-sitter-bash.wasm +0 -0
- package/wasm/tree-sitter-c.wasm +0 -0
- package/wasm/tree-sitter-c_sharp.wasm +0 -0
- package/wasm/tree-sitter-clean.wasm +0 -0
- package/wasm/tree-sitter-clojure.wasm +0 -0
- package/wasm/tree-sitter-core_schema.wasm +0 -0
- package/wasm/tree-sitter-cpp.wasm +0 -0
- package/wasm/tree-sitter-css.wasm +0 -0
- package/wasm/tree-sitter-dart.wasm +0 -0
- package/wasm/tree-sitter-elisp.wasm +0 -0
- package/wasm/tree-sitter-elixir.wasm +0 -0
- package/wasm/tree-sitter-elm.wasm +0 -0
- package/wasm/tree-sitter-embedded_template.wasm +0 -0
- package/wasm/tree-sitter-erlang.wasm +0 -0
- package/wasm/tree-sitter-fsharp.wasm +0 -0
- package/wasm/tree-sitter-fsharp_signature.wasm +0 -0
- package/wasm/tree-sitter-go.wasm +0 -0
- package/wasm/tree-sitter-graphql.wasm +0 -0
- package/wasm/tree-sitter-groovy.wasm +0 -0
- package/wasm/tree-sitter-haskell.wasm +0 -0
- package/wasm/tree-sitter-hcl.wasm +0 -0
- package/wasm/tree-sitter-html.wasm +0 -0
- package/wasm/tree-sitter-java.wasm +0 -0
- package/wasm/tree-sitter-javascript.wasm +0 -0
- package/wasm/tree-sitter-json.wasm +0 -0
- package/wasm/tree-sitter-json_schema.wasm +0 -0
- package/wasm/tree-sitter-julia.wasm +0 -0
- package/wasm/tree-sitter-kotlin.wasm +0 -0
- package/wasm/tree-sitter-lua.wasm +0 -0
- package/wasm/tree-sitter-make.wasm +0 -0
- package/wasm/tree-sitter-markdown.wasm +0 -0
- package/wasm/tree-sitter-markdown_inline.wasm +0 -0
- package/wasm/tree-sitter-matlab.wasm +0 -0
- package/wasm/tree-sitter-nim.wasm +0 -0
- package/wasm/tree-sitter-objc.wasm +0 -0
- package/wasm/tree-sitter-ocaml.wasm +0 -0
- package/wasm/tree-sitter-perl.wasm +0 -0
- package/wasm/tree-sitter-php.wasm +0 -0
- package/wasm/tree-sitter-php_only.wasm +0 -0
- package/wasm/tree-sitter-powershell.wasm +0 -0
- package/wasm/tree-sitter-protobuf.wasm +0 -0
- package/wasm/tree-sitter-python.wasm +0 -0
- package/wasm/tree-sitter-ql.wasm +0 -0
- package/wasm/tree-sitter-r.wasm +0 -0
- package/wasm/tree-sitter-rescript.wasm +0 -0
- package/wasm/tree-sitter-ruby.wasm +0 -0
- package/wasm/tree-sitter-rust.wasm +0 -0
- package/wasm/tree-sitter-scala.wasm +0 -0
- package/wasm/tree-sitter-scss.wasm +0 -0
- package/wasm/tree-sitter-solidity.wasm +0 -0
- package/wasm/tree-sitter-sql.wasm +0 -0
- package/wasm/tree-sitter-svelte.wasm +0 -0
- package/wasm/tree-sitter-swift.wasm +0 -0
- package/wasm/tree-sitter-systemrdl.wasm +0 -0
- package/wasm/tree-sitter-terraform.wasm +0 -0
- package/wasm/tree-sitter-tlaplus.wasm +0 -0
- package/wasm/tree-sitter-toml.wasm +0 -0
- package/wasm/tree-sitter-tsx.wasm +0 -0
- package/wasm/tree-sitter-typescript.wasm +0 -0
- package/wasm/tree-sitter-vba.wasm +0 -0
- package/wasm/tree-sitter-vbnet.wasm +0 -0
- package/wasm/tree-sitter-vue.wasm +0 -0
- package/wasm/tree-sitter-xml.wasm +0 -0
- package/wasm/tree-sitter-yaml.wasm +0 -0
- package/wasm/tree-sitter-zig.wasm +0 -0
- package/wasm/tree-sitter.wasm +0 -0
- package/wasm/tsx.wasm +0 -0
- package/wasm/typescript.wasm +0 -0
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
import {
|
|
2
|
+
BrainDatabase
|
|
3
|
+
} from "./chunk-QKTRECYS.js";
|
|
4
|
+
import {
|
|
5
|
+
bbDataDir
|
|
6
|
+
} from "./chunk-2BSKD7O3.js";
|
|
7
|
+
|
|
8
|
+
// src/ast/index-status.ts
|
|
9
|
+
import {
|
|
10
|
+
mkdirSync,
|
|
11
|
+
writeFileSync,
|
|
12
|
+
readFileSync,
|
|
13
|
+
existsSync,
|
|
14
|
+
rmSync,
|
|
15
|
+
renameSync,
|
|
16
|
+
openSync,
|
|
17
|
+
fsyncSync,
|
|
18
|
+
closeSync
|
|
19
|
+
} from "fs";
|
|
20
|
+
import path from "path";
|
|
21
|
+
var INDEX_STATUS_SCHEMA_VERSION = 2;
|
|
22
|
+
var INDEX_RUN_PHASES = ["indexing", "post-processing", "complete", "failed", "cancelled"];
|
|
23
|
+
var RESUMABLE_PHASES = ["indexing", "cancelled"];
|
|
24
|
+
var TERMINAL_PHASES = ["complete", "failed", "cancelled"];
|
|
25
|
+
function statusPath(projectId) {
|
|
26
|
+
return path.join(bbDataDir(), "status", `${projectId}.json`);
|
|
27
|
+
}
|
|
28
|
+
function statusTempPath(projectId) {
|
|
29
|
+
return `${statusPath(projectId)}.tmp`;
|
|
30
|
+
}
|
|
31
|
+
function writeStatusAtomically(projectId, contents) {
|
|
32
|
+
const target = statusPath(projectId);
|
|
33
|
+
const tmp = statusTempPath(projectId);
|
|
34
|
+
mkdirSync(path.dirname(target), { recursive: true });
|
|
35
|
+
writeFileSync(tmp, contents);
|
|
36
|
+
if (process.env.BB_STATUS_FSYNC === "1") {
|
|
37
|
+
try {
|
|
38
|
+
const fd = openSync(tmp, "r");
|
|
39
|
+
try {
|
|
40
|
+
fsyncSync(fd);
|
|
41
|
+
} finally {
|
|
42
|
+
closeSync(fd);
|
|
43
|
+
}
|
|
44
|
+
} catch {
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
renameSync(tmp, target);
|
|
48
|
+
}
|
|
49
|
+
function writeLiveStatus(projectId, live) {
|
|
50
|
+
try {
|
|
51
|
+
writeStatusAtomically(projectId, JSON.stringify({ ...live, schemaVersion: INDEX_STATUS_SCHEMA_VERSION, updatedAt: Date.now() }));
|
|
52
|
+
} catch {
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
function readIndexCheckpoint(projectId) {
|
|
56
|
+
const file = statusPath(projectId);
|
|
57
|
+
let raw;
|
|
58
|
+
try {
|
|
59
|
+
if (!existsSync(file)) {
|
|
60
|
+
return { integrity: "missing", file, problem: "no status file: this project has no recorded index run" };
|
|
61
|
+
}
|
|
62
|
+
raw = readFileSync(file, "utf8");
|
|
63
|
+
} catch (e) {
|
|
64
|
+
return { integrity: "corrupt", file, problem: `status file could not be read: ${e?.message ?? e}` };
|
|
65
|
+
}
|
|
66
|
+
if (raw.trim() === "") {
|
|
67
|
+
return { integrity: "corrupt", file, problem: "status file is empty \u2014 a run was interrupted while writing it" };
|
|
68
|
+
}
|
|
69
|
+
let parsed;
|
|
70
|
+
try {
|
|
71
|
+
parsed = JSON.parse(raw);
|
|
72
|
+
} catch (e) {
|
|
73
|
+
return { integrity: "corrupt", file, problem: `status file is not valid JSON (${e?.message ?? e}) \u2014 a run was interrupted while writing it` };
|
|
74
|
+
}
|
|
75
|
+
if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) {
|
|
76
|
+
return { integrity: "corrupt", file, problem: "status file is not a status document" };
|
|
77
|
+
}
|
|
78
|
+
const version = typeof parsed.schemaVersion === "number" ? parsed.schemaVersion : 1;
|
|
79
|
+
if (version > INDEX_STATUS_SCHEMA_VERSION) {
|
|
80
|
+
return {
|
|
81
|
+
integrity: "future-schema",
|
|
82
|
+
file,
|
|
83
|
+
problem: `status file schema v${version} is newer than this bb understands (v${INDEX_STATUS_SCHEMA_VERSION}); not interpreted`
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
if (typeof parsed.phase !== "string" || typeof parsed.updatedAt !== "number") {
|
|
87
|
+
return { integrity: "incomplete", file, problem: "status file has no phase/update timestamp" };
|
|
88
|
+
}
|
|
89
|
+
const status = {
|
|
90
|
+
...parsed,
|
|
91
|
+
schemaVersion: version,
|
|
92
|
+
phase: parsed.phase,
|
|
93
|
+
projectId: typeof parsed.projectId === "string" ? parsed.projectId : projectId,
|
|
94
|
+
processedFiles: typeof parsed.processedFiles === "number" ? parsed.processedFiles : 0,
|
|
95
|
+
totalFiles: typeof parsed.totalFiles === "number" ? parsed.totalFiles : 0,
|
|
96
|
+
startedAt: typeof parsed.startedAt === "number" ? parsed.startedAt : parsed.updatedAt,
|
|
97
|
+
updatedAt: parsed.updatedAt
|
|
98
|
+
};
|
|
99
|
+
return { integrity: "ok", status, file };
|
|
100
|
+
}
|
|
101
|
+
function readLiveStatus(projectId) {
|
|
102
|
+
const cp = readIndexCheckpoint(projectId);
|
|
103
|
+
return cp.integrity === "ok" ? cp.status : void 0;
|
|
104
|
+
}
|
|
105
|
+
function isRunPhase(phase) {
|
|
106
|
+
return typeof phase === "string" && INDEX_RUN_PHASES.includes(phase);
|
|
107
|
+
}
|
|
108
|
+
function decideResume(projectId, opts = {}) {
|
|
109
|
+
const now = opts.now ?? Date.now();
|
|
110
|
+
const maxAgeMs = opts.maxAgeMs ?? 36e5;
|
|
111
|
+
const cp = readIndexCheckpoint(projectId);
|
|
112
|
+
if (cp.integrity === "missing") {
|
|
113
|
+
return { resumable: false, reason: "no in-progress checkpoint; running incremental (only missing/changed files)" };
|
|
114
|
+
}
|
|
115
|
+
if (cp.integrity !== "ok" || !cp.status) {
|
|
116
|
+
return {
|
|
117
|
+
resumable: false,
|
|
118
|
+
// Said plainly rather than as "no checkpoint": the file is there, and a
|
|
119
|
+
// user who was told "none" cannot tell that from a project that was
|
|
120
|
+
// never interrupted. The work is unaffected (resume is derived from the
|
|
121
|
+
// store either way), but the report should not hide a damaged file.
|
|
122
|
+
reason: `checkpoint unreadable (${cp.integrity}): ${cp.problem ?? "unknown problem"}; running incremental (only missing/changed files)`
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
const s = cp.status;
|
|
126
|
+
if (!RESUMABLE_PHASES.includes(s.phase)) {
|
|
127
|
+
return { resumable: false, reason: `checkpoint phase is "${s.phase}", not resumable; running incremental (only missing/changed files)` };
|
|
128
|
+
}
|
|
129
|
+
const age = now - s.updatedAt;
|
|
130
|
+
if (age >= maxAgeMs) {
|
|
131
|
+
return {
|
|
132
|
+
resumable: false,
|
|
133
|
+
reason: `checkpoint is ${Math.round(age / 6e4)} min old (> ${Math.round(maxAgeMs / 6e4)} min), so its counts describe a tree that has since moved; running incremental (only missing/changed files)`
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
return { resumable: true, reason: `resuming interrupted index (checkpoint: ${s.processedFiles}/${s.totalFiles} files done)` };
|
|
137
|
+
}
|
|
138
|
+
async function readLastRun(projectId) {
|
|
139
|
+
try {
|
|
140
|
+
const raw = await BrainDatabase.getRawInstance(projectId);
|
|
141
|
+
const row = raw.prepare("SELECT performance_stats FROM brain_index_status WHERE project_id = ?").get(projectId);
|
|
142
|
+
const perf = row?.performance_stats ? JSON.parse(String(row.performance_stats)) : null;
|
|
143
|
+
if (!perf || !Array.isArray(perf.runs) || perf.runs.length === 0) return void 0;
|
|
144
|
+
const r = perf.runs[perf.runs.length - 1];
|
|
145
|
+
if (!r || typeof r !== "object") return void 0;
|
|
146
|
+
return {
|
|
147
|
+
mode: r.mode,
|
|
148
|
+
phaseTimings: r.phases ?? void 0,
|
|
149
|
+
workerCount: r.counts?.workerCount ?? void 0,
|
|
150
|
+
counts: r.counts ?? void 0,
|
|
151
|
+
totalWallMs: r.phases?.totalWallMs ?? void 0,
|
|
152
|
+
postProcessing: r.postProcessingPhases ?? void 0,
|
|
153
|
+
generatedAt: r.generatedAt ?? void 0,
|
|
154
|
+
noop: r.noop ?? void 0
|
|
155
|
+
};
|
|
156
|
+
} catch {
|
|
157
|
+
return void 0;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
async function composeStatus(projectId) {
|
|
161
|
+
const checkpoint = readIndexCheckpoint(projectId);
|
|
162
|
+
const live = checkpoint.integrity === "ok" ? checkpoint.status : void 0;
|
|
163
|
+
const lastRun = await readLastRun(projectId);
|
|
164
|
+
const isRunning = !!live && !TERMINAL_PHASES.includes(live.phase) && Date.now() - live.updatedAt < 3e4;
|
|
165
|
+
const dbFileExists = existsSync(BrainDatabase.getPath(projectId));
|
|
166
|
+
const dbStats = live || lastRun || dbFileExists ? await (async () => {
|
|
167
|
+
try {
|
|
168
|
+
const { BrainDatabase: DB } = await import("./database-76RP44JG.js");
|
|
169
|
+
const r = await DB.getRawInstance(projectId);
|
|
170
|
+
const one = (sql) => r.prepare(sql).get()?.c ?? 0;
|
|
171
|
+
return { files: one("SELECT COUNT(*) c FROM brain_file"), symbols: one("SELECT COUNT(*) c FROM brain_symbol"), relationships: one("SELECT COUNT(*) c FROM brain_relationship") };
|
|
172
|
+
} catch {
|
|
173
|
+
return { files: 0, symbols: 0, relationships: 0 };
|
|
174
|
+
}
|
|
175
|
+
})() : { files: 0, symbols: 0, relationships: 0 };
|
|
176
|
+
return { hasIndex: !!(live || lastRun) || dbStats.files > 0, live, lastRun, isRunning, checkpoint, dbStats };
|
|
177
|
+
}
|
|
178
|
+
function clearStatus(projectId) {
|
|
179
|
+
for (const p of [statusPath(projectId), statusTempPath(projectId)]) {
|
|
180
|
+
try {
|
|
181
|
+
if (existsSync(p)) rmSync(p);
|
|
182
|
+
} catch {
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
export {
|
|
188
|
+
INDEX_STATUS_SCHEMA_VERSION,
|
|
189
|
+
INDEX_RUN_PHASES,
|
|
190
|
+
RESUMABLE_PHASES,
|
|
191
|
+
TERMINAL_PHASES,
|
|
192
|
+
statusPath,
|
|
193
|
+
writeLiveStatus,
|
|
194
|
+
readIndexCheckpoint,
|
|
195
|
+
readLiveStatus,
|
|
196
|
+
isRunPhase,
|
|
197
|
+
decideResume,
|
|
198
|
+
readLastRun,
|
|
199
|
+
composeStatus,
|
|
200
|
+
clearStatus
|
|
201
|
+
};
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
// src/ast/override-context.ts
|
|
2
|
+
function mergeSymbolsIntoOverrideCompanion(companion, symbols) {
|
|
3
|
+
for (const s of symbols) {
|
|
4
|
+
if (!s || !s.ownerName || !s.name) continue;
|
|
5
|
+
if (String(s.kind ?? "") !== "method") continue;
|
|
6
|
+
let declared = companion.get(s.ownerName);
|
|
7
|
+
if (!declared) {
|
|
8
|
+
declared = /* @__PURE__ */ new Set();
|
|
9
|
+
companion.set(s.ownerName, declared);
|
|
10
|
+
}
|
|
11
|
+
declared.add(s.name);
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
function buildOverrideCompanion(symbols) {
|
|
15
|
+
const companion = /* @__PURE__ */ new Map();
|
|
16
|
+
mergeSymbolsIntoOverrideCompanion(companion, symbols);
|
|
17
|
+
return companion;
|
|
18
|
+
}
|
|
19
|
+
function localEdgeLabel(fqn) {
|
|
20
|
+
let cleaned = "";
|
|
21
|
+
let depth = 0;
|
|
22
|
+
for (let i = 0; i < fqn.length; i++) {
|
|
23
|
+
const c = fqn.charCodeAt(i);
|
|
24
|
+
if (c === 40) depth++;
|
|
25
|
+
else if (c === 41) {
|
|
26
|
+
if (depth > 0) depth--;
|
|
27
|
+
} else if (depth === 0) cleaned += fqn[i];
|
|
28
|
+
}
|
|
29
|
+
const segs = cleaned.split(".").filter((s) => s.length > 0);
|
|
30
|
+
if (segs.length === 0) return "";
|
|
31
|
+
const last = segs[segs.length - 1];
|
|
32
|
+
if (segs.length < 2) return last;
|
|
33
|
+
return `${segs[segs.length - 2]}.${last}`;
|
|
34
|
+
}
|
|
35
|
+
function localEdgeName(fqn) {
|
|
36
|
+
const label = localEdgeLabel(fqn);
|
|
37
|
+
const dot = label.lastIndexOf(".");
|
|
38
|
+
return dot > 0 ? label.slice(dot + 1) : label;
|
|
39
|
+
}
|
|
40
|
+
function findDeclaringParent(methodName, startParents, companion, getParents) {
|
|
41
|
+
const queue = [...startParents];
|
|
42
|
+
const seen = /* @__PURE__ */ new Set();
|
|
43
|
+
while (queue.length > 0) {
|
|
44
|
+
const parent = queue.shift();
|
|
45
|
+
if (seen.has(parent)) continue;
|
|
46
|
+
seen.add(parent);
|
|
47
|
+
const declared = companion.get(parent);
|
|
48
|
+
if (declared && declared.has(methodName)) return parent;
|
|
49
|
+
for (const next of getParents(parent)) {
|
|
50
|
+
if (!seen.has(next)) queue.push(next);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
return null;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
export {
|
|
57
|
+
buildOverrideCompanion,
|
|
58
|
+
localEdgeLabel,
|
|
59
|
+
localEdgeName,
|
|
60
|
+
findDeclaringParent
|
|
61
|
+
};
|