@sirius-mcp/mcp 1.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (382) hide show
  1. package/dist/adapters/crawl/csharp.d.ts +3 -0
  2. package/dist/adapters/crawl/csharp.d.ts.map +1 -0
  3. package/dist/adapters/crawl/csharp.js +15 -0
  4. package/dist/adapters/crawl/csharp.js.map +1 -0
  5. package/dist/adapters/crawl/go.d.ts +3 -0
  6. package/dist/adapters/crawl/go.d.ts.map +1 -0
  7. package/dist/adapters/crawl/go.js +16 -0
  8. package/dist/adapters/crawl/go.js.map +1 -0
  9. package/dist/adapters/crawl/index.d.ts +3 -0
  10. package/dist/adapters/crawl/index.d.ts.map +1 -0
  11. package/dist/adapters/crawl/index.js +16 -0
  12. package/dist/adapters/crawl/index.js.map +1 -0
  13. package/dist/adapters/crawl/java.d.ts +3 -0
  14. package/dist/adapters/crawl/java.d.ts.map +1 -0
  15. package/dist/adapters/crawl/java.js +19 -0
  16. package/dist/adapters/crawl/java.js.map +1 -0
  17. package/dist/adapters/crawl/js-ts.d.ts +3 -0
  18. package/dist/adapters/crawl/js-ts.d.ts.map +1 -0
  19. package/dist/adapters/crawl/js-ts.js +11 -0
  20. package/dist/adapters/crawl/js-ts.js.map +1 -0
  21. package/dist/adapters/crawl/python.d.ts +3 -0
  22. package/dist/adapters/crawl/python.d.ts.map +1 -0
  23. package/dist/adapters/crawl/python.js +19 -0
  24. package/dist/adapters/crawl/python.js.map +1 -0
  25. package/dist/adapters/crawl/rust.d.ts +3 -0
  26. package/dist/adapters/crawl/rust.d.ts.map +1 -0
  27. package/dist/adapters/crawl/rust.js +15 -0
  28. package/dist/adapters/crawl/rust.js.map +1 -0
  29. package/dist/adapters/db/sqlite-vec-adapter.d.ts +31 -0
  30. package/dist/adapters/db/sqlite-vec-adapter.d.ts.map +1 -0
  31. package/dist/adapters/db/sqlite-vec-adapter.js +191 -0
  32. package/dist/adapters/db/sqlite-vec-adapter.js.map +1 -0
  33. package/dist/adapters/embedding/transformers-onnx-adapter.d.ts +15 -0
  34. package/dist/adapters/embedding/transformers-onnx-adapter.d.ts.map +1 -0
  35. package/dist/adapters/embedding/transformers-onnx-adapter.js +125 -0
  36. package/dist/adapters/embedding/transformers-onnx-adapter.js.map +1 -0
  37. package/dist/adapters/fs/atomic.d.ts +2 -0
  38. package/dist/adapters/fs/atomic.d.ts.map +1 -0
  39. package/dist/adapters/fs/atomic.js +18 -0
  40. package/dist/adapters/fs/atomic.js.map +1 -0
  41. package/dist/adapters/fs/config.d.ts +6 -0
  42. package/dist/adapters/fs/config.d.ts.map +1 -0
  43. package/dist/adapters/fs/config.js +30 -0
  44. package/dist/adapters/fs/config.js.map +1 -0
  45. package/dist/adapters/fs/container-mounts.d.ts +4 -0
  46. package/dist/adapters/fs/container-mounts.d.ts.map +1 -0
  47. package/dist/adapters/fs/container-mounts.js +51 -0
  48. package/dist/adapters/fs/container-mounts.js.map +1 -0
  49. package/dist/adapters/fs/source-scan.d.ts +16 -0
  50. package/dist/adapters/fs/source-scan.d.ts.map +1 -0
  51. package/dist/adapters/fs/source-scan.js +118 -0
  52. package/dist/adapters/fs/source-scan.js.map +1 -0
  53. package/dist/adapters/fs/source-walk.d.ts +16 -0
  54. package/dist/adapters/fs/source-walk.d.ts.map +1 -0
  55. package/dist/adapters/fs/source-walk.js +195 -0
  56. package/dist/adapters/fs/source-walk.js.map +1 -0
  57. package/dist/adapters/fs/structure.d.ts +22 -0
  58. package/dist/adapters/fs/structure.d.ts.map +1 -0
  59. package/dist/adapters/fs/structure.js +146 -0
  60. package/dist/adapters/fs/structure.js.map +1 -0
  61. package/dist/adapters/fs/watch-fs.d.ts +61 -0
  62. package/dist/adapters/fs/watch-fs.d.ts.map +1 -0
  63. package/dist/adapters/fs/watch-fs.js +244 -0
  64. package/dist/adapters/fs/watch-fs.js.map +1 -0
  65. package/dist/adapters/http/embedded-server.d.ts +69 -0
  66. package/dist/adapters/http/embedded-server.d.ts.map +1 -0
  67. package/dist/adapters/http/embedded-server.js +270 -0
  68. package/dist/adapters/http/embedded-server.js.map +1 -0
  69. package/dist/adapters/http/raw-handler.d.ts +11 -0
  70. package/dist/adapters/http/raw-handler.d.ts.map +1 -0
  71. package/dist/adapters/http/raw-handler.js +87 -0
  72. package/dist/adapters/http/raw-handler.js.map +1 -0
  73. package/dist/adapters/http/security-middleware.d.ts +5 -0
  74. package/dist/adapters/http/security-middleware.d.ts.map +1 -0
  75. package/dist/adapters/http/security-middleware.js +48 -0
  76. package/dist/adapters/http/security-middleware.js.map +1 -0
  77. package/dist/adapters/license/fileStore.d.ts +4 -0
  78. package/dist/adapters/license/fileStore.d.ts.map +1 -0
  79. package/dist/adapters/license/fileStore.js +103 -0
  80. package/dist/adapters/license/fileStore.js.map +1 -0
  81. package/dist/adapters/license/offline.d.ts +34 -0
  82. package/dist/adapters/license/offline.d.ts.map +1 -0
  83. package/dist/adapters/license/offline.js +86 -0
  84. package/dist/adapters/license/offline.js.map +1 -0
  85. package/dist/adapters/license/phone-home.d.ts +56 -0
  86. package/dist/adapters/license/phone-home.d.ts.map +1 -0
  87. package/dist/adapters/license/phone-home.js +118 -0
  88. package/dist/adapters/license/phone-home.js.map +1 -0
  89. package/dist/adapters/mcp/crawl.d.ts +7 -0
  90. package/dist/adapters/mcp/crawl.d.ts.map +1 -0
  91. package/dist/adapters/mcp/crawl.js +57 -0
  92. package/dist/adapters/mcp/crawl.js.map +1 -0
  93. package/dist/adapters/mcp/get.d.ts +5 -0
  94. package/dist/adapters/mcp/get.d.ts.map +1 -0
  95. package/dist/adapters/mcp/get.js +57 -0
  96. package/dist/adapters/mcp/get.js.map +1 -0
  97. package/dist/adapters/mcp/index.d.ts +23 -0
  98. package/dist/adapters/mcp/index.d.ts.map +1 -0
  99. package/dist/adapters/mcp/index.js +51 -0
  100. package/dist/adapters/mcp/index.js.map +1 -0
  101. package/dist/adapters/mcp/init.d.ts +5 -0
  102. package/dist/adapters/mcp/init.d.ts.map +1 -0
  103. package/dist/adapters/mcp/init.js +52 -0
  104. package/dist/adapters/mcp/init.js.map +1 -0
  105. package/dist/adapters/mcp/list.d.ts +5 -0
  106. package/dist/adapters/mcp/list.d.ts.map +1 -0
  107. package/dist/adapters/mcp/list.js +63 -0
  108. package/dist/adapters/mcp/list.js.map +1 -0
  109. package/dist/adapters/mcp/reindex.d.ts +6 -0
  110. package/dist/adapters/mcp/reindex.d.ts.map +1 -0
  111. package/dist/adapters/mcp/reindex.js +38 -0
  112. package/dist/adapters/mcp/reindex.js.map +1 -0
  113. package/dist/adapters/mcp/resources.d.ts +20 -0
  114. package/dist/adapters/mcp/resources.d.ts.map +1 -0
  115. package/dist/adapters/mcp/resources.js +111 -0
  116. package/dist/adapters/mcp/resources.js.map +1 -0
  117. package/dist/adapters/mcp/search.d.ts +7 -0
  118. package/dist/adapters/mcp/search.d.ts.map +1 -0
  119. package/dist/adapters/mcp/search.js +56 -0
  120. package/dist/adapters/mcp/search.js.map +1 -0
  121. package/dist/adapters/mcp/upsert.d.ts +6 -0
  122. package/dist/adapters/mcp/upsert.d.ts.map +1 -0
  123. package/dist/adapters/mcp/upsert.js +116 -0
  124. package/dist/adapters/mcp/upsert.js.map +1 -0
  125. package/dist/adapters/sqlite/ftsIndex.d.ts +35 -0
  126. package/dist/adapters/sqlite/ftsIndex.d.ts.map +1 -0
  127. package/dist/adapters/sqlite/ftsIndex.js +208 -0
  128. package/dist/adapters/sqlite/ftsIndex.js.map +1 -0
  129. package/dist/adapters/update/check.d.ts +42 -0
  130. package/dist/adapters/update/check.d.ts.map +1 -0
  131. package/dist/adapters/update/check.js +113 -0
  132. package/dist/adapters/update/check.js.map +1 -0
  133. package/dist/adapters/update/status.d.ts +8 -0
  134. package/dist/adapters/update/status.d.ts.map +1 -0
  135. package/dist/adapters/update/status.js +26 -0
  136. package/dist/adapters/update/status.js.map +1 -0
  137. package/dist/app/crawl.d.ts +27 -0
  138. package/dist/app/crawl.d.ts.map +1 -0
  139. package/dist/app/crawl.js +156 -0
  140. package/dist/app/crawl.js.map +1 -0
  141. package/dist/app/get.d.ts +64 -0
  142. package/dist/app/get.d.ts.map +1 -0
  143. package/dist/app/get.js +130 -0
  144. package/dist/app/get.js.map +1 -0
  145. package/dist/app/index-lifecycle.d.ts +14 -0
  146. package/dist/app/index-lifecycle.d.ts.map +1 -0
  147. package/dist/app/index-lifecycle.js +43 -0
  148. package/dist/app/index-lifecycle.js.map +1 -0
  149. package/dist/app/index-status.d.ts +29 -0
  150. package/dist/app/index-status.d.ts.map +1 -0
  151. package/dist/app/index-status.js +20 -0
  152. package/dist/app/index-status.js.map +1 -0
  153. package/dist/app/init.d.ts +27 -0
  154. package/dist/app/init.d.ts.map +1 -0
  155. package/dist/app/init.js +46 -0
  156. package/dist/app/init.js.map +1 -0
  157. package/dist/app/license-gate.d.ts +10 -0
  158. package/dist/app/license-gate.d.ts.map +1 -0
  159. package/dist/app/license-gate.js +24 -0
  160. package/dist/app/license-gate.js.map +1 -0
  161. package/dist/app/list.d.ts +36 -0
  162. package/dist/app/list.d.ts.map +1 -0
  163. package/dist/app/list.js +42 -0
  164. package/dist/app/list.js.map +1 -0
  165. package/dist/app/loadProjectConfig.d.ts +16 -0
  166. package/dist/app/loadProjectConfig.d.ts.map +1 -0
  167. package/dist/app/loadProjectConfig.js +48 -0
  168. package/dist/app/loadProjectConfig.js.map +1 -0
  169. package/dist/app/reindex.d.ts +27 -0
  170. package/dist/app/reindex.d.ts.map +1 -0
  171. package/dist/app/reindex.js +97 -0
  172. package/dist/app/reindex.js.map +1 -0
  173. package/dist/app/search-orchestrator.d.ts +13 -0
  174. package/dist/app/search-orchestrator.d.ts.map +1 -0
  175. package/dist/app/search-orchestrator.js +63 -0
  176. package/dist/app/search-orchestrator.js.map +1 -0
  177. package/dist/app/search.d.ts +28 -0
  178. package/dist/app/search.d.ts.map +1 -0
  179. package/dist/app/search.js +45 -0
  180. package/dist/app/search.js.map +1 -0
  181. package/dist/app/upsert.d.ts +75 -0
  182. package/dist/app/upsert.d.ts.map +1 -0
  183. package/dist/app/upsert.js +79 -0
  184. package/dist/app/upsert.js.map +1 -0
  185. package/dist/app/vector-backfill.d.ts +27 -0
  186. package/dist/app/vector-backfill.d.ts.map +1 -0
  187. package/dist/app/vector-backfill.js +78 -0
  188. package/dist/app/vector-backfill.js.map +1 -0
  189. package/dist/app/watch.d.ts +56 -0
  190. package/dist/app/watch.d.ts.map +1 -0
  191. package/dist/app/watch.js +154 -0
  192. package/dist/app/watch.js.map +1 -0
  193. package/dist/app/web-portal-search.d.ts +11 -0
  194. package/dist/app/web-portal-search.d.ts.map +1 -0
  195. package/dist/app/web-portal-search.js +97 -0
  196. package/dist/app/web-portal-search.js.map +1 -0
  197. package/dist/app/web-portal-service.d.ts +37 -0
  198. package/dist/app/web-portal-service.d.ts.map +1 -0
  199. package/dist/app/web-portal-service.js +198 -0
  200. package/dist/app/web-portal-service.js.map +1 -0
  201. package/dist/config.d.ts +28 -0
  202. package/dist/config.d.ts.map +1 -0
  203. package/dist/config.js +53 -0
  204. package/dist/config.js.map +1 -0
  205. package/dist/domain/crawl.d.ts +40 -0
  206. package/dist/domain/crawl.d.ts.map +1 -0
  207. package/dist/domain/crawl.js +68 -0
  208. package/dist/domain/crawl.js.map +1 -0
  209. package/dist/domain/embedding-port.d.ts +12 -0
  210. package/dist/domain/embedding-port.d.ts.map +1 -0
  211. package/dist/domain/embedding-port.js +2 -0
  212. package/dist/domain/embedding-port.js.map +1 -0
  213. package/dist/domain/hybrid-search.d.ts +48 -0
  214. package/dist/domain/hybrid-search.d.ts.map +1 -0
  215. package/dist/domain/hybrid-search.js +144 -0
  216. package/dist/domain/hybrid-search.js.map +1 -0
  217. package/dist/domain/index-writer.d.ts +59 -0
  218. package/dist/domain/index-writer.d.ts.map +1 -0
  219. package/dist/domain/index-writer.js +203 -0
  220. package/dist/domain/index-writer.js.map +1 -0
  221. package/dist/domain/index.d.ts +37 -0
  222. package/dist/domain/index.d.ts.map +1 -0
  223. package/dist/domain/index.js +11 -0
  224. package/dist/domain/index.js.map +1 -0
  225. package/dist/domain/license.d.ts +32 -0
  226. package/dist/domain/license.d.ts.map +1 -0
  227. package/dist/domain/license.js +23 -0
  228. package/dist/domain/license.js.map +1 -0
  229. package/dist/domain/source-adapter.d.ts +31 -0
  230. package/dist/domain/source-adapter.d.ts.map +1 -0
  231. package/dist/domain/source-adapter.js +70 -0
  232. package/dist/domain/source-adapter.js.map +1 -0
  233. package/dist/domain/watch-config.d.ts +14 -0
  234. package/dist/domain/watch-config.d.ts.map +1 -0
  235. package/dist/domain/watch-config.js +29 -0
  236. package/dist/domain/watch-config.js.map +1 -0
  237. package/dist/domain/watch.d.ts +64 -0
  238. package/dist/domain/watch.d.ts.map +1 -0
  239. package/dist/domain/watch.js +101 -0
  240. package/dist/domain/watch.js.map +1 -0
  241. package/dist/domain/watcher-port.d.ts +16 -0
  242. package/dist/domain/watcher-port.d.ts.map +1 -0
  243. package/dist/domain/watcher-port.js +2 -0
  244. package/dist/domain/watcher-port.js.map +1 -0
  245. package/dist/domain/web-server-port.d.ts +25 -0
  246. package/dist/domain/web-server-port.d.ts.map +1 -0
  247. package/dist/domain/web-server-port.js +2 -0
  248. package/dist/domain/web-server-port.js.map +1 -0
  249. package/dist/errors.d.ts +20 -0
  250. package/dist/errors.d.ts.map +1 -0
  251. package/dist/errors.js +72 -0
  252. package/dist/errors.js.map +1 -0
  253. package/dist/public/assets/d3-WlJuvznM.js +1 -0
  254. package/dist/public/assets/icons-fLoaB2oH.js +216 -0
  255. package/dist/public/assets/index-BMOY5R3r.js +33 -0
  256. package/dist/public/assets/index-DtnaN3wg.css +1 -0
  257. package/dist/public/assets/inter-cyrillic-400-normal-HOLc17fK.woff +0 -0
  258. package/dist/public/assets/inter-cyrillic-400-normal-obahsSVq.woff2 +0 -0
  259. package/dist/public/assets/inter-cyrillic-500-normal-BasfLYem.woff2 +0 -0
  260. package/dist/public/assets/inter-cyrillic-500-normal-CxZf_p3X.woff +0 -0
  261. package/dist/public/assets/inter-cyrillic-600-normal-4D_pXhcN.woff +0 -0
  262. package/dist/public/assets/inter-cyrillic-600-normal-CWCymEST.woff2 +0 -0
  263. package/dist/public/assets/inter-cyrillic-700-normal-CjBOestx.woff2 +0 -0
  264. package/dist/public/assets/inter-cyrillic-700-normal-DrXBdSj3.woff +0 -0
  265. package/dist/public/assets/inter-cyrillic-ext-400-normal-BQZuk6qB.woff2 +0 -0
  266. package/dist/public/assets/inter-cyrillic-ext-400-normal-DQukG94-.woff +0 -0
  267. package/dist/public/assets/inter-cyrillic-ext-500-normal-B0yAr1jD.woff2 +0 -0
  268. package/dist/public/assets/inter-cyrillic-ext-500-normal-BmqWE9Dz.woff +0 -0
  269. package/dist/public/assets/inter-cyrillic-ext-600-normal-Bcila6Z-.woff +0 -0
  270. package/dist/public/assets/inter-cyrillic-ext-600-normal-Dfes3d0z.woff2 +0 -0
  271. package/dist/public/assets/inter-cyrillic-ext-700-normal-BjwYoWNd.woff2 +0 -0
  272. package/dist/public/assets/inter-cyrillic-ext-700-normal-LO58E6JB.woff +0 -0
  273. package/dist/public/assets/inter-greek-400-normal-B4URO6DV.woff2 +0 -0
  274. package/dist/public/assets/inter-greek-400-normal-q2sYcFCs.woff +0 -0
  275. package/dist/public/assets/inter-greek-500-normal-BIZE56-Y.woff2 +0 -0
  276. package/dist/public/assets/inter-greek-500-normal-Xzm54t5V.woff +0 -0
  277. package/dist/public/assets/inter-greek-600-normal-BZpKdvQh.woff +0 -0
  278. package/dist/public/assets/inter-greek-600-normal-plRanbMR.woff2 +0 -0
  279. package/dist/public/assets/inter-greek-700-normal-BUv2fZ6O.woff +0 -0
  280. package/dist/public/assets/inter-greek-700-normal-C3JjAnD8.woff2 +0 -0
  281. package/dist/public/assets/inter-greek-ext-400-normal-DGGRlc-M.woff2 +0 -0
  282. package/dist/public/assets/inter-greek-ext-400-normal-KugGGMne.woff +0 -0
  283. package/dist/public/assets/inter-greek-ext-500-normal-2j5mBUwD.woff +0 -0
  284. package/dist/public/assets/inter-greek-ext-500-normal-C4iEst2y.woff2 +0 -0
  285. package/dist/public/assets/inter-greek-ext-600-normal-B8X0CLgF.woff +0 -0
  286. package/dist/public/assets/inter-greek-ext-600-normal-DRtmH8MT.woff2 +0 -0
  287. package/dist/public/assets/inter-greek-ext-700-normal-BoQ6DsYi.woff +0 -0
  288. package/dist/public/assets/inter-greek-ext-700-normal-qfdV9bQt.woff2 +0 -0
  289. package/dist/public/assets/inter-latin-400-normal-C38fXH4l.woff2 +0 -0
  290. package/dist/public/assets/inter-latin-400-normal-CyCys3Eg.woff +0 -0
  291. package/dist/public/assets/inter-latin-500-normal-BL9OpVg8.woff +0 -0
  292. package/dist/public/assets/inter-latin-500-normal-Cerq10X2.woff2 +0 -0
  293. package/dist/public/assets/inter-latin-600-normal-CiBQ2DWP.woff +0 -0
  294. package/dist/public/assets/inter-latin-600-normal-LgqL8muc.woff2 +0 -0
  295. package/dist/public/assets/inter-latin-700-normal-BLAVimhd.woff +0 -0
  296. package/dist/public/assets/inter-latin-700-normal-Yt3aPRUw.woff2 +0 -0
  297. package/dist/public/assets/inter-latin-ext-400-normal-77YHD8bZ.woff +0 -0
  298. package/dist/public/assets/inter-latin-ext-400-normal-C1nco2VV.woff2 +0 -0
  299. package/dist/public/assets/inter-latin-ext-500-normal-BxGbmqWO.woff +0 -0
  300. package/dist/public/assets/inter-latin-ext-500-normal-CV4jyFjo.woff2 +0 -0
  301. package/dist/public/assets/inter-latin-ext-600-normal-CIVaiw4L.woff +0 -0
  302. package/dist/public/assets/inter-latin-ext-600-normal-D2bJ5OIk.woff2 +0 -0
  303. package/dist/public/assets/inter-latin-ext-700-normal-Ca8adRJv.woff2 +0 -0
  304. package/dist/public/assets/inter-latin-ext-700-normal-TidjK2hL.woff +0 -0
  305. package/dist/public/assets/inter-vietnamese-400-normal-Bbgyi5SW.woff +0 -0
  306. package/dist/public/assets/inter-vietnamese-400-normal-DMkecbls.woff2 +0 -0
  307. package/dist/public/assets/inter-vietnamese-500-normal-DOriooB6.woff2 +0 -0
  308. package/dist/public/assets/inter-vietnamese-500-normal-mJboJaSs.woff +0 -0
  309. package/dist/public/assets/inter-vietnamese-600-normal-BuLX-rYi.woff +0 -0
  310. package/dist/public/assets/inter-vietnamese-600-normal-Cc8MFFhd.woff2 +0 -0
  311. package/dist/public/assets/inter-vietnamese-700-normal-BZaoP0fm.woff +0 -0
  312. package/dist/public/assets/inter-vietnamese-700-normal-DlLaEgI2.woff2 +0 -0
  313. package/dist/public/assets/jetbrains-mono-cyrillic-400-normal-BEIGL1Tu.woff2 +0 -0
  314. package/dist/public/assets/jetbrains-mono-cyrillic-400-normal-ugxPyKxw.woff +0 -0
  315. package/dist/public/assets/jetbrains-mono-cyrillic-500-normal-DJqRU3vO.woff +0 -0
  316. package/dist/public/assets/jetbrains-mono-cyrillic-500-normal-DmUKJPL_.woff2 +0 -0
  317. package/dist/public/assets/jetbrains-mono-cyrillic-600-normal-8K4wrrwR.woff +0 -0
  318. package/dist/public/assets/jetbrains-mono-cyrillic-600-normal-EVf6-Yzo.woff2 +0 -0
  319. package/dist/public/assets/jetbrains-mono-greek-400-normal-B9oWc5Lo.woff +0 -0
  320. package/dist/public/assets/jetbrains-mono-greek-400-normal-C190GLew.woff2 +0 -0
  321. package/dist/public/assets/jetbrains-mono-greek-500-normal-D7SFKleX.woff +0 -0
  322. package/dist/public/assets/jetbrains-mono-greek-500-normal-JpySY46c.woff2 +0 -0
  323. package/dist/public/assets/jetbrains-mono-greek-600-normal-H7WoG9Et.woff2 +0 -0
  324. package/dist/public/assets/jetbrains-mono-greek-600-normal-mc2nkWzM.woff +0 -0
  325. package/dist/public/assets/jetbrains-mono-latin-400-normal-6-qcROiO.woff +0 -0
  326. package/dist/public/assets/jetbrains-mono-latin-400-normal-V6pRDFza.woff2 +0 -0
  327. package/dist/public/assets/jetbrains-mono-latin-500-normal-BWZEU5yA.woff2 +0 -0
  328. package/dist/public/assets/jetbrains-mono-latin-500-normal-CJOVTJB7.woff +0 -0
  329. package/dist/public/assets/jetbrains-mono-latin-600-normal-BfsvjouI.woff +0 -0
  330. package/dist/public/assets/jetbrains-mono-latin-600-normal-C8RAYTDA.woff2 +0 -0
  331. package/dist/public/assets/jetbrains-mono-latin-ext-400-normal-Bc8Ftmh3.woff2 +0 -0
  332. package/dist/public/assets/jetbrains-mono-latin-ext-400-normal-fXTG6kC5.woff +0 -0
  333. package/dist/public/assets/jetbrains-mono-latin-ext-500-normal-Cut-4mMH.woff2 +0 -0
  334. package/dist/public/assets/jetbrains-mono-latin-ext-500-normal-ckzbgY84.woff +0 -0
  335. package/dist/public/assets/jetbrains-mono-latin-ext-600-normal-BfB_LPfz.woff2 +0 -0
  336. package/dist/public/assets/jetbrains-mono-latin-ext-600-normal-DObL3zCW.woff +0 -0
  337. package/dist/public/assets/jetbrains-mono-vietnamese-400-normal-CqNFfHCs.woff +0 -0
  338. package/dist/public/assets/jetbrains-mono-vietnamese-500-normal-DNRqzVM1.woff +0 -0
  339. package/dist/public/assets/jetbrains-mono-vietnamese-600-normal-OWROknRo.woff +0 -0
  340. package/dist/public/assets/markdown-ClyHvAfw.js +64 -0
  341. package/dist/public/assets/newsreader-latin-400-italic-CEihAR-f.woff2 +0 -0
  342. package/dist/public/assets/newsreader-latin-400-italic-CNZoH1hn.woff +0 -0
  343. package/dist/public/assets/newsreader-latin-400-normal-BFBkh4jY.woff2 +0 -0
  344. package/dist/public/assets/newsreader-latin-400-normal-gRTjlS2D.woff +0 -0
  345. package/dist/public/assets/newsreader-latin-600-normal-30OJ_TG_.woff2 +0 -0
  346. package/dist/public/assets/newsreader-latin-600-normal-DUnT2r2g.woff +0 -0
  347. package/dist/public/assets/newsreader-latin-ext-400-italic-BMTE_bNQ.woff2 +0 -0
  348. package/dist/public/assets/newsreader-latin-ext-400-italic-qdgKLcPG.woff +0 -0
  349. package/dist/public/assets/newsreader-latin-ext-400-normal-DYA1XoQK.woff +0 -0
  350. package/dist/public/assets/newsreader-latin-ext-400-normal-svq1FPys.woff2 +0 -0
  351. package/dist/public/assets/newsreader-latin-ext-600-normal-BXv5iMHi.woff2 +0 -0
  352. package/dist/public/assets/newsreader-latin-ext-600-normal-BrbfzHZ5.woff +0 -0
  353. package/dist/public/assets/newsreader-vietnamese-400-italic-QbB8kb5s.woff +0 -0
  354. package/dist/public/assets/newsreader-vietnamese-400-italic-bZegYFuM.woff2 +0 -0
  355. package/dist/public/assets/newsreader-vietnamese-400-normal-BekUZro8.woff +0 -0
  356. package/dist/public/assets/newsreader-vietnamese-400-normal-DdKr49mV.woff2 +0 -0
  357. package/dist/public/assets/newsreader-vietnamese-600-normal-CVAR0otO.woff +0 -0
  358. package/dist/public/assets/newsreader-vietnamese-600-normal-CaH84vfx.woff2 +0 -0
  359. package/dist/public/assets/vendor-D9lk2KFa.js +17 -0
  360. package/dist/public/brand/sirius-icon.png +0 -0
  361. package/dist/public/brand/sirius-logo-full.png +0 -0
  362. package/dist/public/brand/sirius-wordmark.png +0 -0
  363. package/dist/public/favicon.png +0 -0
  364. package/dist/public/index.html +19 -0
  365. package/dist/schemas/document.d.ts +93 -0
  366. package/dist/schemas/document.d.ts.map +1 -0
  367. package/dist/schemas/document.js +102 -0
  368. package/dist/schemas/document.js.map +1 -0
  369. package/dist/schemas/project.d.ts +16 -0
  370. package/dist/schemas/project.d.ts.map +1 -0
  371. package/dist/schemas/project.js +7 -0
  372. package/dist/schemas/project.js.map +1 -0
  373. package/dist/server-bootstrap.d.ts +16 -0
  374. package/dist/server-bootstrap.d.ts.map +1 -0
  375. package/dist/server-bootstrap.js +184 -0
  376. package/dist/server-bootstrap.js.map +1 -0
  377. package/dist/server.d.ts +3 -0
  378. package/dist/server.d.ts.map +1 -0
  379. package/dist/server.js +114 -0
  380. package/dist/server.js.map +1 -0
  381. package/package.json +67 -0
  382. package/scripts/quality-gate/install-hooks.mjs +20 -0
