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,133 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Embedding provider abstraction for semantic search.
|
|
3
|
+
*
|
|
4
|
+
* Supports:
|
|
5
|
+
* voyage — Voyage AI (voyage-code-2; recommended for code)
|
|
6
|
+
* openai-compatible — any /v1/embeddings endpoint (Ollama, OpenAI, etc.)
|
|
7
|
+
*
|
|
8
|
+
* Returns null when no provider is configured.
|
|
9
|
+
*/
|
|
10
|
+
import { logger } from '../core/logger.js';
|
|
11
|
+
// ─── Cosine similarity ────────────────────────────────────────────────────────
|
|
12
|
+
/**
|
|
13
|
+
* Compute cosine similarity between two float vectors.
|
|
14
|
+
* Both vectors must have the same length. Returns a value in [-1, 1].
|
|
15
|
+
*/
|
|
16
|
+
export function cosineSimilarity(a, b) {
|
|
17
|
+
if (a.length !== b.length || a.length === 0)
|
|
18
|
+
return 0;
|
|
19
|
+
let dot = 0;
|
|
20
|
+
let normA = 0;
|
|
21
|
+
let normB = 0;
|
|
22
|
+
for (let i = 0; i < a.length; i++) {
|
|
23
|
+
dot += a[i] * b[i];
|
|
24
|
+
normA += a[i] * a[i];
|
|
25
|
+
normB += b[i] * b[i];
|
|
26
|
+
}
|
|
27
|
+
const denom = Math.sqrt(normA) * Math.sqrt(normB);
|
|
28
|
+
return denom === 0 ? 0 : dot / denom;
|
|
29
|
+
}
|
|
30
|
+
// ─── Float32Array serialization ───────────────────────────────────────────────
|
|
31
|
+
/** Serialize a number[] to a Buffer of 32-bit floats (little-endian). */
|
|
32
|
+
export function packEmbedding(vec) {
|
|
33
|
+
const f32 = new Float32Array(vec);
|
|
34
|
+
return Buffer.from(f32.buffer);
|
|
35
|
+
}
|
|
36
|
+
/** Deserialize a Buffer of 32-bit floats back to number[]. */
|
|
37
|
+
export function unpackEmbedding(buf) {
|
|
38
|
+
const f32 = new Float32Array(buf.buffer, buf.byteOffset, buf.byteLength / 4);
|
|
39
|
+
return Array.from(f32);
|
|
40
|
+
}
|
|
41
|
+
// ─── Voyage AI provider ───────────────────────────────────────────────────────
|
|
42
|
+
const VOYAGE_API_URL = 'https://api.voyageai.com/v1/embeddings';
|
|
43
|
+
const DEFAULT_VOYAGE_MODEL = 'voyage-code-2';
|
|
44
|
+
class VoyageEmbeddingProvider {
|
|
45
|
+
apiKey;
|
|
46
|
+
model;
|
|
47
|
+
constructor(apiKey, model) {
|
|
48
|
+
this.apiKey = apiKey;
|
|
49
|
+
this.model = model;
|
|
50
|
+
}
|
|
51
|
+
async embed(texts) {
|
|
52
|
+
const response = await fetch(VOYAGE_API_URL, {
|
|
53
|
+
method: 'POST',
|
|
54
|
+
headers: {
|
|
55
|
+
'Content-Type': 'application/json',
|
|
56
|
+
Authorization: `Bearer ${this.apiKey}`,
|
|
57
|
+
},
|
|
58
|
+
body: JSON.stringify({
|
|
59
|
+
model: this.model,
|
|
60
|
+
input: texts,
|
|
61
|
+
}),
|
|
62
|
+
});
|
|
63
|
+
if (!response.ok) {
|
|
64
|
+
const text = await response.text();
|
|
65
|
+
throw new Error(`Voyage AI embedding failed (${response.status}): ${text}`);
|
|
66
|
+
}
|
|
67
|
+
const json = await response.json();
|
|
68
|
+
return json.data.map((d) => d.embedding);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
// ─── OpenAI-compatible provider ───────────────────────────────────────────────
|
|
72
|
+
class OpenAICompatibleEmbeddingProvider {
|
|
73
|
+
endpoint;
|
|
74
|
+
apiKey;
|
|
75
|
+
model;
|
|
76
|
+
constructor(endpoint, apiKey, model) {
|
|
77
|
+
this.endpoint = endpoint;
|
|
78
|
+
this.apiKey = apiKey;
|
|
79
|
+
this.model = model;
|
|
80
|
+
}
|
|
81
|
+
async embed(texts) {
|
|
82
|
+
const url = `${this.endpoint.replace(/\/$/, '')}/v1/embeddings`;
|
|
83
|
+
const response = await fetch(url, {
|
|
84
|
+
method: 'POST',
|
|
85
|
+
headers: {
|
|
86
|
+
'Content-Type': 'application/json',
|
|
87
|
+
...(this.apiKey ? { Authorization: `Bearer ${this.apiKey}` } : {}),
|
|
88
|
+
},
|
|
89
|
+
body: JSON.stringify({
|
|
90
|
+
model: this.model,
|
|
91
|
+
input: texts,
|
|
92
|
+
}),
|
|
93
|
+
});
|
|
94
|
+
if (!response.ok) {
|
|
95
|
+
const text = await response.text();
|
|
96
|
+
throw new Error(`OpenAI-compatible embedding failed (${response.status}): ${text}`);
|
|
97
|
+
}
|
|
98
|
+
const json = await response.json();
|
|
99
|
+
return json.data.map((d) => d.embedding);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
// ─── Factory ──────────────────────────────────────────────────────────────────
|
|
103
|
+
/**
|
|
104
|
+
* Create an embedding provider from the active config, or return null
|
|
105
|
+
* if no embedding provider is configured.
|
|
106
|
+
*/
|
|
107
|
+
export function createEmbeddingProvider(config) {
|
|
108
|
+
const { embeddingProvider, embeddingModel, apiKey, endpoint } = config.ai;
|
|
109
|
+
if (!embeddingProvider)
|
|
110
|
+
return null;
|
|
111
|
+
if (!config.ai.allowRemoteAI) {
|
|
112
|
+
logger.debug('Embedding provider configured but allowRemoteAI is false — embeddings disabled');
|
|
113
|
+
return null;
|
|
114
|
+
}
|
|
115
|
+
if (embeddingProvider === 'voyage') {
|
|
116
|
+
const key = apiKey || process.env['ANTHROPIC_API_KEY'] || '';
|
|
117
|
+
if (!key) {
|
|
118
|
+
logger.warn('ai.embeddingProvider = "voyage" but no API key configured — embeddings disabled');
|
|
119
|
+
return null;
|
|
120
|
+
}
|
|
121
|
+
return new VoyageEmbeddingProvider(key, embeddingModel ?? DEFAULT_VOYAGE_MODEL);
|
|
122
|
+
}
|
|
123
|
+
if (embeddingProvider === 'openai-compatible') {
|
|
124
|
+
if (!endpoint) {
|
|
125
|
+
logger.warn('ai.embeddingProvider = "openai-compatible" but no ai.endpoint configured — embeddings disabled');
|
|
126
|
+
return null;
|
|
127
|
+
}
|
|
128
|
+
const model = embeddingModel ?? 'nomic-embed-text';
|
|
129
|
+
return new OpenAICompatibleEmbeddingProvider(endpoint, apiKey, model);
|
|
130
|
+
}
|
|
131
|
+
return null;
|
|
132
|
+
}
|
|
133
|
+
//# sourceMappingURL=embeddings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"embeddings.js","sourceRoot":"","sources":["../../src/summarizer/embeddings.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { SymbolRecord } from '../core/types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Generate a one-line summary for a symbol using a staged fallback pipeline.
|
|
4
|
+
*
|
|
5
|
+
* Stage 1: Extract summary from the provided docstring (JSDoc / TSDoc).
|
|
6
|
+
* Stage 2: Derive from frameworkMeta (component type, route path, etc.).
|
|
7
|
+
* Stage 3: AI batch summarization — handled externally by AISummarizer and
|
|
8
|
+
* applied post-indexing; this function is not involved in Stage 3.
|
|
9
|
+
* Stage 4: Use the symbol's signature, truncated to 100 chars.
|
|
10
|
+
*
|
|
11
|
+
* @param symbol The symbol record. Must have frameworkMeta populated before
|
|
12
|
+
* this is called so Stage 2 can use it.
|
|
13
|
+
* @param docstring Raw docstring text, or null / empty if none.
|
|
14
|
+
*/
|
|
15
|
+
export declare function generateSummary(symbol: SymbolRecord, docstring: string | null): string;
|
|
16
|
+
/**
|
|
17
|
+
* Apply `generateSummary` to an array of symbols in-place.
|
|
18
|
+
* Each symbol's existing `summary` is treated as the raw docstring input
|
|
19
|
+
* (handlers already pre-populate it from JSDoc).
|
|
20
|
+
*/
|
|
21
|
+
export declare function enrichSymbols(symbols: SymbolRecord[]): SymbolRecord[];
|
|
22
|
+
//# sourceMappingURL=summarizer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"summarizer.d.ts","sourceRoot":"","sources":["../../src/summarizer/summarizer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAqDrD;;;;;;;;;;;;GAYG;AACH,wBAAgB,eAAe,CAC7B,MAAM,EAAE,YAAY,EACpB,SAAS,EAAE,MAAM,GAAG,IAAI,GACvB,MAAM,CAeR;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,YAAY,EAAE,CAKrE"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { extractSummaryFromDocstring } from './docstring-extractor.js';
|
|
2
|
+
// ─── Stage 2: framework-derived summary ──────────────────────────────────────
|
|
3
|
+
/**
|
|
4
|
+
* Derive a one-line summary from a symbol's frameworkMeta when present.
|
|
5
|
+
* Returns null if no useful metadata is available.
|
|
6
|
+
*
|
|
7
|
+
* Priority order matches the specificity of the metadata:
|
|
8
|
+
* server routes (have method + path) > pages > plugins/middleware >
|
|
9
|
+
* composables > hooks > components
|
|
10
|
+
*/
|
|
11
|
+
function deriveFrameworkSummary(symbol) {
|
|
12
|
+
const m = symbol.frameworkMeta;
|
|
13
|
+
if (!m)
|
|
14
|
+
return null;
|
|
15
|
+
// Nuxt server route
|
|
16
|
+
if (m['nuxt_server']) {
|
|
17
|
+
const method = m['http_method'] ? `${m['http_method']} ` : '';
|
|
18
|
+
const path = m['route_path'] ?? symbol.name;
|
|
19
|
+
return `${method}${path} server route`;
|
|
20
|
+
}
|
|
21
|
+
// Nuxt page
|
|
22
|
+
if (m['nuxt_page']) {
|
|
23
|
+
const path = m['route_path'] ?? symbol.name;
|
|
24
|
+
return `Page route ${path}`;
|
|
25
|
+
}
|
|
26
|
+
// Nuxt plugin
|
|
27
|
+
if (m['nuxt_plugin'])
|
|
28
|
+
return `Nuxt plugin ${symbol.name}`;
|
|
29
|
+
// Nuxt middleware (also covers generic middleware kind)
|
|
30
|
+
if (m['nuxt_middleware'])
|
|
31
|
+
return `Nuxt middleware ${symbol.name}`;
|
|
32
|
+
// React hook
|
|
33
|
+
if (m['react_hook'])
|
|
34
|
+
return `React hook ${symbol.name}`;
|
|
35
|
+
// React component
|
|
36
|
+
if (m['react_component'])
|
|
37
|
+
return `React component ${symbol.name}`;
|
|
38
|
+
// Vue composable
|
|
39
|
+
if (m['vue_composable'])
|
|
40
|
+
return `Vue composable ${symbol.name}`;
|
|
41
|
+
// Vue component
|
|
42
|
+
if (m['vue_component'])
|
|
43
|
+
return `Vue component ${symbol.name}`;
|
|
44
|
+
return null;
|
|
45
|
+
}
|
|
46
|
+
// ─── Public API ───────────────────────────────────────────────────────────────
|
|
47
|
+
/**
|
|
48
|
+
* Generate a one-line summary for a symbol using a staged fallback pipeline.
|
|
49
|
+
*
|
|
50
|
+
* Stage 1: Extract summary from the provided docstring (JSDoc / TSDoc).
|
|
51
|
+
* Stage 2: Derive from frameworkMeta (component type, route path, etc.).
|
|
52
|
+
* Stage 3: AI batch summarization — handled externally by AISummarizer and
|
|
53
|
+
* applied post-indexing; this function is not involved in Stage 3.
|
|
54
|
+
* Stage 4: Use the symbol's signature, truncated to 100 chars.
|
|
55
|
+
*
|
|
56
|
+
* @param symbol The symbol record. Must have frameworkMeta populated before
|
|
57
|
+
* this is called so Stage 2 can use it.
|
|
58
|
+
* @param docstring Raw docstring text, or null / empty if none.
|
|
59
|
+
*/
|
|
60
|
+
export function generateSummary(symbol, docstring) {
|
|
61
|
+
// Stage 1 — docstring
|
|
62
|
+
if (docstring) {
|
|
63
|
+
const fromDoc = extractSummaryFromDocstring(docstring);
|
|
64
|
+
if (fromDoc)
|
|
65
|
+
return fromDoc;
|
|
66
|
+
}
|
|
67
|
+
// Stage 2 — framework-derived
|
|
68
|
+
const fromFramework = deriveFrameworkSummary(symbol);
|
|
69
|
+
if (fromFramework)
|
|
70
|
+
return fromFramework;
|
|
71
|
+
// Stage 3 — AI (external, applied post-indexing via AISummarizer)
|
|
72
|
+
// Stage 4 — signature fallback
|
|
73
|
+
return symbol.signature.slice(0, 100).trim();
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Apply `generateSummary` to an array of symbols in-place.
|
|
77
|
+
* Each symbol's existing `summary` is treated as the raw docstring input
|
|
78
|
+
* (handlers already pre-populate it from JSDoc).
|
|
79
|
+
*/
|
|
80
|
+
export function enrichSymbols(symbols) {
|
|
81
|
+
return symbols.map((s) => ({
|
|
82
|
+
...s,
|
|
83
|
+
summary: generateSummary(s, s.summary || null),
|
|
84
|
+
}));
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=summarizer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"summarizer.js","sourceRoot":"","sources":["../../src/summarizer/summarizer.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,2BAA2B,EAAE,MAAM,0BAA0B,CAAC;AAEvE,gFAAgF;AAEhF;;;;;;;GAOG;AACH,SAAS,sBAAsB,CAAC,MAAoB;IAClD,MAAM,CAAC,GAAG,MAAM,CAAC,aAAa,CAAC;IAC/B,IAAI,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAEpB,oBAAoB;IACpB,IAAI,CAAC,CAAC,aAAa,CAAC,EAAE,CAAC;QACrB,MAAM,MAAM,GAAG,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9D,MAAM,IAAI,GAAK,CAAC,CAAC,YAAY,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC;QAC9C,OAAO,GAAG,MAAM,GAAG,IAAI,eAAe,CAAC;IACzC,CAAC;IAED,YAAY;IACZ,IAAI,CAAC,CAAC,WAAW,CAAC,EAAE,CAAC;QACnB,MAAM,IAAI,GAAG,CAAC,CAAC,YAAY,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC;QAC5C,OAAO,cAAc,IAAI,EAAE,CAAC;IAC9B,CAAC;IAED,cAAc;IACd,IAAI,CAAC,CAAC,aAAa,CAAC;QAAE,OAAO,eAAe,MAAM,CAAC,IAAI,EAAE,CAAC;IAE1D,wDAAwD;IACxD,IAAI,CAAC,CAAC,iBAAiB,CAAC;QAAE,OAAO,mBAAmB,MAAM,CAAC,IAAI,EAAE,CAAC;IAElE,aAAa;IACb,IAAI,CAAC,CAAC,YAAY,CAAC;QAAE,OAAO,cAAc,MAAM,CAAC,IAAI,EAAE,CAAC;IAExD,kBAAkB;IAClB,IAAI,CAAC,CAAC,iBAAiB,CAAC;QAAE,OAAO,mBAAmB,MAAM,CAAC,IAAI,EAAE,CAAC;IAElE,iBAAiB;IACjB,IAAI,CAAC,CAAC,gBAAgB,CAAC;QAAE,OAAO,kBAAkB,MAAM,CAAC,IAAI,EAAE,CAAC;IAEhE,gBAAgB;IAChB,IAAI,CAAC,CAAC,eAAe,CAAC;QAAE,OAAO,iBAAiB,MAAM,CAAC,IAAI,EAAE,CAAC;IAE9D,OAAO,IAAI,CAAC;AACd,CAAC;AAED,iFAAiF;AAEjF;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,eAAe,CAC7B,MAAoB,EACpB,SAAwB;IAExB,sBAAsB;IACtB,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,OAAO,GAAG,2BAA2B,CAAC,SAAS,CAAC,CAAC;QACvD,IAAI,OAAO;YAAE,OAAO,OAAO,CAAC;IAC9B,CAAC;IAED,8BAA8B;IAC9B,MAAM,aAAa,GAAG,sBAAsB,CAAC,MAAM,CAAC,CAAC;IACrD,IAAI,aAAa;QAAE,OAAO,aAAa,CAAC;IAExC,kEAAkE;IAElE,+BAA+B;IAC/B,OAAO,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;AAC/C,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,OAAuB;IACnD,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACzB,GAAG,CAAC;QACJ,OAAO,EAAE,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,OAAO,IAAI,IAAI,CAAC;KAC/C,CAAC,CAAC,CAAC;AACN,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{j as e,r as h,L as O,b as G}from"./index-CnwwQi_S.js";import{a as $,A as H}from"./client-BANW_tIp.js";import{u as M}from"./repoStore-SbGR6YI6.js";import{u as T}from"./useSearch-DHyve22h.js";function V(t){const r=new Map;for(const n of t.entries)r.set(n.depth,(r.get(n.depth)??0)+1);return r}function q(t){return t===0?"—":t<=3?"Low (~30 min)":t<=10?"Medium (~2 hrs)":t<=30?"High (~1 day)":"Very high (>1 day)"}function I({label:t,value:r,sub:n,color:l="text-gray-100"}){return e.jsxs("div",{className:"bg-gray-800 rounded-lg px-4 py-3 flex flex-col gap-0.5",children:[e.jsx("span",{className:"text-[10px] font-semibold text-gray-500 uppercase tracking-wider",children:t}),e.jsx("span",{className:`text-xl font-bold tabular-nums ${l}`,children:r}),n&&e.jsx("span",{className:"text-xs text-gray-500",children:n})]})}const U={0:"bg-blue-500",1:"bg-red-500",2:"bg-orange-500"};function X(t){return U[t]??"bg-yellow-500"}function Y(t){return t===0?"Source":t===1?"Direct":t===2?"2-hop":`${t}-hop`}function K({data:t}){const r=V(t),n=r.get(1)??0,l=t.totalFiles-1-n,i=Math.max(...t.entries.map(a=>a.depth));return e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"grid grid-cols-2 gap-2 sm:grid-cols-4",children:[e.jsx(I,{label:"Files affected",value:t.totalFiles-1,sub:"excluding source",color:"text-red-400"}),e.jsx(I,{label:"Symbols affected",value:t.totalSymbols,color:"text-orange-400"}),e.jsx(I,{label:"Direct impact",value:n,sub:"1-hop files",color:"text-red-300"}),e.jsx(I,{label:"Indirect impact",value:l,sub:"2+ hop files",color:"text-yellow-300"})]}),e.jsxs("div",{className:"bg-gray-800 rounded-lg px-4 py-3 flex items-center justify-between",children:[e.jsx("span",{className:"text-xs font-semibold text-gray-500 uppercase tracking-wider",children:"Estimated review effort"}),e.jsx("span",{className:"text-sm font-medium text-gray-200",children:q(t.totalFiles-1)})]}),i>0&&e.jsxs("div",{className:"bg-gray-800 rounded-lg px-4 py-3 space-y-2",children:[e.jsx("span",{className:"text-[10px] font-semibold text-gray-500 uppercase tracking-wider block",children:"Impact by depth"}),Array.from({length:i+1},(a,p)=>p).filter(a=>a>0).map(a=>{const p=r.get(a)??0,o=Math.max(...Array.from(r.values())),c=o>0?p/o*100:0;return e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("span",{className:"text-xs text-gray-500 w-12 shrink-0",children:Y(a)}),e.jsx("div",{className:"flex-1 h-2 bg-gray-700 rounded-full overflow-hidden",children:e.jsx("div",{className:`h-full rounded-full ${X(a)}`,style:{width:`${c}%`}})}),e.jsx("span",{className:"text-xs text-gray-400 tabular-nums w-8 text-right",children:p})]},a)})]})]})}const k=680,j=k/2,v=k/2,Q=18,Z=24,J=[0,130,220,295];function D(t){return J[t]??295+(t-3)*60}function w(t){return t===0?"#3b82f6":t===1?"#ef4444":t===2?"#f97316":"#eab308"}function ee(t){return t===1?"rgba(239,68,68,0.18)":t===2?"rgba(249,115,22,0.18)":"rgba(234,179,8,0.18)"}function B(t){return t===1?"Direct dependents":t===2?"2-hop":`${t}-hop`}const P=28;function te(t){const r=new Map;for(const l of t.entries){const i=r.get(l.depth)??[];i.push(l),r.set(l.depth,i)}const n=[];for(const[l,i]of r){if(l===0){n.push({entry:i[0],x:j,y:v});continue}const a=D(l),p=i.slice(0,P);for(let o=0;o<p.length;o++){const c=2*Math.PI/p.length*o-Math.PI/2;n.push({entry:p[o],x:j+a*Math.cos(c),y:v+a*Math.sin(c)})}}return n}function se({node:t}){const r=t.entry,n=w(r.depth),l=r.depth===0?"Source":B(r.depth);return e.jsx("div",{className:"absolute z-20 pointer-events-none",style:{left:t.x/k*100+"%",top:t.y/k*100+"%",transform:"translate(-50%, -120%)"},children:e.jsxs("div",{className:"bg-gray-900 border border-gray-700 rounded-lg px-3 py-2 shadow-lg min-w-[160px] max-w-[260px]",children:[e.jsxs("div",{className:"flex items-center gap-2 mb-1",children:[e.jsx("span",{className:"w-2.5 h-2.5 rounded-full shrink-0",style:{background:n}}),e.jsx("span",{className:"text-[10px] font-semibold uppercase tracking-wider text-gray-500",children:l})]}),e.jsx("p",{className:"text-xs font-mono text-gray-200 break-all leading-relaxed",children:r.filePath}),e.jsxs("p",{className:"text-[10px] text-gray-500 mt-1",children:[r.symbolCount," symbol",r.symbolCount!==1?"s":""]})]})})}function re({data:t,onNodeClick:r}){const n=te(t),[l,i]=h.useState(null),a=h.useRef(null);h.useEffect(()=>{const s=()=>i(null);return window.addEventListener("click",s),()=>window.removeEventListener("click",s)},[]);const p=h.useCallback((s,u)=>{s.stopPropagation(),r==null||r(u.entry.filePath)},[r]),o=Math.max(...t.entries.map(s=>s.depth)),c=new Map;for(const s of t.entries)c.set(s.depth,(c.get(s.depth)??0)+1);return e.jsxs("div",{className:"relative w-full h-full flex items-center justify-center overflow-hidden",children:[e.jsx("div",{className:"absolute top-3 left-3 z-10 flex flex-col gap-1",children:[{depth:0,label:"Source"},{depth:1,label:"Direct (1-hop)"},{depth:2,label:"2-hop"},{depth:3,label:"3+ hop"}].filter(({depth:s})=>s===0||(c.get(s)??0)>0).map(({depth:s,label:u})=>e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"w-2.5 h-2.5 rounded-full shrink-0",style:{background:w(s)}}),e.jsx("span",{className:"text-[10px] text-gray-400",children:u})]},s))}),e.jsxs("svg",{ref:a,viewBox:`0 0 ${k} ${k}`,className:"w-full h-full max-w-[680px] max-h-[680px]","aria-label":"Blast radius radial graph",children:[Array.from({length:o},(s,u)=>u+1).map(s=>e.jsx("circle",{cx:j,cy:v,r:D(s),fill:ee(s),stroke:w(s),strokeWidth:1,strokeDasharray:"4 4",opacity:.5},s)),Array.from({length:o},(s,u)=>u+1).map(s=>{const u=c.get(s)??0;if(u===0)return null;const f=u>P?u-P:0,g=D(s);return e.jsx("g",{children:e.jsxs("text",{x:j,y:v-g+14,textAnchor:"middle",fill:w(s),fontSize:10,opacity:.7,children:[B(s)," (",u,f>0?`, +${f} more`:"",")"]})},s)}),n.filter(s=>s.entry.depth>0).map(s=>{const u=s.entry.depth-1,f=D(u),g=s.x-j,d=s.y-v,m=Math.sqrt(g*g+d*d),y=m===0?j:j+g/m*f,R=m===0?v:v+d/m*f;return e.jsx("line",{x1:y,y1:R,x2:s.x,y2:s.y,stroke:w(s.entry.depth),strokeWidth:1,strokeOpacity:.35},s.entry.filePath)}),n.map(s=>{const u=s.entry.depth===0?Z:Q,f=w(s.entry.depth),g=s.entry.filePath.split("/").pop()??s.entry.filePath,d=g.length>14?g.slice(0,12)+"…":g,m=(l==null?void 0:l.entry.filePath)===s.entry.filePath;return e.jsxs("g",{role:"button",tabIndex:0,"aria-label":`${s.entry.filePath} — ${s.entry.symbolCount} symbols`,style:{cursor:"pointer"},onMouseEnter:()=>i(s),onMouseLeave:()=>i(null),onClick:y=>p(y,s),onKeyDown:y=>{(y.key==="Enter"||y.key===" ")&&(y.preventDefault(),r==null||r(s.entry.filePath))},children:[e.jsx("circle",{cx:s.x,cy:s.y,r:u+(m?3:0),fill:f,fillOpacity:m?.9:.75,stroke:f,strokeWidth:m?2.5:1.5,style:{transition:"r 0.12s, fill-opacity 0.12s"}}),s.entry.depth===0&&e.jsx("text",{x:s.x,y:s.y+4,textAnchor:"middle",fill:"white",fontSize:10,fontWeight:"bold",pointerEvents:"none",children:s.entry.symbolCount}),e.jsx("text",{x:s.x,y:s.y+u+14,textAnchor:"middle",fill:m?"white":"#9ca3af",fontSize:9,pointerEvents:"none",children:d})]},s.entry.filePath)})]}),l&&e.jsx(se,{node:l})]})}function ae(t){return t===0?"text-blue-400":t===1?"text-red-400":t===2?"text-orange-400":"text-yellow-400"}function ne(t){return t===0?"bg-blue-500/20 text-blue-300 border-blue-500/30":t===1?"bg-red-500/20 text-red-300 border-red-500/30":t===2?"bg-orange-500/20 text-orange-300 border-orange-500/30":"bg-yellow-500/20 text-yellow-300 border-yellow-500/30"}function le(t){return t===0?"Source file":t===1?"Direct dependents (1 hop)":t===2?"2-hop dependents":`${t}-hop dependents`}function ie({entry:t,repoId:r}){const[n,l]=h.useState(!1),i=t.symbols.length>0;return e.jsxs("div",{className:"border border-gray-800 rounded-lg overflow-hidden",children:[e.jsxs("button",{type:"button",onClick:()=>l(a=>!a),className:"w-full flex items-center gap-3 px-3 py-2.5 bg-gray-800/50 hover:bg-gray-800 transition-colors text-left","aria-expanded":n,children:[e.jsx("svg",{width:"10",height:"10",viewBox:"0 0 10 10",fill:"none","aria-hidden":"true",className:`shrink-0 transition-transform ${n?"rotate-90":""}`,children:e.jsx("path",{d:"M3 1.5L7 5L3 8.5",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})}),e.jsx("code",{className:"flex-1 text-xs font-mono text-gray-200 truncate",children:t.filePath}),e.jsxs("span",{className:"text-[10px] text-gray-500 shrink-0",children:[t.symbolCount," symbol",t.symbolCount!==1?"s":""]})]}),n&&i&&e.jsx("div",{className:"divide-y divide-gray-800",children:t.symbols.map(a=>e.jsxs("div",{className:"px-3 py-2 flex items-start gap-2 hover:bg-gray-800/30 transition-colors",children:[e.jsx("span",{className:"text-[9px] font-semibold uppercase tracking-wider bg-gray-700 text-gray-400 rounded px-1.5 py-0.5 shrink-0 mt-px",children:a.kind}),e.jsxs("div",{className:"flex-1 min-w-0",children:[r?e.jsx(O,{to:`/symbols/${encodeURIComponent(a.id)}?repoId=${encodeURIComponent(r)}`,className:"text-xs font-medium text-blue-400 hover:text-blue-300 transition-colors font-mono",children:a.name}):e.jsx("span",{className:"text-xs font-medium text-gray-300 font-mono",children:a.name}),a.signature&&a.signature!==a.name&&e.jsx("p",{className:"text-[10px] text-gray-500 font-mono truncate mt-0.5",children:a.signature})]})]},a.id))}),n&&!i&&e.jsx("p",{className:"px-4 py-2 text-xs text-gray-600 italic",children:"No symbols indexed in this file."})]})}function oe({depth:t,entries:r,repoId:n}){const[l,i]=h.useState(t<=2);return e.jsxs("div",{children:[e.jsxs("button",{type:"button",onClick:()=>i(a=>!a),className:"flex items-center gap-2 w-full py-2 text-left group","aria-expanded":l,children:[e.jsx("svg",{width:"12",height:"12",viewBox:"0 0 12 12",fill:"none","aria-hidden":"true",className:`shrink-0 transition-transform text-gray-500 ${l?"rotate-90":""}`,children:e.jsx("path",{d:"M4 2L8 6L4 10",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})}),e.jsx("span",{className:`text-xs font-semibold ${ae(t)}`,children:le(t)}),e.jsx("span",{className:`text-[10px] font-semibold px-1.5 py-0.5 rounded border ${ne(t)}`,children:r.length})]}),l&&e.jsx("div",{className:"pl-4 mt-1 space-y-1.5",children:r.map(a=>e.jsx(ie,{entry:a,repoId:n},a.filePath))})]})}function ce({data:t,repoId:r}){const n=new Map;for(const i of t.entries){const a=n.get(i.depth)??[];a.push(i),n.set(i.depth,a)}const l=Array.from(n.keys()).sort((i,a)=>i-a);return t.entries.length===0?e.jsx("div",{className:"flex items-center justify-center h-32 text-gray-500 text-sm",children:"No dependent files found."}):e.jsx("div",{className:"space-y-2",children:l.map(i=>e.jsx(oe,{depth:i,entries:n.get(i),repoId:r},i))})}function de({repos:t,selectedId:r,onSelect:n}){return e.jsxs("select",{value:r??"",onChange:l=>n(l.target.value),className:"px-3 py-1.5 bg-gray-800 border border-gray-700 rounded text-sm text-gray-100 focus:outline-none focus:border-blue-500","aria-label":"Select repository",children:[!r&&e.jsx("option",{value:"",children:"Select repository…"}),t.map(l=>e.jsx("option",{value:l.repoId,children:l.rootPath.split(/[/\\]/).pop()??l.repoId},l.repoId))]})}function xe({value:t,onChange:r}){return e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"text-xs text-gray-500",children:"Max depth"}),e.jsx("input",{type:"range",min:1,max:6,value:t,onChange:n=>r(Number(n.target.value)),className:"w-24 accent-blue-500","aria-label":"Max depth"}),e.jsx("span",{className:"text-xs font-mono text-gray-300 w-4",children:t})]})}function ue({repoId:t,selectedSymbol:r,onSelect:n}){const l=h.useRef(null),i=T({repoId:t,debounceMs:300}),a=c=>{i.setQuery(c)},p=c=>{n(c),i.clearSearch()},o=i.query.length>0&&i.results.length>0;return e.jsxs("div",{className:"relative",children:[r&&e.jsxs("div",{className:"mb-2 flex items-center gap-2 px-3 py-2 bg-blue-600/10 border border-blue-600/30 rounded-lg",children:[e.jsx("span",{className:"text-[10px] font-semibold uppercase tracking-wider bg-blue-600/30 text-blue-300 rounded px-1.5 py-0.5 shrink-0",children:r.kind}),e.jsx("span",{className:"text-sm text-blue-300 font-mono font-medium flex-1 truncate",children:r.name}),e.jsx("button",{type:"button",onClick:()=>n({...r,id:""}),className:"text-gray-500 hover:text-gray-300 transition-colors text-xs","aria-label":"Clear symbol selection",children:"✕"})]}),e.jsxs("div",{className:"relative",children:[e.jsx("span",{className:"absolute left-3 top-1/2 -translate-y-1/2 text-gray-500 pointer-events-none",children:e.jsxs("svg",{width:"13",height:"13",viewBox:"0 0 14 14",fill:"none","aria-hidden":"true",children:[e.jsx("circle",{cx:"6",cy:"6",r:"4.5",stroke:"currentColor",strokeWidth:"1.5"}),e.jsx("line",{x1:"9.5",y1:"9.5",x2:"12.5",y2:"12.5",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"})]})}),e.jsx("input",{ref:l,type:"search",value:i.query,onChange:c=>a(c.target.value),placeholder:t?"Search for a symbol…":"Select a repo first…",disabled:!t,className:"w-full pl-8 pr-4 py-2 bg-gray-800 border border-gray-700 rounded text-sm text-gray-100 placeholder-gray-500 focus:outline-none focus:border-blue-500 disabled:opacity-40","aria-label":"Search for a symbol to analyze"}),i.loading&&e.jsx("span",{className:"absolute right-3 top-1/2 -translate-y-1/2",children:e.jsx("span",{className:"block w-3 h-3 rounded-full border-2 border-blue-500 border-t-transparent animate-spin"})})]}),o&&e.jsx("div",{className:"absolute z-30 top-full left-0 right-0 mt-1 bg-gray-900 border border-gray-700 rounded-lg shadow-xl max-h-64 overflow-y-auto",children:i.results.slice(0,20).map(c=>e.jsxs("button",{type:"button",onClick:()=>p(c),className:"w-full text-left px-3 py-2.5 flex items-center gap-2 hover:bg-gray-800 transition-colors",children:[e.jsx("span",{className:"text-[9px] font-semibold uppercase tracking-wider bg-gray-700 text-gray-400 rounded px-1.5 py-0.5 shrink-0",children:c.kind}),e.jsxs("div",{className:"flex-1 min-w-0",children:[e.jsx("p",{className:"text-xs font-mono text-gray-200 truncate",children:c.name}),e.jsx("p",{className:"text-[10px] text-gray-500 truncate",children:c.filePath})]})]},c.id))})]})}function he({mode:t,onChange:r}){return e.jsx("div",{className:"flex rounded-lg border border-gray-700 overflow-hidden",children:["graph","list"].map(n=>e.jsx("button",{type:"button",onClick:()=>r(n),className:`px-3 py-1.5 text-xs font-medium transition-colors capitalize ${t===n?"bg-blue-600 text-white":"bg-gray-800 text-gray-400 hover:text-gray-200"}`,"aria-pressed":t===n,children:n==="graph"?e.jsxs("span",{className:"flex items-center gap-1",children:[e.jsxs("svg",{width:"12",height:"12",viewBox:"0 0 12 12",fill:"none","aria-hidden":"true",children:[e.jsx("circle",{cx:"6",cy:"2",r:"1.5",fill:"currentColor"}),e.jsx("circle",{cx:"2",cy:"9",r:"1.5",fill:"currentColor"}),e.jsx("circle",{cx:"10",cy:"9",r:"1.5",fill:"currentColor"}),e.jsx("line",{x1:"6",y1:"3.5",x2:"2.8",y2:"7.7",stroke:"currentColor",strokeWidth:"1"}),e.jsx("line",{x1:"6",y1:"3.5",x2:"9.2",y2:"7.7",stroke:"currentColor",strokeWidth:"1"})]}),"Graph"]}):e.jsxs("span",{className:"flex items-center gap-1",children:[e.jsxs("svg",{width:"12",height:"12",viewBox:"0 0 12 12",fill:"none","aria-hidden":"true",children:[e.jsx("rect",{x:"1",y:"2",width:"10",height:"1.5",rx:"0.5",fill:"currentColor"}),e.jsx("rect",{x:"1",y:"5.25",width:"10",height:"1.5",rx:"0.5",fill:"currentColor"}),e.jsx("rect",{x:"1",y:"8.5",width:"7",height:"1.5",rx:"0.5",fill:"currentColor"})]}),"List"]})},n))})}function pe({hasSymbol:t}){return e.jsxs("div",{className:"flex flex-col items-center justify-center h-full text-center gap-4 py-16 px-8",children:[e.jsx("div",{className:"w-16 h-16 rounded-full bg-gray-800 flex items-center justify-center mb-2",children:e.jsxs("svg",{width:"28",height:"28",viewBox:"0 0 28 28",fill:"none","aria-hidden":"true",children:[e.jsx("circle",{cx:"14",cy:"14",r:"4",fill:"#3b82f6",opacity:"0.8"}),e.jsx("circle",{cx:"14",cy:"14",r:"8",stroke:"#ef4444",strokeWidth:"1.5",strokeDasharray:"3 3",opacity:"0.5"}),e.jsx("circle",{cx:"14",cy:"14",r:"12",stroke:"#f97316",strokeWidth:"1",strokeDasharray:"3 3",opacity:"0.3"})]})}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-gray-300 font-medium mb-1",children:t?"Loading blast radius…":"Select a symbol to analyze"}),e.jsx("p",{className:"text-sm text-gray-500 max-w-xs",children:t?"Traversing the dependency graph…":"Search for a function, class, or type to see which files would be affected if it changed."})]})]})}function be(){const[t,r]=G(),n=M(x=>x.repos),l=M(x=>x.reposLoaded),i=M(x=>x.setRepos),[a,p]=h.useState(t.get("repoId")??null);h.useEffect(()=>{l||$.listRepos().then(x=>i(x.repos)).catch(()=>{})},[l,i]),h.useEffect(()=>{!a&&n.length>0&&p(n[0].repoId)},[n,a]);const[o,c]=h.useState(null),s=t.get("symbolId"),u=t.get("symbolName"),[f,g]=h.useState(3),[d,m]=h.useState(null),[y,R]=h.useState(!1),[N,C]=h.useState(null),[L,A]=h.useState("graph"),E=h.useCallback(async(x,b,_)=>{R(!0),C(null),m(null);try{const S=await $.getBlastRadius(x,b,_);m(S)}catch(S){C(S instanceof H?S.message:String(S))}finally{R(!1)}},[]);h.useEffect(()=>{if(!a)return;const x=(o==null?void 0:o.id)||s;x&&E(a,x,f)},[a,o,s,f,E]);const F=h.useCallback(x=>{if(!x.id){c(null),m(null),C(null),r(b=>(b.delete("symbolId"),b.delete("symbolName"),b));return}c(x),r(b=>(a&&b.set("repoId",a),b.set("symbolId",x.id),b.set("symbolName",x.name),b))},[a,r]),W=h.useCallback(x=>{p(x),c(null),m(null),C(null)},[]),z=!!(o!=null&&o.id||s);return e.jsxs("div",{className:"h-full flex overflow-hidden",children:[e.jsxs("aside",{className:"w-72 shrink-0 border-r border-gray-800 flex flex-col overflow-hidden bg-gray-950",children:[e.jsx("div",{className:"px-4 py-3 border-b border-gray-800 shrink-0",children:e.jsx("h2",{className:"text-xs font-semibold text-gray-400 uppercase tracking-wider",children:"Blast Radius Analysis"})}),e.jsxs("div",{className:"flex-1 overflow-y-auto p-4 space-y-5",children:[e.jsxs("div",{className:"space-y-1.5",children:[e.jsx("label",{className:"block text-[10px] font-semibold text-gray-500 uppercase tracking-wider",children:"Repository"}),e.jsx(de,{repos:n,selectedId:a,onSelect:W})]}),e.jsxs("div",{className:"space-y-1.5",children:[e.jsx("label",{className:"block text-[10px] font-semibold text-gray-500 uppercase tracking-wider",children:"Symbol"}),e.jsx(ue,{repoId:a,selectedSymbol:o,onSelect:F})]}),e.jsxs("div",{className:"space-y-1.5",children:[e.jsx("label",{className:"block text-[10px] font-semibold text-gray-500 uppercase tracking-wider",children:"Analysis depth"}),e.jsx(xe,{value:f,onChange:g})]}),!o&&s&&u&&e.jsxs("div",{className:"px-3 py-2 bg-blue-600/10 border border-blue-600/30 rounded-lg",children:[e.jsx("p",{className:"text-[10px] text-gray-500 mb-0.5",children:"Analyzing"}),e.jsx("p",{className:"text-xs font-mono text-blue-300 truncate",children:u})]}),d&&e.jsxs("div",{className:"space-y-1.5",children:[e.jsx("label",{className:"block text-[10px] font-semibold text-gray-500 uppercase tracking-wider",children:"Summary"}),e.jsx(K,{data:d})]})]})]}),e.jsxs("div",{className:"flex-1 flex flex-col overflow-hidden",children:[e.jsxs("div",{className:"flex items-center gap-3 px-4 py-2 border-b border-gray-800 shrink-0 bg-gray-900",children:[e.jsx("span",{className:"text-sm font-semibold text-gray-300",children:d?`${d.symbolName} — ${d.totalFiles-1} file${d.totalFiles-1!==1?"s":""} affected`:"Blast Radius"}),e.jsxs("div",{className:"ml-auto flex items-center gap-3",children:[d&&e.jsx(he,{mode:L,onChange:A}),d&&e.jsx("button",{type:"button",onClick:()=>{const x=(o==null?void 0:o.id)||s;a&&x&&E(a,x,f)},className:"px-2 py-1 text-xs bg-gray-800 hover:bg-gray-700 border border-gray-700 rounded text-gray-300 transition-colors",children:"Refresh"})]})]}),e.jsxs("div",{className:"flex-1 overflow-hidden relative",children:[y&&e.jsxs("div",{className:"flex items-center justify-center h-full gap-2 text-gray-500",children:[e.jsx("span",{className:"block w-4 h-4 rounded-full border-2 border-blue-500 border-t-transparent animate-spin"}),e.jsx("span",{className:"text-sm",children:"Analyzing blast radius…"})]}),!y&&N&&e.jsx("div",{className:"flex items-center justify-center h-full",children:e.jsxs("div",{className:"text-center max-w-sm",children:[e.jsx("div",{className:"text-red-400 font-medium mb-1",children:"Analysis failed"}),e.jsx("div",{className:"text-sm text-gray-500",children:N})]})}),!y&&!N&&!d&&e.jsx(pe,{hasSymbol:z}),!y&&!N&&d&&d.totalFiles<=1&&e.jsxs("div",{className:"flex flex-col items-center justify-center h-full text-center gap-3 text-gray-500",children:[e.jsxs("svg",{width:"40",height:"40",viewBox:"0 0 40 40",fill:"none","aria-hidden":"true",children:[e.jsx("circle",{cx:"20",cy:"20",r:"8",fill:"#3b82f6",fillOpacity:"0.2",stroke:"#3b82f6",strokeWidth:"1.5"}),e.jsx("text",{x:"20",y:"24",textAnchor:"middle",fill:"#3b82f6",fontSize:"10",fontWeight:"bold",children:"0"})]}),e.jsxs("div",{children:[e.jsx("p",{className:"text-gray-300 font-medium",children:"No dependents found"}),e.jsxs("p",{className:"text-sm mt-0.5",children:["Nothing imports ",e.jsx("code",{className:"text-blue-400 font-mono",children:d.sourceFile})," within ",f," hop",f!==1?"s":"","."]})]})]}),!y&&!N&&d&&d.totalFiles>1&&L==="graph"&&e.jsx(re,{data:d}),!y&&!N&&d&&d.totalFiles>1&&L==="list"&&e.jsx("div",{className:"h-full overflow-y-auto p-4 scrollbar-thin",children:e.jsx(ce,{data:d,repoId:a})})]})]})]})}export{be as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.react-flow{direction:ltr;--xy-edge-stroke-default: #b1b1b7;--xy-edge-stroke-width-default: 1;--xy-edge-stroke-selected-default: #555;--xy-connectionline-stroke-default: #b1b1b7;--xy-connectionline-stroke-width-default: 1;--xy-attribution-background-color-default: rgba(255, 255, 255, .5);--xy-minimap-background-color-default: #fff;--xy-minimap-mask-background-color-default: rgba(240, 240, 240, .6);--xy-minimap-mask-stroke-color-default: transparent;--xy-minimap-mask-stroke-width-default: 1;--xy-minimap-node-background-color-default: #e2e2e2;--xy-minimap-node-stroke-color-default: transparent;--xy-minimap-node-stroke-width-default: 2;--xy-background-color-default: transparent;--xy-background-pattern-dots-color-default: #91919a;--xy-background-pattern-lines-color-default: #eee;--xy-background-pattern-cross-color-default: #e2e2e2;background-color:var(--xy-background-color, var(--xy-background-color-default));--xy-node-color-default: inherit;--xy-node-border-default: 1px solid #1a192b;--xy-node-background-color-default: #fff;--xy-node-group-background-color-default: rgba(240, 240, 240, .25);--xy-node-boxshadow-hover-default: 0 1px 4px 1px rgba(0, 0, 0, .08);--xy-node-boxshadow-selected-default: 0 0 0 .5px #1a192b;--xy-node-border-radius-default: 3px;--xy-handle-background-color-default: #1a192b;--xy-handle-border-color-default: #fff;--xy-selection-background-color-default: rgba(0, 89, 220, .08);--xy-selection-border-default: 1px dotted rgba(0, 89, 220, .8);--xy-controls-button-background-color-default: #fefefe;--xy-controls-button-background-color-hover-default: #f4f4f4;--xy-controls-button-color-default: inherit;--xy-controls-button-color-hover-default: inherit;--xy-controls-button-border-color-default: #eee;--xy-controls-box-shadow-default: 0 0 2px 1px rgba(0, 0, 0, .08);--xy-edge-label-background-color-default: #ffffff;--xy-edge-label-color-default: inherit;--xy-resize-background-color-default: #3367d9}.react-flow.dark{--xy-edge-stroke-default: #3e3e3e;--xy-edge-stroke-width-default: 1;--xy-edge-stroke-selected-default: #727272;--xy-connectionline-stroke-default: #b1b1b7;--xy-connectionline-stroke-width-default: 1;--xy-attribution-background-color-default: rgba(150, 150, 150, .25);--xy-minimap-background-color-default: #141414;--xy-minimap-mask-background-color-default: rgba(60, 60, 60, .6);--xy-minimap-mask-stroke-color-default: transparent;--xy-minimap-mask-stroke-width-default: 1;--xy-minimap-node-background-color-default: #2b2b2b;--xy-minimap-node-stroke-color-default: transparent;--xy-minimap-node-stroke-width-default: 2;--xy-background-color-default: #141414;--xy-background-pattern-dots-color-default: #777;--xy-background-pattern-lines-color-default: #777;--xy-background-pattern-cross-color-default: #777;--xy-node-color-default: #f8f8f8;--xy-node-border-default: 1px solid #3c3c3c;--xy-node-background-color-default: #1e1e1e;--xy-node-group-background-color-default: rgba(240, 240, 240, .25);--xy-node-boxshadow-hover-default: 0 1px 4px 1px rgba(255, 255, 255, .08);--xy-node-boxshadow-selected-default: 0 0 0 .5px #999;--xy-handle-background-color-default: #bebebe;--xy-handle-border-color-default: #1e1e1e;--xy-selection-background-color-default: rgba(200, 200, 220, .08);--xy-selection-border-default: 1px dotted rgba(200, 200, 220, .8);--xy-controls-button-background-color-default: #2b2b2b;--xy-controls-button-background-color-hover-default: #3e3e3e;--xy-controls-button-color-default: #f8f8f8;--xy-controls-button-color-hover-default: #fff;--xy-controls-button-border-color-default: #5b5b5b;--xy-controls-box-shadow-default: 0 0 2px 1px rgba(0, 0, 0, .08);--xy-edge-label-background-color-default: #141414;--xy-edge-label-color-default: #f8f8f8}.react-flow__background{background-color:var(--xy-background-color-props, var(--xy-background-color, var(--xy-background-color-default)));pointer-events:none;z-index:-1}.react-flow__container{position:absolute;width:100%;height:100%;top:0;left:0}.react-flow__pane{z-index:1}.react-flow__pane.draggable{cursor:grab}.react-flow__pane.dragging{cursor:grabbing}.react-flow__pane.selection{cursor:pointer}.react-flow__viewport{transform-origin:0 0;z-index:2;pointer-events:none}.react-flow__renderer{z-index:4}.react-flow__selection{z-index:6}.react-flow__nodesselection-rect:focus,.react-flow__nodesselection-rect:focus-visible{outline:none}.react-flow__edge-path{stroke:var(--xy-edge-stroke, var(--xy-edge-stroke-default));stroke-width:var(--xy-edge-stroke-width, var(--xy-edge-stroke-width-default));fill:none}.react-flow__connection-path{stroke:var(--xy-connectionline-stroke, var(--xy-connectionline-stroke-default));stroke-width:var(--xy-connectionline-stroke-width, var(--xy-connectionline-stroke-width-default));fill:none}.react-flow .react-flow__edges{position:absolute}.react-flow .react-flow__edges svg{overflow:visible;position:absolute;pointer-events:none}.react-flow__edge{pointer-events:visibleStroke}.react-flow__edge.selectable{cursor:pointer}.react-flow__edge.animated path{stroke-dasharray:5;animation:dashdraw .5s linear infinite}.react-flow__edge.animated path.react-flow__edge-interaction{stroke-dasharray:none;animation:none}.react-flow__edge.inactive{pointer-events:none}.react-flow__edge.selected,.react-flow__edge:focus,.react-flow__edge:focus-visible{outline:none}.react-flow__edge.selected .react-flow__edge-path,.react-flow__edge.selectable:focus .react-flow__edge-path,.react-flow__edge.selectable:focus-visible .react-flow__edge-path{stroke:var(--xy-edge-stroke-selected, var(--xy-edge-stroke-selected-default))}.react-flow__edge-textwrapper{pointer-events:all}.react-flow__edge .react-flow__edge-text{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.react-flow__arrowhead polyline{stroke:var(--xy-edge-stroke, var(--xy-edge-stroke-default))}.react-flow__arrowhead polyline.arrowclosed{fill:var(--xy-edge-stroke, var(--xy-edge-stroke-default))}.react-flow__connection{pointer-events:none}.react-flow__connection .animated{stroke-dasharray:5;animation:dashdraw .5s linear infinite}svg.react-flow__connectionline{z-index:1001;overflow:visible;position:absolute}.react-flow__nodes{pointer-events:none;transform-origin:0 0}.react-flow__node{position:absolute;-webkit-user-select:none;-moz-user-select:none;user-select:none;pointer-events:all;transform-origin:0 0;box-sizing:border-box;cursor:default}.react-flow__node.selectable{cursor:pointer}.react-flow__node.draggable{cursor:grab;pointer-events:all}.react-flow__node.draggable.dragging{cursor:grabbing}.react-flow__nodesselection{z-index:3;transform-origin:left top;pointer-events:none}.react-flow__nodesselection-rect{position:absolute;pointer-events:all;cursor:grab}.react-flow__handle{position:absolute;pointer-events:none;min-width:5px;min-height:5px;width:6px;height:6px;background-color:var(--xy-handle-background-color, var(--xy-handle-background-color-default));border:1px solid var(--xy-handle-border-color, var(--xy-handle-border-color-default));border-radius:100%}.react-flow__handle.connectingfrom{pointer-events:all}.react-flow__handle.connectionindicator{pointer-events:all;cursor:crosshair}.react-flow__handle-bottom{top:auto;left:50%;bottom:0;transform:translate(-50%,50%)}.react-flow__handle-top{top:0;left:50%;transform:translate(-50%,-50%)}.react-flow__handle-left{top:50%;left:0;transform:translate(-50%,-50%)}.react-flow__handle-right{top:50%;right:0;transform:translate(50%,-50%)}.react-flow__edgeupdater{cursor:move;pointer-events:all}.react-flow__pane.selection .react-flow__panel{pointer-events:none}.react-flow__panel{position:absolute;z-index:5;margin:15px}.react-flow__panel.top{top:0}.react-flow__panel.bottom{bottom:0}.react-flow__panel.top.center,.react-flow__panel.bottom.center{left:50%;transform:translate(-15px) translate(-50%)}.react-flow__panel.left{left:0}.react-flow__panel.right{right:0}.react-flow__panel.left.center,.react-flow__panel.right.center{top:50%;transform:translateY(-15px) translateY(-50%)}.react-flow__attribution{font-size:10px;background:var(--xy-attribution-background-color, var(--xy-attribution-background-color-default));padding:2px 3px;margin:0}.react-flow__attribution a{text-decoration:none;color:#999}@keyframes dashdraw{0%{stroke-dashoffset:10}}.react-flow__edgelabel-renderer{position:absolute;width:100%;height:100%;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;left:0;top:0}.react-flow__viewport-portal{position:absolute;width:100%;height:100%;left:0;top:0;-webkit-user-select:none;-moz-user-select:none;user-select:none}.react-flow__minimap{background:var( --xy-minimap-background-color-props, var(--xy-minimap-background-color, var(--xy-minimap-background-color-default)) )}.react-flow__minimap-svg{display:block}.react-flow__minimap-mask{fill:var( --xy-minimap-mask-background-color-props, var(--xy-minimap-mask-background-color, var(--xy-minimap-mask-background-color-default)) );stroke:var( --xy-minimap-mask-stroke-color-props, var(--xy-minimap-mask-stroke-color, var(--xy-minimap-mask-stroke-color-default)) );stroke-width:var( --xy-minimap-mask-stroke-width-props, var(--xy-minimap-mask-stroke-width, var(--xy-minimap-mask-stroke-width-default)) )}.react-flow__minimap-node{fill:var( --xy-minimap-node-background-color-props, var(--xy-minimap-node-background-color, var(--xy-minimap-node-background-color-default)) );stroke:var( --xy-minimap-node-stroke-color-props, var(--xy-minimap-node-stroke-color, var(--xy-minimap-node-stroke-color-default)) );stroke-width:var( --xy-minimap-node-stroke-width-props, var(--xy-minimap-node-stroke-width, var(--xy-minimap-node-stroke-width-default)) )}.react-flow__background-pattern.dots{fill:var( --xy-background-pattern-color-props, var(--xy-background-pattern-color, var(--xy-background-pattern-dots-color-default)) )}.react-flow__background-pattern.lines{stroke:var( --xy-background-pattern-color-props, var(--xy-background-pattern-color, var(--xy-background-pattern-lines-color-default)) )}.react-flow__background-pattern.cross{stroke:var( --xy-background-pattern-color-props, var(--xy-background-pattern-color, var(--xy-background-pattern-cross-color-default)) )}.react-flow__controls{display:flex;flex-direction:column;box-shadow:var(--xy-controls-box-shadow, var(--xy-controls-box-shadow-default))}.react-flow__controls.horizontal{flex-direction:row}.react-flow__controls-button{display:flex;justify-content:center;align-items:center;height:26px;width:26px;padding:4px;border:none;background:var(--xy-controls-button-background-color, var(--xy-controls-button-background-color-default));border-bottom:1px solid var( --xy-controls-button-border-color-props, var(--xy-controls-button-border-color, var(--xy-controls-button-border-color-default)) );color:var( --xy-controls-button-color-props, var(--xy-controls-button-color, var(--xy-controls-button-color-default)) );cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none}.react-flow__controls-button svg{width:100%;max-width:12px;max-height:12px;fill:currentColor}.react-flow__edge.updating .react-flow__edge-path{stroke:#777}.react-flow__edge-text{font-size:10px}.react-flow__node.selectable:focus,.react-flow__node.selectable:focus-visible{outline:none}.react-flow__node-input,.react-flow__node-default,.react-flow__node-output,.react-flow__node-group{padding:10px;border-radius:var(--xy-node-border-radius, var(--xy-node-border-radius-default));width:150px;font-size:12px;color:var(--xy-node-color, var(--xy-node-color-default));text-align:center;border:var(--xy-node-border, var(--xy-node-border-default));background-color:var(--xy-node-background-color, var(--xy-node-background-color-default))}.react-flow__node-input.selectable:hover,.react-flow__node-default.selectable:hover,.react-flow__node-output.selectable:hover,.react-flow__node-group.selectable:hover{box-shadow:var(--xy-node-boxshadow-hover, var(--xy-node-boxshadow-hover-default))}.react-flow__node-input.selectable.selected,.react-flow__node-input.selectable:focus,.react-flow__node-input.selectable:focus-visible,.react-flow__node-default.selectable.selected,.react-flow__node-default.selectable:focus,.react-flow__node-default.selectable:focus-visible,.react-flow__node-output.selectable.selected,.react-flow__node-output.selectable:focus,.react-flow__node-output.selectable:focus-visible,.react-flow__node-group.selectable.selected,.react-flow__node-group.selectable:focus,.react-flow__node-group.selectable:focus-visible{box-shadow:var(--xy-node-boxshadow-selected, var(--xy-node-boxshadow-selected-default))}.react-flow__node-group{background-color:var(--xy-node-group-background-color, var(--xy-node-group-background-color-default))}.react-flow__nodesselection-rect,.react-flow__selection{background:var(--xy-selection-background-color, var(--xy-selection-background-color-default));border:var(--xy-selection-border, var(--xy-selection-border-default))}.react-flow__nodesselection-rect:focus,.react-flow__nodesselection-rect:focus-visible,.react-flow__selection:focus,.react-flow__selection:focus-visible{outline:none}.react-flow__controls-button:hover{background:var( --xy-controls-button-background-color-hover-props, var(--xy-controls-button-background-color-hover, var(--xy-controls-button-background-color-hover-default)) );color:var( --xy-controls-button-color-hover-props, var(--xy-controls-button-color-hover, var(--xy-controls-button-color-hover-default)) )}.react-flow__controls-button:disabled{pointer-events:none}.react-flow__controls-button:disabled svg{fill-opacity:.4}.react-flow__controls-button:last-child{border-bottom:none}.react-flow__controls.horizontal .react-flow__controls-button{border-bottom:none;border-right:1px solid var( --xy-controls-button-border-color-props, var(--xy-controls-button-border-color, var(--xy-controls-button-border-color-default)) )}.react-flow__controls.horizontal .react-flow__controls-button:last-child{border-right:none}.react-flow__resize-control{position:absolute}.react-flow__resize-control.left,.react-flow__resize-control.right{cursor:ew-resize}.react-flow__resize-control.top,.react-flow__resize-control.bottom{cursor:ns-resize}.react-flow__resize-control.top.left,.react-flow__resize-control.bottom.right{cursor:nwse-resize}.react-flow__resize-control.bottom.left,.react-flow__resize-control.top.right{cursor:nesw-resize}.react-flow__resize-control.handle{width:5px;height:5px;border:1px solid #fff;border-radius:1px;background-color:var(--xy-resize-background-color, var(--xy-resize-background-color-default));translate:-50% -50%}.react-flow__resize-control.handle.left{left:0;top:50%}.react-flow__resize-control.handle.right{left:100%;top:50%}.react-flow__resize-control.handle.top{left:50%;top:0}.react-flow__resize-control.handle.bottom{left:50%;top:100%}.react-flow__resize-control.handle.top.left,.react-flow__resize-control.handle.bottom.left{left:0}.react-flow__resize-control.handle.top.right,.react-flow__resize-control.handle.bottom.right{left:100%}.react-flow__resize-control.line{border-color:var(--xy-resize-background-color, var(--xy-resize-background-color-default));border-width:0;border-style:solid}.react-flow__resize-control.line.left,.react-flow__resize-control.line.right{width:1px;transform:translate(-50%);top:0;height:100%}.react-flow__resize-control.line.left{left:0;border-left-width:1px}.react-flow__resize-control.line.right{left:100%;border-right-width:1px}.react-flow__resize-control.line.top,.react-flow__resize-control.line.bottom{height:1px;transform:translateY(-50%);left:0;width:100%}.react-flow__resize-control.line.top{top:0;border-top-width:1px}.react-flow__resize-control.line.bottom{border-bottom-width:1px;top:100%}.react-flow__edge-textbg{fill:var(--xy-edge-label-background-color, var(--xy-edge-label-background-color-default))}.react-flow__edge-text{fill:var(--xy-edge-label-color, var(--xy-edge-label-color-default))}
|