gitnexus 1.5.3 → 1.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +10 -0
- package/dist/_shared/graph/types.d.ts +1 -1
- package/dist/_shared/graph/types.d.ts.map +1 -1
- package/dist/_shared/index.d.ts +1 -0
- package/dist/_shared/index.d.ts.map +1 -1
- package/dist/_shared/language-detection.d.ts.map +1 -1
- package/dist/_shared/language-detection.js +2 -0
- package/dist/_shared/language-detection.js.map +1 -1
- package/dist/_shared/languages.d.ts +1 -0
- package/dist/_shared/languages.d.ts.map +1 -1
- package/dist/_shared/languages.js +1 -0
- package/dist/_shared/languages.js.map +1 -1
- package/dist/_shared/lbug/schema-constants.d.ts +1 -1
- package/dist/_shared/lbug/schema-constants.d.ts.map +1 -1
- package/dist/_shared/lbug/schema-constants.js +3 -1
- package/dist/_shared/lbug/schema-constants.js.map +1 -1
- package/dist/_shared/mro-strategy.d.ts +19 -0
- package/dist/_shared/mro-strategy.d.ts.map +1 -0
- package/dist/_shared/mro-strategy.js +2 -0
- package/dist/_shared/mro-strategy.js.map +1 -0
- package/dist/cli/ai-context.d.ts +1 -0
- package/dist/cli/ai-context.js +28 -4
- package/dist/cli/analyze.d.ts +2 -0
- package/dist/cli/analyze.js +2 -1
- package/dist/cli/group.d.ts +2 -0
- package/dist/cli/group.js +233 -0
- package/dist/cli/index.js +3 -0
- package/dist/cli/serve.js +4 -1
- package/dist/cli/setup.js +34 -3
- package/dist/config/ignore-service.js +8 -3
- package/dist/core/augmentation/engine.js +1 -1
- package/dist/core/git-staleness.d.ts +13 -0
- package/dist/core/git-staleness.js +29 -0
- package/dist/core/group/bridge-db.d.ts +82 -0
- package/dist/core/group/bridge-db.js +460 -0
- package/dist/core/group/bridge-schema.d.ts +27 -0
- package/dist/core/group/bridge-schema.js +55 -0
- package/dist/core/group/config-parser.d.ts +3 -0
- package/dist/core/group/config-parser.js +83 -0
- package/dist/core/group/contract-extractor.d.ts +7 -0
- package/dist/core/group/contract-extractor.js +1 -0
- package/dist/core/group/extractors/grpc-extractor.d.ts +16 -0
- package/dist/core/group/extractors/grpc-extractor.js +264 -0
- package/dist/core/group/extractors/http-route-extractor.d.ts +24 -0
- package/dist/core/group/extractors/http-route-extractor.js +428 -0
- package/dist/core/group/extractors/topic-extractor.d.ts +9 -0
- package/dist/core/group/extractors/topic-extractor.js +234 -0
- package/dist/core/group/matching.d.ts +13 -0
- package/dist/core/group/matching.js +198 -0
- package/dist/core/group/normalization.d.ts +3 -0
- package/dist/core/group/normalization.js +115 -0
- package/dist/core/group/service-boundary-detector.d.ts +8 -0
- package/dist/core/group/service-boundary-detector.js +155 -0
- package/dist/core/group/service.d.ts +46 -0
- package/dist/core/group/service.js +160 -0
- package/dist/core/group/storage.d.ts +9 -0
- package/dist/core/group/storage.js +91 -0
- package/dist/core/group/sync.d.ts +21 -0
- package/dist/core/group/sync.js +148 -0
- package/dist/core/group/types.d.ts +130 -0
- package/dist/core/group/types.js +1 -0
- package/dist/core/ingestion/binding-accumulator.d.ts +207 -0
- package/dist/core/ingestion/binding-accumulator.js +332 -0
- package/dist/core/ingestion/call-processor.d.ts +155 -24
- package/dist/core/ingestion/call-processor.js +1129 -247
- package/dist/core/ingestion/class-extractors/generic.d.ts +2 -0
- package/dist/core/ingestion/class-extractors/generic.js +135 -0
- package/dist/core/ingestion/class-types.d.ts +34 -0
- package/dist/core/ingestion/class-types.js +1 -0
- package/dist/core/ingestion/entry-point-scoring.d.ts +1 -0
- package/dist/core/ingestion/entry-point-scoring.js +1 -0
- package/dist/core/ingestion/field-types.d.ts +2 -2
- package/dist/core/ingestion/filesystem-walker.js +8 -0
- package/dist/core/ingestion/framework-detection.d.ts +1 -0
- package/dist/core/ingestion/framework-detection.js +1 -0
- package/dist/core/ingestion/heritage-processor.d.ts +8 -15
- package/dist/core/ingestion/heritage-processor.js +15 -28
- package/dist/core/ingestion/import-processor.d.ts +1 -11
- package/dist/core/ingestion/import-processor.js +0 -12
- package/dist/core/ingestion/import-resolvers/utils.js +1 -0
- package/dist/core/ingestion/import-resolvers/vue.d.ts +8 -0
- package/dist/core/ingestion/import-resolvers/vue.js +9 -0
- package/dist/core/ingestion/language-provider.d.ts +6 -3
- package/dist/core/ingestion/languages/c-cpp.js +168 -1
- package/dist/core/ingestion/languages/csharp.js +20 -0
- package/dist/core/ingestion/languages/dart.js +26 -4
- package/dist/core/ingestion/languages/go.js +22 -0
- package/dist/core/ingestion/languages/index.d.ts +1 -0
- package/dist/core/ingestion/languages/index.js +2 -0
- package/dist/core/ingestion/languages/java.js +17 -0
- package/dist/core/ingestion/languages/kotlin.js +24 -1
- package/dist/core/ingestion/languages/php.js +23 -11
- package/dist/core/ingestion/languages/python.js +9 -0
- package/dist/core/ingestion/languages/ruby.js +28 -0
- package/dist/core/ingestion/languages/rust.js +38 -0
- package/dist/core/ingestion/languages/swift.js +31 -0
- package/dist/core/ingestion/languages/typescript.d.ts +1 -0
- package/dist/core/ingestion/languages/typescript.js +52 -3
- package/dist/core/ingestion/languages/vue.d.ts +13 -0
- package/dist/core/ingestion/languages/vue.js +81 -0
- package/dist/core/ingestion/method-extractors/configs/c-cpp.d.ts +3 -0
- package/dist/core/ingestion/method-extractors/configs/c-cpp.js +387 -0
- package/dist/core/ingestion/method-extractors/configs/csharp.js +5 -1
- package/dist/core/ingestion/method-extractors/configs/dart.d.ts +2 -0
- package/dist/core/ingestion/method-extractors/configs/dart.js +376 -0
- package/dist/core/ingestion/method-extractors/configs/go.d.ts +2 -0
- package/dist/core/ingestion/method-extractors/configs/go.js +176 -0
- package/dist/core/ingestion/method-extractors/configs/jvm.js +13 -4
- package/dist/core/ingestion/method-extractors/configs/php.d.ts +2 -0
- package/dist/core/ingestion/method-extractors/configs/php.js +304 -0
- package/dist/core/ingestion/method-extractors/configs/python.d.ts +2 -0
- package/dist/core/ingestion/method-extractors/configs/python.js +309 -0
- package/dist/core/ingestion/method-extractors/configs/ruby.d.ts +2 -0
- package/dist/core/ingestion/method-extractors/configs/ruby.js +285 -0
- package/dist/core/ingestion/method-extractors/configs/rust.d.ts +2 -0
- package/dist/core/ingestion/method-extractors/configs/rust.js +195 -0
- package/dist/core/ingestion/method-extractors/configs/swift.d.ts +2 -0
- package/dist/core/ingestion/method-extractors/configs/swift.js +277 -0
- package/dist/core/ingestion/method-extractors/configs/typescript-javascript.js +85 -8
- package/dist/core/ingestion/method-extractors/generic.js +38 -15
- package/dist/core/ingestion/method-types.d.ts +25 -0
- package/dist/core/ingestion/model/field-registry.d.ts +18 -0
- package/dist/core/ingestion/model/field-registry.js +22 -0
- package/dist/core/ingestion/model/heritage-map.d.ts +70 -0
- package/dist/core/ingestion/model/heritage-map.js +159 -0
- package/dist/core/ingestion/model/index.d.ts +20 -0
- package/dist/core/ingestion/model/index.js +41 -0
- package/dist/core/ingestion/model/method-registry.d.ts +62 -0
- package/dist/core/ingestion/model/method-registry.js +130 -0
- package/dist/core/ingestion/model/registration-table.d.ts +139 -0
- package/dist/core/ingestion/model/registration-table.js +224 -0
- package/dist/core/ingestion/model/resolution-context.d.ts +93 -0
- package/dist/core/ingestion/model/resolution-context.js +337 -0
- package/dist/core/ingestion/model/resolve.d.ts +56 -0
- package/dist/core/ingestion/model/resolve.js +242 -0
- package/dist/core/ingestion/model/semantic-model.d.ts +86 -0
- package/dist/core/ingestion/model/semantic-model.js +120 -0
- package/dist/core/ingestion/model/symbol-table.d.ts +222 -0
- package/dist/core/ingestion/model/symbol-table.js +206 -0
- package/dist/core/ingestion/model/type-registry.d.ts +39 -0
- package/dist/core/ingestion/model/type-registry.js +62 -0
- package/dist/core/ingestion/mro-processor.d.ts +4 -3
- package/dist/core/ingestion/mro-processor.js +310 -106
- package/dist/core/ingestion/parsing-processor.d.ts +5 -4
- package/dist/core/ingestion/parsing-processor.js +210 -85
- package/dist/core/ingestion/pipeline.d.ts +2 -0
- package/dist/core/ingestion/pipeline.js +192 -68
- package/dist/core/ingestion/tree-sitter-queries.d.ts +5 -5
- package/dist/core/ingestion/tree-sitter-queries.js +21 -0
- package/dist/core/ingestion/type-env.d.ts +15 -2
- package/dist/core/ingestion/type-env.js +163 -102
- package/dist/core/ingestion/type-extractors/csharp.js +17 -0
- package/dist/core/ingestion/type-extractors/jvm.js +11 -0
- package/dist/core/ingestion/type-extractors/php.js +0 -55
- package/dist/core/ingestion/type-extractors/ruby.js +0 -32
- package/dist/core/ingestion/type-extractors/swift.js +13 -0
- package/dist/core/ingestion/type-extractors/types.d.ts +8 -8
- package/dist/core/ingestion/type-extractors/typescript.js +66 -69
- package/dist/core/ingestion/utils/ast-helpers.d.ts +33 -43
- package/dist/core/ingestion/utils/ast-helpers.js +129 -572
- package/dist/core/ingestion/utils/method-props.d.ts +32 -0
- package/dist/core/ingestion/utils/method-props.js +147 -0
- package/dist/core/ingestion/vue-sfc-extractor.d.ts +44 -0
- package/dist/core/ingestion/vue-sfc-extractor.js +94 -0
- package/dist/core/ingestion/workers/parse-worker.d.ts +31 -19
- package/dist/core/ingestion/workers/parse-worker.js +463 -198
- package/dist/core/lbug/lbug-adapter.d.ts +6 -0
- package/dist/core/lbug/lbug-adapter.js +68 -3
- package/dist/core/lbug/pool-adapter.d.ts +76 -0
- package/dist/core/lbug/pool-adapter.js +522 -0
- package/dist/core/run-analyze.d.ts +2 -0
- package/dist/core/run-analyze.js +1 -1
- package/dist/core/search/bm25-index.js +1 -1
- package/dist/core/tree-sitter/parser-loader.js +1 -0
- package/dist/core/wiki/graph-queries.js +1 -1
- package/dist/mcp/core/embedder.js +6 -5
- package/dist/mcp/core/lbug-adapter.d.ts +3 -63
- package/dist/mcp/core/lbug-adapter.js +3 -484
- package/dist/mcp/local/local-backend.d.ts +31 -2
- package/dist/mcp/local/local-backend.js +255 -46
- package/dist/mcp/resources.js +5 -4
- package/dist/mcp/staleness.d.ts +3 -13
- package/dist/mcp/staleness.js +2 -31
- package/dist/mcp/tools.js +80 -4
- package/dist/server/analyze-job.d.ts +2 -0
- package/dist/server/analyze-job.js +4 -0
- package/dist/server/api.d.ts +20 -1
- package/dist/server/api.js +306 -71
- package/dist/server/git-clone.d.ts +2 -1
- package/dist/server/git-clone.js +98 -5
- package/dist/storage/git.d.ts +13 -0
- package/dist/storage/git.js +25 -0
- package/dist/storage/repo-manager.js +1 -1
- package/package.json +8 -2
- package/scripts/patch-tree-sitter-swift.cjs +78 -0
- package/dist/core/ingestion/named-binding-processor.d.ts +0 -18
- package/dist/core/ingestion/named-binding-processor.js +0 -42
- package/dist/core/ingestion/resolution-context.d.ts +0 -58
- package/dist/core/ingestion/resolution-context.js +0 -135
- package/dist/core/ingestion/symbol-table.d.ts +0 -79
- package/dist/core/ingestion/symbol-table.js +0 -115
package/README.md
CHANGED
|
@@ -164,6 +164,16 @@ gitnexus clean # Delete index for current repo
|
|
|
164
164
|
gitnexus clean --all --force # Delete all indexes
|
|
165
165
|
gitnexus wiki [path] # Generate LLM-powered docs from knowledge graph
|
|
166
166
|
gitnexus wiki --model <model> # Wiki with custom LLM model (default: gpt-4o-mini)
|
|
167
|
+
|
|
168
|
+
# Repository groups (multi-repo / monorepo service tracking)
|
|
169
|
+
gitnexus group create <name> # Create a repository group
|
|
170
|
+
gitnexus group add <name> <repo> # Add a repo to a group
|
|
171
|
+
gitnexus group remove <name> <repo> # Remove a repo from a group
|
|
172
|
+
gitnexus group list [name] # List groups, or show one group's config
|
|
173
|
+
gitnexus group sync <name> # Extract contracts and match across repos/services
|
|
174
|
+
gitnexus group contracts <name> # Inspect extracted contracts and cross-links
|
|
175
|
+
gitnexus group query <name> <q> # Search execution flows across all repos in a group
|
|
176
|
+
gitnexus group status <name> # Check staleness of repos in a group
|
|
167
177
|
```
|
|
168
178
|
|
|
169
179
|
## Remote Embeddings
|
|
@@ -47,7 +47,7 @@ export type NodeProperties = {
|
|
|
47
47
|
middleware?: string[];
|
|
48
48
|
[key: string]: unknown;
|
|
49
49
|
};
|
|
50
|
-
export type RelationshipType = 'CONTAINS' | 'CALLS' | 'INHERITS' | '
|
|
50
|
+
export type RelationshipType = 'CONTAINS' | 'CALLS' | 'INHERITS' | 'METHOD_OVERRIDES' | 'METHOD_IMPLEMENTS' | 'IMPORTS' | 'USES' | 'DEFINES' | 'DECORATES' | 'IMPLEMENTS' | 'EXTENDS' | 'HAS_METHOD' | 'HAS_PROPERTY' | 'ACCESSES' | 'MEMBER_OF' | 'STEP_IN_PROCESS' | 'HANDLES_ROUTE' | 'FETCHES' | 'HANDLES_TOOL' | 'ENTRY_POINT_OF' | 'WRAPS' | 'QUERIES';
|
|
51
51
|
export interface GraphNode {
|
|
52
52
|
id: string;
|
|
53
53
|
label: NodeLabel;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/graph/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAErD,MAAM,MAAM,SAAS,GACjB,SAAS,GACT,SAAS,GACT,QAAQ,GACR,QAAQ,GACR,MAAM,GACN,OAAO,GACP,UAAU,GACV,QAAQ,GACR,UAAU,GACV,WAAW,GACX,MAAM,GACN,WAAW,GACX,QAAQ,GACR,MAAM,GACN,aAAa,GACb,WAAW,GACX,SAAS,GAET,QAAQ,GACR,OAAO,GACP,SAAS,GACT,OAAO,GACP,WAAW,GACX,OAAO,GACP,MAAM,GACN,WAAW,GACX,OAAO,GACP,QAAQ,GACR,UAAU,GACV,QAAQ,GACR,UAAU,GACV,YAAY,GACZ,aAAa,GACb,UAAU,GACV,SAAS,GACT,OAAO,GACP,MAAM,CAAC;AAEX,MAAM,MAAM,cAAc,GAAG;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,kBAAkB,GAAG,MAAM,CAAC;IACvC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAE5B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,WAAW,GAAG,KAAK,CAAC;IAEjC,WAAW,CAAC,EAAE,iBAAiB,GAAG,iBAAiB,CAAC;IACpD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IAEvB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IAEtB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GACxB,UAAU,GACV,OAAO,GACP,UAAU,GACV,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/graph/types.ts"],"names":[],"mappings":"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"}
|
package/dist/_shared/index.d.ts
CHANGED
|
@@ -3,5 +3,6 @@ export { NODE_TABLES, REL_TABLE_NAME, REL_TYPES, EMBEDDING_TABLE_NAME, } from '.
|
|
|
3
3
|
export type { NodeTableName, RelType } from './lbug/schema-constants.js';
|
|
4
4
|
export { SupportedLanguages } from './languages.js';
|
|
5
5
|
export { getLanguageFromFilename, getSyntaxLanguageFromFilename } from './language-detection.js';
|
|
6
|
+
export type { MroStrategy } from './mro-strategy.js';
|
|
6
7
|
export type { PipelinePhase, PipelineProgress } from './pipeline.js';
|
|
7
8
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,YAAY,EACV,SAAS,EACT,cAAc,EACd,gBAAgB,EAChB,SAAS,EACT,iBAAiB,GAClB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EACL,WAAW,EACX,cAAc,EACd,SAAS,EACT,oBAAoB,GACrB,MAAM,4BAA4B,CAAC;AACpC,YAAY,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AAGzE,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,uBAAuB,EAAE,6BAA6B,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,YAAY,EACV,SAAS,EACT,cAAc,EACd,gBAAgB,EAChB,SAAS,EACT,iBAAiB,GAClB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EACL,WAAW,EACX,cAAc,EACd,SAAS,EACT,oBAAoB,GACrB,MAAM,4BAA4B,CAAC;AACpC,YAAY,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AAGzE,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,uBAAuB,EAAE,6BAA6B,EAAE,MAAM,yBAAyB,CAAC;AACjG,YAAY,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGrD,YAAY,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC"}
|
|
@@ -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;
|
|
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;AA+CpD;;;GAGG;AACH,eAAO,MAAM,uBAAuB,GAAI,UAAU,MAAM,KAAG,kBAAkB,GAAG,IAgB/E,CAAC;AAwDF;;;;GAIG;AACH,eAAO,MAAM,6BAA6B,GAAI,UAAU,MAAM,KAAG,MAQhE,CAAC"}
|
|
@@ -38,6 +38,7 @@ const EXTENSION_MAP = {
|
|
|
38
38
|
[SupportedLanguages.Kotlin]: ['.kt', '.kts'],
|
|
39
39
|
[SupportedLanguages.Swift]: ['.swift'],
|
|
40
40
|
[SupportedLanguages.Dart]: ['.dart'],
|
|
41
|
+
[SupportedLanguages.Vue]: ['.vue'],
|
|
41
42
|
[SupportedLanguages.Cobol]: ['.cbl', '.cob', '.cpy', '.cobol'],
|
|
42
43
|
}; // Ensure exhaustiveness
|
|
43
44
|
/** Pre-built reverse lookup: extension → language (built once at module load). */
|
|
@@ -88,6 +89,7 @@ const SYNTAX_MAP = {
|
|
|
88
89
|
[SupportedLanguages.Kotlin]: 'kotlin',
|
|
89
90
|
[SupportedLanguages.Swift]: 'swift',
|
|
90
91
|
[SupportedLanguages.Dart]: 'dart',
|
|
92
|
+
[SupportedLanguages.Vue]: 'typescript',
|
|
91
93
|
[SupportedLanguages.Cobol]: 'cobol',
|
|
92
94
|
}; // Ensure exhaustiveness
|
|
93
95
|
/** Non-code file extensions → Prism-compatible syntax identifiers */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"language-detection.js","sourceRoot":"","sources":["../src/language-detection.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"language-detection.js","sourceRoot":"","sources":["../src/language-detection.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAEpD,6DAA6D;AAC7D,MAAM,wBAAwB,GAAG,IAAI,GAAG,CAAC;IACvC,UAAU;IACV,SAAS;IACT,WAAW;IACX,aAAa;IACb,UAAU;CACX,CAAC,CAAC;AAEH;;;;;GAKG;AACH,MAAM,aAAa,GAAkD;IACnE,CAAC,kBAAkB,CAAC,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;IAChE,CAAC,kBAAkB,CAAC,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;IAChE,CAAC,kBAAkB,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC;IACpC,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;IACpC,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC;IAC9B,CAAC,kBAAkB,CAAC,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;IACpF,CAAC,kBAAkB,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC;IACpC,CAAC,kBAAkB,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;IAChC,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,UAAU,CAAC;IACvD,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC;IAClC,CAAC,kBAAkB,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;IAChF,CAAC,kBAAkB,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC;IAC5C,CAAC,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC;IACtC,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;IACpC,CAAC,kBAAkB,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC;IAClC,CAAC,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC;CACP,CAAC,CAAC,wBAAwB;AAEnF,kFAAkF;AAClF,MAAM,SAAS,GAAG,IAAI,GAAG,EAA8B,CAAC;AACxD,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,aAAa,CAGpD,EAAE,CAAC;IACJ,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IAC3B,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,QAAgB,EAA6B,EAAE;IACrF,qCAAqC;IACrC,MAAM,OAAO,GAAG,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAC1C,IAAI,OAAO,IAAI,CAAC,EAAE,CAAC;QACjB,MAAM,GAAG,GAAG,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;QAClD,MAAM,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAChC,IAAI,IAAI,KAAK,SAAS;YAAE,OAAO,IAAI,CAAC;IACtC,CAAC;IAED,qDAAqD;IACrD,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,QAAQ,CAAC;IACvD,IAAI,wBAAwB,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC3C,OAAO,kBAAkB,CAAC,IAAI,CAAC;IACjC,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,UAAU,GAAuC;IACrD,CAAC,kBAAkB,CAAC,UAAU,CAAC,EAAE,YAAY;IAC7C,CAAC,kBAAkB,CAAC,UAAU,CAAC,EAAE,YAAY;IAC7C,CAAC,kBAAkB,CAAC,MAAM,CAAC,EAAE,QAAQ;IACrC,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,MAAM;IACjC,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,GAAG;IAC3B,CAAC,kBAAkB,CAAC,SAAS,CAAC,EAAE,KAAK;IACrC,CAAC,kBAAkB,CAAC,MAAM,CAAC,EAAE,QAAQ;IACrC,CAAC,kBAAkB,CAAC,EAAE,CAAC,EAAE,IAAI;IAC7B,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,MAAM;IACjC,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,MAAM;IACjC,CAAC,kBAAkB,CAAC,GAAG,CAAC,EAAE,KAAK;IAC/B,CAAC,kBAAkB,CAAC,MAAM,CAAC,EAAE,QAAQ;IACrC,CAAC,kBAAkB,CAAC,KAAK,CAAC,EAAE,OAAO;IACnC,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,MAAM;IACjC,CAAC,kBAAkB,CAAC,GAAG,CAAC,EAAE,YAAY;IACtC,CAAC,kBAAkB,CAAC,KAAK,CAAC,EAAE,OAAO;CACS,CAAC,CAAC,wBAAwB;AAExE,qEAAqE;AACrE,MAAM,oBAAoB,GAA2B;IACnD,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,MAAM;IACZ,GAAG,EAAE,MAAM;IACX,EAAE,EAAE,UAAU;IACd,GAAG,EAAE,UAAU;IACf,IAAI,EAAE,QAAQ;IACd,GAAG,EAAE,QAAQ;IACb,GAAG,EAAE,QAAQ;IACb,GAAG,EAAE,QAAQ;IACb,GAAG,EAAE,KAAK;IACV,IAAI,EAAE,KAAK;IACX,IAAI,EAAE,KAAK;IACX,EAAE,EAAE,MAAM;IACV,IAAI,EAAE,MAAM;IACZ,GAAG,EAAE,MAAM;IACX,GAAG,EAAE,KAAK;IACV,IAAI,EAAE,MAAM;IACZ,GAAG,EAAE,KAAK;IACV,UAAU,EAAE,QAAQ;CACrB,CAAC;AAEF,oEAAoE;AACpE,MAAM,sBAAsB,GAA2B;IACrD,QAAQ,EAAE,UAAU;IACpB,UAAU,EAAE,QAAQ;CACrB,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAAC,QAAgB,EAAU,EAAE;IACxE,MAAM,IAAI,GAAG,uBAAuB,CAAC,QAAQ,CAAC,CAAC;IAC/C,IAAI,IAAI;QAAE,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC;IAClC,MAAM,GAAG,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,WAAW,EAAE,CAAC;IACrD,IAAI,GAAG,IAAI,GAAG,IAAI,oBAAoB;QAAE,OAAO,oBAAoB,CAAC,GAAG,CAAC,CAAC;IACzE,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;IACjD,IAAI,QAAQ,IAAI,sBAAsB;QAAE,OAAO,sBAAsB,CAAC,QAAQ,CAAC,CAAC;IAChF,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"languages.d.ts","sourceRoot":"","sources":["../src/languages.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,oBAAY,kBAAkB;IAC5B,UAAU,eAAe;IACzB,UAAU,eAAe;IACzB,MAAM,WAAW;IACjB,IAAI,SAAS;IACb,CAAC,MAAM;IACP,SAAS,QAAQ;IACjB,MAAM,WAAW;IACjB,EAAE,OAAO;IACT,IAAI,SAAS;IACb,IAAI,SAAS;IACb,GAAG,QAAQ;IACX,MAAM,WAAW;IACjB,KAAK,UAAU;IACf,IAAI,SAAS;IACb,wEAAwE;IACxE,KAAK,UAAU;CAChB"}
|
|
1
|
+
{"version":3,"file":"languages.d.ts","sourceRoot":"","sources":["../src/languages.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,oBAAY,kBAAkB;IAC5B,UAAU,eAAe;IACzB,UAAU,eAAe;IACzB,MAAM,WAAW;IACjB,IAAI,SAAS;IACb,CAAC,MAAM;IACP,SAAS,QAAQ;IACjB,MAAM,WAAW;IACjB,EAAE,OAAO;IACT,IAAI,SAAS;IACb,IAAI,SAAS;IACb,GAAG,QAAQ;IACX,MAAM,WAAW;IACjB,KAAK,UAAU;IACf,IAAI,SAAS;IACb,GAAG,QAAQ;IACX,wEAAwE;IACxE,KAAK,UAAU;CAChB"}
|
|
@@ -20,6 +20,7 @@ export var SupportedLanguages;
|
|
|
20
20
|
SupportedLanguages["Kotlin"] = "kotlin";
|
|
21
21
|
SupportedLanguages["Swift"] = "swift";
|
|
22
22
|
SupportedLanguages["Dart"] = "dart";
|
|
23
|
+
SupportedLanguages["Vue"] = "vue";
|
|
23
24
|
/** Standalone regex processor — no tree-sitter, no LanguageProvider. */
|
|
24
25
|
SupportedLanguages["Cobol"] = "cobol";
|
|
25
26
|
})(SupportedLanguages || (SupportedLanguages = {}));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"languages.js","sourceRoot":"","sources":["../src/languages.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,CAAN,IAAY,
|
|
1
|
+
{"version":3,"file":"languages.js","sourceRoot":"","sources":["../src/languages.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,CAAN,IAAY,kBAkBX;AAlBD,WAAY,kBAAkB;IAC5B,+CAAyB,CAAA;IACzB,+CAAyB,CAAA;IACzB,uCAAiB,CAAA;IACjB,mCAAa,CAAA;IACb,6BAAO,CAAA;IACP,uCAAiB,CAAA;IACjB,uCAAiB,CAAA;IACjB,+BAAS,CAAA;IACT,mCAAa,CAAA;IACb,mCAAa,CAAA;IACb,iCAAW,CAAA;IACX,uCAAiB,CAAA;IACjB,qCAAe,CAAA;IACf,mCAAa,CAAA;IACb,iCAAW,CAAA;IACX,wEAAwE;IACxE,qCAAe,CAAA;AACjB,CAAC,EAlBW,kBAAkB,KAAlB,kBAAkB,QAkB7B"}
|
|
@@ -10,7 +10,7 @@
|
|
|
10
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", "Property", "Record", "Delegate", "Annotation", "Constructor", "Template", "Module", "Route", "Tool"];
|
|
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 ["CONTAINS", "DEFINES", "IMPORTS", "CALLS", "EXTENDS", "IMPLEMENTS", "HAS_METHOD", "HAS_PROPERTY", "ACCESSES", "OVERRIDES", "MEMBER_OF", "STEP_IN_PROCESS", "HANDLES_ROUTE", "FETCHES", "HANDLES_TOOL", "ENTRY_POINT_OF", "WRAPS", "QUERIES"];
|
|
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", "FETCHES", "HANDLES_TOOL", "ENTRY_POINT_OF", "WRAPS", "QUERIES"];
|
|
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,8UA+Bd,CAAC;AAEX,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC;AAEzD,eAAO,MAAM,cAAc,iBAAiB,CAAC;AAE7C,eAAO,MAAM,SAAS,
|
|
1
|
+
{"version":3,"file":"schema-constants.d.ts","sourceRoot":"","sources":["../../src/lbug/schema-constants.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,eAAO,MAAM,WAAW,8UA+Bd,CAAC;AAEX,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC;AAEzD,eAAO,MAAM,cAAc,iBAAiB,CAAC;AAE7C,eAAO,MAAM,SAAS,iSAqBZ,CAAC;AAEX,MAAM,MAAM,OAAO,GAAG,CAAC,OAAO,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC;AAEjD,eAAO,MAAM,oBAAoB,kBAAkB,CAAC"}
|
|
@@ -50,7 +50,9 @@ export const REL_TYPES = [
|
|
|
50
50
|
'HAS_METHOD',
|
|
51
51
|
'HAS_PROPERTY',
|
|
52
52
|
'ACCESSES',
|
|
53
|
-
'
|
|
53
|
+
'METHOD_OVERRIDES',
|
|
54
|
+
'OVERRIDES', // Legacy compat alias — kept until all stored indexes are migrated
|
|
55
|
+
'METHOD_IMPLEMENTS',
|
|
54
56
|
'MEMBER_OF',
|
|
55
57
|
'STEP_IN_PROCESS',
|
|
56
58
|
'HANDLES_ROUTE',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema-constants.js","sourceRoot":"","sources":["../../src/lbug/schema-constants.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,MAAM;IACN,QAAQ;IACR,UAAU;IACV,OAAO;IACP,WAAW;IACX,QAAQ;IACR,aAAa;IACb,WAAW;IACX,SAAS;IACT,SAAS;IACT,QAAQ;IACR,MAAM;IACN,OAAO;IACP,SAAS;IACT,OAAO;IACP,WAAW;IACX,OAAO;IACP,MAAM;IACN,WAAW;IACX,OAAO;IACP,QAAQ;IACR,UAAU;IACV,QAAQ;IACR,UAAU;IACV,YAAY;IACZ,aAAa;IACb,UAAU;IACV,QAAQ;IACR,OAAO;IACP,MAAM;CACE,CAAC;AAIX,MAAM,CAAC,MAAM,cAAc,GAAG,cAAc,CAAC;AAE7C,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,UAAU;IACV,SAAS;IACT,SAAS;IACT,OAAO;IACP,SAAS;IACT,YAAY;IACZ,YAAY;IACZ,cAAc;IACd,UAAU;IACV,WAAW;
|
|
1
|
+
{"version":3,"file":"schema-constants.js","sourceRoot":"","sources":["../../src/lbug/schema-constants.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,MAAM;IACN,QAAQ;IACR,UAAU;IACV,OAAO;IACP,WAAW;IACX,QAAQ;IACR,aAAa;IACb,WAAW;IACX,SAAS;IACT,SAAS;IACT,QAAQ;IACR,MAAM;IACN,OAAO;IACP,SAAS;IACT,OAAO;IACP,WAAW;IACX,OAAO;IACP,MAAM;IACN,WAAW;IACX,OAAO;IACP,QAAQ;IACR,UAAU;IACV,QAAQ;IACR,UAAU;IACV,YAAY;IACZ,aAAa;IACb,UAAU;IACV,QAAQ;IACR,OAAO;IACP,MAAM;CACE,CAAC;AAIX,MAAM,CAAC,MAAM,cAAc,GAAG,cAAc,CAAC;AAE7C,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,UAAU;IACV,SAAS;IACT,SAAS;IACT,OAAO;IACP,SAAS;IACT,YAAY;IACZ,YAAY;IACZ,cAAc;IACd,UAAU;IACV,kBAAkB;IAClB,WAAW,EAAE,mEAAmE;IAChF,mBAAmB;IACnB,WAAW;IACX,iBAAiB;IACjB,eAAe;IACf,SAAS;IACT,cAAc;IACd,gBAAgB;IAChB,OAAO;IACP,SAAS;CACD,CAAC;AAIX,MAAM,CAAC,MAAM,oBAAoB,GAAG,eAAe,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MRO (Method Resolution Order) strategy — shared between CLI and any
|
|
3
|
+
* future consumer that reasons about multiple-inheritance semantics.
|
|
4
|
+
*
|
|
5
|
+
* Lives in `gitnexus-shared` so the low-level resolution module
|
|
6
|
+
* (`core/ingestion/model/resolve.ts`) does not need to import from
|
|
7
|
+
* `languages/` — keeping the `model/` layer free of language-registry
|
|
8
|
+
* coupling.
|
|
9
|
+
*
|
|
10
|
+
* Strategy semantics:
|
|
11
|
+
* - `first-wins`: BFS ancestor walk, first match wins (default).
|
|
12
|
+
* - `leftmost-base`: BFS ancestor walk, leftmost base wins (C++).
|
|
13
|
+
* - `c3`: C3-linearized ancestor order, first match wins (Python).
|
|
14
|
+
* - `implements-split`: BFS walk, first match wins (Java/C#/Kotlin) — full
|
|
15
|
+
* interface-default ambiguity is handled at graph level.
|
|
16
|
+
* - `qualified-syntax`: No auto-resolution (Rust — requires `<T as Trait>::m`).
|
|
17
|
+
*/
|
|
18
|
+
export type MroStrategy = 'first-wins' | 'c3' | 'leftmost-base' | 'implements-split' | 'qualified-syntax';
|
|
19
|
+
//# sourceMappingURL=mro-strategy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mro-strategy.d.ts","sourceRoot":"","sources":["../src/mro-strategy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,MAAM,WAAW,GACnB,YAAY,GACZ,IAAI,GACJ,eAAe,GACf,kBAAkB,GAClB,kBAAkB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mro-strategy.js","sourceRoot":"","sources":["../src/mro-strategy.ts"],"names":[],"mappings":""}
|
package/dist/cli/ai-context.d.ts
CHANGED
package/dist/cli/ai-context.js
CHANGED
|
@@ -24,7 +24,24 @@ const GITNEXUS_END_MARKER = '<!-- gitnexus:end -->';
|
|
|
24
24
|
* - Exact tool commands with parameters — vague directives get ignored
|
|
25
25
|
* - Self-review checklist — forces model to verify its own work
|
|
26
26
|
*/
|
|
27
|
-
function
|
|
27
|
+
async function findGroupsContainingRegistryName(registryName) {
|
|
28
|
+
const { listGroups, getDefaultGitnexusDir, getGroupDir } = await import('../core/group/storage.js');
|
|
29
|
+
const { loadGroupConfig } = await import('../core/group/config-parser.js');
|
|
30
|
+
const names = await listGroups();
|
|
31
|
+
const hits = [];
|
|
32
|
+
for (const g of names) {
|
|
33
|
+
try {
|
|
34
|
+
const config = await loadGroupConfig(getGroupDir(getDefaultGitnexusDir(), g));
|
|
35
|
+
if (Object.values(config.repos).some((r) => r === registryName))
|
|
36
|
+
hits.push(config.name);
|
|
37
|
+
}
|
|
38
|
+
catch {
|
|
39
|
+
// skip invalid or unreadable groups
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
return hits;
|
|
43
|
+
}
|
|
44
|
+
function generateGitNexusContent(projectName, stats, generatedSkills, groupNames, noStats) {
|
|
28
45
|
const generatedRows = generatedSkills && generatedSkills.length > 0
|
|
29
46
|
? generatedSkills
|
|
30
47
|
.map((s) => `| Work in the ${s.label} area (${s.symbolCount} symbols) | \`.claude/skills/generated/${s.name}/SKILL.md\` |`)
|
|
@@ -41,7 +58,7 @@ function generateGitNexusContent(projectName, stats, generatedSkills) {
|
|
|
41
58
|
return `${GITNEXUS_START_MARKER}
|
|
42
59
|
# GitNexus — Code Intelligence
|
|
43
60
|
|
|
44
|
-
This project is indexed by GitNexus as **${projectName}
|
|
61
|
+
This project is indexed by GitNexus as **${projectName}**${noStats ? '' : ` (${stats.nodes || 0} symbols, ${stats.edges || 0} relationships, ${stats.processes || 0} execution flows)`}. Use the GitNexus MCP tools to understand code, assess impact, and navigate safely.
|
|
45
62
|
|
|
46
63
|
> If any GitNexus tool warns the index is stale, run \`npx gitnexus analyze\` in terminal first.
|
|
47
64
|
|
|
@@ -127,7 +144,13 @@ To check whether embeddings exist, inspect \`.gitnexus/meta.json\` — the \`sta
|
|
|
127
144
|
|
|
128
145
|
> Claude Code users: A PostToolUse hook handles this automatically after \`git commit\` and \`git merge\`.
|
|
129
146
|
|
|
130
|
-
|
|
147
|
+
${groupNames && groupNames.length > 0
|
|
148
|
+
? `## Cross-Repo Groups
|
|
149
|
+
|
|
150
|
+
This repository is listed under GitNexus **group(s): ${groupNames.join(', ')}** (see \`~/.gitnexus/groups/\`). For blast radius across repository boundaries, use MCP tools \`group_impact\`, \`group_sync\`, \`group_query\`, \`group_contracts\`, \`group_status\`, and \`group_list\`. From the terminal: \`npx gitnexus group list\`, \`npx gitnexus group sync <name>\`, \`npx gitnexus group impact <name> --target <symbol> --repo <group-path>\`.
|
|
151
|
+
|
|
152
|
+
`
|
|
153
|
+
: ''}## CLI
|
|
131
154
|
|
|
132
155
|
${skillsTable}
|
|
133
156
|
|
|
@@ -248,7 +271,8 @@ Use GitNexus tools to accomplish this task.
|
|
|
248
271
|
* Generate AI context files after indexing
|
|
249
272
|
*/
|
|
250
273
|
export async function generateAIContextFiles(repoPath, _storagePath, projectName, stats, generatedSkills, options) {
|
|
251
|
-
const
|
|
274
|
+
const groupNames = await findGroupsContainingRegistryName(projectName);
|
|
275
|
+
const content = generateGitNexusContent(projectName, stats, generatedSkills, groupNames, options?.noStats);
|
|
252
276
|
const createdFiles = [];
|
|
253
277
|
if (!options?.skipAgentsMd) {
|
|
254
278
|
// Create AGENTS.md (standard for Cursor, Windsurf, OpenCode, Cline, etc.)
|
package/dist/cli/analyze.d.ts
CHANGED
|
@@ -14,6 +14,8 @@ export interface AnalyzeOptions {
|
|
|
14
14
|
verbose?: boolean;
|
|
15
15
|
/** Skip AGENTS.md and CLAUDE.md gitnexus block updates. */
|
|
16
16
|
skipAgentsMd?: boolean;
|
|
17
|
+
/** Omit volatile symbol/relationship counts from AGENTS.md and CLAUDE.md. */
|
|
18
|
+
noStats?: boolean;
|
|
17
19
|
/** Index the folder even when no .git directory is present. */
|
|
18
20
|
skipGit?: boolean;
|
|
19
21
|
}
|
package/dist/cli/analyze.js
CHANGED
|
@@ -139,6 +139,7 @@ export const analyzeCommand = async (inputPath, options) => {
|
|
|
139
139
|
embeddings: options?.embeddings,
|
|
140
140
|
skipGit: options?.skipGit,
|
|
141
141
|
skipAgentsMd: options?.skipAgentsMd,
|
|
142
|
+
noStats: options?.noStats,
|
|
142
143
|
}, {
|
|
143
144
|
onProgress: (_phase, percent, message) => {
|
|
144
145
|
updateBar(percent, message);
|
|
@@ -186,7 +187,7 @@ export const analyzeCommand = async (inputPath, options) => {
|
|
|
186
187
|
communities: s.communities,
|
|
187
188
|
clusters: aggregatedClusterCount,
|
|
188
189
|
processes: s.processes,
|
|
189
|
-
}, skillResult.skills, { skipAgentsMd: options?.skipAgentsMd });
|
|
190
|
+
}, skillResult.skills, { skipAgentsMd: options?.skipAgentsMd, noStats: options?.noStats });
|
|
190
191
|
}
|
|
191
192
|
}
|
|
192
193
|
catch {
|
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
// gitnexus/src/cli/group.ts
|
|
2
|
+
import { createRequire } from 'node:module';
|
|
3
|
+
const _require = createRequire(import.meta.url);
|
|
4
|
+
const yaml = _require('js-yaml');
|
|
5
|
+
export function registerGroupCommands(program) {
|
|
6
|
+
const group = program
|
|
7
|
+
.command('group')
|
|
8
|
+
.description('Manage repository groups for cross-index impact analysis');
|
|
9
|
+
group
|
|
10
|
+
.command('create <name>')
|
|
11
|
+
.description('Create a new group with template group.yaml')
|
|
12
|
+
.option('--force', 'Overwrite existing group')
|
|
13
|
+
.action(async (name, opts) => {
|
|
14
|
+
const { createGroupDir, getDefaultGitnexusDir } = await import('../core/group/storage.js');
|
|
15
|
+
const dir = await createGroupDir(getDefaultGitnexusDir(), name, opts.force);
|
|
16
|
+
console.log(`Created group "${name}" at ${dir}`);
|
|
17
|
+
console.log('Edit group.yaml to add repos, then run: gitnexus group sync ' + name);
|
|
18
|
+
});
|
|
19
|
+
group
|
|
20
|
+
.command('add <group> <groupPath> <registryName>')
|
|
21
|
+
.description('Add a repo to a group. <groupPath> = hierarchy path (e.g. hr/hiring/backend), <registryName> = name from registry')
|
|
22
|
+
.action(async (groupName, groupPath, registryName) => {
|
|
23
|
+
const { getGroupDir, getDefaultGitnexusDir } = await import('../core/group/storage.js');
|
|
24
|
+
const { loadGroupConfig } = await import('../core/group/config-parser.js');
|
|
25
|
+
const path = await import('node:path');
|
|
26
|
+
const fs = await import('node:fs/promises');
|
|
27
|
+
const groupDir = getGroupDir(getDefaultGitnexusDir(), groupName);
|
|
28
|
+
const config = await loadGroupConfig(groupDir);
|
|
29
|
+
config.repos[groupPath] = registryName;
|
|
30
|
+
await fs.writeFile(path.join(groupDir, 'group.yaml'), yaml.dump(config), 'utf-8');
|
|
31
|
+
console.log(`Added ${registryName} as "${groupPath}" to group "${groupName}"`);
|
|
32
|
+
console.log(`Run: gitnexus group sync ${groupName}`);
|
|
33
|
+
});
|
|
34
|
+
group
|
|
35
|
+
.command('remove <group> <path>')
|
|
36
|
+
.description('Remove a repo from a group')
|
|
37
|
+
.action(async (groupName, repoPath) => {
|
|
38
|
+
const { getGroupDir, getDefaultGitnexusDir } = await import('../core/group/storage.js');
|
|
39
|
+
const { loadGroupConfig } = await import('../core/group/config-parser.js');
|
|
40
|
+
const path = await import('node:path');
|
|
41
|
+
const fs = await import('node:fs/promises');
|
|
42
|
+
const groupDir = getGroupDir(getDefaultGitnexusDir(), groupName);
|
|
43
|
+
const config = await loadGroupConfig(groupDir);
|
|
44
|
+
if (!(repoPath in config.repos)) {
|
|
45
|
+
console.error(`Repo path "${repoPath}" not found in group "${groupName}"`);
|
|
46
|
+
process.exitCode = 1;
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
delete config.repos[repoPath];
|
|
50
|
+
await fs.writeFile(path.join(groupDir, 'group.yaml'), yaml.dump(config), 'utf-8');
|
|
51
|
+
console.log(`Removed "${repoPath}" from group "${groupName}"`);
|
|
52
|
+
});
|
|
53
|
+
group
|
|
54
|
+
.command('list [name]')
|
|
55
|
+
.description('List all groups or details of one')
|
|
56
|
+
.action(async (name) => {
|
|
57
|
+
const { listGroups, getDefaultGitnexusDir, getGroupDir } = await import('../core/group/storage.js');
|
|
58
|
+
if (!name) {
|
|
59
|
+
const groups = await listGroups();
|
|
60
|
+
if (groups.length === 0) {
|
|
61
|
+
console.log('No groups configured. Create one with: gitnexus group create <name>');
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
console.log('Groups:');
|
|
65
|
+
groups.forEach((g) => console.log(` ${g}`));
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
const { loadGroupConfig } = await import('../core/group/config-parser.js');
|
|
69
|
+
const groupDir = getGroupDir(getDefaultGitnexusDir(), name);
|
|
70
|
+
const config = await loadGroupConfig(groupDir);
|
|
71
|
+
console.log(`Group: ${config.name}`);
|
|
72
|
+
if (config.description)
|
|
73
|
+
console.log(`Description: ${config.description}`);
|
|
74
|
+
console.log(`\nRepos (${Object.keys(config.repos).length}):`);
|
|
75
|
+
for (const [p, id] of Object.entries(config.repos)) {
|
|
76
|
+
console.log(` ${p} -> ${id}`);
|
|
77
|
+
}
|
|
78
|
+
if (config.links.length > 0) {
|
|
79
|
+
console.log(`\nManifest links (${config.links.length}):`);
|
|
80
|
+
for (const link of config.links) {
|
|
81
|
+
console.log(` ${link.from} -> ${link.to} [${link.type}: ${link.contract}]`);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
});
|
|
85
|
+
group
|
|
86
|
+
.command('status <name>')
|
|
87
|
+
.description('Check staleness of group and repos')
|
|
88
|
+
.action(async (name) => {
|
|
89
|
+
const { readContractRegistry, getGroupDir, getDefaultGitnexusDir } = await import('../core/group/storage.js');
|
|
90
|
+
const { LocalBackend } = await import('../mcp/local/local-backend.js');
|
|
91
|
+
const groupDir = getGroupDir(getDefaultGitnexusDir(), name);
|
|
92
|
+
const registry = await readContractRegistry(groupDir);
|
|
93
|
+
console.log(`Group: ${name}${registry ? ` (last sync: ${registry.generatedAt})` : ' (never synced)'}\n`);
|
|
94
|
+
const backend = new LocalBackend();
|
|
95
|
+
try {
|
|
96
|
+
await backend.init();
|
|
97
|
+
const raw = await backend.getGroupService().groupStatus({ name });
|
|
98
|
+
const st = raw;
|
|
99
|
+
console.log(' Repo index / contracts staleness:');
|
|
100
|
+
for (const [repoPath, row] of Object.entries(st.repos || {})) {
|
|
101
|
+
if (row.missing) {
|
|
102
|
+
console.log(` ${repoPath.padEnd(25)} MISSING (not in registry or unreadable)`);
|
|
103
|
+
continue;
|
|
104
|
+
}
|
|
105
|
+
const idx = row.indexStale
|
|
106
|
+
? `STALE (${row.commitsBehind ?? '?'} commits behind)`
|
|
107
|
+
: 'OK ';
|
|
108
|
+
const ctr = row.contractsStale ? ' CONTRACTS_STALE' : '';
|
|
109
|
+
console.log(` ${repoPath.padEnd(25)} ${idx}${ctr}`);
|
|
110
|
+
}
|
|
111
|
+
if ((st.missingRepos || []).length > 0) {
|
|
112
|
+
console.log(`\n Last sync missing repos: ${st.missingRepos.join(', ')}`);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
finally {
|
|
116
|
+
await backend.dispose().catch(() => { });
|
|
117
|
+
}
|
|
118
|
+
});
|
|
119
|
+
group
|
|
120
|
+
.command('sync <name>')
|
|
121
|
+
.description('Sync Contract Registry — extract contracts and build cross-links')
|
|
122
|
+
.option('--skip-embeddings', 'Exact + BM25 only (no embedding fallback)')
|
|
123
|
+
.option('--exact-only', 'Exact match only')
|
|
124
|
+
.option('--allow-stale', 'Skip stale index warnings')
|
|
125
|
+
.option('--verbose', 'Show each cross-link detail')
|
|
126
|
+
.option('--json', 'JSON output')
|
|
127
|
+
.action(async (name, opts) => {
|
|
128
|
+
const { getGroupDir, getDefaultGitnexusDir } = await import('../core/group/storage.js');
|
|
129
|
+
const { loadGroupConfig } = await import('../core/group/config-parser.js');
|
|
130
|
+
const { syncGroup } = await import('../core/group/sync.js');
|
|
131
|
+
const groupDir = getGroupDir(getDefaultGitnexusDir(), name);
|
|
132
|
+
const config = await loadGroupConfig(groupDir);
|
|
133
|
+
console.log(`Syncing group "${name}" (${Object.keys(config.repos).length} repos)...\n`);
|
|
134
|
+
const result = await syncGroup(config, {
|
|
135
|
+
groupDir,
|
|
136
|
+
allowStale: Boolean(opts.allowStale),
|
|
137
|
+
verbose: Boolean(opts.verbose),
|
|
138
|
+
skipEmbeddings: Boolean(opts.skipEmbeddings),
|
|
139
|
+
exactOnly: Boolean(opts.exactOnly),
|
|
140
|
+
});
|
|
141
|
+
if (opts.json) {
|
|
142
|
+
console.log(JSON.stringify(result, null, 2));
|
|
143
|
+
}
|
|
144
|
+
else {
|
|
145
|
+
console.log(`\nMatching cascade:`);
|
|
146
|
+
const exactLinks = result.crossLinks.filter((l) => l.matchType === 'exact');
|
|
147
|
+
console.log(` exact: ${exactLinks.length} cross-links (confidence 1.0)`);
|
|
148
|
+
console.log(` unmatched: ${result.unmatched.length} contracts`);
|
|
149
|
+
console.log(`\nWrote contracts.json (${result.contracts.length} contracts, ${result.crossLinks.length} cross-links)`);
|
|
150
|
+
}
|
|
151
|
+
});
|
|
152
|
+
group
|
|
153
|
+
.command('query <name> <query>')
|
|
154
|
+
.description('Search execution flows across all repos in a group')
|
|
155
|
+
.option('--subgroup <path>', 'Limit search scope')
|
|
156
|
+
.option('--limit <n>', 'Max merged results', '5')
|
|
157
|
+
.option('--json', 'JSON output')
|
|
158
|
+
.action(async (name, queryText, opts) => {
|
|
159
|
+
const { LocalBackend } = await import('../mcp/local/local-backend.js');
|
|
160
|
+
const limit = parseInt(String(opts.limit ?? '5'), 10) || 5;
|
|
161
|
+
const subgroup = opts.subgroup;
|
|
162
|
+
const backend = new LocalBackend();
|
|
163
|
+
try {
|
|
164
|
+
await backend.init();
|
|
165
|
+
console.log(`Searching "${queryText}" across group "${name}"...\n`);
|
|
166
|
+
const raw = await backend.getGroupService().groupQuery({
|
|
167
|
+
name,
|
|
168
|
+
query: queryText,
|
|
169
|
+
limit,
|
|
170
|
+
subgroup,
|
|
171
|
+
});
|
|
172
|
+
const merged = raw;
|
|
173
|
+
if (opts.json) {
|
|
174
|
+
console.log(JSON.stringify(raw, null, 2));
|
|
175
|
+
}
|
|
176
|
+
else {
|
|
177
|
+
console.log(`Results (top ${merged.results.length}):\n`);
|
|
178
|
+
for (const p of merged.results) {
|
|
179
|
+
const label = (p.summary || p.heuristicLabel || p.name || 'unnamed');
|
|
180
|
+
console.log(` [${p._repo}] ${label} (rrf: ${p._rrf_score.toFixed(4)})`);
|
|
181
|
+
}
|
|
182
|
+
if (merged.results.length === 0) {
|
|
183
|
+
console.log(' No matching execution flows found.');
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
finally {
|
|
188
|
+
await backend.dispose().catch(() => { });
|
|
189
|
+
}
|
|
190
|
+
});
|
|
191
|
+
group
|
|
192
|
+
.command('contracts <name>')
|
|
193
|
+
.description('Inspect Contract Registry')
|
|
194
|
+
.option('--type <type>', 'Filter by contract type')
|
|
195
|
+
.option('--repo <repo>', 'Filter by repo')
|
|
196
|
+
.option('--unmatched', 'Show only unmatched contracts')
|
|
197
|
+
.option('--json', 'JSON output')
|
|
198
|
+
.action(async (name, opts) => {
|
|
199
|
+
const { LocalBackend } = await import('../mcp/local/local-backend.js');
|
|
200
|
+
const backend = new LocalBackend();
|
|
201
|
+
try {
|
|
202
|
+
await backend.init();
|
|
203
|
+
const raw = await backend.getGroupService().groupContracts({
|
|
204
|
+
name,
|
|
205
|
+
type: opts.type,
|
|
206
|
+
repo: opts.repo,
|
|
207
|
+
unmatchedOnly: Boolean(opts.unmatched),
|
|
208
|
+
});
|
|
209
|
+
if (raw && typeof raw === 'object' && 'error' in raw) {
|
|
210
|
+
console.error(String(raw.error));
|
|
211
|
+
process.exitCode = 1;
|
|
212
|
+
return;
|
|
213
|
+
}
|
|
214
|
+
const { contracts, crossLinks } = raw;
|
|
215
|
+
if (opts.json) {
|
|
216
|
+
console.log(JSON.stringify({ contracts, crossLinks }, null, 2));
|
|
217
|
+
}
|
|
218
|
+
else {
|
|
219
|
+
console.log(`Contracts (${contracts.length}):`);
|
|
220
|
+
for (const c of contracts) {
|
|
221
|
+
console.log(` [${c.role}] ${c.contractId} (${c.repo}) ${c.symbolRef.name}`);
|
|
222
|
+
}
|
|
223
|
+
console.log(`\nCross-links (${crossLinks.length}):`);
|
|
224
|
+
for (const l of crossLinks) {
|
|
225
|
+
console.log(` ${l.from.repo} -> ${l.to.repo} [${l.matchType}, conf=${l.confidence}] ${l.contractId}`);
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
finally {
|
|
230
|
+
await backend.dispose().catch(() => { });
|
|
231
|
+
}
|
|
232
|
+
});
|
|
233
|
+
}
|
package/dist/cli/index.js
CHANGED
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
import { Command } from 'commander';
|
|
5
5
|
import { createRequire } from 'node:module';
|
|
6
6
|
import { createLazyAction } from './lazy-action.js';
|
|
7
|
+
import { registerGroupCommands } from './group.js';
|
|
7
8
|
const _require = createRequire(import.meta.url);
|
|
8
9
|
const pkg = _require('../../package.json');
|
|
9
10
|
const program = new Command();
|
|
@@ -19,6 +20,7 @@ program
|
|
|
19
20
|
.option('--embeddings', 'Enable embedding generation for semantic search (off by default)')
|
|
20
21
|
.option('--skills', 'Generate repo-specific skill files from detected communities')
|
|
21
22
|
.option('--skip-agents-md', 'Skip updating the gitnexus section in AGENTS.md and CLAUDE.md')
|
|
23
|
+
.option('--no-stats', 'Omit volatile file/symbol counts from AGENTS.md and CLAUDE.md')
|
|
22
24
|
.option('--skip-git', 'Index a folder without requiring a .git directory')
|
|
23
25
|
.option('-v, --verbose', 'Enable verbose ingestion warnings (default: false)')
|
|
24
26
|
.addHelpText('after', '\nEnvironment variables:\n GITNEXUS_NO_GITIGNORE=1 Skip .gitignore parsing (still reads .gitnexusignore)')
|
|
@@ -112,4 +114,5 @@ program
|
|
|
112
114
|
.option('-p, --port <port>', 'Port number', '4848')
|
|
113
115
|
.option('--idle-timeout <seconds>', 'Auto-shutdown after N seconds idle (0 = disabled)', '0')
|
|
114
116
|
.action(createLazyAction(() => import('./eval-server.js'), 'evalServerCommand'));
|
|
117
|
+
registerGroupCommands(program);
|
|
115
118
|
program.parse(process.argv);
|
package/dist/cli/serve.js
CHANGED
|
@@ -14,7 +14,10 @@ process.on('unhandledRejection', (reason) => {
|
|
|
14
14
|
});
|
|
15
15
|
export const serveCommand = async (options) => {
|
|
16
16
|
const port = Number(options?.port ?? 4747);
|
|
17
|
-
|
|
17
|
+
// Default to 'localhost' so the OS decides whether to bind to 127.0.0.1 or
|
|
18
|
+
// ::1 based on system configuration, avoiding spurious CORS errors when the
|
|
19
|
+
// hosted frontend at gitnexus.vercel.app connects to localhost.
|
|
20
|
+
const host = options?.host ?? 'localhost';
|
|
18
21
|
try {
|
|
19
22
|
await createServer(port, host);
|
|
20
23
|
}
|
package/dist/cli/setup.js
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
import fs from 'fs/promises';
|
|
9
9
|
import path from 'path';
|
|
10
10
|
import os from 'os';
|
|
11
|
-
import { execFile } from 'child_process';
|
|
11
|
+
import { execFile, execFileSync } from 'child_process';
|
|
12
12
|
import { promisify } from 'util';
|
|
13
13
|
import { fileURLToPath } from 'url';
|
|
14
14
|
import { glob } from 'glob';
|
|
@@ -16,11 +16,42 @@ import { getGlobalDir } from '../storage/repo-manager.js';
|
|
|
16
16
|
const __filename = fileURLToPath(import.meta.url);
|
|
17
17
|
const __dirname = path.dirname(__filename);
|
|
18
18
|
const execFileAsync = promisify(execFile);
|
|
19
|
+
/**
|
|
20
|
+
* Resolve the absolute path to the `gitnexus` binary if it's installed
|
|
21
|
+
* globally (or via npm -g / yarn global). Returns null when not found.
|
|
22
|
+
*/
|
|
23
|
+
function resolveGitnexusBin() {
|
|
24
|
+
try {
|
|
25
|
+
const cmd = process.platform === 'win32' ? 'where' : 'which';
|
|
26
|
+
const resolved = execFileSync(cmd, ['gitnexus'], {
|
|
27
|
+
encoding: 'utf-8',
|
|
28
|
+
timeout: 5000,
|
|
29
|
+
stdio: ['ignore', 'pipe', 'ignore'],
|
|
30
|
+
})
|
|
31
|
+
.split('\n')[0]
|
|
32
|
+
.trim();
|
|
33
|
+
return resolved || null;
|
|
34
|
+
}
|
|
35
|
+
catch {
|
|
36
|
+
return null;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
19
39
|
/**
|
|
20
40
|
* The MCP server entry for all editors.
|
|
21
|
-
*
|
|
41
|
+
*
|
|
42
|
+
* Prefers the globally-installed `gitnexus` binary (starts in ~1 s) over
|
|
43
|
+
* `npx -y gitnexus@latest` (cold-cache install of native deps can take
|
|
44
|
+
* >60 s, exceeding Claude Code's 30 s MCP connection timeout).
|
|
45
|
+
*
|
|
46
|
+
* Falls back to npx when the binary isn't on PATH — e.g. first-time
|
|
47
|
+
* users who ran `npx gitnexus analyze` but haven't done `npm i -g`.
|
|
22
48
|
*/
|
|
23
49
|
function getMcpEntry() {
|
|
50
|
+
const bin = resolveGitnexusBin();
|
|
51
|
+
if (bin) {
|
|
52
|
+
return { command: bin, args: ['mcp'] };
|
|
53
|
+
}
|
|
54
|
+
// Fallback: npx (works without a global install, but slow cold-start)
|
|
24
55
|
if (process.platform === 'win32') {
|
|
25
56
|
return {
|
|
26
57
|
command: 'cmd',
|
|
@@ -193,7 +224,7 @@ async function setupOpenCode(result) {
|
|
|
193
224
|
result.skipped.push('OpenCode (not installed)');
|
|
194
225
|
return;
|
|
195
226
|
}
|
|
196
|
-
const configPath = path.join(opencodeDir, '
|
|
227
|
+
const configPath = path.join(opencodeDir, 'opencode.json');
|
|
197
228
|
try {
|
|
198
229
|
const existing = await readJsonFile(configPath);
|
|
199
230
|
const config = existing || {};
|