@@ -0,0 +1,208 @@
1
+ import { resolve, join } from "node:path";
2
+ import { mkdirSync } from "node:fs";
3
+ import Database from "better-sqlite3";
4
+ import { IndexAdapterError, } from "../../domain/index.js";
5
+ export const SCHEMA_VERSION = "2";
6
+ export const INDEX_DIR = join(".context", ".index");
7
+ export const DB_FILE = "sirius.db";
8
+ export class FtsIndexAdapter {
9
+ db = null;
10
+ _needsRebuild = false;
11
+ isOpen() {
12
+ return this.db !== null;
13
+ }
14
+ open(root) {
15
+ if (this.db) {
16
+ return;
17
+ }
18
+ const dbPath = resolve(root, INDEX_DIR, DB_FILE);
19
+ try {
20
+ mkdirSync(resolve(root, INDEX_DIR), { recursive: true });
21
+ this.db = new Database(dbPath);
22
+ this.db.pragma("journal_mode = WAL");
23
+ this.db.pragma("foreign_keys = OFF");
24
+ this.initializeSchema();
25
+ }
26
+ catch (err) {
27
+ this.db?.close();
28
+ this.db = null;
29
+ throw new IndexAdapterError("INDEX_OPEN_FAILED", `Failed to open index database at ${dbPath}: ${err instanceof Error ? err.message : String(err)}`, err);
30
+ }
31
+ }
32
+ close() {
33
+ this.db?.close();
34
+ this.db = null;
35
+ this._needsRebuild = false;
36
+ }
37
+ needsRebuild() {
38
+ return this._needsRebuild;
39
+ }
40
+ upsert(doc) {
41
+ this.ensureOpen();
42
+ const deleteStmt = this.db.prepare("DELETE FROM documents_fts WHERE id = ? AND type = ?");
43
+ const insertStmt = this.db.prepare("INSERT INTO documents_fts (id, type, status, title, body, path) VALUES (?, ?, ?, ?, ?, ?)");
44
+ const transaction = this.db.transaction((d) => {
45
+ deleteStmt.run(d.id, d.type);
46
+ const cleanBody = sanitizeBodyForFts(d.body);
47
+ insertStmt.run(d.id, d.type, d.status, d.title, cleanBody, d.path);
48
+ });
49
+ transaction(doc);
50
+ }
51
+ remove(type, id) {
52
+ this.ensureOpen();
53
+ const stmt = this.db.prepare("DELETE FROM documents_fts WHERE id = ? AND type = ?");
54
+ stmt.run(id, type);
55
+ }
56
+ search(query, limit = 5) {
57
+ this.ensureOpen();
58
+ const safeQuery = sanitizeFtsQuery(query);
59
+ if (!safeQuery) {
60
+ return [];
61
+ }
62
+ const stmt = this.db.prepare(`SELECT id, type, status, title, path,
63
+ snippet(documents_fts, 4, '<<<', '>>>', '...', 32) as snippet
64
+ FROM documents_fts
65
+ WHERE documents_fts MATCH ?
66
+ ORDER BY rank
67
+ LIMIT ?`);
68
+ let rows = stmt.all(safeQuery, limit);
69
+ if (rows.length === 0) {
70
+ const orQuery = sanitizeFtsOrQuery(query);
71
+ if (orQuery && orQuery !== safeQuery) {
72
+ try {
73
+ rows = stmt.all(orQuery, limit);
74
+ }
75
+ catch {
76
+ // ignore FTS syntax errors
77
+ }
78
+ }
79
+ }
80
+ return rows.map((row) => ({
81
+ id: row.id,
82
+ type: row.type,
83
+ status: row.status,
84
+ title: row.title,
85
+ path: row.path,
86
+ snippet: normalizeSnippet(row.snippet),
87
+ }));
88
+ }
89
+ rebuild(docs) {
90
+ this.ensureOpen();
91
+ const createFts = this.db.prepare(`CREATE VIRTUAL TABLE IF NOT EXISTS documents_fts USING fts5(
92
+ id UNINDEXED, type UNINDEXED, status UNINDEXED,
93
+ title, body, path UNINDEXED,
94
+ tokenize = 'porter unicode61'
95
+ )`);
96
+ const dropFts = this.db.prepare("DROP TABLE IF EXISTS documents_fts");
97
+ const insertStmt = this.db.prepare("INSERT INTO documents_fts (id, type, status, title, body, path) VALUES (?, ?, ?, ?, ?, ?)");
98
+ const setVersion = this.db.prepare(`INSERT INTO index_meta (key, value) VALUES ('schema_version', ?)
99
+ ON CONFLICT(key) DO UPDATE SET value = excluded.value`);
100
+ const transaction = this.db.transaction((documents) => {
101
+ dropFts.run();
102
+ createFts.run();
103
+ for (const doc of documents) {
104
+ const cleanBody = sanitizeBodyForFts(doc.body);
105
+ insertStmt.run(doc.id, doc.type, doc.status, doc.title, cleanBody, doc.path);
106
+ }
107
+ setVersion.run(SCHEMA_VERSION);
108
+ });
109
+ transaction(docs);
110
+ this._needsRebuild = false;
111
+ }
112
+ initializeSchema() {
113
+ this.db.exec(`CREATE TABLE IF NOT EXISTS index_meta (
114
+ key TEXT PRIMARY KEY,
115
+ value TEXT NOT NULL
116
+ )`);
117
+ const createFts = this.db.prepare(`CREATE VIRTUAL TABLE IF NOT EXISTS documents_fts USING fts5(
118
+ id UNINDEXED, type UNINDEXED, status UNINDEXED,
119
+ title, body, path UNINDEXED,
120
+ tokenize = 'porter unicode61'
121
+ )`);
122
+ createFts.run();
123
+ const row = this.db
124
+ .prepare("SELECT value FROM index_meta WHERE key = 'schema_version'")
125
+ .get();
126
+ if (!row || row.value !== SCHEMA_VERSION) {
127
+ this._needsRebuild = true;
128
+ }
129
+ }
130
+ ensureOpen() {
131
+ if (!this.db) {
132
+ throw new IndexAdapterError("INDEX_NOT_OPEN", "Index database is not open");
133
+ }
134
+ }
135
+ }
136
+ export function sanitizeFtsQuery(query) {
137
+ const tokens = query
138
+ .trim()
139
+ .split(/\s+/)
140
+ .filter((t) => t.length > 0)
141
+ .map((t) => `"${t.replace(/"/g, '""')}"*`);
142
+ return tokens.join(" ");
143
+ }
144
+ export function sanitizeFtsOrQuery(query) {
145
+ const rawTokens = query.trim().match(/[a-zA-Z0-9_-]+/g) ?? [];
146
+ const tokens = rawTokens
147
+ .filter((t) => t.length >= 2)
148
+ .map((t) => `"${t.replace(/"/g, '""')}"*`);
149
+ return tokens.join(" OR ");
150
+ }
151
+ export function normalizeSnippet(snippet, maxChars = 200) {
152
+ if (!snippet)
153
+ return "";
154
+ const normalized = snippet.replace(/\s+/g, " ").trim();
155
+ if (normalized.length <= maxChars)
156
+ return normalized;
157
+ return normalized.slice(0, maxChars).trimEnd() + "…";
158
+ }
159
+ export function indexDbPath(root) {
160
+ return resolve(root, INDEX_DIR, DB_FILE);
161
+ }
162
+ export function indexDir(root) {
163
+ return resolve(root, INDEX_DIR);
164
+ }
165
+ /**
166
+ * Extrai texto semântico de blocos SVG/XML e remove toda sintaxe de tags e atributos,
167
+ * prevenindo poluição de FTS5 e gerando snippets de busca limpos.
168
+ */
169
+ export function sanitizeBodyForFts(body) {
170
+ if (!body || body.trim().length === 0) {
171
+ return "";
172
+ }
173
+ return body.replace(/(?:```(?:xml|svg|html)?\s*)?<svg[\s\S]*?<\/svg>(?:\s*```)?/gi, (svgBlock) => extractSvgTextContent(svgBlock));
174
+ }
175
+ /**
176
+ * Extrai o conteúdo legível de tags <text>, <tspan>, <title>, <desc>
177
+ * e remove qualquer outra tag XML/HTML residual, comentários e estilos.
178
+ */
179
+ export function extractSvgTextContent(svgSnippet) {
180
+ const cleanSvg = svgSnippet
181
+ .replace(/<!--[\s\S]*?-->/g, " ")
182
+ .replace(/<style[\s\S]*?<\/style>/gi, " ");
183
+ const extractedWords = [];
184
+ const textTagRegex = /<(?:title|desc|text|tspan)[^>]*>([\s\S]*?)<\/(?:title|desc|text|tspan)>/gi;
185
+ let match;
186
+ while ((match = textTagRegex.exec(cleanSvg)) !== null) {
187
+ const rawContent = match[1];
188
+ const stripped = rawContent.replace(/<[^>]+>/g, " ").trim();
189
+ if (stripped.length > 0) {
190
+ extractedWords.push(unescapeXmlEntities(stripped));
191
+ }
192
+ }
193
+ return extractedWords.join(" ");
194
+ }
195
+ export function unescapeXmlEntities(text) {
196
+ return text
197
+ .replace(/&amp;/g, "&")
198
+ .replace(/&lt;/g, "<")
199
+ .replace(/&gt;/g, ">")
200
+ .replace(/&quot;/g, '"')
201
+ .replace(/&(?:apos|#39|#x27);/gi, "'")
202
+ .replace(/&nbsp;/gi, " ")
203
+ .replace(/&#(\d+);/g, (_, dec) => String.fromCharCode(Number(dec)))
204
+ .replace(/&#x([0-9a-fA-F]+);/g, (_, hex) => String.fromCharCode(parseInt(hex, 16)))
205
+ .replace(/\s+/g, " ")
206
+ .trim();
207
+ }
208
+ //# sourceMappingURL=ftsIndex.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ftsIndex.js","sourceRoot":"","sources":["../../../src/adapters/sqlite/ftsIndex.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ import { URL } from "node:url";
2
+ import { z } from "zod";
3
+ export declare const releaseResponseSchema: z.ZodObject<{
4
+ latestVersion: z.ZodString;
5
+ downloadUrl: z.ZodString;
6
+ checksum: z.ZodString;
7
+ }, "strip", z.ZodTypeAny, {
8
+ latestVersion: string;
9
+ downloadUrl: string;
10
+ checksum: string;
11
+ }, {
12
+ latestVersion: string;
13
+ downloadUrl: string;
14
+ checksum: string;
15
+ }>;
16
+ export interface ReleaseMetadata {
17
+ readonly latestVersion: string;
18
+ readonly downloadUrl: string;
19
+ readonly checksum: string;
20
+ }
21
+ export interface CheckForUpdatesInput {
22
+ readonly currentVersion: string;
23
+ readonly arch: string;
24
+ readonly licenseKey?: string;
25
+ readonly releaseEndpoint: string;
26
+ }
27
+ export type CheckResult = {
28
+ readonly status: "up-to-date";
29
+ } | {
30
+ readonly status: "update-available";
31
+ readonly latestVersion: string;
32
+ readonly downloadUrl: string;
33
+ readonly checksum: string;
34
+ } | {
35
+ readonly status: "error";
36
+ readonly message: string;
37
+ };
38
+ export declare function buildReleaseUrl(endpoint: string, currentVersion: string, arch: string, licenseKey?: string): URL;
39
+ export declare function fetchReleaseMetadata(input: CheckForUpdatesInput): Promise<ReleaseMetadata>;
40
+ export declare function isNewer(latest: string, current: string): boolean;
41
+ export declare function checkForUpdates(input: CheckForUpdatesInput): Promise<CheckResult>;
42
+ //# sourceMappingURL=check.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../../src/adapters/update/check.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,qBAAqB;;;;;;;;;;;;EAIhC,CAAC;AAEH,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;CAClC;AAED,MAAM,MAAM,WAAW,GACnB;IAAE,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAA;CAAE,GACjC;IACE,QAAQ,CAAC,MAAM,EAAE,kBAAkB,CAAC;IACpC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B,GACD;IAAE,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAE3D,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,MAAM,EAChB,cAAc,EAAE,MAAM,EACtB,IAAI,EAAE,MAAM,EACZ,UAAU,CAAC,EAAE,MAAM,GAClB,GAAG,CASL;AAwDD,wBAAsB,oBAAoB,CACxC,KAAK,EAAE,oBAAoB,GAC1B,OAAO,CAAC,eAAe,CAAC,CAS1B;AAED,wBAAgB,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAmBhE;AAED,wBAAsB,eAAe,CACnC,KAAK,EAAE,oBAAoB,GAC1B,OAAO,CAAC,WAAW,CAAC,CAatB"}
@@ -0,0 +1,113 @@
1
+ import { request as httpRequest } from "node:http";
2
+ import { request as httpsRequest } from "node:https";
3
+ import { URL } from "node:url";
4
+ import { z } from "zod";
5
+ export const releaseResponseSchema = z.object({
6
+ latestVersion: z.string(),
7
+ downloadUrl: z.string(),
8
+ checksum: z.string(),
9
+ });
10
+ export function buildReleaseUrl(endpoint, currentVersion, arch, licenseKey) {
11
+ const url = new URL(endpoint);
12
+ url.search = "";
13
+ url.searchParams.set("version", currentVersion);
14
+ url.searchParams.set("arch", arch);
15
+ if (licenseKey) {
16
+ url.searchParams.set("licenseKey", licenseKey);
17
+ }
18
+ return url;
19
+ }
20
+ const MAX_RESPONSE_CHARS = 64 * 1024;
21
+ function requestJson(url) {
22
+ return new Promise((resolve, reject) => {
23
+ const doRequest = url.protocol === "https:" ? httpsRequest : httpRequest;
24
+ const req = doRequest(url, {
25
+ method: "GET",
26
+ timeout: 10000,
27
+ headers: { Accept: "application/json" },
28
+ }, (res) => {
29
+ let data = "";
30
+ let settled = false;
31
+ res.setEncoding("utf8");
32
+ res.on("data", (chunk) => {
33
+ if (settled)
34
+ return;
35
+ data += chunk;
36
+ if (data.length > MAX_RESPONSE_CHARS) {
37
+ settled = true;
38
+ reject(new Error("release endpoint response exceeds 64 KB limit"));
39
+ req.destroy();
40
+ }
41
+ });
42
+ res.on("error", (err) => {
43
+ if (settled)
44
+ return;
45
+ settled = true;
46
+ reject(err);
47
+ });
48
+ res.on("end", () => {
49
+ if (settled)
50
+ return;
51
+ settled = true;
52
+ if (res.statusCode && (res.statusCode < 200 || res.statusCode >= 300)) {
53
+ reject(new Error(`release endpoint returned ${res.statusCode}`));
54
+ return;
55
+ }
56
+ try {
57
+ resolve(JSON.parse(data));
58
+ }
59
+ catch {
60
+ reject(new Error("invalid JSON from release endpoint"));
61
+ }
62
+ });
63
+ });
64
+ req.on("error", reject);
65
+ req.on("timeout", () => {
66
+ req.destroy();
67
+ reject(new Error("release endpoint timeout"));
68
+ });
69
+ req.end();
70
+ });
71
+ }
72
+ export async function fetchReleaseMetadata(input) {
73
+ const url = buildReleaseUrl(input.releaseEndpoint, input.currentVersion, input.arch, input.licenseKey);
74
+ const raw = await requestJson(url);
75
+ return releaseResponseSchema.parse(raw);
76
+ }
77
+ export function isNewer(latest, current) {
78
+ const parse = (value) => value
79
+ .replace(/^v/, "")
80
+ .split(".")
81
+ .map((part) => {
82
+ const n = Number.parseInt(part, 10);
83
+ return Number.isNaN(n) ? 0 : n;
84
+ });
85
+ const l = parse(latest);
86
+ const c = parse(current);
87
+ const len = Math.max(l.length, c.length);
88
+ for (let i = 0; i < len; i++) {
89
+ const li = l[i] ?? 0;
90
+ const ci = c[i] ?? 0;
91
+ if (li > ci)
92
+ return true;
93
+ if (li < ci)
94
+ return false;
95
+ }
96
+ return false;
97
+ }
98
+ export async function checkForUpdates(input) {
99
+ try {
100
+ const meta = await fetchReleaseMetadata(input);
101
+ if (isNewer(meta.latestVersion, input.currentVersion)) {
102
+ return { status: "update-available", ...meta };
103
+ }
104
+ return { status: "up-to-date" };
105
+ }
106
+ catch (err) {
107
+ return {
108
+ status: "error",
109
+ message: err instanceof Error ? err.message : String(err),
110
+ };
111
+ }
112
+ }
113
+ //# sourceMappingURL=check.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check.js","sourceRoot":"","sources":["../../../src/adapters/update/check.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { type CheckResult } from "./check.js";
2
+ export interface LastUpdateCheck {
3
+ readonly checkedAt: string;
4
+ readonly result: CheckResult;
5
+ }
6
+ export declare function getLastUpdateCheck(): LastUpdateCheck | null;
7
+ export declare function recordUpdateCheck(result: CheckResult): void;
8
+ //# sourceMappingURL=status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../src/adapters/update/status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;CAC9B;AASD,wBAAgB,kBAAkB,IAAI,eAAe,GAAG,IAAI,CAE3D;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,CAgB3D"}
@@ -0,0 +1,26 @@
1
+ import {} from "./check.js";
2
+ const MAX_ERROR_MESSAGE_CHARS = 500;
3
+ const MAX_LATEST_VERSION_CHARS = 64;
4
+ const MAX_DOWNLOAD_URL_CHARS = 512;
5
+ const MAX_CHECKSUM_CHARS = 256;
6
+ let lastUpdateCheck = null;
7
+ export function getLastUpdateCheck() {
8
+ return lastUpdateCheck;
9
+ }
10
+ export function recordUpdateCheck(result) {
11
+ const bounded = result.status === "error"
12
+ ? {
13
+ status: "error",
14
+ message: result.message.slice(0, MAX_ERROR_MESSAGE_CHARS),
15
+ }
16
+ : result.status === "up-to-date"
17
+ ? { status: "up-to-date" }
18
+ : {
19
+ status: "update-available",
20
+ latestVersion: result.latestVersion.slice(0, MAX_LATEST_VERSION_CHARS),
21
+ downloadUrl: result.downloadUrl.slice(0, MAX_DOWNLOAD_URL_CHARS),
22
+ checksum: result.checksum.slice(0, MAX_CHECKSUM_CHARS),
23
+ };
24
+ lastUpdateCheck = { checkedAt: new Date().toISOString(), result: bounded };
25
+ }
26
+ //# sourceMappingURL=status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/adapters/update/status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,MAAM,YAAY,CAAC;AAO9C,MAAM,uBAAuB,GAAG,GAAG,CAAC;AACpC,MAAM,wBAAwB,GAAG,EAAE,CAAC;AACpC,MAAM,sBAAsB,GAAG,GAAG,CAAC;AACnC,MAAM,kBAAkB,GAAG,GAAG,CAAC;AAE/B,IAAI,eAAe,GAA2B,IAAI,CAAC;AAEnD,MAAM,UAAU,kBAAkB;IAChC,OAAO,eAAe,CAAC;AACzB,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,MAAmB;IACnD,MAAM,OAAO,GACX,MAAM,CAAC,MAAM,KAAK,OAAO;QACvB,CAAC,CAAC;YACE,MAAM,EAAE,OAAO;YACf,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,uBAAuB,CAAC;SAC1D;QACH,CAAC,CAAC,MAAM,CAAC,MAAM,KAAK,YAAY;YAC9B,CAAC,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE;YAC1B,CAAC,CAAC;gBACE,MAAM,EAAE,kBAAkB;gBAC1B,aAAa,EAAE,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,wBAAwB,CAAC;gBACtE,WAAW,EAAE,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,sBAAsB,CAAC;gBAChE,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,kBAAkB,CAAC;aACvD,CAAC;IACV,eAAe,GAAG,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;AAC7E,CAAC"}
@@ -0,0 +1,27 @@
1
+ import { type McpError } from "../errors.js";
2
+ import { type LicensePort } from "../domain/license.js";
3
+ import { type IndexWriterPort } from "../domain/index-writer.js";
4
+ import { type CrawlAdapter } from "../domain/source-adapter.js";
5
+ import { type CrawlReport } from "../domain/crawl.js";
6
+ export interface CrawlWatcherHandle {
7
+ pause(): Promise<void>;
8
+ resume(): Promise<void>;
9
+ }
10
+ export interface CrawlInput {
11
+ path: string;
12
+ dryRun?: boolean;
13
+ }
14
+ export interface CrawlDependencies {
15
+ adapters?: CrawlAdapter[];
16
+ maxFileBytes?: number;
17
+ watcher?: CrawlWatcherHandle;
18
+ isContainer?: boolean;
19
+ }
20
+ export declare function crawlContextStore(root: string, input: CrawlInput, writer: IndexWriterPort, options?: CrawlDependencies, licensePort?: LicensePort, hardGate?: boolean): Promise<{
21
+ success: true;
22
+ data: CrawlReport;
23
+ } | {
24
+ success: false;
25
+ error: McpError;
26
+ }>;
27
+ //# sourceMappingURL=crawl.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crawl.d.ts","sourceRoot":"","sources":["../../src/app/crawl.ts"],"names":[],"mappings":"AACA,OAAO,EAAwB,KAAK,QAAQ,EAAE,MAAM,cAAc,CAAC;AACnE,OAAO,EAAkB,KAAK,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAExE,OAAO,EAEL,KAAK,eAAe,EACrB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,KAAK,YAAY,EAAuB,MAAM,6BAA6B,CAAC;AACrF,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAkBtD,MAAM,WAAW,kBAAkB;IACjC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACzB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,EAAE,YAAY,EAAE,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,kBAAkB,CAAC;IAC7B,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,UAAU,EACjB,MAAM,EAAE,eAAe,EACvB,OAAO,GAAE,iBAAsB,EAC/B,WAAW,GAAE,WAA4B,EACzC,QAAQ,GAAE,OAAe,GACxB,OAAO,CAAC;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,WAAW,CAAA;CAAE,GAAG;IAAE,OAAO,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,QAAQ,CAAA;CAAE,CAAC,CA4BrF"}
@@ -0,0 +1,156 @@
1
+ import { loadProjectConfig, configLoadError } from "./loadProjectConfig.js";
2
+ import { mcpError, toMcpError } from "../errors.js";
3
+ import { devLicensePort } from "../domain/license.js";
4
+ import { licenseGate } from "./license-gate.js";
5
+ import {} from "../domain/index-writer.js";
6
+ import {} from "../domain/source-adapter.js";
7
+ import {} from "../domain/crawl.js";
8
+ import { runCrawlPipeline, existingIdKey } from "../domain/crawl.js";
9
+ import { validateCrawlSourcePath, DEFAULT_CRAWL_MAX_FILE_BYTES, } from "../adapters/fs/source-scan.js";
10
+ import { scanSourceTree } from "../adapters/fs/source-walk.js";
11
+ import { defaultCrawlAdapters } from "../adapters/crawl/index.js";
12
+ import { isDockerEnvironment } from "../adapters/fs/watch-fs.js";
13
+ import { createDocumentExclusive, listDocumentFiles, } from "../adapters/fs/structure.js";
14
+ import { buildDocumentMarkdown, } from "../schemas/document.js";
15
+ export async function crawlContextStore(root, input, writer, options = {}, licensePort = devLicensePort, hardGate = false) {
16
+ const dryRun = input.dryRun === true;
17
+ const preflight = await preflightCrawl(root, input.path, writer, options, dryRun, licensePort, hardGate);
18
+ if (!preflight.success) {
19
+ return { success: false, error: preflight.error };
20
+ }
21
+ if (!dryRun) {
22
+ await options.watcher?.pause();
23
+ }
24
+ try {
25
+ const report = await runCrawl(root, preflight.sourceRoot, writer, options, dryRun);
26
+ return { success: true, data: report };
27
+ }
28
+ catch (err) {
29
+ return crawlFailure(err);
30
+ }
31
+ finally {
32
+ if (!dryRun) {
33
+ await options.watcher?.resume();
34
+ }
35
+ }
36
+ }
37
+ function crawlFailure(err) {
38
+ const normalized = toMcpError(err, "INTERNAL_ERROR");
39
+ if (normalized.code === "INTERNAL_ERROR") {
40
+ return { success: false, error: normalized };
41
+ }
42
+ return {
43
+ success: false,
44
+ error: mcpError("INTERNAL_ERROR", normalized.message, normalized.details),
45
+ };
46
+ }
47
+ async function preflightCrawl(root, path, writer, options, dryRun, licensePort, hardGate) {
48
+ const gate = await licenseGate({
49
+ tool: "context_crawl",
50
+ licensePort,
51
+ hardGate,
52
+ mode: "write",
53
+ });
54
+ if (gate) {
55
+ return { success: false, error: gate };
56
+ }
57
+ const config = await loadProjectConfig(root);
58
+ if (config.kind !== "ok") {
59
+ return { success: false, error: configLoadError(config) };
60
+ }
61
+ const validation = await validateCrawlSourcePath({
62
+ projectRoot: root,
63
+ inputPath: path,
64
+ isContainer: options.isContainer ?? isDockerEnvironment(),
65
+ });
66
+ if (!validation.success) {
67
+ return { success: false, error: validation.error };
68
+ }
69
+ if (!dryRun && !writer.isOpen()) {
70
+ return {
71
+ success: false,
72
+ error: mcpError("INDEX_NOT_OPEN", "Search index is not open."),
73
+ };
74
+ }
75
+ return { success: true, sourceRoot: validation.sourceRoot };
76
+ }
77
+ async function runCrawl(root, sourceRoot, writer, options, dryRun) {
78
+ const adapters = options.adapters ?? defaultCrawlAdapters;
79
+ const maxFileBytes = options.maxFileBytes ?? DEFAULT_CRAWL_MAX_FILE_BYTES;
80
+ const scan = await scanSourceTree(sourceRoot, { maxFileBytes });
81
+ const existingIds = await existingDocumentIds(root);
82
+ const pipeline = runCrawlPipeline({
83
+ files: scan.contexts,
84
+ adapters,
85
+ existingIds,
86
+ failures: scan.failures,
87
+ });
88
+ if (!dryRun) {
89
+ const warnings = [];
90
+ for (const created of pipeline.created) {
91
+ const persisted = await persistCrawledDocument(root, created.doc, writer);
92
+ if (persisted === "exists") {
93
+ reclassifyAsSkipped(pipeline.report, created.doc);
94
+ }
95
+ else if (persisted !== "created") {
96
+ warnings.push({
97
+ path: `.context/${created.doc.type}/${created.doc.id}.md`,
98
+ reason: persisted.reason,
99
+ });
100
+ }
101
+ }
102
+ if (warnings.length > 0) {
103
+ pipeline.report.warnings = warnings;
104
+ }
105
+ }
106
+ return pipeline.report;
107
+ }
108
+ async function persistCrawledDocument(root, doc, writer) {
109
+ const frontmatter = {
110
+ id: doc.id,
111
+ type: doc.type,
112
+ status: "draft",
113
+ title: doc.title,
114
+ updated: doc.updated,
115
+ code_refs: doc.code_refs,
116
+ };
117
+ const markdown = buildDocumentMarkdown(frontmatter, doc.body);
118
+ try {
119
+ const created = await createDocumentExclusive(root, doc.type, doc.id, markdown);
120
+ if (created === "exists") {
121
+ return "exists";
122
+ }
123
+ }
124
+ catch (err) {
125
+ throw new Error(`Failed to persist crawled document ${doc.type}/${doc.id}: ${err instanceof Error ? err.message : String(err)}`, { cause: err });
126
+ }
127
+ const outcome = await writer.upsertBulk({
128
+ id: doc.id,
129
+ type: doc.type,
130
+ status: "draft",
131
+ title: doc.title,
132
+ body: doc.body,
133
+ path: `.context/${doc.type}/${doc.id}.md`,
134
+ });
135
+ if (!outcome.ok) {
136
+ return { reason: outcome.reason ?? "index write failed" };
137
+ }
138
+ return "created";
139
+ }
140
+ function reclassifyAsSkipped(report, doc) {
141
+ const item = report.items.find((candidate) => candidate.docId === doc.id &&
142
+ candidate.docType === doc.type &&
143
+ candidate.action === "created");
144
+ if (!item) {
145
+ return;
146
+ }
147
+ item.action = "skipped";
148
+ item.reason = "exists";
149
+ report.created = Math.max(0, report.created - 1);
150
+ report.skipped += 1;
151
+ }
152
+ async function existingDocumentIds(root) {
153
+ const files = await listDocumentFiles(root);
154
+ return new Set(files.map((file) => existingIdKey(file.type, file.id)));
155
+ }
156
+ //# sourceMappingURL=crawl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crawl.js","sourceRoot":"","sources":["../../src/app/crawl.ts"],"names":[],"mappings":"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"}