@skaile/workspaces 0.29.1 → 0.31.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +63 -0
- package/dist/{asset-feeds-2V7LZIG7.js → asset-feeds-6HZDZEIT.js} +14 -13
- package/dist/asset-feeds-6HZDZEIT.js.map +1 -0
- package/dist/asset-manager/index.js +12 -12
- package/dist/asset-manager/installer.js +11 -11
- package/dist/asset-manager/renderers.js +2 -2
- package/dist/asset-manager/src/index.d.ts +27 -0
- package/dist/asset-manager/src/index.d.ts.map +1 -1
- package/dist/asset-manager/src/install-agent.d.ts.map +1 -1
- package/dist/asset-manager/src/installer.d.ts +1 -2
- package/dist/asset-manager/src/installer.d.ts.map +1 -1
- package/dist/asset-manager/src/renderers.d.ts.map +1 -1
- package/dist/bridge/drivers/claude-sdk.js +354 -224
- package/dist/bridge/drivers/claude-sdk.js.map +1 -1
- package/dist/bridge/drivers/codex.js +3 -3
- package/dist/bridge/drivers/codex.js.map +1 -1
- package/dist/bridge/drivers/continue.js +4 -4
- package/dist/bridge/drivers/echo.js +2 -2
- package/dist/bridge/drivers/echo.js.map +1 -1
- package/dist/bridge/drivers/gemini.js +5 -5
- package/dist/bridge/drivers/goose.js +4 -4
- package/dist/bridge/drivers/omp.js +3 -3
- package/dist/bridge/drivers/opencode.js +4 -4
- package/dist/bridge/drivers/qwen.js +5 -5
- package/dist/bridge/index.js +4 -4
- package/dist/bridge/src/drivers/claude-sdk.d.ts +68 -0
- package/dist/bridge/src/drivers/claude-sdk.d.ts.map +1 -1
- package/dist/bridge/src/drivers/echo.d.ts +1 -1
- package/dist/bridge/src/drivers/echo.d.ts.map +1 -1
- package/dist/bridge/src/error-classifier.d.ts.map +1 -1
- package/dist/bridge/src/normalizer.d.ts +5 -0
- package/dist/bridge/src/normalizer.d.ts.map +1 -1
- package/dist/{chunk-LDUNTZB6.js → chunk-26L2B6P6.js} +2 -2
- package/dist/{chunk-LDUNTZB6.js.map → chunk-26L2B6P6.js.map} +1 -1
- package/dist/{chunk-DVMSGGCM.js → chunk-45RKEHPX.js} +158 -108
- package/dist/chunk-45RKEHPX.js.map +1 -0
- package/dist/{chunk-2FS4FPZ7.js → chunk-4AGIEU7V.js} +44 -62
- package/dist/chunk-4AGIEU7V.js.map +1 -0
- package/dist/{chunk-SF4GWVR5.js → chunk-4CRKROS5.js} +86 -55
- package/dist/chunk-4CRKROS5.js.map +1 -0
- package/dist/{chunk-ZONCCO5N.js → chunk-4R6DROGN.js} +30 -32
- package/dist/chunk-4R6DROGN.js.map +1 -0
- package/dist/{chunk-MBOR7D65.js → chunk-67MFR5LS.js} +3 -3
- package/dist/{chunk-MBOR7D65.js.map → chunk-67MFR5LS.js.map} +1 -1
- package/dist/{chunk-7GWYRVAX.js → chunk-6LW7Q53Z.js} +162 -165
- package/dist/chunk-6LW7Q53Z.js.map +1 -0
- package/dist/{chunk-QMONOHXT.js → chunk-74UKG2LA.js} +3 -3
- package/dist/{chunk-QMONOHXT.js.map → chunk-74UKG2LA.js.map} +1 -1
- package/dist/{chunk-AKSR434V.js → chunk-7FLLPKX3.js} +79 -56
- package/dist/chunk-7FLLPKX3.js.map +1 -0
- package/dist/{chunk-BZ2JU7IP.js → chunk-7KOBITAP.js} +5 -5
- package/dist/{chunk-BZ2JU7IP.js.map → chunk-7KOBITAP.js.map} +1 -1
- package/dist/{chunk-JIQLLZ65.js → chunk-7MANNJ3U.js} +534 -235
- package/dist/chunk-7MANNJ3U.js.map +1 -0
- package/dist/{chunk-7R6W5EQR.js → chunk-ACXLKNIM.js} +2 -2
- package/dist/{chunk-7R6W5EQR.js.map → chunk-ACXLKNIM.js.map} +1 -1
- package/dist/{chunk-UIZKIUC6.js → chunk-BRBOC53X.js} +3 -3
- package/dist/chunk-BRBOC53X.js.map +1 -0
- package/dist/{chunk-FWHOU3CX.js → chunk-CBIPUBUS.js} +6 -6
- package/dist/{chunk-FWHOU3CX.js.map → chunk-CBIPUBUS.js.map} +1 -1
- package/dist/{chunk-3QQSSRYN.js → chunk-DKAV43NI.js} +430 -346
- package/dist/chunk-DKAV43NI.js.map +1 -0
- package/dist/{chunk-M4KLIEIJ.js → chunk-G247J4MC.js} +3 -3
- package/dist/chunk-G247J4MC.js.map +1 -0
- package/dist/{chunk-TV72ZJYN.js → chunk-GXC3TYMQ.js} +60 -47
- package/dist/chunk-GXC3TYMQ.js.map +1 -0
- package/dist/{chunk-IERB3UXJ.js → chunk-H5YXL4KI.js} +83 -69
- package/dist/chunk-H5YXL4KI.js.map +1 -0
- package/dist/{chunk-2NOE4AGD.js → chunk-HH62ECJ7.js} +3 -3
- package/dist/{chunk-2NOE4AGD.js.map → chunk-HH62ECJ7.js.map} +1 -1
- package/dist/{chunk-QDJKE557.js → chunk-HRKB2ATT.js} +64 -64
- package/dist/chunk-HRKB2ATT.js.map +1 -0
- package/dist/{chunk-MLJKA3S6.js → chunk-IENYMRZ6.js} +1711 -1497
- package/dist/chunk-IENYMRZ6.js.map +1 -0
- package/dist/{chunk-24UIWON4.js → chunk-JB35MVBN.js} +167 -156
- package/dist/chunk-JB35MVBN.js.map +1 -0
- package/dist/{chunk-5YO3H5Q4.js → chunk-KY5NY7LB.js} +3 -3
- package/dist/chunk-KY5NY7LB.js.map +1 -0
- package/dist/{chunk-MIH45XPY.js → chunk-LA2YSXEE.js} +1974 -1919
- package/dist/chunk-LA2YSXEE.js.map +1 -0
- package/dist/{chunk-IEJ5IOC3.js → chunk-LFDZYCEO.js} +4 -2
- package/dist/chunk-LFDZYCEO.js.map +1 -0
- package/dist/{chunk-72IA6BTP.js → chunk-MWAEOCU7.js} +9 -9
- package/dist/{chunk-72IA6BTP.js.map → chunk-MWAEOCU7.js.map} +1 -1
- package/dist/{chunk-5V5KZQIC.js → chunk-NGE6PALH.js} +4 -4
- package/dist/{chunk-5V5KZQIC.js.map → chunk-NGE6PALH.js.map} +1 -1
- package/dist/{chunk-PAYAFNXG.js → chunk-NGJ6E344.js} +104 -74
- package/dist/chunk-NGJ6E344.js.map +1 -0
- package/dist/{chunk-UBCZVONU.js → chunk-NQC7ZUXE.js} +3 -3
- package/dist/{chunk-UBCZVONU.js.map → chunk-NQC7ZUXE.js.map} +1 -1
- package/dist/{chunk-ZEKWHJBB.js → chunk-OEXA7BBK.js} +3 -3
- package/dist/{chunk-ZEKWHJBB.js.map → chunk-OEXA7BBK.js.map} +1 -1
- package/dist/{chunk-5RBPPBEK.js → chunk-P72K36PU.js} +4 -4
- package/dist/{chunk-5RBPPBEK.js.map → chunk-P72K36PU.js.map} +1 -1
- package/dist/{chunk-OTFG5Q7H.js → chunk-QF6LBS2C.js} +4594 -4480
- package/dist/chunk-QF6LBS2C.js.map +1 -0
- package/dist/{chunk-HK5FRWG6.js → chunk-R6O6YWU7.js} +2 -2
- package/dist/{chunk-HK5FRWG6.js.map → chunk-R6O6YWU7.js.map} +1 -1
- package/dist/{chunk-PRLD7EXG.js → chunk-SBGHNXJD.js} +2 -2
- package/dist/{chunk-PRLD7EXG.js.map → chunk-SBGHNXJD.js.map} +1 -1
- package/dist/{chunk-CMG3GJ6B.js → chunk-VO7QQ76S.js} +4 -4
- package/dist/{chunk-CMG3GJ6B.js.map → chunk-VO7QQ76S.js.map} +1 -1
- package/dist/{chunk-Z3XXKR5E.js → chunk-WDMH4UMD.js} +4 -6
- package/dist/chunk-WDMH4UMD.js.map +1 -0
- package/dist/{chunk-W7W66MDZ.js → chunk-X46FY45B.js} +44 -42
- package/dist/chunk-X46FY45B.js.map +1 -0
- package/dist/{chunk-JKNWJ64A.js → chunk-XGCXFX7X.js} +2 -2
- package/dist/{chunk-JKNWJ64A.js.map → chunk-XGCXFX7X.js.map} +1 -1
- package/dist/{chunk-FQHHCICT.js → chunk-XVDXGQ55.js} +226 -226
- package/dist/chunk-XVDXGQ55.js.map +1 -0
- package/dist/{chunk-OKRUTSG7.js → chunk-ZDKJHQY2.js} +2 -2
- package/dist/{chunk-OKRUTSG7.js.map → chunk-ZDKJHQY2.js.map} +1 -1
- package/dist/{chunk-LD4QIVBY.js → chunk-ZM7UOJR2.js} +3 -3
- package/dist/{chunk-LD4QIVBY.js.map → chunk-ZM7UOJR2.js.map} +1 -1
- package/dist/cli/index.js +2811 -2662
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/src/asset-feeds.d.ts +0 -9
- package/dist/cli/src/asset-feeds.d.ts.map +1 -1
- package/dist/cli/src/commands/catalog-cmd.d.ts.map +1 -1
- package/dist/cli/src/commands/catalog.d.ts.map +1 -1
- package/dist/cli/src/commands/config.d.ts.map +1 -1
- package/dist/cli/src/commands/deploy.d.ts.map +1 -1
- package/dist/cli/src/commands/integration.d.ts.map +1 -1
- package/dist/cli/src/commands/library-cmd.d.ts.map +1 -1
- package/dist/cli/src/commands/manage.d.ts.map +1 -1
- package/dist/cli/src/commands/preset-cmd.d.ts.map +1 -1
- package/dist/cli/src/commands/project.d.ts +1 -1
- package/dist/cli/src/commands/project.d.ts.map +1 -1
- package/dist/cli/src/commands/show.d.ts.map +1 -1
- package/dist/cli/src/commands/source.d.ts.map +1 -1
- package/dist/cli/src/commands/validate.d.ts.map +1 -1
- package/dist/cli/src/ensure-sources.d.ts.map +1 -1
- package/dist/cli/src/flow-discovery.d.ts.map +1 -1
- package/dist/cli/src/open-registry.d.ts.map +1 -1
- package/dist/cli/src/plugin-store/index.d.ts +4 -6
- package/dist/cli/src/plugin-store/index.d.ts.map +1 -1
- package/dist/cli/src/plugin-store/paths.d.ts +0 -2
- package/dist/cli/src/plugin-store/paths.d.ts.map +1 -1
- package/dist/cli/src/setup.d.ts.map +1 -1
- package/dist/connectors/config.js +9 -9
- package/dist/connectors/index.js +12 -12
- package/dist/connectors/rclone.js +2 -2
- package/dist/connectors/src/connector-prompt.d.ts.map +1 -1
- package/dist/connectors/src/connector-registry.d.ts.map +1 -1
- package/dist/connectors/src/connector-types.d.ts +1 -1
- package/dist/connectors/src/connector-types.d.ts.map +1 -1
- package/dist/connectors/src/index.d.ts +5 -5
- package/dist/connectors/src/index.d.ts.map +1 -1
- package/dist/connectors/src/managed-gitconfig.d.ts.map +1 -1
- package/dist/{connectors-PTCSHCHZ.js → connectors-DY7UBBV5.js} +3 -3
- package/dist/{connectors-PTCSHCHZ.js.map → connectors-DY7UBBV5.js.map} +1 -1
- package/dist/connectors-shared/src/index.d.ts +1 -1
- package/dist/connectors-shared/src/index.d.ts.map +1 -1
- package/dist/core/index.js +8 -8
- package/dist/core/logging.js +1 -1
- package/dist/core/manifest.js +2 -2
- package/dist/core/models.js +1 -1
- package/dist/core/publish-manifest.js +2 -2
- package/dist/core/runtime-assets.js +5 -5
- package/dist/core/src/lock.d.ts +0 -9
- package/dist/core/src/lock.d.ts.map +1 -1
- package/dist/core/src/logging/create-logger.d.ts.map +1 -1
- package/dist/core/src/logging/index.d.ts +11 -11
- package/dist/core/src/logging/index.d.ts.map +1 -1
- package/dist/core/src/logging/log-store.d.ts.map +1 -1
- package/dist/core/src/logging/sinks/no-op-sink.d.ts.map +1 -1
- package/dist/core/src/logging/sinks/sqlite-sink.d.ts.map +1 -1
- package/dist/core/src/manifest.d.ts.map +1 -1
- package/dist/core/src/models.d.ts +6 -0
- package/dist/core/src/models.d.ts.map +1 -1
- package/dist/core/src/publish-manifest.d.ts.map +1 -1
- package/dist/core/src/repo-manager.d.ts +0 -12
- package/dist/core/src/repo-manager.d.ts.map +1 -1
- package/dist/core/src/runtime-assets.d.ts.map +1 -1
- package/dist/core/src/store.d.ts +1 -1
- package/dist/core/src/store.d.ts.map +1 -1
- package/dist/core/src/walker.d.ts.map +1 -1
- package/dist/core/src/workspace-config.d.ts +8 -27
- package/dist/core/src/workspace-config.d.ts.map +1 -1
- package/dist/core/store.js +1 -1
- package/dist/core/workspace-config.js +4 -4
- package/dist/deploy/index.js +8 -8
- package/dist/discovery/index.js +6 -6
- package/dist/discovery/src/asset-kind-registry.d.ts +1 -1
- package/dist/discovery/src/asset-kind-registry.d.ts.map +1 -1
- package/dist/discovery/src/builtin-providers.d.ts.map +1 -1
- package/dist/discovery/src/discover-manifest.d.ts +1 -1
- package/dist/discovery/src/discover-manifest.d.ts.map +1 -1
- package/dist/discovery/src/discover.d.ts +30 -3
- package/dist/discovery/src/discover.d.ts.map +1 -1
- package/dist/discovery/src/domains.d.ts +144 -0
- package/dist/discovery/src/domains.d.ts.map +1 -0
- package/dist/discovery/src/index.d.ts +9 -7
- package/dist/discovery/src/index.d.ts.map +1 -1
- package/dist/discovery/src/source-config.d.ts +1 -1
- package/dist/discovery/src/source-config.d.ts.map +1 -1
- package/dist/discovery/src/tree-entries.d.ts +13 -1
- package/dist/discovery/src/tree-entries.d.ts.map +1 -1
- package/dist/ensure-sources-JWBUVDW6.js +84 -0
- package/dist/ensure-sources-JWBUVDW6.js.map +1 -0
- package/dist/factory-assets/connectors/deploy/adapter.d.ts +1 -1
- package/dist/factory-assets/connectors/deploy/adapter.d.ts.map +1 -1
- package/dist/factory-assets/connectors/deploy.js +12 -12
- package/dist/factory-assets/connectors/devserver/adapter.d.ts +1 -1
- package/dist/factory-assets/connectors/devserver/adapter.d.ts.map +1 -1
- package/dist/factory-assets/connectors/devserver.js +12 -12
- package/dist/factory-assets/connectors/flow/adapter.d.ts +16 -2
- package/dist/factory-assets/connectors/flow/adapter.d.ts.map +1 -1
- package/dist/factory-assets/connectors/flow/adapter.js +12 -12
- package/dist/factory-assets/connectors/flow/engine/flow-kind-provider.d.ts.map +1 -1
- package/dist/factory-assets/connectors/flow/engine/index.d.ts +3 -3
- package/dist/factory-assets/connectors/flow/engine/index.d.ts.map +1 -1
- package/dist/factory-assets/connectors/flow/engine.js +9 -9
- package/dist/factory-assets/connectors/flow/index.d.ts +1 -1
- package/dist/factory-assets/connectors/flow/index.d.ts.map +1 -1
- package/dist/factory-assets/connectors/flow/run-flow.js +15 -15
- package/dist/factory-assets/connectors/flow.js +12 -12
- package/dist/factory-assets/connectors/git/driver.d.ts +32 -0
- package/dist/factory-assets/connectors/git/driver.d.ts.map +1 -1
- package/dist/factory-assets/connectors/git.js +12 -12
- package/dist/factory-assets/connectors/gmail/adapter.d.ts +1 -1
- package/dist/factory-assets/connectors/gmail/adapter.d.ts.map +1 -1
- package/dist/factory-assets/connectors/gmail.js +12 -12
- package/dist/factory-assets/connectors/googledrive.js +12 -12
- package/dist/factory-assets/connectors/local/driver.d.ts +1 -2
- package/dist/factory-assets/connectors/local/driver.d.ts.map +1 -1
- package/dist/factory-assets/connectors/local.js +12 -12
- package/dist/factory-assets/connectors/mattermost/adapter.d.ts +1 -1
- package/dist/factory-assets/connectors/mattermost/adapter.d.ts.map +1 -1
- package/dist/factory-assets/connectors/mattermost.js +12 -12
- package/dist/factory-assets/connectors/memory/adapter.d.ts.map +1 -1
- package/dist/factory-assets/connectors/memory.js +12 -12
- package/dist/factory-assets/connectors/minio/adapter.d.ts +1 -1
- package/dist/factory-assets/connectors/minio/adapter.d.ts.map +1 -1
- package/dist/factory-assets/connectors/minio.js +12 -12
- package/dist/factory-assets/connectors/postgres/adapter.d.ts +6 -1
- package/dist/factory-assets/connectors/postgres/adapter.d.ts.map +1 -1
- package/dist/factory-assets/connectors/postgres.js +12 -12
- package/dist/factory-assets/connectors/s3/driver.d.ts.map +1 -1
- package/dist/factory-assets/connectors/s3.js +12 -12
- package/dist/factory-assets/connectors/sharepoint.js +12 -12
- package/dist/factory-assets/connectors/sqlite/adapter.d.ts +1 -1
- package/dist/factory-assets/connectors/sqlite/adapter.d.ts.map +1 -1
- package/dist/factory-assets/connectors/sqlite.js +12 -12
- package/dist/factory-assets/connectors/static-server/adapter.d.ts +6 -1
- package/dist/factory-assets/connectors/static-server/adapter.d.ts.map +1 -1
- package/dist/factory-assets/connectors/static-server.js +12 -12
- package/dist/factory-assets/connectors/tunnel/adapter.d.ts +1 -1
- package/dist/factory-assets/connectors/tunnel/adapter.d.ts.map +1 -1
- package/dist/factory-assets/connectors/tunnel.js +12 -12
- package/dist/factory-assets/connectors/webdav.js +12 -12
- package/dist/factory-assets/connectors/xstate/adapter.d.ts +1 -1
- package/dist/factory-assets/connectors/xstate/adapter.d.ts.map +1 -1
- package/dist/factory-assets/connectors/xstate-store/adapter.d.ts +7 -0
- package/dist/factory-assets/connectors/xstate-store/adapter.d.ts.map +1 -1
- package/dist/factory-assets/connectors/xstate-store.js +12 -12
- package/dist/factory-assets/connectors/xstate.js +12 -12
- package/dist/flows-T6RCRKCX.js +7 -0
- package/dist/{flows-L3GHQD7F.js.map → flows-T6RCRKCX.js.map} +1 -1
- package/dist/library/index.js +13 -13
- package/dist/library/install.js +9 -9
- package/dist/library/src/config.d.ts +2 -2
- package/dist/library/src/config.d.ts.map +1 -1
- package/dist/library/src/index.d.ts +27 -27
- package/dist/library/src/index.d.ts.map +1 -1
- package/dist/library/src/install/index.d.ts +2 -2
- package/dist/library/src/install/index.d.ts.map +1 -1
- package/dist/library/src/install/install-from-manifest.d.ts +0 -21
- package/dist/library/src/install/install-from-manifest.d.ts.map +1 -1
- package/dist/library/src/knowledge/index.d.ts +2 -2
- package/dist/library/src/knowledge/index.d.ts.map +1 -1
- package/dist/library/src/knowledge/knowledge-kind-provider.d.ts.map +1 -1
- package/dist/library/src/local/library.d.ts +2 -2
- package/dist/library/src/local/library.d.ts.map +1 -1
- package/dist/library/src/local/store-paths.d.ts.map +1 -1
- package/dist/library/src/pin-resolver.d.ts.map +1 -1
- package/dist/library/src/preset/apply.d.ts +2 -2
- package/dist/library/src/preset/apply.d.ts.map +1 -1
- package/dist/library/src/preset/index.d.ts +10 -10
- package/dist/library/src/preset/index.d.ts.map +1 -1
- package/dist/library/src/preset/parse.d.ts.map +1 -1
- package/dist/library/src/preset/resolve-item.d.ts +1 -1
- package/dist/library/src/preset/resolve-item.d.ts.map +1 -1
- package/dist/library/src/preset/upgrade.d.ts +1 -1
- package/dist/library/src/preset/upgrade.d.ts.map +1 -1
- package/dist/library/src/remote/index.d.ts +5 -5
- package/dist/library/src/remote/index.d.ts.map +1 -1
- package/dist/library/src/remote/remote-catalog-source.d.ts +1 -1
- package/dist/library/src/remote/remote-catalog-source.d.ts.map +1 -1
- package/dist/library/src/remote/rest-catalog-source.d.ts +1 -1
- package/dist/library/src/remote/rest-catalog-source.d.ts.map +1 -1
- package/dist/library/src/sync/driver.d.ts +1 -1
- package/dist/library/src/sync/driver.d.ts.map +1 -1
- package/dist/library/src/sync/git-driver.d.ts +1 -1
- package/dist/library/src/sync/git-driver.d.ts.map +1 -1
- package/dist/library/src/sync/local-driver.d.ts +1 -1
- package/dist/library/src/sync/local-driver.d.ts.map +1 -1
- package/dist/library/src/workspace-config.d.ts +0 -9
- package/dist/library/src/workspace-config.d.ts.map +1 -1
- package/dist/open-library-ZXTSUPBJ.js +23 -0
- package/dist/{open-library-3VJY74LQ.js.map → open-library-ZXTSUPBJ.js.map} +1 -1
- package/dist/paths-F7RHQUFL.js +15 -0
- package/dist/{paths-CE66L3AL.js.map → paths-F7RHQUFL.js.map} +1 -1
- package/dist/plugin-registry/src/targets.d.ts +2 -3
- package/dist/plugin-registry/src/targets.d.ts.map +1 -1
- package/dist/{plugin-store-GL5VKYUA.js → plugin-store-BC3I36HA.js} +11 -14
- package/dist/plugin-store-BC3I36HA.js.map +1 -0
- package/dist/plugins/index.js +1 -1
- package/dist/plugins/src/asset-kind-registry.d.ts +1 -1
- package/dist/plugins/src/asset-kind-registry.d.ts.map +1 -1
- package/dist/plugins/src/catalog-source.d.ts +5 -0
- package/dist/plugins/src/catalog-source.d.ts.map +1 -1
- package/dist/plugins/src/index.d.ts +5 -5
- package/dist/plugins/src/index.d.ts.map +1 -1
- package/dist/{provider-GAWKFQ3T.js → provider-ZPT443IX.js} +18 -16
- package/dist/provider-ZPT443IX.js.map +1 -0
- package/dist/resolver/index.js +1 -1
- package/dist/resolver/src/preamble.d.ts.map +1 -1
- package/dist/runner/index.js +17 -17
- package/dist/runner/src/builtin-capabilities.d.ts +12 -0
- package/dist/runner/src/builtin-capabilities.d.ts.map +1 -1
- package/dist/runner/src/capability-registry.d.ts.map +1 -1
- package/dist/runner/src/compaction/index.d.ts +0 -4
- package/dist/runner/src/compaction/index.d.ts.map +1 -1
- package/dist/runner/src/compaction/orchestrator.d.ts +23 -2
- package/dist/runner/src/compaction/orchestrator.d.ts.map +1 -1
- package/dist/runner/src/composition/compile.d.ts.map +1 -1
- package/dist/runner/src/composition/index.d.ts +4 -4
- package/dist/runner/src/composition/index.d.ts.map +1 -1
- package/dist/runner/src/composition/resolve.d.ts.map +1 -1
- package/dist/runner/src/composition/types.d.ts +2 -2
- package/dist/runner/src/composition/types.d.ts.map +1 -1
- package/dist/runner/src/config.d.ts +2 -2
- package/dist/runner/src/config.d.ts.map +1 -1
- package/dist/runner/src/define-capability.d.ts +1 -1
- package/dist/runner/src/define-capability.d.ts.map +1 -1
- package/dist/runner/src/external-mcp.d.ts.map +1 -1
- package/dist/runner/src/index.d.ts +9 -9
- package/dist/runner/src/index.d.ts.map +1 -1
- package/dist/runner/src/logging-bootstrap.d.ts +1 -1
- package/dist/runner/src/logging-bootstrap.d.ts.map +1 -1
- package/dist/runner/src/manifest.d.ts.map +1 -1
- package/dist/runner/src/recipe-resolver.d.ts +32 -0
- package/dist/runner/src/recipe-resolver.d.ts.map +1 -1
- package/dist/runner/src/resource-handler.d.ts.map +1 -1
- package/dist/runner/src/resources.d.ts.map +1 -1
- package/dist/runner/src/runner-capabilities.d.ts +25 -0
- package/dist/runner/src/runner-capabilities.d.ts.map +1 -1
- package/dist/runner/src/serve.d.ts.map +1 -1
- package/dist/runner/src/session-builder.d.ts.map +1 -1
- package/dist/sdk/asset-manager.js +12 -12
- package/dist/sdk/bridge.js +4 -4
- package/dist/sdk/core.js +8 -8
- package/dist/sdk/flow.js +9 -9
- package/dist/sdk/index.js +92 -76
- package/dist/sdk/index.js.map +1 -1
- package/dist/sdk/resolver.js +1 -1
- package/dist/sdk/runner.js +17 -17
- package/dist/sdk/session.js +1 -1
- package/dist/sdk/src/agent-session.d.ts +8 -0
- package/dist/sdk/src/agent-session.d.ts.map +1 -1
- package/dist/sdk/src/factory.d.ts.map +1 -1
- package/dist/sdk/src/index.d.ts +2 -2
- package/dist/sdk/src/index.d.ts.map +1 -1
- package/dist/sdk/store.js +1 -1
- package/dist/sdk/telemetry.js +1 -1
- package/dist/secrets/index.js +2 -2
- package/dist/secrets/src/index.d.ts +8 -8
- package/dist/secrets/src/index.d.ts.map +1 -1
- package/dist/secrets/src/lifecycle.d.ts +1 -2
- package/dist/secrets/src/lifecycle.d.ts.map +1 -1
- package/dist/secrets/src/providers/env.d.ts +1 -1
- package/dist/secrets/src/providers/env.d.ts.map +1 -1
- package/dist/secrets/src/providers/local.d.ts +1 -1
- package/dist/secrets/src/providers/local.d.ts.map +1 -1
- package/dist/secrets/src/router.d.ts +1 -1
- package/dist/secrets/src/router.d.ts.map +1 -1
- package/dist/session/index.js +1 -1
- package/dist/session/src/mentions.d.ts.map +1 -1
- package/dist/{sessions-2IUX4P3P.js → sessions-DICDEONJ.js} +3 -3
- package/dist/{sessions-2IUX4P3P.js.map → sessions-DICDEONJ.js.map} +1 -1
- package/dist/{setup-4YMN2BDU.js → setup-FQ3DE6J6.js} +198 -175
- package/dist/setup-FQ3DE6J6.js.map +1 -0
- package/dist/skills-BMI6H7HI.js +7 -0
- package/dist/{skills-6HJ3WINN.js.map → skills-BMI6H7HI.js.map} +1 -1
- package/dist/store/index.js +1 -1
- package/dist/store/src/index.d.ts +1 -1
- package/dist/store/src/index.d.ts.map +1 -1
- package/dist/store/src/resource-client.d.ts +1 -1
- package/dist/store/src/resource-client.d.ts.map +1 -1
- package/dist/store/src/vue.d.ts.map +1 -1
- package/dist/store/vue.js.map +1 -1
- package/dist/store-client-27YYEWMM.js +15 -0
- package/dist/{store-client-BCP5LCAZ.js.map → store-client-27YYEWMM.js.map} +1 -1
- package/dist/telemetry/index.js +1 -1
- package/dist/telemetry/src/context.d.ts.map +1 -1
- package/dist/telemetry/src/index.d.ts +3 -3
- package/dist/telemetry/src/index.d.ts.map +1 -1
- package/dist/telemetry/src/otel/gen-ai.d.ts +1 -1
- package/dist/telemetry/src/otel/gen-ai.d.ts.map +1 -1
- package/dist/telemetry/src/otel/provider.d.ts.map +1 -1
- package/dist/transport/src/index.d.ts +1 -1
- package/dist/transport/src/index.d.ts.map +1 -1
- package/dist/tui/index.js +251 -218
- package/dist/tui/index.js.map +1 -1
- package/dist/tui/src/index.d.ts +2 -2
- package/dist/tui/src/index.d.ts.map +1 -1
- package/dist/tui/src/repl-renderer.d.ts.map +1 -1
- package/dist/tui/src/repl-session.d.ts +1 -1
- package/dist/tui/src/repl-session.d.ts.map +1 -1
- package/dist/tui/src/repl.d.ts.map +1 -1
- package/dist/types/manifests.js +1 -1
- package/dist/types/src/envelope.d.ts +1 -1
- package/dist/types/src/envelope.d.ts.map +1 -1
- package/dist/types/src/manifests/agent.d.ts.map +1 -1
- package/dist/types/src/manifests/connector.d.ts.map +1 -1
- package/dist/types/src/manifests/contract.d.ts.map +1 -1
- package/dist/types/src/manifests/index.d.ts +16 -16
- package/dist/types/src/manifests/index.d.ts.map +1 -1
- package/dist/types/src/manifests/mcp-server.d.ts.map +1 -1
- package/dist/types/src/manifests/mount.d.ts.map +1 -1
- package/dist/types/src/manifests/persona.d.ts.map +1 -1
- package/dist/types/src/manifests/preset.d.ts +0 -18
- package/dist/types/src/manifests/preset.d.ts.map +1 -1
- package/dist/types/src/manifests/prompt.d.ts.map +1 -1
- package/dist/types/src/manifests/ruleset.d.ts.map +1 -1
- package/dist/types/src/manifests/skill.d.ts.map +1 -1
- package/dist/validator-VF5M764T.js +5 -0
- package/dist/{validator-47SQUW3J.js.map → validator-VF5M764T.js.map} +1 -1
- package/dist/workspace-plugin/adapters/mcp.js +6 -6
- package/dist/workspace-plugin/adapters/omp.js +76 -69
- package/dist/workspace-plugin/adapters/omp.js.map +1 -1
- package/dist/workspace-plugin/index.js +2 -2
- package/dist/workspace-plugin/src/adapters/omp.d.ts.map +1 -1
- package/dist/workspace-plugin/src/tools/connectors.d.ts.map +1 -1
- package/dist/workspace-plugin/src/tools/flows.d.ts.map +1 -1
- package/dist/workspace-plugin/src/tools/sessions.d.ts.map +1 -1
- package/dist/workspace-plugin/src/tools/skills.d.ts.map +1 -1
- package/dist/workspace-plugin/src/tools/validator.d.ts.map +1 -1
- package/package.json +1 -2
- package/dist/asset-feeds-2V7LZIG7.js.map +0 -1
- package/dist/chunk-24UIWON4.js.map +0 -1
- package/dist/chunk-2FS4FPZ7.js.map +0 -1
- package/dist/chunk-3QQSSRYN.js.map +0 -1
- package/dist/chunk-5YO3H5Q4.js.map +0 -1
- package/dist/chunk-7GWYRVAX.js.map +0 -1
- package/dist/chunk-AKSR434V.js.map +0 -1
- package/dist/chunk-DVMSGGCM.js.map +0 -1
- package/dist/chunk-FQHHCICT.js.map +0 -1
- package/dist/chunk-IEJ5IOC3.js.map +0 -1
- package/dist/chunk-IERB3UXJ.js.map +0 -1
- package/dist/chunk-JIQLLZ65.js.map +0 -1
- package/dist/chunk-M4KLIEIJ.js.map +0 -1
- package/dist/chunk-MIH45XPY.js.map +0 -1
- package/dist/chunk-MLJKA3S6.js.map +0 -1
- package/dist/chunk-OTFG5Q7H.js.map +0 -1
- package/dist/chunk-PAYAFNXG.js.map +0 -1
- package/dist/chunk-QDJKE557.js.map +0 -1
- package/dist/chunk-SF4GWVR5.js.map +0 -1
- package/dist/chunk-TV72ZJYN.js.map +0 -1
- package/dist/chunk-UIZKIUC6.js.map +0 -1
- package/dist/chunk-W7W66MDZ.js.map +0 -1
- package/dist/chunk-Z3XXKR5E.js.map +0 -1
- package/dist/chunk-ZONCCO5N.js.map +0 -1
- package/dist/ensure-sources-BNSRO5G7.js +0 -74
- package/dist/ensure-sources-BNSRO5G7.js.map +0 -1
- package/dist/flows-L3GHQD7F.js +0 -7
- package/dist/open-library-3VJY74LQ.js +0 -23
- package/dist/paths-CE66L3AL.js +0 -15
- package/dist/plugin-store-GL5VKYUA.js.map +0 -1
- package/dist/provider-GAWKFQ3T.js.map +0 -1
- package/dist/setup-4YMN2BDU.js.map +0 -1
- package/dist/skills-6HJ3WINN.js +0 -7
- package/dist/store-client-BCP5LCAZ.js +0 -15
- package/dist/validator-47SQUW3J.js +0 -5
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import { AssetKindRegistryFrozenError, AssetKindConflictError, AssetKindPatternConflictError, AssetKindPathAmbiguityError } from './chunk-
|
|
2
|
-
import { decodeSkaileManifest, SKAILE_MANIFEST_FILENAME } from './chunk-
|
|
3
|
-
import { parseFrontmatter } from './chunk-
|
|
4
|
-
import { isValidAssetName } from './chunk-
|
|
5
|
-
import { validatePersona, validateRuleset, validateSkill, validateAgent, validateConnector, validateMcpServer, validateContract, validatePrompt, validatePreset } from './chunk-
|
|
1
|
+
import { AssetKindRegistryFrozenError, AssetKindConflictError, AssetKindPatternConflictError, AssetKindPathAmbiguityError } from './chunk-ZDKJHQY2.js';
|
|
2
|
+
import { decodeSkaileManifest, SKAILE_MANIFEST_FILENAME } from './chunk-H5YXL4KI.js';
|
|
3
|
+
import { parseFrontmatter } from './chunk-4AGIEU7V.js';
|
|
4
|
+
import { isValidAssetName } from './chunk-LFDZYCEO.js';
|
|
5
|
+
import { validatePersona, validateRuleset, validateSkill, validateAgent, validateConnector, validateMcpServer, validateContract, validatePrompt, validatePreset } from './chunk-HRKB2ATT.js';
|
|
6
6
|
import * as fs from 'fs';
|
|
7
7
|
import * as path from 'path';
|
|
8
|
-
import * as z from 'zod';
|
|
9
8
|
import * as yaml from 'js-yaml';
|
|
10
9
|
import * as crypto from 'crypto';
|
|
10
|
+
import * as z from 'zod';
|
|
11
11
|
|
|
12
12
|
// discovery/src/asset-kind-registry.ts
|
|
13
13
|
var AssetKindRegistry = class {
|
|
@@ -466,6 +466,44 @@ var BUILTIN_PROVIDERS = [
|
|
|
466
466
|
// Composition entity (discoverable, not in AssetKind enum)
|
|
467
467
|
presetProvider
|
|
468
468
|
];
|
|
469
|
+
function computeDeterministicHash(assetRoot, files) {
|
|
470
|
+
const hash = crypto.createHash("sha256");
|
|
471
|
+
const sorted = [...files].sort();
|
|
472
|
+
for (const file of sorted) {
|
|
473
|
+
const fullPath = path.join(assetRoot, file);
|
|
474
|
+
try {
|
|
475
|
+
hash.update(file);
|
|
476
|
+
hash.update("\0");
|
|
477
|
+
const content = fs.readFileSync(fullPath);
|
|
478
|
+
hash.update(content);
|
|
479
|
+
hash.update("\0");
|
|
480
|
+
} catch {
|
|
481
|
+
}
|
|
482
|
+
}
|
|
483
|
+
return hash.digest("hex");
|
|
484
|
+
}
|
|
485
|
+
function computeDeterministicHashDetailed(assetRoot, files) {
|
|
486
|
+
const hash = crypto.createHash("sha256");
|
|
487
|
+
const sorted = [...files].sort();
|
|
488
|
+
const present = [];
|
|
489
|
+
const missing = [];
|
|
490
|
+
for (const file of sorted) {
|
|
491
|
+
const fullPath = path.join(assetRoot, file);
|
|
492
|
+
let content = null;
|
|
493
|
+
try {
|
|
494
|
+
content = fs.readFileSync(fullPath);
|
|
495
|
+
} catch {
|
|
496
|
+
missing.push(file);
|
|
497
|
+
continue;
|
|
498
|
+
}
|
|
499
|
+
hash.update(file);
|
|
500
|
+
hash.update("\0");
|
|
501
|
+
hash.update(content);
|
|
502
|
+
hash.update("\0");
|
|
503
|
+
present.push(file);
|
|
504
|
+
}
|
|
505
|
+
return { sha256: hash.digest("hex"), present, missing };
|
|
506
|
+
}
|
|
469
507
|
var SEMVER_RE = /^\d+\.\d+\.\d+(?:-[a-zA-Z0-9.-]+)?(?:\+[a-zA-Z0-9.-]+)?$/;
|
|
470
508
|
var PublisherOverrideSchema = z.object({
|
|
471
509
|
/** Relative path within the repo (trailing slash convention). */
|
|
@@ -755,44 +793,8 @@ function loadSourceConfigFromDir(dir) {
|
|
|
755
793
|
};
|
|
756
794
|
}
|
|
757
795
|
}
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
const sorted = [...files].sort();
|
|
761
|
-
for (const file of sorted) {
|
|
762
|
-
const fullPath = path.join(assetRoot, file);
|
|
763
|
-
try {
|
|
764
|
-
hash.update(file);
|
|
765
|
-
hash.update("\0");
|
|
766
|
-
const content = fs.readFileSync(fullPath);
|
|
767
|
-
hash.update(content);
|
|
768
|
-
hash.update("\0");
|
|
769
|
-
} catch {
|
|
770
|
-
}
|
|
771
|
-
}
|
|
772
|
-
return hash.digest("hex");
|
|
773
|
-
}
|
|
774
|
-
function computeDeterministicHashDetailed(assetRoot, files) {
|
|
775
|
-
const hash = crypto.createHash("sha256");
|
|
776
|
-
const sorted = [...files].sort();
|
|
777
|
-
const present = [];
|
|
778
|
-
const missing = [];
|
|
779
|
-
for (const file of sorted) {
|
|
780
|
-
const fullPath = path.join(assetRoot, file);
|
|
781
|
-
let content = null;
|
|
782
|
-
try {
|
|
783
|
-
content = fs.readFileSync(fullPath);
|
|
784
|
-
} catch {
|
|
785
|
-
missing.push(file);
|
|
786
|
-
continue;
|
|
787
|
-
}
|
|
788
|
-
hash.update(file);
|
|
789
|
-
hash.update("\0");
|
|
790
|
-
hash.update(content);
|
|
791
|
-
hash.update("\0");
|
|
792
|
-
present.push(file);
|
|
793
|
-
}
|
|
794
|
-
return { sha256: hash.digest("hex"), present, missing };
|
|
795
|
-
}
|
|
796
|
+
|
|
797
|
+
// discovery/src/discover-manifest.ts
|
|
796
798
|
function discoverFromManifest(rootPath, sourceConfig, registry, includeDev = false) {
|
|
797
799
|
const assets = [];
|
|
798
800
|
const errors = [];
|
|
@@ -995,6 +997,179 @@ function validateRequiresSyntax(requires) {
|
|
|
995
997
|
return errors;
|
|
996
998
|
}
|
|
997
999
|
|
|
1000
|
+
// discovery/src/domains.ts
|
|
1001
|
+
var DOMAIN_RELATIONS = /* @__PURE__ */ new Set([
|
|
1002
|
+
"additions",
|
|
1003
|
+
"alternatives",
|
|
1004
|
+
"sequence"
|
|
1005
|
+
]);
|
|
1006
|
+
var DOMAIN_SLUG_RE = /^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/;
|
|
1007
|
+
var DOMAIN_SLUG_MAX = 39;
|
|
1008
|
+
var DOMAIN_MD_FILENAME = "DOMAIN.md";
|
|
1009
|
+
function isDomainMdPath(relativePath) {
|
|
1010
|
+
return relativePath === DOMAIN_MD_FILENAME || relativePath.endsWith(`/${DOMAIN_MD_FILENAME}`);
|
|
1011
|
+
}
|
|
1012
|
+
function posixDirname(p) {
|
|
1013
|
+
const i = p.lastIndexOf("/");
|
|
1014
|
+
return i === -1 ? "" : p.slice(0, i);
|
|
1015
|
+
}
|
|
1016
|
+
function normalizeMembers(raw) {
|
|
1017
|
+
if (!Array.isArray(raw)) return void 0;
|
|
1018
|
+
const out = [];
|
|
1019
|
+
for (const m of raw) {
|
|
1020
|
+
if (typeof m === "string" && m.length > 0) {
|
|
1021
|
+
out.push({ ref: m });
|
|
1022
|
+
} else if (m && typeof m === "object" && typeof m.ref === "string") {
|
|
1023
|
+
const obj = m;
|
|
1024
|
+
const member = { ref: obj.ref };
|
|
1025
|
+
if (typeof obj.order === "number") member.order = obj.order;
|
|
1026
|
+
if (obj.recommended === true) member.recommended = true;
|
|
1027
|
+
out.push(member);
|
|
1028
|
+
}
|
|
1029
|
+
}
|
|
1030
|
+
return out.length > 0 ? out : void 0;
|
|
1031
|
+
}
|
|
1032
|
+
function parseDomainMd(domainMdPath, frontmatter) {
|
|
1033
|
+
const slug = typeof frontmatter.slug === "string" ? frontmatter.slug : "";
|
|
1034
|
+
const title = typeof frontmatter.title === "string" && frontmatter.title.length > 0 ? frontmatter.title : slug;
|
|
1035
|
+
const description = typeof frontmatter.description === "string" ? frontmatter.description.trim() : "";
|
|
1036
|
+
const relation = typeof frontmatter.relation === "string" ? frontmatter.relation : "additions";
|
|
1037
|
+
const order = typeof frontmatter.order === "number" ? frontmatter.order : void 0;
|
|
1038
|
+
const members = normalizeMembers(frontmatter.members);
|
|
1039
|
+
return {
|
|
1040
|
+
domainRoot: posixDirname(domainMdPath),
|
|
1041
|
+
slug,
|
|
1042
|
+
title,
|
|
1043
|
+
description,
|
|
1044
|
+
relation,
|
|
1045
|
+
...order !== void 0 ? { order } : {},
|
|
1046
|
+
...members ? { members } : {}
|
|
1047
|
+
};
|
|
1048
|
+
}
|
|
1049
|
+
function claims(root, target) {
|
|
1050
|
+
if (root === "") return true;
|
|
1051
|
+
return target === root || target.startsWith(`${root}/`);
|
|
1052
|
+
}
|
|
1053
|
+
function validateDomains(domains) {
|
|
1054
|
+
const errors = [];
|
|
1055
|
+
for (const d of domains) {
|
|
1056
|
+
if (!d.slug || !DOMAIN_SLUG_RE.test(d.slug) || d.slug.length > DOMAIN_SLUG_MAX) {
|
|
1057
|
+
errors.push({ code: "InvalidSlug", root: d.domainRoot, value: d.slug });
|
|
1058
|
+
}
|
|
1059
|
+
if (!DOMAIN_RELATIONS.has(d.relation)) {
|
|
1060
|
+
errors.push({ code: "InvalidRelation", root: d.domainRoot, value: d.relation });
|
|
1061
|
+
}
|
|
1062
|
+
}
|
|
1063
|
+
const bySlug = /* @__PURE__ */ new Map();
|
|
1064
|
+
for (const d of domains) {
|
|
1065
|
+
if (!d.slug) continue;
|
|
1066
|
+
const roots2 = bySlug.get(d.slug) ?? [];
|
|
1067
|
+
roots2.push(d.domainRoot);
|
|
1068
|
+
bySlug.set(d.slug, roots2);
|
|
1069
|
+
}
|
|
1070
|
+
for (const [slug, roots2] of bySlug) {
|
|
1071
|
+
if (roots2.length > 1) errors.push({ code: "DuplicateDomainSlug", slug, roots: roots2.sort() });
|
|
1072
|
+
}
|
|
1073
|
+
const roots = domains.map((d) => d.domainRoot).sort();
|
|
1074
|
+
for (let i = 0; i < roots.length; i++) {
|
|
1075
|
+
for (let j = i + 1; j < roots.length; j++) {
|
|
1076
|
+
const a = roots[i];
|
|
1077
|
+
const b = roots[j];
|
|
1078
|
+
if (a === b) continue;
|
|
1079
|
+
if (claims(a, b)) errors.push({ code: "DomainNesting", outer: a, inner: b });
|
|
1080
|
+
else if (claims(b, a)) errors.push({ code: "DomainNesting", outer: b, inner: a });
|
|
1081
|
+
}
|
|
1082
|
+
}
|
|
1083
|
+
return errors;
|
|
1084
|
+
}
|
|
1085
|
+
function assignDomain(relativePath, domains) {
|
|
1086
|
+
let best;
|
|
1087
|
+
for (const d of domains) {
|
|
1088
|
+
if (!d.slug) continue;
|
|
1089
|
+
if (!claims(d.domainRoot, relativePath)) continue;
|
|
1090
|
+
if (!best || d.domainRoot.length > best.domainRoot.length) best = d;
|
|
1091
|
+
}
|
|
1092
|
+
return best ? best.slug : null;
|
|
1093
|
+
}
|
|
1094
|
+
function buildDomainIndex(assets, domains) {
|
|
1095
|
+
const index = {};
|
|
1096
|
+
const unclaimed = [];
|
|
1097
|
+
const bySlug = /* @__PURE__ */ new Map();
|
|
1098
|
+
for (const d of domains) bySlug.set(d.slug, d);
|
|
1099
|
+
const refsBySlug = /* @__PURE__ */ new Map();
|
|
1100
|
+
for (const asset of assets) {
|
|
1101
|
+
const slug = assignDomain(asset.relativePath, domains);
|
|
1102
|
+
if (slug === null) {
|
|
1103
|
+
unclaimed.push(asset.ref);
|
|
1104
|
+
continue;
|
|
1105
|
+
}
|
|
1106
|
+
const list = refsBySlug.get(slug) ?? [];
|
|
1107
|
+
list.push(asset.ref);
|
|
1108
|
+
refsBySlug.set(slug, list);
|
|
1109
|
+
}
|
|
1110
|
+
for (const [slug, refs] of refsBySlug) {
|
|
1111
|
+
const d = bySlug.get(slug);
|
|
1112
|
+
const memberOrder = /* @__PURE__ */ new Map();
|
|
1113
|
+
const recommended = /* @__PURE__ */ new Set();
|
|
1114
|
+
for (const m of d.members ?? []) {
|
|
1115
|
+
if (m.order !== void 0) memberOrder.set(m.ref, m.order);
|
|
1116
|
+
if (m.recommended) recommended.add(m.ref);
|
|
1117
|
+
}
|
|
1118
|
+
const ordered = refs.map((ref, i) => ({ ref, i, order: memberOrder.get(ref) })).sort((a, b) => {
|
|
1119
|
+
if (a.order !== void 0 && b.order !== void 0) return a.order - b.order || a.i - b.i;
|
|
1120
|
+
if (a.order !== void 0) return -1;
|
|
1121
|
+
if (b.order !== void 0) return 1;
|
|
1122
|
+
return a.i - b.i;
|
|
1123
|
+
}).map((x) => x.ref);
|
|
1124
|
+
index[slug] = {
|
|
1125
|
+
slug,
|
|
1126
|
+
title: d.title,
|
|
1127
|
+
description: d.description,
|
|
1128
|
+
relation: d.relation,
|
|
1129
|
+
...d.order !== void 0 ? { order: d.order } : {},
|
|
1130
|
+
members: ordered,
|
|
1131
|
+
recommended: ordered.filter((ref) => recommended.has(ref))
|
|
1132
|
+
};
|
|
1133
|
+
}
|
|
1134
|
+
return { index, unclaimed };
|
|
1135
|
+
}
|
|
1136
|
+
function describeDomainError(e) {
|
|
1137
|
+
switch (e.code) {
|
|
1138
|
+
case "DomainNesting":
|
|
1139
|
+
return {
|
|
1140
|
+
path: `${e.inner}/${DOMAIN_MD_FILENAME}`,
|
|
1141
|
+
error: `DomainNesting: domain at '${e.inner}' is nested inside domain at '${e.outer || "<repo root>"}'`
|
|
1142
|
+
};
|
|
1143
|
+
case "DuplicateDomainSlug":
|
|
1144
|
+
return {
|
|
1145
|
+
path: `${e.roots[0] ?? ""}/${DOMAIN_MD_FILENAME}`,
|
|
1146
|
+
error: `DuplicateDomainSlug: slug '${e.slug}' declared by ${e.roots.join(", ")}`
|
|
1147
|
+
};
|
|
1148
|
+
case "InvalidRelation":
|
|
1149
|
+
return {
|
|
1150
|
+
path: `${e.root}/${DOMAIN_MD_FILENAME}`,
|
|
1151
|
+
error: `InvalidRelation: '${e.value}' (expected additions|alternatives|sequence)`
|
|
1152
|
+
};
|
|
1153
|
+
case "InvalidSlug":
|
|
1154
|
+
return {
|
|
1155
|
+
path: `${e.root}/${DOMAIN_MD_FILENAME}`,
|
|
1156
|
+
error: `InvalidSlug: '${e.value}' (expected lowercase a-z0-9 with single hyphens, \u226439 chars)`
|
|
1157
|
+
};
|
|
1158
|
+
}
|
|
1159
|
+
}
|
|
1160
|
+
function applyDomains(assets, domains) {
|
|
1161
|
+
const errors = validateDomains(domains).map(describeDomainError);
|
|
1162
|
+
for (const a of assets) {
|
|
1163
|
+
const slug = assignDomain(a.relativePath, domains);
|
|
1164
|
+
if (slug) a.domainSlug = slug;
|
|
1165
|
+
}
|
|
1166
|
+
const { index } = buildDomainIndex(assets, domains);
|
|
1167
|
+
const ordered = Object.values(index).sort(
|
|
1168
|
+
(a, b) => (a.order ?? Number.POSITIVE_INFINITY) - (b.order ?? Number.POSITIVE_INFINITY) || (a.slug < b.slug ? -1 : a.slug > b.slug ? 1 : 0)
|
|
1169
|
+
);
|
|
1170
|
+
return { domains: ordered, errors };
|
|
1171
|
+
}
|
|
1172
|
+
|
|
998
1173
|
// discovery/src/discover.ts
|
|
999
1174
|
function createDefaultRegistry() {
|
|
1000
1175
|
const registry = new AssetKindRegistry();
|
|
@@ -1004,29 +1179,16 @@ function createDefaultRegistry() {
|
|
|
1004
1179
|
return registry;
|
|
1005
1180
|
}
|
|
1006
1181
|
function discoverAssetsInTree(rootPath, optionsOrSourceConfig) {
|
|
1007
|
-
|
|
1008
|
-
|
|
1009
|
-
|
|
1010
|
-
|
|
1011
|
-
|
|
1012
|
-
sourceConfig = optionsOrSourceConfig.sourceConfig;
|
|
1013
|
-
registry = optionsOrSourceConfig.registry;
|
|
1014
|
-
sidecarPath = optionsOrSourceConfig.sidecarPath;
|
|
1015
|
-
includeDev = optionsOrSourceConfig.includeDev ?? false;
|
|
1016
|
-
} else {
|
|
1017
|
-
sourceConfig = optionsOrSourceConfig;
|
|
1018
|
-
}
|
|
1019
|
-
if (!registry) {
|
|
1020
|
-
registry = createDefaultRegistry();
|
|
1021
|
-
}
|
|
1022
|
-
if (!sourceConfig && sidecarPath) {
|
|
1023
|
-
const merged = loadMergedSourceConfig(rootPath, sidecarPath);
|
|
1024
|
-
if (merged.ok) {
|
|
1025
|
-
sourceConfig = merged.config;
|
|
1026
|
-
}
|
|
1027
|
-
}
|
|
1182
|
+
const { sourceConfig, registry, includeDev, sidecarPath, domainFiles } = normalizeDiscoveryArgs(
|
|
1183
|
+
rootPath,
|
|
1184
|
+
optionsOrSourceConfig
|
|
1185
|
+
);
|
|
1186
|
+
const domainMds = domainFiles ? domainFiles.map((f) => parseDomainMd(f.path, parseDomainFrontmatter(f.content))) : collectDomainMds(sidecarPath ?? rootPath);
|
|
1028
1187
|
if (sourceConfig && isManifestMode(sourceConfig)) {
|
|
1029
|
-
return
|
|
1188
|
+
return finalizeDomains(
|
|
1189
|
+
discoverFromManifest(rootPath, sourceConfig, registry, includeDev),
|
|
1190
|
+
domainMds
|
|
1191
|
+
);
|
|
1030
1192
|
}
|
|
1031
1193
|
const assets = [];
|
|
1032
1194
|
const errors = [];
|
|
@@ -1050,45 +1212,104 @@ function discoverAssetsInTree(rootPath, optionsOrSourceConfig) {
|
|
|
1050
1212
|
const dedupKey = `${dir}:${kind}`;
|
|
1051
1213
|
if (seen.has(dedupKey)) continue;
|
|
1052
1214
|
seen.add(dedupKey);
|
|
1215
|
+
processDiscoveredEntry(
|
|
1216
|
+
{ absPath, relativePath, kind },
|
|
1217
|
+
{ registry, sourceConfig },
|
|
1218
|
+
{ assets, errors, allEdges }
|
|
1219
|
+
);
|
|
1220
|
+
}
|
|
1221
|
+
const graph = buildRequiresGraph(allEdges);
|
|
1222
|
+
return finalizeDomains({ assets, graph, errors }, domainMds);
|
|
1223
|
+
}
|
|
1224
|
+
function parseDomainFrontmatter(content) {
|
|
1225
|
+
const { data } = parseFrontmatter(content);
|
|
1226
|
+
return data && typeof data === "object" ? data : {};
|
|
1227
|
+
}
|
|
1228
|
+
function collectDomainMds(dir) {
|
|
1229
|
+
const out = [];
|
|
1230
|
+
for (const { absPath, relativePath } of walkTree(dir)) {
|
|
1231
|
+
if (!isDomainMdPath(relativePath)) continue;
|
|
1053
1232
|
try {
|
|
1054
|
-
|
|
1055
|
-
|
|
1056
|
-
|
|
1057
|
-
|
|
1058
|
-
}
|
|
1059
|
-
const publisher = resolvePublisher(relativePath, sourceConfig);
|
|
1060
|
-
const name = deriveName(relativePath, kind, manifest);
|
|
1061
|
-
const version = coerceVersion(manifest.version);
|
|
1062
|
-
const ref = `${publisher}/${name}@${version}`;
|
|
1063
|
-
const fileFilter = registry.defaultFileFilter(kind, absPath) ?? {
|
|
1064
|
-
assetRoot: path.dirname(absPath),
|
|
1065
|
-
files: [path.basename(absPath)]
|
|
1066
|
-
};
|
|
1067
|
-
const sha256 = computeDeterministicHash(fileFilter.assetRoot, fileFilter.files);
|
|
1068
|
-
const requires = registry.extractRequires(kind, ref, manifest);
|
|
1069
|
-
allEdges.push(...requires);
|
|
1070
|
-
assets.push({
|
|
1071
|
-
ref,
|
|
1072
|
-
kind,
|
|
1073
|
-
publisher,
|
|
1074
|
-
name,
|
|
1075
|
-
version,
|
|
1076
|
-
manifest,
|
|
1077
|
-
manifestPath: absPath,
|
|
1078
|
-
relativePath,
|
|
1079
|
-
fileFilter,
|
|
1080
|
-
sha256,
|
|
1081
|
-
requires
|
|
1082
|
-
});
|
|
1083
|
-
} catch (err) {
|
|
1084
|
-
errors.push({
|
|
1085
|
-
path: relativePath,
|
|
1086
|
-
error: err instanceof Error ? err.message : String(err)
|
|
1087
|
-
});
|
|
1233
|
+
out.push(
|
|
1234
|
+
parseDomainMd(relativePath, parseDomainFrontmatter(fs.readFileSync(absPath, "utf-8")))
|
|
1235
|
+
);
|
|
1236
|
+
} catch {
|
|
1088
1237
|
}
|
|
1089
1238
|
}
|
|
1090
|
-
|
|
1091
|
-
|
|
1239
|
+
return out;
|
|
1240
|
+
}
|
|
1241
|
+
function finalizeDomains(result, domainMds) {
|
|
1242
|
+
if (domainMds.length === 0) return result;
|
|
1243
|
+
const { domains, errors } = applyDomains(result.assets, domainMds);
|
|
1244
|
+
result.errors.push(...errors);
|
|
1245
|
+
if (domains.length > 0) result.domains = domains;
|
|
1246
|
+
return result;
|
|
1247
|
+
}
|
|
1248
|
+
function normalizeDiscoveryArgs(rootPath, optionsOrSourceConfig) {
|
|
1249
|
+
let sourceConfig;
|
|
1250
|
+
let registry;
|
|
1251
|
+
let sidecarPath;
|
|
1252
|
+
let includeDev = false;
|
|
1253
|
+
let domainFiles;
|
|
1254
|
+
if (optionsOrSourceConfig && ("registry" in optionsOrSourceConfig || "sourceConfig" in optionsOrSourceConfig || "sidecarPath" in optionsOrSourceConfig || "domainFiles" in optionsOrSourceConfig || "includeDev" in optionsOrSourceConfig)) {
|
|
1255
|
+
sourceConfig = optionsOrSourceConfig.sourceConfig;
|
|
1256
|
+
registry = optionsOrSourceConfig.registry;
|
|
1257
|
+
sidecarPath = optionsOrSourceConfig.sidecarPath;
|
|
1258
|
+
includeDev = optionsOrSourceConfig.includeDev ?? false;
|
|
1259
|
+
domainFiles = optionsOrSourceConfig.domainFiles;
|
|
1260
|
+
} else {
|
|
1261
|
+
sourceConfig = optionsOrSourceConfig;
|
|
1262
|
+
}
|
|
1263
|
+
if (!registry) {
|
|
1264
|
+
registry = createDefaultRegistry();
|
|
1265
|
+
}
|
|
1266
|
+
if (!sourceConfig && sidecarPath) {
|
|
1267
|
+
const merged = loadMergedSourceConfig(rootPath, sidecarPath);
|
|
1268
|
+
if (merged.ok) {
|
|
1269
|
+
sourceConfig = merged.config;
|
|
1270
|
+
}
|
|
1271
|
+
}
|
|
1272
|
+
return { sourceConfig, registry, includeDev, sidecarPath, domainFiles };
|
|
1273
|
+
}
|
|
1274
|
+
function processDiscoveredEntry(entry, ctx, acc) {
|
|
1275
|
+
const { absPath, relativePath, kind } = entry;
|
|
1276
|
+
const { registry, sourceConfig } = ctx;
|
|
1277
|
+
try {
|
|
1278
|
+
const manifest = parseManifest2(absPath);
|
|
1279
|
+
if (!manifest) {
|
|
1280
|
+
acc.errors.push({ path: relativePath, error: "Failed to parse manifest" });
|
|
1281
|
+
return;
|
|
1282
|
+
}
|
|
1283
|
+
const publisher = resolvePublisher(relativePath, sourceConfig);
|
|
1284
|
+
const name = deriveName(relativePath, kind, manifest);
|
|
1285
|
+
const version = coerceVersion(manifest.version);
|
|
1286
|
+
const ref = `${publisher}/${name}@${version}`;
|
|
1287
|
+
const fileFilter = registry.defaultFileFilter(kind, absPath) ?? {
|
|
1288
|
+
assetRoot: path.dirname(absPath),
|
|
1289
|
+
files: [path.basename(absPath)]
|
|
1290
|
+
};
|
|
1291
|
+
const sha256 = computeDeterministicHash(fileFilter.assetRoot, fileFilter.files);
|
|
1292
|
+
const requires = registry.extractRequires(kind, ref, manifest);
|
|
1293
|
+
acc.allEdges.push(...requires);
|
|
1294
|
+
acc.assets.push({
|
|
1295
|
+
ref,
|
|
1296
|
+
kind,
|
|
1297
|
+
publisher,
|
|
1298
|
+
name,
|
|
1299
|
+
version,
|
|
1300
|
+
manifest,
|
|
1301
|
+
manifestPath: absPath,
|
|
1302
|
+
relativePath,
|
|
1303
|
+
fileFilter,
|
|
1304
|
+
sha256,
|
|
1305
|
+
requires
|
|
1306
|
+
});
|
|
1307
|
+
} catch (err) {
|
|
1308
|
+
acc.errors.push({
|
|
1309
|
+
path: relativePath,
|
|
1310
|
+
error: err instanceof Error ? err.message : String(err)
|
|
1311
|
+
});
|
|
1312
|
+
}
|
|
1092
1313
|
}
|
|
1093
1314
|
function* walkTree(rootDir) {
|
|
1094
1315
|
function* walk(dir, relDir) {
|
|
@@ -1194,13 +1415,17 @@ async function discoverAssetsInTreeEntries(entries, options) {
|
|
|
1194
1415
|
options.fetchBlob
|
|
1195
1416
|
);
|
|
1196
1417
|
const resolvedSourceConfig = options.sidecarSourceConfig ? mergeSourceConfigs(baseSourceConfig, options.sidecarSourceConfig) : baseSourceConfig;
|
|
1418
|
+
const domainMds = options.domainFiles ? options.domainFiles.map((f) => parseDomainMd(f.path, parseDomainFrontmatter2(f.content))) : await collectDomainMdsFromTree(blobByPath, options.fetchBlob);
|
|
1197
1419
|
if (resolvedSourceConfig && isManifestMode(resolvedSourceConfig)) {
|
|
1198
|
-
return
|
|
1199
|
-
|
|
1200
|
-
|
|
1201
|
-
|
|
1202
|
-
|
|
1203
|
-
|
|
1420
|
+
return finalizeDomains2(
|
|
1421
|
+
await discoverFromManifestTree(
|
|
1422
|
+
resolvedSourceConfig,
|
|
1423
|
+
blobByPath,
|
|
1424
|
+
options.fetchBlob,
|
|
1425
|
+
registry,
|
|
1426
|
+
includeDev
|
|
1427
|
+
),
|
|
1428
|
+
domainMds
|
|
1204
1429
|
);
|
|
1205
1430
|
}
|
|
1206
1431
|
const devPaths = resolvedSourceConfig?.dev_paths ?? [];
|
|
@@ -1210,86 +1435,130 @@ async function discoverAssetsInTreeEntries(entries, options) {
|
|
|
1210
1435
|
const allEdges = [];
|
|
1211
1436
|
const seen = /* @__PURE__ */ new Set();
|
|
1212
1437
|
for (const relativePath of sortedBlobPaths) {
|
|
1213
|
-
if (
|
|
1214
|
-
|
|
1215
|
-
}
|
|
1216
|
-
if (!includeDev && isExcludedDevPath(relativePath, devPaths)) continue;
|
|
1217
|
-
let kind;
|
|
1218
|
-
try {
|
|
1219
|
-
kind = registry.resolveKind(relativePath);
|
|
1220
|
-
} catch (err) {
|
|
1221
|
-
errors.push({
|
|
1222
|
-
path: relativePath,
|
|
1223
|
-
error: err instanceof Error ? err.message : String(err)
|
|
1224
|
-
});
|
|
1225
|
-
continue;
|
|
1226
|
-
}
|
|
1438
|
+
if (shouldSkipBlobPath(relativePath, includeDev, devPaths)) continue;
|
|
1439
|
+
const kind = resolveKindForPath(relativePath, registry, errors);
|
|
1227
1440
|
if (!kind) continue;
|
|
1228
|
-
const dir =
|
|
1441
|
+
const dir = posixDirname2(relativePath);
|
|
1229
1442
|
const dedupKey = `${dir}:${kind}`;
|
|
1230
1443
|
if (seen.has(dedupKey)) continue;
|
|
1231
1444
|
seen.add(dedupKey);
|
|
1232
|
-
const
|
|
1233
|
-
|
|
1234
|
-
|
|
1235
|
-
|
|
1236
|
-
|
|
1237
|
-
|
|
1238
|
-
|
|
1239
|
-
|
|
1240
|
-
|
|
1241
|
-
|
|
1242
|
-
|
|
1243
|
-
|
|
1244
|
-
|
|
1245
|
-
|
|
1246
|
-
|
|
1247
|
-
|
|
1248
|
-
|
|
1249
|
-
|
|
1250
|
-
|
|
1251
|
-
|
|
1252
|
-
|
|
1253
|
-
|
|
1254
|
-
|
|
1255
|
-
|
|
1256
|
-
|
|
1257
|
-
const publisher = resolvePublisher2(relativePath, resolvedSourceConfig);
|
|
1258
|
-
const name = deriveName2(relativePath, kind, manifest);
|
|
1259
|
-
const version = coerceVersion2(manifest.version);
|
|
1260
|
-
const ref = `${publisher}/${name}@${version}`;
|
|
1261
|
-
const fileFilter = computeFileFilter(kind, relativePath, blobByPath);
|
|
1262
|
-
let sha256;
|
|
1445
|
+
const result = await buildAssetFromBlob(
|
|
1446
|
+
relativePath,
|
|
1447
|
+
kind,
|
|
1448
|
+
blobByPath,
|
|
1449
|
+
options.fetchBlob,
|
|
1450
|
+
resolvedSourceConfig,
|
|
1451
|
+
registry,
|
|
1452
|
+
errors
|
|
1453
|
+
);
|
|
1454
|
+
if (!result) continue;
|
|
1455
|
+
allEdges.push(...result.requires);
|
|
1456
|
+
assets.push(result);
|
|
1457
|
+
}
|
|
1458
|
+
const graph = buildRequiresGraph(allEdges);
|
|
1459
|
+
return finalizeDomains2({ assets, graph, errors }, domainMds);
|
|
1460
|
+
}
|
|
1461
|
+
function parseDomainFrontmatter2(content) {
|
|
1462
|
+
const { data } = parseFrontmatter(content);
|
|
1463
|
+
return data && typeof data === "object" ? data : {};
|
|
1464
|
+
}
|
|
1465
|
+
async function collectDomainMdsFromTree(blobByPath, fetchBlob) {
|
|
1466
|
+
const out = [];
|
|
1467
|
+
for (const [p, entry] of blobByPath) {
|
|
1468
|
+
if (!isDomainMdPath(p)) continue;
|
|
1469
|
+
let bytes;
|
|
1263
1470
|
try {
|
|
1264
|
-
|
|
1265
|
-
} catch
|
|
1266
|
-
|
|
1267
|
-
path: relativePath,
|
|
1268
|
-
error: `Failed to compute hash: ${err instanceof Error ? err.message : String(err)}`
|
|
1269
|
-
});
|
|
1270
|
-
continue;
|
|
1471
|
+
bytes = await fetchAsBuffer(fetchBlob, entry.sha);
|
|
1472
|
+
} catch {
|
|
1473
|
+
bytes = null;
|
|
1271
1474
|
}
|
|
1272
|
-
|
|
1273
|
-
|
|
1274
|
-
|
|
1275
|
-
|
|
1276
|
-
|
|
1277
|
-
|
|
1278
|
-
|
|
1279
|
-
|
|
1280
|
-
|
|
1281
|
-
|
|
1282
|
-
|
|
1283
|
-
|
|
1284
|
-
|
|
1285
|
-
|
|
1286
|
-
|
|
1287
|
-
|
|
1288
|
-
|
|
1475
|
+
if (bytes) out.push(parseDomainMd(p, parseDomainFrontmatter2(bytes.toString("utf-8"))));
|
|
1476
|
+
}
|
|
1477
|
+
return out;
|
|
1478
|
+
}
|
|
1479
|
+
function finalizeDomains2(result, domainMds) {
|
|
1480
|
+
if (domainMds.length === 0) return result;
|
|
1481
|
+
const { domains, errors } = applyDomains(result.assets, domainMds);
|
|
1482
|
+
result.errors.push(...errors);
|
|
1483
|
+
if (domains.length > 0) result.domains = domains;
|
|
1484
|
+
return result;
|
|
1485
|
+
}
|
|
1486
|
+
function shouldSkipBlobPath(relativePath, includeDev, devPaths) {
|
|
1487
|
+
if (relativePath.startsWith(".git/") || relativePath.startsWith("node_modules/") || relativePath.startsWith(".skaile/") || relativePath.includes("/.git/") || relativePath.includes("/node_modules/") || relativePath.includes("/.skaile/")) {
|
|
1488
|
+
return true;
|
|
1489
|
+
}
|
|
1490
|
+
if (!includeDev && isExcludedDevPath(relativePath, devPaths)) return true;
|
|
1491
|
+
return false;
|
|
1492
|
+
}
|
|
1493
|
+
function resolveKindForPath(relativePath, registry, errors) {
|
|
1494
|
+
try {
|
|
1495
|
+
return registry.resolveKind(relativePath);
|
|
1496
|
+
} catch (err) {
|
|
1497
|
+
errors.push({
|
|
1498
|
+
path: relativePath,
|
|
1499
|
+
error: err instanceof Error ? err.message : String(err)
|
|
1289
1500
|
});
|
|
1501
|
+
return void 0;
|
|
1290
1502
|
}
|
|
1291
|
-
|
|
1292
|
-
|
|
1503
|
+
}
|
|
1504
|
+
async function buildAssetFromBlob(relativePath, kind, blobByPath, fetchBlob, resolvedSourceConfig, registry, errors) {
|
|
1505
|
+
const manifestEntry = blobByPath.get(relativePath);
|
|
1506
|
+
if (!manifestEntry) {
|
|
1507
|
+
errors.push({ path: relativePath, error: "Manifest blob disappeared from tree index" });
|
|
1508
|
+
return null;
|
|
1509
|
+
}
|
|
1510
|
+
let manifestBytes;
|
|
1511
|
+
try {
|
|
1512
|
+
manifestBytes = await fetchAsBuffer(fetchBlob, manifestEntry.sha);
|
|
1513
|
+
} catch (err) {
|
|
1514
|
+
errors.push({
|
|
1515
|
+
path: relativePath,
|
|
1516
|
+
error: `Failed to fetch manifest blob: ${err instanceof Error ? err.message : String(err)}`
|
|
1517
|
+
});
|
|
1518
|
+
return null;
|
|
1519
|
+
}
|
|
1520
|
+
if (!manifestBytes) {
|
|
1521
|
+
errors.push({ path: relativePath, error: "Failed to fetch manifest blob" });
|
|
1522
|
+
return null;
|
|
1523
|
+
}
|
|
1524
|
+
const manifestText = manifestBytes.toString("utf-8");
|
|
1525
|
+
const manifest = parseManifestText(relativePath, manifestText);
|
|
1526
|
+
if (!manifest) {
|
|
1527
|
+
errors.push({ path: relativePath, error: "Failed to parse manifest" });
|
|
1528
|
+
return null;
|
|
1529
|
+
}
|
|
1530
|
+
const publisher = resolvePublisher2(relativePath, resolvedSourceConfig);
|
|
1531
|
+
const name = deriveName2(relativePath, kind, manifest);
|
|
1532
|
+
const version = coerceVersion2(manifest.version);
|
|
1533
|
+
const ref = `${publisher}/${name}@${version}`;
|
|
1534
|
+
const fileFilter = computeFileFilter(kind, relativePath, blobByPath);
|
|
1535
|
+
let sha256;
|
|
1536
|
+
try {
|
|
1537
|
+
sha256 = await computeDeterministicHashFromTree(fileFilter, blobByPath, fetchBlob);
|
|
1538
|
+
} catch (err) {
|
|
1539
|
+
errors.push({
|
|
1540
|
+
path: relativePath,
|
|
1541
|
+
error: `Failed to compute hash: ${err instanceof Error ? err.message : String(err)}`
|
|
1542
|
+
});
|
|
1543
|
+
return null;
|
|
1544
|
+
}
|
|
1545
|
+
const requires = registry.extractRequires(kind, ref, manifest);
|
|
1546
|
+
return {
|
|
1547
|
+
ref,
|
|
1548
|
+
kind,
|
|
1549
|
+
publisher,
|
|
1550
|
+
name,
|
|
1551
|
+
version,
|
|
1552
|
+
manifest,
|
|
1553
|
+
// The tree-entries variant has no on-disk path — surface the
|
|
1554
|
+
// repo-relative path here so downstream consumers can build a
|
|
1555
|
+
// Manifest URL (raw.githubusercontent.com link).
|
|
1556
|
+
manifestPath: relativePath,
|
|
1557
|
+
relativePath,
|
|
1558
|
+
fileFilter,
|
|
1559
|
+
sha256,
|
|
1560
|
+
requires
|
|
1561
|
+
};
|
|
1293
1562
|
}
|
|
1294
1563
|
function parseManifestText(relativePath, text) {
|
|
1295
1564
|
try {
|
|
@@ -1359,7 +1628,7 @@ function deriveName2(relativePath, kind, manifest) {
|
|
|
1359
1628
|
return filename.replace(/\.(md|yaml|json)$/, "");
|
|
1360
1629
|
}
|
|
1361
1630
|
function computeFileFilter(kind, manifestPath, blobByPath) {
|
|
1362
|
-
const dir =
|
|
1631
|
+
const dir = posixDirname2(manifestPath);
|
|
1363
1632
|
const manifestName = posixBasename(manifestPath);
|
|
1364
1633
|
switch (kind) {
|
|
1365
1634
|
case "skill":
|
|
@@ -1443,7 +1712,7 @@ async function computeDeterministicHashFromTree(fileFilter, blobByPath, fetchBlo
|
|
|
1443
1712
|
}
|
|
1444
1713
|
return hash.digest("hex");
|
|
1445
1714
|
}
|
|
1446
|
-
function
|
|
1715
|
+
function posixDirname2(p) {
|
|
1447
1716
|
const i = p.lastIndexOf("/");
|
|
1448
1717
|
return i === -1 ? "" : p.slice(0, i);
|
|
1449
1718
|
}
|
|
@@ -1508,6 +1777,72 @@ async function discoverFromManifestTree(sourceConfig, blobByPath, fetchBlob, reg
|
|
|
1508
1777
|
}
|
|
1509
1778
|
async function processManifestEntryTree(entry, blobByPath, fetchBlob, registry) {
|
|
1510
1779
|
const errors = [];
|
|
1780
|
+
const assetRootRelative = entry.path;
|
|
1781
|
+
const files = resolveEntryFilesTree(entry, blobByPath, errors);
|
|
1782
|
+
if (!files) return { asset: null, errors };
|
|
1783
|
+
const manifestFileRel = pickManifestFileTree(entry.path, files, entry.kind, registry);
|
|
1784
|
+
const manifestFull = joinPosix(entry.path, manifestFileRel);
|
|
1785
|
+
const manifest = await fetchAndParseManifestTree(
|
|
1786
|
+
manifestFull,
|
|
1787
|
+
manifestFileRel,
|
|
1788
|
+
assetRootRelative,
|
|
1789
|
+
blobByPath,
|
|
1790
|
+
fetchBlob,
|
|
1791
|
+
errors
|
|
1792
|
+
);
|
|
1793
|
+
if (!manifest) return { asset: null, errors };
|
|
1794
|
+
if (!registry.getProvider(entry.kind)) {
|
|
1795
|
+
errors.push({
|
|
1796
|
+
path: assetRootRelative,
|
|
1797
|
+
error: `Unknown asset kind "${entry.kind}" \u2014 ghost-installing without provider validation`
|
|
1798
|
+
});
|
|
1799
|
+
}
|
|
1800
|
+
const requiresErrors = validateRequiresSyntax2(entry.requires);
|
|
1801
|
+
if (requiresErrors.length > 0) {
|
|
1802
|
+
errors.push({
|
|
1803
|
+
path: assetRootRelative,
|
|
1804
|
+
error: `ManifestRequiresError: ${requiresErrors.join("; ")}`
|
|
1805
|
+
});
|
|
1806
|
+
return { asset: null, errors };
|
|
1807
|
+
}
|
|
1808
|
+
const computedHash = await computeAndVerifyHashTree(
|
|
1809
|
+
entry,
|
|
1810
|
+
files,
|
|
1811
|
+
assetRootRelative,
|
|
1812
|
+
blobByPath,
|
|
1813
|
+
fetchBlob,
|
|
1814
|
+
errors
|
|
1815
|
+
);
|
|
1816
|
+
if (computedHash === null) return { asset: null, errors };
|
|
1817
|
+
const ref = `${entry.publisher}/${entry.name}@${entry.version}`;
|
|
1818
|
+
const requires = entry.requires.map((to) => ({
|
|
1819
|
+
from: ref,
|
|
1820
|
+
to,
|
|
1821
|
+
field: "assets[].requires"
|
|
1822
|
+
}));
|
|
1823
|
+
const mergedManifest = {
|
|
1824
|
+
...entry.metadata ?? {},
|
|
1825
|
+
...manifest
|
|
1826
|
+
};
|
|
1827
|
+
const asset = {
|
|
1828
|
+
ref,
|
|
1829
|
+
kind: entry.kind,
|
|
1830
|
+
publisher: entry.publisher,
|
|
1831
|
+
name: entry.name,
|
|
1832
|
+
version: entry.version,
|
|
1833
|
+
manifest: mergedManifest,
|
|
1834
|
+
manifestPath: manifestFull,
|
|
1835
|
+
relativePath: manifestFull,
|
|
1836
|
+
fileFilter: {
|
|
1837
|
+
assetRoot: entry.path,
|
|
1838
|
+
files: [...files].sort()
|
|
1839
|
+
},
|
|
1840
|
+
sha256: computedHash,
|
|
1841
|
+
requires
|
|
1842
|
+
};
|
|
1843
|
+
return { asset, errors };
|
|
1844
|
+
}
|
|
1845
|
+
function resolveEntryFilesTree(entry, blobByPath, errors) {
|
|
1511
1846
|
const assetRootRelative = entry.path;
|
|
1512
1847
|
const files = entry.files ?? expandRootFilesTree(entry.path, blobByPath);
|
|
1513
1848
|
if (entry.files === void 0 && files.length === 0) {
|
|
@@ -1515,7 +1850,7 @@ async function processManifestEntryTree(entry, blobByPath, fetchBlob, registry)
|
|
|
1515
1850
|
path: assetRootRelative,
|
|
1516
1851
|
error: `ManifestFileMissing: root "${entry.root ?? entry.path}" contains no files`
|
|
1517
1852
|
});
|
|
1518
|
-
return
|
|
1853
|
+
return null;
|
|
1519
1854
|
}
|
|
1520
1855
|
const missing = [];
|
|
1521
1856
|
for (const file of files) {
|
|
@@ -1527,10 +1862,11 @@ async function processManifestEntryTree(entry, blobByPath, fetchBlob, registry)
|
|
|
1527
1862
|
path: assetRootRelative,
|
|
1528
1863
|
error: `ManifestFileMissing: ${missing.join(", ")}`
|
|
1529
1864
|
});
|
|
1530
|
-
return
|
|
1865
|
+
return null;
|
|
1531
1866
|
}
|
|
1532
|
-
|
|
1533
|
-
|
|
1867
|
+
return files;
|
|
1868
|
+
}
|
|
1869
|
+
async function fetchAndParseManifestTree(manifestFull, manifestFileRel, assetRootRelative, blobByPath, fetchBlob, errors) {
|
|
1534
1870
|
const manifestEntry = blobByPath.get(manifestFull);
|
|
1535
1871
|
let manifestBytes;
|
|
1536
1872
|
try {
|
|
@@ -1540,14 +1876,14 @@ async function processManifestEntryTree(entry, blobByPath, fetchBlob, registry)
|
|
|
1540
1876
|
path: assetRootRelative,
|
|
1541
1877
|
error: `ManifestSchemaError: failed to fetch manifest blob: ${err instanceof Error ? err.message : String(err)}`
|
|
1542
1878
|
});
|
|
1543
|
-
return
|
|
1879
|
+
return null;
|
|
1544
1880
|
}
|
|
1545
1881
|
if (!manifestBytes) {
|
|
1546
1882
|
errors.push({
|
|
1547
1883
|
path: assetRootRelative,
|
|
1548
1884
|
error: `ManifestSchemaError: failed to fetch manifest blob`
|
|
1549
1885
|
});
|
|
1550
|
-
return
|
|
1886
|
+
return null;
|
|
1551
1887
|
}
|
|
1552
1888
|
const manifest = parseManifestText(manifestFull, manifestBytes.toString("utf-8"));
|
|
1553
1889
|
if (!manifest) {
|
|
@@ -1555,22 +1891,11 @@ async function processManifestEntryTree(entry, blobByPath, fetchBlob, registry)
|
|
|
1555
1891
|
path: assetRootRelative,
|
|
1556
1892
|
error: `ManifestSchemaError: failed to parse manifest file ${manifestFileRel}`
|
|
1557
1893
|
});
|
|
1558
|
-
return
|
|
1559
|
-
}
|
|
1560
|
-
if (!registry.getProvider(entry.kind)) {
|
|
1561
|
-
errors.push({
|
|
1562
|
-
path: assetRootRelative,
|
|
1563
|
-
error: `Unknown asset kind "${entry.kind}" \u2014 ghost-installing without provider validation`
|
|
1564
|
-
});
|
|
1565
|
-
}
|
|
1566
|
-
const requiresErrors = validateRequiresSyntax2(entry.requires);
|
|
1567
|
-
if (requiresErrors.length > 0) {
|
|
1568
|
-
errors.push({
|
|
1569
|
-
path: assetRootRelative,
|
|
1570
|
-
error: `ManifestRequiresError: ${requiresErrors.join("; ")}`
|
|
1571
|
-
});
|
|
1572
|
-
return { asset: null, errors };
|
|
1894
|
+
return null;
|
|
1573
1895
|
}
|
|
1896
|
+
return manifest;
|
|
1897
|
+
}
|
|
1898
|
+
async function computeAndVerifyHashTree(entry, files, assetRootRelative, blobByPath, fetchBlob, errors) {
|
|
1574
1899
|
let computedHash;
|
|
1575
1900
|
try {
|
|
1576
1901
|
computedHash = await computeManifestHashTree(entry.path, files, blobByPath, fetchBlob);
|
|
@@ -1579,14 +1904,14 @@ async function processManifestEntryTree(entry, blobByPath, fetchBlob, registry)
|
|
|
1579
1904
|
path: assetRootRelative,
|
|
1580
1905
|
error: `Failed to compute hash: ${err instanceof Error ? err.message : String(err)}`
|
|
1581
1906
|
});
|
|
1582
|
-
return
|
|
1907
|
+
return null;
|
|
1583
1908
|
}
|
|
1584
1909
|
if (entry.sha256 && entry.sha256 !== computedHash) {
|
|
1585
1910
|
errors.push({
|
|
1586
1911
|
path: assetRootRelative,
|
|
1587
1912
|
error: `ManifestHashMismatch: declared ${entry.sha256}, computed ${computedHash}`
|
|
1588
1913
|
});
|
|
1589
|
-
return
|
|
1914
|
+
return null;
|
|
1590
1915
|
}
|
|
1591
1916
|
if (!entry.sha256) {
|
|
1592
1917
|
errors.push({
|
|
@@ -1594,33 +1919,7 @@ async function processManifestEntryTree(entry, blobByPath, fetchBlob, registry)
|
|
|
1594
1919
|
error: `Missing sha256 \u2014 computed ${computedHash}. Re-run \`skaile source build-manifest --write\` to pin it.`
|
|
1595
1920
|
});
|
|
1596
1921
|
}
|
|
1597
|
-
|
|
1598
|
-
const requires = entry.requires.map((to) => ({
|
|
1599
|
-
from: ref,
|
|
1600
|
-
to,
|
|
1601
|
-
field: "assets[].requires"
|
|
1602
|
-
}));
|
|
1603
|
-
const mergedManifest = {
|
|
1604
|
-
...entry.metadata ?? {},
|
|
1605
|
-
...manifest
|
|
1606
|
-
};
|
|
1607
|
-
const asset = {
|
|
1608
|
-
ref,
|
|
1609
|
-
kind: entry.kind,
|
|
1610
|
-
publisher: entry.publisher,
|
|
1611
|
-
name: entry.name,
|
|
1612
|
-
version: entry.version,
|
|
1613
|
-
manifest: mergedManifest,
|
|
1614
|
-
manifestPath: manifestFull,
|
|
1615
|
-
relativePath: manifestFull,
|
|
1616
|
-
fileFilter: {
|
|
1617
|
-
assetRoot: entry.path,
|
|
1618
|
-
files: [...files].sort()
|
|
1619
|
-
},
|
|
1620
|
-
sha256: computedHash,
|
|
1621
|
-
requires
|
|
1622
|
-
};
|
|
1623
|
-
return { asset, errors };
|
|
1922
|
+
return computedHash;
|
|
1624
1923
|
}
|
|
1625
1924
|
var MANIFEST_FILENAMES2 = /* @__PURE__ */ new Set([
|
|
1626
1925
|
"SKILL.md",
|
|
@@ -1687,6 +1986,6 @@ function validateRequiresSyntax2(requires) {
|
|
|
1687
1986
|
// discovery/src/index.ts
|
|
1688
1987
|
var VERSION = "0.0.0";
|
|
1689
1988
|
|
|
1690
|
-
export { AssetKindRegistry, BUILTIN_PROVIDERS, SEMVER_RE, SourceConfigSchema, VERSION, agentProvider, buildRequiresGraph, computeDeterministicHash, computeDeterministicHashDetailed, connectorProvider, contractProvider, createDefaultRegistry, decodeManifestSourceConfig, detectCycles, discoverAssetsInTree, discoverAssetsInTreeEntries, discoverFromManifest, extractRequires, isExcludedDevPath, isManifestMode, loadMergedSourceConfig, loadSourceConfig, manifestToSourceConfig, mcpServerProvider, mergeSourceConfigs, parseSourceConfig, personaProvider, presetProvider, promptProvider, readManifestSourceConfig, rulesetProvider, skillProvider, validateSourceConfig };
|
|
1691
|
-
//# sourceMappingURL=chunk-
|
|
1692
|
-
//# sourceMappingURL=chunk-
|
|
1989
|
+
export { AssetKindRegistry, BUILTIN_PROVIDERS, DOMAIN_MD_FILENAME, SEMVER_RE, SourceConfigSchema, VERSION, agentProvider, assignDomain, buildDomainIndex, buildRequiresGraph, computeDeterministicHash, computeDeterministicHashDetailed, connectorProvider, contractProvider, createDefaultRegistry, decodeManifestSourceConfig, detectCycles, discoverAssetsInTree, discoverAssetsInTreeEntries, discoverFromManifest, extractRequires, isDomainMdPath, isExcludedDevPath, isManifestMode, loadMergedSourceConfig, loadSourceConfig, manifestToSourceConfig, mcpServerProvider, mergeSourceConfigs, parseDomainMd, parseSourceConfig, personaProvider, presetProvider, promptProvider, readManifestSourceConfig, rulesetProvider, skillProvider, validateDomains, validateSourceConfig };
|
|
1990
|
+
//# sourceMappingURL=chunk-7MANNJ3U.js.map
|
|
1991
|
+
//# sourceMappingURL=chunk-7MANNJ3U.js.map
|