@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,6 @@
1
+ export declare const CONTEXT_DIR = ".context";
2
+ export declare const CONFIG_FILE = "context.config.yaml";
3
+ export declare function projectConfigPath(root: string): string;
4
+ export declare function readProjectConfig(root: string): Promise<string | null>;
5
+ export declare function writeProjectConfig(root: string, content: string): Promise<void>;
6
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/adapters/fs/config.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,WAAW,aAAa,CAAC;AACtC,eAAO,MAAM,WAAW,wBAAwB,CAAC;AAEjD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAU5E;AAED,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAAC,CAEf"}
@@ -0,0 +1,30 @@
1
+ import { readFile } from "node:fs/promises";
2
+ import { resolve } from "node:path";
3
+ import { atomicWriteFile } from "./atomic.js";
4
+ export const CONTEXT_DIR = ".context";
5
+ export const CONFIG_FILE = "context.config.yaml";
6
+ export function projectConfigPath(root) {
7
+ return resolve(root, CONTEXT_DIR, CONFIG_FILE);
8
+ }
9
+ export async function readProjectConfig(root) {
10
+ const path = projectConfigPath(root);
11
+ try {
12
+ return await readFile(path, "utf8");
13
+ }
14
+ catch (err) {
15
+ if (isENOENT(err)) {
16
+ return null;
17
+ }
18
+ throw err;
19
+ }
20
+ }
21
+ export async function writeProjectConfig(root, content) {
22
+ await atomicWriteFile(projectConfigPath(root), content);
23
+ }
24
+ function isENOENT(err) {
25
+ return (typeof err === "object" &&
26
+ err !== null &&
27
+ "code" in err &&
28
+ err.code === "ENOENT");
29
+ }
30
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/adapters/fs/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE9C,MAAM,CAAC,MAAM,WAAW,GAAG,UAAU,CAAC;AACtC,MAAM,CAAC,MAAM,WAAW,GAAG,qBAAqB,CAAC;AAEjD,MAAM,UAAU,iBAAiB,CAAC,IAAY;IAC5C,OAAO,OAAO,CAAC,IAAI,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;AACjD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,IAAY;IAClD,MAAM,IAAI,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;IACrC,IAAI,CAAC;QACH,OAAO,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACtC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAClB,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,IAAY,EACZ,OAAe;IAEf,MAAM,eAAe,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;AAC1D,CAAC;AAED,SAAS,QAAQ,CAAC,GAAY;IAC5B,OAAO,CACL,OAAO,GAAG,KAAK,QAAQ;QACvB,GAAG,KAAK,IAAI;QACZ,MAAM,IAAI,GAAG;QACZ,GAA6B,CAAC,IAAI,KAAK,QAAQ,CACjD,CAAC;AACJ,CAAC"}
@@ -0,0 +1,4 @@
1
+ export declare function parseContainerMountRoots(content: string): string[];
2
+ export declare function isInsideContainerMount(absPath: string): boolean;
3
+ export declare function isPathUnderMounts(absPath: string, roots: string[]): boolean;
4
+ //# sourceMappingURL=container-mounts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"container-mounts.d.ts","sourceRoot":"","sources":["../../../src/adapters/fs/container-mounts.ts"],"names":[],"mappings":"AAWA,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAmBlE;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAY/D;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAM3E"}
@@ -0,0 +1,51 @@
1
+ import { readFileSync } from "node:fs";
2
+ // Mount detection for container absolute crawl paths (DT-F2-8, G2-4).
3
+ // Validated 2026-08-18 in the release pipeline: Docker Desktop reports bind
4
+ // mounts with Windows-style devices (e.g. "C:\134" via 9p/drvfs, matched by
5
+ // the /^[A-Za-z]:/ rule); GitHub-hosted runners (Linux host, docker run)
6
+ // report the host disk device "/dev/sdXX" (matched by the /dev/ rule).
7
+ // If a future runner reports neither pattern, the documented remedy is an
8
+ // env override (e.g. SIRIUS_EXTRA_MOUNT_ROOTS, csv) appended to the parsed
9
+ // roots — to be implemented only when such evidence appears.
10
+ export function parseContainerMountRoots(content) {
11
+ const roots = [];
12
+ for (const line of content.split("\n")) {
13
+ const fields = line.split(/\s+/);
14
+ if (fields.length < 2) {
15
+ continue;
16
+ }
17
+ const device = fields[0];
18
+ const mountPoint = fields[1].replace(/\\040/g, " ").replace(/\\011/g, "\t");
19
+ if (mountPoint === "/") {
20
+ continue;
21
+ }
22
+ const isVolume = device.startsWith("/dev/") || /^[A-Za-z]:/.test(device);
23
+ if (!isVolume) {
24
+ continue;
25
+ }
26
+ roots.push(mountPoint);
27
+ }
28
+ return roots.sort((a, b) => b.length - a.length);
29
+ }
30
+ export function isInsideContainerMount(absPath) {
31
+ let mounts;
32
+ try {
33
+ mounts = readFileSync("/proc/mounts", "utf8");
34
+ }
35
+ catch {
36
+ return false;
37
+ }
38
+ const roots = parseContainerMountRoots(mounts);
39
+ if (roots.length === 0) {
40
+ return false;
41
+ }
42
+ return isPathUnderMounts(absPath, roots);
43
+ }
44
+ export function isPathUnderMounts(absPath, roots) {
45
+ const normalized = absPath.replace(/\\/g, "/");
46
+ return roots.some((root) => {
47
+ const prefix = root.endsWith("/") ? root : `${root}/`;
48
+ return normalized === root || normalized.startsWith(prefix);
49
+ });
50
+ }
51
+ //# sourceMappingURL=container-mounts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"container-mounts.js","sourceRoot":"","sources":["../../../src/adapters/fs/container-mounts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvC,sEAAsE;AACtE,4EAA4E;AAC5E,4EAA4E;AAC5E,yEAAyE;AACzE,uEAAuE;AACvE,0EAA0E;AAC1E,2EAA2E;AAC3E,6DAA6D;AAE7D,MAAM,UAAU,wBAAwB,CAAC,OAAe;IACtD,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACvC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACjC,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtB,SAAS;QACX,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACzB,MAAM,UAAU,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAC5E,IAAI,UAAU,KAAK,GAAG,EAAE,CAAC;YACvB,SAAS;QACX,CAAC;QACD,MAAM,QAAQ,GAAG,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACzE,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,SAAS;QACX,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACzB,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC;AACnD,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,OAAe;IACpD,IAAI,MAAc,CAAC;IACnB,IAAI,CAAC;QACH,MAAM,GAAG,YAAY,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;IAChD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,KAAK,GAAG,wBAAwB,CAAC,MAAM,CAAC,CAAC;IAC/C,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,iBAAiB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,OAAe,EAAE,KAAe;IAChE,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAC/C,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE;QACzB,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC;QACtD,OAAO,UAAU,KAAK,IAAI,IAAI,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,16 @@
1
+ import { type McpError } from "../../errors.js";
2
+ export declare const DEFAULT_CRAWL_MAX_FILE_BYTES = 1048576;
3
+ export type SourcePathValidation = {
4
+ success: true;
5
+ sourceRoot: string;
6
+ } | {
7
+ success: false;
8
+ error: McpError;
9
+ };
10
+ export declare function invalidPathError(path: string, message: string): McpError;
11
+ export declare function validateCrawlSourcePath(input: {
12
+ projectRoot: string;
13
+ inputPath: string;
14
+ isContainer: boolean;
15
+ }): Promise<SourcePathValidation>;
16
+ //# sourceMappingURL=source-scan.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"source-scan.d.ts","sourceRoot":"","sources":["../../../src/adapters/fs/source-scan.ts"],"names":[],"mappings":"AAGA,OAAO,EAAY,KAAK,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAI1D,eAAO,MAAM,4BAA4B,UAAU,CAAC;AAEpD,MAAM,MAAM,oBAAoB,GAC5B;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GACrC;IAAE,OAAO,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,QAAQ,CAAA;CAAE,CAAC;AAExC,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,QAAQ,CAExE;AAED,wBAAsB,uBAAuB,CAAC,KAAK,EAAE;IACnD,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,OAAO,CAAC;CACtB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAsBhC"}
@@ -0,0 +1,118 @@
1
+ import { realpath } from "node:fs/promises";
2
+ import { existsSync, statSync } from "node:fs";
3
+ import { isAbsolute, relative, resolve } from "node:path";
4
+ import { mcpError } from "../../errors.js";
5
+ import { isInsideContainerMount } from "./container-mounts.js";
6
+ import { isWithin } from "./source-walk.js";
7
+ export const DEFAULT_CRAWL_MAX_FILE_BYTES = 1048576;
8
+ export function invalidPathError(path, message) {
9
+ return mcpError("INVALID_PATH", message, { path });
10
+ }
11
+ export async function validateCrawlSourcePath(input) {
12
+ const { projectRoot, inputPath, isContainer } = input;
13
+ const trimmed = inputPath.trim();
14
+ if (trimmed.length === 0) {
15
+ return {
16
+ success: false,
17
+ error: invalidPathError(inputPath, "Crawl path is empty."),
18
+ };
19
+ }
20
+ if (trimmed.split(/[\\/]+/).includes("..")) {
21
+ return {
22
+ success: false,
23
+ error: invalidPathError(trimmed, "Crawl path must not contain '..' segments."),
24
+ };
25
+ }
26
+ if (isAbsolute(trimmed)) {
27
+ return validateContainerAbsolutePath(trimmed, isContainer);
28
+ }
29
+ return validateRelativeSource(projectRoot, trimmed);
30
+ }
31
+ async function validateRelativeSource(projectRoot, trimmed) {
32
+ const resolved = resolve(projectRoot, trimmed);
33
+ const rel = relative(projectRoot, resolved);
34
+ if (rel === "") {
35
+ return {
36
+ success: false,
37
+ error: invalidPathError(trimmed, "Self-ingestion is not allowed: crawl path must not be the project root."),
38
+ };
39
+ }
40
+ if (rel.startsWith("..") || isAbsolute(rel)) {
41
+ return {
42
+ success: false,
43
+ error: invalidPathError(trimmed, "Crawl path escapes the project root or crosses drives."),
44
+ };
45
+ }
46
+ if (!isDirectorySync(resolved)) {
47
+ return {
48
+ success: false,
49
+ error: invalidPathError(trimmed, "Crawl path does not exist or is not a directory."),
50
+ };
51
+ }
52
+ const realRoot = await safeRealpath(projectRoot);
53
+ const realSource = await safeRealpath(resolved);
54
+ if (!realRoot || !realSource) {
55
+ return {
56
+ success: false,
57
+ error: invalidPathError(trimmed, "Crawl path does not exist or is not a directory."),
58
+ };
59
+ }
60
+ if (!isWithin(realRoot, realSource)) {
61
+ return {
62
+ success: false,
63
+ error: invalidPathError(trimmed, "Crawl path resolves outside the project root."),
64
+ };
65
+ }
66
+ if (existsSync(resolve(realSource, ".context"))) {
67
+ return {
68
+ success: false,
69
+ error: invalidPathError(trimmed, "Self-ingestion is not allowed: crawl path contains a .context store."),
70
+ };
71
+ }
72
+ return { success: true, sourceRoot: realSource };
73
+ }
74
+ async function validateContainerAbsolutePath(path, isContainer) {
75
+ if (!isContainer) {
76
+ return {
77
+ success: false,
78
+ error: invalidPathError(path, "Absolute crawl paths are only allowed inside the container (bind-mounted volumes)."),
79
+ };
80
+ }
81
+ if (!isDirectorySync(path)) {
82
+ return {
83
+ success: false,
84
+ error: invalidPathError(path, "Crawl path does not exist or is not a directory."),
85
+ };
86
+ }
87
+ if (!isInsideContainerMount(path)) {
88
+ return {
89
+ success: false,
90
+ error: invalidPathError(path, "Absolute crawl path must point inside a bind-mounted volume."),
91
+ };
92
+ }
93
+ const real = await safeRealpath(path);
94
+ if (!real || !isInsideContainerMount(real)) {
95
+ return {
96
+ success: false,
97
+ error: invalidPathError(path, "Absolute crawl path resolves outside a bind-mounted volume."),
98
+ };
99
+ }
100
+ return { success: true, sourceRoot: real };
101
+ }
102
+ async function safeRealpath(path) {
103
+ try {
104
+ return await realpath(path);
105
+ }
106
+ catch {
107
+ return null;
108
+ }
109
+ }
110
+ function isDirectorySync(path) {
111
+ try {
112
+ return statSync(path).isDirectory();
113
+ }
114
+ catch {
115
+ return false;
116
+ }
117
+ }
118
+ //# sourceMappingURL=source-scan.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"source-scan.js","sourceRoot":"","sources":["../../../src/adapters/fs/source-scan.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import type { CrawlFileContext, ProjectHints } from "../../domain/source-adapter.js";
2
+ export interface SourceScanOptions {
3
+ maxFileBytes: number;
4
+ }
5
+ export interface SourceScanFailure {
6
+ path: string;
7
+ reason: string;
8
+ }
9
+ export interface SourceScanResult {
10
+ contexts: CrawlFileContext[];
11
+ failures: SourceScanFailure[];
12
+ projectHints: ProjectHints;
13
+ }
14
+ export declare function scanSourceTree(sourceRoot: string, options: SourceScanOptions): Promise<SourceScanResult>;
15
+ export declare function isWithin(root: string, target: string): boolean;
16
+ //# sourceMappingURL=source-walk.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"source-walk.d.ts","sourceRoot":"","sources":["../../../src/adapters/fs/source-walk.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,gBAAgB,EAChB,YAAY,EACb,MAAM,gCAAgC,CAAC;AAKxC,MAAM,WAAW,iBAAiB;IAChC,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,gBAAgB,EAAE,CAAC;IAC7B,QAAQ,EAAE,iBAAiB,EAAE,CAAC;IAC9B,YAAY,EAAE,YAAY,CAAC;CAC5B;AAED,wBAAsB,cAAc,CAClC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,gBAAgB,CAAC,CAQ3B;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAG9D"}
@@ -0,0 +1,195 @@
1
+ import { readdir, readFile, realpath, stat } from "node:fs/promises";
2
+ import { basename, extname, isAbsolute, join, relative } from "node:path";
3
+ const EXCLUDED_DIRS = new Set([".git", "node_modules", ".context"]);
4
+ const BINARY_PROBE_BYTES = 8000;
5
+ export async function scanSourceTree(sourceRoot, options) {
6
+ const projectHints = await detectProjectHints(sourceRoot);
7
+ const contexts = [];
8
+ const failures = [];
9
+ const visited = new Set();
10
+ await walkDirectory(sourceRoot, sourceRoot, options, projectHints, contexts, failures, visited);
11
+ contexts.sort((a, b) => a.relativePath.localeCompare(b.relativePath));
12
+ return { contexts, failures, projectHints };
13
+ }
14
+ export function isWithin(root, target) {
15
+ const rel = relative(root, target);
16
+ return rel === "" || (!rel.startsWith("..") && !isAbsolute(rel));
17
+ }
18
+ async function walkDirectory(root, dir, options, hints, contexts, failures, visited) {
19
+ let entries;
20
+ try {
21
+ entries = await readdir(dir, { withFileTypes: true });
22
+ }
23
+ catch (err) {
24
+ if (!isENOENT(err)) {
25
+ failures.push({
26
+ path: dirRelativePath(root, dir),
27
+ reason: `Could not read directory: ${err instanceof Error ? err.message : String(err)}`,
28
+ });
29
+ }
30
+ return;
31
+ }
32
+ entries.sort((a, b) => a.name.localeCompare(b.name));
33
+ for (const entry of entries) {
34
+ const full = join(dir, entry.name);
35
+ if (entry.isDirectory()) {
36
+ if (!EXCLUDED_DIRS.has(entry.name.toLowerCase())) {
37
+ await walkDirectory(root, full, options, hints, contexts, failures, visited);
38
+ }
39
+ continue;
40
+ }
41
+ if (entry.isSymbolicLink()) {
42
+ await walkSymlink(root, full, options, hints, contexts, failures, visited);
43
+ continue;
44
+ }
45
+ const info = await safeStat(full);
46
+ if (info && info.isFile()) {
47
+ await collectFile(root, full, info, options, hints, contexts, failures);
48
+ }
49
+ }
50
+ }
51
+ async function walkSymlink(root, linkPath, options, hints, contexts, failures, visited) {
52
+ let target;
53
+ try {
54
+ target = await realpath(linkPath);
55
+ }
56
+ catch {
57
+ return;
58
+ }
59
+ if (!isWithin(root, target)) {
60
+ return;
61
+ }
62
+ const info = await safeStat(target);
63
+ if (!info) {
64
+ return;
65
+ }
66
+ if (info.isDirectory()) {
67
+ if (visited.has(target)) {
68
+ return;
69
+ }
70
+ visited.add(target);
71
+ await walkDirectory(root, target, options, hints, contexts, failures, visited);
72
+ }
73
+ else if (info.isFile()) {
74
+ await collectSymlinkedFile(root, linkPath, info, options, hints, contexts, failures);
75
+ }
76
+ }
77
+ async function collectSymlinkedFile(root, linkPath, info, options, hints, contexts, failures) {
78
+ const rel = toRelativePath(root, linkPath);
79
+ if (info.size > options.maxFileBytes) {
80
+ return;
81
+ }
82
+ let content;
83
+ try {
84
+ content = await readFile(linkPath, "utf8");
85
+ }
86
+ catch (err) {
87
+ failures.push({
88
+ path: rel,
89
+ reason: `Could not read file: ${err instanceof Error ? err.message : String(err)}`,
90
+ });
91
+ return;
92
+ }
93
+ if (content.slice(0, BINARY_PROBE_BYTES).includes("\u0000")) {
94
+ return;
95
+ }
96
+ contexts.push({
97
+ relativePath: rel,
98
+ absolutePath: linkPath,
99
+ fileName: basename(linkPath),
100
+ ext: extname(linkPath).toLowerCase(),
101
+ content,
102
+ mtime: info.mtime,
103
+ projectHints: hints,
104
+ });
105
+ }
106
+ async function collectFile(root, full, info, options, hints, contexts, failures) {
107
+ const rel = toRelativePath(root, full);
108
+ if (info.size > options.maxFileBytes) {
109
+ return;
110
+ }
111
+ let content;
112
+ try {
113
+ content = await readFile(full, "utf8");
114
+ }
115
+ catch (err) {
116
+ failures.push({
117
+ path: rel,
118
+ reason: `Could not read file: ${err instanceof Error ? err.message : String(err)}`,
119
+ });
120
+ return;
121
+ }
122
+ if (content.slice(0, BINARY_PROBE_BYTES).includes("\u0000")) {
123
+ return;
124
+ }
125
+ contexts.push({
126
+ relativePath: rel,
127
+ absolutePath: full,
128
+ fileName: basename(full),
129
+ ext: extname(full).toLowerCase(),
130
+ content,
131
+ mtime: info.mtime,
132
+ projectHints: hints,
133
+ });
134
+ }
135
+ async function detectProjectHints(sourceRoot) {
136
+ const manifests = [];
137
+ let entries;
138
+ try {
139
+ entries = await readdir(sourceRoot, { withFileTypes: true });
140
+ }
141
+ catch {
142
+ return { name: basename(sourceRoot), manifests };
143
+ }
144
+ for (const entry of entries) {
145
+ if (entry.isFile() && isManifestName(entry.name)) {
146
+ manifests.push(entry.name);
147
+ }
148
+ }
149
+ manifests.sort();
150
+ return { name: basename(sourceRoot), manifests };
151
+ }
152
+ const EXACT_MANIFEST_NAMES = new Set([
153
+ "package.json",
154
+ "pom.xml",
155
+ "build.gradle",
156
+ "build.gradle.kts",
157
+ "settings.gradle",
158
+ "settings.gradle.kts",
159
+ "pyproject.toml",
160
+ "setup.py",
161
+ "setup.cfg",
162
+ "requirements.txt",
163
+ "pipfile",
164
+ "go.mod",
165
+ "go.work",
166
+ "cargo.toml",
167
+ ]);
168
+ function isManifestName(name) {
169
+ const lower = name.toLowerCase();
170
+ return (EXACT_MANIFEST_NAMES.has(lower) ||
171
+ lower.endsWith(".csproj") ||
172
+ lower.endsWith(".sln"));
173
+ }
174
+ async function safeStat(path) {
175
+ try {
176
+ return await stat(path);
177
+ }
178
+ catch {
179
+ return null;
180
+ }
181
+ }
182
+ function dirRelativePath(root, dir) {
183
+ const rel = relative(root, dir).replace(/\\/g, "/");
184
+ return rel === "" ? "." : rel;
185
+ }
186
+ function isENOENT(err) {
187
+ return (typeof err === "object" &&
188
+ err !== null &&
189
+ "code" in err &&
190
+ err.code === "ENOENT");
191
+ }
192
+ function toRelativePath(root, full) {
193
+ return relative(root, full).replace(/\\/g, "/");
194
+ }
195
+ //# sourceMappingURL=source-walk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"source-walk.js","sourceRoot":"","sources":["../../../src/adapters/fs/source-walk.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ export declare const DocumentTypes: readonly ["feature", "business-rule", "decision", "component", "architecture"];
2
+ export type DocumentType = (typeof DocumentTypes)[number];
3
+ export interface DocumentListItem {
4
+ id: string;
5
+ type: DocumentType;
6
+ title?: string;
7
+ status?: string;
8
+ path: string;
9
+ warning?: string;
10
+ }
11
+ export interface ListDocumentFilters {
12
+ type?: DocumentType;
13
+ status?: string;
14
+ pathPrefix?: string;
15
+ }
16
+ export declare function documentPath(root: string, type: DocumentType, id: string): string;
17
+ export declare function writeDocument(root: string, type: DocumentType, id: string, content: string): Promise<void>;
18
+ export declare function createDocumentExclusive(root: string, type: DocumentType, id: string, content: string): Promise<"created" | "exists">;
19
+ export declare function readDocumentByPath(path: string): Promise<string | null>;
20
+ export declare function ensureContextStructure(root: string, configYaml: string): Promise<void>;
21
+ export declare function listDocumentFiles(root: string, filters?: ListDocumentFilters): Promise<DocumentListItem[]>;
22
+ //# sourceMappingURL=structure.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"structure.d.ts","sourceRoot":"","sources":["../../../src/adapters/fs/structure.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,aAAa,gFAMhB,CAAC;AAEX,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC;AAE1D,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,YAAY,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,wBAAgB,YAAY,CAC1B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,YAAY,EAClB,EAAE,EAAE,MAAM,GACT,MAAM,CAER;AAED,wBAAsB,aAAa,CACjC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,YAAY,EAClB,EAAE,EAAE,MAAM,EACV,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAAC,CAMf;AAED,wBAAsB,uBAAuB,CAC3C,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,YAAY,EAClB,EAAE,EAAE,MAAM,EACV,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,SAAS,GAAG,QAAQ,CAAC,CAoB/B;AAWD,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAS7E;AAED,wBAAsB,sBAAsB,CAC1C,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC,CAcf;AAED,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC,gBAAgB,EAAE,CAAC,CA2B7B"}
@@ -0,0 +1,146 @@
1
+ import { mkdir, open, readdir, readFile } from "node:fs/promises";
2
+ import { resolve, join, parse } from "node:path";
3
+ import { parse as parseYaml } from "yaml";
4
+ import { writeProjectConfig } from "./config.js";
5
+ import { atomicWriteFile } from "./atomic.js";
6
+ export const DocumentTypes = [
7
+ "feature",
8
+ "business-rule",
9
+ "decision",
10
+ "component",
11
+ "architecture",
12
+ ];
13
+ export function documentPath(root, type, id) {
14
+ return resolve(root, ".context", type, `${id}.md`);
15
+ }
16
+ export async function writeDocument(root, type, id, content) {
17
+ const target = documentPath(root, type, id);
18
+ const dir = resolve(target, "..");
19
+ await mkdir(dir, { recursive: true });
20
+ await atomicWriteFile(target, content);
21
+ }
22
+ export async function createDocumentExclusive(root, type, id, content) {
23
+ const target = documentPath(root, type, id);
24
+ const dir = resolve(target, "..");
25
+ await mkdir(dir, { recursive: true });
26
+ let handle;
27
+ try {
28
+ handle = await open(target, "wx");
29
+ }
30
+ catch (err) {
31
+ if (isEEXIST(err)) {
32
+ return "exists";
33
+ }
34
+ throw err;
35
+ }
36
+ try {
37
+ await handle.writeFile(content, "utf8");
38
+ return "created";
39
+ }
40
+ finally {
41
+ await handle.close();
42
+ }
43
+ }
44
+ function isEEXIST(err) {
45
+ return (typeof err === "object" &&
46
+ err !== null &&
47
+ "code" in err &&
48
+ err.code === "EEXIST");
49
+ }
50
+ export async function readDocumentByPath(path) {
51
+ try {
52
+ return await readFile(path, "utf8");
53
+ }
54
+ catch (err) {
55
+ if (isENOENT(err)) {
56
+ return null;
57
+ }
58
+ throw err;
59
+ }
60
+ }
61
+ export async function ensureContextStructure(root, configYaml) {
62
+ const contextRoot = resolve(root, ".context");
63
+ await mkdir(contextRoot, { recursive: true });
64
+ for (const type of DocumentTypes) {
65
+ await mkdir(join(contextRoot, type), { recursive: true });
66
+ }
67
+ await mkdir(join(contextRoot, ".index"), { recursive: true });
68
+ await writeProjectConfig(root, configYaml);
69
+ await atomicWriteFile(join(contextRoot, ".index", ".gitignore"), "# Sirius index artifacts\nsirius.db\nsirius.db-wal\nsirius.db-shm\n");
70
+ }
71
+ export async function listDocumentFiles(root, filters) {
72
+ const contextRoot = resolve(root, ".context");
73
+ const items = [];
74
+ const typesToScan = filters?.type ? [filters.type] : DocumentTypes;
75
+ for (const type of typesToScan) {
76
+ const dir = join(contextRoot, type);
77
+ let entries;
78
+ try {
79
+ entries = await readdir(dir);
80
+ }
81
+ catch (err) {
82
+ if (isENOENT(err)) {
83
+ continue;
84
+ }
85
+ throw err;
86
+ }
87
+ for (const entry of entries) {
88
+ const item = await toDocumentListItem(type, dir, entry, filters);
89
+ if (item) {
90
+ items.push(item);
91
+ }
92
+ }
93
+ }
94
+ return items;
95
+ }
96
+ async function toDocumentListItem(type, dir, entry, filters) {
97
+ if (!entry.endsWith(".md")) {
98
+ return null;
99
+ }
100
+ const filePath = join(dir, entry);
101
+ const id = parse(entry).name;
102
+ const displayPath = `.context/${type}/${id}.md`;
103
+ const normalizedPrefix = filters?.pathPrefix?.replace(/\\/g, "/");
104
+ if (normalizedPrefix && !displayPath.startsWith(normalizedPrefix)) {
105
+ return null;
106
+ }
107
+ const frontmatter = await readDocumentFrontmatter(filePath);
108
+ if (filters?.status && frontmatter?.status !== filters.status) {
109
+ return null;
110
+ }
111
+ return buildListItem(id, type, displayPath, frontmatter);
112
+ }
113
+ function buildListItem(id, type, displayPath, frontmatter) {
114
+ const title = typeof frontmatter?.title === "string" ? frontmatter.title : undefined;
115
+ const status = typeof frontmatter?.status === "string" ? frontmatter.status : undefined;
116
+ return {
117
+ id,
118
+ type,
119
+ title,
120
+ status,
121
+ path: displayPath,
122
+ warning: frontmatter === null
123
+ ? `Could not parse frontmatter in ${displayPath}; skipping metadata.`
124
+ : undefined,
125
+ };
126
+ }
127
+ async function readDocumentFrontmatter(filePath) {
128
+ try {
129
+ const content = await readFile(filePath, "utf8");
130
+ const match = content.match(/^---\r?\n([\s\S]*?)\r?\n---\r?\n/);
131
+ if (!match) {
132
+ return null;
133
+ }
134
+ return parseYaml(match[1]);
135
+ }
136
+ catch {
137
+ return null;
138
+ }
139
+ }
140
+ function isENOENT(err) {
141
+ return (typeof err === "object" &&
142
+ err !== null &&
143
+ "code" in err &&
144
+ err.code === "ENOENT");
145
+ }
146
+ //# sourceMappingURL=structure.js.map