cotx-engine 0.1.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/LICENSE +94 -0
- package/README.md +103 -0
- package/dist/commands/compile.d.ts +3 -0
- package/dist/commands/compile.js +93 -0
- package/dist/commands/compile.js.map +1 -0
- package/dist/commands/context.d.ts +1 -0
- package/dist/commands/context.js +98 -0
- package/dist/commands/context.js.map +1 -0
- package/dist/commands/diff.d.ts +19 -0
- package/dist/commands/diff.js +127 -0
- package/dist/commands/diff.js.map +1 -0
- package/dist/commands/impact.d.ts +3 -0
- package/dist/commands/impact.js +91 -0
- package/dist/commands/impact.js.map +1 -0
- package/dist/commands/init.d.ts +1 -0
- package/dist/commands/init.js +13 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/lint.d.ts +13 -0
- package/dist/commands/lint.js +290 -0
- package/dist/commands/lint.js.map +1 -0
- package/dist/commands/map.d.ts +6 -0
- package/dist/commands/map.js +409 -0
- package/dist/commands/map.js.map +1 -0
- package/dist/commands/migrate.d.ts +16 -0
- package/dist/commands/migrate.js +150 -0
- package/dist/commands/migrate.js.map +1 -0
- package/dist/commands/query.d.ts +3 -0
- package/dist/commands/query.js +47 -0
- package/dist/commands/query.js.map +1 -0
- package/dist/commands/rename.d.ts +5 -0
- package/dist/commands/rename.js +163 -0
- package/dist/commands/rename.js.map +1 -0
- package/dist/commands/snapshot.d.ts +6 -0
- package/dist/commands/snapshot.js +48 -0
- package/dist/commands/snapshot.js.map +1 -0
- package/dist/commands/status.d.ts +1 -0
- package/dist/commands/status.js +72 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/update.d.ts +8 -0
- package/dist/commands/update.js +163 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/commands/write.d.ts +6 -0
- package/dist/commands/write.js +221 -0
- package/dist/commands/write.js.map +1 -0
- package/dist/compiler/auto-describe.d.ts +13 -0
- package/dist/compiler/auto-describe.js +91 -0
- package/dist/compiler/auto-describe.js.map +1 -0
- package/dist/compiler/concept-compiler.d.ts +21 -0
- package/dist/compiler/concept-compiler.js +125 -0
- package/dist/compiler/concept-compiler.js.map +1 -0
- package/dist/compiler/contract-compiler.d.ts +16 -0
- package/dist/compiler/contract-compiler.js +90 -0
- package/dist/compiler/contract-compiler.js.map +1 -0
- package/dist/compiler/delta-detector.d.ts +8 -0
- package/dist/compiler/delta-detector.js +34 -0
- package/dist/compiler/delta-detector.js.map +1 -0
- package/dist/compiler/flow-compiler.d.ts +18 -0
- package/dist/compiler/flow-compiler.js +69 -0
- package/dist/compiler/flow-compiler.js.map +1 -0
- package/dist/compiler/module-compiler.d.ts +18 -0
- package/dist/compiler/module-compiler.js +420 -0
- package/dist/compiler/module-compiler.js.map +1 -0
- package/dist/compiler/stale-detector.d.ts +22 -0
- package/dist/compiler/stale-detector.js +79 -0
- package/dist/compiler/stale-detector.js.map +1 -0
- package/dist/config/ignore-service.d.ts +26 -0
- package/dist/config/ignore-service.js +366 -0
- package/dist/config/ignore-service.js.map +1 -0
- package/dist/core/analysis/cluster-enricher.d.ts +38 -0
- package/dist/core/analysis/cluster-enricher.js +169 -0
- package/dist/core/analysis/cluster-enricher.js.map +1 -0
- package/dist/core/analysis/community-processor.d.ts +39 -0
- package/dist/core/analysis/community-processor.js +319 -0
- package/dist/core/analysis/community-processor.js.map +1 -0
- package/dist/core/analysis/process-processor.d.ts +51 -0
- package/dist/core/analysis/process-processor.js +318 -0
- package/dist/core/analysis/process-processor.js.map +1 -0
- package/dist/core/bridge.d.ts +15 -0
- package/dist/core/bridge.js +63 -0
- package/dist/core/bridge.js.map +1 -0
- package/dist/core/export/json-exporter.d.ts +43 -0
- package/dist/core/export/json-exporter.js +13 -0
- package/dist/core/export/json-exporter.js.map +1 -0
- package/dist/core/graph/graph.d.ts +2 -0
- package/dist/core/graph/graph.js +79 -0
- package/dist/core/graph/graph.js.map +1 -0
- package/dist/core/graph/types.d.ts +25 -0
- package/dist/core/graph/types.js +2 -0
- package/dist/core/graph/types.js.map +1 -0
- package/dist/core/parser/ast-cache.d.ts +11 -0
- package/dist/core/parser/ast-cache.js +36 -0
- package/dist/core/parser/ast-cache.js.map +1 -0
- package/dist/core/parser/call-processor.d.ts +105 -0
- package/dist/core/parser/call-processor.js +1807 -0
- package/dist/core/parser/call-processor.js.map +1 -0
- package/dist/core/parser/call-routing.d.ts +55 -0
- package/dist/core/parser/call-routing.js +113 -0
- package/dist/core/parser/call-routing.js.map +1 -0
- package/dist/core/parser/call-sites/extract-language-call-site.d.ts +10 -0
- package/dist/core/parser/call-sites/extract-language-call-site.js +23 -0
- package/dist/core/parser/call-sites/extract-language-call-site.js.map +1 -0
- package/dist/core/parser/call-sites/java.d.ts +9 -0
- package/dist/core/parser/call-sites/java.js +31 -0
- package/dist/core/parser/call-sites/java.js.map +1 -0
- package/dist/core/parser/cluster-enricher.d.ts +38 -0
- package/dist/core/parser/cluster-enricher.js +169 -0
- package/dist/core/parser/cluster-enricher.js.map +1 -0
- package/dist/core/parser/community-processor.d.ts +39 -0
- package/dist/core/parser/community-processor.js +321 -0
- package/dist/core/parser/community-processor.js.map +1 -0
- package/dist/core/parser/constants.d.ts +16 -0
- package/dist/core/parser/constants.js +17 -0
- package/dist/core/parser/constants.js.map +1 -0
- package/dist/core/parser/entry-point-scoring.d.ts +57 -0
- package/dist/core/parser/entry-point-scoring.js +377 -0
- package/dist/core/parser/entry-point-scoring.js.map +1 -0
- package/dist/core/parser/export-detection.d.ts +57 -0
- package/dist/core/parser/export-detection.js +234 -0
- package/dist/core/parser/export-detection.js.map +1 -0
- package/dist/core/parser/field-extractor.d.ts +34 -0
- package/dist/core/parser/field-extractor.js +33 -0
- package/dist/core/parser/field-extractor.js.map +1 -0
- package/dist/core/parser/field-extractors/configs/c-cpp.d.ts +16 -0
- package/dist/core/parser/field-extractors/configs/c-cpp.js +129 -0
- package/dist/core/parser/field-extractors/configs/c-cpp.js.map +1 -0
- package/dist/core/parser/field-extractors/configs/csharp.d.ts +15 -0
- package/dist/core/parser/field-extractors/configs/csharp.js +129 -0
- package/dist/core/parser/field-extractors/configs/csharp.js.map +1 -0
- package/dist/core/parser/field-extractors/configs/dart.d.ts +12 -0
- package/dist/core/parser/field-extractors/configs/dart.js +93 -0
- package/dist/core/parser/field-extractors/configs/dart.js.map +1 -0
- package/dist/core/parser/field-extractors/configs/go.d.ts +12 -0
- package/dist/core/parser/field-extractors/configs/go.js +66 -0
- package/dist/core/parser/field-extractors/configs/go.js.map +1 -0
- package/dist/core/parser/field-extractors/configs/helpers.d.ts +40 -0
- package/dist/core/parser/field-extractors/configs/helpers.js +118 -0
- package/dist/core/parser/field-extractors/configs/helpers.js.map +1 -0
- package/dist/core/parser/field-extractors/configs/jvm.d.ts +17 -0
- package/dist/core/parser/field-extractors/configs/jvm.js +139 -0
- package/dist/core/parser/field-extractors/configs/jvm.js.map +1 -0
- package/dist/core/parser/field-extractors/configs/php.d.ts +12 -0
- package/dist/core/parser/field-extractors/configs/php.js +69 -0
- package/dist/core/parser/field-extractors/configs/php.js.map +1 -0
- package/dist/core/parser/field-extractors/configs/python.d.ts +15 -0
- package/dist/core/parser/field-extractors/configs/python.js +92 -0
- package/dist/core/parser/field-extractors/configs/python.js.map +1 -0
- package/dist/core/parser/field-extractors/configs/ruby.d.ts +15 -0
- package/dist/core/parser/field-extractors/configs/ruby.js +68 -0
- package/dist/core/parser/field-extractors/configs/ruby.js.map +1 -0
- package/dist/core/parser/field-extractors/configs/rust.d.ts +12 -0
- package/dist/core/parser/field-extractors/configs/rust.js +58 -0
- package/dist/core/parser/field-extractors/configs/rust.js.map +1 -0
- package/dist/core/parser/field-extractors/configs/swift.d.ts +15 -0
- package/dist/core/parser/field-extractors/configs/swift.js +75 -0
- package/dist/core/parser/field-extractors/configs/swift.js.map +1 -0
- package/dist/core/parser/field-extractors/configs/typescript-javascript.d.ts +14 -0
- package/dist/core/parser/field-extractors/configs/typescript-javascript.js +72 -0
- package/dist/core/parser/field-extractors/configs/typescript-javascript.js.map +1 -0
- package/dist/core/parser/field-extractors/generic.d.ts +61 -0
- package/dist/core/parser/field-extractors/generic.js +170 -0
- package/dist/core/parser/field-extractors/generic.js.map +1 -0
- package/dist/core/parser/field-extractors/typescript.d.ts +16 -0
- package/dist/core/parser/field-extractors/typescript.js +167 -0
- package/dist/core/parser/field-extractors/typescript.js.map +1 -0
- package/dist/core/parser/field-types.d.ts +46 -0
- package/dist/core/parser/field-types.js +2 -0
- package/dist/core/parser/field-types.js.map +1 -0
- package/dist/core/parser/filesystem-walker.d.ts +28 -0
- package/dist/core/parser/filesystem-walker.js +82 -0
- package/dist/core/parser/filesystem-walker.js.map +1 -0
- package/dist/core/parser/framework-detection.d.ts +149 -0
- package/dist/core/parser/framework-detection.js +782 -0
- package/dist/core/parser/framework-detection.js.map +1 -0
- package/dist/core/parser/heritage-processor.d.ts +52 -0
- package/dist/core/parser/heritage-processor.js +339 -0
- package/dist/core/parser/heritage-processor.js.map +1 -0
- package/dist/core/parser/import-processor.d.ts +33 -0
- package/dist/core/parser/import-processor.js +382 -0
- package/dist/core/parser/import-processor.js.map +1 -0
- package/dist/core/parser/import-resolvers/csharp.d.ts +19 -0
- package/dist/core/parser/import-resolvers/csharp.js +132 -0
- package/dist/core/parser/import-resolvers/csharp.js.map +1 -0
- package/dist/core/parser/import-resolvers/dart.d.ts +7 -0
- package/dist/core/parser/import-resolvers/dart.js +45 -0
- package/dist/core/parser/import-resolvers/dart.js.map +1 -0
- package/dist/core/parser/import-resolvers/go.d.ts +18 -0
- package/dist/core/parser/import-resolvers/go.js +62 -0
- package/dist/core/parser/import-resolvers/go.js.map +1 -0
- package/dist/core/parser/import-resolvers/jvm.d.ts +32 -0
- package/dist/core/parser/import-resolvers/jvm.js +160 -0
- package/dist/core/parser/import-resolvers/jvm.js.map +1 -0
- package/dist/core/parser/import-resolvers/php.d.ts +25 -0
- package/dist/core/parser/import-resolvers/php.js +81 -0
- package/dist/core/parser/import-resolvers/php.js.map +1 -0
- package/dist/core/parser/import-resolvers/python.d.ts +25 -0
- package/dist/core/parser/import-resolvers/python.js +85 -0
- package/dist/core/parser/import-resolvers/python.js.map +1 -0
- package/dist/core/parser/import-resolvers/ruby.d.ts +15 -0
- package/dist/core/parser/import-resolvers/ruby.js +21 -0
- package/dist/core/parser/import-resolvers/ruby.js.map +1 -0
- package/dist/core/parser/import-resolvers/rust.d.ts +18 -0
- package/dist/core/parser/import-resolvers/rust.js +119 -0
- package/dist/core/parser/import-resolvers/rust.js.map +1 -0
- package/dist/core/parser/import-resolvers/standard.d.ts +36 -0
- package/dist/core/parser/import-resolvers/standard.js +144 -0
- package/dist/core/parser/import-resolvers/standard.js.map +1 -0
- package/dist/core/parser/import-resolvers/swift.d.ts +7 -0
- package/dist/core/parser/import-resolvers/swift.js +25 -0
- package/dist/core/parser/import-resolvers/swift.js.map +1 -0
- package/dist/core/parser/import-resolvers/types.d.ts +44 -0
- package/dist/core/parser/import-resolvers/types.js +7 -0
- package/dist/core/parser/import-resolvers/types.js.map +1 -0
- package/dist/core/parser/import-resolvers/utils.d.ts +35 -0
- package/dist/core/parser/import-resolvers/utils.js +150 -0
- package/dist/core/parser/import-resolvers/utils.js.map +1 -0
- package/dist/core/parser/import-resolvers/vue.d.ts +8 -0
- package/dist/core/parser/import-resolvers/vue.js +10 -0
- package/dist/core/parser/import-resolvers/vue.js.map +1 -0
- package/dist/core/parser/language-config.d.ts +52 -0
- package/dist/core/parser/language-config.js +182 -0
- package/dist/core/parser/language-config.js.map +1 -0
- package/dist/core/parser/language-provider.d.ts +126 -0
- package/dist/core/parser/language-provider.js +25 -0
- package/dist/core/parser/language-provider.js.map +1 -0
- package/dist/core/parser/languages/c-cpp.d.ts +12 -0
- package/dist/core/parser/languages/c-cpp.js +312 -0
- package/dist/core/parser/languages/c-cpp.js.map +1 -0
- package/dist/core/parser/languages/csharp.d.ts +8 -0
- package/dist/core/parser/languages/csharp.js +127 -0
- package/dist/core/parser/languages/csharp.js.map +1 -0
- package/dist/core/parser/languages/dart.d.ts +12 -0
- package/dist/core/parser/languages/dart.js +91 -0
- package/dist/core/parser/languages/dart.js.map +1 -0
- package/dist/core/parser/languages/go.d.ts +11 -0
- package/dist/core/parser/languages/go.js +32 -0
- package/dist/core/parser/languages/go.js.map +1 -0
- package/dist/core/parser/languages/index.d.ts +38 -0
- package/dist/core/parser/languages/index.js +63 -0
- package/dist/core/parser/languages/index.js.map +1 -0
- package/dist/core/parser/languages/java.d.ts +9 -0
- package/dist/core/parser/languages/java.js +33 -0
- package/dist/core/parser/languages/java.js.map +1 -0
- package/dist/core/parser/languages/kotlin.d.ts +9 -0
- package/dist/core/parser/languages/kotlin.js +112 -0
- package/dist/core/parser/languages/kotlin.js.map +1 -0
- package/dist/core/parser/languages/php.d.ts +8 -0
- package/dist/core/parser/languages/php.js +226 -0
- package/dist/core/parser/languages/php.js.map +1 -0
- package/dist/core/parser/languages/python.d.ts +12 -0
- package/dist/core/parser/languages/python.js +66 -0
- package/dist/core/parser/languages/python.js.map +1 -0
- package/dist/core/parser/languages/ruby.d.ts +9 -0
- package/dist/core/parser/languages/ruby.js +109 -0
- package/dist/core/parser/languages/ruby.js.map +1 -0
- package/dist/core/parser/languages/rust.d.ts +12 -0
- package/dist/core/parser/languages/rust.js +121 -0
- package/dist/core/parser/languages/rust.js.map +1 -0
- package/dist/core/parser/languages/swift.d.ts +12 -0
- package/dist/core/parser/languages/swift.js +233 -0
- package/dist/core/parser/languages/swift.js.map +1 -0
- package/dist/core/parser/languages/typescript.d.ts +11 -0
- package/dist/core/parser/languages/typescript.js +169 -0
- package/dist/core/parser/languages/typescript.js.map +1 -0
- package/dist/core/parser/languages/vue.d.ts +13 -0
- package/dist/core/parser/languages/vue.js +65 -0
- package/dist/core/parser/languages/vue.js.map +1 -0
- package/dist/core/parser/markdown-processor.d.ts +17 -0
- package/dist/core/parser/markdown-processor.js +125 -0
- package/dist/core/parser/markdown-processor.js.map +1 -0
- package/dist/core/parser/method-extractors/configs/c-cpp.d.ts +3 -0
- package/dist/core/parser/method-extractors/configs/c-cpp.js +276 -0
- package/dist/core/parser/method-extractors/configs/c-cpp.js.map +1 -0
- package/dist/core/parser/method-extractors/configs/csharp.d.ts +2 -0
- package/dist/core/parser/method-extractors/configs/csharp.js +243 -0
- package/dist/core/parser/method-extractors/configs/csharp.js.map +1 -0
- package/dist/core/parser/method-extractors/configs/dart.d.ts +2 -0
- package/dist/core/parser/method-extractors/configs/dart.js +263 -0
- package/dist/core/parser/method-extractors/configs/dart.js.map +1 -0
- package/dist/core/parser/method-extractors/configs/go.d.ts +2 -0
- package/dist/core/parser/method-extractors/configs/go.js +120 -0
- package/dist/core/parser/method-extractors/configs/go.js.map +1 -0
- package/dist/core/parser/method-extractors/configs/jvm.d.ts +3 -0
- package/dist/core/parser/method-extractors/configs/jvm.js +309 -0
- package/dist/core/parser/method-extractors/configs/jvm.js.map +1 -0
- package/dist/core/parser/method-extractors/configs/php.d.ts +2 -0
- package/dist/core/parser/method-extractors/configs/php.js +243 -0
- package/dist/core/parser/method-extractors/configs/php.js.map +1 -0
- package/dist/core/parser/method-extractors/configs/python.d.ts +2 -0
- package/dist/core/parser/method-extractors/configs/python.js +219 -0
- package/dist/core/parser/method-extractors/configs/python.js.map +1 -0
- package/dist/core/parser/method-extractors/configs/ruby.d.ts +2 -0
- package/dist/core/parser/method-extractors/configs/ruby.js +201 -0
- package/dist/core/parser/method-extractors/configs/ruby.js.map +1 -0
- package/dist/core/parser/method-extractors/configs/rust.d.ts +2 -0
- package/dist/core/parser/method-extractors/configs/rust.js +120 -0
- package/dist/core/parser/method-extractors/configs/rust.js.map +1 -0
- package/dist/core/parser/method-extractors/configs/swift.d.ts +2 -0
- package/dist/core/parser/method-extractors/configs/swift.js +191 -0
- package/dist/core/parser/method-extractors/configs/swift.js.map +1 -0
- package/dist/core/parser/method-extractors/configs/typescript-javascript.d.ts +3 -0
- package/dist/core/parser/method-extractors/configs/typescript-javascript.js +231 -0
- package/dist/core/parser/method-extractors/configs/typescript-javascript.js.map +1 -0
- package/dist/core/parser/method-extractors/generic.d.ts +11 -0
- package/dist/core/parser/method-extractors/generic.js +162 -0
- package/dist/core/parser/method-extractors/generic.js.map +1 -0
- package/dist/core/parser/method-types.d.ts +110 -0
- package/dist/core/parser/method-types.js +2 -0
- package/dist/core/parser/method-types.js.map +1 -0
- package/dist/core/parser/mro-processor.d.ts +46 -0
- package/dist/core/parser/mro-processor.js +677 -0
- package/dist/core/parser/mro-processor.js.map +1 -0
- package/dist/core/parser/named-binding-processor.d.ts +18 -0
- package/dist/core/parser/named-binding-processor.js +43 -0
- package/dist/core/parser/named-binding-processor.js.map +1 -0
- package/dist/core/parser/named-bindings/csharp.d.ts +3 -0
- package/dist/core/parser/named-bindings/csharp.js +38 -0
- package/dist/core/parser/named-bindings/csharp.js.map +1 -0
- package/dist/core/parser/named-bindings/java.d.ts +3 -0
- package/dist/core/parser/named-bindings/java.js +30 -0
- package/dist/core/parser/named-bindings/java.js.map +1 -0
- package/dist/core/parser/named-bindings/kotlin.d.ts +3 -0
- package/dist/core/parser/named-bindings/kotlin.js +37 -0
- package/dist/core/parser/named-bindings/kotlin.js.map +1 -0
- package/dist/core/parser/named-bindings/php.d.ts +3 -0
- package/dist/core/parser/named-bindings/php.js +62 -0
- package/dist/core/parser/named-bindings/php.js.map +1 -0
- package/dist/core/parser/named-bindings/python.d.ts +3 -0
- package/dist/core/parser/named-bindings/python.js +50 -0
- package/dist/core/parser/named-bindings/python.js.map +1 -0
- package/dist/core/parser/named-bindings/rust.d.ts +3 -0
- package/dist/core/parser/named-bindings/rust.js +67 -0
- package/dist/core/parser/named-bindings/rust.js.map +1 -0
- package/dist/core/parser/named-bindings/types.d.ts +16 -0
- package/dist/core/parser/named-bindings/types.js +7 -0
- package/dist/core/parser/named-bindings/types.js.map +1 -0
- package/dist/core/parser/named-bindings/typescript.d.ts +3 -0
- package/dist/core/parser/named-bindings/typescript.js +59 -0
- package/dist/core/parser/named-bindings/typescript.js.map +1 -0
- package/dist/core/parser/parsing-processor.d.ts +23 -0
- package/dist/core/parser/parsing-processor.js +464 -0
- package/dist/core/parser/parsing-processor.js.map +1 -0
- package/dist/core/parser/pipeline.d.ts +17 -0
- package/dist/core/parser/pipeline.js +1405 -0
- package/dist/core/parser/pipeline.js.map +1 -0
- package/dist/core/parser/process-processor.d.ts +51 -0
- package/dist/core/parser/process-processor.js +318 -0
- package/dist/core/parser/process-processor.js.map +1 -0
- package/dist/core/parser/resolution-context.d.ts +58 -0
- package/dist/core/parser/resolution-context.js +136 -0
- package/dist/core/parser/resolution-context.js.map +1 -0
- package/dist/core/parser/route-extractors/expo.d.ts +1 -0
- package/dist/core/parser/route-extractors/expo.js +37 -0
- package/dist/core/parser/route-extractors/expo.js.map +1 -0
- package/dist/core/parser/route-extractors/middleware.d.ts +47 -0
- package/dist/core/parser/route-extractors/middleware.js +168 -0
- package/dist/core/parser/route-extractors/middleware.js.map +1 -0
- package/dist/core/parser/route-extractors/nextjs.d.ts +3 -0
- package/dist/core/parser/route-extractors/nextjs.js +77 -0
- package/dist/core/parser/route-extractors/nextjs.js.map +1 -0
- package/dist/core/parser/route-extractors/php.d.ts +7 -0
- package/dist/core/parser/route-extractors/php.js +23 -0
- package/dist/core/parser/route-extractors/php.js.map +1 -0
- package/dist/core/parser/route-extractors/response-shapes.d.ts +20 -0
- package/dist/core/parser/route-extractors/response-shapes.js +295 -0
- package/dist/core/parser/route-extractors/response-shapes.js.map +1 -0
- package/dist/core/parser/structure-processor.d.ts +2 -0
- package/dist/core/parser/structure-processor.js +37 -0
- package/dist/core/parser/structure-processor.js.map +1 -0
- package/dist/core/parser/symbol-table.d.ts +79 -0
- package/dist/core/parser/symbol-table.js +116 -0
- package/dist/core/parser/symbol-table.js.map +1 -0
- package/dist/core/parser/tree-sitter-queries.d.ts +16 -0
- package/dist/core/parser/tree-sitter-queries.js +1180 -0
- package/dist/core/parser/tree-sitter-queries.js.map +1 -0
- package/dist/core/parser/type-env.d.ts +81 -0
- package/dist/core/parser/type-env.js +1048 -0
- package/dist/core/parser/type-env.js.map +1 -0
- package/dist/core/parser/type-extractors/c-cpp.d.ts +7 -0
- package/dist/core/parser/type-extractors/c-cpp.js +533 -0
- package/dist/core/parser/type-extractors/c-cpp.js.map +1 -0
- package/dist/core/parser/type-extractors/csharp.d.ts +2 -0
- package/dist/core/parser/type-extractors/csharp.js +584 -0
- package/dist/core/parser/type-extractors/csharp.js.map +1 -0
- package/dist/core/parser/type-extractors/dart.d.ts +15 -0
- package/dist/core/parser/type-extractors/dart.js +370 -0
- package/dist/core/parser/type-extractors/dart.js.map +1 -0
- package/dist/core/parser/type-extractors/go.d.ts +2 -0
- package/dist/core/parser/type-extractors/go.js +514 -0
- package/dist/core/parser/type-extractors/go.js.map +1 -0
- package/dist/core/parser/type-extractors/jvm.d.ts +3 -0
- package/dist/core/parser/type-extractors/jvm.js +857 -0
- package/dist/core/parser/type-extractors/jvm.js.map +1 -0
- package/dist/core/parser/type-extractors/php.d.ts +2 -0
- package/dist/core/parser/type-extractors/php.js +535 -0
- package/dist/core/parser/type-extractors/php.js.map +1 -0
- package/dist/core/parser/type-extractors/python.d.ts +2 -0
- package/dist/core/parser/type-extractors/python.js +475 -0
- package/dist/core/parser/type-extractors/python.js.map +1 -0
- package/dist/core/parser/type-extractors/ruby.d.ts +2 -0
- package/dist/core/parser/type-extractors/ruby.js +378 -0
- package/dist/core/parser/type-extractors/ruby.js.map +1 -0
- package/dist/core/parser/type-extractors/rust.d.ts +2 -0
- package/dist/core/parser/type-extractors/rust.js +516 -0
- package/dist/core/parser/type-extractors/rust.js.map +1 -0
- package/dist/core/parser/type-extractors/shared.d.ts +131 -0
- package/dist/core/parser/type-extractors/shared.js +797 -0
- package/dist/core/parser/type-extractors/shared.js.map +1 -0
- package/dist/core/parser/type-extractors/swift.d.ts +2 -0
- package/dist/core/parser/type-extractors/swift.js +485 -0
- package/dist/core/parser/type-extractors/swift.js.map +1 -0
- package/dist/core/parser/type-extractors/types.d.ts +172 -0
- package/dist/core/parser/type-extractors/types.js +2 -0
- package/dist/core/parser/type-extractors/types.js.map +1 -0
- package/dist/core/parser/type-extractors/typescript.d.ts +2 -0
- package/dist/core/parser/type-extractors/typescript.js +662 -0
- package/dist/core/parser/type-extractors/typescript.js.map +1 -0
- package/dist/core/parser/utils/ast-helpers.d.ts +73 -0
- package/dist/core/parser/utils/ast-helpers.js +415 -0
- package/dist/core/parser/utils/ast-helpers.js.map +1 -0
- package/dist/core/parser/utils/call-analysis.d.ts +75 -0
- package/dist/core/parser/utils/call-analysis.js +575 -0
- package/dist/core/parser/utils/call-analysis.js.map +1 -0
- package/dist/core/parser/utils/event-loop.d.ts +5 -0
- package/dist/core/parser/utils/event-loop.js +6 -0
- package/dist/core/parser/utils/event-loop.js.map +1 -0
- package/dist/core/parser/utils/method-props.d.ts +8 -0
- package/dist/core/parser/utils/method-props.js +39 -0
- package/dist/core/parser/utils/method-props.js.map +1 -0
- package/dist/core/parser/utils/verbose.d.ts +1 -0
- package/dist/core/parser/utils/verbose.js +8 -0
- package/dist/core/parser/utils/verbose.js.map +1 -0
- package/dist/core/parser/vue-sfc-extractor.d.ts +44 -0
- package/dist/core/parser/vue-sfc-extractor.js +95 -0
- package/dist/core/parser/vue-sfc-extractor.js.map +1 -0
- package/dist/core/parser/workers/parse-worker.d.ts +171 -0
- package/dist/core/parser/workers/parse-worker.js +1724 -0
- package/dist/core/parser/workers/parse-worker.js.map +1 -0
- package/dist/core/parser/workers/worker-pool.d.ts +16 -0
- package/dist/core/parser/workers/worker-pool.js +124 -0
- package/dist/core/parser/workers/worker-pool.js.map +1 -0
- package/dist/core/shared/graph-types.d.ts +61 -0
- package/dist/core/shared/graph-types.js +5 -0
- package/dist/core/shared/graph-types.js.map +1 -0
- package/dist/core/shared/index.d.ts +4 -0
- package/dist/core/shared/index.js +4 -0
- package/dist/core/shared/index.js.map +1 -0
- package/dist/core/shared/language-detection.d.ts +22 -0
- package/dist/core/shared/language-detection.js +137 -0
- package/dist/core/shared/language-detection.js.map +1 -0
- package/dist/core/shared/languages.d.ts +23 -0
- package/dist/core/shared/languages.js +25 -0
- package/dist/core/shared/languages.js.map +1 -0
- package/dist/core/shared/pipeline.d.ts +15 -0
- package/dist/core/shared/pipeline.js +5 -0
- package/dist/core/shared/pipeline.js.map +1 -0
- package/dist/core/tree-sitter/parser-loader.d.ts +5 -0
- package/dist/core/tree-sitter/parser-loader.js +71 -0
- package/dist/core/tree-sitter/parser-loader.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +132 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/hash.d.ts +1 -0
- package/dist/lib/hash.js +6 -0
- package/dist/lib/hash.js.map +1 -0
- package/dist/lib/naming.d.ts +12 -0
- package/dist/lib/naming.js +28 -0
- package/dist/lib/naming.js.map +1 -0
- package/dist/lib/utils.d.ts +1 -0
- package/dist/lib/utils.js +4 -0
- package/dist/lib/utils.js.map +1 -0
- package/dist/mcp/server.d.ts +26 -0
- package/dist/mcp/server.js +282 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/tools.d.ts +37 -0
- package/dist/mcp/tools.js +650 -0
- package/dist/mcp/tools.js.map +1 -0
- package/dist/query/bm25.d.ts +19 -0
- package/dist/query/bm25.js +60 -0
- package/dist/query/bm25.js.map +1 -0
- package/dist/query/graph-index.d.ts +40 -0
- package/dist/query/graph-index.js +178 -0
- package/dist/query/graph-index.js.map +1 -0
- package/dist/store/derived-index.d.ts +4 -0
- package/dist/store/derived-index.js +68 -0
- package/dist/store/derived-index.js.map +1 -0
- package/dist/store/meta.d.ts +1 -0
- package/dist/store/meta.js +3 -0
- package/dist/store/meta.js.map +1 -0
- package/dist/store/schema.d.ts +135 -0
- package/dist/store/schema.js +2 -0
- package/dist/store/schema.js.map +1 -0
- package/dist/store/store.d.ts +49 -0
- package/dist/store/store.js +254 -0
- package/dist/store/store.js.map +1 -0
- package/dist/types/pipeline.d.ts +12 -0
- package/dist/types/pipeline.js +2 -0
- package/dist/types/pipeline.js.map +1 -0
- package/package.json +69 -0
- package/skills/cotx-enrich/SKILL.md +59 -0
- package/vendor/leiden/index.cjs +355 -0
- package/vendor/leiden/utils.cjs +392 -0
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Tool Definitions and Handlers
|
|
3
|
+
*
|
|
4
|
+
* Defines the MCP tools cotx-engine exposes to AI agents.
|
|
5
|
+
* The current surface includes compile/query/context/impact plus map, write,
|
|
6
|
+
* batch_write, enrich, lint, and diff.
|
|
7
|
+
*/
|
|
8
|
+
type McpContent = {
|
|
9
|
+
type: 'text';
|
|
10
|
+
text: string;
|
|
11
|
+
};
|
|
12
|
+
type McpResult = {
|
|
13
|
+
content: McpContent[];
|
|
14
|
+
isError?: boolean;
|
|
15
|
+
};
|
|
16
|
+
export declare function handleToolCall(name: string, args: Record<string, unknown>): Promise<McpResult>;
|
|
17
|
+
export interface ToolDefinition {
|
|
18
|
+
name: string;
|
|
19
|
+
description: string;
|
|
20
|
+
inputSchema: {
|
|
21
|
+
type: 'object';
|
|
22
|
+
properties: Record<string, {
|
|
23
|
+
type: string;
|
|
24
|
+
description?: string;
|
|
25
|
+
default?: unknown;
|
|
26
|
+
items?: {
|
|
27
|
+
type: string;
|
|
28
|
+
};
|
|
29
|
+
enum?: string[];
|
|
30
|
+
minimum?: number;
|
|
31
|
+
maximum?: number;
|
|
32
|
+
}>;
|
|
33
|
+
required: string[];
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
export declare const COTX_TOOLS: ToolDefinition[];
|
|
37
|
+
export {};
|
|
@@ -0,0 +1,650 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Tool Definitions and Handlers
|
|
3
|
+
*
|
|
4
|
+
* Defines the MCP tools cotx-engine exposes to AI agents.
|
|
5
|
+
* The current surface includes compile/query/context/impact plus map, write,
|
|
6
|
+
* batch_write, enrich, lint, and diff.
|
|
7
|
+
*/
|
|
8
|
+
import { commandCompile } from '../commands/compile.js';
|
|
9
|
+
import { commandUpdate } from '../commands/update.js';
|
|
10
|
+
import { commandLint } from '../commands/lint.js';
|
|
11
|
+
import { commandWrite } from '../commands/write.js';
|
|
12
|
+
import { detectStale } from '../compiler/stale-detector.js';
|
|
13
|
+
import { generateMapSummary } from '../commands/map.js';
|
|
14
|
+
import { commandDiff } from '../commands/diff.js';
|
|
15
|
+
import { CotxStore } from '../store/store.js';
|
|
16
|
+
import { CotxGraph } from '../query/graph-index.js';
|
|
17
|
+
function ok(data) {
|
|
18
|
+
return { content: [{ type: 'text', text: JSON.stringify(data) }] };
|
|
19
|
+
}
|
|
20
|
+
function err(message) {
|
|
21
|
+
return {
|
|
22
|
+
content: [{ type: 'text', text: JSON.stringify({ error: message }) }],
|
|
23
|
+
isError: true,
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
export async function handleToolCall(name, args) {
|
|
27
|
+
switch (name) {
|
|
28
|
+
case 'cotx_compile': {
|
|
29
|
+
const projectRoot = args.project_root;
|
|
30
|
+
const mode = args.mode ?? 'full';
|
|
31
|
+
if (mode === 'delta') {
|
|
32
|
+
const files = args.files;
|
|
33
|
+
const result = await commandUpdate(projectRoot, files, { silent: true });
|
|
34
|
+
return ok({ status: 'updated', ...result });
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
await commandCompile(projectRoot, { silent: true });
|
|
38
|
+
const store = new CotxStore(projectRoot);
|
|
39
|
+
const meta = store.readMeta();
|
|
40
|
+
const staleResult = detectStale(store);
|
|
41
|
+
const staleCount = staleResult.summary.enrichments;
|
|
42
|
+
return ok({
|
|
43
|
+
status: 'compiled',
|
|
44
|
+
compiled_at: meta.compiled_at,
|
|
45
|
+
stats: meta.stats,
|
|
46
|
+
stale_enrichments: staleCount,
|
|
47
|
+
hint: staleCount > 0
|
|
48
|
+
? `${staleCount} enrichments stale. Call cotx_enrich to refresh.`
|
|
49
|
+
: undefined,
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
case 'cotx_query': {
|
|
54
|
+
const projectRoot = args.project_root;
|
|
55
|
+
const keyword = args.query;
|
|
56
|
+
const layer = args.layer;
|
|
57
|
+
const store = new CotxStore(projectRoot);
|
|
58
|
+
if (!store.exists()) {
|
|
59
|
+
return err('No .cotx/ found. Run cotx_compile first.');
|
|
60
|
+
}
|
|
61
|
+
const graph = CotxGraph.fromStoreCached(store);
|
|
62
|
+
const results = graph.search(keyword, layer, 2.0);
|
|
63
|
+
const output = results.map((node) => {
|
|
64
|
+
const data = node.data;
|
|
65
|
+
const base = { id: node.id, layer: node.layer };
|
|
66
|
+
if (node.layer === 'module') {
|
|
67
|
+
base.canonical_entry = data.canonical_entry;
|
|
68
|
+
base.files_count = Array.isArray(data.files) ? data.files.length : 0;
|
|
69
|
+
}
|
|
70
|
+
else if (node.layer === 'concept') {
|
|
71
|
+
base.appears_in_count = Array.isArray(data.appears_in) ? data.appears_in.length : 0;
|
|
72
|
+
base.module = data.layer;
|
|
73
|
+
}
|
|
74
|
+
else if (node.layer === 'contract') {
|
|
75
|
+
base.consumer = data.consumer;
|
|
76
|
+
base.provider = data.provider;
|
|
77
|
+
base.interface = data.interface;
|
|
78
|
+
}
|
|
79
|
+
else if (node.layer === 'flow') {
|
|
80
|
+
base.trigger = data.trigger;
|
|
81
|
+
base.steps_count = Array.isArray(data.steps) ? data.steps.length : 0;
|
|
82
|
+
}
|
|
83
|
+
else if (node.layer === 'concern') {
|
|
84
|
+
base.type = data.type;
|
|
85
|
+
base.severity = data.severity;
|
|
86
|
+
}
|
|
87
|
+
const edges = graph.neighbors(node.id, 'both');
|
|
88
|
+
base.relations_count = edges.length;
|
|
89
|
+
return base;
|
|
90
|
+
});
|
|
91
|
+
const capped = output.slice(0, 15);
|
|
92
|
+
return ok({ query: keyword, layer: layer ?? null, count: capped.length, total_matches: output.length, results: capped });
|
|
93
|
+
}
|
|
94
|
+
case 'cotx_context': {
|
|
95
|
+
const projectRoot = args.project_root;
|
|
96
|
+
const nodeId = args.node_id;
|
|
97
|
+
const store = new CotxStore(projectRoot);
|
|
98
|
+
if (!store.exists()) {
|
|
99
|
+
return err('No .cotx/ found. Run cotx_compile first.');
|
|
100
|
+
}
|
|
101
|
+
const graph = CotxGraph.fromStoreCached(store);
|
|
102
|
+
const node = graph.findNode(nodeId);
|
|
103
|
+
if (!node) {
|
|
104
|
+
return err(`Node "${nodeId}" not found. Try cotx_query to search by keyword.`);
|
|
105
|
+
}
|
|
106
|
+
const outEdges = graph.neighbors(node.id, 'out').map((e) => {
|
|
107
|
+
const target = graph.findNode(e.to);
|
|
108
|
+
return { to: e.to, layer: target?.layer ?? null, relation: e.relation };
|
|
109
|
+
});
|
|
110
|
+
const inEdges = graph.neighbors(node.id, 'in').map((e) => {
|
|
111
|
+
const source = graph.findNode(e.from);
|
|
112
|
+
return { from: e.from, layer: source?.layer ?? null, relation: e.relation };
|
|
113
|
+
});
|
|
114
|
+
return ok({
|
|
115
|
+
id: node.id,
|
|
116
|
+
layer: node.layer,
|
|
117
|
+
data: node.data,
|
|
118
|
+
outgoing: outEdges,
|
|
119
|
+
incoming: inEdges,
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
case 'cotx_impact': {
|
|
123
|
+
const projectRoot = args.project_root;
|
|
124
|
+
const target = args.target;
|
|
125
|
+
const direction = args.direction;
|
|
126
|
+
const store = new CotxStore(projectRoot);
|
|
127
|
+
if (!store.exists()) {
|
|
128
|
+
return err('No .cotx/ found. Run cotx_compile first.');
|
|
129
|
+
}
|
|
130
|
+
const graph = CotxGraph.fromStoreCached(store);
|
|
131
|
+
let node = graph.findNode(target);
|
|
132
|
+
if (!node) {
|
|
133
|
+
const matches = graph.search(target);
|
|
134
|
+
if (matches.length === 0) {
|
|
135
|
+
return err(`"${target}" not found in map.`);
|
|
136
|
+
}
|
|
137
|
+
if (matches.length > 1) {
|
|
138
|
+
return ok({
|
|
139
|
+
ambiguous: true,
|
|
140
|
+
query: target,
|
|
141
|
+
matches: matches.slice(0, 10).map((m) => ({ id: m.id, layer: m.layer })),
|
|
142
|
+
hint: 'Use an exact node ID to disambiguate.',
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
node = matches[0];
|
|
146
|
+
}
|
|
147
|
+
const bfsDirection = (direction === 'downstream' ? 'out' : 'in');
|
|
148
|
+
const bfsResult = graph.bfs(node.id, bfsDirection, 3);
|
|
149
|
+
const depths = {};
|
|
150
|
+
const affectedModules = new Set();
|
|
151
|
+
const affectedContracts = new Set();
|
|
152
|
+
const affectedFlows = new Set();
|
|
153
|
+
const affectedConcerns = new Set();
|
|
154
|
+
let totalAffected = 0;
|
|
155
|
+
const depthLabels = {
|
|
156
|
+
1: 'WILL BREAK',
|
|
157
|
+
2: 'LIKELY AFFECTED',
|
|
158
|
+
3: 'MAY NEED TESTING',
|
|
159
|
+
};
|
|
160
|
+
for (const [depth, nodeIds] of bfsResult) {
|
|
161
|
+
const dModules = [];
|
|
162
|
+
const dConcerns = [];
|
|
163
|
+
let dFlows = 0;
|
|
164
|
+
let dContracts = 0;
|
|
165
|
+
for (const id of nodeIds) {
|
|
166
|
+
const n = graph.findNode(id);
|
|
167
|
+
if (!n)
|
|
168
|
+
continue;
|
|
169
|
+
totalAffected++;
|
|
170
|
+
if (n.layer === 'module') {
|
|
171
|
+
affectedModules.add(id);
|
|
172
|
+
dModules.push(id);
|
|
173
|
+
}
|
|
174
|
+
else if (n.layer === 'flow') {
|
|
175
|
+
affectedFlows.add(id);
|
|
176
|
+
dFlows++;
|
|
177
|
+
}
|
|
178
|
+
else if (n.layer === 'contract') {
|
|
179
|
+
affectedContracts.add(id);
|
|
180
|
+
dContracts++;
|
|
181
|
+
}
|
|
182
|
+
else if (n.layer === 'concern') {
|
|
183
|
+
affectedConcerns.add(id);
|
|
184
|
+
dConcerns.push(id);
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
depths[`d${depth}`] = {
|
|
188
|
+
label: depthLabels[depth] ?? `d${depth}`,
|
|
189
|
+
modules: dModules,
|
|
190
|
+
flows_count: dFlows,
|
|
191
|
+
contracts_count: dContracts,
|
|
192
|
+
concerns: dConcerns,
|
|
193
|
+
total: dModules.length + dFlows + dContracts + dConcerns.length,
|
|
194
|
+
};
|
|
195
|
+
}
|
|
196
|
+
const d1Count = bfsResult.get(1)?.length ?? 0;
|
|
197
|
+
let risk;
|
|
198
|
+
if (d1Count === 0)
|
|
199
|
+
risk = 'LOW';
|
|
200
|
+
else if (d1Count <= 3)
|
|
201
|
+
risk = 'LOW';
|
|
202
|
+
else if (d1Count <= 9)
|
|
203
|
+
risk = 'MEDIUM';
|
|
204
|
+
else if (affectedConcerns.size > 0)
|
|
205
|
+
risk = 'CRITICAL';
|
|
206
|
+
else
|
|
207
|
+
risk = 'HIGH';
|
|
208
|
+
return ok({
|
|
209
|
+
target: { id: node.id, layer: node.layer },
|
|
210
|
+
direction: direction === 'downstream' ? 'downstream' : 'upstream',
|
|
211
|
+
depths,
|
|
212
|
+
summary: {
|
|
213
|
+
total_affected: totalAffected,
|
|
214
|
+
risk,
|
|
215
|
+
affected_modules: [...affectedModules],
|
|
216
|
+
affected_contracts_count: affectedContracts.size,
|
|
217
|
+
affected_flows_count: affectedFlows.size,
|
|
218
|
+
affected_concerns: [...affectedConcerns],
|
|
219
|
+
},
|
|
220
|
+
});
|
|
221
|
+
}
|
|
222
|
+
case 'cotx_batch_write': {
|
|
223
|
+
const projectRoot = args.project_root;
|
|
224
|
+
const writes = args.writes;
|
|
225
|
+
if (!Array.isArray(writes) || writes.length === 0) {
|
|
226
|
+
return err('writes must be a non-empty array of {node_id, field, content}');
|
|
227
|
+
}
|
|
228
|
+
const results = [];
|
|
229
|
+
for (const w of writes) {
|
|
230
|
+
const r = await commandWrite(projectRoot, w.node_id, w.field, w.content, { author: 'agent' });
|
|
231
|
+
results.push({ node_id: w.node_id, ...r });
|
|
232
|
+
}
|
|
233
|
+
const succeeded = results.filter((r) => r.success).length;
|
|
234
|
+
return ok({ total: writes.length, succeeded, failed: writes.length - succeeded, results });
|
|
235
|
+
}
|
|
236
|
+
case 'cotx_write': {
|
|
237
|
+
const result = await commandWrite(args.project_root, args.node_id, args.field, args.content, { author: 'agent' });
|
|
238
|
+
return { content: [{ type: 'text', text: JSON.stringify(result) }] };
|
|
239
|
+
}
|
|
240
|
+
case 'cotx_map': {
|
|
241
|
+
const projectRoot = args.project_root;
|
|
242
|
+
const store = new CotxStore(projectRoot);
|
|
243
|
+
if (!store.exists()) {
|
|
244
|
+
return err('No .cotx/ found. Run cotx_compile first.');
|
|
245
|
+
}
|
|
246
|
+
const scope = args.scope ?? 'overview';
|
|
247
|
+
const depth = args.depth ?? 2;
|
|
248
|
+
const markdown = generateMapSummary(store, scope, depth);
|
|
249
|
+
return ok(markdown);
|
|
250
|
+
}
|
|
251
|
+
case 'cotx_lint': {
|
|
252
|
+
const projectRoot = args.project_root;
|
|
253
|
+
const strict = args.strict ?? false;
|
|
254
|
+
const issues = await commandLint(projectRoot, { json: false, strict, silent: true });
|
|
255
|
+
return ok({ issues, count: issues.length });
|
|
256
|
+
}
|
|
257
|
+
case 'cotx_enrich': {
|
|
258
|
+
const projectRoot = args.project_root;
|
|
259
|
+
const store = new CotxStore(projectRoot);
|
|
260
|
+
if (!store.exists()) {
|
|
261
|
+
return err('No .cotx/ found. Run cotx_compile first.');
|
|
262
|
+
}
|
|
263
|
+
const layer = args.layer ?? 'module';
|
|
264
|
+
const limit = args.limit ?? 10;
|
|
265
|
+
const tasks = [];
|
|
266
|
+
if (layer === 'module' || layer === 'all') {
|
|
267
|
+
// Build module → exported function names from graph
|
|
268
|
+
const graph = CotxGraph.fromStoreCached(store);
|
|
269
|
+
const moduleExports = new Map();
|
|
270
|
+
for (const node of graph.allNodes('module')) {
|
|
271
|
+
const data = node.data;
|
|
272
|
+
const files = data.files;
|
|
273
|
+
if (!files)
|
|
274
|
+
continue;
|
|
275
|
+
// Collect exported symbols from contracts (interface functions)
|
|
276
|
+
const exports = [];
|
|
277
|
+
const outEdges = graph.neighbors(node.id, 'out');
|
|
278
|
+
for (const edge of outEdges) {
|
|
279
|
+
if (edge.relation === 'contract') {
|
|
280
|
+
const contractNode = graph.findNode(edge.to);
|
|
281
|
+
if (!contractNode)
|
|
282
|
+
continue;
|
|
283
|
+
// The edge goes to another module via contract, but we need the contract data
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
// Use contracts where this module is provider → interface is its exported API
|
|
287
|
+
const inEdges = graph.neighbors(node.id, 'in');
|
|
288
|
+
for (const edge of inEdges) {
|
|
289
|
+
if (edge.relation === 'contract') {
|
|
290
|
+
const cNode = graph.findNode(edge.from);
|
|
291
|
+
if (!cNode)
|
|
292
|
+
continue;
|
|
293
|
+
const cData = cNode.data;
|
|
294
|
+
const iface = cData.interface;
|
|
295
|
+
if (iface)
|
|
296
|
+
exports.push(...iface.slice(0, 5));
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
moduleExports.set(node.id, [...new Set(exports)].slice(0, 15));
|
|
300
|
+
}
|
|
301
|
+
// Build dep descriptions for richer context
|
|
302
|
+
const depDescriptions = new Map();
|
|
303
|
+
for (const id of store.listModules()) {
|
|
304
|
+
const mod = store.readModule(id);
|
|
305
|
+
const resp = mod.enriched?.responsibility ?? mod.enriched?.auto_description;
|
|
306
|
+
if (resp)
|
|
307
|
+
depDescriptions.set(id, resp);
|
|
308
|
+
}
|
|
309
|
+
for (const id of store.listModules()) {
|
|
310
|
+
if (tasks.length >= limit)
|
|
311
|
+
break;
|
|
312
|
+
const mod = store.readModule(id);
|
|
313
|
+
if (mod.enriched?.responsibility && mod.enriched.source_hash === mod.struct_hash)
|
|
314
|
+
continue;
|
|
315
|
+
const depCtx = mod.depends_on.slice(0, 5).map((d) => {
|
|
316
|
+
const desc = depDescriptions.get(d);
|
|
317
|
+
return desc ? `${d} (${desc})` : d;
|
|
318
|
+
});
|
|
319
|
+
tasks.push({
|
|
320
|
+
node_id: id,
|
|
321
|
+
layer: 'module',
|
|
322
|
+
field: 'enriched.responsibility',
|
|
323
|
+
context: {
|
|
324
|
+
files_count: mod.files.length,
|
|
325
|
+
files_sample: mod.files.slice(0, 8),
|
|
326
|
+
canonical_entry: mod.canonical_entry,
|
|
327
|
+
exported_api: moduleExports.get(id) ?? [],
|
|
328
|
+
depends_on_with_desc: depCtx,
|
|
329
|
+
depended_by: mod.depended_by.slice(0, 5),
|
|
330
|
+
auto_description: mod.enriched?.auto_description ?? null,
|
|
331
|
+
},
|
|
332
|
+
instruction: 'Write a one-sentence description of this module\'s responsibility. You have: file names, entry point, exported API functions, and dependency descriptions. Write a human-quality sentence, not a keyword list. Use cotx_write with field "enriched.responsibility".',
|
|
333
|
+
});
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
if (layer === 'concept' || layer === 'all') {
|
|
337
|
+
for (const id of store.listConcepts()) {
|
|
338
|
+
if (tasks.length >= limit)
|
|
339
|
+
break;
|
|
340
|
+
const concept = store.readConcept(id);
|
|
341
|
+
if (concept.enriched?.definition && concept.enriched.source_hash === concept.struct_hash)
|
|
342
|
+
continue;
|
|
343
|
+
tasks.push({
|
|
344
|
+
node_id: id,
|
|
345
|
+
layer: 'concept',
|
|
346
|
+
field: 'enriched.definition',
|
|
347
|
+
context: {
|
|
348
|
+
aliases: concept.aliases,
|
|
349
|
+
appears_in_count: concept.appears_in.length,
|
|
350
|
+
appears_in_sample: concept.appears_in.slice(0, 5),
|
|
351
|
+
home_module: concept.layer,
|
|
352
|
+
},
|
|
353
|
+
instruction: 'Write a one-sentence definition of this domain concept. Use cotx_write with field "enriched.definition".',
|
|
354
|
+
});
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
if (layer === 'contract' || layer === 'all') {
|
|
358
|
+
for (const id of store.listContracts()) {
|
|
359
|
+
if (tasks.length >= limit)
|
|
360
|
+
break;
|
|
361
|
+
const contract = store.readContract(id);
|
|
362
|
+
if (contract.enriched?.guarantees && contract.enriched.source_hash === contract.struct_hash)
|
|
363
|
+
continue;
|
|
364
|
+
tasks.push({
|
|
365
|
+
node_id: id,
|
|
366
|
+
layer: 'contract',
|
|
367
|
+
field: 'enriched.guarantees',
|
|
368
|
+
context: {
|
|
369
|
+
provider: contract.provider,
|
|
370
|
+
consumer: contract.consumer,
|
|
371
|
+
interface_sample: contract.interface.slice(0, 10),
|
|
372
|
+
},
|
|
373
|
+
instruction: 'Describe what this contract guarantees: what the consumer can rely on from the provider. Use cotx_write with field "enriched.guarantees" and a JSON array of strings.',
|
|
374
|
+
});
|
|
375
|
+
}
|
|
376
|
+
}
|
|
377
|
+
if (layer === 'flow' || layer === 'all') {
|
|
378
|
+
for (const id of store.listFlows()) {
|
|
379
|
+
if (tasks.length >= limit)
|
|
380
|
+
break;
|
|
381
|
+
const flow = store.readFlow(id);
|
|
382
|
+
if (flow.enriched?.error_paths && flow.enriched.source_hash === flow.struct_hash)
|
|
383
|
+
continue;
|
|
384
|
+
if (flow.type !== 'flow' || !flow.steps || flow.steps.length === 0)
|
|
385
|
+
continue;
|
|
386
|
+
tasks.push({
|
|
387
|
+
node_id: id,
|
|
388
|
+
layer: 'flow',
|
|
389
|
+
field: 'enriched.error_paths',
|
|
390
|
+
context: {
|
|
391
|
+
trigger: flow.trigger,
|
|
392
|
+
steps_count: flow.steps.length,
|
|
393
|
+
steps_sample: flow.steps.slice(0, 5).map((s) => `${s.module}.${s.function}`),
|
|
394
|
+
},
|
|
395
|
+
instruction: 'Describe what happens when steps in this flow fail. Use cotx_write with field "enriched.error_paths" and a JSON array of {condition, behavior} objects.',
|
|
396
|
+
});
|
|
397
|
+
}
|
|
398
|
+
}
|
|
399
|
+
return ok({
|
|
400
|
+
tasks,
|
|
401
|
+
total: tasks.length,
|
|
402
|
+
hint: 'For each task, generate a one-sentence description from the context, then call cotx_batch_write with all results.',
|
|
403
|
+
delegation: tasks.length > 5
|
|
404
|
+
? 'These are independent, simple text generation tasks (~300 tokens each). If you have sub-agent capability, delegate to a lightweight model (e.g. haiku) for cost efficiency.'
|
|
405
|
+
: undefined,
|
|
406
|
+
});
|
|
407
|
+
}
|
|
408
|
+
case 'cotx_diff': {
|
|
409
|
+
const result = await commandDiff(args.project_root, {
|
|
410
|
+
snapshot: args.snapshot,
|
|
411
|
+
silent: true,
|
|
412
|
+
});
|
|
413
|
+
return { content: [{ type: 'text', text: JSON.stringify(result) }] };
|
|
414
|
+
}
|
|
415
|
+
default:
|
|
416
|
+
return ok({ status: 'not_implemented', tool: name });
|
|
417
|
+
}
|
|
418
|
+
}
|
|
419
|
+
export const COTX_TOOLS = [
|
|
420
|
+
{
|
|
421
|
+
name: 'cotx_compile',
|
|
422
|
+
description: 'Compile codebase into semantic map. Returns stale_enrichments count — if > 0, call cotx_enrich to get enrichment tasks, generate descriptions with your LLM, then cotx_batch_write to save them.',
|
|
423
|
+
inputSchema: {
|
|
424
|
+
type: 'object',
|
|
425
|
+
properties: {
|
|
426
|
+
project_root: {
|
|
427
|
+
type: 'string',
|
|
428
|
+
description: 'Absolute path to project root',
|
|
429
|
+
},
|
|
430
|
+
mode: {
|
|
431
|
+
type: 'string',
|
|
432
|
+
enum: ['full', 'delta'],
|
|
433
|
+
default: 'full',
|
|
434
|
+
description: 'Compilation mode',
|
|
435
|
+
},
|
|
436
|
+
files: {
|
|
437
|
+
type: 'array',
|
|
438
|
+
items: { type: 'string' },
|
|
439
|
+
description: 'Files to update (delta mode only)',
|
|
440
|
+
},
|
|
441
|
+
},
|
|
442
|
+
required: ['project_root'],
|
|
443
|
+
},
|
|
444
|
+
},
|
|
445
|
+
{
|
|
446
|
+
name: 'cotx_query',
|
|
447
|
+
description: 'Search map nodes by keyword across all semantic layers',
|
|
448
|
+
inputSchema: {
|
|
449
|
+
type: 'object',
|
|
450
|
+
properties: {
|
|
451
|
+
project_root: {
|
|
452
|
+
type: 'string',
|
|
453
|
+
description: 'Absolute path to project root',
|
|
454
|
+
},
|
|
455
|
+
query: {
|
|
456
|
+
type: 'string',
|
|
457
|
+
description: 'Search keyword or phrase',
|
|
458
|
+
},
|
|
459
|
+
layer: {
|
|
460
|
+
type: 'string',
|
|
461
|
+
enum: ['module', 'concept', 'contract', 'flow', 'concern'],
|
|
462
|
+
description: 'Filter by layer',
|
|
463
|
+
},
|
|
464
|
+
},
|
|
465
|
+
required: ['project_root', 'query'],
|
|
466
|
+
},
|
|
467
|
+
},
|
|
468
|
+
{
|
|
469
|
+
name: 'cotx_context',
|
|
470
|
+
description: '360° view of a map node: details, dependencies, flows, concerns, annotations',
|
|
471
|
+
inputSchema: {
|
|
472
|
+
type: 'object',
|
|
473
|
+
properties: {
|
|
474
|
+
project_root: {
|
|
475
|
+
type: 'string',
|
|
476
|
+
description: 'Absolute path to project root',
|
|
477
|
+
},
|
|
478
|
+
node_id: {
|
|
479
|
+
type: 'string',
|
|
480
|
+
description: 'Node ID to inspect',
|
|
481
|
+
},
|
|
482
|
+
},
|
|
483
|
+
required: ['project_root', 'node_id'],
|
|
484
|
+
},
|
|
485
|
+
},
|
|
486
|
+
{
|
|
487
|
+
name: 'cotx_impact',
|
|
488
|
+
description: 'Blast radius analysis: what breaks if you change a node',
|
|
489
|
+
inputSchema: {
|
|
490
|
+
type: 'object',
|
|
491
|
+
properties: {
|
|
492
|
+
project_root: {
|
|
493
|
+
type: 'string',
|
|
494
|
+
description: 'Absolute path to project root',
|
|
495
|
+
},
|
|
496
|
+
target: {
|
|
497
|
+
type: 'string',
|
|
498
|
+
description: 'Node ID or keyword to analyze',
|
|
499
|
+
},
|
|
500
|
+
direction: {
|
|
501
|
+
type: 'string',
|
|
502
|
+
enum: ['upstream', 'downstream'],
|
|
503
|
+
default: 'upstream',
|
|
504
|
+
description: 'Impact direction',
|
|
505
|
+
},
|
|
506
|
+
},
|
|
507
|
+
required: ['project_root', 'target'],
|
|
508
|
+
},
|
|
509
|
+
},
|
|
510
|
+
{
|
|
511
|
+
name: 'cotx_map',
|
|
512
|
+
description: 'Generate prompt-friendly map summary in markdown',
|
|
513
|
+
inputSchema: {
|
|
514
|
+
type: 'object',
|
|
515
|
+
properties: {
|
|
516
|
+
project_root: {
|
|
517
|
+
type: 'string',
|
|
518
|
+
description: 'Absolute path to project root',
|
|
519
|
+
},
|
|
520
|
+
scope: {
|
|
521
|
+
type: 'string',
|
|
522
|
+
default: 'overview',
|
|
523
|
+
description: 'overview, module:<id>, or flow:<id>',
|
|
524
|
+
},
|
|
525
|
+
depth: {
|
|
526
|
+
type: 'number',
|
|
527
|
+
minimum: 1,
|
|
528
|
+
maximum: 3,
|
|
529
|
+
default: 2,
|
|
530
|
+
description: 'Detail level (1=minimal, 3=detailed)',
|
|
531
|
+
},
|
|
532
|
+
},
|
|
533
|
+
required: ['project_root'],
|
|
534
|
+
},
|
|
535
|
+
},
|
|
536
|
+
{
|
|
537
|
+
name: 'cotx_batch_write',
|
|
538
|
+
description: 'Write enrichments for multiple nodes in a single call. Use after cotx_enrich to write all generated descriptions at once.',
|
|
539
|
+
inputSchema: {
|
|
540
|
+
type: 'object',
|
|
541
|
+
properties: {
|
|
542
|
+
project_root: {
|
|
543
|
+
type: 'string',
|
|
544
|
+
description: 'Absolute path to project root',
|
|
545
|
+
},
|
|
546
|
+
writes: {
|
|
547
|
+
type: 'array',
|
|
548
|
+
items: { type: 'string' },
|
|
549
|
+
description: 'JSON array of {node_id, field, content} objects',
|
|
550
|
+
},
|
|
551
|
+
},
|
|
552
|
+
required: ['project_root', 'writes'],
|
|
553
|
+
},
|
|
554
|
+
},
|
|
555
|
+
{
|
|
556
|
+
name: 'cotx_write',
|
|
557
|
+
description: 'Write to enriched or annotation zone of a map node',
|
|
558
|
+
inputSchema: {
|
|
559
|
+
type: 'object',
|
|
560
|
+
properties: {
|
|
561
|
+
project_root: {
|
|
562
|
+
type: 'string',
|
|
563
|
+
description: 'Absolute path to project root',
|
|
564
|
+
},
|
|
565
|
+
node_id: {
|
|
566
|
+
type: 'string',
|
|
567
|
+
description: 'Node ID to write to',
|
|
568
|
+
},
|
|
569
|
+
field: {
|
|
570
|
+
type: 'string',
|
|
571
|
+
description: 'Field path (e.g., enriched.responsibility or annotation.constraint)',
|
|
572
|
+
},
|
|
573
|
+
content: {
|
|
574
|
+
type: 'string',
|
|
575
|
+
description: 'Content to write',
|
|
576
|
+
},
|
|
577
|
+
},
|
|
578
|
+
required: ['project_root', 'node_id', 'field', 'content'],
|
|
579
|
+
},
|
|
580
|
+
},
|
|
581
|
+
{
|
|
582
|
+
name: 'cotx_lint',
|
|
583
|
+
description: 'Check map ↔ code consistency, report stale enrichments and broken references',
|
|
584
|
+
inputSchema: {
|
|
585
|
+
type: 'object',
|
|
586
|
+
properties: {
|
|
587
|
+
project_root: {
|
|
588
|
+
type: 'string',
|
|
589
|
+
description: 'Absolute path to project root',
|
|
590
|
+
},
|
|
591
|
+
scope: {
|
|
592
|
+
type: 'string',
|
|
593
|
+
description: 'Scope to lint (module ID or empty for all)',
|
|
594
|
+
},
|
|
595
|
+
strict: {
|
|
596
|
+
type: 'boolean',
|
|
597
|
+
default: false,
|
|
598
|
+
description: 'Exit with error on any issue',
|
|
599
|
+
},
|
|
600
|
+
},
|
|
601
|
+
required: ['project_root'],
|
|
602
|
+
},
|
|
603
|
+
},
|
|
604
|
+
{
|
|
605
|
+
name: 'cotx_enrich',
|
|
606
|
+
description: 'Get stale/unenriched nodes with context for LLM enrichment. For each task: read the context (files, API, dependencies), write a one-sentence description, then call cotx_batch_write with all results. Only returns nodes that changed since last enrichment (incremental).',
|
|
607
|
+
inputSchema: {
|
|
608
|
+
type: 'object',
|
|
609
|
+
properties: {
|
|
610
|
+
project_root: {
|
|
611
|
+
type: 'string',
|
|
612
|
+
description: 'Absolute path to project root',
|
|
613
|
+
},
|
|
614
|
+
layer: {
|
|
615
|
+
type: 'string',
|
|
616
|
+
enum: ['module', 'concept', 'contract', 'flow', 'all'],
|
|
617
|
+
default: 'module',
|
|
618
|
+
description: 'Which layer to enrich (module, concept, or all)',
|
|
619
|
+
},
|
|
620
|
+
limit: {
|
|
621
|
+
type: 'number',
|
|
622
|
+
minimum: 1,
|
|
623
|
+
maximum: 50,
|
|
624
|
+
default: 10,
|
|
625
|
+
description: 'Max number of enrichment tasks to return',
|
|
626
|
+
},
|
|
627
|
+
},
|
|
628
|
+
required: ['project_root'],
|
|
629
|
+
},
|
|
630
|
+
},
|
|
631
|
+
{
|
|
632
|
+
name: 'cotx_diff',
|
|
633
|
+
description: 'Semantic diff between two versions of the map',
|
|
634
|
+
inputSchema: {
|
|
635
|
+
type: 'object',
|
|
636
|
+
properties: {
|
|
637
|
+
project_root: {
|
|
638
|
+
type: 'string',
|
|
639
|
+
description: 'Absolute path to project root',
|
|
640
|
+
},
|
|
641
|
+
snapshot: {
|
|
642
|
+
type: 'string',
|
|
643
|
+
description: 'Snapshot tag to compare against',
|
|
644
|
+
},
|
|
645
|
+
},
|
|
646
|
+
required: ['project_root'],
|
|
647
|
+
},
|
|
648
|
+
},
|
|
649
|
+
];
|
|
650
|
+
//# sourceMappingURL=tools.js.map
|