purecontext-mcp 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +207 -0
- package/dist/adapters/actix-web.d.ts +28 -0
- package/dist/adapters/actix-web.d.ts.map +1 -0
- package/dist/adapters/actix-web.js +362 -0
- package/dist/adapters/actix-web.js.map +1 -0
- package/dist/adapters/adapter-registry.d.ts +34 -0
- package/dist/adapters/adapter-registry.d.ts.map +1 -0
- package/dist/adapters/adapter-registry.js +92 -0
- package/dist/adapters/adapter-registry.js.map +1 -0
- package/dist/adapters/angular.d.ts +13 -0
- package/dist/adapters/angular.d.ts.map +1 -0
- package/dist/adapters/angular.js +348 -0
- package/dist/adapters/angular.js.map +1 -0
- package/dist/adapters/axum.d.ts +16 -0
- package/dist/adapters/axum.d.ts.map +1 -0
- package/dist/adapters/axum.js +299 -0
- package/dist/adapters/axum.js.map +1 -0
- package/dist/adapters/django-orm.d.ts +28 -0
- package/dist/adapters/django-orm.d.ts.map +1 -0
- package/dist/adapters/django-orm.js +464 -0
- package/dist/adapters/django-orm.js.map +1 -0
- package/dist/adapters/django.d.ts +16 -0
- package/dist/adapters/django.d.ts.map +1 -0
- package/dist/adapters/django.js +257 -0
- package/dist/adapters/django.js.map +1 -0
- package/dist/adapters/echo.d.ts +15 -0
- package/dist/adapters/echo.d.ts.map +1 -0
- package/dist/adapters/echo.js +142 -0
- package/dist/adapters/echo.js.map +1 -0
- package/dist/adapters/express.d.ts +15 -0
- package/dist/adapters/express.d.ts.map +1 -0
- package/dist/adapters/express.js +126 -0
- package/dist/adapters/express.js.map +1 -0
- package/dist/adapters/fastapi.d.ts +16 -0
- package/dist/adapters/fastapi.d.ts.map +1 -0
- package/dist/adapters/fastapi.js +113 -0
- package/dist/adapters/fastapi.js.map +1 -0
- package/dist/adapters/fastify.d.ts +14 -0
- package/dist/adapters/fastify.d.ts.map +1 -0
- package/dist/adapters/fastify.js +124 -0
- package/dist/adapters/fastify.js.map +1 -0
- package/dist/adapters/fiber.d.ts +15 -0
- package/dist/adapters/fiber.d.ts.map +1 -0
- package/dist/adapters/fiber.js +147 -0
- package/dist/adapters/fiber.js.map +1 -0
- package/dist/adapters/flask.d.ts +18 -0
- package/dist/adapters/flask.d.ts.map +1 -0
- package/dist/adapters/flask.js +175 -0
- package/dist/adapters/flask.js.map +1 -0
- package/dist/adapters/flutter.d.ts +19 -0
- package/dist/adapters/flutter.d.ts.map +1 -0
- package/dist/adapters/flutter.js +251 -0
- package/dist/adapters/flutter.js.map +1 -0
- package/dist/adapters/gin.d.ts +16 -0
- package/dist/adapters/gin.d.ts.map +1 -0
- package/dist/adapters/gin.js +159 -0
- package/dist/adapters/gin.js.map +1 -0
- package/dist/adapters/hibernate.d.ts +24 -0
- package/dist/adapters/hibernate.d.ts.map +1 -0
- package/dist/adapters/hibernate.js +448 -0
- package/dist/adapters/hibernate.js.map +1 -0
- package/dist/adapters/ktor.d.ts +18 -0
- package/dist/adapters/ktor.d.ts.map +1 -0
- package/dist/adapters/ktor.js +219 -0
- package/dist/adapters/ktor.js.map +1 -0
- package/dist/adapters/laravel.d.ts +19 -0
- package/dist/adapters/laravel.d.ts.map +1 -0
- package/dist/adapters/laravel.js +370 -0
- package/dist/adapters/laravel.js.map +1 -0
- package/dist/adapters/micronaut.d.ts +21 -0
- package/dist/adapters/micronaut.d.ts.map +1 -0
- package/dist/adapters/micronaut.js +435 -0
- package/dist/adapters/micronaut.js.map +1 -0
- package/dist/adapters/nestjs.d.ts +12 -0
- package/dist/adapters/nestjs.d.ts.map +1 -0
- package/dist/adapters/nestjs.js +401 -0
- package/dist/adapters/nestjs.js.map +1 -0
- package/dist/adapters/nextjs.d.ts +49 -0
- package/dist/adapters/nextjs.d.ts.map +1 -0
- package/dist/adapters/nextjs.js +412 -0
- package/dist/adapters/nextjs.js.map +1 -0
- package/dist/adapters/nuxt.d.ts +44 -0
- package/dist/adapters/nuxt.d.ts.map +1 -0
- package/dist/adapters/nuxt.js +243 -0
- package/dist/adapters/nuxt.js.map +1 -0
- package/dist/adapters/quarkus.d.ts +21 -0
- package/dist/adapters/quarkus.d.ts.map +1 -0
- package/dist/adapters/quarkus.js +395 -0
- package/dist/adapters/quarkus.js.map +1 -0
- package/dist/adapters/rails.d.ts +18 -0
- package/dist/adapters/rails.d.ts.map +1 -0
- package/dist/adapters/rails.js +363 -0
- package/dist/adapters/rails.js.map +1 -0
- package/dist/adapters/react.d.ts +18 -0
- package/dist/adapters/react.d.ts.map +1 -0
- package/dist/adapters/react.js +95 -0
- package/dist/adapters/react.js.map +1 -0
- package/dist/adapters/rocket.d.ts +19 -0
- package/dist/adapters/rocket.d.ts.map +1 -0
- package/dist/adapters/rocket.js +271 -0
- package/dist/adapters/rocket.js.map +1 -0
- package/dist/adapters/sinatra.d.ts +16 -0
- package/dist/adapters/sinatra.d.ts.map +1 -0
- package/dist/adapters/sinatra.js +114 -0
- package/dist/adapters/sinatra.js.map +1 -0
- package/dist/adapters/spring-boot.d.ts +24 -0
- package/dist/adapters/spring-boot.d.ts.map +1 -0
- package/dist/adapters/spring-boot.js +399 -0
- package/dist/adapters/spring-boot.js.map +1 -0
- package/dist/adapters/spring-kotlin.d.ts +19 -0
- package/dist/adapters/spring-kotlin.d.ts.map +1 -0
- package/dist/adapters/spring-kotlin.js +297 -0
- package/dist/adapters/spring-kotlin.js.map +1 -0
- package/dist/adapters/sqlalchemy.d.ts +28 -0
- package/dist/adapters/sqlalchemy.d.ts.map +1 -0
- package/dist/adapters/sqlalchemy.js +435 -0
- package/dist/adapters/sqlalchemy.js.map +1 -0
- package/dist/adapters/symfony.d.ts +16 -0
- package/dist/adapters/symfony.d.ts.map +1 -0
- package/dist/adapters/symfony.js +242 -0
- package/dist/adapters/symfony.js.map +1 -0
- package/dist/adapters/vapor.d.ts +21 -0
- package/dist/adapters/vapor.d.ts.map +1 -0
- package/dist/adapters/vapor.js +269 -0
- package/dist/adapters/vapor.js.map +1 -0
- package/dist/adapters/vue-preprocessor.d.ts +26 -0
- package/dist/adapters/vue-preprocessor.d.ts.map +1 -0
- package/dist/adapters/vue-preprocessor.js +82 -0
- package/dist/adapters/vue-preprocessor.js.map +1 -0
- package/dist/adapters/vue.d.ts +13 -0
- package/dist/adapters/vue.d.ts.map +1 -0
- package/dist/adapters/vue.js +134 -0
- package/dist/adapters/vue.js.map +1 -0
- package/dist/config/cli.d.ts +26 -0
- package/dist/config/cli.d.ts.map +1 -0
- package/dist/config/cli.js +291 -0
- package/dist/config/cli.js.map +1 -0
- package/dist/config/config-loader.d.ts +26 -0
- package/dist/config/config-loader.d.ts.map +1 -0
- package/dist/config/config-loader.js +168 -0
- package/dist/config/config-loader.js.map +1 -0
- package/dist/config/config-schema.d.ts +228 -0
- package/dist/config/config-schema.d.ts.map +1 -0
- package/dist/config/config-schema.js +400 -0
- package/dist/config/config-schema.js.map +1 -0
- package/dist/config/keys-cli.d.ts +37 -0
- package/dist/config/keys-cli.d.ts.map +1 -0
- package/dist/config/keys-cli.js +179 -0
- package/dist/config/keys-cli.js.map +1 -0
- package/dist/config/workspaces-cli.d.ts +2 -0
- package/dist/config/workspaces-cli.d.ts.map +1 -0
- package/dist/config/workspaces-cli.js +84 -0
- package/dist/config/workspaces-cli.js.map +1 -0
- package/dist/core/db/api-keys.d.ts +95 -0
- package/dist/core/db/api-keys.d.ts.map +1 -0
- package/dist/core/db/api-keys.js +293 -0
- package/dist/core/db/api-keys.js.map +1 -0
- package/dist/core/db/dep-store.d.ts +18 -0
- package/dist/core/db/dep-store.d.ts.map +1 -0
- package/dist/core/db/dep-store.js +155 -0
- package/dist/core/db/dep-store.js.map +1 -0
- package/dist/core/db/embedding-store.d.ts +40 -0
- package/dist/core/db/embedding-store.d.ts.map +1 -0
- package/dist/core/db/embedding-store.js +120 -0
- package/dist/core/db/embedding-store.js.map +1 -0
- package/dist/core/db/file-store.d.ts +27 -0
- package/dist/core/db/file-store.d.ts.map +1 -0
- package/dist/core/db/file-store.js +101 -0
- package/dist/core/db/file-store.js.map +1 -0
- package/dist/core/db/request-log.d.ts +40 -0
- package/dist/core/db/request-log.d.ts.map +1 -0
- package/dist/core/db/request-log.js +90 -0
- package/dist/core/db/request-log.js.map +1 -0
- package/dist/core/db/savings-store.d.ts +9 -0
- package/dist/core/db/savings-store.d.ts.map +1 -0
- package/dist/core/db/savings-store.js +64 -0
- package/dist/core/db/savings-store.js.map +1 -0
- package/dist/core/db/schema.d.ts +14 -0
- package/dist/core/db/schema.d.ts.map +1 -0
- package/dist/core/db/schema.js +235 -0
- package/dist/core/db/schema.js.map +1 -0
- package/dist/core/db/symbol-store.d.ts +64 -0
- package/dist/core/db/symbol-store.d.ts.map +1 -0
- package/dist/core/db/symbol-store.js +243 -0
- package/dist/core/db/symbol-store.js.map +1 -0
- package/dist/core/db/tenants.d.ts +91 -0
- package/dist/core/db/tenants.d.ts.map +1 -0
- package/dist/core/db/tenants.js +219 -0
- package/dist/core/db/tenants.js.map +1 -0
- package/dist/core/errors.d.ts +72 -0
- package/dist/core/errors.d.ts.map +1 -0
- package/dist/core/errors.js +140 -0
- package/dist/core/errors.js.map +1 -0
- package/dist/core/file-discovery.d.ts +17 -0
- package/dist/core/file-discovery.d.ts.map +1 -0
- package/dist/core/file-discovery.js +136 -0
- package/dist/core/file-discovery.js.map +1 -0
- package/dist/core/file-processor.d.ts +21 -0
- package/dist/core/file-processor.d.ts.map +1 -0
- package/dist/core/file-processor.js +110 -0
- package/dist/core/file-processor.js.map +1 -0
- package/dist/core/hash-cache.d.ts +18 -0
- package/dist/core/hash-cache.d.ts.map +1 -0
- package/dist/core/hash-cache.js +35 -0
- package/dist/core/hash-cache.js.map +1 -0
- package/dist/core/index-manager.d.ts +18 -0
- package/dist/core/index-manager.d.ts.map +1 -0
- package/dist/core/index-manager.js +461 -0
- package/dist/core/index-manager.js.map +1 -0
- package/dist/core/indexing-worker.d.ts +60 -0
- package/dist/core/indexing-worker.d.ts.map +1 -0
- package/dist/core/indexing-worker.js +128 -0
- package/dist/core/indexing-worker.js.map +1 -0
- package/dist/core/logger.d.ts +10 -0
- package/dist/core/logger.d.ts.map +1 -0
- package/dist/core/logger.js +40 -0
- package/dist/core/logger.js.map +1 -0
- package/dist/core/parse-dispatcher.d.ts +18 -0
- package/dist/core/parse-dispatcher.d.ts.map +1 -0
- package/dist/core/parse-dispatcher.js +74 -0
- package/dist/core/parse-dispatcher.js.map +1 -0
- package/dist/core/search/query-preprocessor.d.ts +22 -0
- package/dist/core/search/query-preprocessor.d.ts.map +1 -0
- package/dist/core/search/query-preprocessor.js +77 -0
- package/dist/core/search/query-preprocessor.js.map +1 -0
- package/dist/core/search/relevance-ranker.d.ts +34 -0
- package/dist/core/search/relevance-ranker.d.ts.map +1 -0
- package/dist/core/search/relevance-ranker.js +132 -0
- package/dist/core/search/relevance-ranker.js.map +1 -0
- package/dist/core/security.d.ts +40 -0
- package/dist/core/security.d.ts.map +1 -0
- package/dist/core/security.js +133 -0
- package/dist/core/security.js.map +1 -0
- package/dist/core/telemetry.d.ts +19 -0
- package/dist/core/telemetry.d.ts.map +1 -0
- package/dist/core/telemetry.js +101 -0
- package/dist/core/telemetry.js.map +1 -0
- package/dist/core/tenant-context.d.ts +22 -0
- package/dist/core/tenant-context.d.ts.map +1 -0
- package/dist/core/tenant-context.js +16 -0
- package/dist/core/tenant-context.js.map +1 -0
- package/dist/core/token-tracker.d.ts +39 -0
- package/dist/core/token-tracker.d.ts.map +1 -0
- package/dist/core/token-tracker.js +153 -0
- package/dist/core/token-tracker.js.map +1 -0
- package/dist/core/types.d.ts +145 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +2 -0
- package/dist/core/types.js.map +1 -0
- package/dist/core/watcher/file-watcher.d.ts +18 -0
- package/dist/core/watcher/file-watcher.d.ts.map +1 -0
- package/dist/core/watcher/file-watcher.js +123 -0
- package/dist/core/watcher/file-watcher.js.map +1 -0
- package/dist/core/worker-pool.d.ts +24 -0
- package/dist/core/worker-pool.d.ts.map +1 -0
- package/dist/core/worker-pool.js +92 -0
- package/dist/core/worker-pool.js.map +1 -0
- package/dist/graph/graph-builder.d.ts +16 -0
- package/dist/graph/graph-builder.d.ts.map +1 -0
- package/dist/graph/graph-builder.js +51 -0
- package/dist/graph/graph-builder.js.map +1 -0
- package/dist/graph/graph-traversal.d.ts +57 -0
- package/dist/graph/graph-traversal.d.ts.map +1 -0
- package/dist/graph/graph-traversal.js +144 -0
- package/dist/graph/graph-traversal.js.map +1 -0
- package/dist/graph/path-resolver.d.ts +13 -0
- package/dist/graph/path-resolver.d.ts.map +1 -0
- package/dist/graph/path-resolver.js +161 -0
- package/dist/graph/path-resolver.js.map +1 -0
- package/dist/handlers/c.d.ts +3 -0
- package/dist/handlers/c.d.ts.map +1 -0
- package/dist/handlers/c.js +473 -0
- package/dist/handlers/c.js.map +1 -0
- package/dist/handlers/cpp.d.ts +3 -0
- package/dist/handlers/cpp.d.ts.map +1 -0
- package/dist/handlers/cpp.js +682 -0
- package/dist/handlers/cpp.js.map +1 -0
- package/dist/handlers/csharp.d.ts +3 -0
- package/dist/handlers/csharp.d.ts.map +1 -0
- package/dist/handlers/csharp.js +369 -0
- package/dist/handlers/csharp.js.map +1 -0
- package/dist/handlers/dart.d.ts +3 -0
- package/dist/handlers/dart.d.ts.map +1 -0
- package/dist/handlers/dart.js +596 -0
- package/dist/handlers/dart.js.map +1 -0
- package/dist/handlers/elixir.d.ts +8 -0
- package/dist/handlers/elixir.d.ts.map +1 -0
- package/dist/handlers/elixir.js +412 -0
- package/dist/handlers/elixir.js.map +1 -0
- package/dist/handlers/go.d.ts +3 -0
- package/dist/handlers/go.d.ts.map +1 -0
- package/dist/handlers/go.js +262 -0
- package/dist/handlers/go.js.map +1 -0
- package/dist/handlers/handler-registry.d.ts +20 -0
- package/dist/handlers/handler-registry.d.ts.map +1 -0
- package/dist/handlers/handler-registry.js +69 -0
- package/dist/handlers/handler-registry.js.map +1 -0
- package/dist/handlers/haskell.d.ts +17 -0
- package/dist/handlers/haskell.d.ts.map +1 -0
- package/dist/handlers/haskell.js +356 -0
- package/dist/handlers/haskell.js.map +1 -0
- package/dist/handlers/java.d.ts +3 -0
- package/dist/handlers/java.d.ts.map +1 -0
- package/dist/handlers/java.js +350 -0
- package/dist/handlers/java.js.map +1 -0
- package/dist/handlers/javascript.d.ts +3 -0
- package/dist/handlers/javascript.d.ts.map +1 -0
- package/dist/handlers/javascript.js +232 -0
- package/dist/handlers/javascript.js.map +1 -0
- package/dist/handlers/kotlin.d.ts +3 -0
- package/dist/handlers/kotlin.d.ts.map +1 -0
- package/dist/handlers/kotlin.js +317 -0
- package/dist/handlers/kotlin.js.map +1 -0
- package/dist/handlers/lua.d.ts +3 -0
- package/dist/handlers/lua.d.ts.map +1 -0
- package/dist/handlers/lua.js +328 -0
- package/dist/handlers/lua.js.map +1 -0
- package/dist/handlers/php.d.ts +3 -0
- package/dist/handlers/php.d.ts.map +1 -0
- package/dist/handlers/php.js +343 -0
- package/dist/handlers/php.js.map +1 -0
- package/dist/handlers/python.d.ts +3 -0
- package/dist/handlers/python.d.ts.map +1 -0
- package/dist/handlers/python.js +343 -0
- package/dist/handlers/python.js.map +1 -0
- package/dist/handlers/r.d.ts +9 -0
- package/dist/handlers/r.d.ts.map +1 -0
- package/dist/handlers/r.js +452 -0
- package/dist/handlers/r.js.map +1 -0
- package/dist/handlers/ruby.d.ts +8 -0
- package/dist/handlers/ruby.d.ts.map +1 -0
- package/dist/handlers/ruby.js +271 -0
- package/dist/handlers/ruby.js.map +1 -0
- package/dist/handlers/rust.d.ts +3 -0
- package/dist/handlers/rust.d.ts.map +1 -0
- package/dist/handlers/rust.js +420 -0
- package/dist/handlers/rust.js.map +1 -0
- package/dist/handlers/scala.d.ts +9 -0
- package/dist/handlers/scala.d.ts.map +1 -0
- package/dist/handlers/scala.js +480 -0
- package/dist/handlers/scala.js.map +1 -0
- package/dist/handlers/swift.d.ts +3 -0
- package/dist/handlers/swift.d.ts.map +1 -0
- package/dist/handlers/swift.js +553 -0
- package/dist/handlers/swift.js.map +1 -0
- package/dist/handlers/typescript.d.ts +4 -0
- package/dist/handlers/typescript.d.ts.map +1 -0
- package/dist/handlers/typescript.js +325 -0
- package/dist/handlers/typescript.js.map +1 -0
- package/dist/index.d.ts +44 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +266 -0
- package/dist/index.js.map +1 -0
- package/dist/semantic/embedding-provider.d.ts +66 -0
- package/dist/semantic/embedding-provider.d.ts.map +1 -0
- package/dist/semantic/embedding-provider.js +176 -0
- package/dist/semantic/embedding-provider.js.map +1 -0
- package/dist/semantic/hnsw-index.d.ts +96 -0
- package/dist/semantic/hnsw-index.d.ts.map +1 -0
- package/dist/semantic/hnsw-index.js +364 -0
- package/dist/semantic/hnsw-index.js.map +1 -0
- package/dist/semantic/hybrid-search.d.ts +46 -0
- package/dist/semantic/hybrid-search.d.ts.map +1 -0
- package/dist/semantic/hybrid-search.js +164 -0
- package/dist/semantic/hybrid-search.js.map +1 -0
- package/dist/semantic/query-expansion.d.ts +25 -0
- package/dist/semantic/query-expansion.d.ts.map +1 -0
- package/dist/semantic/query-expansion.js +150 -0
- package/dist/semantic/query-expansion.js.map +1 -0
- package/dist/semantic/semantic-indexer.d.ts +64 -0
- package/dist/semantic/semantic-indexer.d.ts.map +1 -0
- package/dist/semantic/semantic-indexer.js +162 -0
- package/dist/semantic/semantic-indexer.js.map +1 -0
- package/dist/semantic/text-preparation.d.ts +23 -0
- package/dist/semantic/text-preparation.d.ts.map +1 -0
- package/dist/semantic/text-preparation.js +56 -0
- package/dist/semantic/text-preparation.js.map +1 -0
- package/dist/semantic/vector-store.d.ts +81 -0
- package/dist/semantic/vector-store.d.ts.map +1 -0
- package/dist/semantic/vector-store.js +157 -0
- package/dist/semantic/vector-store.js.map +1 -0
- package/dist/server/admin-api.d.ts +88 -0
- package/dist/server/admin-api.d.ts.map +1 -0
- package/dist/server/admin-api.js +661 -0
- package/dist/server/admin-api.js.map +1 -0
- package/dist/server/auth/api-key.d.ts +105 -0
- package/dist/server/auth/api-key.d.ts.map +1 -0
- package/dist/server/auth/api-key.js +276 -0
- package/dist/server/auth/api-key.js.map +1 -0
- package/dist/server/http-server.d.ts +100 -0
- package/dist/server/http-server.d.ts.map +1 -0
- package/dist/server/http-server.js +823 -0
- package/dist/server/http-server.js.map +1 -0
- package/dist/server/mcp-server.d.ts +23 -0
- package/dist/server/mcp-server.d.ts.map +1 -0
- package/dist/server/mcp-server.js +214 -0
- package/dist/server/mcp-server.js.map +1 -0
- package/dist/server/rate-limit-store.d.ts +25 -0
- package/dist/server/rate-limit-store.d.ts.map +1 -0
- package/dist/server/rate-limit-store.js +46 -0
- package/dist/server/rate-limit-store.js.map +1 -0
- package/dist/server/rate-limiter.d.ts +59 -0
- package/dist/server/rate-limiter.d.ts.map +1 -0
- package/dist/server/rate-limiter.js +85 -0
- package/dist/server/rate-limiter.js.map +1 -0
- package/dist/server/tools/_meta.d.ts +24 -0
- package/dist/server/tools/_meta.d.ts.map +1 -0
- package/dist/server/tools/_meta.js +35 -0
- package/dist/server/tools/_meta.js.map +1 -0
- package/dist/server/tools/find-dead-code.d.ts +11 -0
- package/dist/server/tools/find-dead-code.d.ts.map +1 -0
- package/dist/server/tools/find-dead-code.js +45 -0
- package/dist/server/tools/find-dead-code.js.map +1 -0
- package/dist/server/tools/find-importers.d.ts +13 -0
- package/dist/server/tools/find-importers.d.ts.map +1 -0
- package/dist/server/tools/find-importers.js +46 -0
- package/dist/server/tools/find-importers.js.map +1 -0
- package/dist/server/tools/get-blast-radius.d.ts +15 -0
- package/dist/server/tools/get-blast-radius.d.ts.map +1 -0
- package/dist/server/tools/get-blast-radius.js +51 -0
- package/dist/server/tools/get-blast-radius.js.map +1 -0
- package/dist/server/tools/get-context-bundle.d.ts +15 -0
- package/dist/server/tools/get-context-bundle.d.ts.map +1 -0
- package/dist/server/tools/get-context-bundle.js +53 -0
- package/dist/server/tools/get-context-bundle.js.map +1 -0
- package/dist/server/tools/get-file-outline.d.ts +13 -0
- package/dist/server/tools/get-file-outline.d.ts.map +1 -0
- package/dist/server/tools/get-file-outline.js +42 -0
- package/dist/server/tools/get-file-outline.js.map +1 -0
- package/dist/server/tools/get-file-tree.d.ts +11 -0
- package/dist/server/tools/get-file-tree.d.ts.map +1 -0
- package/dist/server/tools/get-file-tree.js +63 -0
- package/dist/server/tools/get-file-tree.js.map +1 -0
- package/dist/server/tools/get-graph.d.ts +46 -0
- package/dist/server/tools/get-graph.d.ts.map +1 -0
- package/dist/server/tools/get-graph.js +168 -0
- package/dist/server/tools/get-graph.js.map +1 -0
- package/dist/server/tools/get-layer-violations.d.ts +37 -0
- package/dist/server/tools/get-layer-violations.d.ts.map +1 -0
- package/dist/server/tools/get-layer-violations.js +138 -0
- package/dist/server/tools/get-layer-violations.js.map +1 -0
- package/dist/server/tools/get-repo-outline.d.ts +13 -0
- package/dist/server/tools/get-repo-outline.d.ts.map +1 -0
- package/dist/server/tools/get-repo-outline.js +72 -0
- package/dist/server/tools/get-repo-outline.js.map +1 -0
- package/dist/server/tools/get-savings-stats.d.ts +11 -0
- package/dist/server/tools/get-savings-stats.d.ts.map +1 -0
- package/dist/server/tools/get-savings-stats.js +56 -0
- package/dist/server/tools/get-savings-stats.js.map +1 -0
- package/dist/server/tools/get-symbol-source.d.ts +13 -0
- package/dist/server/tools/get-symbol-source.d.ts.map +1 -0
- package/dist/server/tools/get-symbol-source.js +93 -0
- package/dist/server/tools/get-symbol-source.js.map +1 -0
- package/dist/server/tools/index-folder.d.ts +15 -0
- package/dist/server/tools/index-folder.d.ts.map +1 -0
- package/dist/server/tools/index-folder.js +45 -0
- package/dist/server/tools/index-folder.js.map +1 -0
- package/dist/server/tools/index-repo.d.ts +26 -0
- package/dist/server/tools/index-repo.d.ts.map +1 -0
- package/dist/server/tools/index-repo.js +164 -0
- package/dist/server/tools/index-repo.js.map +1 -0
- package/dist/server/tools/list-repos.d.ts +11 -0
- package/dist/server/tools/list-repos.d.ts.map +1 -0
- package/dist/server/tools/list-repos.js +60 -0
- package/dist/server/tools/list-repos.js.map +1 -0
- package/dist/server/tools/resolve-repo.d.ts +11 -0
- package/dist/server/tools/resolve-repo.d.ts.map +1 -0
- package/dist/server/tools/resolve-repo.js +44 -0
- package/dist/server/tools/resolve-repo.js.map +1 -0
- package/dist/server/tools/search-semantic.d.ts +56 -0
- package/dist/server/tools/search-semantic.d.ts.map +1 -0
- package/dist/server/tools/search-semantic.js +187 -0
- package/dist/server/tools/search-semantic.js.map +1 -0
- package/dist/server/tools/search-symbols.d.ts +43 -0
- package/dist/server/tools/search-symbols.d.ts.map +1 -0
- package/dist/server/tools/search-symbols.js +197 -0
- package/dist/server/tools/search-symbols.js.map +1 -0
- package/dist/server/tools/search-text.d.ts +21 -0
- package/dist/server/tools/search-text.d.ts.map +1 -0
- package/dist/server/tools/search-text.js +131 -0
- package/dist/server/tools/search-text.js.map +1 -0
- package/dist/server/transport.d.ts +59 -0
- package/dist/server/transport.d.ts.map +1 -0
- package/dist/server/transport.js +92 -0
- package/dist/server/transport.js.map +1 -0
- package/dist/summarizer/ai-summarizer.d.ts +71 -0
- package/dist/summarizer/ai-summarizer.d.ts.map +1 -0
- package/dist/summarizer/ai-summarizer.js +228 -0
- package/dist/summarizer/ai-summarizer.js.map +1 -0
- package/dist/summarizer/docstring-extractor.d.ts +9 -0
- package/dist/summarizer/docstring-extractor.d.ts.map +1 -0
- package/dist/summarizer/docstring-extractor.js +89 -0
- package/dist/summarizer/docstring-extractor.js.map +1 -0
- package/dist/summarizer/embeddings.d.ts +29 -0
- package/dist/summarizer/embeddings.d.ts.map +1 -0
- package/dist/summarizer/embeddings.js +133 -0
- package/dist/summarizer/embeddings.js.map +1 -0
- package/dist/summarizer/summarizer.d.ts +22 -0
- package/dist/summarizer/summarizer.d.ts.map +1 -0
- package/dist/summarizer/summarizer.js +86 -0
- package/dist/summarizer/summarizer.js.map +1 -0
- package/dist/ui/assets/BlastRadius-ccQ3ktbv.js +1 -0
- package/dist/ui/assets/DependencyGraph-BZV40eAE.css +1 -0
- package/dist/ui/assets/DependencyGraph-Ca84q89b.js +27 -0
- package/dist/ui/assets/NotFound-C1wVKP-6.js +1 -0
- package/dist/ui/assets/RepoDetail-B_8qid2Y.js +1 -0
- package/dist/ui/assets/RepoList-BuPu-ODM.js +1 -0
- package/dist/ui/assets/Search-BzZ9Og8E.js +1 -0
- package/dist/ui/assets/SymbolView-FdpKlzql.js +14 -0
- package/dist/ui/assets/client-BANW_tIp.js +1 -0
- package/dist/ui/assets/index-CnwwQi_S.js +61 -0
- package/dist/ui/assets/index-SS2IXr8I.css +1 -0
- package/dist/ui/assets/repoStore-SbGR6YI6.js +1 -0
- package/dist/ui/assets/useSearch-DHyve22h.js +1 -0
- package/dist/ui/index.html +13 -0
- package/dist/version.d.ts +2 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +2 -0
- package/dist/version.js.map +1 -0
- package/grammars/tree-sitter-c.wasm +0 -0
- package/grammars/tree-sitter-cpp.wasm +0 -0
- package/grammars/tree-sitter-csharp.wasm +0 -0
- package/grammars/tree-sitter-dart.wasm +0 -0
- package/grammars/tree-sitter-elixir.wasm +0 -0
- package/grammars/tree-sitter-go.wasm +0 -0
- package/grammars/tree-sitter-haskell.wasm +0 -0
- package/grammars/tree-sitter-java.wasm +0 -0
- package/grammars/tree-sitter-javascript.wasm +0 -0
- package/grammars/tree-sitter-kotlin.wasm +0 -0
- package/grammars/tree-sitter-lua.wasm +0 -0
- package/grammars/tree-sitter-php.wasm +0 -0
- package/grammars/tree-sitter-python.wasm +0 -0
- package/grammars/tree-sitter-r.wasm +0 -0
- package/grammars/tree-sitter-ruby.wasm +0 -0
- package/grammars/tree-sitter-rust.wasm +0 -0
- package/grammars/tree-sitter-scala.wasm +0 -0
- package/grammars/tree-sitter-swift.wasm +0 -0
- package/grammars/tree-sitter-tsx.wasm +0 -0
- package/grammars/tree-sitter-typescript.wasm +0 -0
- package/package.json +104 -0
- package/scripts/check-sqlite.js +41 -0
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
import type { Database } from 'better-sqlite3';
|
|
2
|
+
import type Parser from 'web-tree-sitter';
|
|
3
|
+
export type Tree = Parser.Tree;
|
|
4
|
+
export type SyntaxNode = Parser.SyntaxNode;
|
|
5
|
+
export type SymbolKind = 'function' | 'class' | 'method' | 'const' | 'type' | 'interface' | 'enum' | 'component' | 'composable' | 'hook' | 'route' | 'decorator' | 'middleware' | 'model' | 'view' | 'struct' | 'macro' | 'signal' | 'namespace' | 'widget';
|
|
6
|
+
export interface SymbolRecord {
|
|
7
|
+
/** Deterministic hash: SHA-256(filePath:name:kind).slice(0, 16) */
|
|
8
|
+
id: string;
|
|
9
|
+
name: string;
|
|
10
|
+
kind: SymbolKind;
|
|
11
|
+
/** Relative to repo root */
|
|
12
|
+
filePath: string;
|
|
13
|
+
startByte: number;
|
|
14
|
+
endByte: number;
|
|
15
|
+
/** One-line declaration signature, max 120 chars */
|
|
16
|
+
signature: string;
|
|
17
|
+
/** One-line description (from docstring, framework meta, or signature fallback) */
|
|
18
|
+
summary: string;
|
|
19
|
+
frameworkMeta?: Record<string, unknown>;
|
|
20
|
+
}
|
|
21
|
+
export interface ImportRecord {
|
|
22
|
+
sourceFile: string;
|
|
23
|
+
/** Raw import path as written in source */
|
|
24
|
+
specifier: string;
|
|
25
|
+
/** Resolved path relative to repo root, null for external packages */
|
|
26
|
+
resolvedPath: string | null;
|
|
27
|
+
importedNames: string[];
|
|
28
|
+
isTypeOnly: boolean;
|
|
29
|
+
}
|
|
30
|
+
export interface DepEdge {
|
|
31
|
+
repoId: string;
|
|
32
|
+
sourceFile: string;
|
|
33
|
+
sourceSymbolId: string | null;
|
|
34
|
+
targetFile: string;
|
|
35
|
+
targetSymbolId: string | null;
|
|
36
|
+
/** 'import' | 'dynamic-import' | 're-export' */
|
|
37
|
+
edgeType: string;
|
|
38
|
+
specifier: string;
|
|
39
|
+
}
|
|
40
|
+
export interface RepoMetadata {
|
|
41
|
+
id: string;
|
|
42
|
+
rootPath: string;
|
|
43
|
+
symbolCount: number;
|
|
44
|
+
fileCount: number;
|
|
45
|
+
/** JSON-serialized string[] */
|
|
46
|
+
languages: string[];
|
|
47
|
+
indexedAt: number;
|
|
48
|
+
schemaVersion: number;
|
|
49
|
+
/** Path to the cloned repo directory, null for locally-indexed repos. */
|
|
50
|
+
clonePath: string | null;
|
|
51
|
+
/** Owning tenant. Defaults to 'local' for single-tenant deployments. */
|
|
52
|
+
tenantId?: string;
|
|
53
|
+
}
|
|
54
|
+
export interface AISummarizerService {
|
|
55
|
+
summarizeBatch(symbols: SymbolRecord[]): Promise<Map<string, string>>;
|
|
56
|
+
}
|
|
57
|
+
export interface IndexOptions {
|
|
58
|
+
fileLimit?: number;
|
|
59
|
+
excludePatterns?: string[];
|
|
60
|
+
watch?: boolean;
|
|
61
|
+
watchDebounceMs?: number;
|
|
62
|
+
/** Active framework adapters to apply during indexing. */
|
|
63
|
+
adapters?: FrameworkAdapter[];
|
|
64
|
+
/**
|
|
65
|
+
* Optional AI summarizer for Stage 3 summaries. When provided, symbols
|
|
66
|
+
* whose summaries are still the signature fallback after Stage 1/2 are
|
|
67
|
+
* sent to the AI for a human-readable one-line description.
|
|
68
|
+
*/
|
|
69
|
+
aiSummarizer?: AISummarizerService;
|
|
70
|
+
/**
|
|
71
|
+
* Path to the cloned repo directory. Set when indexing a remote repo
|
|
72
|
+
* cloned by index_repo. Stored in the DB so deleteIndex can clean it up.
|
|
73
|
+
*/
|
|
74
|
+
clonePath?: string;
|
|
75
|
+
/**
|
|
76
|
+
* Optional semantic indexer for Phase 11 HNSW embedding.
|
|
77
|
+
* When provided, triggers semantic indexing after symbol extraction
|
|
78
|
+
* if the repo meets the configured threshold.
|
|
79
|
+
*/
|
|
80
|
+
semanticIndexer?: import('../semantic/semantic-indexer.js').SemanticIndexer;
|
|
81
|
+
/**
|
|
82
|
+
* Number of worker threads for parallel file parsing.
|
|
83
|
+
* Default: min(cpuCount, 8). Set to 1 to disable (sequential mode).
|
|
84
|
+
*/
|
|
85
|
+
concurrency?: number;
|
|
86
|
+
/** Tenant/workspace ID to associate with this index operation. Defaults to 'local'. */
|
|
87
|
+
tenantId?: string;
|
|
88
|
+
/** Workspace plan — used to enforce free-tier limits. */
|
|
89
|
+
workspacePlan?: 'free' | 'team' | 'enterprise';
|
|
90
|
+
/** Current repo count for this workspace — used to enforce free-tier repo limit. */
|
|
91
|
+
workspaceRepoCount?: number;
|
|
92
|
+
}
|
|
93
|
+
export interface IndexResult {
|
|
94
|
+
repoId: string;
|
|
95
|
+
filesIndexed: number;
|
|
96
|
+
filesSkipped: number;
|
|
97
|
+
symbolsFound: number;
|
|
98
|
+
totalSymbolsInDb: number;
|
|
99
|
+
totalFilesInDb: number;
|
|
100
|
+
edgesFound: number;
|
|
101
|
+
durationMs: number;
|
|
102
|
+
errors: Array<{
|
|
103
|
+
file: string;
|
|
104
|
+
message: string;
|
|
105
|
+
}>;
|
|
106
|
+
/** Non-fatal issues that affect completeness (limit reached, parse errors, etc.). */
|
|
107
|
+
warnings: string[];
|
|
108
|
+
}
|
|
109
|
+
export interface DiscoveredFile {
|
|
110
|
+
path: string;
|
|
111
|
+
size: number;
|
|
112
|
+
priority: number;
|
|
113
|
+
}
|
|
114
|
+
export interface LanguageHandler {
|
|
115
|
+
extensions(): string[];
|
|
116
|
+
/** Absolute path to the .wasm grammar file. filePath hint allows per-extension grammar selection (e.g. .tsx vs .ts). */
|
|
117
|
+
grammarPath(filePath?: string): string;
|
|
118
|
+
extractSymbols(tree: Tree, source: Buffer, filePath: string): SymbolRecord[];
|
|
119
|
+
extractImports(tree: Tree, source: Buffer): ImportRecord[];
|
|
120
|
+
extractDocstring(node: SyntaxNode): string | null;
|
|
121
|
+
}
|
|
122
|
+
export interface ProcessedBlock {
|
|
123
|
+
content: Buffer;
|
|
124
|
+
/** 'typescript' | 'javascript' | 'html' | 'css' */
|
|
125
|
+
language: string;
|
|
126
|
+
/** Byte offset where this block starts in the original file */
|
|
127
|
+
offsetInOriginal: number;
|
|
128
|
+
}
|
|
129
|
+
export interface FrameworkAdapter {
|
|
130
|
+
name: string;
|
|
131
|
+
/** Additional file extensions this adapter handles (e.g. ['.vue']). Used by file discovery. */
|
|
132
|
+
extensions(): string[];
|
|
133
|
+
detect(projectRoot: string): Promise<boolean>;
|
|
134
|
+
fileFilter(filePath: string): boolean;
|
|
135
|
+
preProcess?(source: Buffer, filePath: string): ProcessedBlock[];
|
|
136
|
+
/** tree is null when there is no parseable script block (e.g. template-only .vue files). */
|
|
137
|
+
extractFrameworkSymbols(tree: Tree | null, source: Buffer, filePath: string): SymbolRecord[];
|
|
138
|
+
enrichMetadata?(symbol: SymbolRecord): SymbolRecord;
|
|
139
|
+
}
|
|
140
|
+
export interface Services {
|
|
141
|
+
db: Database;
|
|
142
|
+
repoId: string;
|
|
143
|
+
rootPath: string;
|
|
144
|
+
}
|
|
145
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export interface WatchOptions {
|
|
2
|
+
debounceMs?: number;
|
|
3
|
+
}
|
|
4
|
+
export interface FileWatcher {
|
|
5
|
+
/** Resolves once chokidar has finished its initial scan and is ready to receive events. */
|
|
6
|
+
ready: Promise<void>;
|
|
7
|
+
/** Stop watching and clean up the chokidar instance. */
|
|
8
|
+
stop(): Promise<void>;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Start watching `rootPath` for changes. When files are added, modified, or
|
|
12
|
+
* deleted, the relevant paths are batched during the debounce window and then
|
|
13
|
+
* flushed to `reindexFiles`.
|
|
14
|
+
*
|
|
15
|
+
* Only files with a registered language handler extension are considered.
|
|
16
|
+
*/
|
|
17
|
+
export declare function startWatching(rootPath: string, repoId: string, options?: WatchOptions): FileWatcher;
|
|
18
|
+
//# sourceMappingURL=file-watcher.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-watcher.d.ts","sourceRoot":"","sources":["../../../src/core/watcher/file-watcher.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,YAAY;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,WAAW;IAC1B,2FAA2F;IAC3F,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IACrB,wDAAwD;IACxD,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACvB;AAoBD;;;;;;GAMG;AACH,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,YAAiB,GACzB,WAAW,CA8Gb"}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
import { watch as chokidarWatch } from 'chokidar';
|
|
2
|
+
import { relative, resolve } from 'path';
|
|
3
|
+
import { logger } from '../logger.js';
|
|
4
|
+
import { reindexFiles } from '../index-manager.js';
|
|
5
|
+
import { getSupportedExtensions } from '../../handlers/handler-registry.js';
|
|
6
|
+
// ─── Default ignore patterns ──────────────────────────────────────────────────
|
|
7
|
+
const IGNORE_PATTERNS = [
|
|
8
|
+
/(^|[/\\])\../, // dotfiles / dotdirs
|
|
9
|
+
/node_modules/,
|
|
10
|
+
/[/\\]\.git([/\\]|$)/,
|
|
11
|
+
/[/\\]dist([/\\]|$)/,
|
|
12
|
+
/[/\\]build([/\\]|$)/,
|
|
13
|
+
/[/\\]\.claude([/\\]|$)/,
|
|
14
|
+
/[/\\]coverage([/\\]|$)/,
|
|
15
|
+
/\.lock$/,
|
|
16
|
+
/\.log$/,
|
|
17
|
+
];
|
|
18
|
+
const DEFAULT_DEBOUNCE_MS = 2000;
|
|
19
|
+
// ─── Public API ───────────────────────────────────────────────────────────────
|
|
20
|
+
/**
|
|
21
|
+
* Start watching `rootPath` for changes. When files are added, modified, or
|
|
22
|
+
* deleted, the relevant paths are batched during the debounce window and then
|
|
23
|
+
* flushed to `reindexFiles`.
|
|
24
|
+
*
|
|
25
|
+
* Only files with a registered language handler extension are considered.
|
|
26
|
+
*/
|
|
27
|
+
export function startWatching(rootPath, repoId, options = {}) {
|
|
28
|
+
const absRoot = resolve(rootPath);
|
|
29
|
+
const debounceMs = options.debounceMs ?? DEFAULT_DEBOUNCE_MS;
|
|
30
|
+
const supportedExts = new Set(getSupportedExtensions());
|
|
31
|
+
// Batches of paths accumulated during the debounce window
|
|
32
|
+
const changed = new Set();
|
|
33
|
+
const deleted = new Set();
|
|
34
|
+
let timer = null;
|
|
35
|
+
function hasHandler(filePath) {
|
|
36
|
+
const dot = filePath.lastIndexOf('.');
|
|
37
|
+
const ext = dot >= 0 ? filePath.slice(dot) : '';
|
|
38
|
+
return supportedExts.has(ext);
|
|
39
|
+
}
|
|
40
|
+
function schedule() {
|
|
41
|
+
if (timer)
|
|
42
|
+
clearTimeout(timer);
|
|
43
|
+
timer = setTimeout(flush, debounceMs);
|
|
44
|
+
}
|
|
45
|
+
async function flush() {
|
|
46
|
+
timer = null;
|
|
47
|
+
const changedPaths = [...changed];
|
|
48
|
+
const deletedPaths = [...deleted];
|
|
49
|
+
changed.clear();
|
|
50
|
+
deleted.clear();
|
|
51
|
+
if (changedPaths.length === 0 && deletedPaths.length === 0)
|
|
52
|
+
return;
|
|
53
|
+
logger.info(`Watcher: flushing ${changedPaths.length} changed, ` +
|
|
54
|
+
`${deletedPaths.length} deleted in repo ${repoId}`);
|
|
55
|
+
try {
|
|
56
|
+
const result = await reindexFiles(repoId, changedPaths, deletedPaths);
|
|
57
|
+
logger.info(`Watcher reindex complete: ${result.filesIndexed} files, ` +
|
|
58
|
+
`${result.symbolsFound} symbols in ${result.durationMs}ms`);
|
|
59
|
+
if (result.errors.length > 0) {
|
|
60
|
+
for (const e of result.errors) {
|
|
61
|
+
logger.warn(`Watcher reindex error in ${e.file}: ${e.message}`);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
catch (err) {
|
|
66
|
+
logger.error(`Watcher reindex failed: ${err}`);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
const watcher = chokidarWatch(absRoot, {
|
|
70
|
+
ignored: IGNORE_PATTERNS,
|
|
71
|
+
persistent: true,
|
|
72
|
+
ignoreInitial: true, // Don't fire for files already on disk at startup
|
|
73
|
+
awaitWriteFinish: {
|
|
74
|
+
stabilityThreshold: 100,
|
|
75
|
+
pollInterval: 50,
|
|
76
|
+
},
|
|
77
|
+
});
|
|
78
|
+
const readyPromise = new Promise((resolve) => {
|
|
79
|
+
watcher.once('ready', resolve);
|
|
80
|
+
});
|
|
81
|
+
watcher.on('add', (absPath) => {
|
|
82
|
+
const rel = relative(absRoot, absPath).replace(/\\/g, '/');
|
|
83
|
+
if (!hasHandler(rel))
|
|
84
|
+
return;
|
|
85
|
+
logger.debug(`Watcher: add ${rel}`);
|
|
86
|
+
changed.add(rel);
|
|
87
|
+
deleted.delete(rel); // no longer deleted if re-added
|
|
88
|
+
schedule();
|
|
89
|
+
});
|
|
90
|
+
watcher.on('change', (absPath) => {
|
|
91
|
+
const rel = relative(absRoot, absPath).replace(/\\/g, '/');
|
|
92
|
+
if (!hasHandler(rel))
|
|
93
|
+
return;
|
|
94
|
+
logger.debug(`Watcher: change ${rel}`);
|
|
95
|
+
changed.add(rel);
|
|
96
|
+
schedule();
|
|
97
|
+
});
|
|
98
|
+
watcher.on('unlink', (absPath) => {
|
|
99
|
+
const rel = relative(absRoot, absPath).replace(/\\/g, '/');
|
|
100
|
+
if (!hasHandler(rel))
|
|
101
|
+
return;
|
|
102
|
+
logger.debug(`Watcher: unlink ${rel}`);
|
|
103
|
+
deleted.add(rel);
|
|
104
|
+
changed.delete(rel); // don't try to re-index a deleted file
|
|
105
|
+
schedule();
|
|
106
|
+
});
|
|
107
|
+
watcher.on('error', (err) => {
|
|
108
|
+
logger.error(`Watcher error: ${err}`);
|
|
109
|
+
});
|
|
110
|
+
logger.info(`Watching ${absRoot} (repo ${repoId}, debounce ${debounceMs}ms)`);
|
|
111
|
+
return {
|
|
112
|
+
ready: readyPromise,
|
|
113
|
+
async stop() {
|
|
114
|
+
if (timer) {
|
|
115
|
+
clearTimeout(timer);
|
|
116
|
+
timer = null;
|
|
117
|
+
}
|
|
118
|
+
await watcher.close();
|
|
119
|
+
logger.info(`Watcher stopped for ${absRoot}`);
|
|
120
|
+
},
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
//# sourceMappingURL=file-watcher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-watcher.js","sourceRoot":"","sources":["../../../src/core/watcher/file-watcher.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Worker thread pool for parallel file parsing.
|
|
3
|
+
*
|
|
4
|
+
* Creates `concurrency` Worker instances each running indexing-worker.ts.
|
|
5
|
+
* A job queue feeds idle workers. All results are collected and returned in
|
|
6
|
+
* input order once every job has completed.
|
|
7
|
+
*
|
|
8
|
+
* Environment detection:
|
|
9
|
+
* - Compiled (.js): worker runs as plain JS — no loader needed.
|
|
10
|
+
* - Source (.ts, vitest/dev): worker runs through tsx for TS transpilation.
|
|
11
|
+
*/
|
|
12
|
+
import type { ParseJob, ParseResult } from './indexing-worker.js';
|
|
13
|
+
export type { ParseJob, ParseResult };
|
|
14
|
+
export interface WorkerPool {
|
|
15
|
+
/**
|
|
16
|
+
* Run all jobs in parallel across the pool.
|
|
17
|
+
* Returns results in the same order as the input jobs array.
|
|
18
|
+
*/
|
|
19
|
+
run(jobs: ParseJob[]): Promise<ParseResult[]>;
|
|
20
|
+
/** Terminate all worker threads. */
|
|
21
|
+
terminate(): Promise<void>;
|
|
22
|
+
}
|
|
23
|
+
export declare function createWorkerPool(concurrency: number): WorkerPool;
|
|
24
|
+
//# sourceMappingURL=worker-pool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worker-pool.d.ts","sourceRoot":"","sources":["../../src/core/worker-pool.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAIlE,YAAY,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC;AAoBtC,MAAM,WAAW,UAAU;IACzB;;;OAGG;IACH,GAAG,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;IAC9C,oCAAoC;IACpC,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5B;AAED,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,UAAU,CAqEhE"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Worker thread pool for parallel file parsing.
|
|
3
|
+
*
|
|
4
|
+
* Creates `concurrency` Worker instances each running indexing-worker.ts.
|
|
5
|
+
* A job queue feeds idle workers. All results are collected and returned in
|
|
6
|
+
* input order once every job has completed.
|
|
7
|
+
*
|
|
8
|
+
* Environment detection:
|
|
9
|
+
* - Compiled (.js): worker runs as plain JS — no loader needed.
|
|
10
|
+
* - Source (.ts, vitest/dev): worker runs through tsx for TS transpilation.
|
|
11
|
+
*/
|
|
12
|
+
import { Worker } from 'worker_threads';
|
|
13
|
+
import { fileURLToPath } from 'url';
|
|
14
|
+
import { logger } from './logger.js';
|
|
15
|
+
// ─── Worker factory ───────────────────────────────────────────────────────────
|
|
16
|
+
// True when running from compiled dist/ output (not TypeScript source).
|
|
17
|
+
const IS_COMPILED = import.meta.url.endsWith('.js');
|
|
18
|
+
function spawnWorker() {
|
|
19
|
+
if (IS_COMPILED) {
|
|
20
|
+
// In dist/, worker lives beside this file as a compiled .js module.
|
|
21
|
+
return new Worker(fileURLToPath(new URL('./indexing-worker.js', import.meta.url)));
|
|
22
|
+
}
|
|
23
|
+
// Development / test: use the plain-JS bootstrap which loads the TypeScript
|
|
24
|
+
// worker via tsx's programmatic tsImport API (no --loader or --import flag
|
|
25
|
+
// needed — avoids Windows path issues with Node.js --import handling).
|
|
26
|
+
return new Worker(fileURLToPath(new URL('./indexing-worker-boot.mjs', import.meta.url)));
|
|
27
|
+
}
|
|
28
|
+
export function createWorkerPool(concurrency) {
|
|
29
|
+
const workers = Array.from({ length: concurrency }, () => spawnWorker());
|
|
30
|
+
// Log any uncaught worker errors at the pool level.
|
|
31
|
+
for (const w of workers) {
|
|
32
|
+
w.on('error', (err) => logger.warn(`Worker uncaught error: ${err.message}`));
|
|
33
|
+
}
|
|
34
|
+
return {
|
|
35
|
+
async run(jobs) {
|
|
36
|
+
if (jobs.length === 0)
|
|
37
|
+
return [];
|
|
38
|
+
const results = new Array(jobs.length);
|
|
39
|
+
// queue entries: [original index, job]
|
|
40
|
+
const queue = jobs.map((j, i) => [i, j]);
|
|
41
|
+
let pending = jobs.length;
|
|
42
|
+
return new Promise((resolve) => {
|
|
43
|
+
function dispatch(worker) {
|
|
44
|
+
const next = queue.shift();
|
|
45
|
+
if (!next)
|
|
46
|
+
return; // No more jobs for this worker.
|
|
47
|
+
const [jobIndex, job] = next;
|
|
48
|
+
const onMessage = (result) => {
|
|
49
|
+
worker.off('message', onMessage);
|
|
50
|
+
worker.off('error', onWorkerError);
|
|
51
|
+
results[jobIndex] = result;
|
|
52
|
+
if (--pending === 0) {
|
|
53
|
+
resolve(results);
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
dispatch(worker);
|
|
57
|
+
}
|
|
58
|
+
};
|
|
59
|
+
const onWorkerError = (err) => {
|
|
60
|
+
worker.off('message', onMessage);
|
|
61
|
+
worker.off('error', onWorkerError);
|
|
62
|
+
results[jobIndex] = {
|
|
63
|
+
relPath: job.relPath,
|
|
64
|
+
symbols: [],
|
|
65
|
+
imports: [],
|
|
66
|
+
error: `Worker error: ${err.message}`,
|
|
67
|
+
};
|
|
68
|
+
if (--pending === 0) {
|
|
69
|
+
resolve(results);
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
dispatch(worker);
|
|
73
|
+
}
|
|
74
|
+
};
|
|
75
|
+
worker.once('message', onMessage);
|
|
76
|
+
worker.once('error', onWorkerError);
|
|
77
|
+
worker.postMessage(job);
|
|
78
|
+
}
|
|
79
|
+
// Seed all workers — each picks up its first job.
|
|
80
|
+
for (const worker of workers) {
|
|
81
|
+
if (queue.length > 0) {
|
|
82
|
+
dispatch(worker);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
});
|
|
86
|
+
},
|
|
87
|
+
async terminate() {
|
|
88
|
+
await Promise.all(workers.map((w) => w.terminate()));
|
|
89
|
+
},
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=worker-pool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worker-pool.js","sourceRoot":"","sources":["../../src/core/worker-pool.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { ImportRecord, DepEdge } from '../core/types.js';
|
|
2
|
+
import type { PathResolver } from './path-resolver.js';
|
|
3
|
+
/**
|
|
4
|
+
* Convert a batch of ImportRecords into DepEdges.
|
|
5
|
+
*
|
|
6
|
+
* Each ImportRecord may or may not have `resolvedPath` pre-filled; if it is
|
|
7
|
+
* null the resolver is called to fill it. Records that resolve to external
|
|
8
|
+
* packages (null resolvedPath) are silently dropped — they don't belong in
|
|
9
|
+
* the in-project dependency graph.
|
|
10
|
+
*
|
|
11
|
+
* Phase 1 emits one file-level edge per unique (sourceFile, targetFile) pair.
|
|
12
|
+
* Symbol-level edge population is deferred to Phase 2 when we have a DB
|
|
13
|
+
* handle available during incremental reindexing.
|
|
14
|
+
*/
|
|
15
|
+
export declare function buildGraph(imports: ImportRecord[], resolver: PathResolver, repoId: string): DepEdge[];
|
|
16
|
+
//# sourceMappingURL=graph-builder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"graph-builder.d.ts","sourceRoot":"","sources":["../../src/graph/graph-builder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAIvD;;;;;;;;;;;GAWG;AACH,wBAAgB,UAAU,CACxB,OAAO,EAAE,YAAY,EAAE,EACvB,QAAQ,EAAE,YAAY,EACtB,MAAM,EAAE,MAAM,GACb,OAAO,EAAE,CAgCX"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
// ─── Public API ───────────────────────────────────────────────────────────────
|
|
2
|
+
/**
|
|
3
|
+
* Convert a batch of ImportRecords into DepEdges.
|
|
4
|
+
*
|
|
5
|
+
* Each ImportRecord may or may not have `resolvedPath` pre-filled; if it is
|
|
6
|
+
* null the resolver is called to fill it. Records that resolve to external
|
|
7
|
+
* packages (null resolvedPath) are silently dropped — they don't belong in
|
|
8
|
+
* the in-project dependency graph.
|
|
9
|
+
*
|
|
10
|
+
* Phase 1 emits one file-level edge per unique (sourceFile, targetFile) pair.
|
|
11
|
+
* Symbol-level edge population is deferred to Phase 2 when we have a DB
|
|
12
|
+
* handle available during incremental reindexing.
|
|
13
|
+
*/
|
|
14
|
+
export function buildGraph(imports, resolver, repoId) {
|
|
15
|
+
// Deduplicate by (sourceFile, targetFile) to avoid flooding the dep table
|
|
16
|
+
// with one row per named import specifier from the same module.
|
|
17
|
+
const seen = new Set();
|
|
18
|
+
const edges = [];
|
|
19
|
+
for (const rec of imports) {
|
|
20
|
+
if (!rec.sourceFile)
|
|
21
|
+
continue; // guard against unfilled sourceFile
|
|
22
|
+
// Resolve the path if the handler left it null
|
|
23
|
+
const targetFile = rec.resolvedPath ??
|
|
24
|
+
resolver.resolve(rec.specifier, rec.sourceFile);
|
|
25
|
+
if (targetFile === null)
|
|
26
|
+
continue; // external package — skip
|
|
27
|
+
const key = `${rec.sourceFile}\0${targetFile}`;
|
|
28
|
+
if (seen.has(key))
|
|
29
|
+
continue;
|
|
30
|
+
seen.add(key);
|
|
31
|
+
edges.push({
|
|
32
|
+
repoId,
|
|
33
|
+
sourceFile: rec.sourceFile,
|
|
34
|
+
sourceSymbolId: null,
|
|
35
|
+
targetFile,
|
|
36
|
+
targetSymbolId: null,
|
|
37
|
+
edgeType: detectEdgeType(rec),
|
|
38
|
+
specifier: rec.specifier,
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
return edges;
|
|
42
|
+
}
|
|
43
|
+
// ─── Helpers ──────────────────────────────────────────────────────────────────
|
|
44
|
+
function detectEdgeType(rec) {
|
|
45
|
+
// re-exports: `export { foo } from './foo'` — importedNames contains
|
|
46
|
+
// re-exported names. We can't distinguish this from a regular named import
|
|
47
|
+
// at the ImportRecord level in Phase 1, so everything is 'import'.
|
|
48
|
+
void rec;
|
|
49
|
+
return 'import';
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=graph-builder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"graph-builder.js","sourceRoot":"","sources":["../../src/graph/graph-builder.ts"],"names":[],"mappings":"AAGA,iFAAiF;AAEjF;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,UAAU,CACxB,OAAuB,EACvB,QAAsB,EACtB,MAAc;IAEd,0EAA0E;IAC1E,gEAAgE;IAChE,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,KAAK,GAAc,EAAE,CAAC;IAE5B,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;QAC1B,IAAI,CAAC,GAAG,CAAC,UAAU;YAAE,SAAS,CAAC,oCAAoC;QAEnE,+CAA+C;QAC/C,MAAM,UAAU,GACd,GAAG,CAAC,YAAY;YAChB,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC;QAElD,IAAI,UAAU,KAAK,IAAI;YAAE,SAAS,CAAC,0BAA0B;QAE7D,MAAM,GAAG,GAAG,GAAG,GAAG,CAAC,UAAU,KAAK,UAAU,EAAE,CAAC;QAC/C,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,SAAS;QAC5B,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAEd,KAAK,CAAC,IAAI,CAAC;YACT,MAAM;YACN,UAAU,EAAE,GAAG,CAAC,UAAU;YAC1B,cAAc,EAAE,IAAI;YACpB,UAAU;YACV,cAAc,EAAE,IAAI;YACpB,QAAQ,EAAE,cAAc,CAAC,GAAG,CAAC;YAC7B,SAAS,EAAE,GAAG,CAAC,SAAS;SACzB,CAAC,CAAC;IACL,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,iFAAiF;AAEjF,SAAS,cAAc,CAAC,GAAiB;IACvC,qEAAqE;IACrE,2EAA2E;IAC3E,mEAAmE;IACnE,KAAK,GAAG,CAAC;IACT,OAAO,QAAQ,CAAC;AAClB,CAAC"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import type Database from 'better-sqlite3';
|
|
2
|
+
import type { SymbolRecord } from '../core/types.js';
|
|
3
|
+
export interface TraversalResult {
|
|
4
|
+
symbols: SymbolRecord[];
|
|
5
|
+
/** Distinct files included in this result. */
|
|
6
|
+
files: string[];
|
|
7
|
+
/** Rough token estimate (sum of signature + summary lengths ÷ 4). */
|
|
8
|
+
tokenEstimate: number;
|
|
9
|
+
}
|
|
10
|
+
export interface ImporterInfo {
|
|
11
|
+
file: string;
|
|
12
|
+
symbols: SymbolRecord[];
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Reverse-walk the dependency graph from a symbol outward.
|
|
16
|
+
* Returns all symbols in files that (transitively) depend on the symbol's file,
|
|
17
|
+
* up to `depth` hops. Useful for assessing blast radius of a change.
|
|
18
|
+
*/
|
|
19
|
+
export declare function getBlastRadius(symbolId: string, repoId: string, db: Database.Database, depth?: number): TraversalResult;
|
|
20
|
+
/**
|
|
21
|
+
* Forward-walk the dependency graph from a symbol's file.
|
|
22
|
+
* Returns the symbol itself plus all symbols in transitively imported files,
|
|
23
|
+
* up to `depth` hops. Useful for gathering context needed to understand a symbol.
|
|
24
|
+
*/
|
|
25
|
+
export declare function getContextBundle(symbolId: string, repoId: string, db: Database.Database, depth?: number): TraversalResult;
|
|
26
|
+
/**
|
|
27
|
+
* Return distinct files that import `filePath`, along with the symbols
|
|
28
|
+
* defined in each importing file.
|
|
29
|
+
*/
|
|
30
|
+
export declare function findImporters(filePath: string, repoId: string, db: Database.Database): ImporterInfo[];
|
|
31
|
+
/**
|
|
32
|
+
* Symbols in files that are never imported by any other file in the repo.
|
|
33
|
+
* Delegates to the dep-store query.
|
|
34
|
+
*/
|
|
35
|
+
export declare function findDeadCode(repoId: string, db: Database.Database): SymbolRecord[];
|
|
36
|
+
export interface BlastRadiusEntry {
|
|
37
|
+
filePath: string;
|
|
38
|
+
depth: number;
|
|
39
|
+
symbolCount: number;
|
|
40
|
+
symbols: Pick<SymbolRecord, 'id' | 'name' | 'kind' | 'signature' | 'summary'>[];
|
|
41
|
+
}
|
|
42
|
+
export interface BlastRadiusWithDepths {
|
|
43
|
+
symbolId: string;
|
|
44
|
+
symbolName: string;
|
|
45
|
+
symbolKind: string;
|
|
46
|
+
sourceFile: string;
|
|
47
|
+
totalFiles: number;
|
|
48
|
+
totalSymbols: number;
|
|
49
|
+
entries: BlastRadiusEntry[];
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Reverse-walk the dependency graph from a symbol, returning each affected file
|
|
53
|
+
* annotated with its hop distance from the source. Used by the web UI radial
|
|
54
|
+
* blast radius visualization.
|
|
55
|
+
*/
|
|
56
|
+
export declare function getBlastRadiusWithDepths(symbolId: string, repoId: string, db: Database.Database, maxDepth?: number): BlastRadiusWithDepths | null;
|
|
57
|
+
//# sourceMappingURL=graph-traversal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"graph-traversal.d.ts","sourceRoot":"","sources":["../../src/graph/graph-traversal.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAC3C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAMrD,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,8CAA8C;IAC9C,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,qEAAqE;IACrE,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,YAAY,EAAE,CAAC;CACzB;AAID;;;;GAIG;AACH,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,KAAK,SAAI,GACR,eAAe,CAQjB;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,KAAK,SAAI,GACR,eAAe,CAQjB;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,EAAE,EAAE,QAAQ,CAAC,QAAQ,GACpB,YAAY,EAAE,CAMhB;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAC1B,MAAM,EAAE,MAAM,EACd,EAAE,EAAE,QAAQ,CAAC,QAAQ,GACpB,YAAY,EAAE,CAEhB;AAoED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,GAAG,MAAM,GAAG,MAAM,GAAG,WAAW,GAAG,SAAS,CAAC,EAAE,CAAC;CACjF;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,gBAAgB,EAAE,CAAC;CAC7B;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,QAAQ,SAAI,GACX,qBAAqB,GAAG,IAAI,CAkD9B"}
|