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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspaces-cli.d.ts","sourceRoot":"","sources":["../../src/config/workspaces-cli.ts"],"names":[],"mappings":"AAGA,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CA4BzD"}
@@ -0,0 +1,84 @@
1
+ import { openAuthDatabase } from '../core/db/api-keys.js';
2
+ import { TenantStore } from '../core/db/tenants.js';
3
+ export function runWorkspacesCommand(args) {
4
+ const sub = args[0];
5
+ if (!sub || sub === '--help' || sub === '-h') {
6
+ printWorkspacesHelp();
7
+ process.exit(0);
8
+ }
9
+ if (sub === 'list') {
10
+ cmdWorkspacesList();
11
+ process.exit(0);
12
+ }
13
+ if (sub === 'create') {
14
+ const nameIdx = args.indexOf('--name');
15
+ const name = nameIdx >= 0 && args[nameIdx + 1] ? args[nameIdx + 1] : null;
16
+ if (!name) {
17
+ process.stderr.write('Error: --name is required\n');
18
+ process.exit(1);
19
+ }
20
+ const planIdx = args.indexOf('--plan');
21
+ const plan = planIdx >= 0 && args[planIdx + 1]
22
+ ? args[planIdx + 1]
23
+ : 'team';
24
+ cmdWorkspacesCreate({ name, plan });
25
+ process.exit(0);
26
+ }
27
+ process.stderr.write(`Unknown workspaces subcommand: ${sub}\n`);
28
+ printWorkspacesHelp();
29
+ process.exit(1);
30
+ }
31
+ function printWorkspacesHelp() {
32
+ process.stdout.write(`
33
+ purecontext-mcp workspaces — manage workspaces for team/cloud deployments
34
+
35
+ Usage:
36
+ purecontext-mcp workspaces list
37
+ purecontext-mcp workspaces create --name <name> [--plan free|team|enterprise]
38
+
39
+ Commands:
40
+ list List all workspaces with member and repo counts
41
+ create --name <name> Create a new workspace
42
+
43
+ Examples:
44
+ purecontext-mcp workspaces list
45
+ purecontext-mcp workspaces create --name "My Team"
46
+ purecontext-mcp workspaces create --name "Enterprise" --plan enterprise
47
+ `.trimStart());
48
+ }
49
+ function cmdWorkspacesList() {
50
+ const db = openAuthDatabase();
51
+ try {
52
+ const store = new TenantStore(db);
53
+ const workspaces = store.list();
54
+ if (workspaces.length === 0) {
55
+ console.log('No workspaces found. Use "purecontext-mcp workspaces create" to add one.');
56
+ return;
57
+ }
58
+ console.log('\nWorkspaces:\n');
59
+ for (const ws of workspaces) {
60
+ const memberStr = ws.memberCount !== undefined ? `${ws.memberCount} member(s)` : '';
61
+ console.log(` ${ws.id} "${ws.name}" plan: ${ws.plan} ${memberStr} created: ${ws.createdAt}`);
62
+ }
63
+ console.log();
64
+ }
65
+ finally {
66
+ db.close();
67
+ }
68
+ }
69
+ function cmdWorkspacesCreate(opts) {
70
+ const db = openAuthDatabase();
71
+ try {
72
+ const store = new TenantStore(db);
73
+ const ws = store.create(opts.name, { plan: opts.plan });
74
+ console.log('\nWorkspace created successfully.\n');
75
+ console.log(` ID: ${ws.id}`);
76
+ console.log(` Name: ${ws.name}`);
77
+ console.log(` Plan: ${ws.plan}`);
78
+ console.log();
79
+ }
80
+ finally {
81
+ db.close();
82
+ }
83
+ }
84
+ //# sourceMappingURL=workspaces-cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspaces-cli.js","sourceRoot":"","sources":["../../src/config/workspaces-cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,95 @@
1
+ import Database from 'better-sqlite3';
2
+ export type Permission = 'read' | 'write' | 'admin';
3
+ export interface ApiKeyRecord {
4
+ keyHash: string;
5
+ tenantId: string;
6
+ permissions: Permission[];
7
+ rateLimitTier: string;
8
+ label: string | null;
9
+ createdAt: string;
10
+ lastUsedAt: string | null;
11
+ revokedAt: string | null;
12
+ }
13
+ export interface TenantRecord {
14
+ id: string;
15
+ name: string;
16
+ createdAt: string;
17
+ }
18
+ /**
19
+ * DDL for the central auth database (~/.purecontext/auth.db).
20
+ * Separate from per-repo index databases.
21
+ *
22
+ * Tenant columns added in auth schema v1:
23
+ * settings, storage_quota_bytes, storage_used_bytes
24
+ */
25
+ export declare const AUTH_DDL = "\nPRAGMA journal_mode = WAL;\nPRAGMA foreign_keys = ON;\n\nCREATE TABLE IF NOT EXISTS tenants (\n id TEXT PRIMARY KEY,\n name TEXT NOT NULL,\n created_at TEXT NOT NULL,\n settings TEXT,\n storage_quota_bytes INTEGER,\n storage_used_bytes INTEGER NOT NULL DEFAULT 0\n);\n\nCREATE TABLE IF NOT EXISTS api_keys (\n key_hash TEXT PRIMARY KEY,\n tenant_id TEXT NOT NULL,\n permissions TEXT NOT NULL,\n rate_limit_tier TEXT NOT NULL,\n label TEXT,\n created_at TEXT NOT NULL,\n last_used_at TEXT,\n revoked_at TEXT,\n FOREIGN KEY (tenant_id) REFERENCES tenants(id) ON DELETE CASCADE\n);\n\nCREATE INDEX IF NOT EXISTS idx_api_keys_tenant ON api_keys(tenant_id);\n";
26
+ /** Override the auth DB path — for testing only. */
27
+ export declare function _setAuthDbPathForTesting(path: string | null): void;
28
+ export declare function getAuthDbPath(): string;
29
+ /**
30
+ * Open (or create) the central auth SQLite database.
31
+ * Creates the auth directory if it does not exist.
32
+ */
33
+ export declare function openAuthDatabase(): Database.Database;
34
+ /**
35
+ * Open an in-memory auth database.
36
+ * Suitable for unit tests — no disk I/O.
37
+ */
38
+ export declare function openInMemoryAuthDatabase(): Database.Database;
39
+ /**
40
+ * Migrate the auth DB schema to add tenant quota columns if they are missing.
41
+ * Safe to call on any existing auth DB — checks for column existence before ALTER.
42
+ */
43
+ export declare function runAuthMigrations(db: Database.Database): void;
44
+ /** One-way SHA-256 hash of a raw API key — stored in DB, never the raw key. */
45
+ export declare function hashApiKey(rawKey: string): string;
46
+ export declare class ApiKeyStore {
47
+ private readonly db;
48
+ constructor(db: Database.Database);
49
+ insert(record: ApiKeyRecord): void;
50
+ findByHash(keyHash: string): ApiKeyRecord | null;
51
+ /** Mark the key as revoked (idempotent — only updates if not already revoked). */
52
+ revoke(keyHash: string): void;
53
+ /** Revoke all active keys whose hash starts with `hashPrefix`. */
54
+ revokeByHashPrefix(hashPrefix: string): number;
55
+ updateLastUsed(keyHash: string): void;
56
+ updateLabel(keyHash: string, label: string): void;
57
+ listByTenant(tenantId: string): ApiKeyRecord[];
58
+ delete(keyHash: string): void;
59
+ }
60
+ export declare function insertTenant(db: Database.Database, tenant: TenantRecord): void;
61
+ export declare function getTenant(db: Database.Database, id: string): TenantRecord | null;
62
+ export declare function listTenants(db: Database.Database): TenantRecord[];
63
+ /**
64
+ * Create and store a new API key for the given tenant.
65
+ * Returns the plaintext key (`pctx_` + 32 random hex chars) — shown once only.
66
+ * Only the SHA-256 hash is stored in the database.
67
+ *
68
+ * Automatically creates the tenant record if it doesn't exist.
69
+ */
70
+ export declare function createApiKey(db: Database.Database, tenantId: string, label: string | null, permissions: Permission[], opts?: {
71
+ rateLimitTier?: string;
72
+ }): string;
73
+ /**
74
+ * Validate a raw API key. Returns `{ tenantId, permissions }` when valid, or null.
75
+ * Updates `last_used_at` on success.
76
+ */
77
+ export declare function validateApiKey(db: Database.Database, rawKey: string): {
78
+ tenantId: string;
79
+ permissions: Permission[];
80
+ } | null;
81
+ /**
82
+ * Revoke an API key by its plaintext value or hash prefix.
83
+ */
84
+ export declare function revokeApiKey(db: Database.Database, keyOrHashPrefix: string): void;
85
+ /**
86
+ * List all non-revoked API keys for a tenant, newest first.
87
+ * Never returns the raw key — only metadata.
88
+ */
89
+ export declare function listApiKeys(db: Database.Database, tenantId: string): ApiKeyRecord[];
90
+ /**
91
+ * Look up the workspace (tenant) ID for a non-revoked API key hash.
92
+ * Returns null when the key is not found or has been revoked.
93
+ */
94
+ export declare function getWorkspaceForKey(db: Database.Database, keyHash: string): string | null;
95
+ //# sourceMappingURL=api-keys.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-keys.d.ts","sourceRoot":"","sources":["../../../src/core/db/api-keys.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,293 @@
1
+ import Database from 'better-sqlite3';
2
+ import { createHash, randomBytes } from 'node:crypto';
3
+ import { mkdirSync } from 'node:fs';
4
+ import { homedir } from 'node:os';
5
+ import { join } from 'node:path';
6
+ import { StorageError } from '../errors.js';
7
+ import { REQUEST_LOG_DDL } from './request-log.js';
8
+ // ─── DDL ──────────────────────────────────────────────────────────────────────
9
+ /**
10
+ * DDL for the central auth database (~/.purecontext/auth.db).
11
+ * Separate from per-repo index databases.
12
+ *
13
+ * Tenant columns added in auth schema v1:
14
+ * settings, storage_quota_bytes, storage_used_bytes
15
+ */
16
+ export const AUTH_DDL = `
17
+ PRAGMA journal_mode = WAL;
18
+ PRAGMA foreign_keys = ON;
19
+
20
+ CREATE TABLE IF NOT EXISTS tenants (
21
+ id TEXT PRIMARY KEY,
22
+ name TEXT NOT NULL,
23
+ created_at TEXT NOT NULL,
24
+ settings TEXT,
25
+ storage_quota_bytes INTEGER,
26
+ storage_used_bytes INTEGER NOT NULL DEFAULT 0
27
+ );
28
+
29
+ CREATE TABLE IF NOT EXISTS api_keys (
30
+ key_hash TEXT PRIMARY KEY,
31
+ tenant_id TEXT NOT NULL,
32
+ permissions TEXT NOT NULL,
33
+ rate_limit_tier TEXT NOT NULL,
34
+ label TEXT,
35
+ created_at TEXT NOT NULL,
36
+ last_used_at TEXT,
37
+ revoked_at TEXT,
38
+ FOREIGN KEY (tenant_id) REFERENCES tenants(id) ON DELETE CASCADE
39
+ );
40
+
41
+ CREATE INDEX IF NOT EXISTS idx_api_keys_tenant ON api_keys(tenant_id);
42
+ `;
43
+ // ─── Database path + factory ──────────────────────────────────────────────────
44
+ let _authDbPathOverride = null;
45
+ /** Override the auth DB path — for testing only. */
46
+ export function _setAuthDbPathForTesting(path) {
47
+ _authDbPathOverride = path;
48
+ }
49
+ export function getAuthDbPath() {
50
+ if (_authDbPathOverride !== null)
51
+ return _authDbPathOverride;
52
+ const dataDir = process.env['PCTX_DATA_DIR'];
53
+ if (dataDir)
54
+ return join(dataDir, 'auth.db');
55
+ return join(homedir(), '.purecontext', 'auth.db');
56
+ }
57
+ /**
58
+ * Open (or create) the central auth SQLite database.
59
+ * Creates the auth directory if it does not exist.
60
+ */
61
+ export function openAuthDatabase() {
62
+ const path = getAuthDbPath();
63
+ mkdirSync(join(path, '..'), { recursive: true });
64
+ const db = new Database(path);
65
+ db.exec(AUTH_DDL);
66
+ db.exec(REQUEST_LOG_DDL);
67
+ runAuthMigrations(db);
68
+ return db;
69
+ }
70
+ /**
71
+ * Open an in-memory auth database.
72
+ * Suitable for unit tests — no disk I/O.
73
+ */
74
+ export function openInMemoryAuthDatabase() {
75
+ const db = new Database(':memory:');
76
+ db.exec(AUTH_DDL);
77
+ db.exec(REQUEST_LOG_DDL);
78
+ runAuthMigrations(db);
79
+ return db;
80
+ }
81
+ /**
82
+ * Migrate the auth DB schema to add tenant quota columns if they are missing.
83
+ * Safe to call on any existing auth DB — checks for column existence before ALTER.
84
+ */
85
+ export function runAuthMigrations(db) {
86
+ const cols = db
87
+ .prepare("PRAGMA table_info(tenants)")
88
+ .all();
89
+ const colNames = new Set(cols.map((c) => c.name));
90
+ if (!colNames.has('settings')) {
91
+ db.exec('ALTER TABLE tenants ADD COLUMN settings TEXT');
92
+ }
93
+ if (!colNames.has('storage_quota_bytes')) {
94
+ db.exec('ALTER TABLE tenants ADD COLUMN storage_quota_bytes INTEGER');
95
+ }
96
+ if (!colNames.has('storage_used_bytes')) {
97
+ db.exec('ALTER TABLE tenants ADD COLUMN storage_used_bytes INTEGER NOT NULL DEFAULT 0');
98
+ }
99
+ // plan column on tenants
100
+ if (!colNames.has('plan')) {
101
+ db.exec("ALTER TABLE tenants ADD COLUMN plan TEXT NOT NULL DEFAULT 'team'");
102
+ }
103
+ // workspace_members table
104
+ db.exec(`CREATE TABLE IF NOT EXISTS workspace_members (
105
+ workspace_id TEXT NOT NULL,
106
+ user_id TEXT NOT NULL,
107
+ role TEXT NOT NULL,
108
+ added_at TEXT NOT NULL,
109
+ PRIMARY KEY (workspace_id, user_id),
110
+ FOREIGN KEY (workspace_id) REFERENCES tenants(id) ON DELETE CASCADE
111
+ )`);
112
+ // api_keys migrations
113
+ const keyCols = db
114
+ .prepare("PRAGMA table_info(api_keys)")
115
+ .all();
116
+ const keyColNames = new Set(keyCols.map((c) => c.name));
117
+ if (!keyColNames.has('label')) {
118
+ db.exec('ALTER TABLE api_keys ADD COLUMN label TEXT');
119
+ }
120
+ }
121
+ // ─── Key hash ─────────────────────────────────────────────────────────────────
122
+ /** One-way SHA-256 hash of a raw API key — stored in DB, never the raw key. */
123
+ export function hashApiKey(rawKey) {
124
+ return createHash('sha256').update(rawKey).digest('hex');
125
+ }
126
+ // ─── ApiKeyStore ──────────────────────────────────────────────────────────────
127
+ export class ApiKeyStore {
128
+ db;
129
+ constructor(db) {
130
+ this.db = db;
131
+ }
132
+ insert(record) {
133
+ try {
134
+ this.db
135
+ .prepare(`INSERT INTO api_keys
136
+ (key_hash, tenant_id, permissions, rate_limit_tier, label, created_at, last_used_at, revoked_at)
137
+ VALUES
138
+ (@keyHash, @tenantId, @permissions, @rateLimitTier, @label, @createdAt, @lastUsedAt, @revokedAt)`)
139
+ .run({
140
+ keyHash: record.keyHash,
141
+ tenantId: record.tenantId,
142
+ permissions: JSON.stringify(record.permissions),
143
+ rateLimitTier: record.rateLimitTier,
144
+ label: record.label ?? null,
145
+ createdAt: record.createdAt,
146
+ lastUsedAt: record.lastUsedAt ?? null,
147
+ revokedAt: record.revokedAt ?? null,
148
+ });
149
+ }
150
+ catch (err) {
151
+ throw new StorageError('Failed to insert API key', 'insert', err);
152
+ }
153
+ }
154
+ findByHash(keyHash) {
155
+ const row = this.db
156
+ .prepare('SELECT * FROM api_keys WHERE key_hash = ?')
157
+ .get(keyHash);
158
+ return row ? rowToRecord(row) : null;
159
+ }
160
+ /** Mark the key as revoked (idempotent — only updates if not already revoked). */
161
+ revoke(keyHash) {
162
+ this.db
163
+ .prepare("UPDATE api_keys SET revoked_at = ? WHERE key_hash = ? AND revoked_at IS NULL")
164
+ .run(new Date().toISOString(), keyHash);
165
+ }
166
+ /** Revoke all active keys whose hash starts with `hashPrefix`. */
167
+ revokeByHashPrefix(hashPrefix) {
168
+ const result = this.db
169
+ .prepare("UPDATE api_keys SET revoked_at = ? WHERE key_hash LIKE ? AND revoked_at IS NULL")
170
+ .run(new Date().toISOString(), `${hashPrefix}%`);
171
+ return result.changes;
172
+ }
173
+ updateLastUsed(keyHash) {
174
+ this.db
175
+ .prepare('UPDATE api_keys SET last_used_at = ? WHERE key_hash = ?')
176
+ .run(new Date().toISOString(), keyHash);
177
+ }
178
+ updateLabel(keyHash, label) {
179
+ this.db
180
+ .prepare('UPDATE api_keys SET label = ? WHERE key_hash = ?')
181
+ .run(label, keyHash);
182
+ }
183
+ listByTenant(tenantId) {
184
+ return this.db
185
+ .prepare('SELECT * FROM api_keys WHERE tenant_id = ? ORDER BY created_at DESC')
186
+ .all(tenantId)
187
+ .map(rowToRecord);
188
+ }
189
+ delete(keyHash) {
190
+ this.db.prepare('DELETE FROM api_keys WHERE key_hash = ?').run(keyHash);
191
+ }
192
+ }
193
+ // ─── Tenant helpers ───────────────────────────────────────────────────────────
194
+ export function insertTenant(db, tenant) {
195
+ db.prepare('INSERT OR IGNORE INTO tenants (id, name, created_at) VALUES (?, ?, ?)').run(tenant.id, tenant.name, tenant.createdAt);
196
+ }
197
+ export function getTenant(db, id) {
198
+ const row = db
199
+ .prepare('SELECT * FROM tenants WHERE id = ?')
200
+ .get(id);
201
+ return row ? tenantRowToRecord(row) : null;
202
+ }
203
+ export function listTenants(db) {
204
+ return db
205
+ .prepare('SELECT * FROM tenants ORDER BY created_at DESC')
206
+ .all()
207
+ .map(tenantRowToRecord);
208
+ }
209
+ function rowToRecord(row) {
210
+ return {
211
+ keyHash: row.key_hash,
212
+ tenantId: row.tenant_id,
213
+ permissions: JSON.parse(row.permissions),
214
+ rateLimitTier: row.rate_limit_tier,
215
+ label: row.label,
216
+ createdAt: row.created_at,
217
+ lastUsedAt: row.last_used_at,
218
+ revokedAt: row.revoked_at,
219
+ };
220
+ }
221
+ function tenantRowToRecord(row) {
222
+ return { id: row.id, name: row.name, createdAt: row.created_at };
223
+ }
224
+ // ─── Convenience helpers (Phase 18) ──────────────────────────────────────────
225
+ /**
226
+ * Create and store a new API key for the given tenant.
227
+ * Returns the plaintext key (`pctx_` + 32 random hex chars) — shown once only.
228
+ * Only the SHA-256 hash is stored in the database.
229
+ *
230
+ * Automatically creates the tenant record if it doesn't exist.
231
+ */
232
+ export function createApiKey(db, tenantId, label, permissions, opts = {}) {
233
+ const rateLimitTier = opts.rateLimitTier ?? 'default';
234
+ // pctx_ + 32 random hex chars (16 bytes → 32 hex)
235
+ const rawKey = `pctx_${randomBytes(16).toString('hex')}`;
236
+ const keyHash = hashApiKey(rawKey);
237
+ if (getTenant(db, tenantId) === null) {
238
+ insertTenant(db, { id: tenantId, name: tenantId, createdAt: new Date().toISOString() });
239
+ }
240
+ new ApiKeyStore(db).insert({
241
+ keyHash,
242
+ tenantId,
243
+ permissions,
244
+ rateLimitTier,
245
+ label,
246
+ createdAt: new Date().toISOString(),
247
+ lastUsedAt: null,
248
+ revokedAt: null,
249
+ });
250
+ return rawKey;
251
+ }
252
+ /**
253
+ * Validate a raw API key. Returns `{ tenantId, permissions }` when valid, or null.
254
+ * Updates `last_used_at` on success.
255
+ */
256
+ export function validateApiKey(db, rawKey) {
257
+ const store = new ApiKeyStore(db);
258
+ const record = store.findByHash(hashApiKey(rawKey));
259
+ if (record === null || record.revokedAt !== null)
260
+ return null;
261
+ store.updateLastUsed(hashApiKey(rawKey));
262
+ return { tenantId: record.tenantId, permissions: record.permissions };
263
+ }
264
+ /**
265
+ * Revoke an API key by its plaintext value or hash prefix.
266
+ */
267
+ export function revokeApiKey(db, keyOrHashPrefix) {
268
+ const store = new ApiKeyStore(db);
269
+ if (keyOrHashPrefix.startsWith('pctx_')) {
270
+ store.revoke(hashApiKey(keyOrHashPrefix));
271
+ }
272
+ else {
273
+ store.revokeByHashPrefix(keyOrHashPrefix);
274
+ }
275
+ }
276
+ /**
277
+ * List all non-revoked API keys for a tenant, newest first.
278
+ * Never returns the raw key — only metadata.
279
+ */
280
+ export function listApiKeys(db, tenantId) {
281
+ return new ApiKeyStore(db)
282
+ .listByTenant(tenantId)
283
+ .filter((k) => k.revokedAt === null);
284
+ }
285
+ /**
286
+ * Look up the workspace (tenant) ID for a non-revoked API key hash.
287
+ * Returns null when the key is not found or has been revoked.
288
+ */
289
+ export function getWorkspaceForKey(db, keyHash) {
290
+ const row = db.prepare('SELECT tenant_id FROM api_keys WHERE key_hash = ? AND revoked_at IS NULL').get(keyHash);
291
+ return row?.tenant_id ?? null;
292
+ }
293
+ //# sourceMappingURL=api-keys.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-keys.js","sourceRoot":"","sources":["../../../src/core/db/api-keys.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import type Database from 'better-sqlite3';
2
+ import type { DepEdge, SymbolRecord } from '../types.js';
3
+ export declare function insertEdges(db: Database.Database, edges: DepEdge[], tenantId?: string): void;
4
+ export declare function deleteEdgesByFile(db: Database.Database, repoId: string, filePath: string): void;
5
+ /** All dependency edges for a repo. */
6
+ export declare function getAllDepEdges(db: Database.Database, repoId: string, tenantId?: string): DepEdge[];
7
+ /** Files and symbols that `sourceFile` imports (forward walk, one hop). */
8
+ export declare function getForwardDeps(db: Database.Database, repoId: string, sourceFile: string, tenantId?: string): DepEdge[];
9
+ /** Files and symbols that import `targetFile` (reverse walk, one hop). */
10
+ export declare function getReverseDeps(db: Database.Database, repoId: string, targetFile: string, tenantId?: string): DepEdge[];
11
+ /** Distinct file paths that import `targetFile`. */
12
+ export declare function getImportersOf(db: Database.Database, repoId: string, targetFile: string, tenantId?: string): string[];
13
+ /**
14
+ * Returns exported symbols whose file is never imported by any other file in
15
+ * the repo. Phase 1: file-level dead code detection.
16
+ */
17
+ export declare function findDeadExports(db: Database.Database, repoId: string, tenantId?: string): SymbolRecord[];
18
+ //# sourceMappingURL=dep-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dep-store.d.ts","sourceRoot":"","sources":["../../../src/core/db/dep-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAC3C,OAAO,KAAK,EAAE,OAAO,EAAE,YAAY,EAAc,MAAM,aAAa,CAAC;AA4DrE,wBAAgB,WAAW,CACzB,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,KAAK,EAAE,OAAO,EAAE,EAChB,QAAQ,SAAU,GACjB,IAAI,CAkCN;AAED,wBAAgB,iBAAiB,CAC/B,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GACf,IAAI,CAIN;AAED,uCAAuC;AACvC,wBAAgB,cAAc,CAC5B,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,MAAM,EAAE,MAAM,EACd,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,EAAE,CAaX;AAED,2EAA2E;AAC3E,wBAAgB,cAAc,CAC5B,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,EAAE,CAeX;AAED,0EAA0E;AAC1E,wBAAgB,cAAc,CAC5B,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,EAAE,CAeX;AAED,oDAAoD;AACpD,wBAAgB,cAAc,CAC5B,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,QAAQ,CAAC,EAAE,MAAM,GAChB,MAAM,EAAE,CAeV;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,MAAM,EAAE,MAAM,EACd,QAAQ,CAAC,EAAE,MAAM,GAChB,YAAY,EAAE,CAmChB"}