codedev-mcp 3.2.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/CHANGELOG.md +90 -0
- package/LICENSE +21 -0
- package/README.md +760 -0
- package/dist/analyzers/api-contract.d.ts +46 -0
- package/dist/analyzers/api-contract.d.ts.map +1 -0
- package/dist/analyzers/api-contract.js +319 -0
- package/dist/analyzers/api-contract.js.map +1 -0
- package/dist/analyzers/architecture.d.ts +37 -0
- package/dist/analyzers/architecture.d.ts.map +1 -0
- package/dist/analyzers/architecture.js +149 -0
- package/dist/analyzers/architecture.js.map +1 -0
- package/dist/analyzers/branch-compare.d.ts +46 -0
- package/dist/analyzers/branch-compare.d.ts.map +1 -0
- package/dist/analyzers/branch-compare.js +128 -0
- package/dist/analyzers/branch-compare.js.map +1 -0
- package/dist/analyzers/cicd.d.ts +42 -0
- package/dist/analyzers/cicd.d.ts.map +1 -0
- package/dist/analyzers/cicd.js +237 -0
- package/dist/analyzers/cicd.js.map +1 -0
- package/dist/analyzers/codebase.d.ts +64 -0
- package/dist/analyzers/codebase.d.ts.map +1 -0
- package/dist/analyzers/codebase.js +354 -0
- package/dist/analyzers/codebase.js.map +1 -0
- package/dist/analyzers/complexity-heatmap.d.ts +50 -0
- package/dist/analyzers/complexity-heatmap.d.ts.map +1 -0
- package/dist/analyzers/complexity-heatmap.js +156 -0
- package/dist/analyzers/complexity-heatmap.js.map +1 -0
- package/dist/analyzers/context-pack.d.ts +43 -0
- package/dist/analyzers/context-pack.d.ts.map +1 -0
- package/dist/analyzers/context-pack.js +232 -0
- package/dist/analyzers/context-pack.js.map +1 -0
- package/dist/analyzers/coverage.d.ts +70 -0
- package/dist/analyzers/coverage.d.ts.map +1 -0
- package/dist/analyzers/coverage.js +313 -0
- package/dist/analyzers/coverage.js.map +1 -0
- package/dist/analyzers/db-schema.d.ts +55 -0
- package/dist/analyzers/db-schema.d.ts.map +1 -0
- package/dist/analyzers/db-schema.js +237 -0
- package/dist/analyzers/db-schema.js.map +1 -0
- package/dist/analyzers/dead-code.d.ts +34 -0
- package/dist/analyzers/dead-code.d.ts.map +1 -0
- package/dist/analyzers/dead-code.js +131 -0
- package/dist/analyzers/dead-code.js.map +1 -0
- package/dist/analyzers/dep-vuln.d.ts +36 -0
- package/dist/analyzers/dep-vuln.d.ts.map +1 -0
- package/dist/analyzers/dep-vuln.js +342 -0
- package/dist/analyzers/dep-vuln.js.map +1 -0
- package/dist/analyzers/docs.d.ts +47 -0
- package/dist/analyzers/docs.d.ts.map +1 -0
- package/dist/analyzers/docs.js +473 -0
- package/dist/analyzers/docs.js.map +1 -0
- package/dist/analyzers/git.d.ts +115 -0
- package/dist/analyzers/git.d.ts.map +1 -0
- package/dist/analyzers/git.js +214 -0
- package/dist/analyzers/git.js.map +1 -0
- package/dist/analyzers/iac.d.ts +39 -0
- package/dist/analyzers/iac.d.ts.map +1 -0
- package/dist/analyzers/iac.js +233 -0
- package/dist/analyzers/iac.js.map +1 -0
- package/dist/analyzers/impact.d.ts +51 -0
- package/dist/analyzers/impact.d.ts.map +1 -0
- package/dist/analyzers/impact.js +235 -0
- package/dist/analyzers/impact.js.map +1 -0
- package/dist/analyzers/monorepo.d.ts +36 -0
- package/dist/analyzers/monorepo.d.ts.map +1 -0
- package/dist/analyzers/monorepo.js +233 -0
- package/dist/analyzers/monorepo.js.map +1 -0
- package/dist/analyzers/notebook.d.ts +53 -0
- package/dist/analyzers/notebook.d.ts.map +1 -0
- package/dist/analyzers/notebook.js +149 -0
- package/dist/analyzers/notebook.js.map +1 -0
- package/dist/analyzers/perf-profile.d.ts +39 -0
- package/dist/analyzers/perf-profile.d.ts.map +1 -0
- package/dist/analyzers/perf-profile.js +222 -0
- package/dist/analyzers/perf-profile.js.map +1 -0
- package/dist/analyzers/scaffold.d.ts +46 -0
- package/dist/analyzers/scaffold.d.ts.map +1 -0
- package/dist/analyzers/scaffold.js +313 -0
- package/dist/analyzers/scaffold.js.map +1 -0
- package/dist/analyzers/security.d.ts +42 -0
- package/dist/analyzers/security.d.ts.map +1 -0
- package/dist/analyzers/security.js +281 -0
- package/dist/analyzers/security.js.map +1 -0
- package/dist/analyzers/symbols.d.ts +49 -0
- package/dist/analyzers/symbols.d.ts.map +1 -0
- package/dist/analyzers/symbols.js +212 -0
- package/dist/analyzers/symbols.js.map +1 -0
- package/dist/analyzers/tree-sitter.d.ts +71 -0
- package/dist/analyzers/tree-sitter.d.ts.map +1 -0
- package/dist/analyzers/tree-sitter.js +333 -0
- package/dist/analyzers/tree-sitter.js.map +1 -0
- package/dist/analyzers/type-flow.d.ts +39 -0
- package/dist/analyzers/type-flow.d.ts.map +1 -0
- package/dist/analyzers/type-flow.js +75 -0
- package/dist/analyzers/type-flow.js.map +1 -0
- package/dist/cache/memory-cache.d.ts +130 -0
- package/dist/cache/memory-cache.d.ts.map +1 -0
- package/dist/cache/memory-cache.js +273 -0
- package/dist/cache/memory-cache.js.map +1 -0
- package/dist/config.d.ts +32 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +57 -0
- package/dist/config.js.map +1 -0
- package/dist/constants/instructions.d.ts +2 -0
- package/dist/constants/instructions.d.ts.map +1 -0
- package/dist/constants/instructions.js +82 -0
- package/dist/constants/instructions.js.map +1 -0
- package/dist/db/connection.d.ts +12 -0
- package/dist/db/connection.d.ts.map +1 -0
- package/dist/db/connection.js +34 -0
- package/dist/db/connection.js.map +1 -0
- package/dist/db/json-store.d.ts +111 -0
- package/dist/db/json-store.d.ts.map +1 -0
- package/dist/db/json-store.js +201 -0
- package/dist/db/json-store.js.map +1 -0
- package/dist/db/sqlite-store.d.ts +153 -0
- package/dist/db/sqlite-store.d.ts.map +1 -0
- package/dist/db/sqlite-store.js +388 -0
- package/dist/db/sqlite-store.js.map +1 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +116 -0
- package/dist/index.js.map +1 -0
- package/dist/resources/health.d.ts +35 -0
- package/dist/resources/health.d.ts.map +1 -0
- package/dist/resources/health.js +81 -0
- package/dist/resources/health.js.map +1 -0
- package/dist/schemas/output-schemas.d.ts +517 -0
- package/dist/schemas/output-schemas.d.ts.map +1 -0
- package/dist/schemas/output-schemas.js +296 -0
- package/dist/schemas/output-schemas.js.map +1 -0
- package/dist/search/fast-search.d.ts +90 -0
- package/dist/search/fast-search.d.ts.map +1 -0
- package/dist/search/fast-search.js +387 -0
- package/dist/search/fast-search.js.map +1 -0
- package/dist/search/semantic.d.ts +26 -0
- package/dist/search/semantic.d.ts.map +1 -0
- package/dist/search/semantic.js +458 -0
- package/dist/search/semantic.js.map +1 -0
- package/dist/tools/analysis.d.ts +7 -0
- package/dist/tools/analysis.d.ts.map +1 -0
- package/dist/tools/analysis.js +491 -0
- package/dist/tools/analysis.js.map +1 -0
- package/dist/tools/architecture.d.ts +7 -0
- package/dist/tools/architecture.d.ts.map +1 -0
- package/dist/tools/architecture.js +176 -0
- package/dist/tools/architecture.js.map +1 -0
- package/dist/tools/devops.d.ts +7 -0
- package/dist/tools/devops.d.ts.map +1 -0
- package/dist/tools/devops.js +179 -0
- package/dist/tools/devops.js.map +1 -0
- package/dist/tools/docs.d.ts +7 -0
- package/dist/tools/docs.d.ts.map +1 -0
- package/dist/tools/docs.js +102 -0
- package/dist/tools/docs.js.map +1 -0
- package/dist/tools/git.d.ts +7 -0
- package/dist/tools/git.d.ts.map +1 -0
- package/dist/tools/git.js +475 -0
- package/dist/tools/git.js.map +1 -0
- package/dist/tools/nav.d.ts +7 -0
- package/dist/tools/nav.d.ts.map +1 -0
- package/dist/tools/nav.js +275 -0
- package/dist/tools/nav.js.map +1 -0
- package/dist/tools/notebook.d.ts +7 -0
- package/dist/tools/notebook.d.ts.map +1 -0
- package/dist/tools/notebook.js +102 -0
- package/dist/tools/notebook.js.map +1 -0
- package/dist/tools/performance.d.ts +7 -0
- package/dist/tools/performance.d.ts.map +1 -0
- package/dist/tools/performance.js +59 -0
- package/dist/tools/performance.js.map +1 -0
- package/dist/tools/quality.d.ts +7 -0
- package/dist/tools/quality.d.ts.map +1 -0
- package/dist/tools/quality.js +279 -0
- package/dist/tools/quality.js.map +1 -0
- package/dist/tools/scaffold.d.ts +7 -0
- package/dist/tools/scaffold.d.ts.map +1 -0
- package/dist/tools/scaffold.js +80 -0
- package/dist/tools/scaffold.js.map +1 -0
- package/dist/tools/search.d.ts +7 -0
- package/dist/tools/search.d.ts.map +1 -0
- package/dist/tools/search.js +308 -0
- package/dist/tools/search.js.map +1 -0
- package/dist/tools/security.d.ts +7 -0
- package/dist/tools/security.d.ts.map +1 -0
- package/dist/tools/security.js +138 -0
- package/dist/tools/security.js.map +1 -0
- package/dist/utils/analytics.d.ts +69 -0
- package/dist/utils/analytics.d.ts.map +1 -0
- package/dist/utils/analytics.js +144 -0
- package/dist/utils/analytics.js.map +1 -0
- package/dist/utils/concurrency.d.ts +43 -0
- package/dist/utils/concurrency.d.ts.map +1 -0
- package/dist/utils/concurrency.js +78 -0
- package/dist/utils/concurrency.js.map +1 -0
- package/dist/utils/fallback.d.ts +52 -0
- package/dist/utils/fallback.d.ts.map +1 -0
- package/dist/utils/fallback.js +137 -0
- package/dist/utils/fallback.js.map +1 -0
- package/dist/utils/git-hooks.d.ts +24 -0
- package/dist/utils/git-hooks.d.ts.map +1 -0
- package/dist/utils/git-hooks.js +108 -0
- package/dist/utils/git-hooks.js.map +1 -0
- package/dist/utils/languages.d.ts +72 -0
- package/dist/utils/languages.d.ts.map +1 -0
- package/dist/utils/languages.js +463 -0
- package/dist/utils/languages.js.map +1 -0
- package/dist/utils/logger.d.ts +13 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +34 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/plugins.d.ts +105 -0
- package/dist/utils/plugins.d.ts.map +1 -0
- package/dist/utils/plugins.js +325 -0
- package/dist/utils/plugins.js.map +1 -0
- package/dist/utils/security.d.ts +17 -0
- package/dist/utils/security.d.ts.map +1 -0
- package/dist/utils/security.js +48 -0
- package/dist/utils/security.js.map +1 -0
- package/dist/utils/streaming.d.ts +56 -0
- package/dist/utils/streaming.d.ts.map +1 -0
- package/dist/utils/streaming.js +95 -0
- package/dist/utils/streaming.js.map +1 -0
- package/dist/version.d.ts +3 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +3 -0
- package/dist/version.js.map +1 -0
- package/mcp.json +100 -0
- package/package.json +89 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tree-sitter.js","sourceRoot":"","sources":["../../src/analyzers/tree-sitter.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAyB5C,4DAA4D;AAC5D,IAAI,MAAM,GAAiC,IAAI,CAAC;AAChD,IAAI,eAAe,GAAG,KAAK,CAAC;AAC5B,MAAM,eAAe,GAAG,IAAI,GAAG,EAAmB,CAAC;AAEnD,mDAAmD;AACnD,MAAM,YAAY,GAA2B;IAC3C,UAAU,EAAE,6BAA6B;IACzC,UAAU,EAAE,6BAA6B;IACzC,MAAM,EAAE,yBAAyB;IACjC,EAAE,EAAE,qBAAqB;IACzB,IAAI,EAAE,uBAAuB;IAC7B,IAAI,EAAE,uBAAuB;IAC7B,CAAC,EAAE,oBAAoB;IACvB,GAAG,EAAE,sBAAsB;CAC5B,CAAC;AA+BF;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc;IAClC,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,iBAAiB,CAAC,CAAC;QACnD,MAAM,gBAAgB,GAAG,UAAU,CAAC,OAAO,IAAI,UAAU,CAAC;QAC1D,wFAAwF;QACxF,MAAM,GAAG,gBAAoD,CAAC;QAC9D,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;QACpB,eAAe,GAAG,IAAI,CAAC;QACvB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,eAAe,GAAG,KAAK,CAAC;QACxB,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB;IAC/B,OAAO,eAAe,CAAC;AACzB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,sBAAsB;IACpC,OAAO,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AACnC,CAAC;AAED;;;;GAIG;AACH,KAAK,UAAU,YAAY,CAAC,QAAgB;IAC1C,IAAI,CAAC,eAAe,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IAC7C,IAAI,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC;QAAE,OAAO,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAExE,MAAM,WAAW,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;IAC3C,IAAI,CAAC,WAAW;QAAE,OAAO,IAAI,CAAC;IAE9B,IAAI,CAAC;QACH,+CAA+C;QAC/C,MAAM,aAAa,GAAG;YACpB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,UAAU,EAAE,WAAW,CAAC;YACjD,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,UAAU,EAAE,WAAW,CAAC;YACjE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,EAAE,cAAc,EAAE,UAAU,EAAE,WAAW,CAAC;SAC3E,CAAC;QAEF,KAAK,MAAM,CAAC,IAAI,aAAa,EAAE,CAAC;YAC9B,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAC3C,eAAe,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;gBACpC,OAAO,IAAI,CAAC;YACd,CAAC;YAAC,MAAM,CAAC;gBACP,SAAS;YACX,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,QAAgB,EAAE,QAAgB;IAC/D,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,QAAQ,CAAC,CAAC;IAC1C,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IAElC,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAClD,MAAM,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;QAC5B,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QACzB,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAEnC,MAAM,OAAO,GAAgB,EAAE,CAAC;QAChC,sBAAsB,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;QAElE,MAAM,CAAC,MAAM,EAAE,CAAC;QAChB,IAAI,CAAC,MAAM,EAAE,CAAC;QAEd,OAAO,OAAO,CAAC;IACjB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,sBAAsB,CAC7B,IAAoB,EACpB,OAAoB,EACpB,MAAc,EACd,QAAgB,EAChB,KAAK,GAAG,CAAC;IAET,6BAA6B;IAC7B,IAAI,KAAK,GAAG,EAAE;QAAE,OAAO;IAEvB,MAAM,WAAW,GAAsC;QACrD,oBAAoB,EAAE,UAAU;QAChC,mBAAmB,EAAE,UAAU;QAC/B,iBAAiB,EAAE,QAAQ;QAC3B,kBAAkB,EAAE,QAAQ;QAC5B,iBAAiB,EAAE,OAAO;QAC1B,gBAAgB,EAAE,OAAO;QACzB,qBAAqB,EAAE,WAAW;QAClC,sBAAsB,EAAE,MAAM;QAC9B,gBAAgB,EAAE,MAAM;QACxB,WAAW,EAAE,QAAQ;QACrB,SAAS,EAAE,QAAQ;QACnB,UAAU,EAAE,OAAO;QACnB,oBAAoB,EAAE,UAAU;QAChC,mBAAmB,EAAE,UAAU;KAChC,CAAC;IAEF,MAAM,QAAQ,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxC,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,QAAQ,GACZ,IAAI,CAAC,iBAAiB,EAAE,CAAC,MAAM,CAAC;YAChC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAiB,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,YAAY,IAAI,CAAC,CAAC,IAAI,KAAK,iBAAiB,CAAC,CAAC;QAEtG,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,MAAM,GAAc;gBACxB,IAAI,EAAE,QAAQ,CAAC,IAAI;gBACnB,IAAI,EAAE,QAAQ;gBACd,SAAS,EAAE,IAAI,CAAC,aAAa,CAAC,GAAG,GAAG,CAAC;gBACrC,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,GAAG,GAAG,CAAC;gBACjC,QAAQ,EAAE,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC;gBAClC,QAAQ,EAAE,EAAE;aACb,CAAC;YAEF,+BAA+B;YAC/B,MAAM,MAAM,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC,mBAAmB,CAAC,CAAC;YACvG,IAAI,MAAM,EAAE,CAAC;gBACX,MAAM,CAAC,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;YACxC,CAAC;YAED,sBAAsB;YACtB,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC,QAAQ,CAAC,CAAC;YACjG,IAAI,UAAU,EAAE,CAAC;gBACf,MAAM,CAAC,UAAU,GAAG,UAAU,CAAC,IAAI,CAAC;YACtC,CAAC;YAED,+CAA+C;YAC/C,MAAM,WAAW,GAAG,IAAI,CAAC,oBAAoB,CAAC;YAC9C,IAAI,WAAW,IAAI,CAAC,WAAW,CAAC,IAAI,KAAK,SAAS,IAAI,WAAW,CAAC,IAAI,KAAK,eAAe,CAAC,EAAE,CAAC;gBAC5F,MAAM,CAAC,UAAU,GAAG,WAAW,CAAC,IAAI,CAAC;YACvC,CAAC;YAED,4CAA4C;YAC5C,IAAI,QAAQ,KAAK,OAAO,IAAI,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;gBAC1E,MAAM,IAAI,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC,MAAM,CAAC,CAAC;gBAC9C,IAAI,IAAI,EAAE,CAAC;oBACT,MAAM,YAAY,GAAgB,EAAE,CAAC;oBACrC,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,IAAI,EAAE,EAAE,CAAC;wBACxC,sBAAsB,CAAC,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;oBAC3E,CAAC;oBACD,MAAM,CAAC,QAAQ,GAAG,YAAY,CAAC;gBACjC,CAAC;YACH,CAAC;YAED,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACrB,qCAAqC;YACrC,OAAO;QACT,CAAC;IACH,CAAC;IAED,wBAAwB;IACxB,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,IAAI,EAAE,EAAE,CAAC;QACxC,sBAAsB,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;IACtE,CAAC;AACH,CAAC;AAED,SAAS,UAAU,CAAC,IAAoB,EAAE,MAAc;IACtD,MAAM,SAAS,GAAG,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IAChE,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,SAAS,EAAE,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC,CAAC;IAC/D,OAAO,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC9D,CAAC;AAED,SAAS,aAAa,CAAC,UAA0B;IAC/C,OAAO,CAAC,UAAU,CAAC,QAAQ,IAAI,EAAE,CAAC;SAC/B,MAAM,CAAC,CAAC,CAAiB,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,GAAG,IAAI,CAAC,CAAC,IAAI,KAAK,GAAG,IAAI,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC;SACjF,GAAG,CAAC,CAAC,CAAiB,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;SAClC,MAAM,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAChD,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,QAAgB,EAAE,QAAgB;IACvE,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,QAAQ,CAAC,CAAC;IAC1C,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IAElC,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAClD,MAAM,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;QAC5B,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QACzB,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAEnC,MAAM,KAAK,GAAqB,EAAE,CAAC;QACnC,MAAM,SAAS,GAAa,EAAE,CAAC;QAE/B,SAAS,YAAY,CAAC,IAAoB;YACxC,uBAAuB;YACvB,MAAM,SAAS,GAAG,CAAC,sBAAsB,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,gBAAgB,CAAC,CAAC,QAAQ,CAC/G,IAAI,CAAC,IAAI,CACV,CAAC;YACF,IAAI,SAAS,EAAE,CAAC;gBACd,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC,MAAM,CAAC,CAAC;gBAClD,IAAI,QAAQ;oBAAE,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YAC9C,CAAC;YAED,wBAAwB;YACxB,IAAI,IAAI,CAAC,IAAI,KAAK,iBAAiB,EAAE,CAAC;gBACpC,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC;gBAC5E,IAAI,QAAQ,EAAE,CAAC;oBACb,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC;oBAC7B,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC;oBACnF,KAAK,CAAC,IAAI,CAAC;wBACT,MAAM;wBACN,MAAM;wBACN,IAAI,EAAE,QAAQ;wBACd,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,GAAG,GAAG,CAAC;qBACjC,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YAED,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,IAAI,EAAE,EAAE,CAAC;gBACxC,YAAY,CAAC,KAAK,CAAC,CAAC;YACtB,CAAC;YAED,IAAI,SAAS,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC;gBAClD,SAAS,CAAC,GAAG,EAAE,CAAC;YAClB,CAAC;QACH,CAAC;QAED,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAE5B,MAAM,CAAC,MAAM,EAAE,CAAC;QAChB,IAAI,CAAC,MAAM,EAAE,CAAC;QAEd,OAAO,KAAK,CAAC;IACf,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,QAAgB,EAAE,QAAgB;IACpE,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,QAAQ,CAAC,CAAC;IAC1C,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IAElC,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAClD,MAAM,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;QAC5B,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QACzB,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAEnC,MAAM,MAAM,GAAgB,EAAE,CAAC;QAE/B,SAAS,aAAa,CAAC,IAAoB,EAAE,MAAwB;YACnE,MAAM,UAAU,GAAG;gBACjB,sBAAsB;gBACtB,qBAAqB;gBACrB,mBAAmB;gBACnB,mBAAmB;gBACnB,kBAAkB;gBAClB,OAAO;gBACP,cAAc;gBACd,eAAe;gBACf,iBAAiB;gBACjB,eAAe;aAChB,CAAC;YAEF,IAAI,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC,MAAM,CAAC,CAAC;gBAClD,MAAM,KAAK,GAAc;oBACvB,IAAI,EAAE,QAAQ,EAAE,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,GAAG;oBACxC,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,SAAS,EAAE,IAAI,CAAC,aAAa,CAAC,GAAG,GAAG,CAAC;oBACrC,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,GAAG,GAAG,CAAC;oBACjC,SAAS,EAAE,EAAE;oBACb,QAAQ,EAAE,EAAE;iBACb,CAAC;gBAEF,kDAAkD;gBAClD,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,IAAI,EAAE,EAAE,CAAC;oBACxC,IAAI,CAAC,sBAAsB,EAAE,qBAAqB,EAAE,YAAY,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;wBACvF,MAAM,OAAO,GAAG,KAAK,CAAC,iBAAiB,EAAE,CAAC,MAAM,CAAC,CAAC;wBAClD,IAAI,OAAO;4BAAE,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;oBAClD,CAAC;gBACH,CAAC;gBAED,IAAI,MAAM;oBAAE,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;;oBACnC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAExB,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,IAAI,EAAE,EAAE,CAAC;oBACxC,aAAa,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;gBAC9B,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,IAAI,EAAE,EAAE,CAAC;oBACxC,aAAa,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;gBAC/B,CAAC;YACH,CAAC;QACH,CAAC;QAED,aAAa,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAEnC,MAAM,CAAC,MAAM,EAAE,CAAC;QAChB,IAAI,CAAC,MAAM,EAAE,CAAC;QAEd,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Type Flow Analysis
|
|
3
|
+
* Tracks where a type/interface is defined, imported, used as parameter, returned, etc.
|
|
4
|
+
*/
|
|
5
|
+
export interface TypeUsage {
|
|
6
|
+
file: string;
|
|
7
|
+
line: number;
|
|
8
|
+
kind: 'definition' | 'import' | 'parameter' | 'return-type' | 'variable' | 'extends' | 'generic' | 'field';
|
|
9
|
+
context: string;
|
|
10
|
+
}
|
|
11
|
+
export interface TypeFlowResult {
|
|
12
|
+
typeName: string;
|
|
13
|
+
definition?: {
|
|
14
|
+
file: string;
|
|
15
|
+
line: number;
|
|
16
|
+
code: string;
|
|
17
|
+
};
|
|
18
|
+
usages: TypeUsage[];
|
|
19
|
+
flowSummary: {
|
|
20
|
+
definedIn: string;
|
|
21
|
+
importedBy: string[];
|
|
22
|
+
usedAsParam: string[];
|
|
23
|
+
usedAsReturn: string[];
|
|
24
|
+
extendedBy: string[];
|
|
25
|
+
totalUsages: number;
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Analyze where a type is defined, imported, and used across the codebase.
|
|
30
|
+
* @param cwd - The working directory
|
|
31
|
+
* @param typeName - Name of the type to trace
|
|
32
|
+
* @param options - Analysis options
|
|
33
|
+
* @param options.directory - Subdirectory to scan
|
|
34
|
+
* @returns Type flow analysis with usages and summary
|
|
35
|
+
*/
|
|
36
|
+
export declare function analyzeTypeFlow(cwd: string, typeName: string, options?: {
|
|
37
|
+
directory?: string;
|
|
38
|
+
}): Promise<TypeFlowResult>;
|
|
39
|
+
//# sourceMappingURL=type-flow.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"type-flow.d.ts","sourceRoot":"","sources":["../../src/analyzers/type-flow.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,YAAY,GAAG,QAAQ,GAAG,WAAW,GAAG,aAAa,GAAG,UAAU,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC;IAC3G,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1D,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,WAAW,EAAE;QACX,SAAS,EAAE,MAAM,CAAC;QAClB,UAAU,EAAE,MAAM,EAAE,CAAC;QACrB,WAAW,EAAE,MAAM,EAAE,CAAC;QACtB,YAAY,EAAE,MAAM,EAAE,CAAC;QACvB,UAAU,EAAE,MAAM,EAAE,CAAC;QACrB,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;CACH;AAED;;;;;;;GAOG;AACH,wBAAsB,eAAe,CACnC,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GAC/B,OAAO,CAAC,cAAc,CAAC,CAsDzB"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Type Flow Analysis
|
|
3
|
+
* Tracks where a type/interface is defined, imported, used as parameter, returned, etc.
|
|
4
|
+
*/
|
|
5
|
+
import { searchCode } from '../search/fast-search.js';
|
|
6
|
+
import { readFile } from 'node:fs/promises';
|
|
7
|
+
import path from 'node:path';
|
|
8
|
+
import { logger } from '../utils/logger.js';
|
|
9
|
+
/**
|
|
10
|
+
* Analyze where a type is defined, imported, and used across the codebase.
|
|
11
|
+
* @param cwd - The working directory
|
|
12
|
+
* @param typeName - Name of the type to trace
|
|
13
|
+
* @param options - Analysis options
|
|
14
|
+
* @param options.directory - Subdirectory to scan
|
|
15
|
+
* @returns Type flow analysis with usages and summary
|
|
16
|
+
*/
|
|
17
|
+
export async function analyzeTypeFlow(cwd, typeName, options) {
|
|
18
|
+
const dir = path.resolve(cwd, options?.directory || '.');
|
|
19
|
+
const usages = [];
|
|
20
|
+
let definition;
|
|
21
|
+
const results = await searchCode({ cwd: dir, pattern: `\\b${typeName}\\b`, isRegex: true, maxResults: 500 });
|
|
22
|
+
const filesWithType = [...new Set(results.map((r) => r.file))];
|
|
23
|
+
for (const file of filesWithType.slice(0, 200)) {
|
|
24
|
+
try {
|
|
25
|
+
const content = await readFile(path.resolve(dir, file), 'utf-8');
|
|
26
|
+
const lines = content.split('\n');
|
|
27
|
+
const re = new RegExp(`\\b${typeName}\\b`);
|
|
28
|
+
for (let i = 0; i < lines.length; i++) {
|
|
29
|
+
if (!re.test(lines[i]))
|
|
30
|
+
continue;
|
|
31
|
+
const t = lines[i].trim();
|
|
32
|
+
const ln = i + 1;
|
|
33
|
+
if (new RegExp(`^(export\\s+)?(interface|type|class|enum|struct)\\s+${typeName}\\b`).test(t)) {
|
|
34
|
+
definition = { file, line: ln, code: t };
|
|
35
|
+
usages.push({ file, line: ln, kind: 'definition', context: t });
|
|
36
|
+
}
|
|
37
|
+
else if (/^(import|from|use|using)\s/.test(t)) {
|
|
38
|
+
usages.push({ file, line: ln, kind: 'import', context: t });
|
|
39
|
+
}
|
|
40
|
+
else if (new RegExp(`(extends|implements).*\\b${typeName}\\b`).test(t)) {
|
|
41
|
+
usages.push({ file, line: ln, kind: 'extends', context: t });
|
|
42
|
+
}
|
|
43
|
+
else if (new RegExp(`<[^>]*\\b${typeName}\\b`).test(t)) {
|
|
44
|
+
usages.push({ file, line: ln, kind: 'generic', context: t });
|
|
45
|
+
}
|
|
46
|
+
else if (new RegExp(`\\)\\s*:.*${typeName}|->\\s*${typeName}`).test(t)) {
|
|
47
|
+
usages.push({ file, line: ln, kind: 'return-type', context: t });
|
|
48
|
+
}
|
|
49
|
+
else if (new RegExp(`\\(.*:.*${typeName}`).test(t) && /function|def |func |fn /.test(t)) {
|
|
50
|
+
usages.push({ file, line: ln, kind: 'parameter', context: t });
|
|
51
|
+
}
|
|
52
|
+
else if (new RegExp(`:\\s*${typeName}`).test(t)) {
|
|
53
|
+
usages.push({ file, line: ln, kind: 'variable', context: t });
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
catch (error) {
|
|
58
|
+
logger.debug(`Failed to analyze type flow in file: ${file}`, { error });
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
return {
|
|
62
|
+
typeName,
|
|
63
|
+
definition,
|
|
64
|
+
usages: usages.slice(0, 200),
|
|
65
|
+
flowSummary: {
|
|
66
|
+
definedIn: definition?.file || 'not found',
|
|
67
|
+
importedBy: [...new Set(usages.filter((u) => u.kind === 'import').map((u) => u.file))],
|
|
68
|
+
usedAsParam: [...new Set(usages.filter((u) => u.kind === 'parameter').map((u) => u.file))],
|
|
69
|
+
usedAsReturn: [...new Set(usages.filter((u) => u.kind === 'return-type').map((u) => u.file))],
|
|
70
|
+
extendedBy: [...new Set(usages.filter((u) => u.kind === 'extends').map((u) => u.file))],
|
|
71
|
+
totalUsages: usages.length,
|
|
72
|
+
},
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=type-flow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"type-flow.js","sourceRoot":"","sources":["../../src/analyzers/type-flow.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* In-memory cache with mtime-based invalidation.
|
|
3
|
+
* No external dependencies. Supports TTL and file-change detection.
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* In-memory cache with TTL and file-mtime-based invalidation.
|
|
7
|
+
*/
|
|
8
|
+
export declare class MemoryCache {
|
|
9
|
+
private store;
|
|
10
|
+
private maxEntries;
|
|
11
|
+
private hits;
|
|
12
|
+
private misses;
|
|
13
|
+
/**
|
|
14
|
+
* Create a new MemoryCache instance.
|
|
15
|
+
* @param maxEntries - Maximum number of entries to store before evicting.
|
|
16
|
+
*/
|
|
17
|
+
constructor(maxEntries?: number);
|
|
18
|
+
/**
|
|
19
|
+
* Get cached value. Returns null if expired, missing, or file changed.
|
|
20
|
+
* @param key - Cache key to look up.
|
|
21
|
+
* @param filePath - Optional file path for mtime-based invalidation.
|
|
22
|
+
* @returns The cached value or null if not found/expired.
|
|
23
|
+
*/
|
|
24
|
+
get<T>(key: string, filePath?: string): Promise<T | null>;
|
|
25
|
+
/**
|
|
26
|
+
* Set cached value with optional file path for mtime tracking.
|
|
27
|
+
* @param key - Cache key.
|
|
28
|
+
* @param data - Data to cache.
|
|
29
|
+
* @param ttl - Time-to-live in milliseconds.
|
|
30
|
+
* @param filePath - Optional file path for mtime tracking.
|
|
31
|
+
*/
|
|
32
|
+
set<T>(key: string, data: T, ttl?: number, filePath?: string): Promise<void>;
|
|
33
|
+
/**
|
|
34
|
+
* Invalidate specific key or pattern.
|
|
35
|
+
* @param keyOrPrefix - Exact key or prefix to invalidate.
|
|
36
|
+
* @returns The number of entries invalidated.
|
|
37
|
+
*/
|
|
38
|
+
invalidate(keyOrPrefix: string): number;
|
|
39
|
+
/**
|
|
40
|
+
* Invalidate all entries related to a file path.
|
|
41
|
+
* @param filePath - File path to match against cache keys.
|
|
42
|
+
* @returns The number of entries invalidated.
|
|
43
|
+
*/
|
|
44
|
+
invalidateFile(filePath: string): number;
|
|
45
|
+
/**
|
|
46
|
+
* Clear all cache entries.
|
|
47
|
+
*/
|
|
48
|
+
clear(): void;
|
|
49
|
+
/**
|
|
50
|
+
* Get cache statistics.
|
|
51
|
+
* @returns An object with size, hits, misses, and hitRate.
|
|
52
|
+
*/
|
|
53
|
+
stats(): {
|
|
54
|
+
size: number;
|
|
55
|
+
hits: number;
|
|
56
|
+
misses: number;
|
|
57
|
+
hitRate: string;
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Cache for tool call results, keyed by tool name and parameters.
|
|
62
|
+
*/
|
|
63
|
+
export declare class ToolResultCache {
|
|
64
|
+
private store;
|
|
65
|
+
private maxEntries;
|
|
66
|
+
private hits;
|
|
67
|
+
private misses;
|
|
68
|
+
/**
|
|
69
|
+
* Create a new ToolResultCache instance.
|
|
70
|
+
* @param maxEntries - Maximum number of entries to store before evicting.
|
|
71
|
+
*/
|
|
72
|
+
constructor(maxEntries?: number);
|
|
73
|
+
/**
|
|
74
|
+
* Generate a deterministic cache key from tool name + params.
|
|
75
|
+
* @param toolName - Name of the tool.
|
|
76
|
+
* @param params - Tool parameters.
|
|
77
|
+
* @returns A deterministic cache key string.
|
|
78
|
+
*/
|
|
79
|
+
private makeKey;
|
|
80
|
+
/**
|
|
81
|
+
* Simple FNV-1a-inspired hash for speed.
|
|
82
|
+
* @param str - String to hash.
|
|
83
|
+
* @returns A base-36 hash string.
|
|
84
|
+
*/
|
|
85
|
+
private simpleHash;
|
|
86
|
+
/**
|
|
87
|
+
* Get cached tool result. Returns null on miss.
|
|
88
|
+
* @param toolName - Name of the tool.
|
|
89
|
+
* @param params - Tool parameters.
|
|
90
|
+
* @returns The cached result or null if not found/expired.
|
|
91
|
+
*/
|
|
92
|
+
get(toolName: string, params: Record<string, unknown>): unknown | null;
|
|
93
|
+
/**
|
|
94
|
+
* Cache a tool result. Default TTL: 120s (tools may return stale data for file changes).
|
|
95
|
+
* @param toolName - Name of the tool.
|
|
96
|
+
* @param params - Tool parameters.
|
|
97
|
+
* @param result - The result to cache.
|
|
98
|
+
* @param ttl - Time-to-live in milliseconds.
|
|
99
|
+
*/
|
|
100
|
+
set(toolName: string, params: Record<string, unknown>, result: unknown, ttl?: number): void;
|
|
101
|
+
/**
|
|
102
|
+
* Invalidate all cached results for a specific tool.
|
|
103
|
+
* @param toolName - Name of the tool to invalidate.
|
|
104
|
+
* @returns The number of entries invalidated.
|
|
105
|
+
*/
|
|
106
|
+
invalidateTool(toolName: string): number;
|
|
107
|
+
/**
|
|
108
|
+
* Invalidate all cached results that might reference a file path.
|
|
109
|
+
* @param filePath - File path to match against cache keys.
|
|
110
|
+
* @returns The number of entries invalidated.
|
|
111
|
+
*/
|
|
112
|
+
invalidateForFile(filePath: string): number;
|
|
113
|
+
/**
|
|
114
|
+
* Invalidate all entries.
|
|
115
|
+
*/
|
|
116
|
+
clear(): void;
|
|
117
|
+
/**
|
|
118
|
+
* Stats for analytics integration.
|
|
119
|
+
* @returns An object with size, hits, misses, and hitRate.
|
|
120
|
+
*/
|
|
121
|
+
stats(): {
|
|
122
|
+
size: number;
|
|
123
|
+
hits: number;
|
|
124
|
+
misses: number;
|
|
125
|
+
hitRate: string;
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
export declare const cache: MemoryCache;
|
|
129
|
+
export declare const toolResultCache: ToolResultCache;
|
|
130
|
+
//# sourceMappingURL=memory-cache.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-cache.d.ts","sourceRoot":"","sources":["../../src/cache/memory-cache.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAcH;;GAEG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,KAAK,CAA0C;IACvD,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,IAAI,CAAK;IACjB,OAAO,CAAC,MAAM,CAAK;IAEnB;;;OAGG;gBACS,UAAU,SAAO;IAI7B;;;;;OAKG;IACG,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAkC/D;;;;;;OAMG;IACG,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,SAAS,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAoBlF;;;;OAIG;IACH,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM;IAWvC;;;;OAIG;IACH,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IAWxC;;OAEG;IACH,KAAK,IAAI,IAAI;IAMb;;;OAGG;IACH,KAAK,IAAI;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE;CASzE;AAeD;;GAEG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,KAAK,CAAsC;IACnD,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,IAAI,CAAK;IACjB,OAAO,CAAC,MAAM,CAAK;IAEnB;;;OAGG;gBACS,UAAU,SAAO;IAI7B;;;;;OAKG;IACH,OAAO,CAAC,OAAO;IAcf;;;;OAIG;IACH,OAAO,CAAC,UAAU;IASlB;;;;;OAKG;IACH,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,GAAG,IAAI;IAgBtE;;;;;;OAMG;IACH,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,SAAU,GAAG,IAAI;IAS5F;;;;OAIG;IACH,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IAWxC;;;;OAIG;IACH,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IAW3C;;OAEG;IACH,KAAK,IAAI,IAAI;IAMb;;;OAGG;IACH,KAAK,IAAI;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE;CASzE;AAGD,eAAO,MAAM,KAAK,aAAoB,CAAC;AACvC,eAAO,MAAM,eAAe,iBAAwB,CAAC"}
|
|
@@ -0,0 +1,273 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* In-memory cache with mtime-based invalidation.
|
|
3
|
+
* No external dependencies. Supports TTL and file-change detection.
|
|
4
|
+
*/
|
|
5
|
+
import { stat } from 'node:fs/promises';
|
|
6
|
+
/**
|
|
7
|
+
* In-memory cache with TTL and file-mtime-based invalidation.
|
|
8
|
+
*/
|
|
9
|
+
export class MemoryCache {
|
|
10
|
+
store = new Map();
|
|
11
|
+
maxEntries;
|
|
12
|
+
hits = 0;
|
|
13
|
+
misses = 0;
|
|
14
|
+
/**
|
|
15
|
+
* Create a new MemoryCache instance.
|
|
16
|
+
* @param maxEntries - Maximum number of entries to store before evicting.
|
|
17
|
+
*/
|
|
18
|
+
constructor(maxEntries = 5000) {
|
|
19
|
+
this.maxEntries = maxEntries;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Get cached value. Returns null if expired, missing, or file changed.
|
|
23
|
+
* @param key - Cache key to look up.
|
|
24
|
+
* @param filePath - Optional file path for mtime-based invalidation.
|
|
25
|
+
* @returns The cached value or null if not found/expired.
|
|
26
|
+
*/
|
|
27
|
+
async get(key, filePath) {
|
|
28
|
+
const entry = this.store.get(key);
|
|
29
|
+
if (!entry) {
|
|
30
|
+
this.misses++;
|
|
31
|
+
return null;
|
|
32
|
+
}
|
|
33
|
+
// Check TTL
|
|
34
|
+
if (Date.now() - entry.timestamp > entry.ttl) {
|
|
35
|
+
this.store.delete(key);
|
|
36
|
+
this.misses++;
|
|
37
|
+
return null;
|
|
38
|
+
}
|
|
39
|
+
// Check file mtime if applicable
|
|
40
|
+
if (filePath && entry.mtime !== undefined) {
|
|
41
|
+
try {
|
|
42
|
+
const s = await stat(filePath);
|
|
43
|
+
if (s.mtimeMs !== entry.mtime) {
|
|
44
|
+
this.store.delete(key);
|
|
45
|
+
this.misses++;
|
|
46
|
+
return null;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
catch {
|
|
50
|
+
this.store.delete(key);
|
|
51
|
+
this.misses++;
|
|
52
|
+
return null;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
this.hits++;
|
|
56
|
+
return entry.data;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Set cached value with optional file path for mtime tracking.
|
|
60
|
+
* @param key - Cache key.
|
|
61
|
+
* @param data - Data to cache.
|
|
62
|
+
* @param ttl - Time-to-live in milliseconds.
|
|
63
|
+
* @param filePath - Optional file path for mtime tracking.
|
|
64
|
+
*/
|
|
65
|
+
async set(key, data, ttl = 60_000, filePath) {
|
|
66
|
+
// Evict oldest if at capacity
|
|
67
|
+
if (this.store.size >= this.maxEntries) {
|
|
68
|
+
const oldest = this.store.keys().next().value;
|
|
69
|
+
if (oldest)
|
|
70
|
+
this.store.delete(oldest);
|
|
71
|
+
}
|
|
72
|
+
let mtime;
|
|
73
|
+
if (filePath) {
|
|
74
|
+
try {
|
|
75
|
+
const s = await stat(filePath);
|
|
76
|
+
mtime = s.mtimeMs;
|
|
77
|
+
}
|
|
78
|
+
catch {
|
|
79
|
+
/* no mtime tracking */
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
this.store.set(key, { data, mtime, timestamp: Date.now(), ttl });
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Invalidate specific key or pattern.
|
|
86
|
+
* @param keyOrPrefix - Exact key or prefix to invalidate.
|
|
87
|
+
* @returns The number of entries invalidated.
|
|
88
|
+
*/
|
|
89
|
+
invalidate(keyOrPrefix) {
|
|
90
|
+
let count = 0;
|
|
91
|
+
for (const key of this.store.keys()) {
|
|
92
|
+
if (key === keyOrPrefix || key.startsWith(keyOrPrefix + ':')) {
|
|
93
|
+
this.store.delete(key);
|
|
94
|
+
count++;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
return count;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Invalidate all entries related to a file path.
|
|
101
|
+
* @param filePath - File path to match against cache keys.
|
|
102
|
+
* @returns The number of entries invalidated.
|
|
103
|
+
*/
|
|
104
|
+
invalidateFile(filePath) {
|
|
105
|
+
let count = 0;
|
|
106
|
+
for (const key of this.store.keys()) {
|
|
107
|
+
if (key.includes(filePath)) {
|
|
108
|
+
this.store.delete(key);
|
|
109
|
+
count++;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
return count;
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Clear all cache entries.
|
|
116
|
+
*/
|
|
117
|
+
clear() {
|
|
118
|
+
this.store.clear();
|
|
119
|
+
this.hits = 0;
|
|
120
|
+
this.misses = 0;
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Get cache statistics.
|
|
124
|
+
* @returns An object with size, hits, misses, and hitRate.
|
|
125
|
+
*/
|
|
126
|
+
stats() {
|
|
127
|
+
const total = this.hits + this.misses;
|
|
128
|
+
return {
|
|
129
|
+
size: this.store.size,
|
|
130
|
+
hits: this.hits,
|
|
131
|
+
misses: this.misses,
|
|
132
|
+
hitRate: total > 0 ? `${Math.round((this.hits / total) * 100)}%` : 'N/A',
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Cache for tool call results, keyed by tool name and parameters.
|
|
138
|
+
*/
|
|
139
|
+
export class ToolResultCache {
|
|
140
|
+
store = new Map();
|
|
141
|
+
maxEntries;
|
|
142
|
+
hits = 0;
|
|
143
|
+
misses = 0;
|
|
144
|
+
/**
|
|
145
|
+
* Create a new ToolResultCache instance.
|
|
146
|
+
* @param maxEntries - Maximum number of entries to store before evicting.
|
|
147
|
+
*/
|
|
148
|
+
constructor(maxEntries = 2000) {
|
|
149
|
+
this.maxEntries = maxEntries;
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Generate a deterministic cache key from tool name + params.
|
|
153
|
+
* @param toolName - Name of the tool.
|
|
154
|
+
* @param params - Tool parameters.
|
|
155
|
+
* @returns A deterministic cache key string.
|
|
156
|
+
*/
|
|
157
|
+
makeKey(toolName, params) {
|
|
158
|
+
// Sort keys for deterministic hashing
|
|
159
|
+
const sorted = Object.keys(params)
|
|
160
|
+
.sort()
|
|
161
|
+
.reduce((acc, k) => {
|
|
162
|
+
if (params[k] !== undefined)
|
|
163
|
+
acc[k] = params[k];
|
|
164
|
+
return acc;
|
|
165
|
+
}, {});
|
|
166
|
+
return `tool:${toolName}:${this.simpleHash(JSON.stringify(sorted))}`;
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Simple FNV-1a-inspired hash for speed.
|
|
170
|
+
* @param str - String to hash.
|
|
171
|
+
* @returns A base-36 hash string.
|
|
172
|
+
*/
|
|
173
|
+
simpleHash(str) {
|
|
174
|
+
let h = 0x811c9dc5;
|
|
175
|
+
for (let i = 0; i < str.length; i++) {
|
|
176
|
+
h ^= str.charCodeAt(i);
|
|
177
|
+
h = (h * 0x01000193) >>> 0;
|
|
178
|
+
}
|
|
179
|
+
return h.toString(36);
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Get cached tool result. Returns null on miss.
|
|
183
|
+
* @param toolName - Name of the tool.
|
|
184
|
+
* @param params - Tool parameters.
|
|
185
|
+
* @returns The cached result or null if not found/expired.
|
|
186
|
+
*/
|
|
187
|
+
get(toolName, params) {
|
|
188
|
+
const key = this.makeKey(toolName, params);
|
|
189
|
+
const entry = this.store.get(key);
|
|
190
|
+
if (!entry) {
|
|
191
|
+
this.misses++;
|
|
192
|
+
return null;
|
|
193
|
+
}
|
|
194
|
+
if (Date.now() - entry.timestamp > entry.ttl) {
|
|
195
|
+
this.store.delete(key);
|
|
196
|
+
this.misses++;
|
|
197
|
+
return null;
|
|
198
|
+
}
|
|
199
|
+
this.hits++;
|
|
200
|
+
return entry.result;
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Cache a tool result. Default TTL: 120s (tools may return stale data for file changes).
|
|
204
|
+
* @param toolName - Name of the tool.
|
|
205
|
+
* @param params - Tool parameters.
|
|
206
|
+
* @param result - The result to cache.
|
|
207
|
+
* @param ttl - Time-to-live in milliseconds.
|
|
208
|
+
*/
|
|
209
|
+
set(toolName, params, result, ttl = 120_000) {
|
|
210
|
+
if (this.store.size >= this.maxEntries) {
|
|
211
|
+
const oldest = this.store.keys().next().value;
|
|
212
|
+
if (oldest)
|
|
213
|
+
this.store.delete(oldest);
|
|
214
|
+
}
|
|
215
|
+
const key = this.makeKey(toolName, params);
|
|
216
|
+
this.store.set(key, { result, timestamp: Date.now(), ttl, toolName });
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* Invalidate all cached results for a specific tool.
|
|
220
|
+
* @param toolName - Name of the tool to invalidate.
|
|
221
|
+
* @returns The number of entries invalidated.
|
|
222
|
+
*/
|
|
223
|
+
invalidateTool(toolName) {
|
|
224
|
+
let count = 0;
|
|
225
|
+
for (const [key, entry] of this.store.entries()) {
|
|
226
|
+
if (entry.toolName === toolName) {
|
|
227
|
+
this.store.delete(key);
|
|
228
|
+
count++;
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
return count;
|
|
232
|
+
}
|
|
233
|
+
/**
|
|
234
|
+
* Invalidate all cached results that might reference a file path.
|
|
235
|
+
* @param filePath - File path to match against cache keys.
|
|
236
|
+
* @returns The number of entries invalidated.
|
|
237
|
+
*/
|
|
238
|
+
invalidateForFile(filePath) {
|
|
239
|
+
let count = 0;
|
|
240
|
+
for (const key of this.store.keys()) {
|
|
241
|
+
if (key.includes(filePath)) {
|
|
242
|
+
this.store.delete(key);
|
|
243
|
+
count++;
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
return count;
|
|
247
|
+
}
|
|
248
|
+
/**
|
|
249
|
+
* Invalidate all entries.
|
|
250
|
+
*/
|
|
251
|
+
clear() {
|
|
252
|
+
this.store.clear();
|
|
253
|
+
this.hits = 0;
|
|
254
|
+
this.misses = 0;
|
|
255
|
+
}
|
|
256
|
+
/**
|
|
257
|
+
* Stats for analytics integration.
|
|
258
|
+
* @returns An object with size, hits, misses, and hitRate.
|
|
259
|
+
*/
|
|
260
|
+
stats() {
|
|
261
|
+
const total = this.hits + this.misses;
|
|
262
|
+
return {
|
|
263
|
+
size: this.store.size,
|
|
264
|
+
hits: this.hits,
|
|
265
|
+
misses: this.misses,
|
|
266
|
+
hitRate: total > 0 ? `${Math.round((this.hits / total) * 100)}%` : 'N/A',
|
|
267
|
+
};
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
// Singleton instances
|
|
271
|
+
export const cache = new MemoryCache();
|
|
272
|
+
export const toolResultCache = new ToolResultCache();
|
|
273
|
+
//# sourceMappingURL=memory-cache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-cache.js","sourceRoot":"","sources":["../../src/cache/memory-cache.ts"],"names":[],"mappings":"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"}
|
package/dist/config.d.ts
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resolve working directory from arguments or environment.
|
|
3
|
+
* Priority: --cwd flag > CODEDEV_CWD env > process.cwd()
|
|
4
|
+
* @returns The resolved working directory path.
|
|
5
|
+
*/
|
|
6
|
+
export declare function resolveCwd(): string;
|
|
7
|
+
/**
|
|
8
|
+
* Resolve multiple root directories from arguments or environment.
|
|
9
|
+
* Multi-root: --roots=dir1,dir2 or CODEDEV_ROOTS env (comma-separated)
|
|
10
|
+
* @returns An array of resolved root directory paths.
|
|
11
|
+
*/
|
|
12
|
+
export declare function resolveRoots(): string[];
|
|
13
|
+
export declare const CWD: string;
|
|
14
|
+
export declare const ROOTS: string[];
|
|
15
|
+
export declare const IS_MULTI_ROOT: boolean;
|
|
16
|
+
/**
|
|
17
|
+
* Path security: prevent directory traversal.
|
|
18
|
+
* Ensures the resolved path is within one of the configured roots.
|
|
19
|
+
* @param userPath - The user-provided path to validate.
|
|
20
|
+
* @returns The resolved and validated path.
|
|
21
|
+
*/
|
|
22
|
+
export declare function safePath(userPath: string): string;
|
|
23
|
+
/**
|
|
24
|
+
* Resolve a path relative to the best matching root.
|
|
25
|
+
* @param userPath - The user-provided path to resolve.
|
|
26
|
+
* @returns An object containing the matched root and resolved path.
|
|
27
|
+
*/
|
|
28
|
+
export declare function resolveToRoot(userPath: string): {
|
|
29
|
+
root: string;
|
|
30
|
+
resolved: string;
|
|
31
|
+
};
|
|
32
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,wBAAgB,UAAU,IAAI,MAAM,CAKnC;AAED;;;;GAIG;AACH,wBAAgB,YAAY,IAAI,MAAM,EAAE,CASvC;AAID,eAAO,MAAM,GAAG,QAAe,CAAC;AAChC,eAAO,MAAM,KAAK,UAAiB,CAAC;AACpC,eAAO,MAAM,aAAa,SAAmB,CAAC;AAE9C;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEjD;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAMlF"}
|
package/dist/config.js
ADDED
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
/**
|
|
3
|
+
* Resolve working directory from arguments or environment.
|
|
4
|
+
* Priority: --cwd flag > CODEDEV_CWD env > process.cwd()
|
|
5
|
+
* @returns The resolved working directory path.
|
|
6
|
+
*/
|
|
7
|
+
export function resolveCwd() {
|
|
8
|
+
const cwdArg = process.argv.find((a) => a.startsWith('--cwd='));
|
|
9
|
+
if (cwdArg)
|
|
10
|
+
return path.resolve(cwdArg.split('=')[1]);
|
|
11
|
+
if (process.env.CODEDEV_CWD)
|
|
12
|
+
return path.resolve(process.env.CODEDEV_CWD);
|
|
13
|
+
return process.cwd();
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Resolve multiple root directories from arguments or environment.
|
|
17
|
+
* Multi-root: --roots=dir1,dir2 or CODEDEV_ROOTS env (comma-separated)
|
|
18
|
+
* @returns An array of resolved root directory paths.
|
|
19
|
+
*/
|
|
20
|
+
export function resolveRoots() {
|
|
21
|
+
const rootsArg = process.argv.find((a) => a.startsWith('--roots='));
|
|
22
|
+
if (rootsArg)
|
|
23
|
+
return rootsArg
|
|
24
|
+
.split('=')[1]
|
|
25
|
+
.split(',')
|
|
26
|
+
.map((d) => path.resolve(d.trim()));
|
|
27
|
+
if (process.env.CODEDEV_ROOTS)
|
|
28
|
+
return process.env.CODEDEV_ROOTS.split(',').map((d) => path.resolve(d.trim()));
|
|
29
|
+
return [resolveCwd()];
|
|
30
|
+
}
|
|
31
|
+
import { validatePath } from './utils/security.js';
|
|
32
|
+
export const CWD = resolveCwd();
|
|
33
|
+
export const ROOTS = resolveRoots();
|
|
34
|
+
export const IS_MULTI_ROOT = ROOTS.length > 1;
|
|
35
|
+
/**
|
|
36
|
+
* Path security: prevent directory traversal.
|
|
37
|
+
* Ensures the resolved path is within one of the configured roots.
|
|
38
|
+
* @param userPath - The user-provided path to validate.
|
|
39
|
+
* @returns The resolved and validated path.
|
|
40
|
+
*/
|
|
41
|
+
export function safePath(userPath) {
|
|
42
|
+
return validatePath(userPath, ROOTS, CWD);
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Resolve a path relative to the best matching root.
|
|
46
|
+
* @param userPath - The user-provided path to resolve.
|
|
47
|
+
* @returns An object containing the matched root and resolved path.
|
|
48
|
+
*/
|
|
49
|
+
export function resolveToRoot(userPath) {
|
|
50
|
+
const resolved = path.resolve(CWD, userPath);
|
|
51
|
+
for (const root of ROOTS) {
|
|
52
|
+
if (resolved.startsWith(root))
|
|
53
|
+
return { root, resolved };
|
|
54
|
+
}
|
|
55
|
+
return { root: CWD, resolved };
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=config.js.map
|