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.
Files changed (542) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +207 -0
  3. package/dist/adapters/actix-web.d.ts +28 -0
  4. package/dist/adapters/actix-web.d.ts.map +1 -0
  5. package/dist/adapters/actix-web.js +362 -0
  6. package/dist/adapters/actix-web.js.map +1 -0
  7. package/dist/adapters/adapter-registry.d.ts +34 -0
  8. package/dist/adapters/adapter-registry.d.ts.map +1 -0
  9. package/dist/adapters/adapter-registry.js +92 -0
  10. package/dist/adapters/adapter-registry.js.map +1 -0
  11. package/dist/adapters/angular.d.ts +13 -0
  12. package/dist/adapters/angular.d.ts.map +1 -0
  13. package/dist/adapters/angular.js +348 -0
  14. package/dist/adapters/angular.js.map +1 -0
  15. package/dist/adapters/axum.d.ts +16 -0
  16. package/dist/adapters/axum.d.ts.map +1 -0
  17. package/dist/adapters/axum.js +299 -0
  18. package/dist/adapters/axum.js.map +1 -0
  19. package/dist/adapters/django-orm.d.ts +28 -0
  20. package/dist/adapters/django-orm.d.ts.map +1 -0
  21. package/dist/adapters/django-orm.js +464 -0
  22. package/dist/adapters/django-orm.js.map +1 -0
  23. package/dist/adapters/django.d.ts +16 -0
  24. package/dist/adapters/django.d.ts.map +1 -0
  25. package/dist/adapters/django.js +257 -0
  26. package/dist/adapters/django.js.map +1 -0
  27. package/dist/adapters/echo.d.ts +15 -0
  28. package/dist/adapters/echo.d.ts.map +1 -0
  29. package/dist/adapters/echo.js +142 -0
  30. package/dist/adapters/echo.js.map +1 -0
  31. package/dist/adapters/express.d.ts +15 -0
  32. package/dist/adapters/express.d.ts.map +1 -0
  33. package/dist/adapters/express.js +126 -0
  34. package/dist/adapters/express.js.map +1 -0
  35. package/dist/adapters/fastapi.d.ts +16 -0
  36. package/dist/adapters/fastapi.d.ts.map +1 -0
  37. package/dist/adapters/fastapi.js +113 -0
  38. package/dist/adapters/fastapi.js.map +1 -0
  39. package/dist/adapters/fastify.d.ts +14 -0
  40. package/dist/adapters/fastify.d.ts.map +1 -0
  41. package/dist/adapters/fastify.js +124 -0
  42. package/dist/adapters/fastify.js.map +1 -0
  43. package/dist/adapters/fiber.d.ts +15 -0
  44. package/dist/adapters/fiber.d.ts.map +1 -0
  45. package/dist/adapters/fiber.js +147 -0
  46. package/dist/adapters/fiber.js.map +1 -0
  47. package/dist/adapters/flask.d.ts +18 -0
  48. package/dist/adapters/flask.d.ts.map +1 -0
  49. package/dist/adapters/flask.js +175 -0
  50. package/dist/adapters/flask.js.map +1 -0
  51. package/dist/adapters/flutter.d.ts +19 -0
  52. package/dist/adapters/flutter.d.ts.map +1 -0
  53. package/dist/adapters/flutter.js +251 -0
  54. package/dist/adapters/flutter.js.map +1 -0
  55. package/dist/adapters/gin.d.ts +16 -0
  56. package/dist/adapters/gin.d.ts.map +1 -0
  57. package/dist/adapters/gin.js +159 -0
  58. package/dist/adapters/gin.js.map +1 -0
  59. package/dist/adapters/hibernate.d.ts +24 -0
  60. package/dist/adapters/hibernate.d.ts.map +1 -0
  61. package/dist/adapters/hibernate.js +448 -0
  62. package/dist/adapters/hibernate.js.map +1 -0
  63. package/dist/adapters/ktor.d.ts +18 -0
  64. package/dist/adapters/ktor.d.ts.map +1 -0
  65. package/dist/adapters/ktor.js +219 -0
  66. package/dist/adapters/ktor.js.map +1 -0
  67. package/dist/adapters/laravel.d.ts +19 -0
  68. package/dist/adapters/laravel.d.ts.map +1 -0
  69. package/dist/adapters/laravel.js +370 -0
  70. package/dist/adapters/laravel.js.map +1 -0
  71. package/dist/adapters/micronaut.d.ts +21 -0
  72. package/dist/adapters/micronaut.d.ts.map +1 -0
  73. package/dist/adapters/micronaut.js +435 -0
  74. package/dist/adapters/micronaut.js.map +1 -0
  75. package/dist/adapters/nestjs.d.ts +12 -0
  76. package/dist/adapters/nestjs.d.ts.map +1 -0
  77. package/dist/adapters/nestjs.js +401 -0
  78. package/dist/adapters/nestjs.js.map +1 -0
  79. package/dist/adapters/nextjs.d.ts +49 -0
  80. package/dist/adapters/nextjs.d.ts.map +1 -0
  81. package/dist/adapters/nextjs.js +412 -0
  82. package/dist/adapters/nextjs.js.map +1 -0
  83. package/dist/adapters/nuxt.d.ts +44 -0
  84. package/dist/adapters/nuxt.d.ts.map +1 -0
  85. package/dist/adapters/nuxt.js +243 -0
  86. package/dist/adapters/nuxt.js.map +1 -0
  87. package/dist/adapters/quarkus.d.ts +21 -0
  88. package/dist/adapters/quarkus.d.ts.map +1 -0
  89. package/dist/adapters/quarkus.js +395 -0
  90. package/dist/adapters/quarkus.js.map +1 -0
  91. package/dist/adapters/rails.d.ts +18 -0
  92. package/dist/adapters/rails.d.ts.map +1 -0
  93. package/dist/adapters/rails.js +363 -0
  94. package/dist/adapters/rails.js.map +1 -0
  95. package/dist/adapters/react.d.ts +18 -0
  96. package/dist/adapters/react.d.ts.map +1 -0
  97. package/dist/adapters/react.js +95 -0
  98. package/dist/adapters/react.js.map +1 -0
  99. package/dist/adapters/rocket.d.ts +19 -0
  100. package/dist/adapters/rocket.d.ts.map +1 -0
  101. package/dist/adapters/rocket.js +271 -0
  102. package/dist/adapters/rocket.js.map +1 -0
  103. package/dist/adapters/sinatra.d.ts +16 -0
  104. package/dist/adapters/sinatra.d.ts.map +1 -0
  105. package/dist/adapters/sinatra.js +114 -0
  106. package/dist/adapters/sinatra.js.map +1 -0
  107. package/dist/adapters/spring-boot.d.ts +24 -0
  108. package/dist/adapters/spring-boot.d.ts.map +1 -0
  109. package/dist/adapters/spring-boot.js +399 -0
  110. package/dist/adapters/spring-boot.js.map +1 -0
  111. package/dist/adapters/spring-kotlin.d.ts +19 -0
  112. package/dist/adapters/spring-kotlin.d.ts.map +1 -0
  113. package/dist/adapters/spring-kotlin.js +297 -0
  114. package/dist/adapters/spring-kotlin.js.map +1 -0
  115. package/dist/adapters/sqlalchemy.d.ts +28 -0
  116. package/dist/adapters/sqlalchemy.d.ts.map +1 -0
  117. package/dist/adapters/sqlalchemy.js +435 -0
  118. package/dist/adapters/sqlalchemy.js.map +1 -0
  119. package/dist/adapters/symfony.d.ts +16 -0
  120. package/dist/adapters/symfony.d.ts.map +1 -0
  121. package/dist/adapters/symfony.js +242 -0
  122. package/dist/adapters/symfony.js.map +1 -0
  123. package/dist/adapters/vapor.d.ts +21 -0
  124. package/dist/adapters/vapor.d.ts.map +1 -0
  125. package/dist/adapters/vapor.js +269 -0
  126. package/dist/adapters/vapor.js.map +1 -0
  127. package/dist/adapters/vue-preprocessor.d.ts +26 -0
  128. package/dist/adapters/vue-preprocessor.d.ts.map +1 -0
  129. package/dist/adapters/vue-preprocessor.js +82 -0
  130. package/dist/adapters/vue-preprocessor.js.map +1 -0
  131. package/dist/adapters/vue.d.ts +13 -0
  132. package/dist/adapters/vue.d.ts.map +1 -0
  133. package/dist/adapters/vue.js +134 -0
  134. package/dist/adapters/vue.js.map +1 -0
  135. package/dist/config/cli.d.ts +26 -0
  136. package/dist/config/cli.d.ts.map +1 -0
  137. package/dist/config/cli.js +291 -0
  138. package/dist/config/cli.js.map +1 -0
  139. package/dist/config/config-loader.d.ts +26 -0
  140. package/dist/config/config-loader.d.ts.map +1 -0
  141. package/dist/config/config-loader.js +168 -0
  142. package/dist/config/config-loader.js.map +1 -0
  143. package/dist/config/config-schema.d.ts +228 -0
  144. package/dist/config/config-schema.d.ts.map +1 -0
  145. package/dist/config/config-schema.js +400 -0
  146. package/dist/config/config-schema.js.map +1 -0
  147. package/dist/config/keys-cli.d.ts +37 -0
  148. package/dist/config/keys-cli.d.ts.map +1 -0
  149. package/dist/config/keys-cli.js +179 -0
  150. package/dist/config/keys-cli.js.map +1 -0
  151. package/dist/config/workspaces-cli.d.ts +2 -0
  152. package/dist/config/workspaces-cli.d.ts.map +1 -0
  153. package/dist/config/workspaces-cli.js +84 -0
  154. package/dist/config/workspaces-cli.js.map +1 -0
  155. package/dist/core/db/api-keys.d.ts +95 -0
  156. package/dist/core/db/api-keys.d.ts.map +1 -0
  157. package/dist/core/db/api-keys.js +293 -0
  158. package/dist/core/db/api-keys.js.map +1 -0
  159. package/dist/core/db/dep-store.d.ts +18 -0
  160. package/dist/core/db/dep-store.d.ts.map +1 -0
  161. package/dist/core/db/dep-store.js +155 -0
  162. package/dist/core/db/dep-store.js.map +1 -0
  163. package/dist/core/db/embedding-store.d.ts +40 -0
  164. package/dist/core/db/embedding-store.d.ts.map +1 -0
  165. package/dist/core/db/embedding-store.js +120 -0
  166. package/dist/core/db/embedding-store.js.map +1 -0
  167. package/dist/core/db/file-store.d.ts +27 -0
  168. package/dist/core/db/file-store.d.ts.map +1 -0
  169. package/dist/core/db/file-store.js +101 -0
  170. package/dist/core/db/file-store.js.map +1 -0
  171. package/dist/core/db/request-log.d.ts +40 -0
  172. package/dist/core/db/request-log.d.ts.map +1 -0
  173. package/dist/core/db/request-log.js +90 -0
  174. package/dist/core/db/request-log.js.map +1 -0
  175. package/dist/core/db/savings-store.d.ts +9 -0
  176. package/dist/core/db/savings-store.d.ts.map +1 -0
  177. package/dist/core/db/savings-store.js +64 -0
  178. package/dist/core/db/savings-store.js.map +1 -0
  179. package/dist/core/db/schema.d.ts +14 -0
  180. package/dist/core/db/schema.d.ts.map +1 -0
  181. package/dist/core/db/schema.js +235 -0
  182. package/dist/core/db/schema.js.map +1 -0
  183. package/dist/core/db/symbol-store.d.ts +64 -0
  184. package/dist/core/db/symbol-store.d.ts.map +1 -0
  185. package/dist/core/db/symbol-store.js +243 -0
  186. package/dist/core/db/symbol-store.js.map +1 -0
  187. package/dist/core/db/tenants.d.ts +91 -0
  188. package/dist/core/db/tenants.d.ts.map +1 -0
  189. package/dist/core/db/tenants.js +219 -0
  190. package/dist/core/db/tenants.js.map +1 -0
  191. package/dist/core/errors.d.ts +72 -0
  192. package/dist/core/errors.d.ts.map +1 -0
  193. package/dist/core/errors.js +140 -0
  194. package/dist/core/errors.js.map +1 -0
  195. package/dist/core/file-discovery.d.ts +17 -0
  196. package/dist/core/file-discovery.d.ts.map +1 -0
  197. package/dist/core/file-discovery.js +136 -0
  198. package/dist/core/file-discovery.js.map +1 -0
  199. package/dist/core/file-processor.d.ts +21 -0
  200. package/dist/core/file-processor.d.ts.map +1 -0
  201. package/dist/core/file-processor.js +110 -0
  202. package/dist/core/file-processor.js.map +1 -0
  203. package/dist/core/hash-cache.d.ts +18 -0
  204. package/dist/core/hash-cache.d.ts.map +1 -0
  205. package/dist/core/hash-cache.js +35 -0
  206. package/dist/core/hash-cache.js.map +1 -0
  207. package/dist/core/index-manager.d.ts +18 -0
  208. package/dist/core/index-manager.d.ts.map +1 -0
  209. package/dist/core/index-manager.js +461 -0
  210. package/dist/core/index-manager.js.map +1 -0
  211. package/dist/core/indexing-worker.d.ts +60 -0
  212. package/dist/core/indexing-worker.d.ts.map +1 -0
  213. package/dist/core/indexing-worker.js +128 -0
  214. package/dist/core/indexing-worker.js.map +1 -0
  215. package/dist/core/logger.d.ts +10 -0
  216. package/dist/core/logger.d.ts.map +1 -0
  217. package/dist/core/logger.js +40 -0
  218. package/dist/core/logger.js.map +1 -0
  219. package/dist/core/parse-dispatcher.d.ts +18 -0
  220. package/dist/core/parse-dispatcher.d.ts.map +1 -0
  221. package/dist/core/parse-dispatcher.js +74 -0
  222. package/dist/core/parse-dispatcher.js.map +1 -0
  223. package/dist/core/search/query-preprocessor.d.ts +22 -0
  224. package/dist/core/search/query-preprocessor.d.ts.map +1 -0
  225. package/dist/core/search/query-preprocessor.js +77 -0
  226. package/dist/core/search/query-preprocessor.js.map +1 -0
  227. package/dist/core/search/relevance-ranker.d.ts +34 -0
  228. package/dist/core/search/relevance-ranker.d.ts.map +1 -0
  229. package/dist/core/search/relevance-ranker.js +132 -0
  230. package/dist/core/search/relevance-ranker.js.map +1 -0
  231. package/dist/core/security.d.ts +40 -0
  232. package/dist/core/security.d.ts.map +1 -0
  233. package/dist/core/security.js +133 -0
  234. package/dist/core/security.js.map +1 -0
  235. package/dist/core/telemetry.d.ts +19 -0
  236. package/dist/core/telemetry.d.ts.map +1 -0
  237. package/dist/core/telemetry.js +101 -0
  238. package/dist/core/telemetry.js.map +1 -0
  239. package/dist/core/tenant-context.d.ts +22 -0
  240. package/dist/core/tenant-context.d.ts.map +1 -0
  241. package/dist/core/tenant-context.js +16 -0
  242. package/dist/core/tenant-context.js.map +1 -0
  243. package/dist/core/token-tracker.d.ts +39 -0
  244. package/dist/core/token-tracker.d.ts.map +1 -0
  245. package/dist/core/token-tracker.js +153 -0
  246. package/dist/core/token-tracker.js.map +1 -0
  247. package/dist/core/types.d.ts +145 -0
  248. package/dist/core/types.d.ts.map +1 -0
  249. package/dist/core/types.js +2 -0
  250. package/dist/core/types.js.map +1 -0
  251. package/dist/core/watcher/file-watcher.d.ts +18 -0
  252. package/dist/core/watcher/file-watcher.d.ts.map +1 -0
  253. package/dist/core/watcher/file-watcher.js +123 -0
  254. package/dist/core/watcher/file-watcher.js.map +1 -0
  255. package/dist/core/worker-pool.d.ts +24 -0
  256. package/dist/core/worker-pool.d.ts.map +1 -0
  257. package/dist/core/worker-pool.js +92 -0
  258. package/dist/core/worker-pool.js.map +1 -0
  259. package/dist/graph/graph-builder.d.ts +16 -0
  260. package/dist/graph/graph-builder.d.ts.map +1 -0
  261. package/dist/graph/graph-builder.js +51 -0
  262. package/dist/graph/graph-builder.js.map +1 -0
  263. package/dist/graph/graph-traversal.d.ts +57 -0
  264. package/dist/graph/graph-traversal.d.ts.map +1 -0
  265. package/dist/graph/graph-traversal.js +144 -0
  266. package/dist/graph/graph-traversal.js.map +1 -0
  267. package/dist/graph/path-resolver.d.ts +13 -0
  268. package/dist/graph/path-resolver.d.ts.map +1 -0
  269. package/dist/graph/path-resolver.js +161 -0
  270. package/dist/graph/path-resolver.js.map +1 -0
  271. package/dist/handlers/c.d.ts +3 -0
  272. package/dist/handlers/c.d.ts.map +1 -0
  273. package/dist/handlers/c.js +473 -0
  274. package/dist/handlers/c.js.map +1 -0
  275. package/dist/handlers/cpp.d.ts +3 -0
  276. package/dist/handlers/cpp.d.ts.map +1 -0
  277. package/dist/handlers/cpp.js +682 -0
  278. package/dist/handlers/cpp.js.map +1 -0
  279. package/dist/handlers/csharp.d.ts +3 -0
  280. package/dist/handlers/csharp.d.ts.map +1 -0
  281. package/dist/handlers/csharp.js +369 -0
  282. package/dist/handlers/csharp.js.map +1 -0
  283. package/dist/handlers/dart.d.ts +3 -0
  284. package/dist/handlers/dart.d.ts.map +1 -0
  285. package/dist/handlers/dart.js +596 -0
  286. package/dist/handlers/dart.js.map +1 -0
  287. package/dist/handlers/elixir.d.ts +8 -0
  288. package/dist/handlers/elixir.d.ts.map +1 -0
  289. package/dist/handlers/elixir.js +412 -0
  290. package/dist/handlers/elixir.js.map +1 -0
  291. package/dist/handlers/go.d.ts +3 -0
  292. package/dist/handlers/go.d.ts.map +1 -0
  293. package/dist/handlers/go.js +262 -0
  294. package/dist/handlers/go.js.map +1 -0
  295. package/dist/handlers/handler-registry.d.ts +20 -0
  296. package/dist/handlers/handler-registry.d.ts.map +1 -0
  297. package/dist/handlers/handler-registry.js +69 -0
  298. package/dist/handlers/handler-registry.js.map +1 -0
  299. package/dist/handlers/haskell.d.ts +17 -0
  300. package/dist/handlers/haskell.d.ts.map +1 -0
  301. package/dist/handlers/haskell.js +356 -0
  302. package/dist/handlers/haskell.js.map +1 -0
  303. package/dist/handlers/java.d.ts +3 -0
  304. package/dist/handlers/java.d.ts.map +1 -0
  305. package/dist/handlers/java.js +350 -0
  306. package/dist/handlers/java.js.map +1 -0
  307. package/dist/handlers/javascript.d.ts +3 -0
  308. package/dist/handlers/javascript.d.ts.map +1 -0
  309. package/dist/handlers/javascript.js +232 -0
  310. package/dist/handlers/javascript.js.map +1 -0
  311. package/dist/handlers/kotlin.d.ts +3 -0
  312. package/dist/handlers/kotlin.d.ts.map +1 -0
  313. package/dist/handlers/kotlin.js +317 -0
  314. package/dist/handlers/kotlin.js.map +1 -0
  315. package/dist/handlers/lua.d.ts +3 -0
  316. package/dist/handlers/lua.d.ts.map +1 -0
  317. package/dist/handlers/lua.js +328 -0
  318. package/dist/handlers/lua.js.map +1 -0
  319. package/dist/handlers/php.d.ts +3 -0
  320. package/dist/handlers/php.d.ts.map +1 -0
  321. package/dist/handlers/php.js +343 -0
  322. package/dist/handlers/php.js.map +1 -0
  323. package/dist/handlers/python.d.ts +3 -0
  324. package/dist/handlers/python.d.ts.map +1 -0
  325. package/dist/handlers/python.js +343 -0
  326. package/dist/handlers/python.js.map +1 -0
  327. package/dist/handlers/r.d.ts +9 -0
  328. package/dist/handlers/r.d.ts.map +1 -0
  329. package/dist/handlers/r.js +452 -0
  330. package/dist/handlers/r.js.map +1 -0
  331. package/dist/handlers/ruby.d.ts +8 -0
  332. package/dist/handlers/ruby.d.ts.map +1 -0
  333. package/dist/handlers/ruby.js +271 -0
  334. package/dist/handlers/ruby.js.map +1 -0
  335. package/dist/handlers/rust.d.ts +3 -0
  336. package/dist/handlers/rust.d.ts.map +1 -0
  337. package/dist/handlers/rust.js +420 -0
  338. package/dist/handlers/rust.js.map +1 -0
  339. package/dist/handlers/scala.d.ts +9 -0
  340. package/dist/handlers/scala.d.ts.map +1 -0
  341. package/dist/handlers/scala.js +480 -0
  342. package/dist/handlers/scala.js.map +1 -0
  343. package/dist/handlers/swift.d.ts +3 -0
  344. package/dist/handlers/swift.d.ts.map +1 -0
  345. package/dist/handlers/swift.js +553 -0
  346. package/dist/handlers/swift.js.map +1 -0
  347. package/dist/handlers/typescript.d.ts +4 -0
  348. package/dist/handlers/typescript.d.ts.map +1 -0
  349. package/dist/handlers/typescript.js +325 -0
  350. package/dist/handlers/typescript.js.map +1 -0
  351. package/dist/index.d.ts +44 -0
  352. package/dist/index.d.ts.map +1 -0
  353. package/dist/index.js +266 -0
  354. package/dist/index.js.map +1 -0
  355. package/dist/semantic/embedding-provider.d.ts +66 -0
  356. package/dist/semantic/embedding-provider.d.ts.map +1 -0
  357. package/dist/semantic/embedding-provider.js +176 -0
  358. package/dist/semantic/embedding-provider.js.map +1 -0
  359. package/dist/semantic/hnsw-index.d.ts +96 -0
  360. package/dist/semantic/hnsw-index.d.ts.map +1 -0
  361. package/dist/semantic/hnsw-index.js +364 -0
  362. package/dist/semantic/hnsw-index.js.map +1 -0
  363. package/dist/semantic/hybrid-search.d.ts +46 -0
  364. package/dist/semantic/hybrid-search.d.ts.map +1 -0
  365. package/dist/semantic/hybrid-search.js +164 -0
  366. package/dist/semantic/hybrid-search.js.map +1 -0
  367. package/dist/semantic/query-expansion.d.ts +25 -0
  368. package/dist/semantic/query-expansion.d.ts.map +1 -0
  369. package/dist/semantic/query-expansion.js +150 -0
  370. package/dist/semantic/query-expansion.js.map +1 -0
  371. package/dist/semantic/semantic-indexer.d.ts +64 -0
  372. package/dist/semantic/semantic-indexer.d.ts.map +1 -0
  373. package/dist/semantic/semantic-indexer.js +162 -0
  374. package/dist/semantic/semantic-indexer.js.map +1 -0
  375. package/dist/semantic/text-preparation.d.ts +23 -0
  376. package/dist/semantic/text-preparation.d.ts.map +1 -0
  377. package/dist/semantic/text-preparation.js +56 -0
  378. package/dist/semantic/text-preparation.js.map +1 -0
  379. package/dist/semantic/vector-store.d.ts +81 -0
  380. package/dist/semantic/vector-store.d.ts.map +1 -0
  381. package/dist/semantic/vector-store.js +157 -0
  382. package/dist/semantic/vector-store.js.map +1 -0
  383. package/dist/server/admin-api.d.ts +88 -0
  384. package/dist/server/admin-api.d.ts.map +1 -0
  385. package/dist/server/admin-api.js +661 -0
  386. package/dist/server/admin-api.js.map +1 -0
  387. package/dist/server/auth/api-key.d.ts +105 -0
  388. package/dist/server/auth/api-key.d.ts.map +1 -0
  389. package/dist/server/auth/api-key.js +276 -0
  390. package/dist/server/auth/api-key.js.map +1 -0
  391. package/dist/server/http-server.d.ts +100 -0
  392. package/dist/server/http-server.d.ts.map +1 -0
  393. package/dist/server/http-server.js +823 -0
  394. package/dist/server/http-server.js.map +1 -0
  395. package/dist/server/mcp-server.d.ts +23 -0
  396. package/dist/server/mcp-server.d.ts.map +1 -0
  397. package/dist/server/mcp-server.js +214 -0
  398. package/dist/server/mcp-server.js.map +1 -0
  399. package/dist/server/rate-limit-store.d.ts +25 -0
  400. package/dist/server/rate-limit-store.d.ts.map +1 -0
  401. package/dist/server/rate-limit-store.js +46 -0
  402. package/dist/server/rate-limit-store.js.map +1 -0
  403. package/dist/server/rate-limiter.d.ts +59 -0
  404. package/dist/server/rate-limiter.d.ts.map +1 -0
  405. package/dist/server/rate-limiter.js +85 -0
  406. package/dist/server/rate-limiter.js.map +1 -0
  407. package/dist/server/tools/_meta.d.ts +24 -0
  408. package/dist/server/tools/_meta.d.ts.map +1 -0
  409. package/dist/server/tools/_meta.js +35 -0
  410. package/dist/server/tools/_meta.js.map +1 -0
  411. package/dist/server/tools/find-dead-code.d.ts +11 -0
  412. package/dist/server/tools/find-dead-code.d.ts.map +1 -0
  413. package/dist/server/tools/find-dead-code.js +45 -0
  414. package/dist/server/tools/find-dead-code.js.map +1 -0
  415. package/dist/server/tools/find-importers.d.ts +13 -0
  416. package/dist/server/tools/find-importers.d.ts.map +1 -0
  417. package/dist/server/tools/find-importers.js +46 -0
  418. package/dist/server/tools/find-importers.js.map +1 -0
  419. package/dist/server/tools/get-blast-radius.d.ts +15 -0
  420. package/dist/server/tools/get-blast-radius.d.ts.map +1 -0
  421. package/dist/server/tools/get-blast-radius.js +51 -0
  422. package/dist/server/tools/get-blast-radius.js.map +1 -0
  423. package/dist/server/tools/get-context-bundle.d.ts +15 -0
  424. package/dist/server/tools/get-context-bundle.d.ts.map +1 -0
  425. package/dist/server/tools/get-context-bundle.js +53 -0
  426. package/dist/server/tools/get-context-bundle.js.map +1 -0
  427. package/dist/server/tools/get-file-outline.d.ts +13 -0
  428. package/dist/server/tools/get-file-outline.d.ts.map +1 -0
  429. package/dist/server/tools/get-file-outline.js +42 -0
  430. package/dist/server/tools/get-file-outline.js.map +1 -0
  431. package/dist/server/tools/get-file-tree.d.ts +11 -0
  432. package/dist/server/tools/get-file-tree.d.ts.map +1 -0
  433. package/dist/server/tools/get-file-tree.js +63 -0
  434. package/dist/server/tools/get-file-tree.js.map +1 -0
  435. package/dist/server/tools/get-graph.d.ts +46 -0
  436. package/dist/server/tools/get-graph.d.ts.map +1 -0
  437. package/dist/server/tools/get-graph.js +168 -0
  438. package/dist/server/tools/get-graph.js.map +1 -0
  439. package/dist/server/tools/get-layer-violations.d.ts +37 -0
  440. package/dist/server/tools/get-layer-violations.d.ts.map +1 -0
  441. package/dist/server/tools/get-layer-violations.js +138 -0
  442. package/dist/server/tools/get-layer-violations.js.map +1 -0
  443. package/dist/server/tools/get-repo-outline.d.ts +13 -0
  444. package/dist/server/tools/get-repo-outline.d.ts.map +1 -0
  445. package/dist/server/tools/get-repo-outline.js +72 -0
  446. package/dist/server/tools/get-repo-outline.js.map +1 -0
  447. package/dist/server/tools/get-savings-stats.d.ts +11 -0
  448. package/dist/server/tools/get-savings-stats.d.ts.map +1 -0
  449. package/dist/server/tools/get-savings-stats.js +56 -0
  450. package/dist/server/tools/get-savings-stats.js.map +1 -0
  451. package/dist/server/tools/get-symbol-source.d.ts +13 -0
  452. package/dist/server/tools/get-symbol-source.d.ts.map +1 -0
  453. package/dist/server/tools/get-symbol-source.js +93 -0
  454. package/dist/server/tools/get-symbol-source.js.map +1 -0
  455. package/dist/server/tools/index-folder.d.ts +15 -0
  456. package/dist/server/tools/index-folder.d.ts.map +1 -0
  457. package/dist/server/tools/index-folder.js +45 -0
  458. package/dist/server/tools/index-folder.js.map +1 -0
  459. package/dist/server/tools/index-repo.d.ts +26 -0
  460. package/dist/server/tools/index-repo.d.ts.map +1 -0
  461. package/dist/server/tools/index-repo.js +164 -0
  462. package/dist/server/tools/index-repo.js.map +1 -0
  463. package/dist/server/tools/list-repos.d.ts +11 -0
  464. package/dist/server/tools/list-repos.d.ts.map +1 -0
  465. package/dist/server/tools/list-repos.js +60 -0
  466. package/dist/server/tools/list-repos.js.map +1 -0
  467. package/dist/server/tools/resolve-repo.d.ts +11 -0
  468. package/dist/server/tools/resolve-repo.d.ts.map +1 -0
  469. package/dist/server/tools/resolve-repo.js +44 -0
  470. package/dist/server/tools/resolve-repo.js.map +1 -0
  471. package/dist/server/tools/search-semantic.d.ts +56 -0
  472. package/dist/server/tools/search-semantic.d.ts.map +1 -0
  473. package/dist/server/tools/search-semantic.js +187 -0
  474. package/dist/server/tools/search-semantic.js.map +1 -0
  475. package/dist/server/tools/search-symbols.d.ts +43 -0
  476. package/dist/server/tools/search-symbols.d.ts.map +1 -0
  477. package/dist/server/tools/search-symbols.js +197 -0
  478. package/dist/server/tools/search-symbols.js.map +1 -0
  479. package/dist/server/tools/search-text.d.ts +21 -0
  480. package/dist/server/tools/search-text.d.ts.map +1 -0
  481. package/dist/server/tools/search-text.js +131 -0
  482. package/dist/server/tools/search-text.js.map +1 -0
  483. package/dist/server/transport.d.ts +59 -0
  484. package/dist/server/transport.d.ts.map +1 -0
  485. package/dist/server/transport.js +92 -0
  486. package/dist/server/transport.js.map +1 -0
  487. package/dist/summarizer/ai-summarizer.d.ts +71 -0
  488. package/dist/summarizer/ai-summarizer.d.ts.map +1 -0
  489. package/dist/summarizer/ai-summarizer.js +228 -0
  490. package/dist/summarizer/ai-summarizer.js.map +1 -0
  491. package/dist/summarizer/docstring-extractor.d.ts +9 -0
  492. package/dist/summarizer/docstring-extractor.d.ts.map +1 -0
  493. package/dist/summarizer/docstring-extractor.js +89 -0
  494. package/dist/summarizer/docstring-extractor.js.map +1 -0
  495. package/dist/summarizer/embeddings.d.ts +29 -0
  496. package/dist/summarizer/embeddings.d.ts.map +1 -0
  497. package/dist/summarizer/embeddings.js +133 -0
  498. package/dist/summarizer/embeddings.js.map +1 -0
  499. package/dist/summarizer/summarizer.d.ts +22 -0
  500. package/dist/summarizer/summarizer.d.ts.map +1 -0
  501. package/dist/summarizer/summarizer.js +86 -0
  502. package/dist/summarizer/summarizer.js.map +1 -0
  503. package/dist/ui/assets/BlastRadius-ccQ3ktbv.js +1 -0
  504. package/dist/ui/assets/DependencyGraph-BZV40eAE.css +1 -0
  505. package/dist/ui/assets/DependencyGraph-Ca84q89b.js +27 -0
  506. package/dist/ui/assets/NotFound-C1wVKP-6.js +1 -0
  507. package/dist/ui/assets/RepoDetail-B_8qid2Y.js +1 -0
  508. package/dist/ui/assets/RepoList-BuPu-ODM.js +1 -0
  509. package/dist/ui/assets/Search-BzZ9Og8E.js +1 -0
  510. package/dist/ui/assets/SymbolView-FdpKlzql.js +14 -0
  511. package/dist/ui/assets/client-BANW_tIp.js +1 -0
  512. package/dist/ui/assets/index-CnwwQi_S.js +61 -0
  513. package/dist/ui/assets/index-SS2IXr8I.css +1 -0
  514. package/dist/ui/assets/repoStore-SbGR6YI6.js +1 -0
  515. package/dist/ui/assets/useSearch-DHyve22h.js +1 -0
  516. package/dist/ui/index.html +13 -0
  517. package/dist/version.d.ts +2 -0
  518. package/dist/version.d.ts.map +1 -0
  519. package/dist/version.js +2 -0
  520. package/dist/version.js.map +1 -0
  521. package/grammars/tree-sitter-c.wasm +0 -0
  522. package/grammars/tree-sitter-cpp.wasm +0 -0
  523. package/grammars/tree-sitter-csharp.wasm +0 -0
  524. package/grammars/tree-sitter-dart.wasm +0 -0
  525. package/grammars/tree-sitter-elixir.wasm +0 -0
  526. package/grammars/tree-sitter-go.wasm +0 -0
  527. package/grammars/tree-sitter-haskell.wasm +0 -0
  528. package/grammars/tree-sitter-java.wasm +0 -0
  529. package/grammars/tree-sitter-javascript.wasm +0 -0
  530. package/grammars/tree-sitter-kotlin.wasm +0 -0
  531. package/grammars/tree-sitter-lua.wasm +0 -0
  532. package/grammars/tree-sitter-php.wasm +0 -0
  533. package/grammars/tree-sitter-python.wasm +0 -0
  534. package/grammars/tree-sitter-r.wasm +0 -0
  535. package/grammars/tree-sitter-ruby.wasm +0 -0
  536. package/grammars/tree-sitter-rust.wasm +0 -0
  537. package/grammars/tree-sitter-scala.wasm +0 -0
  538. package/grammars/tree-sitter-swift.wasm +0 -0
  539. package/grammars/tree-sitter-tsx.wasm +0 -0
  540. package/grammars/tree-sitter-typescript.wasm +0 -0
  541. package/package.json +104 -0
  542. package/scripts/check-sqlite.js +41 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Goran Ocokoljic
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,207 @@
1
+ # PureContext MCP
2
+
3
+ [![CI](https://github.com/Goran-Ocokoljic/purecontext-mcp/actions/workflows/ci.yml/badge.svg)](https://github.com/Goran-Ocokoljic/purecontext-mcp/actions/workflows/ci.yml)
4
+ [![npm version](https://img.shields.io/npm/v/purecontext-mcp.svg)](https://www.npmjs.com/package/purecontext-mcp)
5
+ [![Stable](https://img.shields.io/badge/stability-stable-brightgreen.svg)](docs/API_STABILITY.md)
6
+
7
+ Token-efficient source code navigation for AI agents. Indexes TypeScript/JavaScript projects using tree-sitter AST parsing, stores structured symbol metadata in SQLite, and exposes a Model Context Protocol (MCP) server so AI agents can retrieve precisely the code they need — signatures, dependencies, and source — without reading entire files.
8
+
9
+ ## What's New in 1.0
10
+
11
+ Version 1.0.0 is the first stable release. The tool API is now under semver — breaking changes require a major version bump. See [CHANGELOG.md](CHANGELOG.md) for the full history and [docs/API_STABILITY.md](docs/API_STABILITY.md) for the public API contract.
12
+
13
+ Highlights since the initial prototype:
14
+ - **16 languages** — TypeScript, JavaScript, Python, Go, Rust, Java, C/C++, C#, Swift, Kotlin, Dart, Elixir, Haskell, Scala, R, PHP, Lua, Ruby
15
+ - **20+ framework adapters** — Vue, Nuxt, React, Next.js, Angular, Express, Fastify, Django, FastAPI, Flask, Spring, and more
16
+ - **FTS5 + semantic search** — keyword search with camelCase splitting and HNSW vector index
17
+ - **Dependency graph tools** — blast radius, context bundle, dead code detection
18
+ - **Worker thread pool** — parallel parsing for 10k–50k file enterprise repos
19
+ - **Zero-build install** — prebuilt `better-sqlite3` binaries for Node 18/20/22 × Windows/macOS/Linux
20
+
21
+ ---
22
+
23
+ ## Quick Start
24
+
25
+ ### Install and connect to Claude Code
26
+
27
+ ```bash
28
+ # Add to Claude Code (uses npx to run without global install)
29
+ claude mcp add purecontext-mcp -- npx purecontext-mcp
30
+
31
+ # Or install globally first
32
+ npm install -g purecontext-mcp
33
+ claude mcp add purecontext-mcp -- purecontext-mcp
34
+ ```
35
+
36
+ ### Index a project
37
+
38
+ Once connected, tell Claude to index your project:
39
+
40
+ ```
41
+ Index my project at /path/to/my-project using the index_folder tool
42
+ ```
43
+
44
+ Then use any of the tools below to navigate it.
45
+
46
+ ### Configuration (optional)
47
+
48
+ ```bash
49
+ # Generate a config file with all defaults and comments
50
+ npx purecontext-mcp config --init
51
+
52
+ # Validate config and check prerequisites
53
+ npx purecontext-mcp config --check
54
+
55
+ # Show effective configuration
56
+ npx purecontext-mcp config
57
+ ```
58
+
59
+ ---
60
+
61
+ ## Tool Reference
62
+
63
+ All tools return JSON. Responses include a `_tokenEstimate` field (where applicable) so agents can gauge context size before loading full source.
64
+
65
+ ### Indexing
66
+
67
+ | Tool | Description |
68
+ |------|-------------|
69
+ | `index_folder` | Index a project directory. Discovers source files, parses symbols and imports, builds a dependency graph. Returns `repoId` and statistics. |
70
+ | `resolve_repo` | Resolve a local path to its `repoId`. Reports whether the project has been indexed and its metadata. |
71
+ | `list_repos` | List all indexed repositories with their metadata. |
72
+
73
+ ### Symbol Search and Retrieval
74
+
75
+ | Tool | Description |
76
+ |------|-------------|
77
+ | `search_symbols` | Search symbols by name fragment. Filters by `kind`, `filePath`, and `limit`. Returns signatures and summaries — no source code. |
78
+ | `get_symbol_source` | Retrieve the raw source of one symbol using its byte offsets. Use after `search_symbols` to drill into a specific definition. |
79
+ | `get_file_outline` | All symbols defined in a file with signatures and summaries. Token-efficient alternative to reading the file. |
80
+ | `get_repo_outline` | All files with their top-level symbols. Useful for understanding project structure. |
81
+ | `get_file_tree` | Directory tree of an indexed project with file counts per directory. |
82
+
83
+ ### Dependency Graph
84
+
85
+ | Tool | Description |
86
+ |------|-------------|
87
+ | `get_context_bundle` | Forward-walk from a symbol: returns everything needed to understand it (transitive imports). Includes token estimate. |
88
+ | `get_blast_radius` | Reverse-walk from a symbol: returns all files that (transitively) import it. Use before modifying or deleting a symbol. |
89
+ | `find_importers` | Direct importers of a file, with their symbols. |
90
+ | `find_dead_code` | Exported symbols in files that nothing else imports. Helps identify unused code. |
91
+
92
+ ---
93
+
94
+ ## Configuration Reference
95
+
96
+ Config file location: `~/.purecontext/config.json`
97
+
98
+ | Field | Type | Default | Description |
99
+ |-------|------|---------|-------------|
100
+ | `indexDir` | `string` | `~/.purecontext/indexes/` | Where SQLite index files are stored |
101
+ | `fileLimit` | `number` | `1000` | Max files indexed per project |
102
+ | `watchDebounceMs` | `number` | `2000` | File watcher debounce window (ms) |
103
+ | `excludePatterns` | `string[]` | `[]` | Additional glob patterns to exclude |
104
+ | `adapters` | `'auto'`\|`'none'`\|`string[]` | `'auto'` | Framework adapter activation |
105
+ | `ai.provider` | `'none'`\|`'anthropic'`\|`'openai'` | `'none'` | AI summarization provider (Phase 2) |
106
+ | `ai.allowRemoteAI` | `boolean` | `false` | Allow outbound AI API calls |
107
+
108
+ ---
109
+
110
+ ## Team Setup (Shared Server)
111
+
112
+ PureContext can run as an always-on shared server so your whole team queries the same index without each developer re-indexing independently.
113
+
114
+ ### 1. Start the server
115
+
116
+ ```bash
117
+ # Docker (recommended)
118
+ docker run -d \
119
+ -p 3000:3000 \
120
+ -v ./data:/data \
121
+ -e PCTX_ADMIN_KEY=your-admin-secret \
122
+ purecontext/purecontext-mcp:latest
123
+
124
+ # Or with npx
125
+ PCTX_ADMIN_KEY=your-admin-secret npx purecontext-mcp --server --host 0.0.0.0 --port 3000
126
+ ```
127
+
128
+ ### 2. Create a workspace and API keys
129
+
130
+ ```bash
131
+ # Create workspace
132
+ curl -s -X POST http://localhost:3000/admin/workspaces \
133
+ -H "Authorization: Bearer your-admin-secret" \
134
+ -H "Content-Type: application/json" \
135
+ -d '{"name": "my-team"}' | jq .
136
+
137
+ # Create a key for each developer
138
+ curl -s -X POST http://localhost:3000/admin/keys \
139
+ -H "Authorization: Bearer your-admin-secret" \
140
+ -H "Content-Type: application/json" \
141
+ -d '{"label": "alice-laptop", "permissions": ["read", "write"]}' | jq .key
142
+ ```
143
+
144
+ ### 3. Index the shared repo (once, on the server)
145
+
146
+ ```bash
147
+ curl -s -X POST http://localhost:3000/mcp/sse \
148
+ -H "Authorization: Bearer pctx_alice_key_here" \
149
+ -H "Accept: application/json, text/event-stream" \
150
+ -H "Content-Type: application/json" \
151
+ -d '{"jsonrpc":"2.0","method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"cli","version":"1.0.0"}},"id":1}'
152
+ ```
153
+
154
+ Or simply ask Claude Code to index via the remote connection (step 4).
155
+
156
+ ### 4. Connect each developer's Claude Code
157
+
158
+ ```bash
159
+ claude mcp add purecontext-remote \
160
+ --transport http \
161
+ --url https://purecontext.mycompany.com/mcp/sse \
162
+ --header "Authorization: Bearer pctx_yourkey"
163
+ ```
164
+
165
+ Each developer gets their own API key. The server handles concurrent agent sessions independently. See [docs/TEAM_SETUP.md](docs/TEAM_SETUP.md) for the full walkthrough including proxy configuration, TLS, and troubleshooting.
166
+
167
+ ---
168
+
169
+ ## Architecture Overview
170
+
171
+ PureContext MCP follows a strict three-layer architecture:
172
+
173
+ ```
174
+ Adapters (src/adapters/) Framework-specific extraction (Vue, Nuxt, React — Phase 2)
175
+
176
+ Handlers (src/handlers/) Language-specific AST parsing (TypeScript, JavaScript)
177
+
178
+ Core (src/core/) File discovery, SQLite storage, MCP transport
179
+ ```
180
+
181
+ Dependencies flow strictly downward. Core knows nothing about specific languages or frameworks.
182
+
183
+ ### Key components
184
+
185
+ - **Index Manager** (`src/core/index-manager.ts`) — orchestrates the full pipeline: discover → parse → extract → store → graph
186
+ - **Parse Dispatcher** (`src/core/parse-dispatcher.ts`) — routes files to language handlers via web-tree-sitter (WASM)
187
+ - **Graph Traversal** (`src/graph/graph-traversal.ts`) — BFS forward/reverse walks over the dependency graph
188
+ - **File Watcher** (`src/core/watcher/file-watcher.ts`) — chokidar-based incremental re-indexing on file changes
189
+ - **MCP Server** (`src/server/mcp-server.ts`) — registers all tools, handles stdio transport
190
+
191
+ For detailed design decisions and requirements, see `docs/PureContext_MCP_PRD_v1.0.docx`.
192
+
193
+ ---
194
+
195
+ ## Development
196
+
197
+ ```bash
198
+ npm run build # Compile TypeScript
199
+ npm run dev # Watch mode
200
+ npm run test # Run test suite (vitest)
201
+ npm run lint # ESLint
202
+ ```
203
+
204
+ ### Requirements
205
+
206
+ - Node.js >= 18.0.0
207
+ - The `grammars/` directory must contain the bundled `.wasm` grammar files (included in the package)
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Actix-web framework adapter (Rust).
3
+ *
4
+ * Extracts route, middleware, and extractor symbols from Actix-web applications.
5
+ * Actix supports two route definition styles:
6
+ *
7
+ * Attribute macros (common):
8
+ * #[get("/users")]
9
+ * async fn list_users() -> impl Responder { ... }
10
+ *
11
+ * Programmatic (web::resource / web::scope):
12
+ * web::resource("/users")
13
+ * .route(web::get().to(list_users))
14
+ * .route(web::post().to(create_user))
15
+ *
16
+ * Scope prefix:
17
+ * web::scope("/api/v2")
18
+ * .service(...)
19
+ *
20
+ * Middleware via .wrap():
21
+ * .wrap(actix_web::middleware::Logger::default())
22
+ *
23
+ * Extractor via impl FromRequest:
24
+ * impl FromRequest for AuthUser { ... }
25
+ */
26
+ import type { FrameworkAdapter } from '../core/types.js';
27
+ export declare const actixWebAdapter: FrameworkAdapter;
28
+ //# sourceMappingURL=actix-web.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"actix-web.d.ts","sourceRoot":"","sources":["../../src/adapters/actix-web.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAKH,OAAO,KAAK,EAAE,gBAAgB,EAAsB,MAAM,kBAAkB,CAAC;AAoV7E,eAAO,MAAM,eAAe,EAAE,gBA+C7B,CAAC"}
@@ -0,0 +1,362 @@
1
+ /**
2
+ * Actix-web framework adapter (Rust).
3
+ *
4
+ * Extracts route, middleware, and extractor symbols from Actix-web applications.
5
+ * Actix supports two route definition styles:
6
+ *
7
+ * Attribute macros (common):
8
+ * #[get("/users")]
9
+ * async fn list_users() -> impl Responder { ... }
10
+ *
11
+ * Programmatic (web::resource / web::scope):
12
+ * web::resource("/users")
13
+ * .route(web::get().to(list_users))
14
+ * .route(web::post().to(create_user))
15
+ *
16
+ * Scope prefix:
17
+ * web::scope("/api/v2")
18
+ * .service(...)
19
+ *
20
+ * Middleware via .wrap():
21
+ * .wrap(actix_web::middleware::Logger::default())
22
+ *
23
+ * Extractor via impl FromRequest:
24
+ * impl FromRequest for AuthUser { ... }
25
+ */
26
+ import { createHash } from 'crypto';
27
+ import { readFileSync } from 'fs';
28
+ import { join } from 'path';
29
+ import { registerAdapter } from './adapter-registry.js';
30
+ import { logger } from '../core/logger.js';
31
+ // ─── Helpers ──────────────────────────────────────────────────────────────────
32
+ function makeId(filePath, name, kind) {
33
+ return createHash('sha256')
34
+ .update(`${filePath}:${name}:${kind}`)
35
+ .digest('hex')
36
+ .slice(0, 16);
37
+ }
38
+ // ─── Constants ────────────────────────────────────────────────────────────────
39
+ const ACTIX_HTTP_METHODS = [
40
+ 'get', 'post', 'put', 'patch', 'delete', 'head', 'options', 'trace', 'connect',
41
+ ];
42
+ // ─── Argument collector ───────────────────────────────────────────────────────
43
+ /**
44
+ * Collect the full text inside a parenthesised call, handling nested parens
45
+ * and string literals. `pos` must point immediately after the opening `(`.
46
+ * Returns inner text (sans outer parens), or null if unbalanced.
47
+ */
48
+ function collectArgs(source, pos) {
49
+ let depth = 1;
50
+ const start = pos;
51
+ let inString = false;
52
+ let stringChar = '';
53
+ while (pos < source.length && depth > 0) {
54
+ const ch = source[pos];
55
+ if (inString) {
56
+ if (ch === '\\') {
57
+ pos++;
58
+ }
59
+ else if (ch === stringChar) {
60
+ inString = false;
61
+ }
62
+ }
63
+ else {
64
+ if (ch === '"' || ch === '\'') {
65
+ inString = true;
66
+ stringChar = ch;
67
+ }
68
+ else if (ch === '(') {
69
+ depth++;
70
+ }
71
+ else if (ch === ')') {
72
+ depth--;
73
+ }
74
+ }
75
+ pos++;
76
+ }
77
+ if (depth !== 0)
78
+ return null;
79
+ return source.slice(start, pos - 1);
80
+ }
81
+ /**
82
+ * Collect a method-chaining expression starting at `pos`. Advances until a
83
+ * semicolon or unmatched closing bracket/paren/brace at depth 0 is reached.
84
+ */
85
+ function collectMethodChain(source, pos) {
86
+ let depth = 0;
87
+ const start = pos;
88
+ while (pos < source.length) {
89
+ const ch = source[pos];
90
+ if (ch === '(' || ch === '{' || ch === '[') {
91
+ depth++;
92
+ }
93
+ else if (ch === ')' || ch === '}' || ch === ']') {
94
+ if (depth === 0)
95
+ break;
96
+ depth--;
97
+ }
98
+ else if (ch === ';' && depth === 0) {
99
+ break;
100
+ }
101
+ pos++;
102
+ }
103
+ return source.slice(start, pos);
104
+ }
105
+ // ─── Attribute macro route extraction ────────────────────────────────────────
106
+ /**
107
+ * Extract routes defined via Actix attribute macros:
108
+ * #[get("/path")] → GET /path
109
+ * #[actix_web::get("/path")] → GET /path
110
+ * #[route(GET, path = "/path")] is not handled (use programmatic style instead)
111
+ *
112
+ * The attribute immediately precedes an `async fn` or `fn` declaration; the
113
+ * route path is taken from the attribute argument.
114
+ */
115
+ function extractActixMacroRoutes(source, filePath) {
116
+ const symbols = [];
117
+ const seen = new Set();
118
+ const methodPat = ACTIX_HTTP_METHODS.join('|');
119
+ // Match: #[optional::path::get("/path")]
120
+ const re = new RegExp(`#\\[(?:[\\w]+::)*(${methodPat})\\s*\\(\\s*"([^"]+)"`, 'g');
121
+ let m;
122
+ while ((m = re.exec(source)) !== null) {
123
+ const method = m[1].toUpperCase();
124
+ const routePath = m[2];
125
+ const routeName = `${method} ${routePath}`;
126
+ if (seen.has(routeName))
127
+ continue;
128
+ seen.add(routeName);
129
+ symbols.push({
130
+ id: makeId(filePath, routeName, 'route'),
131
+ name: routeName,
132
+ kind: 'route',
133
+ filePath,
134
+ startByte: 0,
135
+ endByte: 0,
136
+ signature: `#[${m[1]}("${routePath}")]`,
137
+ summary: `Actix route: ${routeName}`,
138
+ frameworkMeta: {
139
+ http_method: method,
140
+ route_path: routePath,
141
+ actix_route: true,
142
+ },
143
+ });
144
+ }
145
+ return symbols;
146
+ }
147
+ // ─── Programmatic route extraction (web::resource) ────────────────────────────
148
+ /**
149
+ * Extract routes from `web::resource("/path").route(web::METHOD().to(handler))`
150
+ * chains. Collects the full method chain after each `web::resource(...)` call
151
+ * and scans it for `.route(web::METHOD()...)` patterns.
152
+ */
153
+ function extractActixResourceRoutes(source, filePath) {
154
+ const symbols = [];
155
+ const seen = new Set();
156
+ const methodPat = ACTIX_HTTP_METHODS.join('|');
157
+ // Inner pattern: .route(web::METHOD()...)
158
+ const innerRouteRe = new RegExp(`\\.route\\s*\\(\\s*web::(${methodPat})\\s*\\(`, 'g');
159
+ const resourceRe = /\bweb::resource\s*\(/g;
160
+ let m;
161
+ while ((m = resourceRe.exec(source)) !== null) {
162
+ const pathArgPos = m.index + m[0].length;
163
+ const pathArgs = collectArgs(source, pathArgPos);
164
+ if (!pathArgs)
165
+ continue;
166
+ const pathMatch = pathArgs.match(/^\s*"([^"]+)"\s*$/);
167
+ if (!pathMatch)
168
+ continue;
169
+ const resourcePath = pathMatch[1];
170
+ // Collect the chained .route() calls that follow
171
+ const chainStart = pathArgPos + pathArgs.length + 1; // skip closing )
172
+ const chain = collectMethodChain(source, chainStart);
173
+ innerRouteRe.lastIndex = 0;
174
+ let rm;
175
+ while ((rm = innerRouteRe.exec(chain)) !== null) {
176
+ const method = rm[1].toUpperCase();
177
+ const routeName = `${method} ${resourcePath}`;
178
+ if (seen.has(routeName))
179
+ continue;
180
+ seen.add(routeName);
181
+ symbols.push({
182
+ id: makeId(filePath, routeName, 'route'),
183
+ name: routeName,
184
+ kind: 'route',
185
+ filePath,
186
+ startByte: 0,
187
+ endByte: 0,
188
+ signature: `web::resource("${resourcePath}").route(web::${method.toLowerCase()}().to(...))`,
189
+ summary: `Actix route: ${routeName}`,
190
+ frameworkMeta: {
191
+ http_method: method,
192
+ route_path: resourcePath,
193
+ actix_route: true,
194
+ },
195
+ });
196
+ }
197
+ }
198
+ return symbols;
199
+ }
200
+ // ─── Scope prefix extraction ──────────────────────────────────────────────────
201
+ /**
202
+ * Extract `web::scope("/prefix")` mount points and emit them as route symbols
203
+ * with `actix_scope: true`. The prefix is preserved for URL hierarchy
204
+ * understanding.
205
+ */
206
+ function extractActixScopes(source, filePath) {
207
+ const symbols = [];
208
+ const seen = new Set();
209
+ const scopeRe = /\bweb::scope\s*\(/g;
210
+ let m;
211
+ while ((m = scopeRe.exec(source)) !== null) {
212
+ const argsPos = m.index + m[0].length;
213
+ const argsText = collectArgs(source, argsPos);
214
+ if (!argsText)
215
+ continue;
216
+ const pathMatch = argsText.match(/^\s*"([^"]+)"\s*$/);
217
+ if (!pathMatch)
218
+ continue;
219
+ const prefix = pathMatch[1];
220
+ if (seen.has(prefix))
221
+ continue;
222
+ seen.add(prefix);
223
+ symbols.push({
224
+ id: makeId(filePath, `SCOPE ${prefix}`, 'route'),
225
+ name: `SCOPE ${prefix}`,
226
+ kind: 'route',
227
+ filePath,
228
+ startByte: 0,
229
+ endByte: 0,
230
+ signature: `web::scope("${prefix}")`,
231
+ summary: `Actix scope prefix: ${prefix}`,
232
+ frameworkMeta: {
233
+ route_path: prefix,
234
+ actix_scope: true,
235
+ },
236
+ });
237
+ }
238
+ return symbols;
239
+ }
240
+ // ─── Middleware extraction ────────────────────────────────────────────────────
241
+ /**
242
+ * Extract middleware symbols from `.wrap(...)` calls.
243
+ * The middleware name is taken from the first type segment of the argument
244
+ * (e.g. `Logger` from `actix_web::middleware::Logger::default()`).
245
+ */
246
+ function extractActixMiddleware(source, filePath) {
247
+ const symbols = [];
248
+ const seen = new Set();
249
+ const wrapRe = /\.wrap\s*\(/g;
250
+ let m;
251
+ while ((m = wrapRe.exec(source)) !== null) {
252
+ const argsPos = m.index + m[0].length;
253
+ const argsText = collectArgs(source, argsPos);
254
+ if (!argsText)
255
+ continue;
256
+ // Capture the full path, then pick the first PascalCase segment as the type name.
257
+ // e.g. `actix_web::middleware::Logger::default()` → segments ['actix_web', 'middleware', 'Logger', 'default']
258
+ // first PascalCase → 'Logger'
259
+ // e.g. `AuthMiddleware` → 'AuthMiddleware'
260
+ // e.g. `CorsMiddleware::new()` → 'CorsMiddleware'
261
+ const typeMatch = argsText.trim().match(/^([A-Za-z][A-Za-z0-9_]*(?:::[A-Za-z][A-Za-z0-9_]*)*)/);
262
+ if (!typeMatch)
263
+ continue;
264
+ const segments = typeMatch[1].split('::');
265
+ const typeName = segments.find((s) => /^[A-Z]/.test(s)) ?? segments[0];
266
+ if (seen.has(typeName))
267
+ continue;
268
+ seen.add(typeName);
269
+ symbols.push({
270
+ id: makeId(filePath, typeName, 'middleware'),
271
+ name: typeName,
272
+ kind: 'middleware',
273
+ filePath,
274
+ startByte: 0,
275
+ endByte: 0,
276
+ signature: `.wrap(${argsText.trim().split('(')[0].trim()}(...))`,
277
+ summary: `Actix middleware: ${typeName}`,
278
+ frameworkMeta: {
279
+ actix_middleware: true,
280
+ },
281
+ });
282
+ }
283
+ return symbols;
284
+ }
285
+ // ─── FromRequest extractor extraction ────────────────────────────────────────
286
+ /**
287
+ * Scan for `impl [<bounds>] [path::]FromRequest for TypeName` and emit a
288
+ * `type` symbol with `actix_extractor: true`.
289
+ */
290
+ function extractActixExtractors(source, filePath) {
291
+ const symbols = [];
292
+ const seen = new Set();
293
+ // impl [<...>] [path::]FromRequest [<...>] for TypeName
294
+ const implRe = /\bimpl(?:\s*<[^>]*>)?\s+(?:\w+::)*FromRequest(?:\s*<[^>]*>)?\s+for\s+([A-Za-z][A-Za-z0-9_]*)/g;
295
+ let m;
296
+ while ((m = implRe.exec(source)) !== null) {
297
+ const name = m[1];
298
+ if (seen.has(name))
299
+ continue;
300
+ seen.add(name);
301
+ symbols.push({
302
+ id: makeId(filePath, name, 'type'),
303
+ name,
304
+ kind: 'type',
305
+ filePath,
306
+ startByte: 0,
307
+ endByte: 0,
308
+ signature: `impl FromRequest for ${name}`,
309
+ summary: `Actix extractor: ${name}`,
310
+ frameworkMeta: { actix_extractor: true },
311
+ });
312
+ }
313
+ return symbols;
314
+ }
315
+ // ─── Actix import guard ───────────────────────────────────────────────────────
316
+ /**
317
+ * Quick check — only process files that reference actix_web. Avoids scanning
318
+ * every `.rs` file in projects that use similar patterns.
319
+ */
320
+ function hasActixUsage(source) {
321
+ return /\bactix_web\b/.test(source);
322
+ }
323
+ // ─── Actix-web adapter ────────────────────────────────────────────────────────
324
+ export const actixWebAdapter = {
325
+ name: 'actix-web',
326
+ /** `.rs` files are handled by the Rust language handler — no new extension. */
327
+ extensions: () => [],
328
+ // ── Detection ─────────────────────────────────────────────────────────────
329
+ async detect(projectRoot) {
330
+ try {
331
+ const cargoToml = readFileSync(join(projectRoot, 'Cargo.toml'), 'utf8');
332
+ // Match `actix-web = "..."` or `actix-web = { version = "..." }`
333
+ return /\bactix-web\s*=/.test(cargoToml);
334
+ }
335
+ catch {
336
+ return false;
337
+ }
338
+ },
339
+ // ── File routing ───────────────────────────────────────────────────────────
340
+ fileFilter: (filePath) => filePath.endsWith('.rs'),
341
+ // ── Framework symbol extraction ────────────────────────────────────────────
342
+ extractFrameworkSymbols(_tree, source, filePath) {
343
+ const sourceStr = source.toString('utf8');
344
+ if (!hasActixUsage(sourceStr))
345
+ return [];
346
+ return [
347
+ ...extractActixMacroRoutes(sourceStr, filePath),
348
+ ...extractActixResourceRoutes(sourceStr, filePath),
349
+ ...extractActixScopes(sourceStr, filePath),
350
+ ...extractActixMiddleware(sourceStr, filePath),
351
+ ...extractActixExtractors(sourceStr, filePath),
352
+ ];
353
+ },
354
+ // ── Metadata enrichment ────────────────────────────────────────────────────
355
+ enrichMetadata(symbol) {
356
+ return symbol;
357
+ },
358
+ };
359
+ // ─── Self-registration ────────────────────────────────────────────────────────
360
+ registerAdapter(actixWebAdapter);
361
+ logger.debug("Adapter 'actix-web' registered");
362
+ //# sourceMappingURL=actix-web.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"actix-web.js","sourceRoot":"","sources":["../../src/adapters/actix-web.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Adapter registry — registration and auto-discovery of framework adapters.
3
+ *
4
+ * Adapters self-register by calling `registerAdapter(myAdapter)` at module level.
5
+ * The pipeline calls `discoverAdapters()` at indexing time to get the active set.
6
+ */
7
+ import type { FrameworkAdapter } from '../core/types.js';
8
+ import type { PureContextConfig } from '../config/config-schema.js';
9
+ /**
10
+ * Register a framework adapter. Adapters call this at module load time.
11
+ * Re-registering the same name overwrites the previous entry.
12
+ */
13
+ export declare function registerAdapter(adapter: FrameworkAdapter): void;
14
+ /**
15
+ * Return all registered adapters (in registration order).
16
+ */
17
+ export declare function getRegisteredAdapters(): FrameworkAdapter[];
18
+ /**
19
+ * Resolve which adapters are active for a given project root, honouring the
20
+ * `adapters` config setting:
21
+ * 'auto' — call detect() on every registered adapter
22
+ * 'none' — return []
23
+ * string[] — activate named adapters only (skip detect(), assume active)
24
+ */
25
+ export declare function discoverAdapters(projectRoot: string, config: Pick<PureContextConfig, 'adapters'>): Promise<FrameworkAdapter[]>;
26
+ /**
27
+ * Collect all additional file extensions declared by a set of active adapters.
28
+ * Used by file discovery to expand the extension allowlist beyond what language
29
+ * handlers cover.
30
+ */
31
+ export declare function getAdapterExtensions(adapters: FrameworkAdapter[]): string[];
32
+ /** Reset registry to empty — for use in tests only. */
33
+ export declare function _resetForTesting(): void;
34
+ //# sourceMappingURL=adapter-registry.d.ts.map