@skaile/workspaces 0.8.5
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/CHANGELOG.md +135 -0
- package/LICENSE +201 -0
- package/README.md +82 -0
- package/dist/asset-manager/catalog-deployer.js +4 -0
- package/dist/asset-manager/catalog-deployer.js.map +1 -0
- package/dist/asset-manager/contrib.js +4 -0
- package/dist/asset-manager/contrib.js.map +1 -0
- package/dist/asset-manager/fragments.js +4 -0
- package/dist/asset-manager/fragments.js.map +1 -0
- package/dist/asset-manager/history.js +4 -0
- package/dist/asset-manager/history.js.map +1 -0
- package/dist/asset-manager/index.js +22 -0
- package/dist/asset-manager/index.js.map +1 -0
- package/dist/asset-manager/installer.js +18 -0
- package/dist/asset-manager/installer.js.map +1 -0
- package/dist/asset-manager/renderers.js +5 -0
- package/dist/asset-manager/renderers.js.map +1 -0
- package/dist/asset-manager/scaffold.js +18 -0
- package/dist/asset-manager/scaffold.js.map +1 -0
- package/dist/asset-manager/src/catalog-deployer.d.ts +144 -0
- package/dist/asset-manager/src/catalog-deployer.d.ts.map +1 -0
- package/dist/asset-manager/src/contrib.d.ts +133 -0
- package/dist/asset-manager/src/contrib.d.ts.map +1 -0
- package/dist/asset-manager/src/fragments.d.ts +111 -0
- package/dist/asset-manager/src/fragments.d.ts.map +1 -0
- package/dist/asset-manager/src/history.d.ts +52 -0
- package/dist/asset-manager/src/history.d.ts.map +1 -0
- package/dist/asset-manager/src/index.d.ts +459 -0
- package/dist/asset-manager/src/index.d.ts.map +1 -0
- package/dist/asset-manager/src/installer.d.ts +85 -0
- package/dist/asset-manager/src/installer.d.ts.map +1 -0
- package/dist/asset-manager/src/renderers.d.ts +125 -0
- package/dist/asset-manager/src/renderers.d.ts.map +1 -0
- package/dist/asset-manager/src/scaffold/index.d.ts +19 -0
- package/dist/asset-manager/src/scaffold/index.d.ts.map +1 -0
- package/dist/asset-manager/src/scaffold/layers/agents.d.ts +67 -0
- package/dist/asset-manager/src/scaffold/layers/agents.d.ts.map +1 -0
- package/dist/asset-manager/src/scaffold/layers/base.d.ts +17 -0
- package/dist/asset-manager/src/scaffold/layers/base.d.ts.map +1 -0
- package/dist/asset-manager/src/scaffold/layers/connectors.d.ts +18 -0
- package/dist/asset-manager/src/scaffold/layers/connectors.d.ts.map +1 -0
- package/dist/asset-manager/src/scaffold/layers/container.d.ts +16 -0
- package/dist/asset-manager/src/scaffold/layers/container.d.ts.map +1 -0
- package/dist/asset-manager/src/scaffold/layers/driver-target.d.ts +17 -0
- package/dist/asset-manager/src/scaffold/layers/driver-target.d.ts.map +1 -0
- package/dist/asset-manager/src/scaffold/layers/hooks.d.ts +22 -0
- package/dist/asset-manager/src/scaffold/layers/hooks.d.ts.map +1 -0
- package/dist/asset-manager/src/scaffold/layers/skills.d.ts +31 -0
- package/dist/asset-manager/src/scaffold/layers/skills.d.ts.map +1 -0
- package/dist/asset-manager/src/scaffold/layers/template.d.ts +16 -0
- package/dist/asset-manager/src/scaffold/layers/template.d.ts.map +1 -0
- package/dist/asset-manager/src/scaffold/scaffolder.d.ts +77 -0
- package/dist/asset-manager/src/scaffold/scaffolder.d.ts.map +1 -0
- package/dist/asset-manager/src/scaffold/types.d.ts +241 -0
- package/dist/asset-manager/src/scaffold/types.d.ts.map +1 -0
- package/dist/base-assets/connectors/deploy/adapter.d.ts +37 -0
- package/dist/base-assets/connectors/deploy/adapter.d.ts.map +1 -0
- package/dist/base-assets/connectors/deploy.js +20 -0
- package/dist/base-assets/connectors/deploy.js.map +1 -0
- package/dist/base-assets/connectors/devserver/adapter.d.ts +43 -0
- package/dist/base-assets/connectors/devserver/adapter.d.ts.map +1 -0
- package/dist/base-assets/connectors/devserver.js +20 -0
- package/dist/base-assets/connectors/devserver.js.map +1 -0
- package/dist/base-assets/connectors/flow/adapter.d.ts +200 -0
- package/dist/base-assets/connectors/flow/adapter.d.ts.map +1 -0
- package/dist/base-assets/connectors/flow/adapter.js +20 -0
- package/dist/base-assets/connectors/flow/adapter.js.map +1 -0
- package/dist/base-assets/connectors/flow/engine/engine.d.ts +107 -0
- package/dist/base-assets/connectors/flow/engine/engine.d.ts.map +1 -0
- package/dist/base-assets/connectors/flow/engine/flow-kind-provider.d.ts +16 -0
- package/dist/base-assets/connectors/flow/engine/flow-kind-provider.d.ts.map +1 -0
- package/dist/base-assets/connectors/flow/engine/flow-manifest.d.ts +215 -0
- package/dist/base-assets/connectors/flow/engine/flow-manifest.d.ts.map +1 -0
- package/dist/base-assets/connectors/flow/engine/index.d.ts +7 -0
- package/dist/base-assets/connectors/flow/engine/index.d.ts.map +1 -0
- package/dist/base-assets/connectors/flow/engine/loader.d.ts +43 -0
- package/dist/base-assets/connectors/flow/engine/loader.d.ts.map +1 -0
- package/dist/base-assets/connectors/flow/engine/types.d.ts +298 -0
- package/dist/base-assets/connectors/flow/engine/types.d.ts.map +1 -0
- package/dist/base-assets/connectors/flow/engine.js +4 -0
- package/dist/base-assets/connectors/flow/engine.js.map +1 -0
- package/dist/base-assets/connectors/flow/index.d.ts +3 -0
- package/dist/base-assets/connectors/flow/index.d.ts.map +1 -0
- package/dist/base-assets/connectors/flow/prompt-fragments.d.ts +90 -0
- package/dist/base-assets/connectors/flow/prompt-fragments.d.ts.map +1 -0
- package/dist/base-assets/connectors/flow/prompt-fragments.js +4 -0
- package/dist/base-assets/connectors/flow/prompt-fragments.js.map +1 -0
- package/dist/base-assets/connectors/flow/run-flow.d.ts +159 -0
- package/dist/base-assets/connectors/flow/run-flow.d.ts.map +1 -0
- package/dist/base-assets/connectors/flow/run-flow.js +23 -0
- package/dist/base-assets/connectors/flow/run-flow.js.map +1 -0
- package/dist/base-assets/connectors/flow/stimulus-driver.d.ts +42 -0
- package/dist/base-assets/connectors/flow/stimulus-driver.d.ts.map +1 -0
- package/dist/base-assets/connectors/flow/stimulus-driver.js +4 -0
- package/dist/base-assets/connectors/flow/stimulus-driver.js.map +1 -0
- package/dist/base-assets/connectors/flow.js +20 -0
- package/dist/base-assets/connectors/flow.js.map +1 -0
- package/dist/base-assets/connectors/gmail/adapter.d.ts +31 -0
- package/dist/base-assets/connectors/gmail/adapter.d.ts.map +1 -0
- package/dist/base-assets/connectors/gmail.js +20 -0
- package/dist/base-assets/connectors/gmail.js.map +1 -0
- package/dist/base-assets/connectors/mattermost/adapter.d.ts +38 -0
- package/dist/base-assets/connectors/mattermost/adapter.d.ts.map +1 -0
- package/dist/base-assets/connectors/mattermost.js +20 -0
- package/dist/base-assets/connectors/mattermost.js.map +1 -0
- package/dist/base-assets/connectors/memory/adapter.d.ts +32 -0
- package/dist/base-assets/connectors/memory/adapter.d.ts.map +1 -0
- package/dist/base-assets/connectors/memory.js +20 -0
- package/dist/base-assets/connectors/memory.js.map +1 -0
- package/dist/base-assets/connectors/minio/adapter.d.ts +32 -0
- package/dist/base-assets/connectors/minio/adapter.d.ts.map +1 -0
- package/dist/base-assets/connectors/minio.js +20 -0
- package/dist/base-assets/connectors/minio.js.map +1 -0
- package/dist/base-assets/connectors/postgres/adapter.d.ts +40 -0
- package/dist/base-assets/connectors/postgres/adapter.d.ts.map +1 -0
- package/dist/base-assets/connectors/postgres.js +20 -0
- package/dist/base-assets/connectors/postgres.js.map +1 -0
- package/dist/base-assets/connectors/redis/adapter.d.ts +39 -0
- package/dist/base-assets/connectors/redis/adapter.d.ts.map +1 -0
- package/dist/base-assets/connectors/redis.js +20 -0
- package/dist/base-assets/connectors/redis.js.map +1 -0
- package/dist/base-assets/connectors/sqlite/adapter.d.ts +42 -0
- package/dist/base-assets/connectors/sqlite/adapter.d.ts.map +1 -0
- package/dist/base-assets/connectors/sqlite.js +20 -0
- package/dist/base-assets/connectors/sqlite.js.map +1 -0
- package/dist/base-assets/connectors/static-server/adapter.d.ts +28 -0
- package/dist/base-assets/connectors/static-server/adapter.d.ts.map +1 -0
- package/dist/base-assets/connectors/static-server.js +20 -0
- package/dist/base-assets/connectors/static-server.js.map +1 -0
- package/dist/base-assets/connectors/tunnel/adapter.d.ts +28 -0
- package/dist/base-assets/connectors/tunnel/adapter.d.ts.map +1 -0
- package/dist/base-assets/connectors/tunnel.js +20 -0
- package/dist/base-assets/connectors/tunnel.js.map +1 -0
- package/dist/base-assets/connectors/xstate/adapter.d.ts +51 -0
- package/dist/base-assets/connectors/xstate/adapter.d.ts.map +1 -0
- package/dist/base-assets/connectors/xstate-store/adapter.d.ts +40 -0
- package/dist/base-assets/connectors/xstate-store/adapter.d.ts.map +1 -0
- package/dist/base-assets/connectors/xstate-store.js +20 -0
- package/dist/base-assets/connectors/xstate-store.js.map +1 -0
- package/dist/base-assets/connectors/xstate.js +20 -0
- package/dist/base-assets/connectors/xstate.js.map +1 -0
- package/dist/base-assets/connectors/yjs/adapter.d.ts +49 -0
- package/dist/base-assets/connectors/yjs/adapter.d.ts.map +1 -0
- package/dist/base-assets/connectors/yjs.js +20 -0
- package/dist/base-assets/connectors/yjs.js.map +1 -0
- package/dist/base-assets/index.d.ts +8 -0
- package/dist/base-assets/index.d.ts.map +1 -0
- package/dist/base-assets/index.js +9 -0
- package/dist/base-assets/index.js.map +1 -0
- package/dist/base-assets/mounts/git/driver.d.ts +183 -0
- package/dist/base-assets/mounts/git/driver.d.ts.map +1 -0
- package/dist/base-assets/mounts/git.js +20 -0
- package/dist/base-assets/mounts/git.js.map +1 -0
- package/dist/base-assets/mounts/local/driver.d.ts +27 -0
- package/dist/base-assets/mounts/local/driver.d.ts.map +1 -0
- package/dist/base-assets/mounts/local.js +20 -0
- package/dist/base-assets/mounts/local.js.map +1 -0
- package/dist/base-assets/mounts/s3/driver.d.ts +27 -0
- package/dist/base-assets/mounts/s3/driver.d.ts.map +1 -0
- package/dist/base-assets/mounts/s3.js +20 -0
- package/dist/base-assets/mounts/s3.js.map +1 -0
- package/dist/base-assets/mounts/sharepoint/driver.d.ts +31 -0
- package/dist/base-assets/mounts/sharepoint/driver.d.ts.map +1 -0
- package/dist/base-assets/mounts/sharepoint.js +20 -0
- package/dist/base-assets/mounts/sharepoint.js.map +1 -0
- package/dist/base-assets/mounts/webdav/driver.d.ts +32 -0
- package/dist/base-assets/mounts/webdav/driver.d.ts.map +1 -0
- package/dist/base-assets/mounts/webdav.js +20 -0
- package/dist/base-assets/mounts/webdav.js.map +1 -0
- package/dist/bridge/drivers/claude-sdk.js +836 -0
- package/dist/bridge/drivers/claude-sdk.js.map +1 -0
- package/dist/bridge/drivers/codex.js +478 -0
- package/dist/bridge/drivers/codex.js.map +1 -0
- package/dist/bridge/drivers/echo.js +219 -0
- package/dist/bridge/drivers/echo.js.map +1 -0
- package/dist/bridge/drivers/omp.js +431 -0
- package/dist/bridge/drivers/omp.js.map +1 -0
- package/dist/bridge/index.js +9 -0
- package/dist/bridge/index.js.map +1 -0
- package/dist/bridge/src/capability-dispatch.d.ts +94 -0
- package/dist/bridge/src/capability-dispatch.d.ts.map +1 -0
- package/dist/bridge/src/drivers/claude-sdk.d.ts +224 -0
- package/dist/bridge/src/drivers/claude-sdk.d.ts.map +1 -0
- package/dist/bridge/src/drivers/codex.d.ts +66 -0
- package/dist/bridge/src/drivers/codex.d.ts.map +1 -0
- package/dist/bridge/src/drivers/echo.d.ts +59 -0
- package/dist/bridge/src/drivers/echo.d.ts.map +1 -0
- package/dist/bridge/src/drivers/omp.d.ts +101 -0
- package/dist/bridge/src/drivers/omp.d.ts.map +1 -0
- package/dist/bridge/src/error-classifier.d.ts +90 -0
- package/dist/bridge/src/error-classifier.d.ts.map +1 -0
- package/dist/bridge/src/index.d.ts +10 -0
- package/dist/bridge/src/index.d.ts.map +1 -0
- package/dist/bridge/src/logger.d.ts +22 -0
- package/dist/bridge/src/logger.d.ts.map +1 -0
- package/dist/bridge/src/models.d.ts +90 -0
- package/dist/bridge/src/models.d.ts.map +1 -0
- package/dist/bridge/src/normalizer.d.ts +91 -0
- package/dist/bridge/src/normalizer.d.ts.map +1 -0
- package/dist/bridge/src/registry.d.ts +90 -0
- package/dist/bridge/src/registry.d.ts.map +1 -0
- package/dist/bridge/src/runtime.d.ts +42 -0
- package/dist/bridge/src/runtime.d.ts.map +1 -0
- package/dist/bridge/src/types.d.ts +564 -0
- package/dist/bridge/src/types.d.ts.map +1 -0
- package/dist/bridge/src/validation.d.ts +27 -0
- package/dist/bridge/src/validation.d.ts.map +1 -0
- package/dist/chunk-2M3XTMOL.js +23 -0
- package/dist/chunk-2M3XTMOL.js.map +1 -0
- package/dist/chunk-3W7Z74ZP.js +7678 -0
- package/dist/chunk-3W7Z74ZP.js.map +1 -0
- package/dist/chunk-44ZICIN4.js +418 -0
- package/dist/chunk-44ZICIN4.js.map +1 -0
- package/dist/chunk-46T37EBP.js +1517 -0
- package/dist/chunk-46T37EBP.js.map +1 -0
- package/dist/chunk-4NDWKA64.js +71 -0
- package/dist/chunk-4NDWKA64.js.map +1 -0
- package/dist/chunk-5CSE3QL2.js +546 -0
- package/dist/chunk-5CSE3QL2.js.map +1 -0
- package/dist/chunk-65CYXYUW.js +537 -0
- package/dist/chunk-65CYXYUW.js.map +1 -0
- package/dist/chunk-6UQ66R46.js +72 -0
- package/dist/chunk-6UQ66R46.js.map +1 -0
- package/dist/chunk-77CUYYO3.js +101 -0
- package/dist/chunk-77CUYYO3.js.map +1 -0
- package/dist/chunk-7H7EOIRH.js +393 -0
- package/dist/chunk-7H7EOIRH.js.map +1 -0
- package/dist/chunk-7HCGI2GW.js +385 -0
- package/dist/chunk-7HCGI2GW.js.map +1 -0
- package/dist/chunk-7HLNUSNE.js +212 -0
- package/dist/chunk-7HLNUSNE.js.map +1 -0
- package/dist/chunk-7PTP3SQJ.js +151 -0
- package/dist/chunk-7PTP3SQJ.js.map +1 -0
- package/dist/chunk-AIGWF3TJ.js +73 -0
- package/dist/chunk-AIGWF3TJ.js.map +1 -0
- package/dist/chunk-BVHFSUFM.js +343 -0
- package/dist/chunk-BVHFSUFM.js.map +1 -0
- package/dist/chunk-CCKGX5AS.js +481 -0
- package/dist/chunk-CCKGX5AS.js.map +1 -0
- package/dist/chunk-CGYEHQOX.js +117 -0
- package/dist/chunk-CGYEHQOX.js.map +1 -0
- package/dist/chunk-CSUBFKAN.js +747 -0
- package/dist/chunk-CSUBFKAN.js.map +1 -0
- package/dist/chunk-D5IH3QMH.js +112 -0
- package/dist/chunk-D5IH3QMH.js.map +1 -0
- package/dist/chunk-DOMCYP7D.js +3229 -0
- package/dist/chunk-DOMCYP7D.js.map +1 -0
- package/dist/chunk-EE3XTJ62.js +840 -0
- package/dist/chunk-EE3XTJ62.js.map +1 -0
- package/dist/chunk-EWP5HZBV.js +226 -0
- package/dist/chunk-EWP5HZBV.js.map +1 -0
- package/dist/chunk-FQHHCICT.js +591 -0
- package/dist/chunk-FQHHCICT.js.map +1 -0
- package/dist/chunk-FVTV7M76.js +30 -0
- package/dist/chunk-FVTV7M76.js.map +1 -0
- package/dist/chunk-GCRKAFH7.js +40 -0
- package/dist/chunk-GCRKAFH7.js.map +1 -0
- package/dist/chunk-GVOLEJG5.js +93 -0
- package/dist/chunk-GVOLEJG5.js.map +1 -0
- package/dist/chunk-GZWJGNNN.js +122 -0
- package/dist/chunk-GZWJGNNN.js.map +1 -0
- package/dist/chunk-HK5FRWG6.js +44 -0
- package/dist/chunk-HK5FRWG6.js.map +1 -0
- package/dist/chunk-IPUYL6TD.js +279 -0
- package/dist/chunk-IPUYL6TD.js.map +1 -0
- package/dist/chunk-JDX54X4Y.js +535 -0
- package/dist/chunk-JDX54X4Y.js.map +1 -0
- package/dist/chunk-JKNWJ64A.js +31 -0
- package/dist/chunk-JKNWJ64A.js.map +1 -0
- package/dist/chunk-JLPC4YWT.js +124 -0
- package/dist/chunk-JLPC4YWT.js.map +1 -0
- package/dist/chunk-K5GBV4SA.js +31 -0
- package/dist/chunk-K5GBV4SA.js.map +1 -0
- package/dist/chunk-KLNL7QHN.js +56 -0
- package/dist/chunk-KLNL7QHN.js.map +1 -0
- package/dist/chunk-KOVLSBXK.js +227 -0
- package/dist/chunk-KOVLSBXK.js.map +1 -0
- package/dist/chunk-KTBKW2FI.js +46 -0
- package/dist/chunk-KTBKW2FI.js.map +1 -0
- package/dist/chunk-LSGAYQ2E.js +166 -0
- package/dist/chunk-LSGAYQ2E.js.map +1 -0
- package/dist/chunk-LV2HPH3C.js +73 -0
- package/dist/chunk-LV2HPH3C.js.map +1 -0
- package/dist/chunk-MBBTBKAS.js +201 -0
- package/dist/chunk-MBBTBKAS.js.map +1 -0
- package/dist/chunk-MJHLQRJJ.js +325 -0
- package/dist/chunk-MJHLQRJJ.js.map +1 -0
- package/dist/chunk-NSBPE2FW.js +15 -0
- package/dist/chunk-NSBPE2FW.js.map +1 -0
- package/dist/chunk-NYJKXVG6.js +4166 -0
- package/dist/chunk-NYJKXVG6.js.map +1 -0
- package/dist/chunk-O4JH3KUE.js +56 -0
- package/dist/chunk-O4JH3KUE.js.map +1 -0
- package/dist/chunk-O5AE4QDX.js +67 -0
- package/dist/chunk-O5AE4QDX.js.map +1 -0
- package/dist/chunk-O7SG5PC2.js +3 -0
- package/dist/chunk-O7SG5PC2.js.map +1 -0
- package/dist/chunk-OKRUTSG7.js +87 -0
- package/dist/chunk-OKRUTSG7.js.map +1 -0
- package/dist/chunk-Q5URN24L.js +310 -0
- package/dist/chunk-Q5URN24L.js.map +1 -0
- package/dist/chunk-QT2KQHDT.js +49 -0
- package/dist/chunk-QT2KQHDT.js.map +1 -0
- package/dist/chunk-RRVQAE5D.js +51 -0
- package/dist/chunk-RRVQAE5D.js.map +1 -0
- package/dist/chunk-SZ3SIVZQ.js +78 -0
- package/dist/chunk-SZ3SIVZQ.js.map +1 -0
- package/dist/chunk-TS6VCR4W.js +195 -0
- package/dist/chunk-TS6VCR4W.js.map +1 -0
- package/dist/chunk-UMMBL7SW.js +210 -0
- package/dist/chunk-UMMBL7SW.js.map +1 -0
- package/dist/chunk-UQ6LFBPZ.js +122 -0
- package/dist/chunk-UQ6LFBPZ.js.map +1 -0
- package/dist/chunk-V37HONL7.js +526 -0
- package/dist/chunk-V37HONL7.js.map +1 -0
- package/dist/chunk-W2O5LWYU.js +3 -0
- package/dist/chunk-W2O5LWYU.js.map +1 -0
- package/dist/chunk-X5YPJV4N.js +14 -0
- package/dist/chunk-X5YPJV4N.js.map +1 -0
- package/dist/chunk-XCBG2KDC.js +23 -0
- package/dist/chunk-XCBG2KDC.js.map +1 -0
- package/dist/chunk-XEGHWFAX.js +174 -0
- package/dist/chunk-XEGHWFAX.js.map +1 -0
- package/dist/chunk-XOSBNBB6.js +155 -0
- package/dist/chunk-XOSBNBB6.js.map +1 -0
- package/dist/chunk-Y46TBPLI.js +97 -0
- package/dist/chunk-Y46TBPLI.js.map +1 -0
- package/dist/chunk-Z3RER6YZ.js +343 -0
- package/dist/chunk-Z3RER6YZ.js.map +1 -0
- package/dist/chunk-ZUQIXLRJ.js +284 -0
- package/dist/chunk-ZUQIXLRJ.js.map +1 -0
- package/dist/cli/index.js +5685 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/src/commands/asset-cmd.d.ts +15 -0
- package/dist/cli/src/commands/asset-cmd.d.ts.map +1 -0
- package/dist/cli/src/commands/auth.d.ts +16 -0
- package/dist/cli/src/commands/auth.d.ts.map +1 -0
- package/dist/cli/src/commands/catalog-cmd.d.ts +23 -0
- package/dist/cli/src/commands/catalog-cmd.d.ts.map +1 -0
- package/dist/cli/src/commands/catalog.d.ts +92 -0
- package/dist/cli/src/commands/catalog.d.ts.map +1 -0
- package/dist/cli/src/commands/complete-resolvers.d.ts +35 -0
- package/dist/cli/src/commands/complete-resolvers.d.ts.map +1 -0
- package/dist/cli/src/commands/complete.d.ts +14 -0
- package/dist/cli/src/commands/complete.d.ts.map +1 -0
- package/dist/cli/src/commands/config.d.ts +17 -0
- package/dist/cli/src/commands/config.d.ts.map +1 -0
- package/dist/cli/src/commands/connect.d.ts +13 -0
- package/dist/cli/src/commands/connect.d.ts.map +1 -0
- package/dist/cli/src/commands/connector.d.ts +30 -0
- package/dist/cli/src/commands/connector.d.ts.map +1 -0
- package/dist/cli/src/commands/debug.d.ts +13 -0
- package/dist/cli/src/commands/debug.d.ts.map +1 -0
- package/dist/cli/src/commands/diff.d.ts +12 -0
- package/dist/cli/src/commands/diff.d.ts.map +1 -0
- package/dist/cli/src/commands/flow.d.ts +14 -0
- package/dist/cli/src/commands/flow.d.ts.map +1 -0
- package/dist/cli/src/commands/history.d.ts +12 -0
- package/dist/cli/src/commands/history.d.ts.map +1 -0
- package/dist/cli/src/commands/library-cmd.d.ts +12 -0
- package/dist/cli/src/commands/library-cmd.d.ts.map +1 -0
- package/dist/cli/src/commands/library-status.d.ts +19 -0
- package/dist/cli/src/commands/library-status.d.ts.map +1 -0
- package/dist/cli/src/commands/logs.d.ts +13 -0
- package/dist/cli/src/commands/logs.d.ts.map +1 -0
- package/dist/cli/src/commands/manage.d.ts +62 -0
- package/dist/cli/src/commands/manage.d.ts.map +1 -0
- package/dist/cli/src/commands/mcp-server.d.ts +15 -0
- package/dist/cli/src/commands/mcp-server.d.ts.map +1 -0
- package/dist/cli/src/commands/mount.d.ts +22 -0
- package/dist/cli/src/commands/mount.d.ts.map +1 -0
- package/dist/cli/src/commands/npx.d.ts +14 -0
- package/dist/cli/src/commands/npx.d.ts.map +1 -0
- package/dist/cli/src/commands/outdated.d.ts +12 -0
- package/dist/cli/src/commands/outdated.d.ts.map +1 -0
- package/dist/cli/src/commands/patch.d.ts +14 -0
- package/dist/cli/src/commands/patch.d.ts.map +1 -0
- package/dist/cli/src/commands/plugin/claude-code.d.ts +17 -0
- package/dist/cli/src/commands/plugin/claude-code.d.ts.map +1 -0
- package/dist/cli/src/commands/plugin/codex.d.ts +5 -0
- package/dist/cli/src/commands/plugin/codex.d.ts.map +1 -0
- package/dist/cli/src/commands/plugin/omp.d.ts +12 -0
- package/dist/cli/src/commands/plugin/omp.d.ts.map +1 -0
- package/dist/cli/src/commands/plugin/types.d.ts +65 -0
- package/dist/cli/src/commands/plugin/types.d.ts.map +1 -0
- package/dist/cli/src/commands/plugin.d.ts +14 -0
- package/dist/cli/src/commands/plugin.d.ts.map +1 -0
- package/dist/cli/src/commands/preset-cmd.d.ts +19 -0
- package/dist/cli/src/commands/preset-cmd.d.ts.map +1 -0
- package/dist/cli/src/commands/project.d.ts +34 -0
- package/dist/cli/src/commands/project.d.ts.map +1 -0
- package/dist/cli/src/commands/rebuild.d.ts +21 -0
- package/dist/cli/src/commands/rebuild.d.ts.map +1 -0
- package/dist/cli/src/commands/run.d.ts +68 -0
- package/dist/cli/src/commands/run.d.ts.map +1 -0
- package/dist/cli/src/commands/serve.d.ts +13 -0
- package/dist/cli/src/commands/serve.d.ts.map +1 -0
- package/dist/cli/src/commands/session-logs/format.d.ts +21 -0
- package/dist/cli/src/commands/session-logs/format.d.ts.map +1 -0
- package/dist/cli/src/commands/session-logs/index.d.ts +18 -0
- package/dist/cli/src/commands/session-logs/index.d.ts.map +1 -0
- package/dist/cli/src/commands/session-logs/local-query.d.ts +19 -0
- package/dist/cli/src/commands/session-logs/local-query.d.ts.map +1 -0
- package/dist/cli/src/commands/session-logs/local-tail.d.ts +29 -0
- package/dist/cli/src/commands/session-logs/local-tail.d.ts.map +1 -0
- package/dist/cli/src/commands/session-logs/parse-time.d.ts +11 -0
- package/dist/cli/src/commands/session-logs/parse-time.d.ts.map +1 -0
- package/dist/cli/src/commands/session-logs/remote-query.d.ts +26 -0
- package/dist/cli/src/commands/session-logs/remote-query.d.ts.map +1 -0
- package/dist/cli/src/commands/session-logs/remote-tail.d.ts +22 -0
- package/dist/cli/src/commands/session-logs/remote-tail.d.ts.map +1 -0
- package/dist/cli/src/commands/session-logs/resolve-mode.d.ts +27 -0
- package/dist/cli/src/commands/session-logs/resolve-mode.d.ts.map +1 -0
- package/dist/cli/src/commands/session-logs/sqlite-row.d.ts +51 -0
- package/dist/cli/src/commands/session-logs/sqlite-row.d.ts.map +1 -0
- package/dist/cli/src/commands/session.d.ts +15 -0
- package/dist/cli/src/commands/session.d.ts.map +1 -0
- package/dist/cli/src/commands/show.d.ts +13 -0
- package/dist/cli/src/commands/show.d.ts.map +1 -0
- package/dist/cli/src/commands/source-sidecar.d.ts +6 -0
- package/dist/cli/src/commands/source-sidecar.d.ts.map +1 -0
- package/dist/cli/src/commands/source.d.ts +8 -0
- package/dist/cli/src/commands/source.d.ts.map +1 -0
- package/dist/cli/src/commands/store.d.ts +13 -0
- package/dist/cli/src/commands/store.d.ts.map +1 -0
- package/dist/cli/src/commands/tree.d.ts +12 -0
- package/dist/cli/src/commands/tree.d.ts.map +1 -0
- package/dist/cli/src/commands/update.d.ts +22 -0
- package/dist/cli/src/commands/update.d.ts.map +1 -0
- package/dist/cli/src/commands/validate.d.ts +17 -0
- package/dist/cli/src/commands/validate.d.ts.map +1 -0
- package/dist/cli/src/commands/verify.d.ts +13 -0
- package/dist/cli/src/commands/verify.d.ts.map +1 -0
- package/dist/cli/src/commands/why.d.ts +12 -0
- package/dist/cli/src/commands/why.d.ts.map +1 -0
- package/dist/cli/src/completion.d.ts +19 -0
- package/dist/cli/src/completion.d.ts.map +1 -0
- package/dist/cli/src/helpers.d.ts +54 -0
- package/dist/cli/src/helpers.d.ts.map +1 -0
- package/dist/cli/src/hooks/pre-commit-version.d.ts +10 -0
- package/dist/cli/src/hooks/pre-commit-version.d.ts.map +1 -0
- package/dist/cli/src/index.d.ts +8 -0
- package/dist/cli/src/index.d.ts.map +1 -0
- package/dist/cli/src/open-library.d.ts +101 -0
- package/dist/cli/src/open-library.d.ts.map +1 -0
- package/dist/cli/src/open-registry.d.ts +24 -0
- package/dist/cli/src/open-registry.d.ts.map +1 -0
- package/dist/cli/src/paths.d.ts +27 -0
- package/dist/cli/src/paths.d.ts.map +1 -0
- package/dist/cli/src/setup.d.ts +19 -0
- package/dist/cli/src/setup.d.ts.map +1 -0
- package/dist/cli/src/skill-walker.d.ts +31 -0
- package/dist/cli/src/skill-walker.d.ts.map +1 -0
- package/dist/cli/src/store-client.d.ts +55 -0
- package/dist/cli/src/store-client.d.ts.map +1 -0
- package/dist/client/index.js +4 -0
- package/dist/client/index.js.map +1 -0
- package/dist/client/src/client.d.ts +67 -0
- package/dist/client/src/client.d.ts.map +1 -0
- package/dist/client/src/index.d.ts +2 -0
- package/dist/client/src/index.d.ts.map +1 -0
- package/dist/connectors/config.js +14 -0
- package/dist/connectors/config.js.map +1 -0
- package/dist/connectors/index.js +20 -0
- package/dist/connectors/index.js.map +1 -0
- package/dist/connectors/rclone-config.js +4 -0
- package/dist/connectors/rclone-config.js.map +1 -0
- package/dist/connectors/rclone.js +4 -0
- package/dist/connectors/rclone.js.map +1 -0
- package/dist/connectors/src/adapters/base.d.ts +66 -0
- package/dist/connectors/src/adapters/base.d.ts.map +1 -0
- package/dist/connectors/src/cli.d.ts +16 -0
- package/dist/connectors/src/cli.d.ts.map +1 -0
- package/dist/connectors/src/config.d.ts +125 -0
- package/dist/connectors/src/config.d.ts.map +1 -0
- package/dist/connectors/src/connector-manager.d.ts +147 -0
- package/dist/connectors/src/connector-manager.d.ts.map +1 -0
- package/dist/connectors/src/connector-registry.d.ts +59 -0
- package/dist/connectors/src/connector-registry.d.ts.map +1 -0
- package/dist/connectors/src/connector-tools.d.ts +61 -0
- package/dist/connectors/src/connector-tools.d.ts.map +1 -0
- package/dist/connectors/src/connector-types.d.ts +220 -0
- package/dist/connectors/src/connector-types.d.ts.map +1 -0
- package/dist/connectors/src/credential-helper-script.d.ts +87 -0
- package/dist/connectors/src/credential-helper-script.d.ts.map +1 -0
- package/dist/connectors/src/drivers/base.d.ts +44 -0
- package/dist/connectors/src/drivers/base.d.ts.map +1 -0
- package/dist/connectors/src/index.d.ts +51 -0
- package/dist/connectors/src/index.d.ts.map +1 -0
- package/dist/connectors/src/log-buffer.d.ts +21 -0
- package/dist/connectors/src/log-buffer.d.ts.map +1 -0
- package/dist/connectors/src/managed-gitconfig.d.ts +122 -0
- package/dist/connectors/src/managed-gitconfig.d.ts.map +1 -0
- package/dist/connectors/src/mount-manager.d.ts +147 -0
- package/dist/connectors/src/mount-manager.d.ts.map +1 -0
- package/dist/connectors/src/mount-prompt.d.ts +13 -0
- package/dist/connectors/src/mount-prompt.d.ts.map +1 -0
- package/dist/connectors/src/mount-registry.d.ts +61 -0
- package/dist/connectors/src/mount-registry.d.ts.map +1 -0
- package/dist/connectors/src/mount-types.d.ts +222 -0
- package/dist/connectors/src/mount-types.d.ts.map +1 -0
- package/dist/connectors/src/npm-installer.d.ts +69 -0
- package/dist/connectors/src/npm-installer.d.ts.map +1 -0
- package/dist/connectors/src/port-pool.d.ts +25 -0
- package/dist/connectors/src/port-pool.d.ts.map +1 -0
- package/dist/connectors/src/rclone-config/index.d.ts +8 -0
- package/dist/connectors/src/rclone-config/index.d.ts.map +1 -0
- package/dist/connectors/src/rclone-config/onedrive.d.ts +47 -0
- package/dist/connectors/src/rclone-config/onedrive.d.ts.map +1 -0
- package/dist/connectors/src/rclone-config/webdav.d.ts +49 -0
- package/dist/connectors/src/rclone-config/webdav.d.ts.map +1 -0
- package/dist/connectors/src/rclone-process-manager.d.ts +104 -0
- package/dist/connectors/src/rclone-process-manager.d.ts.map +1 -0
- package/dist/connectors/src/secrets.d.ts +264 -0
- package/dist/connectors/src/secrets.d.ts.map +1 -0
- package/dist/connectors/src/shared-types.d.ts +171 -0
- package/dist/connectors/src/shared-types.d.ts.map +1 -0
- package/dist/connectors/src/watcher.d.ts +23 -0
- package/dist/connectors/src/watcher.d.ts.map +1 -0
- package/dist/connectors/src/worktree.d.ts +78 -0
- package/dist/connectors/src/worktree.d.ts.map +1 -0
- package/dist/connectors-7WS2KOSZ.js +5 -0
- package/dist/connectors-7WS2KOSZ.js.map +1 -0
- package/dist/core/discovery.js +4 -0
- package/dist/core/discovery.js.map +1 -0
- package/dist/core/driver-targets.js +4 -0
- package/dist/core/driver-targets.js.map +1 -0
- package/dist/core/framework.js +4 -0
- package/dist/core/framework.js.map +1 -0
- package/dist/core/index.js +13 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/logging.js +4 -0
- package/dist/core/logging.js.map +1 -0
- package/dist/core/manifest.js +5 -0
- package/dist/core/manifest.js.map +1 -0
- package/dist/core/models.js +4 -0
- package/dist/core/models.js.map +1 -0
- package/dist/core/runtime-assets.js +7 -0
- package/dist/core/runtime-assets.js.map +1 -0
- package/dist/core/src/discovery.d.ts +40 -0
- package/dist/core/src/discovery.d.ts.map +1 -0
- package/dist/core/src/driver-targets.d.ts +54 -0
- package/dist/core/src/driver-targets.d.ts.map +1 -0
- package/dist/core/src/framework.d.ts +46 -0
- package/dist/core/src/framework.d.ts.map +1 -0
- package/dist/core/src/index.d.ts +36 -0
- package/dist/core/src/index.d.ts.map +1 -0
- package/dist/core/src/lock.d.ts +69 -0
- package/dist/core/src/lock.d.ts.map +1 -0
- package/dist/core/src/logging/config.d.ts +17 -0
- package/dist/core/src/logging/config.d.ts.map +1 -0
- package/dist/core/src/logging/create-logger.d.ts +32 -0
- package/dist/core/src/logging/create-logger.d.ts.map +1 -0
- package/dist/core/src/logging/index.d.ts +16 -0
- package/dist/core/src/logging/index.d.ts.map +1 -0
- package/dist/core/src/logging/log-store.d.ts +74 -0
- package/dist/core/src/logging/log-store.d.ts.map +1 -0
- package/dist/core/src/logging/sanitize.d.ts +4 -0
- package/dist/core/src/logging/sanitize.d.ts.map +1 -0
- package/dist/core/src/logging/sinks/no-op-sink.d.ts +9 -0
- package/dist/core/src/logging/sinks/no-op-sink.d.ts.map +1 -0
- package/dist/core/src/logging/sinks/on-log-bridge-sink.d.ts +16 -0
- package/dist/core/src/logging/sinks/on-log-bridge-sink.d.ts.map +1 -0
- package/dist/core/src/logging/sinks/sqlite-sink.d.ts +18 -0
- package/dist/core/src/logging/sinks/sqlite-sink.d.ts.map +1 -0
- package/dist/core/src/logging/sinks/stdout-sink.d.ts +24 -0
- package/dist/core/src/logging/sinks/stdout-sink.d.ts.map +1 -0
- package/dist/core/src/logging/sinks/types.d.ts +5 -0
- package/dist/core/src/logging/sinks/types.d.ts.map +1 -0
- package/dist/core/src/logging/sinks/ws-log-sink.d.ts +24 -0
- package/dist/core/src/logging/sinks/ws-log-sink.d.ts.map +1 -0
- package/dist/core/src/manifest.d.ts +228 -0
- package/dist/core/src/manifest.d.ts.map +1 -0
- package/dist/core/src/models.d.ts +304 -0
- package/dist/core/src/models.d.ts.map +1 -0
- package/dist/core/src/patch.d.ts +59 -0
- package/dist/core/src/patch.d.ts.map +1 -0
- package/dist/core/src/repo-manager.d.ts +232 -0
- package/dist/core/src/repo-manager.d.ts.map +1 -0
- package/dist/core/src/runtime-assets.d.ts +125 -0
- package/dist/core/src/runtime-assets.d.ts.map +1 -0
- package/dist/core/src/settings.d.ts +188 -0
- package/dist/core/src/settings.d.ts.map +1 -0
- package/dist/core/src/store.d.ts +48 -0
- package/dist/core/src/store.d.ts.map +1 -0
- package/dist/core/src/workspace-config.d.ts +744 -0
- package/dist/core/src/workspace-config.d.ts.map +1 -0
- package/dist/core/src/workspace-yaml-editor.d.ts +74 -0
- package/dist/core/src/workspace-yaml-editor.d.ts.map +1 -0
- package/dist/core/store.js +5 -0
- package/dist/core/store.js.map +1 -0
- package/dist/core/workspace-config.js +6 -0
- package/dist/core/workspace-config.js.map +1 -0
- package/dist/discovery/index.js +8 -0
- package/dist/discovery/index.js.map +1 -0
- package/dist/discovery/src/asset-kind-registry.d.ts +35 -0
- package/dist/discovery/src/asset-kind-registry.d.ts.map +1 -0
- package/dist/discovery/src/builtin-providers.d.ts +37 -0
- package/dist/discovery/src/builtin-providers.d.ts.map +1 -0
- package/dist/discovery/src/discover-manifest.d.ts +41 -0
- package/dist/discovery/src/discover-manifest.d.ts.map +1 -0
- package/dist/discovery/src/discover.d.ts +92 -0
- package/dist/discovery/src/discover.d.ts.map +1 -0
- package/dist/discovery/src/hash.d.ts +45 -0
- package/dist/discovery/src/hash.d.ts.map +1 -0
- package/dist/discovery/src/index.d.ts +19 -0
- package/dist/discovery/src/index.d.ts.map +1 -0
- package/dist/discovery/src/requires-graph.d.ts +70 -0
- package/dist/discovery/src/requires-graph.d.ts.map +1 -0
- package/dist/discovery/src/source-config.d.ts +456 -0
- package/dist/discovery/src/source-config.d.ts.map +1 -0
- package/dist/discovery/src/tree-entries.d.ts +98 -0
- package/dist/discovery/src/tree-entries.d.ts.map +1 -0
- package/dist/flows-ZULSVHX5.js +7 -0
- package/dist/flows-ZULSVHX5.js.map +1 -0
- package/dist/helpers-I3SREIC3.js +4 -0
- package/dist/helpers-I3SREIC3.js.map +1 -0
- package/dist/library/index.js +9 -0
- package/dist/library/index.js.map +1 -0
- package/dist/library/src/config.d.ts +238 -0
- package/dist/library/src/config.d.ts.map +1 -0
- package/dist/library/src/index.d.ts +32 -0
- package/dist/library/src/index.d.ts.map +1 -0
- package/dist/library/src/knowledge/index.d.ts +9 -0
- package/dist/library/src/knowledge/index.d.ts.map +1 -0
- package/dist/library/src/knowledge/knowledge-kind-provider.d.ts +16 -0
- package/dist/library/src/knowledge/knowledge-kind-provider.d.ts.map +1 -0
- package/dist/library/src/knowledge/knowledge-manifest.d.ts +52 -0
- package/dist/library/src/knowledge/knowledge-manifest.d.ts.map +1 -0
- package/dist/library/src/library.d.ts +344 -0
- package/dist/library/src/library.d.ts.map +1 -0
- package/dist/library/src/local/db.d.ts +29 -0
- package/dist/library/src/local/db.d.ts.map +1 -0
- package/dist/library/src/local/library.d.ts +85 -0
- package/dist/library/src/local/library.d.ts.map +1 -0
- package/dist/library/src/local/local-catalog-source.d.ts +66 -0
- package/dist/library/src/local/local-catalog-source.d.ts.map +1 -0
- package/dist/library/src/local/schema.d.ts +783 -0
- package/dist/library/src/local/schema.d.ts.map +1 -0
- package/dist/library/src/local/sidecar-git.d.ts +104 -0
- package/dist/library/src/local/sidecar-git.d.ts.map +1 -0
- package/dist/library/src/local/sidecar-paths.d.ts +87 -0
- package/dist/library/src/local/sidecar-paths.d.ts.map +1 -0
- package/dist/library/src/local/user-library-manager.d.ts +41 -0
- package/dist/library/src/local/user-library-manager.d.ts.map +1 -0
- package/dist/library/src/migration.d.ts +38 -0
- package/dist/library/src/migration.d.ts.map +1 -0
- package/dist/library/src/pin-resolver.d.ts +45 -0
- package/dist/library/src/pin-resolver.d.ts.map +1 -0
- package/dist/library/src/preset/apply.d.ts +105 -0
- package/dist/library/src/preset/apply.d.ts.map +1 -0
- package/dist/library/src/preset/index.d.ts +13 -0
- package/dist/library/src/preset/index.d.ts.map +1 -0
- package/dist/library/src/preset/interpolate.d.ts +109 -0
- package/dist/library/src/preset/interpolate.d.ts.map +1 -0
- package/dist/library/src/preset/parse.d.ts +65 -0
- package/dist/library/src/preset/parse.d.ts.map +1 -0
- package/dist/library/src/preset/placeholders.d.ts +103 -0
- package/dist/library/src/preset/placeholders.d.ts.map +1 -0
- package/dist/library/src/preset/resolve-item.d.ts +119 -0
- package/dist/library/src/preset/resolve-item.d.ts.map +1 -0
- package/dist/library/src/preset/upgrade.d.ts +96 -0
- package/dist/library/src/preset/upgrade.d.ts.map +1 -0
- package/dist/library/src/remote/cache.d.ts +150 -0
- package/dist/library/src/remote/cache.d.ts.map +1 -0
- package/dist/library/src/remote/index.d.ts +13 -0
- package/dist/library/src/remote/index.d.ts.map +1 -0
- package/dist/library/src/remote/remote-catalog-source.d.ts +199 -0
- package/dist/library/src/remote/remote-catalog-source.d.ts.map +1 -0
- package/dist/library/src/remote/rest-catalog-source.d.ts +135 -0
- package/dist/library/src/remote/rest-catalog-source.d.ts.map +1 -0
- package/dist/library/src/sync/driver.d.ts +19 -0
- package/dist/library/src/sync/driver.d.ts.map +1 -0
- package/dist/library/src/sync/git-driver.d.ts +21 -0
- package/dist/library/src/sync/git-driver.d.ts.map +1 -0
- package/dist/library/src/sync/local-driver.d.ts +19 -0
- package/dist/library/src/sync/local-driver.d.ts.map +1 -0
- package/dist/library/src/sync/manifest-writeback.d.ts +23 -0
- package/dist/library/src/sync/manifest-writeback.d.ts.map +1 -0
- package/dist/library/src/sync/store-driver.d.ts +21 -0
- package/dist/library/src/sync/store-driver.d.ts.map +1 -0
- package/dist/library/src/user-library.d.ts +149 -0
- package/dist/library/src/user-library.d.ts.map +1 -0
- package/dist/library/src/workspace-config.d.ts +451 -0
- package/dist/library/src/workspace-config.d.ts.map +1 -0
- package/dist/mounts-PQLFYD2C.js +5 -0
- package/dist/mounts-PQLFYD2C.js.map +1 -0
- package/dist/open-library-N5T5HRTS.js +12 -0
- package/dist/open-library-N5T5HRTS.js.map +1 -0
- package/dist/paths-FKKGS6BA.js +4 -0
- package/dist/paths-FKKGS6BA.js.map +1 -0
- package/dist/plugins/index.js +4 -0
- package/dist/plugins/index.js.map +1 -0
- package/dist/plugins/src/asset-kind-provider.d.ts +99 -0
- package/dist/plugins/src/asset-kind-provider.d.ts.map +1 -0
- package/dist/plugins/src/asset-kind-registry.d.ts +106 -0
- package/dist/plugins/src/asset-kind-registry.d.ts.map +1 -0
- package/dist/plugins/src/catalog-source.d.ts +87 -0
- package/dist/plugins/src/catalog-source.d.ts.map +1 -0
- package/dist/plugins/src/index.d.ts +8 -0
- package/dist/plugins/src/index.d.ts.map +1 -0
- package/dist/plugins/src/secrets-provider.d.ts +143 -0
- package/dist/plugins/src/secrets-provider.d.ts.map +1 -0
- package/dist/provider-QXKEDXWJ.js +174 -0
- package/dist/provider-QXKEDXWJ.js.map +1 -0
- package/dist/resolver/index.js +4 -0
- package/dist/resolver/index.js.map +1 -0
- package/dist/resolver/src/index.d.ts +6 -0
- package/dist/resolver/src/index.d.ts.map +1 -0
- package/dist/resolver/src/parser.d.ts +47 -0
- package/dist/resolver/src/parser.d.ts.map +1 -0
- package/dist/resolver/src/preamble.d.ts +32 -0
- package/dist/resolver/src/preamble.d.ts.map +1 -0
- package/dist/resolver/src/types.d.ts +279 -0
- package/dist/resolver/src/types.d.ts.map +1 -0
- package/dist/resolver/src/validator.d.ts +55 -0
- package/dist/resolver/src/validator.d.ts.map +1 -0
- package/dist/resolver/src/version.d.ts +50 -0
- package/dist/resolver/src/version.d.ts.map +1 -0
- package/dist/runner/index.js +34 -0
- package/dist/runner/index.js.map +1 -0
- package/dist/runner/src/agent.d.ts +52 -0
- package/dist/runner/src/agent.d.ts.map +1 -0
- package/dist/runner/src/builtin-capabilities.d.ts +23 -0
- package/dist/runner/src/builtin-capabilities.d.ts.map +1 -0
- package/dist/runner/src/capability-registry.d.ts +212 -0
- package/dist/runner/src/capability-registry.d.ts.map +1 -0
- package/dist/runner/src/capability-roundtrip.d.ts +90 -0
- package/dist/runner/src/capability-roundtrip.d.ts.map +1 -0
- package/dist/runner/src/compaction/index.d.ts +6 -0
- package/dist/runner/src/compaction/index.d.ts.map +1 -0
- package/dist/runner/src/compaction/orchestrator.d.ts +99 -0
- package/dist/runner/src/compaction/orchestrator.d.ts.map +1 -0
- package/dist/runner/src/compaction/prompt.d.ts +15 -0
- package/dist/runner/src/compaction/prompt.d.ts.map +1 -0
- package/dist/runner/src/compaction/strategy.d.ts +41 -0
- package/dist/runner/src/compaction/strategy.d.ts.map +1 -0
- package/dist/runner/src/composition/bootstrap.d.ts +73 -0
- package/dist/runner/src/composition/bootstrap.d.ts.map +1 -0
- package/dist/runner/src/composition/compile.d.ts +84 -0
- package/dist/runner/src/composition/compile.d.ts.map +1 -0
- package/dist/runner/src/composition/index.d.ts +14 -0
- package/dist/runner/src/composition/index.d.ts.map +1 -0
- package/dist/runner/src/composition/resolve.d.ts +53 -0
- package/dist/runner/src/composition/resolve.d.ts.map +1 -0
- package/dist/runner/src/composition/types.d.ts +103 -0
- package/dist/runner/src/composition/types.d.ts.map +1 -0
- package/dist/runner/src/config.d.ts +11 -0
- package/dist/runner/src/config.d.ts.map +1 -0
- package/dist/runner/src/context.d.ts +16 -0
- package/dist/runner/src/context.d.ts.map +1 -0
- package/dist/runner/src/define-capability.d.ts +153 -0
- package/dist/runner/src/define-capability.d.ts.map +1 -0
- package/dist/runner/src/environment.d.ts +21 -0
- package/dist/runner/src/environment.d.ts.map +1 -0
- package/dist/runner/src/file-changed-rewriter.d.ts +35 -0
- package/dist/runner/src/file-changed-rewriter.d.ts.map +1 -0
- package/dist/runner/src/index.d.ts +22 -0
- package/dist/runner/src/index.d.ts.map +1 -0
- package/dist/runner/src/logging-bootstrap.d.ts +92 -0
- package/dist/runner/src/logging-bootstrap.d.ts.map +1 -0
- package/dist/runner/src/manifest.d.ts +33 -0
- package/dist/runner/src/manifest.d.ts.map +1 -0
- package/dist/runner/src/markdown-stream.d.ts +22 -0
- package/dist/runner/src/markdown-stream.d.ts.map +1 -0
- package/dist/runner/src/mixin-resolver.d.ts +61 -0
- package/dist/runner/src/mixin-resolver.d.ts.map +1 -0
- package/dist/runner/src/prompt-assembly.d.ts +42 -0
- package/dist/runner/src/prompt-assembly.d.ts.map +1 -0
- package/dist/runner/src/recipe-resolver.d.ts +18 -0
- package/dist/runner/src/recipe-resolver.d.ts.map +1 -0
- package/dist/runner/src/recipe-templating.d.ts +20 -0
- package/dist/runner/src/recipe-templating.d.ts.map +1 -0
- package/dist/runner/src/refresh-flag-dispatcher.d.ts +54 -0
- package/dist/runner/src/refresh-flag-dispatcher.d.ts.map +1 -0
- package/dist/runner/src/resource-handler.d.ts +22 -0
- package/dist/runner/src/resource-handler.d.ts.map +1 -0
- package/dist/runner/src/resources.d.ts +102 -0
- package/dist/runner/src/resources.d.ts.map +1 -0
- package/dist/runner/src/runner-capabilities.d.ts +120 -0
- package/dist/runner/src/runner-capabilities.d.ts.map +1 -0
- package/dist/runner/src/serve-credentials.d.ts +50 -0
- package/dist/runner/src/serve-credentials.d.ts.map +1 -0
- package/dist/runner/src/serve.d.ts +154 -0
- package/dist/runner/src/serve.d.ts.map +1 -0
- package/dist/runner/src/session-builder.d.ts +213 -0
- package/dist/runner/src/session-builder.d.ts.map +1 -0
- package/dist/runner/src/session-stimulus.d.ts +79 -0
- package/dist/runner/src/session-stimulus.d.ts.map +1 -0
- package/dist/runner/src/session.d.ts +139 -0
- package/dist/runner/src/session.d.ts.map +1 -0
- package/dist/runner/src/workspace-migration.d.ts +54 -0
- package/dist/runner/src/workspace-migration.d.ts.map +1 -0
- package/dist/sdk/asset-manager.js +22 -0
- package/dist/sdk/asset-manager.js.map +1 -0
- package/dist/sdk/bridge.js +9 -0
- package/dist/sdk/bridge.js.map +1 -0
- package/dist/sdk/client.js +4 -0
- package/dist/sdk/client.js.map +1 -0
- package/dist/sdk/core.js +13 -0
- package/dist/sdk/core.js.map +1 -0
- package/dist/sdk/flow.js +4 -0
- package/dist/sdk/flow.js.map +1 -0
- package/dist/sdk/index.js +339 -0
- package/dist/sdk/index.js.map +1 -0
- package/dist/sdk/resolver.js +4 -0
- package/dist/sdk/resolver.js.map +1 -0
- package/dist/sdk/runner.js +34 -0
- package/dist/sdk/runner.js.map +1 -0
- package/dist/sdk/session.js +5 -0
- package/dist/sdk/session.js.map +1 -0
- package/dist/sdk/src/agent-session.d.ts +67 -0
- package/dist/sdk/src/agent-session.d.ts.map +1 -0
- package/dist/sdk/src/asset-manager/index.d.ts +2 -0
- package/dist/sdk/src/asset-manager/index.d.ts.map +1 -0
- package/dist/sdk/src/bridge/index.d.ts +2 -0
- package/dist/sdk/src/bridge/index.d.ts.map +1 -0
- package/dist/sdk/src/client/index.d.ts +2 -0
- package/dist/sdk/src/client/index.d.ts.map +1 -0
- package/dist/sdk/src/core/index.d.ts +2 -0
- package/dist/sdk/src/core/index.d.ts.map +1 -0
- package/dist/sdk/src/factory.d.ts +19 -0
- package/dist/sdk/src/factory.d.ts.map +1 -0
- package/dist/sdk/src/flow/index.d.ts +2 -0
- package/dist/sdk/src/flow/index.d.ts.map +1 -0
- package/dist/sdk/src/index.d.ts +7 -0
- package/dist/sdk/src/index.d.ts.map +1 -0
- package/dist/sdk/src/local-runtime.d.ts +51 -0
- package/dist/sdk/src/local-runtime.d.ts.map +1 -0
- package/dist/sdk/src/resolver/index.d.ts +2 -0
- package/dist/sdk/src/resolver/index.d.ts.map +1 -0
- package/dist/sdk/src/runner/index.d.ts +2 -0
- package/dist/sdk/src/runner/index.d.ts.map +1 -0
- package/dist/sdk/src/session/index.d.ts +2 -0
- package/dist/sdk/src/session/index.d.ts.map +1 -0
- package/dist/sdk/src/store/index.d.ts +2 -0
- package/dist/sdk/src/store/index.d.ts.map +1 -0
- package/dist/sdk/src/telemetry/index.d.ts +2 -0
- package/dist/sdk/src/telemetry/index.d.ts.map +1 -0
- package/dist/sdk/src/transport/index.d.ts +2 -0
- package/dist/sdk/src/transport/index.d.ts.map +1 -0
- package/dist/sdk/src/transport/ws/client.d.ts +2 -0
- package/dist/sdk/src/transport/ws/client.d.ts.map +1 -0
- package/dist/sdk/src/transport/ws/index.d.ts +2 -0
- package/dist/sdk/src/transport/ws/index.d.ts.map +1 -0
- package/dist/sdk/src/transport/ws/server.d.ts +2 -0
- package/dist/sdk/src/transport/ws/server.d.ts.map +1 -0
- package/dist/sdk/src/transport.d.ts +31 -0
- package/dist/sdk/src/transport.d.ts.map +1 -0
- package/dist/sdk/src/types/index.d.ts +2 -0
- package/dist/sdk/src/types/index.d.ts.map +1 -0
- package/dist/sdk/src/types.d.ts +140 -0
- package/dist/sdk/src/types.d.ts.map +1 -0
- package/dist/sdk/src/workspace.d.ts +32 -0
- package/dist/sdk/src/workspace.d.ts.map +1 -0
- package/dist/sdk/store.js +4 -0
- package/dist/sdk/store.js.map +1 -0
- package/dist/sdk/telemetry.js +4 -0
- package/dist/sdk/telemetry.js.map +1 -0
- package/dist/sdk/transport/ws/client.js +4 -0
- package/dist/sdk/transport/ws/client.js.map +1 -0
- package/dist/sdk/transport/ws/server.js +4 -0
- package/dist/sdk/transport/ws/server.js.map +1 -0
- package/dist/sdk/transport/ws.js +6 -0
- package/dist/sdk/transport/ws.js.map +1 -0
- package/dist/sdk/transport.js +7 -0
- package/dist/sdk/transport.js.map +1 -0
- package/dist/sdk/types.js +4 -0
- package/dist/sdk/types.js.map +1 -0
- package/dist/secrets/index.js +5 -0
- package/dist/secrets/index.js.map +1 -0
- package/dist/secrets/src/index.d.ts +12 -0
- package/dist/secrets/src/index.d.ts.map +1 -0
- package/dist/secrets/src/lifecycle.d.ts +51 -0
- package/dist/secrets/src/lifecycle.d.ts.map +1 -0
- package/dist/secrets/src/providers/env.d.ts +26 -0
- package/dist/secrets/src/providers/env.d.ts.map +1 -0
- package/dist/secrets/src/providers/local.d.ts +63 -0
- package/dist/secrets/src/providers/local.d.ts.map +1 -0
- package/dist/secrets/src/router.d.ts +91 -0
- package/dist/secrets/src/router.d.ts.map +1 -0
- package/dist/session/index.js +5 -0
- package/dist/session/index.js.map +1 -0
- package/dist/session/src/dispatcher.d.ts +246 -0
- package/dist/session/src/dispatcher.d.ts.map +1 -0
- package/dist/session/src/index.d.ts +6 -0
- package/dist/session/src/index.d.ts.map +1 -0
- package/dist/session/src/mentions.d.ts +80 -0
- package/dist/session/src/mentions.d.ts.map +1 -0
- package/dist/session/src/types.d.ts +109 -0
- package/dist/session/src/types.d.ts.map +1 -0
- package/dist/sessions-2IUX4P3P.js +5 -0
- package/dist/sessions-2IUX4P3P.js.map +1 -0
- package/dist/setup-BMTC562F.js +488 -0
- package/dist/setup-BMTC562F.js.map +1 -0
- package/dist/skills-CRL3VJNN.js +7 -0
- package/dist/skills-CRL3VJNN.js.map +1 -0
- package/dist/store/index.js +4 -0
- package/dist/store/index.js.map +1 -0
- package/dist/store/react.js +40 -0
- package/dist/store/react.js.map +1 -0
- package/dist/store/src/index.d.ts +4 -0
- package/dist/store/src/index.d.ts.map +1 -0
- package/dist/store/src/react.d.ts +75 -0
- package/dist/store/src/react.d.ts.map +1 -0
- package/dist/store/src/resource-client.d.ts +128 -0
- package/dist/store/src/resource-client.d.ts.map +1 -0
- package/dist/store/src/store.d.ts +172 -0
- package/dist/store/src/store.d.ts.map +1 -0
- package/dist/store/src/types.d.ts +248 -0
- package/dist/store/src/types.d.ts.map +1 -0
- package/dist/store/src/vue.d.ts +52 -0
- package/dist/store/src/vue.d.ts.map +1 -0
- package/dist/store/vue.js +23 -0
- package/dist/store/vue.js.map +1 -0
- package/dist/store-client-X7Y7D5QX.js +14 -0
- package/dist/store-client-X7Y7D5QX.js.map +1 -0
- package/dist/telemetry/index.js +4 -0
- package/dist/telemetry/index.js.map +1 -0
- package/dist/telemetry/src/config.d.ts +28 -0
- package/dist/telemetry/src/config.d.ts.map +1 -0
- package/dist/telemetry/src/context.d.ts +36 -0
- package/dist/telemetry/src/context.d.ts.map +1 -0
- package/dist/telemetry/src/index.d.ts +5 -0
- package/dist/telemetry/src/index.d.ts.map +1 -0
- package/dist/telemetry/src/noop.d.ts +25 -0
- package/dist/telemetry/src/noop.d.ts.map +1 -0
- package/dist/telemetry/src/otel/exporter.d.ts +17 -0
- package/dist/telemetry/src/otel/exporter.d.ts.map +1 -0
- package/dist/telemetry/src/otel/gen-ai.d.ts +17 -0
- package/dist/telemetry/src/otel/gen-ai.d.ts.map +1 -0
- package/dist/telemetry/src/otel/provider.d.ts +34 -0
- package/dist/telemetry/src/otel/provider.d.ts.map +1 -0
- package/dist/telemetry/src/types.d.ts +182 -0
- package/dist/telemetry/src/types.d.ts.map +1 -0
- package/dist/transport/index.js +7 -0
- package/dist/transport/index.js.map +1 -0
- package/dist/transport/src/index.d.ts +2 -0
- package/dist/transport/src/index.d.ts.map +1 -0
- package/dist/transport/src/ws/client.d.ts +72 -0
- package/dist/transport/src/ws/client.d.ts.map +1 -0
- package/dist/transport/src/ws/index.d.ts +3 -0
- package/dist/transport/src/ws/index.d.ts.map +1 -0
- package/dist/transport/src/ws/server.d.ts +67 -0
- package/dist/transport/src/ws/server.d.ts.map +1 -0
- package/dist/transport/ws/client.js +4 -0
- package/dist/transport/ws/client.js.map +1 -0
- package/dist/transport/ws/server.js +4 -0
- package/dist/transport/ws/server.js.map +1 -0
- package/dist/transport/ws.js +6 -0
- package/dist/transport/ws.js.map +1 -0
- package/dist/tui/index.js +471 -0
- package/dist/tui/index.js.map +1 -0
- package/dist/tui/src/index.d.ts +4 -0
- package/dist/tui/src/index.d.ts.map +1 -0
- package/dist/tui/src/repl-renderer.d.ts +31 -0
- package/dist/tui/src/repl-renderer.d.ts.map +1 -0
- package/dist/tui/src/repl-session.d.ts +69 -0
- package/dist/tui/src/repl-session.d.ts.map +1 -0
- package/dist/tui/src/repl.d.ts +49 -0
- package/dist/tui/src/repl.d.ts.map +1 -0
- package/dist/tui/src/telemetry.d.ts +88 -0
- package/dist/tui/src/telemetry.d.ts.map +1 -0
- package/dist/types/index.js +4 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/manifests.js +4 -0
- package/dist/types/manifests.js.map +1 -0
- package/dist/types/src/capabilities.d.ts +398 -0
- package/dist/types/src/capabilities.d.ts.map +1 -0
- package/dist/types/src/envelope.d.ts +120 -0
- package/dist/types/src/envelope.d.ts.map +1 -0
- package/dist/types/src/events.d.ts +1075 -0
- package/dist/types/src/events.d.ts.map +1 -0
- package/dist/types/src/flow.d.ts +312 -0
- package/dist/types/src/flow.d.ts.map +1 -0
- package/dist/types/src/index.d.ts +57 -0
- package/dist/types/src/index.d.ts.map +1 -0
- package/dist/types/src/lifecycle.d.ts +269 -0
- package/dist/types/src/lifecycle.d.ts.map +1 -0
- package/dist/types/src/logging.d.ts +161 -0
- package/dist/types/src/logging.d.ts.map +1 -0
- package/dist/types/src/manifests/_shared.d.ts +162 -0
- package/dist/types/src/manifests/_shared.d.ts.map +1 -0
- package/dist/types/src/manifests/agent.d.ts +343 -0
- package/dist/types/src/manifests/agent.d.ts.map +1 -0
- package/dist/types/src/manifests/connector.d.ts +126 -0
- package/dist/types/src/manifests/connector.d.ts.map +1 -0
- package/dist/types/src/manifests/contract.d.ts +90 -0
- package/dist/types/src/manifests/contract.d.ts.map +1 -0
- package/dist/types/src/manifests/index.d.ts +40 -0
- package/dist/types/src/manifests/index.d.ts.map +1 -0
- package/dist/types/src/manifests/mcp-server.d.ts +42 -0
- package/dist/types/src/manifests/mcp-server.d.ts.map +1 -0
- package/dist/types/src/manifests/mount.d.ts +93 -0
- package/dist/types/src/manifests/mount.d.ts.map +1 -0
- package/dist/types/src/manifests/persona.d.ts +90 -0
- package/dist/types/src/manifests/persona.d.ts.map +1 -0
- package/dist/types/src/manifests/preset.d.ts +704 -0
- package/dist/types/src/manifests/preset.d.ts.map +1 -0
- package/dist/types/src/manifests/prompt.d.ts +90 -0
- package/dist/types/src/manifests/prompt.d.ts.map +1 -0
- package/dist/types/src/manifests/ruleset.d.ts +90 -0
- package/dist/types/src/manifests/ruleset.d.ts.map +1 -0
- package/dist/types/src/manifests/skill.d.ts +2391 -0
- package/dist/types/src/manifests/skill.d.ts.map +1 -0
- package/dist/types/src/mentions.d.ts +49 -0
- package/dist/types/src/mentions.d.ts.map +1 -0
- package/dist/types/src/messaging.d.ts +105 -0
- package/dist/types/src/messaging.d.ts.map +1 -0
- package/dist/types/src/protocol.d.ts +201 -0
- package/dist/types/src/protocol.d.ts.map +1 -0
- package/dist/types/src/reactions.d.ts +34 -0
- package/dist/types/src/reactions.d.ts.map +1 -0
- package/dist/types/src/runtime.d.ts +219 -0
- package/dist/types/src/runtime.d.ts.map +1 -0
- package/dist/types/src/transport.d.ts +64 -0
- package/dist/types/src/transport.d.ts.map +1 -0
- package/dist/types/src/version.d.ts +129 -0
- package/dist/types/src/version.d.ts.map +1 -0
- package/dist/validator-764EQNM3.js +5 -0
- package/dist/validator-764EQNM3.js.map +1 -0
- package/dist/workspace-plugin/adapters/mcp.js +259 -0
- package/dist/workspace-plugin/adapters/mcp.js.map +1 -0
- package/dist/workspace-plugin/adapters/omp.js +251 -0
- package/dist/workspace-plugin/adapters/omp.js.map +1 -0
- package/dist/workspace-plugin/index.js +6 -0
- package/dist/workspace-plugin/index.js.map +1 -0
- package/dist/workspace-plugin/src/adapters/claude-code.d.ts +17 -0
- package/dist/workspace-plugin/src/adapters/claude-code.d.ts.map +1 -0
- package/dist/workspace-plugin/src/adapters/mcp.d.ts +78 -0
- package/dist/workspace-plugin/src/adapters/mcp.d.ts.map +1 -0
- package/dist/workspace-plugin/src/adapters/omp.d.ts +60 -0
- package/dist/workspace-plugin/src/adapters/omp.d.ts.map +1 -0
- package/dist/workspace-plugin/src/index.d.ts +8 -0
- package/dist/workspace-plugin/src/index.d.ts.map +1 -0
- package/dist/workspace-plugin/src/plugin.d.ts +83 -0
- package/dist/workspace-plugin/src/plugin.d.ts.map +1 -0
- package/dist/workspace-plugin/src/store.d.ts +36 -0
- package/dist/workspace-plugin/src/store.d.ts.map +1 -0
- package/dist/workspace-plugin/src/tools/connectors.d.ts +94 -0
- package/dist/workspace-plugin/src/tools/connectors.d.ts.map +1 -0
- package/dist/workspace-plugin/src/tools/flows.d.ts +54 -0
- package/dist/workspace-plugin/src/tools/flows.d.ts.map +1 -0
- package/dist/workspace-plugin/src/tools/mounts.d.ts +51 -0
- package/dist/workspace-plugin/src/tools/mounts.d.ts.map +1 -0
- package/dist/workspace-plugin/src/tools/sessions.d.ts +35 -0
- package/dist/workspace-plugin/src/tools/sessions.d.ts.map +1 -0
- package/dist/workspace-plugin/src/tools/skills.d.ts +75 -0
- package/dist/workspace-plugin/src/tools/skills.d.ts.map +1 -0
- package/dist/workspace-plugin/src/tools/validator.d.ts +64 -0
- package/dist/workspace-plugin/src/tools/validator.d.ts.map +1 -0
- package/dist/workspace-plugin/src/types.d.ts +73 -0
- package/dist/workspace-plugin/src/types.d.ts.map +1 -0
- package/dist/workspace-plugin/src/utils/ai-assets.d.ts +16 -0
- package/dist/workspace-plugin/src/utils/ai-assets.d.ts.map +1 -0
- package/dist/workspace-plugin/src/utils/project-dir.d.ts +23 -0
- package/dist/workspace-plugin/src/utils/project-dir.d.ts.map +1 -0
- package/package.json +646 -0
|
@@ -0,0 +1,1517 @@
|
|
|
1
|
+
import { AssetKindRegistryFrozenError, AssetKindConflictError, AssetKindPatternConflictError, AssetKindPathAmbiguityError } from './chunk-OKRUTSG7.js';
|
|
2
|
+
import { parseFrontmatter } from './chunk-BVHFSUFM.js';
|
|
3
|
+
import { validatePersona, validateRuleset, validateSkill, validateAgent, validateConnector, validateMount, validateMcpServer, validateContract, validatePrompt, validatePreset } from './chunk-Z3RER6YZ.js';
|
|
4
|
+
import * as fs from 'fs';
|
|
5
|
+
import * as path from 'path';
|
|
6
|
+
import * as z from 'zod';
|
|
7
|
+
import * as yaml from 'js-yaml';
|
|
8
|
+
import * as crypto from 'crypto';
|
|
9
|
+
|
|
10
|
+
// discovery/src/asset-kind-registry.ts
|
|
11
|
+
var AssetKindRegistry = class {
|
|
12
|
+
providers = /* @__PURE__ */ new Map();
|
|
13
|
+
patternOwnership = /* @__PURE__ */ new Map();
|
|
14
|
+
// pattern -> kind
|
|
15
|
+
_frozen = false;
|
|
16
|
+
get frozen() {
|
|
17
|
+
return this._frozen;
|
|
18
|
+
}
|
|
19
|
+
// -------------------------------------------------------------------------
|
|
20
|
+
// Registration (open state only)
|
|
21
|
+
// -------------------------------------------------------------------------
|
|
22
|
+
register(provider) {
|
|
23
|
+
if (this._frozen) {
|
|
24
|
+
throw new AssetKindRegistryFrozenError();
|
|
25
|
+
}
|
|
26
|
+
if (this.providers.has(provider.kind)) {
|
|
27
|
+
throw new AssetKindConflictError(provider.kind);
|
|
28
|
+
}
|
|
29
|
+
for (const pattern of provider.discoveryPatterns) {
|
|
30
|
+
const existingOwner = this.patternOwnership.get(pattern);
|
|
31
|
+
if (existingOwner) {
|
|
32
|
+
throw new AssetKindPatternConflictError(provider.kind, existingOwner, pattern);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
this.providers.set(provider.kind, provider);
|
|
36
|
+
for (const pattern of provider.discoveryPatterns) {
|
|
37
|
+
this.patternOwnership.set(pattern, provider.kind);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
// -------------------------------------------------------------------------
|
|
41
|
+
// Freeze
|
|
42
|
+
// -------------------------------------------------------------------------
|
|
43
|
+
freeze() {
|
|
44
|
+
this._frozen = true;
|
|
45
|
+
}
|
|
46
|
+
// -------------------------------------------------------------------------
|
|
47
|
+
// Read operations (auto-freeze)
|
|
48
|
+
// -------------------------------------------------------------------------
|
|
49
|
+
getProvider(kind) {
|
|
50
|
+
this.autoFreeze();
|
|
51
|
+
return this.providers.get(kind);
|
|
52
|
+
}
|
|
53
|
+
getAllProviders() {
|
|
54
|
+
this.autoFreeze();
|
|
55
|
+
return [...this.providers.values()];
|
|
56
|
+
}
|
|
57
|
+
getAllKinds() {
|
|
58
|
+
this.autoFreeze();
|
|
59
|
+
return [...this.providers.keys()];
|
|
60
|
+
}
|
|
61
|
+
resolveKind(relativePath) {
|
|
62
|
+
this.autoFreeze();
|
|
63
|
+
const matches = [];
|
|
64
|
+
for (const provider of this.providers.values()) {
|
|
65
|
+
if (provider.matchesPath(relativePath)) {
|
|
66
|
+
matches.push(provider.kind);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
if (matches.length === 0) return void 0;
|
|
70
|
+
if (matches.length === 1) return matches[0];
|
|
71
|
+
throw new AssetKindPathAmbiguityError(relativePath, matches);
|
|
72
|
+
}
|
|
73
|
+
// -------------------------------------------------------------------------
|
|
74
|
+
// Convenience delegates
|
|
75
|
+
// -------------------------------------------------------------------------
|
|
76
|
+
validateManifest(kind, data) {
|
|
77
|
+
this.autoFreeze();
|
|
78
|
+
const provider = this.providers.get(kind);
|
|
79
|
+
if (!provider) {
|
|
80
|
+
return {
|
|
81
|
+
ok: false,
|
|
82
|
+
errors: [
|
|
83
|
+
{
|
|
84
|
+
path: "kind",
|
|
85
|
+
message: `No provider registered for kind "${kind}"`
|
|
86
|
+
}
|
|
87
|
+
]
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
return provider.validateManifest(data);
|
|
91
|
+
}
|
|
92
|
+
defaultFileFilter(kind, manifestPath) {
|
|
93
|
+
this.autoFreeze();
|
|
94
|
+
const provider = this.providers.get(kind);
|
|
95
|
+
if (!provider) return void 0;
|
|
96
|
+
return provider.defaultFileFilter(manifestPath);
|
|
97
|
+
}
|
|
98
|
+
extractRequires(kind, assetRef, manifest) {
|
|
99
|
+
this.autoFreeze();
|
|
100
|
+
const provider = this.providers.get(kind);
|
|
101
|
+
if (!provider?.extractRequires) return [];
|
|
102
|
+
return provider.extractRequires(assetRef, manifest);
|
|
103
|
+
}
|
|
104
|
+
// -------------------------------------------------------------------------
|
|
105
|
+
// Internal
|
|
106
|
+
// -------------------------------------------------------------------------
|
|
107
|
+
autoFreeze() {
|
|
108
|
+
if (!this._frozen) {
|
|
109
|
+
this._frozen = true;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
};
|
|
113
|
+
|
|
114
|
+
// discovery/src/requires-graph.ts
|
|
115
|
+
function extractRequires(assetRef, kind, manifest) {
|
|
116
|
+
const edges = [];
|
|
117
|
+
switch (kind) {
|
|
118
|
+
case "agent":
|
|
119
|
+
extractAgentRequires(assetRef, manifest, edges);
|
|
120
|
+
break;
|
|
121
|
+
case "flow":
|
|
122
|
+
extractFlowRequires(assetRef, manifest, edges);
|
|
123
|
+
break;
|
|
124
|
+
case "preset":
|
|
125
|
+
extractPresetRequires(assetRef, manifest, edges);
|
|
126
|
+
break;
|
|
127
|
+
case "skill":
|
|
128
|
+
extractSkillRequires(assetRef, manifest, edges);
|
|
129
|
+
break;
|
|
130
|
+
}
|
|
131
|
+
return edges;
|
|
132
|
+
}
|
|
133
|
+
function buildRequiresGraph(allEdges) {
|
|
134
|
+
const { acyclic, cyclePath } = detectCycles(allEdges);
|
|
135
|
+
return { edges: allEdges, acyclic, cyclePath };
|
|
136
|
+
}
|
|
137
|
+
function detectCycles(edges) {
|
|
138
|
+
if (edges.length === 0) return { acyclic: true };
|
|
139
|
+
const nodes = /* @__PURE__ */ new Set();
|
|
140
|
+
const adj = /* @__PURE__ */ new Map();
|
|
141
|
+
const inDegree = /* @__PURE__ */ new Map();
|
|
142
|
+
for (const e of edges) {
|
|
143
|
+
nodes.add(e.from);
|
|
144
|
+
nodes.add(e.to);
|
|
145
|
+
if (!adj.has(e.from)) adj.set(e.from, /* @__PURE__ */ new Set());
|
|
146
|
+
adj.get(e.from).add(e.to);
|
|
147
|
+
inDegree.set(e.to, (inDegree.get(e.to) ?? 0) + 1);
|
|
148
|
+
if (!inDegree.has(e.from)) inDegree.set(e.from, 0);
|
|
149
|
+
}
|
|
150
|
+
const queue = [];
|
|
151
|
+
for (const node of nodes) {
|
|
152
|
+
if ((inDegree.get(node) ?? 0) === 0) queue.push(node);
|
|
153
|
+
}
|
|
154
|
+
const sorted = [];
|
|
155
|
+
while (queue.length > 0) {
|
|
156
|
+
const n = queue.shift();
|
|
157
|
+
sorted.push(n);
|
|
158
|
+
for (const neighbor of adj.get(n) ?? []) {
|
|
159
|
+
const deg = inDegree.get(neighbor) - 1;
|
|
160
|
+
inDegree.set(neighbor, deg);
|
|
161
|
+
if (deg === 0) queue.push(neighbor);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
if (sorted.length === nodes.size) {
|
|
165
|
+
return { acyclic: true };
|
|
166
|
+
}
|
|
167
|
+
const remaining = new Set([...nodes].filter((n) => !sorted.includes(n)));
|
|
168
|
+
const cyclePath = findCyclePath(remaining, adj);
|
|
169
|
+
return { acyclic: false, cyclePath };
|
|
170
|
+
}
|
|
171
|
+
function extractAgentRequires(ref, m, edges) {
|
|
172
|
+
if (Array.isArray(m.skills)) {
|
|
173
|
+
for (const s of m.skills) {
|
|
174
|
+
if (typeof s === "string") edges.push({ from: ref, to: s, field: "skills" });
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
if (Array.isArray(m.composes)) {
|
|
178
|
+
for (const c of m.composes) {
|
|
179
|
+
if (isObjectWithStringField(c, "ref")) {
|
|
180
|
+
edges.push({ from: ref, to: c.ref, field: "composes" });
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
if (typeof m.extends === "string") {
|
|
185
|
+
edges.push({ from: ref, to: m.extends, field: "extends" });
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
function extractFlowRequires(ref, m, edges) {
|
|
189
|
+
if (!Array.isArray(m.nodes)) return;
|
|
190
|
+
for (const node of m.nodes) {
|
|
191
|
+
if (isObjectWithStringField(node, "skill")) {
|
|
192
|
+
edges.push({
|
|
193
|
+
from: ref,
|
|
194
|
+
to: node.skill,
|
|
195
|
+
field: "nodes[].skill"
|
|
196
|
+
});
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
function extractPresetRequires(ref, m, edges) {
|
|
201
|
+
if (!Array.isArray(m.items)) return;
|
|
202
|
+
for (const item of m.items) {
|
|
203
|
+
if (typeof item !== "object" || item === null) continue;
|
|
204
|
+
const i = item;
|
|
205
|
+
if (typeof i.ref === "string" && !i.ref.startsWith("library://")) {
|
|
206
|
+
edges.push({ from: ref, to: i.ref, field: "items[].ref" });
|
|
207
|
+
}
|
|
208
|
+
if (Array.isArray(i.composes)) {
|
|
209
|
+
for (const c of i.composes) {
|
|
210
|
+
if (!isObjectWithStringField(c, "ref")) continue;
|
|
211
|
+
const cRef = c.ref;
|
|
212
|
+
if (!cRef.startsWith("#") && !cRef.startsWith("library://")) {
|
|
213
|
+
edges.push({ from: ref, to: cRef, field: "items[].composes[].ref" });
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
function extractSkillRequires(ref, m, edges) {
|
|
220
|
+
const metadata = m.metadata;
|
|
221
|
+
if (!metadata) return;
|
|
222
|
+
const artifacts = metadata.artifacts;
|
|
223
|
+
if (!artifacts) return;
|
|
224
|
+
if (!Array.isArray(artifacts.requires)) return;
|
|
225
|
+
for (const r of artifacts.requires) {
|
|
226
|
+
if (isObjectWithStringField(r, "id")) {
|
|
227
|
+
edges.push({
|
|
228
|
+
from: ref,
|
|
229
|
+
to: r.id,
|
|
230
|
+
field: "metadata.artifacts.requires"
|
|
231
|
+
});
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
function findCyclePath(nodes, adj) {
|
|
236
|
+
const visited = /* @__PURE__ */ new Set();
|
|
237
|
+
const stack = /* @__PURE__ */ new Set();
|
|
238
|
+
const path6 = [];
|
|
239
|
+
for (const start of nodes) {
|
|
240
|
+
if (visited.has(start)) continue;
|
|
241
|
+
const cycle = dfs(start, adj, visited, stack, path6, nodes);
|
|
242
|
+
if (cycle) return cycle;
|
|
243
|
+
}
|
|
244
|
+
return [...nodes];
|
|
245
|
+
}
|
|
246
|
+
function dfs(node, adj, visited, stack, path6, scope) {
|
|
247
|
+
visited.add(node);
|
|
248
|
+
stack.add(node);
|
|
249
|
+
path6.push(node);
|
|
250
|
+
for (const neighbor of adj.get(node) ?? []) {
|
|
251
|
+
if (!scope.has(neighbor)) continue;
|
|
252
|
+
if (stack.has(neighbor)) {
|
|
253
|
+
const cycleStart = path6.indexOf(neighbor);
|
|
254
|
+
return [...path6.slice(cycleStart), neighbor];
|
|
255
|
+
}
|
|
256
|
+
if (!visited.has(neighbor)) {
|
|
257
|
+
const result = dfs(neighbor, adj, visited, stack, path6, scope);
|
|
258
|
+
if (result) return result;
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
stack.delete(node);
|
|
262
|
+
path6.pop();
|
|
263
|
+
return null;
|
|
264
|
+
}
|
|
265
|
+
function isObjectWithStringField(val, field) {
|
|
266
|
+
return typeof val === "object" && val !== null && field in val && typeof val[field] === "string";
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
// discovery/src/builtin-providers.ts
|
|
270
|
+
function matchesSuffix(relativePath, suffix) {
|
|
271
|
+
return relativePath.endsWith(suffix);
|
|
272
|
+
}
|
|
273
|
+
function matchesFilename(relativePath, filename) {
|
|
274
|
+
const parts = relativePath.split("/");
|
|
275
|
+
return parts[parts.length - 1] === filename;
|
|
276
|
+
}
|
|
277
|
+
function collectDirRecursive(baseDir, relativeDir) {
|
|
278
|
+
const full = path.join(baseDir, relativeDir);
|
|
279
|
+
if (!fs.existsSync(full) || !fs.statSync(full).isDirectory()) return [];
|
|
280
|
+
const results = [];
|
|
281
|
+
for (const entry of fs.readdirSync(full, { withFileTypes: true })) {
|
|
282
|
+
const rel = path.posix.join(relativeDir, entry.name);
|
|
283
|
+
if (entry.isDirectory()) {
|
|
284
|
+
results.push(...collectDirRecursive(baseDir, rel));
|
|
285
|
+
} else if (entry.isFile()) {
|
|
286
|
+
results.push(rel);
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
return results;
|
|
290
|
+
}
|
|
291
|
+
function manifestOnlyFilter(manifestPath) {
|
|
292
|
+
return {
|
|
293
|
+
assetRoot: path.dirname(manifestPath),
|
|
294
|
+
files: [path.basename(manifestPath)]
|
|
295
|
+
};
|
|
296
|
+
}
|
|
297
|
+
function skillFilter(manifestPath) {
|
|
298
|
+
const dir = path.dirname(manifestPath);
|
|
299
|
+
const manifestName = path.basename(manifestPath);
|
|
300
|
+
const files = [manifestName];
|
|
301
|
+
for (const leaf of ["validator.py", "CLI.md"]) {
|
|
302
|
+
if (fs.existsSync(path.join(dir, leaf))) files.push(leaf);
|
|
303
|
+
}
|
|
304
|
+
files.push(...collectDirRecursive(dir, "references"));
|
|
305
|
+
try {
|
|
306
|
+
for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {
|
|
307
|
+
if (entry.isDirectory() && entry.name !== "references") {
|
|
308
|
+
if (fs.existsSync(path.join(dir, entry.name, "SKILL.md"))) {
|
|
309
|
+
files.push(...collectDirRecursive(dir, entry.name));
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
} catch {
|
|
314
|
+
}
|
|
315
|
+
files.sort();
|
|
316
|
+
return { assetRoot: dir, files };
|
|
317
|
+
}
|
|
318
|
+
function agentFilter(manifestPath) {
|
|
319
|
+
const dir = path.dirname(manifestPath);
|
|
320
|
+
const manifestName = path.basename(manifestPath);
|
|
321
|
+
const files = [manifestName];
|
|
322
|
+
for (const companion of ["SOUL.md", "RULES.md"]) {
|
|
323
|
+
if (fs.existsSync(path.join(dir, companion))) files.push(companion);
|
|
324
|
+
}
|
|
325
|
+
files.push(...collectDirRecursive(dir, "knowledge"));
|
|
326
|
+
files.sort();
|
|
327
|
+
return { assetRoot: dir, files };
|
|
328
|
+
}
|
|
329
|
+
function contractFilter(manifestPath) {
|
|
330
|
+
const dir = path.dirname(manifestPath);
|
|
331
|
+
const manifestName = path.basename(manifestPath);
|
|
332
|
+
const files = [manifestName];
|
|
333
|
+
try {
|
|
334
|
+
for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {
|
|
335
|
+
if (entry.isFile() && entry.name !== manifestName) {
|
|
336
|
+
files.push(entry.name);
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
} catch {
|
|
340
|
+
}
|
|
341
|
+
files.sort();
|
|
342
|
+
return { assetRoot: dir, files };
|
|
343
|
+
}
|
|
344
|
+
function connectorFilter(manifestPath) {
|
|
345
|
+
const dir = path.dirname(manifestPath);
|
|
346
|
+
const manifestName = path.basename(manifestPath);
|
|
347
|
+
const files = [manifestName];
|
|
348
|
+
if (fs.existsSync(path.join(dir, "adapter.ts"))) files.push("adapter.ts");
|
|
349
|
+
files.sort();
|
|
350
|
+
return { assetRoot: dir, files };
|
|
351
|
+
}
|
|
352
|
+
function mountFilter(manifestPath) {
|
|
353
|
+
const dir = path.dirname(manifestPath);
|
|
354
|
+
const manifestName = path.basename(manifestPath);
|
|
355
|
+
const files = [manifestName];
|
|
356
|
+
if (fs.existsSync(path.join(dir, "driver.ts"))) files.push("driver.ts");
|
|
357
|
+
files.sort();
|
|
358
|
+
return { assetRoot: dir, files };
|
|
359
|
+
}
|
|
360
|
+
function makeProvider(config) {
|
|
361
|
+
return {
|
|
362
|
+
kind: config.kind,
|
|
363
|
+
displayName: config.displayName,
|
|
364
|
+
providerVersion: config.providerVersion,
|
|
365
|
+
discoveryPatterns: config.discoveryPatterns,
|
|
366
|
+
matchesPath: config.matchesPath,
|
|
367
|
+
validateManifest: config.validate,
|
|
368
|
+
defaultFileFilter: config.fileFilter,
|
|
369
|
+
...config.hasExtractRequires !== false && {
|
|
370
|
+
extractRequires: (assetRef, manifest) => extractRequires(assetRef, config.kind, manifest)
|
|
371
|
+
}
|
|
372
|
+
};
|
|
373
|
+
}
|
|
374
|
+
var skillProvider = makeProvider({
|
|
375
|
+
kind: "skill",
|
|
376
|
+
displayName: "Skill",
|
|
377
|
+
providerVersion: "1.0.0",
|
|
378
|
+
discoveryPatterns: ["**/SKILL.md"],
|
|
379
|
+
matchesPath: (p) => matchesFilename(p, "SKILL.md"),
|
|
380
|
+
validate: validateSkill,
|
|
381
|
+
fileFilter: skillFilter,
|
|
382
|
+
hasExtractRequires: true
|
|
383
|
+
});
|
|
384
|
+
var agentProvider = makeProvider({
|
|
385
|
+
kind: "agent",
|
|
386
|
+
displayName: "Agent",
|
|
387
|
+
providerVersion: "1.0.0",
|
|
388
|
+
discoveryPatterns: ["**/agent.yaml", "**/AGENT.md"],
|
|
389
|
+
matchesPath: (p) => matchesFilename(p, "agent.yaml") || matchesFilename(p, "AGENT.md"),
|
|
390
|
+
validate: validateAgent,
|
|
391
|
+
fileFilter: agentFilter,
|
|
392
|
+
hasExtractRequires: true
|
|
393
|
+
});
|
|
394
|
+
var connectorProvider = makeProvider({
|
|
395
|
+
kind: "connector",
|
|
396
|
+
displayName: "Connector",
|
|
397
|
+
providerVersion: "1.0.0",
|
|
398
|
+
discoveryPatterns: ["**/CONNECTOR.md"],
|
|
399
|
+
matchesPath: (p) => matchesFilename(p, "CONNECTOR.md"),
|
|
400
|
+
validate: validateConnector,
|
|
401
|
+
fileFilter: connectorFilter,
|
|
402
|
+
hasExtractRequires: false
|
|
403
|
+
});
|
|
404
|
+
var mountProvider = makeProvider({
|
|
405
|
+
kind: "mount",
|
|
406
|
+
displayName: "Mount",
|
|
407
|
+
providerVersion: "1.0.0",
|
|
408
|
+
discoveryPatterns: ["**/MOUNT.md"],
|
|
409
|
+
matchesPath: (p) => matchesFilename(p, "MOUNT.md"),
|
|
410
|
+
validate: validateMount,
|
|
411
|
+
fileFilter: mountFilter,
|
|
412
|
+
hasExtractRequires: false
|
|
413
|
+
});
|
|
414
|
+
var mcpServerProvider = makeProvider({
|
|
415
|
+
kind: "mcp-server",
|
|
416
|
+
displayName: "MCP Server",
|
|
417
|
+
providerVersion: "1.0.0",
|
|
418
|
+
discoveryPatterns: ["**/MCP.md"],
|
|
419
|
+
matchesPath: (p) => matchesFilename(p, "MCP.md"),
|
|
420
|
+
validate: validateMcpServer,
|
|
421
|
+
fileFilter: manifestOnlyFilter,
|
|
422
|
+
hasExtractRequires: false
|
|
423
|
+
});
|
|
424
|
+
var contractProvider = makeProvider({
|
|
425
|
+
kind: "contract",
|
|
426
|
+
displayName: "Contract",
|
|
427
|
+
providerVersion: "1.0.0",
|
|
428
|
+
discoveryPatterns: ["**/CONTRACT.md"],
|
|
429
|
+
matchesPath: (p) => matchesFilename(p, "CONTRACT.md"),
|
|
430
|
+
validate: validateContract,
|
|
431
|
+
fileFilter: contractFilter,
|
|
432
|
+
hasExtractRequires: false
|
|
433
|
+
});
|
|
434
|
+
var promptProvider = makeProvider({
|
|
435
|
+
kind: "prompt",
|
|
436
|
+
displayName: "Prompt",
|
|
437
|
+
providerVersion: "1.0.0",
|
|
438
|
+
discoveryPatterns: ["**/*.prompt.md"],
|
|
439
|
+
matchesPath: (p) => matchesSuffix(p, ".prompt.md"),
|
|
440
|
+
validate: validatePrompt,
|
|
441
|
+
fileFilter: manifestOnlyFilter,
|
|
442
|
+
hasExtractRequires: false
|
|
443
|
+
});
|
|
444
|
+
var personaProvider = {
|
|
445
|
+
kind: "persona",
|
|
446
|
+
displayName: "Persona",
|
|
447
|
+
providerVersion: "1.0.0",
|
|
448
|
+
discoveryPatterns: [],
|
|
449
|
+
matchesPath: () => false,
|
|
450
|
+
validateManifest: validatePersona,
|
|
451
|
+
defaultFileFilter: manifestOnlyFilter
|
|
452
|
+
};
|
|
453
|
+
var rulesetProvider = {
|
|
454
|
+
kind: "ruleset",
|
|
455
|
+
displayName: "Ruleset",
|
|
456
|
+
providerVersion: "1.0.0",
|
|
457
|
+
discoveryPatterns: [],
|
|
458
|
+
matchesPath: () => false,
|
|
459
|
+
validateManifest: validateRuleset,
|
|
460
|
+
defaultFileFilter: manifestOnlyFilter
|
|
461
|
+
};
|
|
462
|
+
var presetProvider = makeProvider({
|
|
463
|
+
kind: "preset",
|
|
464
|
+
displayName: "Preset",
|
|
465
|
+
providerVersion: "1.0.0",
|
|
466
|
+
discoveryPatterns: ["**/*.preset.yaml"],
|
|
467
|
+
matchesPath: (p) => matchesSuffix(p, ".preset.yaml"),
|
|
468
|
+
validate: validatePreset,
|
|
469
|
+
fileFilter: manifestOnlyFilter,
|
|
470
|
+
hasExtractRequires: true
|
|
471
|
+
});
|
|
472
|
+
var BUILTIN_PROVIDERS = [
|
|
473
|
+
// 9 core kinds
|
|
474
|
+
skillProvider,
|
|
475
|
+
agentProvider,
|
|
476
|
+
connectorProvider,
|
|
477
|
+
mountProvider,
|
|
478
|
+
mcpServerProvider,
|
|
479
|
+
contractProvider,
|
|
480
|
+
promptProvider,
|
|
481
|
+
personaProvider,
|
|
482
|
+
rulesetProvider,
|
|
483
|
+
// Composition entity (discoverable, not in AssetKind enum)
|
|
484
|
+
presetProvider
|
|
485
|
+
];
|
|
486
|
+
var SEMVER_RE = /^\d+\.\d+\.\d+(?:-[a-zA-Z0-9.-]+)?(?:\+[a-zA-Z0-9.-]+)?$/;
|
|
487
|
+
var PublisherOverrideSchema = z.object({
|
|
488
|
+
/** Relative path within the repo (trailing slash convention). */
|
|
489
|
+
path: z.string().min(1),
|
|
490
|
+
/** Publisher namespace override for assets under this path. */
|
|
491
|
+
publisher: z.string().regex(/^@[\w-]+$/, "Publisher must start with @ and contain only word chars / hyphens")
|
|
492
|
+
});
|
|
493
|
+
var SyncConfigSchema = z.object({
|
|
494
|
+
/** How the catalog backend learns about repo changes. */
|
|
495
|
+
trigger: z.enum(["webhook", "poll"]).default("webhook"),
|
|
496
|
+
/** Seconds between polls. Required when trigger=poll. */
|
|
497
|
+
poll_interval: z.number().int().positive().optional()
|
|
498
|
+
}).refine((data) => data.trigger !== "poll" || data.poll_interval !== void 0, {
|
|
499
|
+
message: "poll_interval is required when trigger is poll",
|
|
500
|
+
path: ["poll_interval"]
|
|
501
|
+
});
|
|
502
|
+
var AssetEntrySchema = z.object({
|
|
503
|
+
/** Relative path within the repo (directory or file). */
|
|
504
|
+
path: z.string().min(1),
|
|
505
|
+
/** Asset kind — validated against `IAssetKindRegistry` at discovery time. */
|
|
506
|
+
kind: z.string().min(1),
|
|
507
|
+
/** Publisher namespace. Required per entry; overrides publisher_default / _overrides. */
|
|
508
|
+
publisher: z.string().regex(/^@[\w-]+$/, "Publisher must start with @ and contain only word chars / hyphens"),
|
|
509
|
+
/** Asset name. Identity tuple is `<publisher>/<name>@<version>`. */
|
|
510
|
+
name: z.string().min(1),
|
|
511
|
+
/** Semver version string. */
|
|
512
|
+
version: z.string().regex(SEMVER_RE, "Version must be semver MAJOR.MINOR.PATCH"),
|
|
513
|
+
/**
|
|
514
|
+
* Hex-encoded SHA256 hash of the deterministic tarball contents.
|
|
515
|
+
* Optional on write, REQUIRED on Catalog publish (Phase 4).
|
|
516
|
+
*/
|
|
517
|
+
sha256: z.string().regex(/^[a-f0-9]{64}$/, "sha256 must be 64-character hex").optional(),
|
|
518
|
+
/** Curated file filter (paths relative to `path:`). At least one entry. */
|
|
519
|
+
files: z.array(z.string().min(1)).min(1),
|
|
520
|
+
/** Author-declared requires-graph entries. */
|
|
521
|
+
requires: z.array(z.string().min(1)).default([]),
|
|
522
|
+
/** Optional passthrough to `AssetDefinition.manifest`. */
|
|
523
|
+
metadata: z.record(z.unknown()).optional()
|
|
524
|
+
});
|
|
525
|
+
var SourceConfigSchema = z.object({
|
|
526
|
+
/** Schema version. `1` (glob mode) or `2` (allows `assets:` block). */
|
|
527
|
+
version: z.union([z.literal(1), z.literal(2)]),
|
|
528
|
+
/**
|
|
529
|
+
* Default publisher namespace template.
|
|
530
|
+
* Use `@<domain>` to derive from first-level directory name.
|
|
531
|
+
* Use a literal like `@skaile` if the entire repo maps to one publisher.
|
|
532
|
+
*/
|
|
533
|
+
publisher_default: z.string().min(1).refine((v) => v.startsWith("@"), "publisher_default must start with @"),
|
|
534
|
+
/** Default git ref for version resolution. */
|
|
535
|
+
default_ref: z.string().min(1).default("main"),
|
|
536
|
+
/** Per-path publisher overrides. Evaluated in order; first match wins. */
|
|
537
|
+
publisher_overrides: z.array(PublisherOverrideSchema).default([]),
|
|
538
|
+
/** Optional sync configuration for the catalog backend. */
|
|
539
|
+
sync: SyncConfigSchema.optional(),
|
|
540
|
+
/**
|
|
541
|
+
* Optional author-shipped asset inventory. When present, discovery uses
|
|
542
|
+
* these entries verbatim and skips glob walk + AI enrichment.
|
|
543
|
+
*
|
|
544
|
+
* Requires `version: 2`.
|
|
545
|
+
*/
|
|
546
|
+
assets: z.array(AssetEntrySchema).optional()
|
|
547
|
+
}).refine((data) => !(data.assets && data.version !== 2), {
|
|
548
|
+
message: "`assets:` block requires version 2",
|
|
549
|
+
path: ["version"]
|
|
550
|
+
});
|
|
551
|
+
function parseSourceConfig(yamlText) {
|
|
552
|
+
return yaml.load(yamlText);
|
|
553
|
+
}
|
|
554
|
+
function validateSourceConfig(parsed) {
|
|
555
|
+
const result = SourceConfigSchema.safeParse(parsed);
|
|
556
|
+
if (result.success) {
|
|
557
|
+
const warnings = collectWarnings(result.data);
|
|
558
|
+
return warnings.length > 0 ? { ok: true, config: result.data, warnings } : { ok: true, config: result.data };
|
|
559
|
+
}
|
|
560
|
+
return {
|
|
561
|
+
ok: false,
|
|
562
|
+
errors: result.error.issues.map((issue) => ({
|
|
563
|
+
path: issue.path.join("."),
|
|
564
|
+
message: issue.message
|
|
565
|
+
}))
|
|
566
|
+
};
|
|
567
|
+
}
|
|
568
|
+
function loadSourceConfig(yamlText) {
|
|
569
|
+
const parsed = parseSourceConfig(yamlText);
|
|
570
|
+
return validateSourceConfig(parsed);
|
|
571
|
+
}
|
|
572
|
+
function isManifestMode(config) {
|
|
573
|
+
return config.version === 2 && Array.isArray(config.assets);
|
|
574
|
+
}
|
|
575
|
+
function collectWarnings(config) {
|
|
576
|
+
const warnings = [];
|
|
577
|
+
if (Array.isArray(config.assets) && config.publisher_overrides.length > 0) {
|
|
578
|
+
warnings.push(
|
|
579
|
+
"`assets:` block is present; `publisher_overrides:` will be ignored in manifest mode."
|
|
580
|
+
);
|
|
581
|
+
}
|
|
582
|
+
return warnings;
|
|
583
|
+
}
|
|
584
|
+
function mergeSourceConfigs(base, overlay) {
|
|
585
|
+
if (!base && !overlay) return void 0;
|
|
586
|
+
if (!overlay) return base;
|
|
587
|
+
if (!base) return overlay;
|
|
588
|
+
const merged = { ...base };
|
|
589
|
+
merged.version = overlay.version;
|
|
590
|
+
if (overlay.publisher_default && overlay.publisher_default.length > 0) {
|
|
591
|
+
merged.publisher_default = overlay.publisher_default;
|
|
592
|
+
}
|
|
593
|
+
if (Array.isArray(overlay.publisher_overrides) && overlay.publisher_overrides.length > 0) {
|
|
594
|
+
merged.publisher_overrides = overlay.publisher_overrides;
|
|
595
|
+
}
|
|
596
|
+
if (overlay.default_ref && overlay.default_ref.length > 0) {
|
|
597
|
+
merged.default_ref = overlay.default_ref;
|
|
598
|
+
}
|
|
599
|
+
if (overlay.sync !== void 0) {
|
|
600
|
+
merged.sync = overlay.sync;
|
|
601
|
+
}
|
|
602
|
+
if (overlay.assets !== void 0) {
|
|
603
|
+
merged.assets = overlay.assets;
|
|
604
|
+
}
|
|
605
|
+
return merged;
|
|
606
|
+
}
|
|
607
|
+
function loadMergedSourceConfig(rootPath, sidecarPath) {
|
|
608
|
+
const baseResult = loadSourceConfigFromDir(rootPath);
|
|
609
|
+
if (baseResult && !baseResult.ok) return baseResult;
|
|
610
|
+
const base = baseResult?.ok ? baseResult.config : void 0;
|
|
611
|
+
let overlay;
|
|
612
|
+
const overlayWarnings = [];
|
|
613
|
+
if (sidecarPath) {
|
|
614
|
+
const overlayResult = loadSourceConfigFromDir(sidecarPath);
|
|
615
|
+
if (overlayResult && !overlayResult.ok) return overlayResult;
|
|
616
|
+
if (overlayResult?.ok) {
|
|
617
|
+
overlay = overlayResult.config;
|
|
618
|
+
if (overlayResult.warnings) overlayWarnings.push(...overlayResult.warnings);
|
|
619
|
+
}
|
|
620
|
+
}
|
|
621
|
+
const merged = mergeSourceConfigs(base, overlay);
|
|
622
|
+
if (!merged) {
|
|
623
|
+
return {
|
|
624
|
+
ok: true,
|
|
625
|
+
config: {
|
|
626
|
+
version: 2,
|
|
627
|
+
publisher_default: "@<domain>",
|
|
628
|
+
default_ref: "main",
|
|
629
|
+
publisher_overrides: []
|
|
630
|
+
}
|
|
631
|
+
};
|
|
632
|
+
}
|
|
633
|
+
const warnings = collectWarnings(merged);
|
|
634
|
+
if (overlayWarnings.length > 0) warnings.push(...overlayWarnings);
|
|
635
|
+
return warnings.length > 0 ? { ok: true, config: merged, warnings } : { ok: true, config: merged };
|
|
636
|
+
}
|
|
637
|
+
function loadSourceConfigFromDir(dir) {
|
|
638
|
+
const filePath = path.join(dir, ".skaile-source.yaml");
|
|
639
|
+
if (!fs.existsSync(filePath)) return void 0;
|
|
640
|
+
try {
|
|
641
|
+
const text = fs.readFileSync(filePath, "utf-8");
|
|
642
|
+
return loadSourceConfig(text);
|
|
643
|
+
} catch (err) {
|
|
644
|
+
return {
|
|
645
|
+
ok: false,
|
|
646
|
+
errors: [
|
|
647
|
+
{
|
|
648
|
+
path: filePath,
|
|
649
|
+
message: err instanceof Error ? err.message : String(err)
|
|
650
|
+
}
|
|
651
|
+
]
|
|
652
|
+
};
|
|
653
|
+
}
|
|
654
|
+
}
|
|
655
|
+
function computeDeterministicHash(assetRoot, files) {
|
|
656
|
+
const hash = crypto.createHash("sha256");
|
|
657
|
+
const sorted = [...files].sort();
|
|
658
|
+
for (const file of sorted) {
|
|
659
|
+
const fullPath = path.join(assetRoot, file);
|
|
660
|
+
try {
|
|
661
|
+
hash.update(file);
|
|
662
|
+
hash.update("\0");
|
|
663
|
+
const content = fs.readFileSync(fullPath);
|
|
664
|
+
hash.update(content);
|
|
665
|
+
hash.update("\0");
|
|
666
|
+
} catch {
|
|
667
|
+
}
|
|
668
|
+
}
|
|
669
|
+
return hash.digest("hex");
|
|
670
|
+
}
|
|
671
|
+
function computeDeterministicHashDetailed(assetRoot, files) {
|
|
672
|
+
const hash = crypto.createHash("sha256");
|
|
673
|
+
const sorted = [...files].sort();
|
|
674
|
+
const present = [];
|
|
675
|
+
const missing = [];
|
|
676
|
+
for (const file of sorted) {
|
|
677
|
+
const fullPath = path.join(assetRoot, file);
|
|
678
|
+
let content = null;
|
|
679
|
+
try {
|
|
680
|
+
content = fs.readFileSync(fullPath);
|
|
681
|
+
} catch {
|
|
682
|
+
missing.push(file);
|
|
683
|
+
continue;
|
|
684
|
+
}
|
|
685
|
+
hash.update(file);
|
|
686
|
+
hash.update("\0");
|
|
687
|
+
hash.update(content);
|
|
688
|
+
hash.update("\0");
|
|
689
|
+
present.push(file);
|
|
690
|
+
}
|
|
691
|
+
return { sha256: hash.digest("hex"), present, missing };
|
|
692
|
+
}
|
|
693
|
+
function discoverFromManifest(rootPath, sourceConfig, registry) {
|
|
694
|
+
const assets = [];
|
|
695
|
+
const errors = [];
|
|
696
|
+
const allEdges = [];
|
|
697
|
+
const sortedEntries = [...sourceConfig.assets].sort((a, b) => a.path < b.path ? -1 : 1);
|
|
698
|
+
for (const entry of sortedEntries) {
|
|
699
|
+
const result = processEntry(rootPath, entry, registry);
|
|
700
|
+
if (result.errors.length > 0) {
|
|
701
|
+
errors.push(...result.errors);
|
|
702
|
+
if (!result.asset) continue;
|
|
703
|
+
}
|
|
704
|
+
if (result.asset) {
|
|
705
|
+
assets.push(result.asset);
|
|
706
|
+
allEdges.push(...result.asset.requires);
|
|
707
|
+
}
|
|
708
|
+
}
|
|
709
|
+
const graph = buildRequiresGraph(allEdges);
|
|
710
|
+
return { assets, graph, errors };
|
|
711
|
+
}
|
|
712
|
+
function processEntry(rootPath, entry, registry) {
|
|
713
|
+
const errors = [];
|
|
714
|
+
const assetRoot = path.resolve(rootPath, entry.path);
|
|
715
|
+
const assetRootRelative = entry.path;
|
|
716
|
+
const manifestFileRel = pickManifestFile(entry, registry);
|
|
717
|
+
const manifestAbsPath = path.join(assetRoot, manifestFileRel);
|
|
718
|
+
const missing = [];
|
|
719
|
+
for (const file of entry.files) {
|
|
720
|
+
if (!fs.existsSync(path.join(assetRoot, file))) {
|
|
721
|
+
missing.push(file);
|
|
722
|
+
}
|
|
723
|
+
}
|
|
724
|
+
if (missing.length > 0) {
|
|
725
|
+
errors.push({
|
|
726
|
+
path: assetRootRelative,
|
|
727
|
+
error: `ManifestFileMissing: ${missing.join(", ")}`
|
|
728
|
+
});
|
|
729
|
+
return { asset: null, errors };
|
|
730
|
+
}
|
|
731
|
+
const manifest = parseManifest(manifestAbsPath);
|
|
732
|
+
if (!manifest) {
|
|
733
|
+
errors.push({
|
|
734
|
+
path: assetRootRelative,
|
|
735
|
+
error: `ManifestSchemaError: failed to parse manifest file ${manifestFileRel}`
|
|
736
|
+
});
|
|
737
|
+
return { asset: null, errors };
|
|
738
|
+
}
|
|
739
|
+
if (!registry.getProvider(entry.kind)) {
|
|
740
|
+
errors.push({
|
|
741
|
+
path: assetRootRelative,
|
|
742
|
+
error: `Unknown asset kind "${entry.kind}" \u2014 ghost-installing without provider validation`
|
|
743
|
+
});
|
|
744
|
+
}
|
|
745
|
+
const requiresErrors = validateRequiresSyntax(entry.requires);
|
|
746
|
+
if (requiresErrors.length > 0) {
|
|
747
|
+
errors.push({
|
|
748
|
+
path: assetRootRelative,
|
|
749
|
+
error: `ManifestRequiresError: ${requiresErrors.join("; ")}`
|
|
750
|
+
});
|
|
751
|
+
return { asset: null, errors };
|
|
752
|
+
}
|
|
753
|
+
const { sha256: computedHash, missing: hashMissing } = computeDeterministicHashDetailed(
|
|
754
|
+
assetRoot,
|
|
755
|
+
entry.files
|
|
756
|
+
);
|
|
757
|
+
if (hashMissing.length > 0) {
|
|
758
|
+
errors.push({
|
|
759
|
+
path: assetRootRelative,
|
|
760
|
+
error: `ManifestFileMissing: ${hashMissing.join(", ")} (became unreadable during hashing)`
|
|
761
|
+
});
|
|
762
|
+
return { asset: null, errors };
|
|
763
|
+
}
|
|
764
|
+
if (entry.sha256 && entry.sha256 !== computedHash) {
|
|
765
|
+
errors.push({
|
|
766
|
+
path: assetRootRelative,
|
|
767
|
+
error: `ManifestHashMismatch: declared ${entry.sha256}, computed ${computedHash}`
|
|
768
|
+
});
|
|
769
|
+
return { asset: null, errors };
|
|
770
|
+
}
|
|
771
|
+
if (!entry.sha256) {
|
|
772
|
+
errors.push({
|
|
773
|
+
path: assetRootRelative,
|
|
774
|
+
error: `Missing sha256 \u2014 computed ${computedHash}. Re-run \`skaile source build-manifest --write\` to pin it.`
|
|
775
|
+
});
|
|
776
|
+
}
|
|
777
|
+
const ref = `${entry.publisher}/${entry.name}@${entry.version}`;
|
|
778
|
+
const requires = entry.requires.map((to) => ({
|
|
779
|
+
from: ref,
|
|
780
|
+
to,
|
|
781
|
+
field: "assets[].requires"
|
|
782
|
+
}));
|
|
783
|
+
const mergedManifest = {
|
|
784
|
+
...entry.metadata ?? {},
|
|
785
|
+
...manifest
|
|
786
|
+
};
|
|
787
|
+
const asset = {
|
|
788
|
+
ref,
|
|
789
|
+
kind: entry.kind,
|
|
790
|
+
publisher: entry.publisher,
|
|
791
|
+
name: entry.name,
|
|
792
|
+
version: entry.version,
|
|
793
|
+
manifest: mergedManifest,
|
|
794
|
+
manifestPath: manifestAbsPath,
|
|
795
|
+
relativePath: path.join(assetRootRelative, manifestFileRel).replace(/\\/g, "/"),
|
|
796
|
+
fileFilter: {
|
|
797
|
+
assetRoot,
|
|
798
|
+
files: [...entry.files].sort()
|
|
799
|
+
},
|
|
800
|
+
sha256: computedHash,
|
|
801
|
+
requires
|
|
802
|
+
};
|
|
803
|
+
return { asset, errors };
|
|
804
|
+
}
|
|
805
|
+
var MANIFEST_FILENAMES = /* @__PURE__ */ new Set([
|
|
806
|
+
"SKILL.md",
|
|
807
|
+
"AGENT.md",
|
|
808
|
+
"agent.yaml",
|
|
809
|
+
"CONNECTOR.md",
|
|
810
|
+
"MOUNT.md",
|
|
811
|
+
"MCP.md",
|
|
812
|
+
"CONTRACT.md",
|
|
813
|
+
"PERSONA.md",
|
|
814
|
+
"RULESET.md"
|
|
815
|
+
]);
|
|
816
|
+
var MANIFEST_SUFFIXES = [".flow.yaml", ".flow.json", ".prompt.md", ".preset.yaml"];
|
|
817
|
+
function pickManifestFile(entry, registry) {
|
|
818
|
+
const provider = registry.getProvider(entry.kind);
|
|
819
|
+
if (provider) {
|
|
820
|
+
for (const file of entry.files) {
|
|
821
|
+
if (provider.matchesPath(path.join(entry.path, file).replace(/\\/g, "/"))) {
|
|
822
|
+
return file;
|
|
823
|
+
}
|
|
824
|
+
}
|
|
825
|
+
}
|
|
826
|
+
for (const file of entry.files) {
|
|
827
|
+
if (MANIFEST_FILENAMES.has(path.basename(file))) return file;
|
|
828
|
+
if (MANIFEST_SUFFIXES.some((s) => file.endsWith(s))) return file;
|
|
829
|
+
}
|
|
830
|
+
return entry.files[0];
|
|
831
|
+
}
|
|
832
|
+
function parseManifest(absPath) {
|
|
833
|
+
try {
|
|
834
|
+
const content = fs.readFileSync(absPath, "utf-8");
|
|
835
|
+
if (absPath.endsWith(".md")) {
|
|
836
|
+
const { data } = parseFrontmatter(content);
|
|
837
|
+
return data;
|
|
838
|
+
}
|
|
839
|
+
if (absPath.endsWith(".yaml") || absPath.endsWith(".yml")) {
|
|
840
|
+
const parsed = yaml.load(content);
|
|
841
|
+
if (typeof parsed === "object" && parsed !== null) {
|
|
842
|
+
return parsed;
|
|
843
|
+
}
|
|
844
|
+
return null;
|
|
845
|
+
}
|
|
846
|
+
if (absPath.endsWith(".json")) {
|
|
847
|
+
return JSON.parse(content);
|
|
848
|
+
}
|
|
849
|
+
return null;
|
|
850
|
+
} catch {
|
|
851
|
+
return null;
|
|
852
|
+
}
|
|
853
|
+
}
|
|
854
|
+
function validateRequiresSyntax(requires) {
|
|
855
|
+
const errors = [];
|
|
856
|
+
const RE = /^@[\w-]+\/[\w.-]+(?:@.+)?$/;
|
|
857
|
+
for (const r of requires) {
|
|
858
|
+
if (!RE.test(r)) errors.push(`invalid requires entry "${r}"`);
|
|
859
|
+
}
|
|
860
|
+
return errors;
|
|
861
|
+
}
|
|
862
|
+
|
|
863
|
+
// discovery/src/discover.ts
|
|
864
|
+
function createDefaultRegistry() {
|
|
865
|
+
const registry = new AssetKindRegistry();
|
|
866
|
+
for (const provider of BUILTIN_PROVIDERS) {
|
|
867
|
+
registry.register(provider);
|
|
868
|
+
}
|
|
869
|
+
return registry;
|
|
870
|
+
}
|
|
871
|
+
function discoverAssetsInTree(rootPath, optionsOrSourceConfig) {
|
|
872
|
+
let sourceConfig;
|
|
873
|
+
let registry;
|
|
874
|
+
let sidecarPath;
|
|
875
|
+
if (optionsOrSourceConfig && ("registry" in optionsOrSourceConfig || "sourceConfig" in optionsOrSourceConfig || "sidecarPath" in optionsOrSourceConfig)) {
|
|
876
|
+
sourceConfig = optionsOrSourceConfig.sourceConfig;
|
|
877
|
+
registry = optionsOrSourceConfig.registry;
|
|
878
|
+
sidecarPath = optionsOrSourceConfig.sidecarPath;
|
|
879
|
+
} else {
|
|
880
|
+
sourceConfig = optionsOrSourceConfig;
|
|
881
|
+
}
|
|
882
|
+
if (!registry) {
|
|
883
|
+
registry = createDefaultRegistry();
|
|
884
|
+
}
|
|
885
|
+
if (!sourceConfig && sidecarPath) {
|
|
886
|
+
const merged = loadMergedSourceConfig(rootPath, sidecarPath);
|
|
887
|
+
if (merged.ok) {
|
|
888
|
+
sourceConfig = merged.config;
|
|
889
|
+
}
|
|
890
|
+
}
|
|
891
|
+
if (sourceConfig && isManifestMode(sourceConfig)) {
|
|
892
|
+
return discoverFromManifest(rootPath, sourceConfig, registry);
|
|
893
|
+
}
|
|
894
|
+
const assets = [];
|
|
895
|
+
const errors = [];
|
|
896
|
+
const allEdges = [];
|
|
897
|
+
const seen = /* @__PURE__ */ new Set();
|
|
898
|
+
for (const { absPath, relativePath } of walkTree(rootPath)) {
|
|
899
|
+
let kind;
|
|
900
|
+
try {
|
|
901
|
+
kind = registry.resolveKind(relativePath);
|
|
902
|
+
} catch (err) {
|
|
903
|
+
errors.push({
|
|
904
|
+
path: relativePath,
|
|
905
|
+
error: err instanceof Error ? err.message : String(err)
|
|
906
|
+
});
|
|
907
|
+
continue;
|
|
908
|
+
}
|
|
909
|
+
if (!kind) continue;
|
|
910
|
+
const dir = path.dirname(relativePath);
|
|
911
|
+
const dedupKey = `${dir}:${kind}`;
|
|
912
|
+
if (seen.has(dedupKey)) continue;
|
|
913
|
+
seen.add(dedupKey);
|
|
914
|
+
try {
|
|
915
|
+
const manifest = parseManifest2(absPath);
|
|
916
|
+
if (!manifest) {
|
|
917
|
+
errors.push({ path: relativePath, error: "Failed to parse manifest" });
|
|
918
|
+
continue;
|
|
919
|
+
}
|
|
920
|
+
const publisher = resolvePublisher(relativePath, sourceConfig);
|
|
921
|
+
const name = deriveName(relativePath, kind, manifest);
|
|
922
|
+
const version = typeof manifest.version === "string" ? manifest.version : "0.0.0";
|
|
923
|
+
const ref = `${publisher}/${name}@${version}`;
|
|
924
|
+
const fileFilter = registry.defaultFileFilter(kind, absPath) ?? {
|
|
925
|
+
assetRoot: path.dirname(absPath),
|
|
926
|
+
files: [path.basename(absPath)]
|
|
927
|
+
};
|
|
928
|
+
const sha256 = computeDeterministicHash(fileFilter.assetRoot, fileFilter.files);
|
|
929
|
+
const requires = registry.extractRequires(kind, ref, manifest);
|
|
930
|
+
allEdges.push(...requires);
|
|
931
|
+
assets.push({
|
|
932
|
+
ref,
|
|
933
|
+
kind,
|
|
934
|
+
publisher,
|
|
935
|
+
name,
|
|
936
|
+
version,
|
|
937
|
+
manifest,
|
|
938
|
+
manifestPath: absPath,
|
|
939
|
+
relativePath,
|
|
940
|
+
fileFilter,
|
|
941
|
+
sha256,
|
|
942
|
+
requires
|
|
943
|
+
});
|
|
944
|
+
} catch (err) {
|
|
945
|
+
errors.push({
|
|
946
|
+
path: relativePath,
|
|
947
|
+
error: err instanceof Error ? err.message : String(err)
|
|
948
|
+
});
|
|
949
|
+
}
|
|
950
|
+
}
|
|
951
|
+
const graph = buildRequiresGraph(allEdges);
|
|
952
|
+
return { assets, graph, errors };
|
|
953
|
+
}
|
|
954
|
+
function* walkTree(rootDir) {
|
|
955
|
+
function* walk(dir, relDir) {
|
|
956
|
+
let entries;
|
|
957
|
+
try {
|
|
958
|
+
entries = fs.readdirSync(dir, { withFileTypes: true });
|
|
959
|
+
} catch {
|
|
960
|
+
return;
|
|
961
|
+
}
|
|
962
|
+
for (const e of entries.sort((a, b) => a.name < b.name ? -1 : 1)) {
|
|
963
|
+
const full = path.join(dir, e.name);
|
|
964
|
+
const rel = relDir ? `${relDir}/${e.name}` : e.name;
|
|
965
|
+
if (e.isDirectory()) {
|
|
966
|
+
if (e.name === ".git" || e.name === "node_modules" || e.name === ".skaile") continue;
|
|
967
|
+
yield* walk(full, rel);
|
|
968
|
+
} else if (e.isFile()) {
|
|
969
|
+
yield { absPath: full, relativePath: rel };
|
|
970
|
+
}
|
|
971
|
+
}
|
|
972
|
+
}
|
|
973
|
+
yield* walk(rootDir, "");
|
|
974
|
+
}
|
|
975
|
+
function parseManifest2(absPath) {
|
|
976
|
+
try {
|
|
977
|
+
const content = fs.readFileSync(absPath, "utf-8");
|
|
978
|
+
if (absPath.endsWith(".md")) {
|
|
979
|
+
const { data } = parseFrontmatter(content);
|
|
980
|
+
return data;
|
|
981
|
+
}
|
|
982
|
+
if (absPath.endsWith(".yaml") || absPath.endsWith(".yml")) {
|
|
983
|
+
const parsed = yaml.load(content);
|
|
984
|
+
if (typeof parsed === "object" && parsed !== null) {
|
|
985
|
+
return parsed;
|
|
986
|
+
}
|
|
987
|
+
return null;
|
|
988
|
+
}
|
|
989
|
+
if (absPath.endsWith(".json")) {
|
|
990
|
+
return JSON.parse(content);
|
|
991
|
+
}
|
|
992
|
+
return null;
|
|
993
|
+
} catch {
|
|
994
|
+
return null;
|
|
995
|
+
}
|
|
996
|
+
}
|
|
997
|
+
function resolvePublisher(relativePath, sourceConfig) {
|
|
998
|
+
if (!sourceConfig) {
|
|
999
|
+
const domain = relativePath.split("/")[0] ?? "unknown";
|
|
1000
|
+
return `@${domain}`;
|
|
1001
|
+
}
|
|
1002
|
+
for (const override of sourceConfig.publisher_overrides) {
|
|
1003
|
+
if (relativePath.startsWith(override.path)) {
|
|
1004
|
+
return override.publisher;
|
|
1005
|
+
}
|
|
1006
|
+
}
|
|
1007
|
+
const template = sourceConfig.publisher_default;
|
|
1008
|
+
if (template.includes("<domain>")) {
|
|
1009
|
+
const domain = relativePath.split("/")[0] ?? "unknown";
|
|
1010
|
+
return template.replace("<domain>", domain);
|
|
1011
|
+
}
|
|
1012
|
+
return template;
|
|
1013
|
+
}
|
|
1014
|
+
function deriveName(relativePath, kind, manifest) {
|
|
1015
|
+
if (typeof manifest.name === "string" && manifest.name.length > 0) {
|
|
1016
|
+
return manifest.name;
|
|
1017
|
+
}
|
|
1018
|
+
const parts = relativePath.split("/");
|
|
1019
|
+
if (kind === "flow") {
|
|
1020
|
+
const filename2 = parts[parts.length - 1] ?? "";
|
|
1021
|
+
return filename2.replace(/\.flow\.(yaml|json)$/, "");
|
|
1022
|
+
}
|
|
1023
|
+
if (kind === "prompt") {
|
|
1024
|
+
const filename2 = parts[parts.length - 1] ?? "";
|
|
1025
|
+
return filename2.replace(/\.prompt\.md$/, "");
|
|
1026
|
+
}
|
|
1027
|
+
if (kind === "preset") {
|
|
1028
|
+
const filename2 = parts[parts.length - 1] ?? "";
|
|
1029
|
+
return filename2.replace(/\.preset\.yaml$/, "");
|
|
1030
|
+
}
|
|
1031
|
+
if (parts.length >= 2) {
|
|
1032
|
+
return parts[parts.length - 2];
|
|
1033
|
+
}
|
|
1034
|
+
const filename = parts[parts.length - 1] ?? "unknown";
|
|
1035
|
+
return filename.replace(/\.(md|yaml|json)$/, "");
|
|
1036
|
+
}
|
|
1037
|
+
async function discoverAssetsInTreeEntries(entries, options) {
|
|
1038
|
+
const registry = options.registry ?? createDefaultRegistry();
|
|
1039
|
+
const blobByPath = /* @__PURE__ */ new Map();
|
|
1040
|
+
for (const entry of entries) {
|
|
1041
|
+
if (entry.type === "blob") {
|
|
1042
|
+
blobByPath.set(entry.path, entry);
|
|
1043
|
+
}
|
|
1044
|
+
}
|
|
1045
|
+
const baseSourceConfig = await resolveSourceConfigFromTree(
|
|
1046
|
+
options.sourceConfig,
|
|
1047
|
+
blobByPath,
|
|
1048
|
+
options.fetchBlob
|
|
1049
|
+
);
|
|
1050
|
+
const resolvedSourceConfig = options.sidecarSourceConfig ? mergeSourceConfigs(baseSourceConfig, options.sidecarSourceConfig) : baseSourceConfig;
|
|
1051
|
+
if (resolvedSourceConfig && isManifestMode(resolvedSourceConfig)) {
|
|
1052
|
+
return discoverFromManifestTree(resolvedSourceConfig, blobByPath, options.fetchBlob, registry);
|
|
1053
|
+
}
|
|
1054
|
+
const sortedBlobPaths = [...blobByPath.keys()].sort();
|
|
1055
|
+
const assets = [];
|
|
1056
|
+
const errors = [];
|
|
1057
|
+
const allEdges = [];
|
|
1058
|
+
const seen = /* @__PURE__ */ new Set();
|
|
1059
|
+
for (const relativePath of sortedBlobPaths) {
|
|
1060
|
+
if (relativePath.startsWith(".git/") || relativePath.startsWith("node_modules/") || relativePath.startsWith(".skaile/") || relativePath.includes("/.git/") || relativePath.includes("/node_modules/") || relativePath.includes("/.skaile/")) {
|
|
1061
|
+
continue;
|
|
1062
|
+
}
|
|
1063
|
+
let kind;
|
|
1064
|
+
try {
|
|
1065
|
+
kind = registry.resolveKind(relativePath);
|
|
1066
|
+
} catch (err) {
|
|
1067
|
+
errors.push({
|
|
1068
|
+
path: relativePath,
|
|
1069
|
+
error: err instanceof Error ? err.message : String(err)
|
|
1070
|
+
});
|
|
1071
|
+
continue;
|
|
1072
|
+
}
|
|
1073
|
+
if (!kind) continue;
|
|
1074
|
+
const dir = posixDirname(relativePath);
|
|
1075
|
+
const dedupKey = `${dir}:${kind}`;
|
|
1076
|
+
if (seen.has(dedupKey)) continue;
|
|
1077
|
+
seen.add(dedupKey);
|
|
1078
|
+
const manifestEntry = blobByPath.get(relativePath);
|
|
1079
|
+
if (!manifestEntry) {
|
|
1080
|
+
errors.push({ path: relativePath, error: "Manifest blob disappeared from tree index" });
|
|
1081
|
+
continue;
|
|
1082
|
+
}
|
|
1083
|
+
let manifestBytes;
|
|
1084
|
+
try {
|
|
1085
|
+
manifestBytes = await fetchAsBuffer(options.fetchBlob, manifestEntry.sha);
|
|
1086
|
+
} catch (err) {
|
|
1087
|
+
errors.push({
|
|
1088
|
+
path: relativePath,
|
|
1089
|
+
error: `Failed to fetch manifest blob: ${err instanceof Error ? err.message : String(err)}`
|
|
1090
|
+
});
|
|
1091
|
+
continue;
|
|
1092
|
+
}
|
|
1093
|
+
if (!manifestBytes) {
|
|
1094
|
+
errors.push({ path: relativePath, error: "Failed to fetch manifest blob" });
|
|
1095
|
+
continue;
|
|
1096
|
+
}
|
|
1097
|
+
const manifestText = manifestBytes.toString("utf-8");
|
|
1098
|
+
const manifest = parseManifestText(relativePath, manifestText);
|
|
1099
|
+
if (!manifest) {
|
|
1100
|
+
errors.push({ path: relativePath, error: "Failed to parse manifest" });
|
|
1101
|
+
continue;
|
|
1102
|
+
}
|
|
1103
|
+
const publisher = resolvePublisher2(relativePath, resolvedSourceConfig);
|
|
1104
|
+
const name = deriveName2(relativePath, kind, manifest);
|
|
1105
|
+
const version = typeof manifest.version === "string" ? manifest.version : "0.0.0";
|
|
1106
|
+
const ref = `${publisher}/${name}@${version}`;
|
|
1107
|
+
const fileFilter = computeFileFilter(kind, relativePath, blobByPath);
|
|
1108
|
+
let sha256;
|
|
1109
|
+
try {
|
|
1110
|
+
sha256 = await computeDeterministicHashFromTree(fileFilter, blobByPath, options.fetchBlob);
|
|
1111
|
+
} catch (err) {
|
|
1112
|
+
errors.push({
|
|
1113
|
+
path: relativePath,
|
|
1114
|
+
error: `Failed to compute hash: ${err instanceof Error ? err.message : String(err)}`
|
|
1115
|
+
});
|
|
1116
|
+
continue;
|
|
1117
|
+
}
|
|
1118
|
+
const requires = registry.extractRequires(kind, ref, manifest);
|
|
1119
|
+
allEdges.push(...requires);
|
|
1120
|
+
assets.push({
|
|
1121
|
+
ref,
|
|
1122
|
+
kind,
|
|
1123
|
+
publisher,
|
|
1124
|
+
name,
|
|
1125
|
+
version,
|
|
1126
|
+
manifest,
|
|
1127
|
+
// The tree-entries variant has no on-disk path — surface the
|
|
1128
|
+
// repo-relative path here so downstream consumers can build a
|
|
1129
|
+
// Manifest URL (raw.githubusercontent.com link).
|
|
1130
|
+
manifestPath: relativePath,
|
|
1131
|
+
relativePath,
|
|
1132
|
+
fileFilter,
|
|
1133
|
+
sha256,
|
|
1134
|
+
requires
|
|
1135
|
+
});
|
|
1136
|
+
}
|
|
1137
|
+
const graph = buildRequiresGraph(allEdges);
|
|
1138
|
+
return { assets, graph, errors };
|
|
1139
|
+
}
|
|
1140
|
+
function parseManifestText(relativePath, text) {
|
|
1141
|
+
try {
|
|
1142
|
+
if (relativePath.endsWith(".md")) {
|
|
1143
|
+
const { data } = parseFrontmatter(text);
|
|
1144
|
+
return data;
|
|
1145
|
+
}
|
|
1146
|
+
if (relativePath.endsWith(".yaml") || relativePath.endsWith(".yml")) {
|
|
1147
|
+
const parsed = yaml.load(text);
|
|
1148
|
+
if (typeof parsed === "object" && parsed !== null) {
|
|
1149
|
+
return parsed;
|
|
1150
|
+
}
|
|
1151
|
+
return null;
|
|
1152
|
+
}
|
|
1153
|
+
if (relativePath.endsWith(".json")) {
|
|
1154
|
+
return JSON.parse(text);
|
|
1155
|
+
}
|
|
1156
|
+
return null;
|
|
1157
|
+
} catch {
|
|
1158
|
+
return null;
|
|
1159
|
+
}
|
|
1160
|
+
}
|
|
1161
|
+
function resolvePublisher2(relativePath, sourceConfig) {
|
|
1162
|
+
if (!sourceConfig) {
|
|
1163
|
+
const domain = relativePath.split("/")[0] ?? "unknown";
|
|
1164
|
+
return `@${domain}`;
|
|
1165
|
+
}
|
|
1166
|
+
for (const override of sourceConfig.publisher_overrides) {
|
|
1167
|
+
if (relativePath.startsWith(override.path)) {
|
|
1168
|
+
return override.publisher;
|
|
1169
|
+
}
|
|
1170
|
+
}
|
|
1171
|
+
const template = sourceConfig.publisher_default;
|
|
1172
|
+
if (template.includes("<domain>")) {
|
|
1173
|
+
const domain = relativePath.split("/")[0] ?? "unknown";
|
|
1174
|
+
return template.replace("<domain>", domain);
|
|
1175
|
+
}
|
|
1176
|
+
return template;
|
|
1177
|
+
}
|
|
1178
|
+
function deriveName2(relativePath, kind, manifest) {
|
|
1179
|
+
if (typeof manifest.name === "string" && manifest.name.length > 0) {
|
|
1180
|
+
return manifest.name;
|
|
1181
|
+
}
|
|
1182
|
+
const parts = relativePath.split("/");
|
|
1183
|
+
if (kind === "flow") {
|
|
1184
|
+
const filename2 = parts[parts.length - 1] ?? "";
|
|
1185
|
+
return filename2.replace(/\.flow\.(yaml|json)$/, "");
|
|
1186
|
+
}
|
|
1187
|
+
if (kind === "prompt") {
|
|
1188
|
+
const filename2 = parts[parts.length - 1] ?? "";
|
|
1189
|
+
return filename2.replace(/\.prompt\.md$/, "");
|
|
1190
|
+
}
|
|
1191
|
+
if (kind === "preset") {
|
|
1192
|
+
const filename2 = parts[parts.length - 1] ?? "";
|
|
1193
|
+
return filename2.replace(/\.preset\.yaml$/, "");
|
|
1194
|
+
}
|
|
1195
|
+
if (parts.length >= 2) {
|
|
1196
|
+
return parts[parts.length - 2];
|
|
1197
|
+
}
|
|
1198
|
+
const filename = parts[parts.length - 1] ?? "unknown";
|
|
1199
|
+
return filename.replace(/\.(md|yaml|json)$/, "");
|
|
1200
|
+
}
|
|
1201
|
+
function computeFileFilter(kind, manifestPath, blobByPath) {
|
|
1202
|
+
const dir = posixDirname(manifestPath);
|
|
1203
|
+
const manifestName = posixBasename(manifestPath);
|
|
1204
|
+
switch (kind) {
|
|
1205
|
+
case "skill":
|
|
1206
|
+
return skillFilterVirtual(dir, manifestName, blobByPath);
|
|
1207
|
+
case "agent":
|
|
1208
|
+
return agentFilterVirtual(dir, manifestName, blobByPath);
|
|
1209
|
+
case "contract":
|
|
1210
|
+
return contractFilterVirtual(dir, manifestName, blobByPath);
|
|
1211
|
+
case "connector":
|
|
1212
|
+
return connectorFilterVirtual(dir, manifestName, blobByPath);
|
|
1213
|
+
case "mount":
|
|
1214
|
+
return mountFilterVirtual(dir, manifestName, blobByPath);
|
|
1215
|
+
// mcp-server, prompt, preset, persona, ruleset, knowledge: manifest-only
|
|
1216
|
+
default:
|
|
1217
|
+
return { assetRoot: dir, files: [manifestName] };
|
|
1218
|
+
}
|
|
1219
|
+
}
|
|
1220
|
+
function skillFilterVirtual(dir, manifestName, blobByPath) {
|
|
1221
|
+
const files = /* @__PURE__ */ new Set([manifestName]);
|
|
1222
|
+
for (const leaf of ["validator.py", "CLI.md"]) {
|
|
1223
|
+
if (blobByPath.has(joinPosix(dir, leaf))) files.add(leaf);
|
|
1224
|
+
}
|
|
1225
|
+
const directChildDirs = /* @__PURE__ */ new Set();
|
|
1226
|
+
for (const blobPath of blobByPath.keys()) {
|
|
1227
|
+
if (!isInDir(blobPath, dir)) continue;
|
|
1228
|
+
const remainder = blobPath.slice(dir === "" ? 0 : dir.length + 1);
|
|
1229
|
+
const slash = remainder.indexOf("/");
|
|
1230
|
+
if (slash === -1) continue;
|
|
1231
|
+
const childDir = remainder.slice(0, slash);
|
|
1232
|
+
directChildDirs.add(childDir);
|
|
1233
|
+
}
|
|
1234
|
+
if (directChildDirs.has("references")) {
|
|
1235
|
+
addAllUnder(files, dir, "references", blobByPath);
|
|
1236
|
+
}
|
|
1237
|
+
for (const childDir of directChildDirs) {
|
|
1238
|
+
if (childDir === "references") continue;
|
|
1239
|
+
if (blobByPath.has(joinPosix(dir, childDir, "SKILL.md"))) {
|
|
1240
|
+
addAllUnder(files, dir, childDir, blobByPath);
|
|
1241
|
+
}
|
|
1242
|
+
}
|
|
1243
|
+
return { assetRoot: dir, files: [...files].sort() };
|
|
1244
|
+
}
|
|
1245
|
+
function agentFilterVirtual(dir, manifestName, blobByPath) {
|
|
1246
|
+
const files = /* @__PURE__ */ new Set([manifestName]);
|
|
1247
|
+
for (const companion of ["SOUL.md", "RULES.md"]) {
|
|
1248
|
+
if (blobByPath.has(joinPosix(dir, companion))) files.add(companion);
|
|
1249
|
+
}
|
|
1250
|
+
addAllUnder(files, dir, "knowledge", blobByPath);
|
|
1251
|
+
return { assetRoot: dir, files: [...files].sort() };
|
|
1252
|
+
}
|
|
1253
|
+
function contractFilterVirtual(dir, manifestName, blobByPath) {
|
|
1254
|
+
const files = /* @__PURE__ */ new Set([manifestName]);
|
|
1255
|
+
for (const blobPath of blobByPath.keys()) {
|
|
1256
|
+
if (!isInDir(blobPath, dir)) continue;
|
|
1257
|
+
const remainder = blobPath.slice(dir === "" ? 0 : dir.length + 1);
|
|
1258
|
+
if (remainder.includes("/")) continue;
|
|
1259
|
+
files.add(remainder);
|
|
1260
|
+
}
|
|
1261
|
+
return { assetRoot: dir, files: [...files].sort() };
|
|
1262
|
+
}
|
|
1263
|
+
function connectorFilterVirtual(dir, manifestName, blobByPath) {
|
|
1264
|
+
const files = /* @__PURE__ */ new Set([manifestName]);
|
|
1265
|
+
if (blobByPath.has(joinPosix(dir, "adapter.ts"))) files.add("adapter.ts");
|
|
1266
|
+
return { assetRoot: dir, files: [...files].sort() };
|
|
1267
|
+
}
|
|
1268
|
+
function mountFilterVirtual(dir, manifestName, blobByPath) {
|
|
1269
|
+
const files = /* @__PURE__ */ new Set([manifestName]);
|
|
1270
|
+
if (blobByPath.has(joinPosix(dir, "driver.ts"))) files.add("driver.ts");
|
|
1271
|
+
return { assetRoot: dir, files: [...files].sort() };
|
|
1272
|
+
}
|
|
1273
|
+
async function computeDeterministicHashFromTree(fileFilter, blobByPath, fetchBlob) {
|
|
1274
|
+
const hash = crypto.createHash("sha256");
|
|
1275
|
+
const sorted = [...fileFilter.files].sort();
|
|
1276
|
+
for (const file of sorted) {
|
|
1277
|
+
const fullPath = joinPosix(fileFilter.assetRoot, file);
|
|
1278
|
+
const entry = blobByPath.get(fullPath);
|
|
1279
|
+
if (!entry) continue;
|
|
1280
|
+
hash.update(file);
|
|
1281
|
+
hash.update("\0");
|
|
1282
|
+
let bytes;
|
|
1283
|
+
try {
|
|
1284
|
+
bytes = await fetchAsBuffer(fetchBlob, entry.sha);
|
|
1285
|
+
} catch {
|
|
1286
|
+
bytes = null;
|
|
1287
|
+
}
|
|
1288
|
+
if (bytes) hash.update(bytes);
|
|
1289
|
+
hash.update("\0");
|
|
1290
|
+
}
|
|
1291
|
+
return hash.digest("hex");
|
|
1292
|
+
}
|
|
1293
|
+
function posixDirname(p) {
|
|
1294
|
+
const i = p.lastIndexOf("/");
|
|
1295
|
+
return i === -1 ? "" : p.slice(0, i);
|
|
1296
|
+
}
|
|
1297
|
+
function posixBasename(p) {
|
|
1298
|
+
const i = p.lastIndexOf("/");
|
|
1299
|
+
return i === -1 ? p : p.slice(i + 1);
|
|
1300
|
+
}
|
|
1301
|
+
function joinPosix(...segments) {
|
|
1302
|
+
return segments.filter((s) => s !== "").join("/");
|
|
1303
|
+
}
|
|
1304
|
+
function isInDir(blobPath, dir) {
|
|
1305
|
+
if (dir === "") return true;
|
|
1306
|
+
return blobPath.startsWith(`${dir}/`);
|
|
1307
|
+
}
|
|
1308
|
+
function addAllUnder(out, baseDir, subDir, blobByPath) {
|
|
1309
|
+
const prefix = baseDir === "" ? `${subDir}/` : `${baseDir}/${subDir}/`;
|
|
1310
|
+
for (const blobPath of blobByPath.keys()) {
|
|
1311
|
+
if (blobPath.startsWith(prefix)) {
|
|
1312
|
+
const relToAssetRoot = baseDir === "" ? blobPath : blobPath.slice(baseDir.length + 1);
|
|
1313
|
+
out.add(relToAssetRoot);
|
|
1314
|
+
} else if (blobPath === prefix.slice(0, -1)) {
|
|
1315
|
+
out.add(subDir);
|
|
1316
|
+
}
|
|
1317
|
+
}
|
|
1318
|
+
}
|
|
1319
|
+
async function fetchAsBuffer(fetchBlob, sha) {
|
|
1320
|
+
const result = await fetchBlob(sha);
|
|
1321
|
+
if (result == null) return null;
|
|
1322
|
+
if (Buffer.isBuffer(result)) return result;
|
|
1323
|
+
if (typeof result === "string") return Buffer.from(result, "utf-8");
|
|
1324
|
+
return Buffer.from(result);
|
|
1325
|
+
}
|
|
1326
|
+
async function resolveSourceConfigFromTree(explicit, blobByPath, fetchBlob) {
|
|
1327
|
+
if (explicit) return explicit;
|
|
1328
|
+
const entry = blobByPath.get(".skaile-source.yaml");
|
|
1329
|
+
if (!entry) return void 0;
|
|
1330
|
+
const bytes = await fetchAsBuffer(fetchBlob, entry.sha);
|
|
1331
|
+
if (!bytes) return void 0;
|
|
1332
|
+
const result = loadSourceConfig(bytes.toString("utf-8"));
|
|
1333
|
+
return result.ok ? result.config : void 0;
|
|
1334
|
+
}
|
|
1335
|
+
async function discoverFromManifestTree(sourceConfig, blobByPath, fetchBlob, registry) {
|
|
1336
|
+
const assets = [];
|
|
1337
|
+
const errors = [];
|
|
1338
|
+
const allEdges = [];
|
|
1339
|
+
const sortedEntries = [...sourceConfig.assets].sort((a, b) => a.path < b.path ? -1 : 1);
|
|
1340
|
+
for (const entry of sortedEntries) {
|
|
1341
|
+
const result = await processManifestEntryTree(entry, blobByPath, fetchBlob, registry);
|
|
1342
|
+
if (result.errors.length > 0) {
|
|
1343
|
+
errors.push(...result.errors);
|
|
1344
|
+
if (!result.asset) continue;
|
|
1345
|
+
}
|
|
1346
|
+
if (result.asset) {
|
|
1347
|
+
assets.push(result.asset);
|
|
1348
|
+
allEdges.push(...result.asset.requires);
|
|
1349
|
+
}
|
|
1350
|
+
}
|
|
1351
|
+
const graph = buildRequiresGraph(allEdges);
|
|
1352
|
+
return { assets, graph, errors };
|
|
1353
|
+
}
|
|
1354
|
+
async function processManifestEntryTree(entry, blobByPath, fetchBlob, registry) {
|
|
1355
|
+
const errors = [];
|
|
1356
|
+
const assetRootRelative = entry.path;
|
|
1357
|
+
const missing = [];
|
|
1358
|
+
for (const file of entry.files) {
|
|
1359
|
+
const full = joinPosix(entry.path, file);
|
|
1360
|
+
if (!blobByPath.has(full)) missing.push(file);
|
|
1361
|
+
}
|
|
1362
|
+
if (missing.length > 0) {
|
|
1363
|
+
errors.push({
|
|
1364
|
+
path: assetRootRelative,
|
|
1365
|
+
error: `ManifestFileMissing: ${missing.join(", ")}`
|
|
1366
|
+
});
|
|
1367
|
+
return { asset: null, errors };
|
|
1368
|
+
}
|
|
1369
|
+
const manifestFileRel = pickManifestFileTree(entry, registry);
|
|
1370
|
+
const manifestFull = joinPosix(entry.path, manifestFileRel);
|
|
1371
|
+
const manifestEntry = blobByPath.get(manifestFull);
|
|
1372
|
+
let manifestBytes;
|
|
1373
|
+
try {
|
|
1374
|
+
manifestBytes = await fetchAsBuffer(fetchBlob, manifestEntry.sha);
|
|
1375
|
+
} catch (err) {
|
|
1376
|
+
errors.push({
|
|
1377
|
+
path: assetRootRelative,
|
|
1378
|
+
error: `ManifestSchemaError: failed to fetch manifest blob: ${err instanceof Error ? err.message : String(err)}`
|
|
1379
|
+
});
|
|
1380
|
+
return { asset: null, errors };
|
|
1381
|
+
}
|
|
1382
|
+
if (!manifestBytes) {
|
|
1383
|
+
errors.push({
|
|
1384
|
+
path: assetRootRelative,
|
|
1385
|
+
error: `ManifestSchemaError: failed to fetch manifest blob`
|
|
1386
|
+
});
|
|
1387
|
+
return { asset: null, errors };
|
|
1388
|
+
}
|
|
1389
|
+
const manifest = parseManifestText(manifestFull, manifestBytes.toString("utf-8"));
|
|
1390
|
+
if (!manifest) {
|
|
1391
|
+
errors.push({
|
|
1392
|
+
path: assetRootRelative,
|
|
1393
|
+
error: `ManifestSchemaError: failed to parse manifest file ${manifestFileRel}`
|
|
1394
|
+
});
|
|
1395
|
+
return { asset: null, errors };
|
|
1396
|
+
}
|
|
1397
|
+
if (!registry.getProvider(entry.kind)) {
|
|
1398
|
+
errors.push({
|
|
1399
|
+
path: assetRootRelative,
|
|
1400
|
+
error: `Unknown asset kind "${entry.kind}" \u2014 ghost-installing without provider validation`
|
|
1401
|
+
});
|
|
1402
|
+
}
|
|
1403
|
+
const requiresErrors = validateRequiresSyntax2(entry.requires);
|
|
1404
|
+
if (requiresErrors.length > 0) {
|
|
1405
|
+
errors.push({
|
|
1406
|
+
path: assetRootRelative,
|
|
1407
|
+
error: `ManifestRequiresError: ${requiresErrors.join("; ")}`
|
|
1408
|
+
});
|
|
1409
|
+
return { asset: null, errors };
|
|
1410
|
+
}
|
|
1411
|
+
let computedHash;
|
|
1412
|
+
try {
|
|
1413
|
+
computedHash = await computeManifestHashTree(entry, blobByPath, fetchBlob);
|
|
1414
|
+
} catch (err) {
|
|
1415
|
+
errors.push({
|
|
1416
|
+
path: assetRootRelative,
|
|
1417
|
+
error: `Failed to compute hash: ${err instanceof Error ? err.message : String(err)}`
|
|
1418
|
+
});
|
|
1419
|
+
return { asset: null, errors };
|
|
1420
|
+
}
|
|
1421
|
+
if (entry.sha256 && entry.sha256 !== computedHash) {
|
|
1422
|
+
errors.push({
|
|
1423
|
+
path: assetRootRelative,
|
|
1424
|
+
error: `ManifestHashMismatch: declared ${entry.sha256}, computed ${computedHash}`
|
|
1425
|
+
});
|
|
1426
|
+
return { asset: null, errors };
|
|
1427
|
+
}
|
|
1428
|
+
if (!entry.sha256) {
|
|
1429
|
+
errors.push({
|
|
1430
|
+
path: assetRootRelative,
|
|
1431
|
+
error: `Missing sha256 \u2014 computed ${computedHash}. Re-run \`skaile source build-manifest --write\` to pin it.`
|
|
1432
|
+
});
|
|
1433
|
+
}
|
|
1434
|
+
const ref = `${entry.publisher}/${entry.name}@${entry.version}`;
|
|
1435
|
+
const requires = entry.requires.map((to) => ({
|
|
1436
|
+
from: ref,
|
|
1437
|
+
to,
|
|
1438
|
+
field: "assets[].requires"
|
|
1439
|
+
}));
|
|
1440
|
+
const mergedManifest = {
|
|
1441
|
+
...entry.metadata ?? {},
|
|
1442
|
+
...manifest
|
|
1443
|
+
};
|
|
1444
|
+
const asset = {
|
|
1445
|
+
ref,
|
|
1446
|
+
kind: entry.kind,
|
|
1447
|
+
publisher: entry.publisher,
|
|
1448
|
+
name: entry.name,
|
|
1449
|
+
version: entry.version,
|
|
1450
|
+
manifest: mergedManifest,
|
|
1451
|
+
manifestPath: manifestFull,
|
|
1452
|
+
relativePath: manifestFull,
|
|
1453
|
+
fileFilter: {
|
|
1454
|
+
assetRoot: entry.path,
|
|
1455
|
+
files: [...entry.files].sort()
|
|
1456
|
+
},
|
|
1457
|
+
sha256: computedHash,
|
|
1458
|
+
requires
|
|
1459
|
+
};
|
|
1460
|
+
return { asset, errors };
|
|
1461
|
+
}
|
|
1462
|
+
var MANIFEST_FILENAMES2 = /* @__PURE__ */ new Set([
|
|
1463
|
+
"SKILL.md",
|
|
1464
|
+
"AGENT.md",
|
|
1465
|
+
"agent.yaml",
|
|
1466
|
+
"CONNECTOR.md",
|
|
1467
|
+
"MOUNT.md",
|
|
1468
|
+
"MCP.md",
|
|
1469
|
+
"CONTRACT.md",
|
|
1470
|
+
"PERSONA.md",
|
|
1471
|
+
"RULESET.md"
|
|
1472
|
+
]);
|
|
1473
|
+
var MANIFEST_SUFFIXES2 = [".flow.yaml", ".flow.json", ".prompt.md", ".preset.yaml"];
|
|
1474
|
+
function pickManifestFileTree(entry, registry) {
|
|
1475
|
+
const provider = registry.getProvider(entry.kind);
|
|
1476
|
+
if (provider) {
|
|
1477
|
+
for (const file of entry.files) {
|
|
1478
|
+
if (provider.matchesPath(joinPosix(entry.path, file))) return file;
|
|
1479
|
+
}
|
|
1480
|
+
}
|
|
1481
|
+
for (const file of entry.files) {
|
|
1482
|
+
const base = file.split("/").pop() ?? file;
|
|
1483
|
+
if (MANIFEST_FILENAMES2.has(base)) return file;
|
|
1484
|
+
if (MANIFEST_SUFFIXES2.some((s) => file.endsWith(s))) return file;
|
|
1485
|
+
}
|
|
1486
|
+
return entry.files[0];
|
|
1487
|
+
}
|
|
1488
|
+
async function computeManifestHashTree(entry, blobByPath, fetchBlob) {
|
|
1489
|
+
const hash = crypto.createHash("sha256");
|
|
1490
|
+
const sorted = [...entry.files].sort();
|
|
1491
|
+
for (const file of sorted) {
|
|
1492
|
+
const full = joinPosix(entry.path, file);
|
|
1493
|
+
const blob = blobByPath.get(full);
|
|
1494
|
+
if (!blob) continue;
|
|
1495
|
+
hash.update(file);
|
|
1496
|
+
hash.update("\0");
|
|
1497
|
+
const bytes = await fetchAsBuffer(fetchBlob, blob.sha);
|
|
1498
|
+
if (bytes) hash.update(bytes);
|
|
1499
|
+
hash.update("\0");
|
|
1500
|
+
}
|
|
1501
|
+
return hash.digest("hex");
|
|
1502
|
+
}
|
|
1503
|
+
function validateRequiresSyntax2(requires) {
|
|
1504
|
+
const errors = [];
|
|
1505
|
+
const RE = /^@[\w-]+\/[\w.-]+(?:@.+)?$/;
|
|
1506
|
+
for (const r of requires) {
|
|
1507
|
+
if (!RE.test(r)) errors.push(`invalid requires entry "${r}"`);
|
|
1508
|
+
}
|
|
1509
|
+
return errors;
|
|
1510
|
+
}
|
|
1511
|
+
|
|
1512
|
+
// discovery/src/index.ts
|
|
1513
|
+
var VERSION = "0.0.0";
|
|
1514
|
+
|
|
1515
|
+
export { AssetKindRegistry, BUILTIN_PROVIDERS, SEMVER_RE, SourceConfigSchema, VERSION, agentProvider, buildRequiresGraph, computeDeterministicHash, computeDeterministicHashDetailed, connectorProvider, contractProvider, createDefaultRegistry, detectCycles, discoverAssetsInTree, discoverAssetsInTreeEntries, discoverFromManifest, extractRequires, isManifestMode, loadMergedSourceConfig, loadSourceConfig, mcpServerProvider, mergeSourceConfigs, mountProvider, parseSourceConfig, personaProvider, presetProvider, promptProvider, rulesetProvider, skillProvider, validateSourceConfig };
|
|
1516
|
+
//# sourceMappingURL=chunk-46T37EBP.js.map
|
|
1517
|
+
//# sourceMappingURL=chunk-46T37EBP.js.map
|