gitnexus 1.6.11-rc.47 → 1.6.11-rc.48
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 +2 -1
- package/dist/_shared/integrations/circuit-breaker.d.ts.map +1 -1
- package/dist/_shared/integrations/circuit-breaker.js.map +1 -1
- package/dist/_shared/integrations/resilient-fetch.d.ts.map +1 -1
- package/dist/_shared/integrations/resilient-fetch.js.map +1 -1
- package/dist/_shared/language-detection.d.ts.map +1 -1
- package/dist/_shared/lbug/schema-constants.d.ts +2 -2
- package/dist/_shared/lbug/schema-constants.d.ts.map +1 -1
- package/dist/_shared/scope-resolution/evidence-weights.d.ts.map +1 -1
- package/dist/_shared/scope-resolution/registries/field-registry.js.map +1 -1
- package/dist/_shared/scope-resolution/registries/method-registry.js.map +1 -1
- package/dist/_shared/scope-resolution/scope-tree.d.ts.map +1 -1
- package/dist/_shared/scope-resolution/scope-tree.js.map +1 -1
- package/dist/cli/analyze-options.d.ts +2 -0
- package/dist/cli/analyze-watch.js +1 -0
- package/dist/cli/analyze.js +8 -7
- package/dist/cli/help-i18n.js +1 -0
- package/dist/cli/i18n/en.d.ts +2 -1
- package/dist/cli/i18n/en.js +2 -1
- package/dist/cli/i18n/resources.d.ts +3 -1
- package/dist/cli/i18n/zh-CN.d.ts +1 -0
- package/dist/cli/i18n/zh-CN.js +2 -1
- package/dist/cli/index.js +2 -1
- package/dist/core/ingestion/pipeline-phases/parse-impl.d.ts +2 -0
- package/dist/core/ingestion/pipeline-phases/parse-impl.js +3 -0
- package/dist/core/ingestion/pipeline.js +2 -1
- package/dist/core/run-analyze.d.ts +11 -4
- package/dist/core/run-analyze.js +137 -96
- package/dist/storage/parse-cache.d.ts +23 -3
- package/dist/storage/parse-cache.js +38 -6
- package/dist/storage/parsedfile-store.d.ts +7 -0
- package/dist/storage/parsedfile-store.js +70 -0
- package/dist/types/pipeline.d.ts +2 -0
- package/package.json +3 -2
- package/scripts/assert-web-assets.mjs +35 -0
- package/scripts/build-web.js +72 -0
- package/scripts/build.js +31 -28
package/README.md
CHANGED
|
@@ -236,7 +236,8 @@ gitnexus uninstall # Preview removal of GitNexus MCP/skills/hooks
|
|
|
236
236
|
gitnexus analyze [path] # Index a repository (or update stale index)
|
|
237
237
|
gitnexus analyze [path] --watch # Watch local files and serialize incremental refreshes
|
|
238
238
|
gitnexus analyze --repair-fts # Fast path: rebuild/verify only FTS indexes on existing index data
|
|
239
|
-
gitnexus analyze --force #
|
|
239
|
+
gitnexus analyze --force # Rebuild graph + FTS; may reuse unchanged parser output
|
|
240
|
+
gitnexus analyze --no-parse-cache # Re-parse every source file, then rebuild graph + FTS
|
|
240
241
|
gitnexus analyze --embeddings # Enable embedding generation (slower, better search)
|
|
241
242
|
gitnexus embeddings install # Fetch the optional local embedding stack on demand (--cuda, --force)
|
|
242
243
|
gitnexus analyze --skills # Generate repo-specific skill files from detected communities
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"circuit-breaker.d.ts","sourceRoot":"","sources":["../../src/integrations/circuit-breaker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgEG;AAEH,qBAAa,gBAAiB,SAAQ,KAAK;IACzC,SAAkB,IAAI,sBAAsB;IAC5C;kEAC8D;IAC9D,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"circuit-breaker.d.ts","sourceRoot":"","sources":["../../src/integrations/circuit-breaker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgEG;AAEH,qBAAa,gBAAiB,SAAQ,KAAK;IACzC,SAAkB,IAAI,sBAAsB;IAC5C;kEAC8D;IAC9D,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;gBAElB,YAAY,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM;CAQ/C;AAED,MAAM,WAAW,qBAAqB;IACpC,4DAA4D;IAC5D,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,oEAAoE;IACpE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;;;;OAOG;IACH,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,4DAA4D;IAC5D,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,gFAAgF;IAChF,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CACpB;AAED,KAAK,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,WAAW,CAAC;AAE7C,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;IAC1C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAS;IAC9C,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAqB;IACzC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAe;IAEnC,OAAO,CAAC,KAAK,CAAmB;IAChC,OAAO,CAAC,mBAAmB,CAAK;IAChC,OAAO,CAAC,QAAQ,CAAuB;IACvC;;;;;OAKG;IACH,OAAO,CAAC,aAAa,CAAS;gBAElB,IAAI,GAAE,qBAA0B;IAQ5C;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,KAAK,IAAI,IAAI;IAqBb,aAAa,IAAI,IAAI;IAOrB,aAAa,IAAI,IAAI;IASrB;;;;;;;;;;;;;;;;;;;OAmBG;IACH,aAAa,IAAI,IAAI;IAKrB;;;;;;;;;OASG;IACH,QAAQ,IAAI,KAAK;IAOjB,sBAAsB,IAAI,MAAM;IAGhC,oEAAoE;IACpE,eAAe,IAAI,OAAO;IAG1B;;mEAE+D;IAC/D,WAAW,IAAI,MAAM,GAAG,IAAI;IAG5B,oDAAoD;IACpD,aAAa,IAAI,MAAM;CAGxB;AAUD,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,qBAAqB,GAAG,cAAc,CAOpF;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,IAAI,IAAI,CAE/C"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"circuit-breaker.js","sourceRoot":"","sources":["../../src/integrations/circuit-breaker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgEG;AAEH,MAAM,OAAO,gBAAiB,SAAQ,KAAK;IACvB,IAAI,GAAG,kBAAkB,CAAC;IAC5C;kEAC8D;IACrD,YAAY,CAAS;IAE9B,YAAY,YAAoB,EAAE,GAAY;QAC5C,KAAK,CACH,GAAG;YACD,CAAC,CAAC,YAAY,GAAG,uBAAuB,IAAI,CAAC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG;YACzE,CAAC,CAAC,6BAA6B,IAAI,CAAC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,CACnE,CAAC;QACF,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;IACnC,CAAC;CACF;AAwBD,MAAM,OAAO,cAAc;IACR,gBAAgB,CAAS;IACzB,UAAU,CAAS;IACnB,oBAAoB,CAAS;IAC7B,GAAG,CAAqB;IACxB,GAAG,CAAe;IAE3B,KAAK,GAAU,QAAQ,CAAC;IACxB,mBAAmB,GAAG,CAAC,CAAC;IACxB,QAAQ,GAAkB,IAAI,CAAC;IACvC;;;;;OAKG;IACK,aAAa,GAAG,KAAK,CAAC;IAE9B,YAAY,
|
|
1
|
+
{"version":3,"file":"circuit-breaker.js","sourceRoot":"","sources":["../../src/integrations/circuit-breaker.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resilient-fetch.d.ts","sourceRoot":"","sources":["../../src/integrations/resilient-fetch.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EACL,cAAc,EACd,gBAAgB,EAEhB,KAAK,qBAAqB,EAC3B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAoB,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAEjE,OAAO,EAAE,gBAAgB,EAAE,CAAC;AAE5B,MAAM,WAAW,qBAAqB;IACpC,8EAA8E;IAC9E,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IACzB;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,2EAA2E;IAC3E,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB,kEAAkE;IAClE,cAAc,CAAC,EAAE,qBAAqB,CAAC;IACvC,yCAAyC;IACzC,KAAK,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,aAAa,GAAG,aAAa,GAAG,YAAY,CAAC,CAAC,GAAG;QAClF,gFAAgF;QAChF,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,KAAK,CAAC,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC;QAC9B,MAAM,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,CAAC;KACjC,CAAC;IACF,6EAA6E;IAC7E,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CACpB;AAED,+EAA+E;AAC/E,eAAO,MAAM,kBAAkB,QAAS,CAAC;AAQzC;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,EAAE,GAAG,GAAE,MAAM,MAAiB,GAAG,MAAM,GAAG,IAAI,CAejG;AAED,wEAAwE;AACxE,KAAK,OAAO,GACR;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,IAAI,EAAE,QAAQ,CAAA;CAAE,GACnC;IAAE,IAAI,EAAE,iBAAiB,CAAC;IAAC,IAAI,EAAE,QAAQ,CAAA;CAAE,GAC3C;IAAE,IAAI,EAAE,kBAAkB,CAAC;IAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,GACzE;IAAE,IAAI,EAAE,kBAAkB,CAAC;IAAC,GAAG,EAAE,OAAO,CAAA;CAAE,GAC1C;IAAE,IAAI,EAAE,mBAAmB,CAAC;IAAC,GAAG,EAAE,OAAO,CAAA;CAAE,CAAC;AAEhD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,OAAO,GAAG,GAAG,IAAI,YAAY,CAExE;AAED,+BAA+B;AAC/B,wBAAgB,eAAe,CAC7B,MAAM,EAAE;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,GAAG,EAAE,OAAO,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,IAAI,EAAE,QAAQ,CAAA;CAAE,EAC9E,GAAG,EAAE,MAAM,MAAM,EACjB,eAAe,SAAqB,GACnC,OAAO,CAyBT;AAcD,oEAAoE;AACpE,qBAAa,4BAA6B,SAAQ,KAAK;aAEzB,QAAQ,EAAE,QAAQ;IAD9C,SAAkB,IAAI,kCAAkC;
|
|
1
|
+
{"version":3,"file":"resilient-fetch.d.ts","sourceRoot":"","sources":["../../src/integrations/resilient-fetch.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EACL,cAAc,EACd,gBAAgB,EAEhB,KAAK,qBAAqB,EAC3B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAoB,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAEjE,OAAO,EAAE,gBAAgB,EAAE,CAAC;AAE5B,MAAM,WAAW,qBAAqB;IACpC,8EAA8E;IAC9E,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IACzB;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,2EAA2E;IAC3E,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB,kEAAkE;IAClE,cAAc,CAAC,EAAE,qBAAqB,CAAC;IACvC,yCAAyC;IACzC,KAAK,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,aAAa,GAAG,aAAa,GAAG,YAAY,CAAC,CAAC,GAAG;QAClF,gFAAgF;QAChF,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,KAAK,CAAC,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC;QAC9B,MAAM,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,CAAC;KACjC,CAAC;IACF,6EAA6E;IAC7E,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CACpB;AAED,+EAA+E;AAC/E,eAAO,MAAM,kBAAkB,QAAS,CAAC;AAQzC;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,EAAE,GAAG,GAAE,MAAM,MAAiB,GAAG,MAAM,GAAG,IAAI,CAejG;AAED,wEAAwE;AACxE,KAAK,OAAO,GACR;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,IAAI,EAAE,QAAQ,CAAA;CAAE,GACnC;IAAE,IAAI,EAAE,iBAAiB,CAAC;IAAC,IAAI,EAAE,QAAQ,CAAA;CAAE,GAC3C;IAAE,IAAI,EAAE,kBAAkB,CAAC;IAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,GACzE;IAAE,IAAI,EAAE,kBAAkB,CAAC;IAAC,GAAG,EAAE,OAAO,CAAA;CAAE,GAC1C;IAAE,IAAI,EAAE,mBAAmB,CAAC;IAAC,GAAG,EAAE,OAAO,CAAA;CAAE,CAAC;AAEhD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,OAAO,GAAG,GAAG,IAAI,YAAY,CAExE;AAED,+BAA+B;AAC/B,wBAAgB,eAAe,CAC7B,MAAM,EAAE;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,GAAG,EAAE,OAAO,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,IAAI,EAAE,QAAQ,CAAA;CAAE,EAC9E,GAAG,EAAE,MAAM,MAAM,EACjB,eAAe,SAAqB,GACnC,OAAO,CAyBT;AAcD,oEAAoE;AACpE,qBAAa,4BAA6B,SAAQ,KAAK;aAEzB,QAAQ,EAAE,QAAQ;IAD9C,SAAkB,IAAI,kCAAkC;gBAC5B,QAAQ,EAAE,QAAQ;CAG/C;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAsB,cAAc,CAClC,KAAK,EAAE,MAAM,GAAG,GAAG,EACnB,IAAI,EAAE,WAAW,GAAG,SAAS,EAC7B,IAAI,GAAE,qBAA0B,GAC/B,OAAO,CAAC,QAAQ,CAAC,CA+GnB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resilient-fetch.js","sourceRoot":"","sources":["../../src/integrations/resilient-fetch.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAEL,gBAAgB,EAChB,UAAU,GAEX,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,gBAAgB,EAAqB,MAAM,YAAY,CAAC;AAEjE,OAAO,EAAE,gBAAgB,EAAE,CAAC;AA0B5B,+EAA+E;AAC/E,MAAM,CAAC,MAAM,kBAAkB,GAAG,MAAM,CAAC;AAEzC,MAAM,aAAa,GAAG;IACpB,WAAW,EAAE,CAAC;IACd,WAAW,EAAE,GAAG;IAChB,UAAU,EAAE,KAAK;CAClB,CAAC;AAEF;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,KAAoB,EAAE,
|
|
1
|
+
{"version":3,"file":"resilient-fetch.js","sourceRoot":"","sources":["../../src/integrations/resilient-fetch.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"language-detection.d.ts","sourceRoot":"","sources":["../src/language-detection.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AA0DpD;;;;GAIG;AACH,eAAO,MAAM,uBAAuB,
|
|
1
|
+
{"version":3,"file":"language-detection.d.ts","sourceRoot":"","sources":["../src/language-detection.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AA0DpD;;;;GAIG;AACH,eAAO,MAAM,uBAAuB,GAAI,UAAU,MAAM,KAAG,OACQ,CAAC;AAEpE;;;GAGG;AACH,eAAO,MAAM,uBAAuB,GAAI,UAAU,MAAM,KAAG,kBAAkB,GAAG,IAkB/E,CAAC;AAyDF;;;;GAIG;AACH,eAAO,MAAM,6BAA6B,GAAI,UAAU,MAAM,KAAG,MAUhE,CAAC"}
|
|
@@ -7,10 +7,10 @@
|
|
|
7
7
|
* Full DDL schemas remain in each package's own schema.ts because
|
|
8
8
|
* the CLI uses native LadybugDB and the web uses WASM.
|
|
9
9
|
*/
|
|
10
|
-
export declare const NODE_TABLES: readonly [
|
|
10
|
+
export declare const NODE_TABLES: readonly ["File", "Folder", "Function", "Class", "Interface", "Method", "CodeElement", "Community", "Process", "Section", "Struct", "Enum", "Macro", "Typedef", "Union", "Namespace", "Trait", "Impl", "TypeAlias", "Const", "Static", "Variable", "Property", "Record", "Delegate", "Annotation", "Constructor", "Template", "Module", "Route", "Tool", "Destination", "BasicBlock"];
|
|
11
11
|
export type NodeTableName = (typeof NODE_TABLES)[number];
|
|
12
12
|
export declare const REL_TABLE_NAME = "CodeRelation";
|
|
13
|
-
export declare const REL_TYPES: readonly [
|
|
13
|
+
export declare const REL_TYPES: readonly ["CONTAINS", "DEFINES", "IMPORTS", "CALLS", "EXTENDS", "IMPLEMENTS", "HAS_METHOD", "HAS_PROPERTY", "ACCESSES", "METHOD_OVERRIDES", "OVERRIDES", "METHOD_IMPLEMENTS", "MEMBER_OF", "STEP_IN_PROCESS", "HANDLES_ROUTE", "PUBLISHES_TO", "CONSUMES_FROM", "FETCHES", "HANDLES_TOOL", "ENTRY_POINT_OF", "WRAPS", "QUERIES", "INJECTS", "CONDITIONAL_ON", "DECLARES", "ADVISED_BY", "CFG", "REACHING_DEF", "TAINTED", "SANITIZES", "TAINT_PATH", "CDG", "POST_DOMINATE"];
|
|
14
14
|
export type RelType = (typeof REL_TYPES)[number];
|
|
15
15
|
export declare const EMBEDDING_TABLE_NAME = "CodeEmbedding";
|
|
16
16
|
//# sourceMappingURL=schema-constants.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema-constants.d.ts","sourceRoot":"","sources":["../../src/lbug/schema-constants.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,eAAO,MAAM,WAAW,
|
|
1
|
+
{"version":3,"file":"schema-constants.d.ts","sourceRoot":"","sources":["../../src/lbug/schema-constants.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,eAAO,MAAM,WAAW,uXAoCd,CAAC;AAEX,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC;AAEzD,eAAO,MAAM,cAAc,iBAAiB,CAAC;AAE7C,eAAO,MAAM,SAAS,8cAyCZ,CAAC;AAEX,MAAM,MAAM,OAAO,GAAG,CAAC,OAAO,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC;AAEjD,eAAO,MAAM,oBAAoB,kBAAkB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"evidence-weights.d.ts","sourceRoot":"","sources":["../../src/scope-resolution/evidence-weights.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH;;;;GAIG;AACH,eAAO,MAAM,eAAe;IAE1B,sCAAsC
|
|
1
|
+
{"version":3,"file":"evidence-weights.d.ts","sourceRoot":"","sources":["../../src/scope-resolution/evidence-weights.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH;;;;GAIG;AACH,eAAO,MAAM,eAAe;IAE1B,sCAAsC;;IAEtC,uCAAuC;;IAEvC,yCAAyC;;IAEzC,0CAA0C;;IAE1C,yCAAyC;;IAIzC,uEAAuE;;IAIvE;;;;;OAKG;;IAIH,qEAAqE;;IAErE;uEACmE;;IAInE,0DAA0D;;IAE1D,uDAAuD;;IAEvD;uEACmE;;IAInE,oDAAoD;;IAEpD,4EAA4E;;IAI5E,kEAAkE;;IAIlE;;;;;;OAMG;;CAEK,CAAC;AAEX;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAKjE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"field-registry.js","sourceRoot":"","sources":["../../../src/scope-resolution/registries/field-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,EAAE,UAAU,EAAyB,MAAM,kBAAkB,CAAC;AAErE,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAW3C,MAAM,UAAU,kBAAkB,CAAC,GAAoB;IACrD,OAAO;QACL,MAAM,CAAC,IAAY,EAAE,KAAc,EAAE,
|
|
1
|
+
{"version":3,"file":"field-registry.js","sourceRoot":"","sources":["../../../src/scope-resolution/registries/field-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,EAAE,UAAU,EAAyB,MAAM,kBAAkB,CAAC;AAErE,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAW3C,MAAM,UAAU,kBAAkB,CAAC,GAAoB;IACrD,OAAO;QACL,MAAM,CAAC,IAAY,EAAE,KAAc,EAAE,UAA8B,EAAE;YACnE,MAAM,MAAM,GAAqB;gBAC/B,aAAa,EAAE,WAAW;gBAC1B,sBAAsB,EAAE,IAAI;gBAC5B,sBAAsB,EAAE,OAAO,CAAC,sBAAsB,IAAI,IAAI;gBAC9D,GAAG,CAAC,OAAO,CAAC,gBAAgB,KAAK,SAAS;oBACxC,CAAC,CAAC,EAAE,gBAAgB,EAAE,OAAO,CAAC,gBAAgB,EAAE;oBAChD,CAAC,CAAC,EAAE,CAAC;aACR,CAAC;YACF,OAAO,UAAU,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;QAC9C,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"method-registry.js","sourceRoot":"","sources":["../../../src/scope-resolution/registries/method-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,EAAE,UAAU,EAAyB,MAAM,kBAAkB,CAAC;AAErE,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAqB5C,MAAM,UAAU,mBAAmB,CAAC,GAAoB;IACtD,OAAO;QACL,MAAM,CAAC,IAAY,EAAE,KAAc,EAAE,
|
|
1
|
+
{"version":3,"file":"method-registry.js","sourceRoot":"","sources":["../../../src/scope-resolution/registries/method-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,EAAE,UAAU,EAAyB,MAAM,kBAAkB,CAAC;AAErE,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAqB5C,MAAM,UAAU,mBAAmB,CAAC,GAAoB;IACtD,OAAO;QACL,MAAM,CAAC,IAAY,EAAE,KAAc,EAAE,UAA+B,EAAE;YACpE,MAAM,MAAM,GAAqB;gBAC/B,aAAa,EAAE,YAAY;gBAC3B,sBAAsB,EAAE,IAAI;gBAC5B,sBAAsB,EAAE,OAAO,CAAC,sBAAsB,IAAI,IAAI;gBAC9D,GAAG,CAAC,OAAO,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACzE,GAAG,CAAC,OAAO,CAAC,gBAAgB,KAAK,SAAS;oBACxC,CAAC,CAAC,EAAE,gBAAgB,EAAE,OAAO,CAAC,gBAAgB,EAAE;oBAChD,CAAC,CAAC,EAAE,CAAC;aACR,CAAC;YACF,OAAO,UAAU,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;QAC9C,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scope-tree.d.ts","sourceRoot":"","sources":["../../src/scope-resolution/scope-tree.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAIrE,MAAM,WAAW,SAAU,SAAQ,WAAW;IAC5C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAE3C,QAAQ,CAAC,EAAE,EAAE,OAAO,GAAG,KAAK,GAAG,SAAS,CAAC;IACzC,SAAS,CAAC,EAAE,EAAE,OAAO,GAAG,KAAK,GAAG,SAAS,CAAC;IAC1C,4EAA4E;IAC5E,WAAW,CAAC,EAAE,EAAE,OAAO,GAAG,SAAS,OAAO,EAAE,CAAC;IAC7C;;;;OAIG;IACH,YAAY,CAAC,EAAE,EAAE,OAAO,GAAG,SAAS,OAAO,EAAE,CAAC;IAC9C,GAAG,CAAC,EAAE,EAAE,OAAO,GAAG,OAAO,CAAC;CAC3B;AAID;;;;GAIG;AACH,qBAAa,uBAAwB,SAAQ,KAAK;IAE9C,QAAQ,CAAC,SAAS,EACd,4BAA4B,GAC5B,kBAAkB,GAClB,2BAA2B,GAC3B,wBAAwB,GACxB,4BAA4B,GAC5B,oBAAoB;
|
|
1
|
+
{"version":3,"file":"scope-tree.d.ts","sourceRoot":"","sources":["../../src/scope-resolution/scope-tree.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAIrE,MAAM,WAAW,SAAU,SAAQ,WAAW;IAC5C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAE3C,QAAQ,CAAC,EAAE,EAAE,OAAO,GAAG,KAAK,GAAG,SAAS,CAAC;IACzC,SAAS,CAAC,EAAE,EAAE,OAAO,GAAG,KAAK,GAAG,SAAS,CAAC;IAC1C,4EAA4E;IAC5E,WAAW,CAAC,EAAE,EAAE,OAAO,GAAG,SAAS,OAAO,EAAE,CAAC;IAC7C;;;;OAIG;IACH,YAAY,CAAC,EAAE,EAAE,OAAO,GAAG,SAAS,OAAO,EAAE,CAAC;IAC9C,GAAG,CAAC,EAAE,EAAE,OAAO,GAAG,OAAO,CAAC;CAC3B;AAID;;;;GAIG;AACH,qBAAa,uBAAwB,SAAQ,KAAK;IAE9C,QAAQ,CAAC,SAAS,EACd,4BAA4B,GAC5B,kBAAkB,GAClB,2BAA2B,GAC3B,wBAAwB,GACxB,4BAA4B,GAC5B,oBAAoB;gBANf,SAAS,EACd,4BAA4B,GAC5B,kBAAkB,GAClB,2BAA2B,GAC3B,wBAAwB,GACxB,4BAA4B,GAC5B,oBAAoB,EACxB,OAAO,EAAE,MAAM;CAKlB;AAID;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,SAAS,KAAK,EAAE,GAAG,SAAS,CAiFlE;AA+ED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,KAAK,EACZ,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,EACxB,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,GACvB,OAAO,CAIT"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scope-tree.js","sourceRoot":"","sources":["../../src/scope-resolution/scope-tree.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAuBH,+EAA+E;AAE/E;;;;GAIG;AACH,MAAM,OAAO,uBAAwB,SAAQ,KAAK;IAErC
|
|
1
|
+
{"version":3,"file":"scope-tree.js","sourceRoot":"","sources":["../../src/scope-resolution/scope-tree.ts"],"names":[],"mappings":"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"}
|
|
@@ -20,6 +20,8 @@ export interface AnalyzeOptions {
|
|
|
20
20
|
/** Watch quiet period in milliseconds. */
|
|
21
21
|
debounce?: string;
|
|
22
22
|
force?: boolean;
|
|
23
|
+
/** Commander negated flag: false only when --no-parse-cache is passed. */
|
|
24
|
+
parseCache?: boolean;
|
|
23
25
|
repairFts?: boolean;
|
|
24
26
|
/**
|
|
25
27
|
* Embedding generation toggle. Commander parses `--embeddings [limit]` as:
|
|
@@ -64,6 +64,7 @@ export async function resolveWatchOptions(repoPath, cli, baseline, reportIgnored
|
|
|
64
64
|
const merged = mergeAnalyzeOptions(cli, config);
|
|
65
65
|
const unsupported = [
|
|
66
66
|
['--force', cli.force],
|
|
67
|
+
['--no-parse-cache', cli.parseCache === false],
|
|
67
68
|
['--repair-fts', cli.repairFts],
|
|
68
69
|
['--embeddings', cli.embeddings],
|
|
69
70
|
['--drop-embeddings', cli.dropEmbeddings],
|
package/dist/cli/analyze.js
CHANGED
|
@@ -940,9 +940,9 @@ const analyzeCommandImpl = async (inputPath, cliOptions, runnerIdentityAtBootstr
|
|
|
940
940
|
}
|
|
941
941
|
}
|
|
942
942
|
}
|
|
943
|
-
if (options.repairFts && options.force) {
|
|
944
|
-
cliError(' Cannot combine `--repair-fts` with
|
|
945
|
-
'Use `--repair-fts` for fast FTS-only repair
|
|
943
|
+
if (options.repairFts && (options.force || options.parseCache === false)) {
|
|
944
|
+
cliError(' Cannot combine `--repair-fts` with a full rebuild. ' +
|
|
945
|
+
'Use `--repair-fts` alone for fast FTS-only repair.\n');
|
|
946
946
|
process.exitCode = 1;
|
|
947
947
|
return;
|
|
948
948
|
}
|
|
@@ -1084,10 +1084,11 @@ const analyzeCommandImpl = async (inputPath, cliOptions, runnerIdentityAtBootstr
|
|
|
1084
1084
|
const skipAgentsMd = skipAll || options.skipAgentsMd;
|
|
1085
1085
|
const skipSkills = skipAll || options.skipSkills;
|
|
1086
1086
|
const runOptions = {
|
|
1087
|
-
// Pipeline re-index — OR'd with --skills because skill generation
|
|
1088
|
-
//
|
|
1089
|
-
//
|
|
1090
|
-
force: options.force || options.skills,
|
|
1087
|
+
// Pipeline re-index — OR'd with --skills because skill generation needs
|
|
1088
|
+
// a fresh pipelineResult, and with --no-parse-cache because bypassing
|
|
1089
|
+
// parser output is meaningful only when the pipeline runs.
|
|
1090
|
+
force: options.force || options.skills || options.parseCache === false,
|
|
1091
|
+
useParseCache: options.parseCache !== false,
|
|
1091
1092
|
repairFts: options.repairFts,
|
|
1092
1093
|
embeddings: embeddingsEnabled,
|
|
1093
1094
|
embeddingsNodeLimit,
|
package/dist/cli/help-i18n.js
CHANGED
|
@@ -49,6 +49,7 @@ const OPTION_DESCRIPTION_KEYS = {
|
|
|
49
49
|
'|-V, --version': 'help.option.version',
|
|
50
50
|
'setup|-c, --coding-agent <agents>': 'help.option.setup.codingAgent',
|
|
51
51
|
'analyze|-f, --force': 'help.option.analyze.force',
|
|
52
|
+
'analyze|--no-parse-cache': 'help.option.analyze.noParseCache',
|
|
52
53
|
'analyze|--repair-fts': 'help.option.analyze.repairFts',
|
|
53
54
|
'analyze|--embeddings [limit]': 'help.option.analyze.embeddings',
|
|
54
55
|
'analyze|--drop-embeddings': 'help.option.analyze.dropEmbeddings',
|
package/dist/cli/i18n/en.d.ts
CHANGED
|
@@ -163,7 +163,8 @@ export declare const en: {
|
|
|
163
163
|
readonly 'help.command.group.query.description': "Search execution flows across all repos in a group";
|
|
164
164
|
readonly 'help.command.group.contracts.description': "Inspect Contract Registry";
|
|
165
165
|
readonly 'help.option.setup.codingAgent': "Configure only these coding agents (comma-separated or repeatable)";
|
|
166
|
-
readonly 'help.option.analyze.force': "Force
|
|
166
|
+
readonly 'help.option.analyze.force': "Force graph and FTS rebuild; unchanged parser output may be reused";
|
|
167
|
+
readonly 'help.option.analyze.noParseCache': "Re-parse every source file instead of replaying cached parser output";
|
|
167
168
|
readonly 'help.option.analyze.repairFts': "Repair/rebuild search FTS indexes without full re-analysis";
|
|
168
169
|
readonly 'help.option.analyze.embeddings': "Enable embedding generation for semantic search (off by default). Optional [limit] overrides the 50,000-node safety cap; pass 0 to disable the cap entirely.";
|
|
169
170
|
readonly 'help.option.analyze.dropEmbeddings': "Drop existing embeddings on rebuild. By default, an `analyze` without `--embeddings` preserves any embeddings already present in the index.";
|
package/dist/cli/i18n/en.js
CHANGED
|
@@ -165,7 +165,8 @@ export const en = {
|
|
|
165
165
|
'help.command.group.query.description': 'Search execution flows across all repos in a group',
|
|
166
166
|
'help.command.group.contracts.description': 'Inspect Contract Registry',
|
|
167
167
|
'help.option.setup.codingAgent': 'Configure only these coding agents (comma-separated or repeatable)',
|
|
168
|
-
'help.option.analyze.force': 'Force
|
|
168
|
+
'help.option.analyze.force': 'Force graph and FTS rebuild; unchanged parser output may be reused',
|
|
169
|
+
'help.option.analyze.noParseCache': 'Re-parse every source file instead of replaying cached parser output',
|
|
169
170
|
'help.option.analyze.repairFts': 'Repair/rebuild search FTS indexes without full re-analysis',
|
|
170
171
|
'help.option.analyze.embeddings': 'Enable embedding generation for semantic search (off by default). Optional [limit] overrides the 50,000-node safety cap; pass 0 to disable the cap entirely.',
|
|
171
172
|
'help.option.analyze.dropEmbeddings': 'Drop existing embeddings on rebuild. By default, an `analyze` without `--embeddings` preserves any embeddings already present in the index.',
|
|
@@ -164,7 +164,8 @@ export declare const cliResources: {
|
|
|
164
164
|
readonly 'help.command.group.query.description': "Search execution flows across all repos in a group";
|
|
165
165
|
readonly 'help.command.group.contracts.description': "Inspect Contract Registry";
|
|
166
166
|
readonly 'help.option.setup.codingAgent': "Configure only these coding agents (comma-separated or repeatable)";
|
|
167
|
-
readonly 'help.option.analyze.force': "Force
|
|
167
|
+
readonly 'help.option.analyze.force': "Force graph and FTS rebuild; unchanged parser output may be reused";
|
|
168
|
+
readonly 'help.option.analyze.noParseCache': "Re-parse every source file instead of replaying cached parser output";
|
|
168
169
|
readonly 'help.option.analyze.repairFts': "Repair/rebuild search FTS indexes without full re-analysis";
|
|
169
170
|
readonly 'help.option.analyze.embeddings': "Enable embedding generation for semantic search (off by default). Optional [limit] overrides the 50,000-node safety cap; pass 0 to disable the cap entirely.";
|
|
170
171
|
readonly 'help.option.analyze.dropEmbeddings': "Drop existing embeddings on rebuild. By default, an `analyze` without `--embeddings` preserves any embeddings already present in the index.";
|
|
@@ -435,6 +436,7 @@ export declare const cliResources: {
|
|
|
435
436
|
'help.command.group.contracts.description': string;
|
|
436
437
|
'help.option.setup.codingAgent': string;
|
|
437
438
|
'help.option.analyze.force': string;
|
|
439
|
+
'help.option.analyze.noParseCache': string;
|
|
438
440
|
'help.option.analyze.repairFts': string;
|
|
439
441
|
'help.option.analyze.embeddings': string;
|
|
440
442
|
'help.option.analyze.dropEmbeddings': string;
|
package/dist/cli/i18n/zh-CN.d.ts
CHANGED
|
@@ -164,6 +164,7 @@ export declare const zhCN: {
|
|
|
164
164
|
'help.command.group.contracts.description': string;
|
|
165
165
|
'help.option.setup.codingAgent': string;
|
|
166
166
|
'help.option.analyze.force': string;
|
|
167
|
+
'help.option.analyze.noParseCache': string;
|
|
167
168
|
'help.option.analyze.repairFts': string;
|
|
168
169
|
'help.option.analyze.embeddings': string;
|
|
169
170
|
'help.option.analyze.dropEmbeddings': string;
|
package/dist/cli/i18n/zh-CN.js
CHANGED
|
@@ -163,7 +163,8 @@ export const zhCN = {
|
|
|
163
163
|
'help.command.group.query.description': '跨仓库组所有仓库搜索执行流程',
|
|
164
164
|
'help.command.group.contracts.description': '查看 Contract Registry',
|
|
165
165
|
'help.option.setup.codingAgent': '仅配置这些编码代理(逗号分隔或重复传入)',
|
|
166
|
-
'help.option.analyze.force': '
|
|
166
|
+
'help.option.analyze.force': '强制重建图和 FTS;未更改的解析器输出可能被复用',
|
|
167
|
+
'help.option.analyze.noParseCache': '重新解析每个源文件,不重放缓存的解析器输出',
|
|
167
168
|
'help.option.analyze.repairFts': '修复/重建搜索 FTS 索引,不执行完整重新分析',
|
|
168
169
|
'help.option.analyze.embeddings': '启用语义搜索的嵌入生成(默认关闭)。可选 [limit] 覆盖 50,000 节点安全上限;传 0 可完全禁用上限。',
|
|
169
170
|
'help.option.analyze.dropEmbeddings': '重建时删除现有嵌入。默认情况下,未传 `--embeddings` 的 `analyze` 会保留索引中已有嵌入。',
|
package/dist/cli/index.js
CHANGED
|
@@ -48,7 +48,8 @@ program
|
|
|
48
48
|
.description('Index a repository (full analysis)')
|
|
49
49
|
.option('--watch', 'Keep the index current with serialized incremental refreshes')
|
|
50
50
|
.option('--debounce <ms>', 'Watch quiet period before refreshing (default: 300 milliseconds)')
|
|
51
|
-
.option('-f, --force', 'Force
|
|
51
|
+
.option('-f, --force', 'Force graph and FTS rebuild; unchanged parser output may be reused')
|
|
52
|
+
.option('--no-parse-cache', 'Re-parse every source file instead of replaying cached parser output')
|
|
52
53
|
.option('--repair-fts', 'Repair/rebuild search FTS indexes without full re-analysis')
|
|
53
54
|
.option('--embeddings [limit]', 'Enable embedding generation for semantic search (off by default). ' +
|
|
54
55
|
'Optional [limit] overrides the 50,000-node safety cap; pass 0 to disable the cap entirely.')
|
|
@@ -97,6 +97,8 @@ export declare function runChunkedParseAndResolve(graph: KnowledgeGraph, scanned
|
|
|
97
97
|
usedWorkerPool: boolean;
|
|
98
98
|
/** Files dispatched to parser workers after parse-cache lookup. */
|
|
99
99
|
reparsedFileCount: number;
|
|
100
|
+
/** Files restored from parse-cache chunks without parser-worker dispatch. */
|
|
101
|
+
parseCacheHitFileCount: number;
|
|
100
102
|
/** Worker-produced ParsedFile artifacts aggregated across chunks.
|
|
101
103
|
* Threaded into scope-resolution as a re-extract cache so the warm-
|
|
102
104
|
* cache analyze run can skip the dominant `extractParsedFile` cost
|
|
@@ -557,6 +557,7 @@ export async function runChunkedParseAndResolve(graph, scannedFiles, allPaths, t
|
|
|
557
557
|
: new Map();
|
|
558
558
|
let chunkCacheHits = 0;
|
|
559
559
|
let chunkCacheMisses = 0;
|
|
560
|
+
let parseCacheHitFileCount = 0;
|
|
560
561
|
let reparsedFileCount = 0;
|
|
561
562
|
try {
|
|
562
563
|
// U1 — bounded chunk concurrency (B1 from PR #1693 review): pre-fetch
|
|
@@ -816,6 +817,7 @@ export async function runChunkedParseAndResolve(graph, scannedFiles, allPaths, t
|
|
|
816
817
|
pendingWorkerChunk = null;
|
|
817
818
|
}
|
|
818
819
|
chunkCacheHits++;
|
|
820
|
+
parseCacheHitFileCount += chunkFiles.length;
|
|
819
821
|
const chunkWorkerData = mergeChunkResults(graph, symbolTable, cachedRaw, exportedTypeMap);
|
|
820
822
|
if (isDev) {
|
|
821
823
|
logger.info(`📦 parse-cache HIT: chunk ${chunkIdx + 1}/${numChunks} (${chunkFiles.length} files, ${chunkHash?.slice(0, 8) ?? 'unknown'})`);
|
|
@@ -1324,6 +1326,7 @@ export async function runChunkedParseAndResolve(graph, scannedFiles, allPaths, t
|
|
|
1324
1326
|
// is intentionally measured at dispatch time rather than inferred from
|
|
1325
1327
|
// the git/hash diff.
|
|
1326
1328
|
reparsedFileCount,
|
|
1329
|
+
parseCacheHitFileCount,
|
|
1327
1330
|
// Per-file ParsedFile artifacts produced by workers' calls to
|
|
1328
1331
|
// `extractParsedFile`. Consumed by scope-resolution as a re-extraction
|
|
1329
1332
|
// cache: when the file's ParsedFile is here, scope-resolution skips its own
|
|
@@ -120,7 +120,7 @@ export const runPipelineFromRepo = async (repoPath, onProgress, options) => {
|
|
|
120
120
|
graphEmitSink?.close();
|
|
121
121
|
}
|
|
122
122
|
// Extract final results for the PipelineResult contract
|
|
123
|
-
const { totalFiles, usedWorkerPool, reparsedFileCount, unavailableScopeLanguageFiles } = getPhaseOutput(results, 'parse');
|
|
123
|
+
const { totalFiles, usedWorkerPool, reparsedFileCount, parseCacheHitFileCount, unavailableScopeLanguageFiles, } = getPhaseOutput(results, 'parse');
|
|
124
124
|
let communityResult;
|
|
125
125
|
let processResult;
|
|
126
126
|
const scopeResolutionOutput = getPhaseOutput(results, 'scopeResolution');
|
|
@@ -168,6 +168,7 @@ export const runPipelineFromRepo = async (repoPath, onProgress, options) => {
|
|
|
168
168
|
undecidedSatisfaction,
|
|
169
169
|
usedWorkerPool,
|
|
170
170
|
reparsedFileCount,
|
|
171
|
+
parseCacheHitFileCount,
|
|
171
172
|
scopeExtractionFailures,
|
|
172
173
|
unavailableScopeLanguageFiles,
|
|
173
174
|
pdgEmitManifest,
|
|
@@ -17,12 +17,19 @@ export interface AnalyzeCallbacks {
|
|
|
17
17
|
}
|
|
18
18
|
export interface AnalyzeOptions {
|
|
19
19
|
/**
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
20
|
+
* Rebuild the graph and FTS. Parser output is still reused from the
|
|
21
|
+
* content-addressed parse cache unless `useParseCache` is false.
|
|
22
|
+
* Callers may OR this with other flags that imply re-analysis
|
|
23
|
+
* (e.g. `--skills`), so the value here is the PIPELINE-force signal,
|
|
24
|
+
* NOT the registry-collision bypass. See `allowDuplicateName` below.
|
|
24
25
|
*/
|
|
25
26
|
force?: boolean;
|
|
27
|
+
/**
|
|
28
|
+
* Reuse content-addressed parser output. Defaults to true. When false,
|
|
29
|
+
* analysis reparses every file and publishes a new parse-cache generation
|
|
30
|
+
* only after a successful run (live shards stay untouched if the run fails).
|
|
31
|
+
*/
|
|
32
|
+
useParseCache?: boolean;
|
|
26
33
|
/** Repair only search indexes without re-running full parsing/indexing. */
|
|
27
34
|
repairFts?: boolean;
|
|
28
35
|
/** Emit per-index FTS create logs. */
|
package/dist/core/run-analyze.js
CHANGED
|
@@ -46,8 +46,8 @@ import { shadowCandidatesFor } from './incremental/shadow-candidates.js';
|
|
|
46
46
|
import { shouldEscalateIncrementalWrite } from './incremental/escalation-gate.js';
|
|
47
47
|
import { ftsTablesAmong, incrementalFtsTablesFromGraph, nodeTablesForIncrementalDelete, shouldPreservePersistedDerivedGraph, } from './incremental/derived-writeback.js';
|
|
48
48
|
import { NODE_TABLES } from './lbug/schema.js';
|
|
49
|
-
import { loadParseCache, saveParseCache, pruneCache, PARSE_CACHE_VERSION, } from '../storage/parse-cache.js';
|
|
50
|
-
import {
|
|
49
|
+
import { loadParseCache, saveParseCache, pruneCache, PARSE_CACHE_VERSION, createColdParseRebuildDir, emptyParseCache, forgetCreatedParseCacheDir, } from '../storage/parse-cache.js';
|
|
50
|
+
import { mergeStagedDurableParsedFileStore } from '../storage/parsedfile-store.js';
|
|
51
51
|
import { getCurrentCommit, getCurrentBranch, getRemoteUrl, hasGitDir, getInferredRepoName, isWorkingTreeDirty, listWorkingTreeDirtyPaths, resolveRepoIdentityRoot, } from '../storage/git.js';
|
|
52
52
|
import { isGitNexusManagedPath } from '../storage/gitnexus-managed-paths.js';
|
|
53
53
|
import { getMaxFileSizeBytes } from './ingestion/utils/max-file-size.js';
|
|
@@ -553,6 +553,17 @@ async function resolveWriteTarget(repoPath, options) {
|
|
|
553
553
|
metaDir: path.dirname(metaPath),
|
|
554
554
|
};
|
|
555
555
|
}
|
|
556
|
+
async function removeColdParseRebuildDir(dir, ignoreErrors) {
|
|
557
|
+
if (!dir)
|
|
558
|
+
return;
|
|
559
|
+
try {
|
|
560
|
+
await fs.rm(dir, { recursive: true, force: true });
|
|
561
|
+
}
|
|
562
|
+
catch (err) {
|
|
563
|
+
if (!ignoreErrors)
|
|
564
|
+
throw err;
|
|
565
|
+
}
|
|
566
|
+
}
|
|
556
567
|
/**
|
|
557
568
|
* Run the full analysis under an exclusive, index-directory-scoped write lock
|
|
558
569
|
* (#2658). A second concurrent `analyze` on the same slot waits here for the
|
|
@@ -630,6 +641,7 @@ async function runFullAnalysisInner(repoPath, options, callbacks, writeTarget, r
|
|
|
630
641
|
// selects a `branches/<slug>/` sub-slot only for an explicit `--branch` that
|
|
631
642
|
// does not own the flat slot. See resolveWriteTarget for the full contract.
|
|
632
643
|
const { storagePath, repoHasGit, currentCommit, branchLabel, placement, lbugPath, metaDir } = writeTarget;
|
|
644
|
+
let coldParseRebuildDir;
|
|
633
645
|
// Start each analyze with a clean buffer-pool hint: any pre-pipeline DB open
|
|
634
646
|
// (e.g. the embeddings-cache open) falls back to the default until the hint is
|
|
635
647
|
// set from the built graph below, so a prior run's size can't leak in.
|
|
@@ -1165,6 +1177,12 @@ async function runFullAnalysisInner(repoPath, options, callbacks, writeTarget, r
|
|
|
1165
1177
|
log('AsyncAPI document reading disabled; rebuilding to remove document-derived evidence.');
|
|
1166
1178
|
options = { ...options, force: true };
|
|
1167
1179
|
}
|
|
1180
|
+
// Programmatic `useParseCache: false` must set force or the up-to-date
|
|
1181
|
+
// guard returns before the empty-cache construction below.
|
|
1182
|
+
if (options.useParseCache === false && !options.force) {
|
|
1183
|
+
log('Parser cache bypass requested; forcing a full rebuild so unchanged files are re-parsed.');
|
|
1184
|
+
options = { ...options, force: true };
|
|
1185
|
+
}
|
|
1168
1186
|
// ── Early-return: already up to date ──────────────────────────────
|
|
1169
1187
|
if (existingMeta &&
|
|
1170
1188
|
!existingMeta.embeddingCheckpoint &&
|
|
@@ -1362,11 +1380,17 @@ async function runFullAnalysisInner(repoPath, options, callbacks, writeTarget, r
|
|
|
1362
1380
|
}
|
|
1363
1381
|
}
|
|
1364
1382
|
// ── Load incremental parse cache ──────────────────────────────────
|
|
1365
|
-
// Content-addressed:
|
|
1366
|
-
//
|
|
1367
|
-
//
|
|
1368
|
-
//
|
|
1369
|
-
|
|
1383
|
+
// Content-addressed: `--force` reuses parser shards; `useParseCache: false`
|
|
1384
|
+
// stages a new generation under a run-unique parse-rebuild.* dir and publishes
|
|
1385
|
+
// after success. Unique because index locks are per branch slot while this
|
|
1386
|
+
// cache root is shared across branches.
|
|
1387
|
+
if (options.useParseCache === false) {
|
|
1388
|
+
coldParseRebuildDir = await createColdParseRebuildDir(storagePath);
|
|
1389
|
+
forgetCreatedParseCacheDir(coldParseRebuildDir);
|
|
1390
|
+
}
|
|
1391
|
+
const parseCache = options.useParseCache === false
|
|
1392
|
+
? emptyParseCache(coldParseRebuildDir)
|
|
1393
|
+
: await loadParseCache(storagePath);
|
|
1370
1394
|
// Streamed structural emit (#2680). Resolved ONCE, so the pipeline flag and
|
|
1371
1395
|
// the CSV-dir resolution below cannot disagree — and resolved HERE, not at
|
|
1372
1396
|
// function entry, because the POSITION is load-bearing: the gate is
|
|
@@ -1400,49 +1424,63 @@ async function runFullAnalysisInner(repoPath, options, callbacks, writeTarget, r
|
|
|
1400
1424
|
repoHasGit &&
|
|
1401
1425
|
!schemaFingerprintMismatch(existingMeta.schemaFingerprint);
|
|
1402
1426
|
// ── Phase 1: Full Pipeline (0–60%) ────────────────────────────────
|
|
1403
|
-
|
|
1404
|
-
|
|
1405
|
-
|
|
1406
|
-
|
|
1407
|
-
|
|
1408
|
-
|
|
1409
|
-
|
|
1410
|
-
|
|
1411
|
-
|
|
1412
|
-
|
|
1413
|
-
|
|
1414
|
-
|
|
1415
|
-
|
|
1416
|
-
|
|
1417
|
-
|
|
1418
|
-
|
|
1419
|
-
|
|
1420
|
-
|
|
1421
|
-
|
|
1422
|
-
|
|
1423
|
-
|
|
1424
|
-
|
|
1425
|
-
|
|
1426
|
-
|
|
1427
|
-
|
|
1428
|
-
|
|
1429
|
-
|
|
1430
|
-
|
|
1431
|
-
|
|
1432
|
-
|
|
1433
|
-
|
|
1434
|
-
|
|
1435
|
-
|
|
1436
|
-
|
|
1437
|
-
|
|
1438
|
-
|
|
1439
|
-
:
|
|
1440
|
-
|
|
1441
|
-
|
|
1442
|
-
|
|
1443
|
-
|
|
1444
|
-
|
|
1445
|
-
|
|
1427
|
+
let pipelineResult;
|
|
1428
|
+
try {
|
|
1429
|
+
pipelineResult = await runPipelineFromRepo(repoPath, (p) => {
|
|
1430
|
+
const phaseLabel = PHASE_LABELS[p.phase] || p.phase;
|
|
1431
|
+
const scaled = Math.round(p.percent * 0.6);
|
|
1432
|
+
const message = p.detail
|
|
1433
|
+
? `${p.message || phaseLabel} (${p.detail})`
|
|
1434
|
+
: p.message || phaseLabel;
|
|
1435
|
+
progress(p.phase, scaled, message);
|
|
1436
|
+
}, {
|
|
1437
|
+
parseCache,
|
|
1438
|
+
workerPoolSize: options.workerPoolSize,
|
|
1439
|
+
// CFG/PDG opt-in (#2081 M1). PipelineOptions.pdg fans out to the worker
|
|
1440
|
+
// build gate (workerData.pdg) and the scope-resolution emit gate.
|
|
1441
|
+
pdg: options.pdg === true,
|
|
1442
|
+
pdgMaxFunctionLines: options.pdgMaxFunctionLines,
|
|
1443
|
+
pdgMaxEdgesPerFunction: options.pdgMaxEdgesPerFunction,
|
|
1444
|
+
pdgMaxReachingDefEdgesPerFunction: options.pdgMaxReachingDefEdgesPerFunction,
|
|
1445
|
+
pdgMaxCdgEdgesPerFunction: options.pdgMaxCdgEdgesPerFunction,
|
|
1446
|
+
pdgMaxTaintFindingsPerFunction: options.pdgMaxTaintFindingsPerFunction,
|
|
1447
|
+
pdgMaxTaintHops: options.pdgMaxTaintHops,
|
|
1448
|
+
pdgMaxInterprocFindings: options.pdgMaxInterprocFindings,
|
|
1449
|
+
pdgMaxInterprocHops: options.pdgMaxInterprocHops,
|
|
1450
|
+
pdgMaxInterprocEdges: options.pdgMaxInterprocEdges,
|
|
1451
|
+
// Streaming/chunked PDG emit (#2202) — gated to full-rebuild runs
|
|
1452
|
+
// (force === true) so the incremental writeback never reads back an
|
|
1453
|
+
// offloaded BasicBlock layer. Memory-only; byte-identical output.
|
|
1454
|
+
streamPdgEmit: resolveStreamPdgEmit(options),
|
|
1455
|
+
pdgEmitChunkSize: resolvePdgEmitChunkSize(options),
|
|
1456
|
+
// Streamed structural emit (#2680) — same full-rebuild gate as the PDG
|
|
1457
|
+
// toggle above, for the same incremental-writeback reason.
|
|
1458
|
+
streamGraphEmit: streamGraphEmitActive,
|
|
1459
|
+
// Resolved ONLY when streaming is active: on a Windows non-ASCII storage
|
|
1460
|
+
// path this helper mkdtempSyncs a real directory, so evaluating it
|
|
1461
|
+
// unconditionally would leak one temp dir per analyze even with the flag
|
|
1462
|
+
// off. The PDG sibling resolves inside its guard for the same reason.
|
|
1463
|
+
graphEmitCsvDir: streamGraphEmitActive
|
|
1464
|
+
? resolveNativeSafeStorageDir(storagePath, 'graph-csv')
|
|
1465
|
+
: undefined,
|
|
1466
|
+
fetchWrappers: options.fetchWrappers,
|
|
1467
|
+
skipDerivedGraphPhases,
|
|
1468
|
+
springActuatorPath: options.springActuatorPath,
|
|
1469
|
+
asyncApiSpecPath: options.asyncApiSpecPath,
|
|
1470
|
+
springActuatorScanExclusions,
|
|
1471
|
+
});
|
|
1472
|
+
}
|
|
1473
|
+
catch (err) {
|
|
1474
|
+
await removeColdParseRebuildDir(coldParseRebuildDir, true);
|
|
1475
|
+
throw err;
|
|
1476
|
+
}
|
|
1477
|
+
if (options.force && (pipelineResult.parseCacheHitFileCount ?? 0) > 0) {
|
|
1478
|
+
log(`Rebuilt the graph and FTS while reusing cached parser output for ` +
|
|
1479
|
+
`${pipelineResult.parseCacheHitFileCount} file(s) ` +
|
|
1480
|
+
`(parse cache ${PARSE_CACHE_VERSION}). ` +
|
|
1481
|
+
`For same-version capture/query development changes, increment SCHEMA_BUMP in ` +
|
|
1482
|
+
`src/storage/parse-cache.ts to invalidate parser output.`);
|
|
1483
|
+
}
|
|
1446
1484
|
// ── Phase 2: LadybugDB (60–85%) ──────────────────────────────────
|
|
1447
1485
|
progress('lbug', 60, 'Loading into LadybugDB...');
|
|
1448
1486
|
// Compute current per-file content hashes from the pipeline's File nodes.
|
|
@@ -3180,50 +3218,8 @@ async function runFullAnalysisInner(repoPath, options, callbacks, writeTarget, r
|
|
|
3180
3218
|
// meta.indexedAt = T_new while lbugPath still resolves to the pre-swap
|
|
3181
3219
|
// inode (which latched the reader on the stale index permanently). The meta
|
|
3182
3220
|
// object is fully computed at this point; only its write is deferred.
|
|
3183
|
-
//
|
|
3184
|
-
//
|
|
3185
|
-
// successful indexing run. Prune stale chunk-hash entries first so
|
|
3186
|
-
// the cache file size stays bounded across runs (chunks whose
|
|
3187
|
-
// composition no longer matches anything in the current scan are
|
|
3188
|
-
// dead weight; the parse phase populates `usedKeys` as it processes
|
|
3189
|
-
// chunks).
|
|
3190
|
-
try {
|
|
3191
|
-
// #2106 R6: the parse cache + durable store are shared across branches.
|
|
3192
|
-
// Before pruning to this run's keys, fold in the OTHER branches' recorded
|
|
3193
|
-
// chunk keys so a branch switch doesn't evict their still-live shards.
|
|
3194
|
-
// Adding to usedKeys makes them survive pruneCache AND land in the saved
|
|
3195
|
-
// index (saveParseCache builds the index from usedKeys). Excludes this
|
|
3196
|
-
// run's own meta dir, so a single-branch repo folds in nothing → prune
|
|
3197
|
-
// set byte-identical to today.
|
|
3198
|
-
const { keys: siblingKeys, complete } = await collectBranchCacheKeys(storagePath, metaDir);
|
|
3199
|
-
if (complete) {
|
|
3200
|
-
for (const k of siblingKeys)
|
|
3201
|
-
parseCache.usedKeys.add(k);
|
|
3202
|
-
}
|
|
3203
|
-
else {
|
|
3204
|
-
// Fail-safe toward retention: a sibling meta was unreadable, so keep
|
|
3205
|
-
// everything currently loaded rather than evict on incomplete info.
|
|
3206
|
-
log('Parse cache: a branch meta was unreadable — retaining all cached chunks (#2106).');
|
|
3207
|
-
for (const k of parseCache.entries.keys())
|
|
3208
|
-
parseCache.usedKeys.add(k);
|
|
3209
|
-
}
|
|
3210
|
-
const pruned = pruneCache(parseCache, parseCache.usedKeys);
|
|
3211
|
-
if (pruned > 0) {
|
|
3212
|
-
log(`Parse cache: pruned ${pruned} stale chunk entries`);
|
|
3213
|
-
}
|
|
3214
|
-
const savedKeys = await saveParseCache(storagePath, parseCache);
|
|
3215
|
-
// Prune the durable ParsedFile store to EXACTLY the parse cache's
|
|
3216
|
-
// surviving keys (#2038 warm-cache coverage), so the two content-addressed
|
|
3217
|
-
// stores stay coherent: a chunk is "cached" iff both its parse-cache shard
|
|
3218
|
-
// and its durable shards exist. A quarantined chunk (in usedKeys but with
|
|
3219
|
-
// no parse-cache shard) drops its durable subdir here and re-dispatches
|
|
3220
|
-
// next run. Same try/catch — a durable-store write failure must never
|
|
3221
|
-
// break an otherwise successful run (next run treats it as a miss).
|
|
3222
|
-
await pruneAndSaveDurableParsedFileStore(getDurableParsedFileDir(storagePath), PARSE_CACHE_VERSION, new Set(savedKeys));
|
|
3223
|
-
}
|
|
3224
|
-
catch (e) {
|
|
3225
|
-
log(`Warning: could not save parse cache (${e.message}); continuing.`);
|
|
3226
|
-
}
|
|
3221
|
+
// Parse-cache publish waits until after that swap + saveMeta so a failed
|
|
3222
|
+
// registerRepo / close / swap cannot replace live shards (#3153).
|
|
3227
3223
|
// Forward the --name alias and the registry-collision bypass bit.
|
|
3228
3224
|
// `allowDuplicateName` is its own concern — independent from the
|
|
3229
3225
|
// pipeline `force` above. The CLI maps it from
|
|
@@ -3244,8 +3240,8 @@ async function runFullAnalysisInner(repoPath, options, callbacks, writeTarget, r
|
|
|
3244
3240
|
// ── #2354: the flat workspace slot has adopted this run's branch ──────
|
|
3245
3241
|
// Drop a now-shadowed `branches/<slug>/` sub-index for the same label
|
|
3246
3242
|
// (unreachable once the flat slot serves it) and align the registry's
|
|
3247
|
-
// top-level branch label. Best-effort
|
|
3248
|
-
//
|
|
3243
|
+
// top-level branch label. Best-effort (#2364 review F5): the index is
|
|
3244
|
+
// complete and registered, and a failure
|
|
3249
3245
|
// here leaves only a stale registry label / undeleted shadowed dir —
|
|
3250
3246
|
// never wrong routing, because the flat meta this run already stamped is
|
|
3251
3247
|
// what applyBranchScope trusts. Retried by the next content-changing run
|
|
@@ -3354,7 +3350,51 @@ async function runFullAnalysisInner(repoPath, options, callbacks, writeTarget, r
|
|
|
3354
3350
|
// is a crash-safety improvement: a failed swap leaves the previous index
|
|
3355
3351
|
// live and the next run recovers via the full-rebuild path.
|
|
3356
3352
|
await saveMeta(metaDir, meta);
|
|
3353
|
+
// Persist the incremental parse cache only after a successful graph
|
|
3354
|
+
// publish (#3153). try/catch so a cache-write failure never breaks an
|
|
3355
|
+
// otherwise successful indexing run. Prune stale chunk-hash entries first
|
|
3356
|
+
// so the cache file size stays bounded across runs (chunks whose
|
|
3357
|
+
// composition no longer matches anything in the current scan are dead
|
|
3358
|
+
// weight; the parse phase populates `usedKeys` as it processes chunks).
|
|
3359
|
+
try {
|
|
3360
|
+
// #2106 R6: the parse cache + durable store are shared across branches.
|
|
3361
|
+
// Before pruning to this run's keys, fold in the OTHER branches' recorded
|
|
3362
|
+
// chunk keys so a branch switch doesn't evict their still-live shards.
|
|
3363
|
+
// Adding to usedKeys makes them survive pruneCache AND land in the saved
|
|
3364
|
+
// index (saveParseCache builds the index from usedKeys). Excludes this
|
|
3365
|
+
// run's own meta dir, so a single-branch repo folds in nothing → prune
|
|
3366
|
+
// set byte-identical to today.
|
|
3367
|
+
const { keys: siblingKeys, complete } = await collectBranchCacheKeys(storagePath, metaDir);
|
|
3368
|
+
if (complete) {
|
|
3369
|
+
for (const k of siblingKeys)
|
|
3370
|
+
parseCache.usedKeys.add(k);
|
|
3371
|
+
}
|
|
3372
|
+
else {
|
|
3373
|
+
// Fail-safe toward retention: a sibling meta was unreadable, so keep
|
|
3374
|
+
// everything currently loaded rather than evict on incomplete info.
|
|
3375
|
+
log('Parse cache: a branch meta was unreadable — retaining all cached chunks (#2106).');
|
|
3376
|
+
for (const k of parseCache.entries.keys())
|
|
3377
|
+
parseCache.usedKeys.add(k);
|
|
3378
|
+
}
|
|
3379
|
+
const pruned = pruneCache(parseCache, parseCache.usedKeys);
|
|
3380
|
+
if (pruned > 0) {
|
|
3381
|
+
log(`Parse cache: pruned ${pruned} stale chunk entries`);
|
|
3382
|
+
}
|
|
3383
|
+
const savedKeys = await saveParseCache(storagePath, parseCache);
|
|
3384
|
+
// Prune the durable ParsedFile store to EXACTLY the parse cache's
|
|
3385
|
+
// surviving keys (#2038 warm-cache coverage), so the two content-addressed
|
|
3386
|
+
// stores stay coherent: a chunk is "cached" iff both its parse-cache shard
|
|
3387
|
+
// and its durable shards exist. A quarantined chunk (in usedKeys but with
|
|
3388
|
+
// no parse-cache shard) drops its durable subdir here and re-dispatches
|
|
3389
|
+
// next run. Same try/catch — a durable-store write failure must never
|
|
3390
|
+
// break an otherwise successful run (next run treats it as a miss).
|
|
3391
|
+
await mergeStagedDurableParsedFileStore(storagePath, parseCache.storagePath ?? storagePath, PARSE_CACHE_VERSION, new Set(savedKeys));
|
|
3392
|
+
}
|
|
3393
|
+
catch (e) {
|
|
3394
|
+
log(`Warning: could not save parse cache (${e.message}); continuing.`);
|
|
3395
|
+
}
|
|
3357
3396
|
progress('done', 100, 'Done');
|
|
3397
|
+
await removeColdParseRebuildDir(coldParseRebuildDir, true);
|
|
3358
3398
|
return {
|
|
3359
3399
|
repoName: projectName,
|
|
3360
3400
|
repoPath,
|
|
@@ -3412,6 +3452,7 @@ async function runFullAnalysisInner(repoPath, options, callbacks, writeTarget, r
|
|
|
3412
3452
|
/* swallow — orphan reclamation must never mask the real failure */
|
|
3413
3453
|
}
|
|
3414
3454
|
}
|
|
3455
|
+
await removeColdParseRebuildDir(coldParseRebuildDir, true);
|
|
3415
3456
|
if (liveIndexMutationStarted) {
|
|
3416
3457
|
// Preserve the original error identity/prototype: callers distinguish
|
|
3417
3458
|
// IndexLockTimeoutError and other domain failures with `instanceof`.
|
|
@@ -19,9 +19,9 @@
|
|
|
19
19
|
* - Chunk-level invalidation gives a useful speedup floor (98% on a single
|
|
20
20
|
* 1-of-50 invalidated chunk) without touching the worker.
|
|
21
21
|
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
22
|
+
* `--force` still reuses content-addressed shards (it only rebuilds graph/FTS).
|
|
23
|
+
* `useParseCache: false` reparses every file, writes a staging generation, and
|
|
24
|
+
* publishes onto this cache only after a successful analysis.
|
|
25
25
|
*/
|
|
26
26
|
import type { ParseWorkerResult } from '../core/ingestion/workers/parse-worker.js';
|
|
27
27
|
export declare const PARSE_CACHE_VERSION: string;
|
|
@@ -41,6 +41,21 @@ export type ParseCachePackFile = {
|
|
|
41
41
|
* independent of scan order and worker count).
|
|
42
42
|
*/
|
|
43
43
|
export declare const packParseCacheChunks: (files: readonly ParseCachePackFile[], byteBudget: number) => string[][];
|
|
44
|
+
/**
|
|
45
|
+
* Per-run staging root for `useParseCache: false`. Parse-cache shards and the
|
|
46
|
+
* ParsedFile stores write here so a crash cannot mix a new generation into the
|
|
47
|
+
* live `.gitnexus/parse-cache` / `parsedfile-cache` trees. `saveParseCache`
|
|
48
|
+
* publishes onto the live `storagePath` only after a successful analysis.
|
|
49
|
+
*/
|
|
50
|
+
export declare const COLD_PARSE_REBUILD_DIRNAME = "parse-rebuild";
|
|
51
|
+
/** Deterministic staging path — tests only. Production uses {@link createColdParseRebuildDir}. */
|
|
52
|
+
export declare const getColdParseRebuildDir: (storagePath: string) => string;
|
|
53
|
+
/**
|
|
54
|
+
* Unique per analyze process so concurrent `--no-parse-cache` runs on
|
|
55
|
+
* different branch slots (shared `.gitnexus`, separate index locks) do not
|
|
56
|
+
* delete each other's staging tree.
|
|
57
|
+
*/
|
|
58
|
+
export declare const createColdParseRebuildDir: (storagePath: string) => Promise<string>;
|
|
44
59
|
/** Runtime view: keyed Map for fast lookup; mutated in place during a run. */
|
|
45
60
|
export interface ParseCache {
|
|
46
61
|
version: string;
|
|
@@ -57,6 +72,8 @@ export interface ParseCache {
|
|
|
57
72
|
* When set, chunk payloads are loaded from / flushed to sharded files on
|
|
58
73
|
* demand instead of retaining every chunk in `entries` for the whole run
|
|
59
74
|
* (#1983 — Linux kernel OOM from duplicate in-memory cache + graph).
|
|
75
|
+
* May be a per-run staging directory (`getColdParseRebuildDir`) while the
|
|
76
|
+
* live index root is passed separately to `saveParseCache`.
|
|
60
77
|
*/
|
|
61
78
|
storagePath?: string;
|
|
62
79
|
/** Index of chunk hashes known to exist under `storagePath/parse-cache/`. */
|
|
@@ -105,6 +122,8 @@ export declare const mapReviver: (_key: string, value: unknown) => unknown;
|
|
|
105
122
|
export declare const slimParseWorkerResultsForCache: (chunkResults: readonly ParseWorkerResult[]) => ParseWorkerResult[];
|
|
106
123
|
/** Load one chunk shard. Does not retain it in `cache.entries`. */
|
|
107
124
|
export declare const loadParseCacheChunk: (cache: ParseCache, chunkHash: string) => Promise<ParseWorkerResult[] | undefined>;
|
|
125
|
+
/** Drop the mkdir memo after the staging tree is wiped so the next persist recreates it. */
|
|
126
|
+
export declare const forgetCreatedParseCacheDir: (storagePath: string) => void;
|
|
108
127
|
/**
|
|
109
128
|
* Persist one chunk shard and avoid retaining it in RAM for the rest of the
|
|
110
129
|
* run. Falls back to `cache.entries` when `storagePath` is unset (unit tests).
|
|
@@ -132,3 +151,4 @@ export declare const saveParseCache: (storagePath: string, cache: ParseCache) =>
|
|
|
132
151
|
* don't keep their stale entries forever.
|
|
133
152
|
*/
|
|
134
153
|
export declare const pruneCache: (cache: ParseCache, usedHashes: ReadonlySet<string>) => number;
|
|
154
|
+
export declare const emptyParseCache: (storagePath?: string) => ParseCache;
|
|
@@ -19,9 +19,9 @@
|
|
|
19
19
|
* - Chunk-level invalidation gives a useful speedup floor (98% on a single
|
|
20
20
|
* 1-of-50 invalidated chunk) without touching the worker.
|
|
21
21
|
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
22
|
+
* `--force` still reuses content-addressed shards (it only rebuilds graph/FTS).
|
|
23
|
+
* `useParseCache: false` reparses every file, writes a staging generation, and
|
|
24
|
+
* publishes onto this cache only after a successful analysis.
|
|
25
25
|
*/
|
|
26
26
|
import { createHash } from 'crypto';
|
|
27
27
|
import { createRequire } from 'module';
|
|
@@ -804,6 +804,24 @@ export const packParseCacheChunks = (files, byteBudget) => {
|
|
|
804
804
|
};
|
|
805
805
|
const LEGACY_CACHE_FILENAME = 'parse-cache.json';
|
|
806
806
|
const CACHE_DIRNAME = 'parse-cache';
|
|
807
|
+
/**
|
|
808
|
+
* Per-run staging root for `useParseCache: false`. Parse-cache shards and the
|
|
809
|
+
* ParsedFile stores write here so a crash cannot mix a new generation into the
|
|
810
|
+
* live `.gitnexus/parse-cache` / `parsedfile-cache` trees. `saveParseCache`
|
|
811
|
+
* publishes onto the live `storagePath` only after a successful analysis.
|
|
812
|
+
*/
|
|
813
|
+
export const COLD_PARSE_REBUILD_DIRNAME = 'parse-rebuild';
|
|
814
|
+
/** Deterministic staging path — tests only. Production uses {@link createColdParseRebuildDir}. */
|
|
815
|
+
export const getColdParseRebuildDir = (storagePath) => path.join(storagePath, COLD_PARSE_REBUILD_DIRNAME);
|
|
816
|
+
/**
|
|
817
|
+
* Unique per analyze process so concurrent `--no-parse-cache` runs on
|
|
818
|
+
* different branch slots (shared `.gitnexus`, separate index locks) do not
|
|
819
|
+
* delete each other's staging tree.
|
|
820
|
+
*/
|
|
821
|
+
export const createColdParseRebuildDir = async (storagePath) => {
|
|
822
|
+
await fs.mkdir(storagePath, { recursive: true });
|
|
823
|
+
return fs.mkdtemp(path.join(storagePath, `${COLD_PARSE_REBUILD_DIRNAME}.`));
|
|
824
|
+
};
|
|
807
825
|
const CACHE_INDEX_FILENAME = 'index.json';
|
|
808
826
|
/** Keys on disk always come from `computeChunkHash` — 64-char lowercase hex. */
|
|
809
827
|
const CHUNK_CACHE_KEY_HEX_RE = /^[a-f0-9]{64}$/;
|
|
@@ -937,6 +955,10 @@ export const loadParseCacheChunk = async (cache, chunkHash) => {
|
|
|
937
955
|
* process-scoped, so the Set stays bounded.
|
|
938
956
|
*/
|
|
939
957
|
const createdCacheDirs = new Set();
|
|
958
|
+
/** Drop the mkdir memo after the staging tree is wiped so the next persist recreates it. */
|
|
959
|
+
export const forgetCreatedParseCacheDir = (storagePath) => {
|
|
960
|
+
createdCacheDirs.delete(getCacheDirPath(storagePath));
|
|
961
|
+
};
|
|
940
962
|
/**
|
|
941
963
|
* Persist one chunk shard and avoid retaining it in RAM for the rest of the
|
|
942
964
|
* run. Falls back to `cache.entries` when `storagePath` is unset (unit tests).
|
|
@@ -1063,8 +1085,17 @@ export const saveParseCache = async (storagePath, cache) => {
|
|
|
1063
1085
|
}
|
|
1064
1086
|
continue;
|
|
1065
1087
|
}
|
|
1066
|
-
|
|
1067
|
-
|
|
1088
|
+
// Cold rebuilds persist mid-run under `cache.storagePath` (staging). Prefer
|
|
1089
|
+
// that generation over a same-hash shard still sitting in the live dir so
|
|
1090
|
+
// we never publish a mixed old/new pair. Sibling-branch keys (#2106) that
|
|
1091
|
+
// this run did not rewrite still copy from the live path.
|
|
1092
|
+
const stagedPath = cache.storagePath !== undefined && cache.storagePath !== storagePath
|
|
1093
|
+
? getCacheChunkPath(cache.storagePath, chunkHash)
|
|
1094
|
+
: undefined;
|
|
1095
|
+
const livePath = getCacheChunkPath(storagePath, chunkHash);
|
|
1096
|
+
const fromStaged = Boolean(stagedPath && cache.onDiskKeys?.has(chunkHash));
|
|
1097
|
+
const sourcePath = fromStaged && stagedPath ? stagedPath : livePath;
|
|
1098
|
+
if (await copyV8CacheIfPresent(sourcePath, chunkPath)) {
|
|
1068
1099
|
writtenKeys.push(chunkHash);
|
|
1069
1100
|
}
|
|
1070
1101
|
}
|
|
@@ -1104,10 +1135,11 @@ export const pruneCache = (cache, usedHashes) => {
|
|
|
1104
1135
|
}
|
|
1105
1136
|
return removed;
|
|
1106
1137
|
};
|
|
1107
|
-
const
|
|
1138
|
+
export const emptyParseCache = (storagePath) => ({
|
|
1108
1139
|
version: PARSE_CACHE_VERSION,
|
|
1109
1140
|
entries: new Map(),
|
|
1110
1141
|
usedKeys: new Set(),
|
|
1111
1142
|
storagePath,
|
|
1112
1143
|
onDiskKeys: storagePath ? new Set() : undefined,
|
|
1113
1144
|
});
|
|
1145
|
+
const emptyCache = emptyParseCache;
|
|
@@ -122,3 +122,10 @@ export declare const loadDurableParsedFileIndex: (durableDir: string, expectedVe
|
|
|
122
122
|
* for a missing/corrupt shard). The index write is tmp+rename atomic.
|
|
123
123
|
*/
|
|
124
124
|
export declare const pruneAndSaveDurableParsedFileStore: (durableDir: string, version: string, keepKeys: ReadonlySet<string>) => Promise<void>;
|
|
125
|
+
/**
|
|
126
|
+
* Overlay this run's staged durable ParsedFile chunks onto the live store,
|
|
127
|
+
* then prune the live tree to `keepKeys`. Live chunks this run did not rewrite
|
|
128
|
+
* (other branches, unused hashes) stay until prune. No-op overlay when the
|
|
129
|
+
* staged dir is missing.
|
|
130
|
+
*/
|
|
131
|
+
export declare const mergeStagedDurableParsedFileStore: (liveStoragePath: string, stagedStoragePath: string, version: string, keepKeys: ReadonlySet<string>) => Promise<void>;
|
|
@@ -605,3 +605,73 @@ export const pruneAndSaveDurableParsedFileStore = async (durableDir, version, ke
|
|
|
605
605
|
await fs.writeFile(tmp, JSON.stringify(idx), 'utf-8');
|
|
606
606
|
await fs.rename(tmp, path.join(durableDir, DURABLE_INDEX_FILENAME));
|
|
607
607
|
};
|
|
608
|
+
/**
|
|
609
|
+
* Overlay this run's staged durable ParsedFile chunks onto the live store,
|
|
610
|
+
* then prune the live tree to `keepKeys`. Live chunks this run did not rewrite
|
|
611
|
+
* (other branches, unused hashes) stay until prune. No-op overlay when the
|
|
612
|
+
* staged dir is missing.
|
|
613
|
+
*/
|
|
614
|
+
export const mergeStagedDurableParsedFileStore = async (liveStoragePath, stagedStoragePath, version, keepKeys) => {
|
|
615
|
+
const liveDir = getDurableParsedFileDir(liveStoragePath);
|
|
616
|
+
if (stagedStoragePath === liveStoragePath) {
|
|
617
|
+
await pruneAndSaveDurableParsedFileStore(liveDir, version, keepKeys);
|
|
618
|
+
return;
|
|
619
|
+
}
|
|
620
|
+
const stagedDir = getDurableParsedFileDir(stagedStoragePath);
|
|
621
|
+
await fs.mkdir(liveDir, { recursive: true });
|
|
622
|
+
let stagedEntries = [];
|
|
623
|
+
try {
|
|
624
|
+
stagedEntries = await fs.readdir(stagedDir);
|
|
625
|
+
}
|
|
626
|
+
catch {
|
|
627
|
+
await pruneAndSaveDurableParsedFileStore(liveDir, version, keepKeys);
|
|
628
|
+
return;
|
|
629
|
+
}
|
|
630
|
+
for (const name of stagedEntries) {
|
|
631
|
+
if (name === DURABLE_INDEX_FILENAME)
|
|
632
|
+
continue;
|
|
633
|
+
const from = path.join(stagedDir, name);
|
|
634
|
+
const to = path.join(liveDir, name);
|
|
635
|
+
await replaceDurableChunkDir(from, to);
|
|
636
|
+
}
|
|
637
|
+
await pruneAndSaveDurableParsedFileStore(liveDir, version, keepKeys);
|
|
638
|
+
};
|
|
639
|
+
/** Move `from` onto `to` without deleting `to` until the new tree is in place. */
|
|
640
|
+
const replaceDurableChunkDir = async (from, to) => {
|
|
641
|
+
try {
|
|
642
|
+
await fs.rename(from, to);
|
|
643
|
+
return;
|
|
644
|
+
}
|
|
645
|
+
catch {
|
|
646
|
+
/* dest exists, or the rename is cross-device */
|
|
647
|
+
}
|
|
648
|
+
const backup = `${to}.replacing`;
|
|
649
|
+
await fs.rm(backup, { recursive: true, force: true });
|
|
650
|
+
let backedUp = false;
|
|
651
|
+
try {
|
|
652
|
+
await fs.rename(to, backup);
|
|
653
|
+
backedUp = true;
|
|
654
|
+
}
|
|
655
|
+
catch {
|
|
656
|
+
/* dest was missing */
|
|
657
|
+
}
|
|
658
|
+
try {
|
|
659
|
+
try {
|
|
660
|
+
await fs.rename(from, to);
|
|
661
|
+
}
|
|
662
|
+
catch {
|
|
663
|
+
await fs.cp(from, to, { recursive: true });
|
|
664
|
+
await fs.rm(from, { recursive: true, force: true });
|
|
665
|
+
}
|
|
666
|
+
}
|
|
667
|
+
catch (err) {
|
|
668
|
+
if (backedUp) {
|
|
669
|
+
await fs.rm(to, { recursive: true, force: true }).catch(() => { });
|
|
670
|
+
await fs.rename(backup, to).catch(() => { });
|
|
671
|
+
}
|
|
672
|
+
throw err;
|
|
673
|
+
}
|
|
674
|
+
if (backedUp) {
|
|
675
|
+
await fs.rm(backup, { recursive: true, force: true });
|
|
676
|
+
}
|
|
677
|
+
};
|
package/dist/types/pipeline.d.ts
CHANGED
|
@@ -52,6 +52,8 @@ export interface PipelineResult {
|
|
|
52
52
|
usedWorkerPool: boolean;
|
|
53
53
|
/** Files actually dispatched to parser workers after parse-cache lookup. */
|
|
54
54
|
reparsedFileCount: number;
|
|
55
|
+
/** Files restored from parse-cache chunks without parser-worker dispatch. */
|
|
56
|
+
parseCacheHitFileCount?: number;
|
|
55
57
|
/** Files omitted from scope-resolution while the rest of analysis continued. */
|
|
56
58
|
scopeExtractionFailures: readonly string[];
|
|
57
59
|
/** Files scope resolution could not inspect because their parser was unavailable. */
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "gitnexus",
|
|
3
|
-
"version": "1.6.11-rc.
|
|
3
|
+
"version": "1.6.11-rc.48",
|
|
4
4
|
"description": "Graph-powered code intelligence for AI agents. Index any codebase, query via MCP or CLI.",
|
|
5
5
|
"author": "Abhigyan Patwari",
|
|
6
6
|
"license": "PolyForm-Noncommercial-1.0.0",
|
|
@@ -40,6 +40,7 @@
|
|
|
40
40
|
],
|
|
41
41
|
"scripts": {
|
|
42
42
|
"build": "node scripts/build.js",
|
|
43
|
+
"build:web": "node scripts/build.js --web",
|
|
43
44
|
"serve": "tsx src/cli/index.ts serve",
|
|
44
45
|
"dev": "tsx watch src/cli/index.ts",
|
|
45
46
|
"test": "vitest run",
|
|
@@ -52,7 +53,7 @@
|
|
|
52
53
|
"postinstall": "node scripts/build-tree-sitter-grammars.cjs",
|
|
53
54
|
"assert-publish-coverage": "node scripts/assert-publish-grammar-coverage.cjs",
|
|
54
55
|
"prepare": "node scripts/build.js",
|
|
55
|
-
"prepack": "node scripts/assert-publish-grammar-coverage.cjs && node scripts/build.js",
|
|
56
|
+
"prepack": "node scripts/assert-publish-grammar-coverage.cjs && node scripts/build.js --web && node scripts/assert-web-assets.mjs web",
|
|
56
57
|
"version": "node scripts/sync-plugin-manifests.mjs"
|
|
57
58
|
},
|
|
58
59
|
"dependencies": {
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import fs from 'node:fs';
|
|
3
|
+
import path from 'node:path';
|
|
4
|
+
|
|
5
|
+
const webDir = path.resolve(process.argv[2] ?? 'web');
|
|
6
|
+
const indexPath = path.join(webDir, 'index.html');
|
|
7
|
+
|
|
8
|
+
let html;
|
|
9
|
+
try {
|
|
10
|
+
html = fs.readFileSync(indexPath, 'utf8');
|
|
11
|
+
} catch (err) {
|
|
12
|
+
if (err?.code === 'ENOENT') {
|
|
13
|
+
console.error(`[web-assets] missing ${indexPath}`);
|
|
14
|
+
process.exit(1);
|
|
15
|
+
}
|
|
16
|
+
throw err;
|
|
17
|
+
}
|
|
18
|
+
const localRefs = [...html.matchAll(/(?:src|href)=["']([^"'#]+)["']/g)]
|
|
19
|
+
.map((match) => match[1])
|
|
20
|
+
.filter((ref) => !/^(?:[a-z]+:|\/\/|data:)/i.test(ref))
|
|
21
|
+
.map((ref) => ref.split(/[?#]/, 1)[0].replace(/^\/+/, ''));
|
|
22
|
+
const assetRefs = localRefs.filter((ref) => ref.startsWith('assets/'));
|
|
23
|
+
|
|
24
|
+
if (assetRefs.length === 0) {
|
|
25
|
+
console.error(`[web-assets] ${indexPath} references no assets`);
|
|
26
|
+
process.exit(1);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
const missing = assetRefs.filter((ref) => !fs.existsSync(path.join(webDir, ref)));
|
|
30
|
+
if (missing.length > 0) {
|
|
31
|
+
console.error(`[web-assets] ${indexPath} references missing assets:\n${missing.join('\n')}`);
|
|
32
|
+
process.exit(1);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
console.log(`[web-assets] verified index.html and ${assetRefs.length} referenced asset(s)`);
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { execSync } from 'node:child_process';
|
|
2
|
+
import fs from 'node:fs';
|
|
3
|
+
import path from 'node:path';
|
|
4
|
+
|
|
5
|
+
export function shouldBuildWeb(argv = process.argv, env = process.env) {
|
|
6
|
+
return argv.includes('--web') || env.GITNEXUS_BUILD_WEB === '1';
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export function shouldPreserveWebOutput(env = process.env) {
|
|
10
|
+
return (
|
|
11
|
+
env.npm_lifecycle_event === 'prepare' &&
|
|
12
|
+
(env.npm_command === 'pack' || env.npm_command === 'publish')
|
|
13
|
+
);
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
/** Build and copy the web UI when `--web` / GITNEXUS_BUILD_WEB=1 is set. */
|
|
17
|
+
export function runWebBuild({
|
|
18
|
+
root,
|
|
19
|
+
dist,
|
|
20
|
+
timeoutMs,
|
|
21
|
+
argv = process.argv,
|
|
22
|
+
env = process.env,
|
|
23
|
+
fsImpl = fs,
|
|
24
|
+
exec = execSync,
|
|
25
|
+
}) {
|
|
26
|
+
const webRoot = path.resolve(root, '..', 'gitnexus-web');
|
|
27
|
+
const webDest = path.join(dist, '..', 'web');
|
|
28
|
+
|
|
29
|
+
if (!shouldBuildWeb(argv, env)) {
|
|
30
|
+
if (shouldPreserveWebOutput(env)) {
|
|
31
|
+
console.log('[build] preserving prepack web UI during npm prepare');
|
|
32
|
+
} else {
|
|
33
|
+
fsImpl.rmSync(webDest, { recursive: true, force: true });
|
|
34
|
+
console.log(
|
|
35
|
+
'[build] skipping web UI and removed stale output ' +
|
|
36
|
+
'(pass --web or set GITNEXUS_BUILD_WEB=1 to include it)',
|
|
37
|
+
);
|
|
38
|
+
}
|
|
39
|
+
return { status: 'skipped', webDest };
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
if (!fsImpl.existsSync(path.join(webRoot, 'package.json'))) {
|
|
43
|
+
throw new Error(
|
|
44
|
+
`[build] web UI requested, but gitnexus-web was not found at ${webRoot}. ` +
|
|
45
|
+
'Run this command from the complete monorepo checkout.',
|
|
46
|
+
);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
console.log('[build] building gitnexus-web…');
|
|
50
|
+
if (!fsImpl.existsSync(path.join(webRoot, 'node_modules'))) {
|
|
51
|
+
// Deliberately untimed: this is a full second install, and killing it
|
|
52
|
+
// partway through leaves a broken tree and a misleading ETIMEDOUT.
|
|
53
|
+
// CI should install gitnexus-web itself (cached, its own step) so this
|
|
54
|
+
// fallback only fires for a local `npm pack` / `npm publish`.
|
|
55
|
+
console.log('[build] installing gitnexus-web dependencies (no local node_modules)…');
|
|
56
|
+
// String form uses the platform shell (cmd.exe / sh) so `npm` resolves to
|
|
57
|
+
// npm.cmd on Windows. execFileSync('npm') / execFileSync('npm.cmd')
|
|
58
|
+
// without a shell fails on Windows.
|
|
59
|
+
exec('npm ci', { cwd: webRoot, stdio: 'inherit' });
|
|
60
|
+
}
|
|
61
|
+
exec('npm run build', { cwd: webRoot, stdio: 'inherit', timeout: timeoutMs });
|
|
62
|
+
|
|
63
|
+
const builtIndex = path.join(webRoot, 'dist', 'index.html');
|
|
64
|
+
if (!fsImpl.existsSync(builtIndex)) {
|
|
65
|
+
throw new Error(`[build] gitnexus-web build completed without ${builtIndex}`);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
fsImpl.rmSync(webDest, { recursive: true, force: true });
|
|
69
|
+
fsImpl.cpSync(path.join(webRoot, 'dist'), webDest, { recursive: true });
|
|
70
|
+
console.log('[build] copied web UI → gitnexus/web/');
|
|
71
|
+
return { status: 'built', webDest };
|
|
72
|
+
}
|
package/scripts/build.js
CHANGED
|
@@ -8,17 +8,18 @@
|
|
|
8
8
|
* 3. Copy gitnexus-shared/dist → dist/_shared
|
|
9
9
|
* 4. Rewrite bare 'gitnexus-shared' specifiers → relative paths
|
|
10
10
|
*/
|
|
11
|
-
import {
|
|
11
|
+
import { execFileSync } from 'node:child_process';
|
|
12
12
|
import fs from 'node:fs';
|
|
13
13
|
import path from 'node:path';
|
|
14
14
|
import { fileURLToPath } from 'node:url';
|
|
15
|
+
import { runWebBuild } from './build-web.js';
|
|
15
16
|
|
|
16
17
|
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
17
18
|
const ROOT = path.resolve(__dirname, '..');
|
|
18
19
|
const SHARED_ROOT = path.resolve(ROOT, '..', 'gitnexus-shared');
|
|
19
20
|
const DIST = path.join(ROOT, 'dist');
|
|
20
21
|
const SHARED_DEST = path.join(DIST, '_shared');
|
|
21
|
-
const DEFAULT_BUILD_TIMEOUT_MS =
|
|
22
|
+
const DEFAULT_BUILD_TIMEOUT_MS = 600_000;
|
|
22
23
|
|
|
23
24
|
function getBuildTimeoutMs() {
|
|
24
25
|
const raw = process.env.GITNEXUS_BUILD_TIMEOUT_MS;
|
|
@@ -51,17 +52,29 @@ if (!fs.existsSync(SHARED_ROOT)) {
|
|
|
51
52
|
process.exit(1);
|
|
52
53
|
}
|
|
53
54
|
|
|
55
|
+
// Launch tsc as `node typescript/lib/tsc.js` on every OS. The `.bin/tsc` /
|
|
56
|
+
// `tsc.cmd` shims are Windows-only wrappers; `execFileSync` cannot spawn a
|
|
57
|
+
// `.cmd` without a shell, and a separate `npm ci` in gitnexus-shared pulls
|
|
58
|
+
// TypeScript 7 optional platform packages (7+ minutes in CI).
|
|
59
|
+
const tscJs = path.join(ROOT, 'node_modules', 'typescript', 'lib', 'tsc.js');
|
|
60
|
+
if (!fs.existsSync(tscJs)) {
|
|
61
|
+
console.error(
|
|
62
|
+
`[build] missing ${tscJs}. Install gitnexus dependencies first (npm ci in gitnexus/).`,
|
|
63
|
+
);
|
|
64
|
+
process.exit(1);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
function runTsc(cwd) {
|
|
68
|
+
execFileSync(process.execPath, [tscJs], { cwd, stdio: 'inherit', timeout: BUILD_TIMEOUT_MS });
|
|
69
|
+
}
|
|
70
|
+
|
|
54
71
|
// ── 1. Build gitnexus-shared ───────────────────────────────────────
|
|
55
72
|
console.log('[build] compiling gitnexus-shared…');
|
|
56
|
-
|
|
57
|
-
process.platform === 'win32'
|
|
58
|
-
? path.join('node_modules', '.bin', 'tsc.cmd')
|
|
59
|
-
: path.join('node_modules', '.bin', 'tsc');
|
|
60
|
-
execSync(tscCmd, { cwd: SHARED_ROOT, stdio: 'inherit', timeout: BUILD_TIMEOUT_MS });
|
|
73
|
+
runTsc(SHARED_ROOT);
|
|
61
74
|
|
|
62
75
|
// ── 2. Build gitnexus ──────────────────────────────────────────────
|
|
63
76
|
console.log('[build] compiling gitnexus…');
|
|
64
|
-
|
|
77
|
+
runTsc(ROOT);
|
|
65
78
|
|
|
66
79
|
// ── 3. Copy shared dist ────────────────────────────────────────────
|
|
67
80
|
console.log('[build] copying shared module into dist/_shared…');
|
|
@@ -104,26 +117,16 @@ walk(DIST, ['.js', '.d.ts'], rewriteFile);
|
|
|
104
117
|
|
|
105
118
|
// ── 5. Make CLI entry executable ────────────────────────────────────
|
|
106
119
|
const cliEntry = path.join(DIST, 'cli', 'index.js');
|
|
107
|
-
if (fs.existsSync(cliEntry))
|
|
108
|
-
|
|
109
|
-
// ── 6. Build & copy web UI ──────────────────────────────────────────
|
|
110
|
-
const WEB_ROOT = path.resolve(ROOT, '..', 'gitnexus-web');
|
|
111
|
-
const WEB_DEST = path.join(DIST, '..', 'web');
|
|
112
|
-
|
|
113
|
-
if (fs.existsSync(path.join(WEB_ROOT, 'package.json'))) {
|
|
114
|
-
console.log('[build] building gitnexus-web…');
|
|
115
|
-
if (!fs.existsSync(path.join(WEB_ROOT, 'node_modules'))) {
|
|
116
|
-
console.log('[build] installing gitnexus-web dependencies…');
|
|
117
|
-
execSync('npm ci', { cwd: WEB_ROOT, stdio: 'inherit', timeout: BUILD_TIMEOUT_MS });
|
|
118
|
-
}
|
|
119
|
-
execSync('npm run build', { cwd: WEB_ROOT, stdio: 'inherit', timeout: BUILD_TIMEOUT_MS });
|
|
120
|
-
|
|
121
|
-
// Copy dist → gitnexus/web/ (shipped in the npm package)
|
|
122
|
-
fs.rmSync(WEB_DEST, { recursive: true, force: true });
|
|
123
|
-
fs.cpSync(path.join(WEB_ROOT, 'dist'), WEB_DEST, { recursive: true });
|
|
124
|
-
console.log('[build] copied web UI → gitnexus/web/');
|
|
125
|
-
} else {
|
|
126
|
-
console.log('[build] skipping web UI (gitnexus-web not found)');
|
|
120
|
+
if (process.platform !== 'win32' && fs.existsSync(cliEntry)) {
|
|
121
|
+
fs.chmodSync(cliEntry, 0o755);
|
|
127
122
|
}
|
|
128
123
|
|
|
124
|
+
// ── 6. Build & copy web UI (opt-in) ─────────────────────────────────
|
|
125
|
+
// Web UI is a separate package and is only required in the published
|
|
126
|
+
// tarball, so it is built by `prepack --web`, not by `prepare`. Serve
|
|
127
|
+
// falls back to the landing page when web/ is absent. CLI-only builds
|
|
128
|
+
// delete stale web/ except during npm pack/publish prepare, which must
|
|
129
|
+
// keep the prepack output.
|
|
130
|
+
runWebBuild({ root: ROOT, dist: DIST, timeoutMs: BUILD_TIMEOUT_MS });
|
|
131
|
+
|
|
129
132
|
console.log(`[build] done — rewrote ${rewritten} files.`);
|