@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.
- package/dist/adapters/crawl/csharp.d.ts +3 -0
- package/dist/adapters/crawl/csharp.d.ts.map +1 -0
- package/dist/adapters/crawl/csharp.js +15 -0
- package/dist/adapters/crawl/csharp.js.map +1 -0
- package/dist/adapters/crawl/go.d.ts +3 -0
- package/dist/adapters/crawl/go.d.ts.map +1 -0
- package/dist/adapters/crawl/go.js +16 -0
- package/dist/adapters/crawl/go.js.map +1 -0
- package/dist/adapters/crawl/index.d.ts +3 -0
- package/dist/adapters/crawl/index.d.ts.map +1 -0
- package/dist/adapters/crawl/index.js +16 -0
- package/dist/adapters/crawl/index.js.map +1 -0
- package/dist/adapters/crawl/java.d.ts +3 -0
- package/dist/adapters/crawl/java.d.ts.map +1 -0
- package/dist/adapters/crawl/java.js +19 -0
- package/dist/adapters/crawl/java.js.map +1 -0
- package/dist/adapters/crawl/js-ts.d.ts +3 -0
- package/dist/adapters/crawl/js-ts.d.ts.map +1 -0
- package/dist/adapters/crawl/js-ts.js +11 -0
- package/dist/adapters/crawl/js-ts.js.map +1 -0
- package/dist/adapters/crawl/python.d.ts +3 -0
- package/dist/adapters/crawl/python.d.ts.map +1 -0
- package/dist/adapters/crawl/python.js +19 -0
- package/dist/adapters/crawl/python.js.map +1 -0
- package/dist/adapters/crawl/rust.d.ts +3 -0
- package/dist/adapters/crawl/rust.d.ts.map +1 -0
- package/dist/adapters/crawl/rust.js +15 -0
- package/dist/adapters/crawl/rust.js.map +1 -0
- package/dist/adapters/db/sqlite-vec-adapter.d.ts +31 -0
- package/dist/adapters/db/sqlite-vec-adapter.d.ts.map +1 -0
- package/dist/adapters/db/sqlite-vec-adapter.js +191 -0
- package/dist/adapters/db/sqlite-vec-adapter.js.map +1 -0
- package/dist/adapters/embedding/transformers-onnx-adapter.d.ts +15 -0
- package/dist/adapters/embedding/transformers-onnx-adapter.d.ts.map +1 -0
- package/dist/adapters/embedding/transformers-onnx-adapter.js +125 -0
- package/dist/adapters/embedding/transformers-onnx-adapter.js.map +1 -0
- package/dist/adapters/fs/atomic.d.ts +2 -0
- package/dist/adapters/fs/atomic.d.ts.map +1 -0
- package/dist/adapters/fs/atomic.js +18 -0
- package/dist/adapters/fs/atomic.js.map +1 -0
- package/dist/adapters/fs/config.d.ts +6 -0
- package/dist/adapters/fs/config.d.ts.map +1 -0
- package/dist/adapters/fs/config.js +30 -0
- package/dist/adapters/fs/config.js.map +1 -0
- package/dist/adapters/fs/container-mounts.d.ts +4 -0
- package/dist/adapters/fs/container-mounts.d.ts.map +1 -0
- package/dist/adapters/fs/container-mounts.js +51 -0
- package/dist/adapters/fs/container-mounts.js.map +1 -0
- package/dist/adapters/fs/source-scan.d.ts +16 -0
- package/dist/adapters/fs/source-scan.d.ts.map +1 -0
- package/dist/adapters/fs/source-scan.js +118 -0
- package/dist/adapters/fs/source-scan.js.map +1 -0
- package/dist/adapters/fs/source-walk.d.ts +16 -0
- package/dist/adapters/fs/source-walk.d.ts.map +1 -0
- package/dist/adapters/fs/source-walk.js +195 -0
- package/dist/adapters/fs/source-walk.js.map +1 -0
- package/dist/adapters/fs/structure.d.ts +22 -0
- package/dist/adapters/fs/structure.d.ts.map +1 -0
- package/dist/adapters/fs/structure.js +146 -0
- package/dist/adapters/fs/structure.js.map +1 -0
- package/dist/adapters/fs/watch-fs.d.ts +61 -0
- package/dist/adapters/fs/watch-fs.d.ts.map +1 -0
- package/dist/adapters/fs/watch-fs.js +244 -0
- package/dist/adapters/fs/watch-fs.js.map +1 -0
- package/dist/adapters/http/embedded-server.d.ts +69 -0
- package/dist/adapters/http/embedded-server.d.ts.map +1 -0
- package/dist/adapters/http/embedded-server.js +270 -0
- package/dist/adapters/http/embedded-server.js.map +1 -0
- package/dist/adapters/http/raw-handler.d.ts +11 -0
- package/dist/adapters/http/raw-handler.d.ts.map +1 -0
- package/dist/adapters/http/raw-handler.js +87 -0
- package/dist/adapters/http/raw-handler.js.map +1 -0
- package/dist/adapters/http/security-middleware.d.ts +5 -0
- package/dist/adapters/http/security-middleware.d.ts.map +1 -0
- package/dist/adapters/http/security-middleware.js +48 -0
- package/dist/adapters/http/security-middleware.js.map +1 -0
- package/dist/adapters/license/fileStore.d.ts +4 -0
- package/dist/adapters/license/fileStore.d.ts.map +1 -0
- package/dist/adapters/license/fileStore.js +103 -0
- package/dist/adapters/license/fileStore.js.map +1 -0
- package/dist/adapters/license/offline.d.ts +34 -0
- package/dist/adapters/license/offline.d.ts.map +1 -0
- package/dist/adapters/license/offline.js +86 -0
- package/dist/adapters/license/offline.js.map +1 -0
- package/dist/adapters/license/phone-home.d.ts +56 -0
- package/dist/adapters/license/phone-home.d.ts.map +1 -0
- package/dist/adapters/license/phone-home.js +118 -0
- package/dist/adapters/license/phone-home.js.map +1 -0
- package/dist/adapters/mcp/crawl.d.ts +7 -0
- package/dist/adapters/mcp/crawl.d.ts.map +1 -0
- package/dist/adapters/mcp/crawl.js +57 -0
- package/dist/adapters/mcp/crawl.js.map +1 -0
- package/dist/adapters/mcp/get.d.ts +5 -0
- package/dist/adapters/mcp/get.d.ts.map +1 -0
- package/dist/adapters/mcp/get.js +57 -0
- package/dist/adapters/mcp/get.js.map +1 -0
- package/dist/adapters/mcp/index.d.ts +23 -0
- package/dist/adapters/mcp/index.d.ts.map +1 -0
- package/dist/adapters/mcp/index.js +51 -0
- package/dist/adapters/mcp/index.js.map +1 -0
- package/dist/adapters/mcp/init.d.ts +5 -0
- package/dist/adapters/mcp/init.d.ts.map +1 -0
- package/dist/adapters/mcp/init.js +52 -0
- package/dist/adapters/mcp/init.js.map +1 -0
- package/dist/adapters/mcp/list.d.ts +5 -0
- package/dist/adapters/mcp/list.d.ts.map +1 -0
- package/dist/adapters/mcp/list.js +63 -0
- package/dist/adapters/mcp/list.js.map +1 -0
- package/dist/adapters/mcp/reindex.d.ts +6 -0
- package/dist/adapters/mcp/reindex.d.ts.map +1 -0
- package/dist/adapters/mcp/reindex.js +38 -0
- package/dist/adapters/mcp/reindex.js.map +1 -0
- package/dist/adapters/mcp/resources.d.ts +20 -0
- package/dist/adapters/mcp/resources.d.ts.map +1 -0
- package/dist/adapters/mcp/resources.js +111 -0
- package/dist/adapters/mcp/resources.js.map +1 -0
- package/dist/adapters/mcp/search.d.ts +7 -0
- package/dist/adapters/mcp/search.d.ts.map +1 -0
- package/dist/adapters/mcp/search.js +56 -0
- package/dist/adapters/mcp/search.js.map +1 -0
- package/dist/adapters/mcp/upsert.d.ts +6 -0
- package/dist/adapters/mcp/upsert.d.ts.map +1 -0
- package/dist/adapters/mcp/upsert.js +116 -0
- package/dist/adapters/mcp/upsert.js.map +1 -0
- package/dist/adapters/sqlite/ftsIndex.d.ts +35 -0
- package/dist/adapters/sqlite/ftsIndex.d.ts.map +1 -0
- package/dist/adapters/sqlite/ftsIndex.js +208 -0
- package/dist/adapters/sqlite/ftsIndex.js.map +1 -0
- package/dist/adapters/update/check.d.ts +42 -0
- package/dist/adapters/update/check.d.ts.map +1 -0
- package/dist/adapters/update/check.js +113 -0
- package/dist/adapters/update/check.js.map +1 -0
- package/dist/adapters/update/status.d.ts +8 -0
- package/dist/adapters/update/status.d.ts.map +1 -0
- package/dist/adapters/update/status.js +26 -0
- package/dist/adapters/update/status.js.map +1 -0
- package/dist/app/crawl.d.ts +27 -0
- package/dist/app/crawl.d.ts.map +1 -0
- package/dist/app/crawl.js +156 -0
- package/dist/app/crawl.js.map +1 -0
- package/dist/app/get.d.ts +64 -0
- package/dist/app/get.d.ts.map +1 -0
- package/dist/app/get.js +130 -0
- package/dist/app/get.js.map +1 -0
- package/dist/app/index-lifecycle.d.ts +14 -0
- package/dist/app/index-lifecycle.d.ts.map +1 -0
- package/dist/app/index-lifecycle.js +43 -0
- package/dist/app/index-lifecycle.js.map +1 -0
- package/dist/app/index-status.d.ts +29 -0
- package/dist/app/index-status.d.ts.map +1 -0
- package/dist/app/index-status.js +20 -0
- package/dist/app/index-status.js.map +1 -0
- package/dist/app/init.d.ts +27 -0
- package/dist/app/init.d.ts.map +1 -0
- package/dist/app/init.js +46 -0
- package/dist/app/init.js.map +1 -0
- package/dist/app/license-gate.d.ts +10 -0
- package/dist/app/license-gate.d.ts.map +1 -0
- package/dist/app/license-gate.js +24 -0
- package/dist/app/license-gate.js.map +1 -0
- package/dist/app/list.d.ts +36 -0
- package/dist/app/list.d.ts.map +1 -0
- package/dist/app/list.js +42 -0
- package/dist/app/list.js.map +1 -0
- package/dist/app/loadProjectConfig.d.ts +16 -0
- package/dist/app/loadProjectConfig.d.ts.map +1 -0
- package/dist/app/loadProjectConfig.js +48 -0
- package/dist/app/loadProjectConfig.js.map +1 -0
- package/dist/app/reindex.d.ts +27 -0
- package/dist/app/reindex.d.ts.map +1 -0
- package/dist/app/reindex.js +97 -0
- package/dist/app/reindex.js.map +1 -0
- package/dist/app/search-orchestrator.d.ts +13 -0
- package/dist/app/search-orchestrator.d.ts.map +1 -0
- package/dist/app/search-orchestrator.js +63 -0
- package/dist/app/search-orchestrator.js.map +1 -0
- package/dist/app/search.d.ts +28 -0
- package/dist/app/search.d.ts.map +1 -0
- package/dist/app/search.js +45 -0
- package/dist/app/search.js.map +1 -0
- package/dist/app/upsert.d.ts +75 -0
- package/dist/app/upsert.d.ts.map +1 -0
- package/dist/app/upsert.js +79 -0
- package/dist/app/upsert.js.map +1 -0
- package/dist/app/vector-backfill.d.ts +27 -0
- package/dist/app/vector-backfill.d.ts.map +1 -0
- package/dist/app/vector-backfill.js +78 -0
- package/dist/app/vector-backfill.js.map +1 -0
- package/dist/app/watch.d.ts +56 -0
- package/dist/app/watch.d.ts.map +1 -0
- package/dist/app/watch.js +154 -0
- package/dist/app/watch.js.map +1 -0
- package/dist/app/web-portal-search.d.ts +11 -0
- package/dist/app/web-portal-search.d.ts.map +1 -0
- package/dist/app/web-portal-search.js +97 -0
- package/dist/app/web-portal-search.js.map +1 -0
- package/dist/app/web-portal-service.d.ts +37 -0
- package/dist/app/web-portal-service.d.ts.map +1 -0
- package/dist/app/web-portal-service.js +198 -0
- package/dist/app/web-portal-service.js.map +1 -0
- package/dist/config.d.ts +28 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +53 -0
- package/dist/config.js.map +1 -0
- package/dist/domain/crawl.d.ts +40 -0
- package/dist/domain/crawl.d.ts.map +1 -0
- package/dist/domain/crawl.js +68 -0
- package/dist/domain/crawl.js.map +1 -0
- package/dist/domain/embedding-port.d.ts +12 -0
- package/dist/domain/embedding-port.d.ts.map +1 -0
- package/dist/domain/embedding-port.js +2 -0
- package/dist/domain/embedding-port.js.map +1 -0
- package/dist/domain/hybrid-search.d.ts +48 -0
- package/dist/domain/hybrid-search.d.ts.map +1 -0
- package/dist/domain/hybrid-search.js +144 -0
- package/dist/domain/hybrid-search.js.map +1 -0
- package/dist/domain/index-writer.d.ts +59 -0
- package/dist/domain/index-writer.d.ts.map +1 -0
- package/dist/domain/index-writer.js +203 -0
- package/dist/domain/index-writer.js.map +1 -0
- package/dist/domain/index.d.ts +37 -0
- package/dist/domain/index.d.ts.map +1 -0
- package/dist/domain/index.js +11 -0
- package/dist/domain/index.js.map +1 -0
- package/dist/domain/license.d.ts +32 -0
- package/dist/domain/license.d.ts.map +1 -0
- package/dist/domain/license.js +23 -0
- package/dist/domain/license.js.map +1 -0
- package/dist/domain/source-adapter.d.ts +31 -0
- package/dist/domain/source-adapter.d.ts.map +1 -0
- package/dist/domain/source-adapter.js +70 -0
- package/dist/domain/source-adapter.js.map +1 -0
- package/dist/domain/watch-config.d.ts +14 -0
- package/dist/domain/watch-config.d.ts.map +1 -0
- package/dist/domain/watch-config.js +29 -0
- package/dist/domain/watch-config.js.map +1 -0
- package/dist/domain/watch.d.ts +64 -0
- package/dist/domain/watch.d.ts.map +1 -0
- package/dist/domain/watch.js +101 -0
- package/dist/domain/watch.js.map +1 -0
- package/dist/domain/watcher-port.d.ts +16 -0
- package/dist/domain/watcher-port.d.ts.map +1 -0
- package/dist/domain/watcher-port.js +2 -0
- package/dist/domain/watcher-port.js.map +1 -0
- package/dist/domain/web-server-port.d.ts +25 -0
- package/dist/domain/web-server-port.d.ts.map +1 -0
- package/dist/domain/web-server-port.js +2 -0
- package/dist/domain/web-server-port.js.map +1 -0
- package/dist/errors.d.ts +20 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +72 -0
- package/dist/errors.js.map +1 -0
- package/dist/public/assets/d3-WlJuvznM.js +1 -0
- package/dist/public/assets/icons-fLoaB2oH.js +216 -0
- package/dist/public/assets/index-BMOY5R3r.js +33 -0
- package/dist/public/assets/index-DtnaN3wg.css +1 -0
- package/dist/public/assets/inter-cyrillic-400-normal-HOLc17fK.woff +0 -0
- package/dist/public/assets/inter-cyrillic-400-normal-obahsSVq.woff2 +0 -0
- package/dist/public/assets/inter-cyrillic-500-normal-BasfLYem.woff2 +0 -0
- package/dist/public/assets/inter-cyrillic-500-normal-CxZf_p3X.woff +0 -0
- package/dist/public/assets/inter-cyrillic-600-normal-4D_pXhcN.woff +0 -0
- package/dist/public/assets/inter-cyrillic-600-normal-CWCymEST.woff2 +0 -0
- package/dist/public/assets/inter-cyrillic-700-normal-CjBOestx.woff2 +0 -0
- package/dist/public/assets/inter-cyrillic-700-normal-DrXBdSj3.woff +0 -0
- package/dist/public/assets/inter-cyrillic-ext-400-normal-BQZuk6qB.woff2 +0 -0
- package/dist/public/assets/inter-cyrillic-ext-400-normal-DQukG94-.woff +0 -0
- package/dist/public/assets/inter-cyrillic-ext-500-normal-B0yAr1jD.woff2 +0 -0
- package/dist/public/assets/inter-cyrillic-ext-500-normal-BmqWE9Dz.woff +0 -0
- package/dist/public/assets/inter-cyrillic-ext-600-normal-Bcila6Z-.woff +0 -0
- package/dist/public/assets/inter-cyrillic-ext-600-normal-Dfes3d0z.woff2 +0 -0
- package/dist/public/assets/inter-cyrillic-ext-700-normal-BjwYoWNd.woff2 +0 -0
- package/dist/public/assets/inter-cyrillic-ext-700-normal-LO58E6JB.woff +0 -0
- package/dist/public/assets/inter-greek-400-normal-B4URO6DV.woff2 +0 -0
- package/dist/public/assets/inter-greek-400-normal-q2sYcFCs.woff +0 -0
- package/dist/public/assets/inter-greek-500-normal-BIZE56-Y.woff2 +0 -0
- package/dist/public/assets/inter-greek-500-normal-Xzm54t5V.woff +0 -0
- package/dist/public/assets/inter-greek-600-normal-BZpKdvQh.woff +0 -0
- package/dist/public/assets/inter-greek-600-normal-plRanbMR.woff2 +0 -0
- package/dist/public/assets/inter-greek-700-normal-BUv2fZ6O.woff +0 -0
- package/dist/public/assets/inter-greek-700-normal-C3JjAnD8.woff2 +0 -0
- package/dist/public/assets/inter-greek-ext-400-normal-DGGRlc-M.woff2 +0 -0
- package/dist/public/assets/inter-greek-ext-400-normal-KugGGMne.woff +0 -0
- package/dist/public/assets/inter-greek-ext-500-normal-2j5mBUwD.woff +0 -0
- package/dist/public/assets/inter-greek-ext-500-normal-C4iEst2y.woff2 +0 -0
- package/dist/public/assets/inter-greek-ext-600-normal-B8X0CLgF.woff +0 -0
- package/dist/public/assets/inter-greek-ext-600-normal-DRtmH8MT.woff2 +0 -0
- package/dist/public/assets/inter-greek-ext-700-normal-BoQ6DsYi.woff +0 -0
- package/dist/public/assets/inter-greek-ext-700-normal-qfdV9bQt.woff2 +0 -0
- package/dist/public/assets/inter-latin-400-normal-C38fXH4l.woff2 +0 -0
- package/dist/public/assets/inter-latin-400-normal-CyCys3Eg.woff +0 -0
- package/dist/public/assets/inter-latin-500-normal-BL9OpVg8.woff +0 -0
- package/dist/public/assets/inter-latin-500-normal-Cerq10X2.woff2 +0 -0
- package/dist/public/assets/inter-latin-600-normal-CiBQ2DWP.woff +0 -0
- package/dist/public/assets/inter-latin-600-normal-LgqL8muc.woff2 +0 -0
- package/dist/public/assets/inter-latin-700-normal-BLAVimhd.woff +0 -0
- package/dist/public/assets/inter-latin-700-normal-Yt3aPRUw.woff2 +0 -0
- package/dist/public/assets/inter-latin-ext-400-normal-77YHD8bZ.woff +0 -0
- package/dist/public/assets/inter-latin-ext-400-normal-C1nco2VV.woff2 +0 -0
- package/dist/public/assets/inter-latin-ext-500-normal-BxGbmqWO.woff +0 -0
- package/dist/public/assets/inter-latin-ext-500-normal-CV4jyFjo.woff2 +0 -0
- package/dist/public/assets/inter-latin-ext-600-normal-CIVaiw4L.woff +0 -0
- package/dist/public/assets/inter-latin-ext-600-normal-D2bJ5OIk.woff2 +0 -0
- package/dist/public/assets/inter-latin-ext-700-normal-Ca8adRJv.woff2 +0 -0
- package/dist/public/assets/inter-latin-ext-700-normal-TidjK2hL.woff +0 -0
- package/dist/public/assets/inter-vietnamese-400-normal-Bbgyi5SW.woff +0 -0
- package/dist/public/assets/inter-vietnamese-400-normal-DMkecbls.woff2 +0 -0
- package/dist/public/assets/inter-vietnamese-500-normal-DOriooB6.woff2 +0 -0
- package/dist/public/assets/inter-vietnamese-500-normal-mJboJaSs.woff +0 -0
- package/dist/public/assets/inter-vietnamese-600-normal-BuLX-rYi.woff +0 -0
- package/dist/public/assets/inter-vietnamese-600-normal-Cc8MFFhd.woff2 +0 -0
- package/dist/public/assets/inter-vietnamese-700-normal-BZaoP0fm.woff +0 -0
- package/dist/public/assets/inter-vietnamese-700-normal-DlLaEgI2.woff2 +0 -0
- package/dist/public/assets/jetbrains-mono-cyrillic-400-normal-BEIGL1Tu.woff2 +0 -0
- package/dist/public/assets/jetbrains-mono-cyrillic-400-normal-ugxPyKxw.woff +0 -0
- package/dist/public/assets/jetbrains-mono-cyrillic-500-normal-DJqRU3vO.woff +0 -0
- package/dist/public/assets/jetbrains-mono-cyrillic-500-normal-DmUKJPL_.woff2 +0 -0
- package/dist/public/assets/jetbrains-mono-cyrillic-600-normal-8K4wrrwR.woff +0 -0
- package/dist/public/assets/jetbrains-mono-cyrillic-600-normal-EVf6-Yzo.woff2 +0 -0
- package/dist/public/assets/jetbrains-mono-greek-400-normal-B9oWc5Lo.woff +0 -0
- package/dist/public/assets/jetbrains-mono-greek-400-normal-C190GLew.woff2 +0 -0
- package/dist/public/assets/jetbrains-mono-greek-500-normal-D7SFKleX.woff +0 -0
- package/dist/public/assets/jetbrains-mono-greek-500-normal-JpySY46c.woff2 +0 -0
- package/dist/public/assets/jetbrains-mono-greek-600-normal-H7WoG9Et.woff2 +0 -0
- package/dist/public/assets/jetbrains-mono-greek-600-normal-mc2nkWzM.woff +0 -0
- package/dist/public/assets/jetbrains-mono-latin-400-normal-6-qcROiO.woff +0 -0
- package/dist/public/assets/jetbrains-mono-latin-400-normal-V6pRDFza.woff2 +0 -0
- package/dist/public/assets/jetbrains-mono-latin-500-normal-BWZEU5yA.woff2 +0 -0
- package/dist/public/assets/jetbrains-mono-latin-500-normal-CJOVTJB7.woff +0 -0
- package/dist/public/assets/jetbrains-mono-latin-600-normal-BfsvjouI.woff +0 -0
- package/dist/public/assets/jetbrains-mono-latin-600-normal-C8RAYTDA.woff2 +0 -0
- package/dist/public/assets/jetbrains-mono-latin-ext-400-normal-Bc8Ftmh3.woff2 +0 -0
- package/dist/public/assets/jetbrains-mono-latin-ext-400-normal-fXTG6kC5.woff +0 -0
- package/dist/public/assets/jetbrains-mono-latin-ext-500-normal-Cut-4mMH.woff2 +0 -0
- package/dist/public/assets/jetbrains-mono-latin-ext-500-normal-ckzbgY84.woff +0 -0
- package/dist/public/assets/jetbrains-mono-latin-ext-600-normal-BfB_LPfz.woff2 +0 -0
- package/dist/public/assets/jetbrains-mono-latin-ext-600-normal-DObL3zCW.woff +0 -0
- package/dist/public/assets/jetbrains-mono-vietnamese-400-normal-CqNFfHCs.woff +0 -0
- package/dist/public/assets/jetbrains-mono-vietnamese-500-normal-DNRqzVM1.woff +0 -0
- package/dist/public/assets/jetbrains-mono-vietnamese-600-normal-OWROknRo.woff +0 -0
- package/dist/public/assets/markdown-ClyHvAfw.js +64 -0
- package/dist/public/assets/newsreader-latin-400-italic-CEihAR-f.woff2 +0 -0
- package/dist/public/assets/newsreader-latin-400-italic-CNZoH1hn.woff +0 -0
- package/dist/public/assets/newsreader-latin-400-normal-BFBkh4jY.woff2 +0 -0
- package/dist/public/assets/newsreader-latin-400-normal-gRTjlS2D.woff +0 -0
- package/dist/public/assets/newsreader-latin-600-normal-30OJ_TG_.woff2 +0 -0
- package/dist/public/assets/newsreader-latin-600-normal-DUnT2r2g.woff +0 -0
- package/dist/public/assets/newsreader-latin-ext-400-italic-BMTE_bNQ.woff2 +0 -0
- package/dist/public/assets/newsreader-latin-ext-400-italic-qdgKLcPG.woff +0 -0
- package/dist/public/assets/newsreader-latin-ext-400-normal-DYA1XoQK.woff +0 -0
- package/dist/public/assets/newsreader-latin-ext-400-normal-svq1FPys.woff2 +0 -0
- package/dist/public/assets/newsreader-latin-ext-600-normal-BXv5iMHi.woff2 +0 -0
- package/dist/public/assets/newsreader-latin-ext-600-normal-BrbfzHZ5.woff +0 -0
- package/dist/public/assets/newsreader-vietnamese-400-italic-QbB8kb5s.woff +0 -0
- package/dist/public/assets/newsreader-vietnamese-400-italic-bZegYFuM.woff2 +0 -0
- package/dist/public/assets/newsreader-vietnamese-400-normal-BekUZro8.woff +0 -0
- package/dist/public/assets/newsreader-vietnamese-400-normal-DdKr49mV.woff2 +0 -0
- package/dist/public/assets/newsreader-vietnamese-600-normal-CVAR0otO.woff +0 -0
- package/dist/public/assets/newsreader-vietnamese-600-normal-CaH84vfx.woff2 +0 -0
- package/dist/public/assets/vendor-D9lk2KFa.js +17 -0
- package/dist/public/brand/sirius-icon.png +0 -0
- package/dist/public/brand/sirius-logo-full.png +0 -0
- package/dist/public/brand/sirius-wordmark.png +0 -0
- package/dist/public/favicon.png +0 -0
- package/dist/public/index.html +19 -0
- package/dist/schemas/document.d.ts +93 -0
- package/dist/schemas/document.d.ts.map +1 -0
- package/dist/schemas/document.js +102 -0
- package/dist/schemas/document.js.map +1 -0
- package/dist/schemas/project.d.ts +16 -0
- package/dist/schemas/project.d.ts.map +1 -0
- package/dist/schemas/project.js +7 -0
- package/dist/schemas/project.js.map +1 -0
- package/dist/server-bootstrap.d.ts +16 -0
- package/dist/server-bootstrap.d.ts.map +1 -0
- package/dist/server-bootstrap.js +184 -0
- package/dist/server-bootstrap.js.map +1 -0
- package/dist/server.d.ts +3 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +114 -0
- package/dist/server.js.map +1 -0
- package/package.json +67 -0
- 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
|