@skaile/workspaces 4.39.0 → 5.0.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 +21 -0
- package/dist/{asset-feeds-KXL45ALC.js → asset-feeds-HIWT4DVT.js} +24 -96
- package/dist/asset-feeds-HIWT4DVT.js.map +1 -0
- package/dist/asset-manager/catalog-deployer.js +10 -9
- package/dist/asset-manager/index.js +15 -14
- package/dist/asset-manager/installer.js +10 -9
- package/dist/asset-manager/src/catalog-deployer.d.ts +1 -3
- package/dist/asset-manager/src/catalog-deployer.d.ts.map +1 -1
- package/dist/asset-manager/src/index.d.ts +6 -8
- package/dist/asset-manager/src/index.d.ts.map +1 -1
- package/dist/bridge/drivers/claude-sdk.js +23 -11
- package/dist/bridge/drivers/claude-sdk.js.map +1 -1
- package/dist/bridge/drivers/codex.js +11 -10
- package/dist/bridge/drivers/codex.js.map +1 -1
- package/dist/bridge/drivers/continue.js +12 -11
- package/dist/bridge/drivers/continue.js.map +1 -1
- package/dist/bridge/drivers/echo.js +2 -2
- package/dist/bridge/drivers/gemini.js +6 -6
- package/dist/bridge/drivers/goose.js +12 -11
- package/dist/bridge/drivers/goose.js.map +1 -1
- package/dist/bridge/drivers/omp.js +3 -3
- package/dist/bridge/drivers/opencode.js +12 -11
- package/dist/bridge/drivers/opencode.js.map +1 -1
- package/dist/bridge/drivers/qwen.js +6 -6
- package/dist/bridge/index.js +13 -12
- package/dist/bridge/src/drivers/claude-sdk.d.ts +4 -0
- package/dist/bridge/src/drivers/claude-sdk.d.ts.map +1 -1
- package/dist/bridge/src/types.d.ts +7 -0
- package/dist/bridge/src/types.d.ts.map +1 -1
- package/dist/{chunk-7RC37XFW.js → chunk-22DN3DB2.js} +59 -12
- package/dist/chunk-22DN3DB2.js.map +1 -0
- package/dist/{chunk-SM6EUQMY.js → chunk-32DMH2GD.js} +8 -8
- package/dist/{chunk-SM6EUQMY.js.map → chunk-32DMH2GD.js.map} +1 -1
- package/dist/{chunk-A5EDMBFG.js → chunk-43ZBF3WH.js} +5 -8
- package/dist/chunk-43ZBF3WH.js.map +1 -0
- package/dist/{chunk-5RWL4L3X.js → chunk-53WMBXSL.js} +60 -14
- package/dist/chunk-53WMBXSL.js.map +1 -0
- package/dist/{chunk-YCMZHL4T.js → chunk-7QMRP6BC.js} +4 -4
- package/dist/{chunk-YCMZHL4T.js.map → chunk-7QMRP6BC.js.map} +1 -1
- package/dist/chunk-A2ULN3KX.js +40 -0
- package/dist/chunk-A2ULN3KX.js.map +1 -0
- package/dist/{chunk-DSB6X25D.js → chunk-AG44ZJ7W.js} +3 -3
- package/dist/{chunk-DSB6X25D.js.map → chunk-AG44ZJ7W.js.map} +1 -1
- package/dist/{chunk-SSCPTAFJ.js → chunk-CFL5IJHV.js} +3 -3
- package/dist/{chunk-SSCPTAFJ.js.map → chunk-CFL5IJHV.js.map} +1 -1
- package/dist/{chunk-36ML6SFP.js → chunk-CGJ7B6MZ.js} +4 -4
- package/dist/{chunk-36ML6SFP.js.map → chunk-CGJ7B6MZ.js.map} +1 -1
- package/dist/{chunk-6X4DHKHP.js → chunk-CT6NQSA4.js} +3 -3
- package/dist/{chunk-6X4DHKHP.js.map → chunk-CT6NQSA4.js.map} +1 -1
- package/dist/{chunk-5K2VT6E2.js → chunk-DXUQCMVT.js} +3 -3
- package/dist/{chunk-5K2VT6E2.js.map → chunk-DXUQCMVT.js.map} +1 -1
- package/dist/{chunk-B4IAZTZZ.js → chunk-EB6OPURC.js} +3 -3
- package/dist/{chunk-B4IAZTZZ.js.map → chunk-EB6OPURC.js.map} +1 -1
- package/dist/{chunk-252TK4RU.js → chunk-GFPG27HK.js} +12 -14
- package/dist/chunk-GFPG27HK.js.map +1 -0
- package/dist/{chunk-2EL2PBRC.js → chunk-H4EGUQ7M.js} +3 -3
- package/dist/{chunk-2EL2PBRC.js.map → chunk-H4EGUQ7M.js.map} +1 -1
- package/dist/{chunk-YQEF36D5.js → chunk-H5G3OYY6.js} +4 -4
- package/dist/{chunk-YQEF36D5.js.map → chunk-H5G3OYY6.js.map} +1 -1
- package/dist/{chunk-C75VKXAM.js → chunk-HD5K3BYW.js} +3 -3
- package/dist/{chunk-C75VKXAM.js.map → chunk-HD5K3BYW.js.map} +1 -1
- package/dist/{chunk-VJNTB4DN.js → chunk-HTBGJCKP.js} +4 -4
- package/dist/{chunk-VJNTB4DN.js.map → chunk-HTBGJCKP.js.map} +1 -1
- package/dist/{chunk-JEPSP6XK.js → chunk-HWE3FXF4.js} +17 -11
- package/dist/chunk-HWE3FXF4.js.map +1 -0
- package/dist/{chunk-QVLQGXT6.js → chunk-I3ITSUWS.js} +5 -5
- package/dist/{chunk-QVLQGXT6.js.map → chunk-I3ITSUWS.js.map} +1 -1
- package/dist/{chunk-H7N6RWNF.js → chunk-I7Z4FN52.js} +4 -4
- package/dist/{chunk-H7N6RWNF.js.map → chunk-I7Z4FN52.js.map} +1 -1
- package/dist/{chunk-WCWFS36P.js → chunk-IGXKUCLI.js} +3 -3
- package/dist/{chunk-WCWFS36P.js.map → chunk-IGXKUCLI.js.map} +1 -1
- package/dist/{chunk-VXPFSZDT.js → chunk-JFVEX4G5.js} +6 -6
- package/dist/{chunk-VXPFSZDT.js.map → chunk-JFVEX4G5.js.map} +1 -1
- package/dist/{chunk-YYH5EVPM.js → chunk-JUXQUZOQ.js} +12 -4
- package/dist/{chunk-YYH5EVPM.js.map → chunk-JUXQUZOQ.js.map} +1 -1
- package/dist/{chunk-M7GPCWEV.js → chunk-KREXWKVX.js} +3 -3
- package/dist/{chunk-M7GPCWEV.js.map → chunk-KREXWKVX.js.map} +1 -1
- package/dist/{chunk-TQ6XNACF.js → chunk-LHFZTVIM.js} +23 -24
- package/dist/chunk-LHFZTVIM.js.map +1 -0
- package/dist/{chunk-YV3YI3TA.js → chunk-MBVNMPG7.js} +4 -4
- package/dist/{chunk-YV3YI3TA.js.map → chunk-MBVNMPG7.js.map} +1 -1
- package/dist/{chunk-3C3ODIDE.js → chunk-MX7IRKTO.js} +6 -6
- package/dist/{chunk-3C3ODIDE.js.map → chunk-MX7IRKTO.js.map} +1 -1
- package/dist/{chunk-UDFWBALP.js → chunk-NFGRW3L7.js} +3 -3
- package/dist/{chunk-UDFWBALP.js.map → chunk-NFGRW3L7.js.map} +1 -1
- package/dist/{chunk-5LF27VUB.js → chunk-ODT7HSLI.js} +16 -15
- package/dist/chunk-ODT7HSLI.js.map +1 -0
- package/dist/{chunk-QBQITQAM.js → chunk-PV4OBVA3.js} +3 -3
- package/dist/{chunk-QBQITQAM.js.map → chunk-PV4OBVA3.js.map} +1 -1
- package/dist/{chunk-ORH2BZEM.js → chunk-QCI6D7E4.js} +69 -22
- package/dist/chunk-QCI6D7E4.js.map +1 -0
- package/dist/{chunk-DIQDYNXZ.js → chunk-QZLWJETK.js} +3 -3
- package/dist/{chunk-DIQDYNXZ.js.map → chunk-QZLWJETK.js.map} +1 -1
- package/dist/{chunk-TSVRKUGV.js → chunk-RP4B4HVX.js} +11 -2
- package/dist/chunk-RP4B4HVX.js.map +1 -0
- package/dist/{chunk-X4DKUGV4.js → chunk-RSHMAEK3.js} +7 -13
- package/dist/chunk-RSHMAEK3.js.map +1 -0
- package/dist/chunk-RVRB27AN.js +64 -0
- package/dist/chunk-RVRB27AN.js.map +1 -0
- package/dist/{chunk-5NYBY6ZE.js → chunk-TVOODIZE.js} +3 -3
- package/dist/{chunk-5NYBY6ZE.js.map → chunk-TVOODIZE.js.map} +1 -1
- package/dist/{chunk-FTPKMJFD.js → chunk-TVYLXZTT.js} +2 -2
- package/dist/{chunk-FTPKMJFD.js.map → chunk-TVYLXZTT.js.map} +1 -1
- package/dist/{chunk-EOKAFBJ7.js → chunk-TYUJB336.js} +3 -3
- package/dist/{chunk-EOKAFBJ7.js.map → chunk-TYUJB336.js.map} +1 -1
- package/dist/{chunk-OLMNDIAU.js → chunk-UVOJSWD2.js} +95 -320
- package/dist/chunk-UVOJSWD2.js.map +1 -0
- package/dist/{chunk-DOVURNRK.js → chunk-VDJKWKH2.js} +3 -3
- package/dist/chunk-VDJKWKH2.js.map +1 -0
- package/dist/{chunk-VDBP6Y5M.js → chunk-WCQMXBO5.js} +21 -47
- package/dist/chunk-WCQMXBO5.js.map +1 -0
- package/dist/{chunk-NLKIW2VI.js → chunk-WOJ4AK3Q.js} +3 -3
- package/dist/{chunk-NLKIW2VI.js.map → chunk-WOJ4AK3Q.js.map} +1 -1
- package/dist/{chunk-XU7JET5Z.js → chunk-X7MHVL4R.js} +16 -100
- package/dist/chunk-X7MHVL4R.js.map +1 -0
- package/dist/{chunk-K3IBZ2UZ.js → chunk-XUUYAS3Z.js} +3 -3
- package/dist/{chunk-K3IBZ2UZ.js.map → chunk-XUUYAS3Z.js.map} +1 -1
- package/dist/{chunk-BCUVRJXV.js → chunk-XWLEXD34.js} +3 -3
- package/dist/{chunk-BCUVRJXV.js.map → chunk-XWLEXD34.js.map} +1 -1
- package/dist/{chunk-P7BU6DAC.js → chunk-YOWFUJO7.js} +69 -31
- package/dist/chunk-YOWFUJO7.js.map +1 -0
- package/dist/{chunk-OQRB7JUS.js → chunk-YV4J7V53.js} +3 -3
- package/dist/{chunk-OQRB7JUS.js.map → chunk-YV4J7V53.js.map} +1 -1
- package/dist/{chunk-JXT46QFC.js → chunk-ZDKJHQY2.js} +2 -2
- package/dist/{chunk-JXT46QFC.js.map → chunk-ZDKJHQY2.js.map} +1 -1
- package/dist/cli/index.js +375 -699
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/src/asset-feeds.d.ts +1 -8
- package/dist/cli/src/asset-feeds.d.ts.map +1 -1
- package/dist/cli/src/commands/asset-cmd.d.ts.map +1 -1
- package/dist/cli/src/commands/library-cmd.d.ts.map +1 -1
- package/dist/cli/src/commands/library-index.d.ts +5 -12
- package/dist/cli/src/commands/library-index.d.ts.map +1 -1
- package/dist/cli/src/commands/manage.d.ts +74 -58
- package/dist/cli/src/commands/manage.d.ts.map +1 -1
- package/dist/cli/src/commands/show.d.ts +1 -1
- package/dist/cli/src/commands/skailify-lib.d.ts +0 -31
- package/dist/cli/src/commands/skailify-lib.d.ts.map +1 -1
- package/dist/cli/src/commands/source-manifest.d.ts.map +1 -1
- package/dist/cli/src/commands/validate.d.ts +20 -2
- package/dist/cli/src/commands/validate.d.ts.map +1 -1
- package/dist/cli/src/flow-discovery.d.ts +2 -2
- package/dist/cli/src/hooks/pre-commit-version.d.ts +1 -1
- package/dist/cli/src/skill-walker.d.ts +7 -10
- package/dist/cli/src/skill-walker.d.ts.map +1 -1
- package/dist/connectors/config.js +6 -5
- package/dist/connectors/index.js +21 -20
- package/dist/core/discovery.js +1 -1
- package/dist/core/index.js +9 -8
- package/dist/core/manifest.js +2 -2
- package/dist/core/models.js +1 -1
- package/dist/core/plugin-groupings.d.ts +2 -0
- package/dist/core/plugin-groupings.js +4 -0
- package/dist/core/plugin-groupings.js.map +1 -0
- package/dist/core/publish-manifest.js +2 -2
- package/dist/core/ref.js +1 -1
- package/dist/core/runtime-assets.js +6 -5
- package/dist/core/src/discovery.d.ts +11 -51
- package/dist/core/src/discovery.d.ts.map +1 -1
- package/dist/core/src/index.d.ts +3 -2
- package/dist/core/src/index.d.ts.map +1 -1
- package/dist/core/src/models.d.ts +6 -33
- package/dist/core/src/models.d.ts.map +1 -1
- package/dist/core/src/plugin-groupings.d.ts +31 -0
- package/dist/core/src/plugin-groupings.d.ts.map +1 -0
- package/dist/core/src/repo-manager.d.ts.map +1 -1
- package/dist/core/src/settings.d.ts +1 -1
- package/dist/core/src/workspace-config.d.ts +1 -1
- package/dist/core/workspace-config.js +5 -4
- package/dist/deploy/index.js +9 -8
- package/dist/deploy/index.js.map +1 -1
- package/dist/discovery/index.js +6 -5
- package/dist/discovery/src/discover.d.ts +9 -25
- package/dist/discovery/src/discover.d.ts.map +1 -1
- package/dist/discovery/src/index.d.ts +0 -2
- package/dist/discovery/src/index.d.ts.map +1 -1
- package/dist/discovery/src/source-config.d.ts +13 -9
- package/dist/discovery/src/source-config.d.ts.map +1 -1
- package/dist/discovery/src/tree-entries.d.ts +6 -11
- package/dist/discovery/src/tree-entries.d.ts.map +1 -1
- package/dist/{ensure-sources-J5CDTQ36.js → ensure-sources-G4FXTJDB.js} +18 -17
- package/dist/ensure-sources-G4FXTJDB.js.map +1 -0
- package/dist/factory-assets/README.md +1 -1
- package/dist/factory-assets/connectors/box.js +21 -20
- package/dist/factory-assets/connectors/deploy.js +21 -20
- package/dist/factory-assets/connectors/devserver.js +21 -20
- package/dist/factory-assets/connectors/flow/CONNECTOR.md +6 -1
- package/dist/factory-assets/connectors/flow/adapter.d.ts.map +1 -1
- package/dist/factory-assets/connectors/flow/adapter.js +21 -20
- package/dist/factory-assets/connectors/flow/contract/flow.v2.schema.json +13 -3
- package/dist/factory-assets/connectors/flow/contract/index.d.ts +1 -0
- package/dist/factory-assets/connectors/flow/contract/index.d.ts.map +1 -1
- package/dist/factory-assets/connectors/flow/contract/output-fields.d.ts +21 -5
- package/dist/factory-assets/connectors/flow/contract/output-fields.d.ts.map +1 -1
- package/dist/factory-assets/connectors/flow/contract/schema.d.ts +2 -0
- package/dist/factory-assets/connectors/flow/contract/schema.d.ts.map +1 -1
- package/dist/factory-assets/connectors/flow/contract/sub-flow-output.d.ts +20 -0
- package/dist/factory-assets/connectors/flow/contract/sub-flow-output.d.ts.map +1 -0
- package/dist/factory-assets/connectors/flow/contract.js +4 -4
- package/dist/factory-assets/connectors/flow/engine/bindings.d.ts.map +1 -1
- package/dist/factory-assets/connectors/flow/engine/flow-output.d.ts +12 -0
- package/dist/factory-assets/connectors/flow/engine/flow-output.d.ts.map +1 -0
- package/dist/factory-assets/connectors/flow/engine/index.d.ts +1 -0
- package/dist/factory-assets/connectors/flow/engine/index.d.ts.map +1 -1
- package/dist/factory-assets/connectors/flow/engine/loader.d.ts +3 -3
- package/dist/factory-assets/connectors/flow/engine/locate.d.ts +2 -2
- package/dist/factory-assets/connectors/flow/engine/locate.d.ts.map +1 -1
- package/dist/factory-assets/connectors/flow/engine/types.d.ts +0 -2
- package/dist/factory-assets/connectors/flow/engine/types.d.ts.map +1 -1
- package/dist/factory-assets/connectors/flow/engine.js +13 -12
- package/dist/factory-assets/connectors/flow/inline-sub-flow-host.d.ts.map +1 -1
- package/dist/factory-assets/connectors/flow/prompt-fragments.js +3 -3
- package/dist/factory-assets/connectors/flow/run-flow.d.ts.map +1 -1
- package/dist/factory-assets/connectors/flow/run-flow.js +23 -22
- package/dist/factory-assets/connectors/flow/sub-flow-runner.d.ts +6 -5
- package/dist/factory-assets/connectors/flow/sub-flow-runner.d.ts.map +1 -1
- package/dist/factory-assets/connectors/flow.js +21 -20
- package/dist/factory-assets/connectors/git.js +21 -20
- package/dist/factory-assets/connectors/gmail.js +21 -20
- package/dist/factory-assets/connectors/googledrive.js +21 -20
- package/dist/factory-assets/connectors/local.js +21 -20
- package/dist/factory-assets/connectors/mattermost.js +21 -20
- package/dist/factory-assets/connectors/memory.js +21 -20
- package/dist/factory-assets/connectors/minio.js +21 -20
- package/dist/factory-assets/connectors/postgres.js +21 -20
- package/dist/factory-assets/connectors/s3.js +21 -20
- package/dist/factory-assets/connectors/sharepoint.js +21 -20
- package/dist/factory-assets/connectors/sqlite.js +21 -20
- package/dist/factory-assets/connectors/static-server.js +21 -20
- package/dist/factory-assets/connectors/tunnel.js +21 -20
- package/dist/factory-assets/connectors/webdav.js +21 -20
- package/dist/factory-assets/connectors/xstate-store.js +21 -20
- package/dist/factory-assets/connectors/xstate.js +21 -20
- package/dist/factory-assets/skills/skaile-author-asset/SKILL.md +37 -26
- package/dist/factory-assets/skills/skaile-manage-workspace/SKILL.md +2 -2
- package/dist/factory-assets/skills/skailify/SKILL.md +10 -19
- package/dist/{flows-PX53XFV7.js → flows-7E2GVW5L.js} +14 -13
- package/dist/{flows-PX53XFV7.js.map → flows-7E2GVW5L.js.map} +1 -1
- package/dist/{helpers-EP6H3O3S.js → helpers-EVPKJXGS.js} +18 -17
- package/dist/{helpers-EP6H3O3S.js.map → helpers-EVPKJXGS.js.map} +1 -1
- package/dist/library/index.js +13 -12
- package/dist/library/install.js +2 -2
- package/dist/library/src/index.d.ts +1 -1
- package/dist/library/src/index.d.ts.map +1 -1
- package/dist/library/src/local/db.d.ts.map +1 -1
- package/dist/library/src/local/library-manager.d.ts.map +1 -1
- package/dist/library/src/local/library.d.ts.map +1 -1
- package/dist/library/src/local/local-catalog-source.d.ts +0 -9
- package/dist/library/src/local/local-catalog-source.d.ts.map +1 -1
- package/dist/library/src/local/schema.d.ts +1 -20
- package/dist/library/src/local/schema.d.ts.map +1 -1
- package/dist/library/src/remote/remote-catalog-source.d.ts +1 -11
- package/dist/library/src/remote/remote-catalog-source.d.ts.map +1 -1
- package/dist/library/src/sync/manifest-writeback.d.ts +5 -5
- package/dist/library/src/sync/manifest-writeback.d.ts.map +1 -1
- package/dist/library/src/user-library.d.ts +1 -9
- package/dist/library/src/user-library.d.ts.map +1 -1
- package/dist/{library-publish-KKT73FJK.js → library-publish-SBEWWTPM.js} +25 -24
- package/dist/library-publish-SBEWWTPM.js.map +1 -0
- package/dist/open-library-UAZIGZUQ.js +39 -0
- package/dist/{open-library-R62UBL6E.js.map → open-library-UAZIGZUQ.js.map} +1 -1
- package/dist/paths-U7TA7MTE.js +22 -0
- package/dist/{paths-W4LDORQQ.js.map → paths-U7TA7MTE.js.map} +1 -1
- package/dist/{plugin-store-D45CREMJ.js → plugin-store-TT45MGQZ.js} +11 -10
- package/dist/plugin-store-TT45MGQZ.js.map +1 -0
- package/dist/plugins/index.js +1 -1
- package/dist/plugins/src/catalog-source.d.ts +4 -55
- package/dist/plugins/src/catalog-source.d.ts.map +1 -1
- package/dist/plugins/src/index.d.ts +1 -1
- package/dist/plugins/src/index.d.ts.map +1 -1
- package/dist/{project-GCW5DFAB.js → project-JLD5RCVK.js} +19 -18
- package/dist/{project-GCW5DFAB.js.map → project-JLD5RCVK.js.map} +1 -1
- package/dist/resolver/index.js +10 -9
- package/dist/runner/index.js +32 -31
- package/dist/runner/src/compaction/orchestrator.d.ts +2 -1
- package/dist/runner/src/compaction/orchestrator.d.ts.map +1 -1
- package/dist/runner/src/compaction-gate.d.ts +13 -0
- package/dist/runner/src/compaction-gate.d.ts.map +1 -1
- package/dist/runner/src/serve.d.ts.map +1 -1
- package/dist/sdk/asset-manager.js +15 -14
- package/dist/sdk/bridge.js +13 -12
- package/dist/sdk/core.js +9 -8
- package/dist/sdk/flow.js +13 -12
- package/dist/sdk/index.js +32 -31
- package/dist/sdk/index.js.map +1 -1
- package/dist/sdk/resolver.js +10 -9
- package/dist/sdk/runner.js +32 -31
- package/dist/secrets/index.js +2 -2
- package/dist/{setup-Q3LXY5AE.js → setup-PGZM4SOO.js} +23 -22
- package/dist/setup-PGZM4SOO.js.map +1 -0
- package/dist/skills-7QVYPIXI.js +26 -0
- package/dist/{skills-R3RPIPWP.js.map → skills-7QVYPIXI.js.map} +1 -1
- package/dist/source-SDZYXVVV.js +40 -0
- package/dist/{source-CFQESKJU.js.map → source-SDZYXVVV.js.map} +1 -1
- package/dist/{source-manifest-publish-3TCBA2RV.js → source-manifest-publish-UDLTYV6Y.js} +26 -25
- package/dist/source-manifest-publish-UDLTYV6Y.js.map +1 -0
- package/dist/tui/index.js +32 -31
- package/dist/tui/index.js.map +1 -1
- package/dist/workspace-plugin/adapters/mcp.js +16 -15
- package/dist/workspace-plugin/adapters/omp.js +13 -13
- package/dist/workspace-plugin/adapters/omp.js.map +1 -1
- package/dist/workspace-plugin/index.js +1 -1
- package/dist/workspace-plugin/src/adapters/mcp.d.ts +4 -4
- package/dist/workspace-plugin/src/adapters/mcp.d.ts.map +1 -1
- package/dist/workspace-plugin/src/adapters/omp.d.ts +2 -2
- package/dist/workspace-plugin/src/tools/skills.d.ts +5 -17
- package/dist/workspace-plugin/src/tools/skills.d.ts.map +1 -1
- package/package.json +7 -1
- package/dist/asset-feeds-KXL45ALC.js.map +0 -1
- package/dist/chunk-252TK4RU.js.map +0 -1
- package/dist/chunk-5LF27VUB.js.map +0 -1
- package/dist/chunk-5RWL4L3X.js.map +0 -1
- package/dist/chunk-7RC37XFW.js.map +0 -1
- package/dist/chunk-A5EDMBFG.js.map +0 -1
- package/dist/chunk-DOVURNRK.js.map +0 -1
- package/dist/chunk-JEPSP6XK.js.map +0 -1
- package/dist/chunk-OLMNDIAU.js.map +0 -1
- package/dist/chunk-ORH2BZEM.js.map +0 -1
- package/dist/chunk-P7BU6DAC.js.map +0 -1
- package/dist/chunk-QVZA2MDT.js +0 -81
- package/dist/chunk-QVZA2MDT.js.map +0 -1
- package/dist/chunk-TQ6XNACF.js.map +0 -1
- package/dist/chunk-TSVRKUGV.js.map +0 -1
- package/dist/chunk-VDBP6Y5M.js.map +0 -1
- package/dist/chunk-X4DKUGV4.js.map +0 -1
- package/dist/chunk-XU7JET5Z.js.map +0 -1
- package/dist/discovery/src/domains.d.ts +0 -149
- package/dist/discovery/src/domains.d.ts.map +0 -1
- package/dist/ensure-sources-J5CDTQ36.js.map +0 -1
- package/dist/library-publish-KKT73FJK.js.map +0 -1
- package/dist/open-library-R62UBL6E.js +0 -38
- package/dist/paths-W4LDORQQ.js +0 -21
- package/dist/plugin-store-D45CREMJ.js.map +0 -1
- package/dist/setup-Q3LXY5AE.js.map +0 -1
- package/dist/skills-R3RPIPWP.js +0 -25
- package/dist/source-CFQESKJU.js +0 -39
- package/dist/source-manifest-publish-3TCBA2RV.js.map +0 -1
package/dist/deploy/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../deploy/src/targets/port.ts","../../deploy/src/targets/stream-lines.ts","../../deploy/src/targets/container-runtime.ts","../../deploy/src/targets/docker.ts","../../deploy/src/targets/process-handle.ts","../../deploy/src/targets/local.ts","../../deploy/src/targets/nix.ts","../../deploy/src/targets/podman.ts","../../deploy/src/handle-store.ts","../../deploy/src/index.ts"],"names":["z2","DEFAULT_READY_PATTERN","DEFAULT_READY_TIMEOUT_MS","require","resolvePath","z3","z4","dirname"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Free-port allocation for deploy targets.\n *\n * `connectors/src/port-pool.ts` exists but its `PortPool` is a stateful\n * range-allocator scoped to the connectors package; deploy targets just need a\n * single OS-assigned ephemeral port, so a small inline finder is the right fit.\n */\n\nimport { createServer } from \"node:net\";\n\n/** Bind to port 0, read the OS-assigned port, release it, and return it. */\nexport function allocateFreePort(host = \"127.0.0.1\"): Promise<number> {\n return new Promise((resolve, reject) => {\n const server = createServer();\n server.once(\"error\", reject);\n server.listen(0, host, () => {\n const addr = server.address();\n if (addr === null || typeof addr === \"string\") {\n server.close();\n reject(new Error(\"could not determine allocated port\"));\n return;\n }\n const { port } = addr;\n server.close(() => resolve(port));\n });\n });\n}\n","/**\n * Shared line-buffering helpers for deploy targets.\n *\n * Both the local target (subprocess stdout) and the container runtimes\n * (`<bin> logs`) read text off a web `ReadableStream<Uint8Array>` and need the\n * same UTF-8 decode + newline-split logic, plus a timestamped ring buffer so\n * `DeployHandle.logs()` can replay what was already seen.\n */\n\n/** One buffered log line with the wall-clock time it was observed. */\nexport interface BufferedLine {\n ts: number;\n line: string;\n}\n\n/**\n * Bounded FIFO of decoded lines. Drives both the readiness watcher and\n * `logs()` replay; the cap keeps a long-running process from growing unbounded.\n */\nexport class LineBuffer {\n private readonly lines: BufferedLine[] = [];\n private readonly waiters = new Set<(line: BufferedLine) => void>();\n\n constructor(private readonly max = 1000) {}\n\n push(line: string): void {\n const entry: BufferedLine = { ts: Date.now(), line };\n this.lines.push(entry);\n if (this.lines.length > this.max) this.lines.shift();\n for (const w of this.waiters) w(entry);\n }\n\n /** Snapshot of buffered lines at or after `sinceMs` (epoch millis). */\n since(sinceMs = 0): BufferedLine[] {\n return this.lines.filter((l) => l.ts >= sinceMs);\n }\n\n /** Subscribe to future pushes; returns an unsubscribe fn. */\n subscribe(fn: (line: BufferedLine) => void): () => void {\n this.waiters.add(fn);\n return () => this.waiters.delete(fn);\n }\n}\n\n/**\n * Pump a byte stream into a {@link LineBuffer}, splitting on `\\n`. Resolves when\n * the stream ends. Errors (e.g. the process being killed mid-read) are\n * swallowed — a dead stream just means no more lines.\n */\nexport async function pumpLines(\n stream: ReadableStream<Uint8Array>,\n buffer: LineBuffer,\n): Promise<void> {\n const reader = stream.getReader();\n const decoder = new TextDecoder();\n let pending = \"\";\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n pending += decoder.decode(value, { stream: true });\n let idx = pending.indexOf(\"\\n\");\n while (idx !== -1) {\n buffer.push(pending.slice(0, idx));\n pending = pending.slice(idx + 1);\n idx = pending.indexOf(\"\\n\");\n }\n }\n } catch {\n // Stream torn down (process killed) — nothing more to read.\n } finally {\n if (pending.length > 0) buffer.push(pending);\n reader.releaseLock();\n }\n}\n\n/**\n * Resolve once a buffered line matches `pattern`, reject on timeout or abort.\n * Checks already-buffered lines first so a fast-printing process never races\n * the subscription.\n */\nexport function waitForLine(\n buffer: LineBuffer,\n pattern: RegExp,\n opts: { timeoutMs: number; signal: AbortSignal },\n): Promise<void> {\n for (const { line } of buffer.since(0)) {\n if (pattern.test(line)) return Promise.resolve();\n }\n return new Promise<void>((resolve, reject) => {\n let settled = false;\n const finish = (fn: () => void) => {\n if (settled) return;\n settled = true;\n clearTimeout(timer);\n unsub();\n opts.signal.removeEventListener(\"abort\", onAbort);\n fn();\n };\n const unsub = buffer.subscribe(({ line }) => {\n if (pattern.test(line)) finish(resolve);\n });\n const onAbort = () => finish(() => reject(new Error(\"aborted while waiting for ready line\")));\n const timer = setTimeout(\n () =>\n finish(() =>\n reject(new Error(`timed out after ${opts.timeoutMs}ms waiting for ready line`)),\n ),\n opts.timeoutMs,\n );\n if (opts.signal.aborted) onAbort();\n else opts.signal.addEventListener(\"abort\", onAbort);\n });\n}\n","/**\n * Shared docker/podman deploy target, parameterized by binary name.\n *\n * docker and podman expose the same CLI surface for the run/inspect/logs/rm\n * verbs this target needs, so one implementation backs both\n * (`makeContainerDeployTarget(\"docker\" | \"podman\")`). `tlsTermination: \"none\"`\n * means loopback-only: a zod refinement rejects a non-loopback `bind` until tls\n * config lands (locked decision #12).\n */\n\nimport { type PortableSubprocess, portableSpawn, portableSpawnSync } from \"@skaile/workspaces/core\";\nimport {\n type DeployContext,\n type DeployHandle,\n type DeployTarget,\n makeDeployHandle,\n} from \"@skaile/workspaces/plugin-registry\";\nimport * as z from \"zod\";\nimport { allocateFreePort } from \"./port.js\";\nimport { LineBuffer, pumpLines, waitForLine } from \"./stream-lines.js\";\n\ntype ContainerBin = \"docker\" | \"podman\";\n\nconst LOOPBACK_BINDS = new Set([\"127.0.0.1\", \"localhost\", \"::1\"]);\nconst DEFAULT_READY_PATTERN = \"ws://\";\nconst DEFAULT_READY_TIMEOUT_MS = 60_000;\n/**\n * Deadline for `<bin> run -d`. Generous because it covers an image pull on a\n * cold host; the flag still bounds a runtime that has itself wedged.\n */\nconst CONTAINER_RUN_TIMEOUT_MS = 300_000;\n/** Deadline for `<bin> rm -f` during teardown — a local, metadata-only call. */\nconst CONTAINER_RM_TIMEOUT_MS = 30_000;\n\nconst containerConfigSchema = z\n .object({\n image: z.string(),\n port: z.number().int().positive().optional(),\n bind: z.string().default(\"127.0.0.1\"),\n mounts: z.array(z.string()).default([]),\n env: z.record(z.string(), z.string()).default({}),\n network: z.string().optional(),\n pullPolicy: z.enum([\"always\", \"if-missing\", \"never\"]).default(\"if-missing\"),\n // \"local\" only — this target runs a prebuilt image and has no in-provider builder.\n // The full buildStrategySchema (local/remote/managed) lives in plugin-registry for the provider-* packages that implement remote builds.\n buildStrategy: z.literal(\"local\").default(\"local\"),\n containerPort: z.number().int().positive().optional(),\n readyPattern: z.string().optional(),\n })\n .strict()\n .refine((c) => LOOPBACK_BINDS.has(c.bind), {\n message: \"non-loopback bind requires tls config (not yet supported); use a loopback bind\",\n path: [\"bind\"],\n });\n\ntype ContainerConfig = z.infer<typeof containerConfigSchema>;\n\nfunction payloadSchemaFor(bin: ContainerBin) {\n return z.object({\n containerId: z.string(),\n hostPort: z.number(),\n runtime: z.enum([\"docker\", \"podman\"]).refine((r) => r === bin, {\n message: `runtime mismatch: handle belongs to ${bin}`,\n }),\n // Older handles predate `bind`; default to loopback so restore stays valid.\n bind: z.string().default(\"127.0.0.1\"),\n });\n}\n\ntype ContainerPayload = {\n containerId: string;\n hostPort: number;\n runtime: ContainerBin;\n bind: string;\n};\n\nfunction pullFlag(policy: ContainerConfig[\"pullPolicy\"]): string[] {\n // `docker run --pull` takes always|missing|never; map our \"if-missing\".\n const mapped = policy === \"if-missing\" ? \"missing\" : policy;\n return [\"--pull\", mapped];\n}\n\nasync function readStream(stream: ReadableStream<Uint8Array>): Promise<string> {\n const reader = stream.getReader();\n const decoder = new TextDecoder();\n let out = \"\";\n try {\n for (;;) {\n const { done, value } = await reader.read();\n if (done) break;\n if (value) out += decoder.decode(value, { stream: true });\n }\n } finally {\n reader.releaseLock();\n }\n return out + decoder.decode();\n}\n\n/**\n * True when `<bin> inspect` reports the container in a running state.\n *\n * Async (over `portableSpawn` + `await exited`) so the inspect round-trip stays\n * off the event loop — `health()` / `restore()` poll this without freezing log\n * pumps or other connections.\n */\nasync function isRunning(bin: ContainerBin, containerId: string): Promise<boolean> {\n const proc = portableSpawn([bin, \"inspect\", \"-f\", \"{{.State.Running}}\", containerId]);\n const [exitCode, stdout] = await Promise.all([proc.exited, readStream(proc.stdout)]);\n return exitCode === 0 && stdout.trim() === \"true\";\n}\n\n/** The single `<bin> logs --follow` stream that backs both readiness and `logs()`. */\ninterface LogStream {\n buffer: LineBuffer;\n proc: PortableSubprocess;\n}\n\n/**\n * Spawn one shared `<bin> logs --follow` and pump it into a single\n * {@link LineBuffer}. Both `waitReady` (readiness marker) and `logs()` (replay +\n * tail) read from this one buffer, so the stream is decoded/split exactly once.\n */\nfunction startLogStream(bin: ContainerBin, containerId: string): LogStream {\n const buffer = new LineBuffer();\n const proc = portableSpawn([bin, \"logs\", \"--follow\", containerId]);\n void pumpLines(proc.stdout, buffer);\n void pumpLines(proc.stderr, buffer);\n return { buffer, proc };\n}\n\n/**\n * Build the `DeployHandle` for a container via the shared {@link makeDeployHandle}\n * factory. The factory drives the state transitions; the seams here only do the\n * container-specific work (inspect for health, follow `logs`, `rm -f` on stop).\n */\nfunction buildHandle(\n bin: ContainerBin,\n payload: ContainerPayload,\n config: Pick<ContainerConfig, \"bind\" | \"readyPattern\">,\n ctx: DeployContext,\n logStream: LogStream,\n ready: (timeoutMs: number, signal: AbortSignal) => Promise<void>,\n): DeployHandle<ContainerPayload> {\n return makeDeployHandle<ContainerPayload>({\n wsUrl: `ws://${config.bind}:${payload.hostPort}`,\n ctx,\n payload,\n initialState: \"starting\",\n defaultReadyTimeoutMs: DEFAULT_READY_TIMEOUT_MS,\n ready,\n async health() {\n const healthy = await isRunning(bin, payload.containerId);\n return healthy\n ? { healthy }\n : { healthy, detail: `container ${payload.containerId} not running` };\n },\n async *logs(opts) {\n // Read off the one shared follow stream — no second `<bin> logs` spawn.\n // `since` replays buffered history; follow then tails new pushes.\n const { buffer } = logStream;\n const since = opts?.sinceMs ?? 0;\n for (const l of buffer.since(since)) yield l;\n if (!opts?.follow) return;\n const queue: { ts: number; line: string }[] = [];\n let notify: (() => void) | null = null;\n const unsub = buffer.subscribe((l) => {\n queue.push(l);\n notify?.();\n });\n try {\n while (!ctx.signal.aborted) {\n if (queue.length === 0) {\n await new Promise<void>((r) => {\n notify = r;\n });\n notify = null;\n }\n while (queue.length > 0) yield queue.shift() as { ts: number; line: string };\n }\n } finally {\n // Detach this consumer only; the shared stream lives until stop().\n unsub();\n }\n },\n async stop() {\n logStream.proc.kill(\"SIGTERM\");\n // `rm -f` removes a running or stopped container and is a no-op (nonzero\n // exit, ignored) when the container is already gone — idempotent.\n portableSpawnSync([bin, \"rm\", \"-f\", payload.containerId], {\n timeoutMs: CONTAINER_RM_TIMEOUT_MS,\n });\n },\n });\n}\n\n/** Build a docker/podman deploy target backed by `bin`. */\nexport function makeContainerDeployTarget(\n bin: ContainerBin,\n): DeployTarget<ContainerConfig, ContainerPayload> {\n const payloadSchema = payloadSchemaFor(bin) as unknown as z.ZodType<ContainerPayload>;\n return {\n id: bin,\n displayName: bin === \"docker\" ? \"Docker container\" : \"Podman container\",\n apiVersion: 1,\n tlsTermination: \"none\",\n configSchema: containerConfigSchema as unknown as z.ZodType<ContainerConfig>,\n payloadSchema,\n\n async create(config, ctx) {\n const log = ctx.log;\n const hostPort = config.port ?? (await allocateFreePort(config.bind));\n const containerPort = config.containerPort ?? hostPort;\n const name = `skaile-ws-${ctx.workspaceId}`;\n const pattern = new RegExp(config.readyPattern ?? DEFAULT_READY_PATTERN);\n\n const args = [\n bin,\n \"run\",\n \"-d\",\n \"--name\",\n name,\n \"-p\",\n `${config.bind}:${hostPort}:${containerPort}`,\n ...pullFlag(config.pullPolicy),\n ];\n if (config.network) args.push(\"--network\", config.network);\n // Generic per-session injection from the host (DeployContext). `config.*`\n // is the target's own static policy and wins over the generic channel.\n for (const [k, v] of Object.entries(ctx.env)) args.push(\"-e\", `${k}=${v}`);\n for (const [k, v] of Object.entries(ctx.labels ?? {})) args.push(\"--label\", `${k}=${v}`);\n for (const m of ctx.mounts ?? []) {\n args.push(\"-v\", `${m.host}:${m.container}${m.ro ? \":ro\" : \"\"}`);\n }\n if (ctx.resources?.cpuNanos !== undefined) {\n args.push(\"--cpus\", String(ctx.resources.cpuNanos / 1e9));\n }\n if (ctx.resources?.memoryBytes !== undefined) {\n args.push(\"--memory\", String(ctx.resources.memoryBytes));\n }\n if (ctx.resources?.pidsLimit !== undefined) {\n args.push(\"--pids-limit\", String(ctx.resources.pidsLimit));\n }\n for (const [k, v] of Object.entries(config.env)) args.push(\"-e\", `${k}=${v}`);\n for (const m of config.mounts) args.push(\"-v\", m);\n args.push(config.image);\n\n const runRes = portableSpawnSync(args, { timeoutMs: CONTAINER_RUN_TIMEOUT_MS });\n if (runRes.exitCode !== 0) {\n throw new Error(`${bin} run failed: ${runRes.stderr.trim() || runRes.stdout.trim()}`);\n }\n const containerId = runRes.stdout.trim();\n log.info(\"container started\", { runtime: bin, containerId, hostPort });\n\n const payload: ContainerPayload = { containerId, hostPort, runtime: bin, bind: config.bind };\n // One shared follow stream feeds both readiness and logs() (see startLogStream).\n const logStream = startLogStream(bin, containerId);\n const ready = async (timeoutMs: number, signal: AbortSignal) => {\n await waitForLine(logStream.buffer, pattern, { timeoutMs, signal });\n };\n return buildHandle(bin, payload, config, ctx, logStream, ready);\n },\n\n async restore(payload, ctx) {\n const log = ctx.log;\n if (!(await isRunning(bin, payload.containerId))) {\n throw new Error(`${bin} container ${payload.containerId} is not running`);\n }\n log.info(\"re-attached to container\", { runtime: bin, containerId: payload.containerId });\n const logStream = startLogStream(bin, payload.containerId);\n return buildHandle(\n bin,\n payload,\n { bind: payload.bind, readyPattern: undefined },\n ctx,\n logStream,\n async () => {},\n );\n },\n };\n}\n","/** `dockerDeployTarget` — the shared container runtime bound to the `docker` bin. */\n\nimport { makeContainerDeployTarget } from \"./container-runtime.js\";\n\nexport const dockerDeployTarget = makeContainerDeployTarget(\"docker\");\n","/**\n * Shared child-process `DeployHandle` plumbing for the loopback process targets\n * (`local`, `nix`). Both stand a workspace up as a host child process reached\n * over `ws://127.0.0.1:<port>`; the only differences are the command they spawn\n * and the config they accept. The handle lifecycle (ready → health via pid\n * liveness → buffered logs → SIGTERM stop) is identical, so it lives here once.\n */\n\nimport { type PortableSubprocess, portableSpawn } from \"@skaile/workspaces/core\";\nimport { processAlive } from \"../../../core/src/process-alive.js\";\nimport {\n type DeployContext,\n type DeployHandle,\n makeDeployHandle,\n} from \"@skaile/workspaces/plugin-registry\";\nimport { LineBuffer, pumpLines } from \"./stream-lines.js\";\n\n/** Minimum payload a process target persists to re-attach on restore. */\nexport interface ProcessPayload {\n pid: number;\n port: number;\n}\n\n/** A spawned child plus the buffer its stdout/stderr are pumped into. */\nexport interface SpawnedProcess {\n proc: PortableSubprocess;\n buffer: LineBuffer;\n}\n\n/** Spawn `command args` and pump both stdout and stderr into one LineBuffer. */\nexport function spawnProcess(\n command: string,\n args: string[],\n opts: { cwd: string; env: Record<string, string | undefined> },\n): SpawnedProcess {\n // This child is meant to outlive us: we read stdout only until readiness,\n // then exit and re-attach by pid later. Without this it would take the\n // dropped pipe as its cue to exit, and `restore()` would find no process.\n const env = { ...opts.env, SKAILE_SERVE_EXIT_ON_BROKEN_STDOUT: \"0\" };\n const proc = portableSpawn([command, ...args], { cwd: opts.cwd, env });\n const buffer = new LineBuffer();\n void pumpLines(proc.stdout, buffer);\n void pumpLines(proc.stderr, buffer);\n return { proc, buffer };\n}\n\n/**\n * Build the `DeployHandle` for a process target via the shared\n * {@link makeDeployHandle} factory. `proc` is `null` for a restored handle\n * (re-attached by pid — no live stream, so `logs()` yields nothing and the\n * handle starts already `ready`). `defaultReadyTimeoutMs` is the timeout\n * `ready` gets when `waitReady()` is called without one.\n */\nexport function buildProcessHandle<P extends ProcessPayload>(\n payload: P,\n ctx: DeployContext,\n ready: (timeoutMs: number, signal: AbortSignal) => Promise<void>,\n proc: SpawnedProcess | null,\n defaultReadyTimeoutMs: number,\n): DeployHandle<P> {\n return makeDeployHandle<P>({\n wsUrl: `ws://127.0.0.1:${payload.port}`,\n ctx,\n payload,\n initialState: proc ? \"starting\" : \"ready\",\n defaultReadyTimeoutMs,\n ready,\n async health() {\n const healthy = processAlive(payload.pid);\n return healthy ? { healthy } : { healthy, detail: `pid ${payload.pid} not alive` };\n },\n async *logs(opts) {\n if (!proc) return; // a restored handle re-attaches by pid; it has no stream.\n const since = opts?.sinceMs ?? 0;\n for (const l of proc.buffer.since(since)) yield l;\n if (!opts?.follow) return;\n const queue: { ts: number; line: string }[] = [];\n let notify: (() => void) | null = null;\n const unsub = proc.buffer.subscribe((l) => {\n queue.push(l);\n notify?.();\n });\n try {\n while (!ctx.signal.aborted) {\n if (queue.length === 0) {\n await new Promise<void>((r) => {\n notify = r;\n });\n notify = null;\n }\n while (queue.length > 0) yield queue.shift() as { ts: number; line: string };\n }\n } finally {\n unsub();\n }\n },\n async stop() {\n if (processAlive(payload.pid)) {\n try {\n process.kill(payload.pid, \"SIGTERM\");\n } catch {\n // Already gone between the check and the kill — idempotent.\n }\n }\n },\n });\n}\n","/**\n * `localDeployTarget` — stand a workspace up as a local child process and reach\n * it over `ws://127.0.0.1:<port>`. `tlsTermination: \"none\"` (loopback only).\n *\n * The `command` / `args` / `readyPattern` config fields exist so the target is\n * testable hermetically: a test points them at a mock server instead of a real\n * `skaile serve`. Defaults resolve the `skaile` bin from this package and run\n * `skaile serve --port <port>`.\n */\n\nimport { createRequire } from \"node:module\";\nimport { dirname, resolve as resolvePath } from \"node:path\";\nimport { processAlive } from \"../../../core/src/process-alive.js\";\nimport type { DeployTarget } from \"@skaile/workspaces/plugin-registry\";\nimport * as z from \"zod\";\nimport { allocateFreePort } from \"./port.js\";\nimport { buildProcessHandle, spawnProcess } from \"./process-handle.js\";\nimport { waitForLine } from \"./stream-lines.js\";\n\nconst localConfigSchema = z\n .object({\n port: z.number().int().positive().optional(),\n env: z.record(z.string(), z.string()).optional(),\n cwd: z.string().optional(),\n command: z.string().optional(),\n args: z.array(z.string()).optional(),\n // `skaile serve` emits structured logs rather than a single banner; the\n // ws:// URL line is the most stable readiness marker.\n readyPattern: z.string().optional(),\n })\n .strict()\n .default({});\n\ntype LocalConfig = z.infer<typeof localConfigSchema>;\n\nconst localPayloadSchema = z.object({\n pid: z.number(),\n port: z.number(),\n cwd: z.string(),\n});\n\ntype LocalPayload = z.infer<typeof localPayloadSchema>;\n\nconst DEFAULT_READY_PATTERN = \"ws://\";\nconst DEFAULT_READY_TIMEOUT_MS = 30_000;\n\n/** Resolve the `skaile` bin shipped by this package, for the default command. */\nfunction resolveSkaileBin(): string {\n const require = createRequire(import.meta.url);\n const pkgPath = require.resolve(\"@skaile/workspaces/package.json\");\n const pkg = require(\"@skaile/workspaces/package.json\") as { bin?: Record<string, string> };\n const rel = pkg.bin?.skaile ?? \"dist/cli/index.js\";\n return resolvePath(dirname(pkgPath), rel);\n}\n\n/** Built-in target that runs the workspace as a local child process. */\nexport const localDeployTarget: DeployTarget<LocalConfig, LocalPayload> = {\n id: \"local\",\n displayName: \"Local process\",\n apiVersion: 1,\n tlsTermination: \"none\",\n configSchema: localConfigSchema as unknown as z.ZodType<LocalConfig>,\n payloadSchema: localPayloadSchema,\n\n async create(config, ctx) {\n const log = ctx.log;\n const port = config.port ?? (await allocateFreePort());\n const cwd = config.cwd ?? process.cwd();\n const command = config.command ?? resolveSkaileBin();\n const args = config.args ?? [\"serve\", \"--port\", String(port)];\n const pattern = new RegExp(config.readyPattern ?? DEFAULT_READY_PATTERN);\n\n // `ctx.env` is the host-injected per-session env; `config.env` overrides it.\n const spawned = spawnProcess(command, args, {\n cwd,\n env: { ...process.env, ...ctx.env, ...config.env },\n });\n // portableSpawn returns pid -1 on spawn failure; a -1 pid would later turn\n // process.kill(pid) into a kill(-1) broadcast to every process we own.\n if (!spawned.proc.pid || spawned.proc.pid <= 0) {\n throw new Error(\"failed to spawn local process\");\n }\n log.info(\"local process spawned\", { pid: spawned.proc.pid, port, command });\n\n const payload: LocalPayload = { pid: spawned.proc.pid, port, cwd };\n const ready = (timeoutMs: number, signal: AbortSignal) =>\n waitForLine(spawned.buffer, pattern, { timeoutMs, signal });\n return buildProcessHandle(payload, ctx, ready, spawned, DEFAULT_READY_TIMEOUT_MS);\n },\n\n async restore(payload, ctx) {\n const log = ctx.log;\n if (!processAlive(payload.pid)) {\n throw new Error(`local deploy pid ${payload.pid} is no longer alive`);\n }\n log.info(\"re-attached to local process\", { pid: payload.pid, port: payload.port });\n // Re-attached handle is already running; readiness is a no-op.\n return buildProcessHandle(payload, ctx, async () => {}, null, DEFAULT_READY_TIMEOUT_MS);\n },\n};\n","/**\n * `nixDeployTarget` — stand a workspace up inside a `nix shell` and reach it over\n * `ws://127.0.0.1:<port>`. `tlsTermination: \"none\"` (loopback only).\n *\n * Generic on purpose: it resolves a flake stack attr and runs `skaile serve`\n * inside it, nothing more. Platform-specific deployment policy (store binds,\n * apparmor, fleet) stays in the host's own custom target — this built-in only\n * knows `flakeRef` + `stackAttr`. `nixBin` exists as a hermetic-test seam, the\n * same role `command` plays for the local target.\n */\n\nimport { processAlive } from \"../../../core/src/process-alive.js\";\nimport type { DeployTarget } from \"@skaile/workspaces/plugin-registry\";\nimport * as z from \"zod\";\nimport { allocateFreePort } from \"./port.js\";\nimport { buildProcessHandle, spawnProcess } from \"./process-handle.js\";\nimport { waitForLine } from \"./stream-lines.js\";\n\nconst nixConfigSchema = z\n .object({\n /** Flake reference holding the stack, e.g. `/etc/skaile/flake` or `github:org/repo`. */\n flakeRef: z.string(),\n /** Attr selected out of the flake, e.g. `stacks.default`. */\n stackAttr: z.string(),\n port: z.number().int().positive().optional(),\n env: z.record(z.string(), z.string()).optional(),\n cwd: z.string().optional(),\n readyPattern: z.string().optional(),\n /** Override the `nix` binary — for hermetic tests only. */\n nixBin: z.string().optional(),\n })\n .strict();\n\ntype NixConfig = z.infer<typeof nixConfigSchema>;\n\nconst nixPayloadSchema = z.object({\n pid: z.number(),\n port: z.number(),\n});\n\ntype NixPayload = z.infer<typeof nixPayloadSchema>;\n\nconst DEFAULT_READY_PATTERN = \"ws://\";\nconst DEFAULT_READY_TIMEOUT_MS = 60_000;\n\n/**\n * Build the `nix shell … --command skaile serve --port <port>` argv. Pure and\n * exported so the arg contract can be unit-tested without spawning nix.\n */\nexport function buildNixArgs(\n config: Pick<NixConfig, \"flakeRef\" | \"stackAttr\">,\n port: number,\n): string[] {\n return [\n \"shell\",\n \"--offline\",\n `${config.flakeRef}#${config.stackAttr}`,\n \"--command\",\n \"skaile\",\n \"serve\",\n \"--port\",\n String(port),\n ];\n}\n\n/** Built-in target that runs the workspace inside a `nix shell`. */\nexport const nixDeployTarget: DeployTarget<NixConfig, NixPayload> = {\n id: \"nix\",\n displayName: \"Nix shell\",\n apiVersion: 1,\n tlsTermination: \"none\",\n configSchema: nixConfigSchema as unknown as z.ZodType<NixConfig>,\n payloadSchema: nixPayloadSchema,\n\n async create(config, ctx) {\n const log = ctx.log;\n const port = config.port ?? (await allocateFreePort());\n const cwd = config.cwd ?? process.cwd();\n const bin = config.nixBin ?? \"nix\";\n const args = buildNixArgs(config, port);\n const pattern = new RegExp(config.readyPattern ?? DEFAULT_READY_PATTERN);\n\n const spawned = spawnProcess(bin, args, {\n cwd,\n env: { ...process.env, ...ctx.env, ...config.env },\n });\n // portableSpawn returns pid -1 on spawn failure; a -1 pid would later turn\n // process.kill(pid) into a kill(-1) broadcast to every process we own.\n if (!spawned.proc.pid || spawned.proc.pid <= 0) {\n throw new Error(\"failed to spawn nix shell\");\n }\n log.info(\"nix shell spawned\", {\n pid: spawned.proc.pid,\n port,\n flakeRef: config.flakeRef,\n stackAttr: config.stackAttr,\n });\n\n const payload: NixPayload = { pid: spawned.proc.pid, port };\n const ready = (timeoutMs: number, signal: AbortSignal) =>\n waitForLine(spawned.buffer, pattern, { timeoutMs, signal });\n return buildProcessHandle(payload, ctx, ready, spawned, DEFAULT_READY_TIMEOUT_MS);\n },\n\n async restore(payload, ctx) {\n const log = ctx.log;\n if (!processAlive(payload.pid)) {\n throw new Error(`nix deploy pid ${payload.pid} is no longer alive`);\n }\n log.info(\"re-attached to nix shell\", { pid: payload.pid, port: payload.port });\n return buildProcessHandle(payload, ctx, async () => {}, null, DEFAULT_READY_TIMEOUT_MS);\n },\n};\n","/** `podmanDeployTarget` — the shared container runtime bound to the `podman` bin. */\n\nimport { makeContainerDeployTarget } from \"./container-runtime.js\";\n\nexport const podmanDeployTarget = makeContainerDeployTarget(\"podman\");\n","/**\n * Registry-owned persistence for the detach handle at\n * `<project>/.skaile/deploy/handle.json` (locked decision #13).\n *\n * The file is a `{ targetId, payload }` envelope: `targetId` selects which\n * `DeployTarget` to look up, `payload` is that target's opaque restore slice.\n * The store never interprets `payload` — it only validates the envelope shape.\n */\n\nimport { mkdir, readFile, rm, writeFile } from \"node:fs/promises\";\nimport { dirname, join } from \"node:path\";\nimport * as z from \"zod\";\n\n/** Parsed detach-handle envelope. `payload` is the target's opaque restore slice. */\nexport interface StoredHandle {\n targetId: string;\n payload: unknown;\n}\n\nconst storedHandleSchema = z.object({\n targetId: z.string().min(1),\n payload: z.unknown(),\n});\n\n/** Absolute path to the detach-handle file for a project. */\nexport function handlePath(projectDir: string): string {\n return join(projectDir, \".skaile\", \"deploy\", \"handle.json\");\n}\n\n/** Write the detach handle, creating `.skaile/deploy/` if missing. */\nexport async function writeHandle(\n projectDir: string,\n targetId: string,\n payload: unknown,\n): Promise<void> {\n const path = handlePath(projectDir);\n await mkdir(dirname(path), { recursive: true });\n const envelope: StoredHandle = { targetId, payload };\n await writeFile(path, `${JSON.stringify(envelope, null, 2)}\\n`, \"utf8\");\n}\n\n/** Read + validate the detach handle. Returns null when absent or malformed. */\nexport async function readHandle(projectDir: string): Promise<StoredHandle | null> {\n let raw: string;\n try {\n raw = await readFile(handlePath(projectDir), \"utf8\");\n } catch {\n return null;\n }\n let parsed: unknown;\n try {\n parsed = JSON.parse(raw);\n } catch {\n return null;\n }\n const result = storedHandleSchema.safeParse(parsed);\n return result.success ? result.data : null;\n}\n\n/** Remove the detach handle. Idempotent — a missing file is not an error. */\nexport async function clearHandle(projectDir: string): Promise<void> {\n await rm(handlePath(projectDir), { force: true });\n}\n","/**\n * `@skaile/workspaces/deploy` — built-in deploy targets + the detach-handle store.\n *\n * Ships the three loopback-only built-ins (local, docker, podman),\n * `registerBuiltinDeployTargets()` to load them into a `PluginRegistry`, and the\n * `.skaile/deploy/handle.json` read/write/restore API. Cloud targets (fly,\n * vercel-sandbox, k8s) ship as separate packages that self-register.\n */\n\nimport { type PluginRegistry, pluginRegistry } from \"@skaile/workspaces/plugin-registry\";\nimport { dockerDeployTarget } from \"./targets/docker.js\";\nimport { localDeployTarget } from \"./targets/local.js\";\nimport { nixDeployTarget } from \"./targets/nix.js\";\nimport { podmanDeployTarget } from \"./targets/podman.js\";\n\nexport {\n clearHandle,\n handlePath,\n readHandle,\n type StoredHandle,\n writeHandle,\n} from \"./handle-store.js\";\nexport { makeContainerDeployTarget } from \"./targets/container-runtime.js\";\nexport { dockerDeployTarget } from \"./targets/docker.js\";\nexport { localDeployTarget } from \"./targets/local.js\";\nexport { buildNixArgs, nixDeployTarget } from \"./targets/nix.js\";\nexport { podmanDeployTarget } from \"./targets/podman.js\";\n\n/**\n * Register the built-in deploy targets into `registry` (the process-wide\n * `pluginRegistry` by default). Idempotent — an id already present is skipped,\n * so calling this from multiple CLI entrypoints is safe.\n */\nexport function registerBuiltinDeployTargets(registry: PluginRegistry = pluginRegistry): void {\n for (const t of [localDeployTarget, dockerDeployTarget, podmanDeployTarget, nixDeployTarget]) {\n if (!registry.get(\"deployTarget\", t.id)) registry.register(\"deployTarget\", t);\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../deploy/src/targets/port.ts","../../deploy/src/targets/stream-lines.ts","../../deploy/src/targets/container-runtime.ts","../../deploy/src/targets/docker.ts","../../deploy/src/targets/process-handle.ts","../../deploy/src/targets/local.ts","../../deploy/src/targets/nix.ts","../../deploy/src/targets/podman.ts","../../deploy/src/handle-store.ts","../../deploy/src/index.ts"],"names":["z2","DEFAULT_READY_PATTERN","DEFAULT_READY_TIMEOUT_MS","require","resolvePath","z3","z4","dirname"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Free-port allocation for deploy targets.\n *\n * `connectors/src/port-pool.ts` exists but its `PortPool` is a stateful\n * range-allocator scoped to the connectors package; deploy targets just need a\n * single OS-assigned ephemeral port, so a small inline finder is the right fit.\n */\n\nimport { createServer } from \"node:net\";\n\n/** Bind to port 0, read the OS-assigned port, release it, and return it. */\nexport function allocateFreePort(host = \"127.0.0.1\"): Promise<number> {\n return new Promise((resolve, reject) => {\n const server = createServer();\n server.once(\"error\", reject);\n server.listen(0, host, () => {\n const addr = server.address();\n if (addr === null || typeof addr === \"string\") {\n server.close();\n reject(new Error(\"could not determine allocated port\"));\n return;\n }\n const { port } = addr;\n server.close(() => resolve(port));\n });\n });\n}\n","/**\n * Shared line-buffering helpers for deploy targets.\n *\n * Both the local target (subprocess stdout) and the container runtimes\n * (`<bin> logs`) read text off a web `ReadableStream<Uint8Array>` and need the\n * same UTF-8 decode + newline-split logic, plus a timestamped ring buffer so\n * `DeployHandle.logs()` can replay what was already seen.\n */\n\n/** One buffered log line with the wall-clock time it was observed. */\nexport interface BufferedLine {\n ts: number;\n line: string;\n}\n\n/**\n * Bounded FIFO of decoded lines. Drives both the readiness watcher and\n * `logs()` replay; the cap keeps a long-running process from growing unbounded.\n */\nexport class LineBuffer {\n private readonly lines: BufferedLine[] = [];\n private readonly waiters = new Set<(line: BufferedLine) => void>();\n\n constructor(private readonly max = 1000) {}\n\n push(line: string): void {\n const entry: BufferedLine = { ts: Date.now(), line };\n this.lines.push(entry);\n if (this.lines.length > this.max) this.lines.shift();\n for (const w of this.waiters) w(entry);\n }\n\n /** Snapshot of buffered lines at or after `sinceMs` (epoch millis). */\n since(sinceMs = 0): BufferedLine[] {\n return this.lines.filter((l) => l.ts >= sinceMs);\n }\n\n /** Subscribe to future pushes; returns an unsubscribe fn. */\n subscribe(fn: (line: BufferedLine) => void): () => void {\n this.waiters.add(fn);\n return () => this.waiters.delete(fn);\n }\n}\n\n/**\n * Pump a byte stream into a {@link LineBuffer}, splitting on `\\n`. Resolves when\n * the stream ends. Errors (e.g. the process being killed mid-read) are\n * swallowed — a dead stream just means no more lines.\n */\nexport async function pumpLines(\n stream: ReadableStream<Uint8Array>,\n buffer: LineBuffer,\n): Promise<void> {\n const reader = stream.getReader();\n const decoder = new TextDecoder();\n let pending = \"\";\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n pending += decoder.decode(value, { stream: true });\n let idx = pending.indexOf(\"\\n\");\n while (idx !== -1) {\n buffer.push(pending.slice(0, idx));\n pending = pending.slice(idx + 1);\n idx = pending.indexOf(\"\\n\");\n }\n }\n } catch {\n // Stream torn down (process killed) — nothing more to read.\n } finally {\n if (pending.length > 0) buffer.push(pending);\n reader.releaseLock();\n }\n}\n\n/**\n * Resolve once a buffered line matches `pattern`, reject on timeout or abort.\n * Checks already-buffered lines first so a fast-printing process never races\n * the subscription.\n */\nexport function waitForLine(\n buffer: LineBuffer,\n pattern: RegExp,\n opts: { timeoutMs: number; signal: AbortSignal },\n): Promise<void> {\n for (const { line } of buffer.since(0)) {\n if (pattern.test(line)) return Promise.resolve();\n }\n return new Promise<void>((resolve, reject) => {\n let settled = false;\n const finish = (fn: () => void) => {\n if (settled) return;\n settled = true;\n clearTimeout(timer);\n unsub();\n opts.signal.removeEventListener(\"abort\", onAbort);\n fn();\n };\n const unsub = buffer.subscribe(({ line }) => {\n if (pattern.test(line)) finish(resolve);\n });\n const onAbort = () => finish(() => reject(new Error(\"aborted while waiting for ready line\")));\n const timer = setTimeout(\n () =>\n finish(() =>\n reject(new Error(`timed out after ${opts.timeoutMs}ms waiting for ready line`)),\n ),\n opts.timeoutMs,\n );\n if (opts.signal.aborted) onAbort();\n else opts.signal.addEventListener(\"abort\", onAbort);\n });\n}\n","/**\n * Shared docker/podman deploy target, parameterized by binary name.\n *\n * docker and podman expose the same CLI surface for the run/inspect/logs/rm\n * verbs this target needs, so one implementation backs both\n * (`makeContainerDeployTarget(\"docker\" | \"podman\")`). `tlsTermination: \"none\"`\n * means loopback-only: a zod refinement rejects a non-loopback `bind` until tls\n * config lands (locked decision #12).\n */\n\nimport { type PortableSubprocess, portableSpawn, portableSpawnSync } from \"@skaile/workspaces/core\";\nimport {\n type DeployContext,\n type DeployHandle,\n type DeployTarget,\n makeDeployHandle,\n} from \"@skaile/workspaces/plugin-registry\";\nimport * as z from \"zod\";\nimport { allocateFreePort } from \"./port.js\";\nimport { LineBuffer, pumpLines, waitForLine } from \"./stream-lines.js\";\n\ntype ContainerBin = \"docker\" | \"podman\";\n\nconst LOOPBACK_BINDS = new Set([\"127.0.0.1\", \"localhost\", \"::1\"]);\nconst DEFAULT_READY_PATTERN = \"ws://\";\nconst DEFAULT_READY_TIMEOUT_MS = 60_000;\n/**\n * Deadline for `<bin> run -d`. Generous because it covers an image pull on a\n * cold host; the flag still bounds a runtime that has itself wedged.\n */\nconst CONTAINER_RUN_TIMEOUT_MS = 300_000;\n/** Deadline for `<bin> rm -f` during teardown — a local, metadata-only call. */\nconst CONTAINER_RM_TIMEOUT_MS = 30_000;\n\nconst containerConfigSchema = z\n .object({\n image: z.string(),\n port: z.number().int().positive().optional(),\n bind: z.string().default(\"127.0.0.1\"),\n mounts: z.array(z.string()).default([]),\n env: z.record(z.string(), z.string()).default({}),\n network: z.string().optional(),\n pullPolicy: z.enum([\"always\", \"if-missing\", \"never\"]).default(\"if-missing\"),\n // \"local\" only — this target runs a prebuilt image and has no in-provider builder.\n // The full buildStrategySchema (local/remote/managed) lives in plugin-registry for the provider-* packages that implement remote builds.\n buildStrategy: z.literal(\"local\").default(\"local\"),\n containerPort: z.number().int().positive().optional(),\n readyPattern: z.string().optional(),\n })\n .strict()\n .refine((c) => LOOPBACK_BINDS.has(c.bind), {\n message: \"non-loopback bind requires tls config (not yet supported); use a loopback bind\",\n path: [\"bind\"],\n });\n\ntype ContainerConfig = z.infer<typeof containerConfigSchema>;\n\nfunction payloadSchemaFor(bin: ContainerBin) {\n return z.object({\n containerId: z.string(),\n hostPort: z.number(),\n runtime: z.enum([\"docker\", \"podman\"]).refine((r) => r === bin, {\n message: `runtime mismatch: handle belongs to ${bin}`,\n }),\n // Older handles predate `bind`; default to loopback so restore stays valid.\n bind: z.string().default(\"127.0.0.1\"),\n });\n}\n\ntype ContainerPayload = {\n containerId: string;\n hostPort: number;\n runtime: ContainerBin;\n bind: string;\n};\n\nfunction pullFlag(policy: ContainerConfig[\"pullPolicy\"]): string[] {\n // `docker run --pull` takes always|missing|never; map our \"if-missing\".\n const mapped = policy === \"if-missing\" ? \"missing\" : policy;\n return [\"--pull\", mapped];\n}\n\nasync function readStream(stream: ReadableStream<Uint8Array>): Promise<string> {\n const reader = stream.getReader();\n const decoder = new TextDecoder();\n let out = \"\";\n try {\n for (;;) {\n const { done, value } = await reader.read();\n if (done) break;\n if (value) out += decoder.decode(value, { stream: true });\n }\n } finally {\n reader.releaseLock();\n }\n return out + decoder.decode();\n}\n\n/**\n * True when `<bin> inspect` reports the container in a running state.\n *\n * Async (over `portableSpawn` + `await exited`) so the inspect round-trip stays\n * off the event loop — `health()` / `restore()` poll this without freezing log\n * pumps or other connections.\n */\nasync function isRunning(bin: ContainerBin, containerId: string): Promise<boolean> {\n const proc = portableSpawn([bin, \"inspect\", \"-f\", \"{{.State.Running}}\", containerId]);\n const [exitCode, stdout] = await Promise.all([proc.exited, readStream(proc.stdout)]);\n return exitCode === 0 && stdout.trim() === \"true\";\n}\n\n/** The single `<bin> logs --follow` stream that backs both readiness and `logs()`. */\ninterface LogStream {\n buffer: LineBuffer;\n proc: PortableSubprocess;\n}\n\n/**\n * Spawn one shared `<bin> logs --follow` and pump it into a single\n * {@link LineBuffer}. Both `waitReady` (readiness marker) and `logs()` (replay +\n * tail) read from this one buffer, so the stream is decoded/split exactly once.\n */\nfunction startLogStream(bin: ContainerBin, containerId: string): LogStream {\n const buffer = new LineBuffer();\n const proc = portableSpawn([bin, \"logs\", \"--follow\", containerId]);\n void pumpLines(proc.stdout, buffer);\n void pumpLines(proc.stderr, buffer);\n return { buffer, proc };\n}\n\n/**\n * Build the `DeployHandle` for a container via the shared {@link makeDeployHandle}\n * factory. The factory drives the state transitions; the seams here only do the\n * container-specific work (inspect for health, follow `logs`, `rm -f` on stop).\n */\nfunction buildHandle(\n bin: ContainerBin,\n payload: ContainerPayload,\n config: Pick<ContainerConfig, \"bind\" | \"readyPattern\">,\n ctx: DeployContext,\n logStream: LogStream,\n ready: (timeoutMs: number, signal: AbortSignal) => Promise<void>,\n): DeployHandle<ContainerPayload> {\n return makeDeployHandle<ContainerPayload>({\n wsUrl: `ws://${config.bind}:${payload.hostPort}`,\n ctx,\n payload,\n initialState: \"starting\",\n defaultReadyTimeoutMs: DEFAULT_READY_TIMEOUT_MS,\n ready,\n async health() {\n const healthy = await isRunning(bin, payload.containerId);\n return healthy\n ? { healthy }\n : { healthy, detail: `container ${payload.containerId} not running` };\n },\n async *logs(opts) {\n // Read off the one shared follow stream — no second `<bin> logs` spawn.\n // `since` replays buffered history; follow then tails new pushes.\n const { buffer } = logStream;\n const since = opts?.sinceMs ?? 0;\n for (const l of buffer.since(since)) yield l;\n if (!opts?.follow) return;\n const queue: { ts: number; line: string }[] = [];\n let notify: (() => void) | null = null;\n const unsub = buffer.subscribe((l) => {\n queue.push(l);\n notify?.();\n });\n try {\n while (!ctx.signal.aborted) {\n if (queue.length === 0) {\n await new Promise<void>((r) => {\n notify = r;\n });\n notify = null;\n }\n while (queue.length > 0) yield queue.shift() as { ts: number; line: string };\n }\n } finally {\n // Detach this consumer only; the shared stream lives until stop().\n unsub();\n }\n },\n async stop() {\n logStream.proc.kill(\"SIGTERM\");\n // `rm -f` removes a running or stopped container and is a no-op (nonzero\n // exit, ignored) when the container is already gone — idempotent.\n portableSpawnSync([bin, \"rm\", \"-f\", payload.containerId], {\n timeoutMs: CONTAINER_RM_TIMEOUT_MS,\n });\n },\n });\n}\n\n/** Build a docker/podman deploy target backed by `bin`. */\nexport function makeContainerDeployTarget(\n bin: ContainerBin,\n): DeployTarget<ContainerConfig, ContainerPayload> {\n const payloadSchema = payloadSchemaFor(bin) as unknown as z.ZodType<ContainerPayload>;\n return {\n id: bin,\n displayName: bin === \"docker\" ? \"Docker container\" : \"Podman container\",\n apiVersion: 1,\n tlsTermination: \"none\",\n configSchema: containerConfigSchema as unknown as z.ZodType<ContainerConfig>,\n payloadSchema,\n\n async create(config, ctx) {\n const log = ctx.log;\n const hostPort = config.port ?? (await allocateFreePort(config.bind));\n const containerPort = config.containerPort ?? hostPort;\n const name = `skaile-ws-${ctx.workspaceId}`;\n const pattern = new RegExp(config.readyPattern ?? DEFAULT_READY_PATTERN);\n\n const args = [\n bin,\n \"run\",\n \"-d\",\n \"--name\",\n name,\n \"-p\",\n `${config.bind}:${hostPort}:${containerPort}`,\n ...pullFlag(config.pullPolicy),\n ];\n if (config.network) args.push(\"--network\", config.network);\n // Generic per-session injection from the host (DeployContext). `config.*`\n // is the target's own static policy and wins over the generic channel.\n for (const [k, v] of Object.entries(ctx.env)) args.push(\"-e\", `${k}=${v}`);\n for (const [k, v] of Object.entries(ctx.labels ?? {})) args.push(\"--label\", `${k}=${v}`);\n for (const m of ctx.mounts ?? []) {\n args.push(\"-v\", `${m.host}:${m.container}${m.ro ? \":ro\" : \"\"}`);\n }\n if (ctx.resources?.cpuNanos !== undefined) {\n args.push(\"--cpus\", String(ctx.resources.cpuNanos / 1e9));\n }\n if (ctx.resources?.memoryBytes !== undefined) {\n args.push(\"--memory\", String(ctx.resources.memoryBytes));\n }\n if (ctx.resources?.pidsLimit !== undefined) {\n args.push(\"--pids-limit\", String(ctx.resources.pidsLimit));\n }\n for (const [k, v] of Object.entries(config.env)) args.push(\"-e\", `${k}=${v}`);\n for (const m of config.mounts) args.push(\"-v\", m);\n args.push(config.image);\n\n const runRes = portableSpawnSync(args, { timeoutMs: CONTAINER_RUN_TIMEOUT_MS });\n if (runRes.exitCode !== 0) {\n throw new Error(`${bin} run failed: ${runRes.stderr.trim() || runRes.stdout.trim()}`);\n }\n const containerId = runRes.stdout.trim();\n log.info(\"container started\", { runtime: bin, containerId, hostPort });\n\n const payload: ContainerPayload = { containerId, hostPort, runtime: bin, bind: config.bind };\n // One shared follow stream feeds both readiness and logs() (see startLogStream).\n const logStream = startLogStream(bin, containerId);\n const ready = async (timeoutMs: number, signal: AbortSignal) => {\n await waitForLine(logStream.buffer, pattern, { timeoutMs, signal });\n };\n return buildHandle(bin, payload, config, ctx, logStream, ready);\n },\n\n async restore(payload, ctx) {\n const log = ctx.log;\n if (!(await isRunning(bin, payload.containerId))) {\n throw new Error(`${bin} container ${payload.containerId} is not running`);\n }\n log.info(\"re-attached to container\", { runtime: bin, containerId: payload.containerId });\n const logStream = startLogStream(bin, payload.containerId);\n return buildHandle(\n bin,\n payload,\n { bind: payload.bind, readyPattern: undefined },\n ctx,\n logStream,\n async () => {},\n );\n },\n };\n}\n","/** `dockerDeployTarget` — the shared container runtime bound to the `docker` bin. */\n\nimport { makeContainerDeployTarget } from \"./container-runtime.js\";\n\nexport const dockerDeployTarget = makeContainerDeployTarget(\"docker\");\n","/**\n * Shared child-process `DeployHandle` plumbing for the loopback process targets\n * (`local`, `nix`). Both stand a workspace up as a host child process reached\n * over `ws://127.0.0.1:<port>`; the only differences are the command they spawn\n * and the config they accept. The handle lifecycle (ready → health via pid\n * liveness → buffered logs → SIGTERM stop) is identical, so it lives here once.\n */\n\nimport { type PortableSubprocess, portableSpawn } from \"@skaile/workspaces/core\";\nimport { processAlive } from \"../../../core/src/process-alive.js\";\nimport {\n type DeployContext,\n type DeployHandle,\n makeDeployHandle,\n} from \"@skaile/workspaces/plugin-registry\";\nimport { LineBuffer, pumpLines } from \"./stream-lines.js\";\n\n/** Minimum payload a process target persists to re-attach on restore. */\nexport interface ProcessPayload {\n pid: number;\n port: number;\n}\n\n/** A spawned child plus the buffer its stdout/stderr are pumped into. */\nexport interface SpawnedProcess {\n proc: PortableSubprocess;\n buffer: LineBuffer;\n}\n\n/** Spawn `command args` and pump both stdout and stderr into one LineBuffer. */\nexport function spawnProcess(\n command: string,\n args: string[],\n opts: { cwd: string; env: Record<string, string | undefined> },\n): SpawnedProcess {\n // This child is meant to outlive us: we read stdout only until readiness,\n // then exit and re-attach by pid later. Without this it would take the\n // dropped pipe as its cue to exit, and `restore()` would find no process.\n const env = { ...opts.env, SKAILE_SERVE_EXIT_ON_BROKEN_STDOUT: \"0\" };\n const proc = portableSpawn([command, ...args], { cwd: opts.cwd, env });\n const buffer = new LineBuffer();\n void pumpLines(proc.stdout, buffer);\n void pumpLines(proc.stderr, buffer);\n return { proc, buffer };\n}\n\n/**\n * Build the `DeployHandle` for a process target via the shared\n * {@link makeDeployHandle} factory. `proc` is `null` for a restored handle\n * (re-attached by pid — no live stream, so `logs()` yields nothing and the\n * handle starts already `ready`). `defaultReadyTimeoutMs` is the timeout\n * `ready` gets when `waitReady()` is called without one.\n */\nexport function buildProcessHandle<P extends ProcessPayload>(\n payload: P,\n ctx: DeployContext,\n ready: (timeoutMs: number, signal: AbortSignal) => Promise<void>,\n proc: SpawnedProcess | null,\n defaultReadyTimeoutMs: number,\n): DeployHandle<P> {\n return makeDeployHandle<P>({\n wsUrl: `ws://127.0.0.1:${payload.port}`,\n ctx,\n payload,\n initialState: proc ? \"starting\" : \"ready\",\n defaultReadyTimeoutMs,\n ready,\n async health() {\n const healthy = processAlive(payload.pid);\n return healthy ? { healthy } : { healthy, detail: `pid ${payload.pid} not alive` };\n },\n async *logs(opts) {\n if (!proc) return; // a restored handle re-attaches by pid; it has no stream.\n const since = opts?.sinceMs ?? 0;\n for (const l of proc.buffer.since(since)) yield l;\n if (!opts?.follow) return;\n const queue: { ts: number; line: string }[] = [];\n let notify: (() => void) | null = null;\n const unsub = proc.buffer.subscribe((l) => {\n queue.push(l);\n notify?.();\n });\n try {\n while (!ctx.signal.aborted) {\n if (queue.length === 0) {\n await new Promise<void>((r) => {\n notify = r;\n });\n notify = null;\n }\n while (queue.length > 0) yield queue.shift() as { ts: number; line: string };\n }\n } finally {\n unsub();\n }\n },\n async stop() {\n if (processAlive(payload.pid)) {\n try {\n process.kill(payload.pid, \"SIGTERM\");\n } catch {\n // Already gone between the check and the kill — idempotent.\n }\n }\n },\n });\n}\n","/**\n * `localDeployTarget` — stand a workspace up as a local child process and reach\n * it over `ws://127.0.0.1:<port>`. `tlsTermination: \"none\"` (loopback only).\n *\n * The `command` / `args` / `readyPattern` config fields exist so the target is\n * testable hermetically: a test points them at a mock server instead of a real\n * `skaile serve`. Defaults resolve the `skaile` bin from this package and run\n * `skaile serve --port <port>`.\n */\n\nimport { createRequire } from \"node:module\";\nimport { dirname, resolve as resolvePath } from \"node:path\";\nimport { processAlive } from \"../../../core/src/process-alive.js\";\nimport type { DeployTarget } from \"@skaile/workspaces/plugin-registry\";\nimport * as z from \"zod\";\nimport { allocateFreePort } from \"./port.js\";\nimport { buildProcessHandle, spawnProcess } from \"./process-handle.js\";\nimport { waitForLine } from \"./stream-lines.js\";\n\nconst localConfigSchema = z\n .object({\n port: z.number().int().positive().optional(),\n env: z.record(z.string(), z.string()).optional(),\n cwd: z.string().optional(),\n command: z.string().optional(),\n args: z.array(z.string()).optional(),\n // `skaile serve` emits structured logs rather than a single banner; the\n // ws:// URL line is the most stable readiness marker.\n readyPattern: z.string().optional(),\n })\n .strict()\n .default({});\n\ntype LocalConfig = z.infer<typeof localConfigSchema>;\n\nconst localPayloadSchema = z.object({\n pid: z.number(),\n port: z.number(),\n cwd: z.string(),\n});\n\ntype LocalPayload = z.infer<typeof localPayloadSchema>;\n\nconst DEFAULT_READY_PATTERN = \"ws://\";\nconst DEFAULT_READY_TIMEOUT_MS = 30_000;\n\n/** Resolve the `skaile` bin shipped by this package, for the default command. */\nfunction resolveSkaileBin(): string {\n const require = createRequire(import.meta.url);\n const pkgPath = require.resolve(\"@skaile/workspaces/package.json\");\n const pkg = require(\"@skaile/workspaces/package.json\") as { bin?: Record<string, string> };\n const rel = pkg.bin?.skaile ?? \"dist/cli/index.js\";\n return resolvePath(dirname(pkgPath), rel);\n}\n\n/** Built-in target that runs the workspace as a local child process. */\nexport const localDeployTarget: DeployTarget<LocalConfig, LocalPayload> = {\n id: \"local\",\n displayName: \"Local process\",\n apiVersion: 1,\n tlsTermination: \"none\",\n configSchema: localConfigSchema as unknown as z.ZodType<LocalConfig>,\n payloadSchema: localPayloadSchema,\n\n async create(config, ctx) {\n const log = ctx.log;\n const port = config.port ?? (await allocateFreePort());\n const cwd = config.cwd ?? process.cwd();\n const command = config.command ?? resolveSkaileBin();\n const args = config.args ?? [\"serve\", \"--port\", String(port)];\n const pattern = new RegExp(config.readyPattern ?? DEFAULT_READY_PATTERN);\n\n // `ctx.env` is the host-injected per-session env; `config.env` overrides it.\n const spawned = spawnProcess(command, args, {\n cwd,\n env: { ...process.env, ...ctx.env, ...config.env },\n });\n // portableSpawn returns pid -1 on spawn failure; a -1 pid would later turn\n // process.kill(pid) into a kill(-1) broadcast to every process we own.\n if (!spawned.proc.pid || spawned.proc.pid <= 0) {\n throw new Error(\"failed to spawn local process\");\n }\n log.info(\"local process spawned\", { pid: spawned.proc.pid, port, command });\n\n const payload: LocalPayload = { pid: spawned.proc.pid, port, cwd };\n const ready = (timeoutMs: number, signal: AbortSignal) =>\n waitForLine(spawned.buffer, pattern, { timeoutMs, signal });\n return buildProcessHandle(payload, ctx, ready, spawned, DEFAULT_READY_TIMEOUT_MS);\n },\n\n async restore(payload, ctx) {\n const log = ctx.log;\n if (!processAlive(payload.pid)) {\n throw new Error(`local deploy pid ${payload.pid} is no longer alive`);\n }\n log.info(\"re-attached to local process\", { pid: payload.pid, port: payload.port });\n // Re-attached handle is already running; readiness is a no-op.\n return buildProcessHandle(payload, ctx, async () => {}, null, DEFAULT_READY_TIMEOUT_MS);\n },\n};\n","/**\n * `nixDeployTarget` — stand a workspace up inside a `nix shell` and reach it over\n * `ws://127.0.0.1:<port>`. `tlsTermination: \"none\"` (loopback only).\n *\n * Generic on purpose: it resolves a flake stack attr and runs `skaile serve`\n * inside it, nothing more. Platform-specific deployment policy (store binds,\n * apparmor, fleet) stays in the host's own custom target — this built-in only\n * knows `flakeRef` + `stackAttr`. `nixBin` exists as a hermetic-test seam, the\n * same role `command` plays for the local target.\n */\n\nimport { processAlive } from \"../../../core/src/process-alive.js\";\nimport type { DeployTarget } from \"@skaile/workspaces/plugin-registry\";\nimport * as z from \"zod\";\nimport { allocateFreePort } from \"./port.js\";\nimport { buildProcessHandle, spawnProcess } from \"./process-handle.js\";\nimport { waitForLine } from \"./stream-lines.js\";\n\nconst nixConfigSchema = z\n .object({\n /** Flake reference holding the stack, e.g. `/etc/skaile/flake` or `github:org/repo`. */\n flakeRef: z.string(),\n /** Attr selected out of the flake, e.g. `stacks.default`. */\n stackAttr: z.string(),\n port: z.number().int().positive().optional(),\n env: z.record(z.string(), z.string()).optional(),\n cwd: z.string().optional(),\n readyPattern: z.string().optional(),\n /** Override the `nix` binary — for hermetic tests only. */\n nixBin: z.string().optional(),\n })\n .strict();\n\ntype NixConfig = z.infer<typeof nixConfigSchema>;\n\nconst nixPayloadSchema = z.object({\n pid: z.number(),\n port: z.number(),\n});\n\ntype NixPayload = z.infer<typeof nixPayloadSchema>;\n\nconst DEFAULT_READY_PATTERN = \"ws://\";\nconst DEFAULT_READY_TIMEOUT_MS = 60_000;\n\n/**\n * Build the `nix shell … --command skaile serve --port <port>` argv. Pure and\n * exported so the arg contract can be unit-tested without spawning nix.\n */\nexport function buildNixArgs(\n config: Pick<NixConfig, \"flakeRef\" | \"stackAttr\">,\n port: number,\n): string[] {\n return [\n \"shell\",\n \"--offline\",\n `${config.flakeRef}#${config.stackAttr}`,\n \"--command\",\n \"skaile\",\n \"serve\",\n \"--port\",\n String(port),\n ];\n}\n\n/** Built-in target that runs the workspace inside a `nix shell`. */\nexport const nixDeployTarget: DeployTarget<NixConfig, NixPayload> = {\n id: \"nix\",\n displayName: \"Nix shell\",\n apiVersion: 1,\n tlsTermination: \"none\",\n configSchema: nixConfigSchema as unknown as z.ZodType<NixConfig>,\n payloadSchema: nixPayloadSchema,\n\n async create(config, ctx) {\n const log = ctx.log;\n const port = config.port ?? (await allocateFreePort());\n const cwd = config.cwd ?? process.cwd();\n const bin = config.nixBin ?? \"nix\";\n const args = buildNixArgs(config, port);\n const pattern = new RegExp(config.readyPattern ?? DEFAULT_READY_PATTERN);\n\n const spawned = spawnProcess(bin, args, {\n cwd,\n env: { ...process.env, ...ctx.env, ...config.env },\n });\n // portableSpawn returns pid -1 on spawn failure; a -1 pid would later turn\n // process.kill(pid) into a kill(-1) broadcast to every process we own.\n if (!spawned.proc.pid || spawned.proc.pid <= 0) {\n throw new Error(\"failed to spawn nix shell\");\n }\n log.info(\"nix shell spawned\", {\n pid: spawned.proc.pid,\n port,\n flakeRef: config.flakeRef,\n stackAttr: config.stackAttr,\n });\n\n const payload: NixPayload = { pid: spawned.proc.pid, port };\n const ready = (timeoutMs: number, signal: AbortSignal) =>\n waitForLine(spawned.buffer, pattern, { timeoutMs, signal });\n return buildProcessHandle(payload, ctx, ready, spawned, DEFAULT_READY_TIMEOUT_MS);\n },\n\n async restore(payload, ctx) {\n const log = ctx.log;\n if (!processAlive(payload.pid)) {\n throw new Error(`nix deploy pid ${payload.pid} is no longer alive`);\n }\n log.info(\"re-attached to nix shell\", { pid: payload.pid, port: payload.port });\n return buildProcessHandle(payload, ctx, async () => {}, null, DEFAULT_READY_TIMEOUT_MS);\n },\n};\n","/** `podmanDeployTarget` — the shared container runtime bound to the `podman` bin. */\n\nimport { makeContainerDeployTarget } from \"./container-runtime.js\";\n\nexport const podmanDeployTarget = makeContainerDeployTarget(\"podman\");\n","/**\n * Registry-owned persistence for the detach handle at\n * `<project>/.skaile/deploy/handle.json` (locked decision #13).\n *\n * The file is a `{ targetId, payload }` envelope: `targetId` selects which\n * `DeployTarget` to look up, `payload` is that target's opaque restore slice.\n * The store never interprets `payload` — it only validates the envelope shape.\n */\n\nimport { mkdir, readFile, rm, writeFile } from \"node:fs/promises\";\nimport { dirname, join } from \"node:path\";\nimport * as z from \"zod\";\n\n/** Parsed detach-handle envelope. `payload` is the target's opaque restore slice. */\nexport interface StoredHandle {\n targetId: string;\n payload: unknown;\n}\n\nconst storedHandleSchema = z.object({\n targetId: z.string().min(1),\n payload: z.unknown(),\n});\n\n/** Absolute path to the detach-handle file for a project. */\nexport function handlePath(projectDir: string): string {\n return join(projectDir, \".skaile\", \"deploy\", \"handle.json\");\n}\n\n/** Write the detach handle, creating `.skaile/deploy/` if missing. */\nexport async function writeHandle(\n projectDir: string,\n targetId: string,\n payload: unknown,\n): Promise<void> {\n const path = handlePath(projectDir);\n await mkdir(dirname(path), { recursive: true });\n const envelope: StoredHandle = { targetId, payload };\n await writeFile(path, `${JSON.stringify(envelope, null, 2)}\\n`, \"utf8\");\n}\n\n/** Read + validate the detach handle. Returns null when absent or malformed. */\nexport async function readHandle(projectDir: string): Promise<StoredHandle | null> {\n let raw: string;\n try {\n raw = await readFile(handlePath(projectDir), \"utf8\");\n } catch {\n return null;\n }\n let parsed: unknown;\n try {\n parsed = JSON.parse(raw);\n } catch {\n return null;\n }\n const result = storedHandleSchema.safeParse(parsed);\n return result.success ? result.data : null;\n}\n\n/** Remove the detach handle. Idempotent — a missing file is not an error. */\nexport async function clearHandle(projectDir: string): Promise<void> {\n await rm(handlePath(projectDir), { force: true });\n}\n","/**\n * `@skaile/workspaces/deploy` — built-in deploy targets + the detach-handle store.\n *\n * Ships the three loopback-only built-ins (local, docker, podman),\n * `registerBuiltinDeployTargets()` to load them into a `PluginRegistry`, and the\n * `.skaile/deploy/handle.json` read/write/restore API. Cloud targets (fly,\n * vercel-sandbox, k8s) ship as separate packages that self-register.\n */\n\nimport { type PluginRegistry, pluginRegistry } from \"@skaile/workspaces/plugin-registry\";\nimport { dockerDeployTarget } from \"./targets/docker.js\";\nimport { localDeployTarget } from \"./targets/local.js\";\nimport { nixDeployTarget } from \"./targets/nix.js\";\nimport { podmanDeployTarget } from \"./targets/podman.js\";\n\nexport {\n clearHandle,\n handlePath,\n readHandle,\n type StoredHandle,\n writeHandle,\n} from \"./handle-store.js\";\nexport { makeContainerDeployTarget } from \"./targets/container-runtime.js\";\nexport { dockerDeployTarget } from \"./targets/docker.js\";\nexport { localDeployTarget } from \"./targets/local.js\";\nexport { buildNixArgs, nixDeployTarget } from \"./targets/nix.js\";\nexport { podmanDeployTarget } from \"./targets/podman.js\";\n\n/**\n * Register the built-in deploy targets into `registry` (the process-wide\n * `pluginRegistry` by default). Idempotent — an id already present is skipped,\n * so calling this from multiple CLI entrypoints is safe.\n */\nexport function registerBuiltinDeployTargets(registry: PluginRegistry = pluginRegistry): void {\n for (const t of [localDeployTarget, dockerDeployTarget, podmanDeployTarget, nixDeployTarget]) {\n if (!registry.get(\"deployTarget\", t.id)) registry.register(\"deployTarget\", t);\n }\n}\n"]}
|
package/dist/discovery/index.js
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
export { AGENT_COMPANION_DIRS, AssetKindRegistry, BUILTIN_PROVIDERS, DEFAULT_ATOMIZATION_POLICY,
|
|
2
|
-
import '../chunk-
|
|
3
|
-
import '../chunk-
|
|
4
|
-
import '../chunk-
|
|
5
|
-
import '../chunk-
|
|
1
|
+
export { AGENT_COMPANION_DIRS, AssetKindRegistry, BUILTIN_PROVIDERS, DEFAULT_ATOMIZATION_POLICY, SEMVER_RE, SKILL_COMPANION_DIRS, SourceConfigSchema, VERSION, agentProvider, barePublisher, buildRequiresGraph, closeOverReferences, computeDeterministicHash, computeDeterministicHashDetailed, connectorProvider, contractProvider, createDefaultRegistry, createNodeAssetFs, decodeManifestSourceConfig, detectCycles, discoverAssetsInTree, discoverAssetsInTreeEntries, discoverFromManifest, extractPathCandidates, extractRequires, extractSlashCommands, isExcludedDevPath, isManifestMode, lintUncoveredReferences, loadMergedSourceConfig, loadMergedSourceConfigFromFile, loadSourceConfig, manifestToSourceConfig, mcpServerProvider, mergeSourceConfigs, parseSourceConfig, personaProvider, presetProvider, promptProvider, readManifestSourceConfig, rulesetProvider, scanAssetReferences, scanSlashCommandNames, skillProvider, validateSourceConfig } from '../chunk-UVOJSWD2.js';
|
|
2
|
+
import '../chunk-ZDKJHQY2.js';
|
|
3
|
+
import '../chunk-AG44ZJ7W.js';
|
|
4
|
+
import '../chunk-RVRB27AN.js';
|
|
5
|
+
import '../chunk-DXUQCMVT.js';
|
|
6
|
+
import '../chunk-43ZBF3WH.js';
|
|
6
7
|
import '../chunk-BOFL7GIF.js';
|
|
7
8
|
import '../chunk-5CYEWBPB.js';
|
|
8
9
|
import '../chunk-NSBPE2FW.js';
|
|
@@ -10,7 +10,6 @@
|
|
|
10
10
|
*/
|
|
11
11
|
import type { AssetKindFileFilter, IAssetKindRegistry } from "@skaile/workspaces/plugins";
|
|
12
12
|
import { AssetKindRegistry } from "./asset-kind-registry.js";
|
|
13
|
-
import { type DomainIndexEntry } from "./domains.js";
|
|
14
13
|
import { type ReferenceWarning } from "./reference-lint.js";
|
|
15
14
|
import { type RequiresEdge, type RequiresGraph } from "./requires-graph.js";
|
|
16
15
|
import type { SourceConfig } from "./source-config.js";
|
|
@@ -63,16 +62,20 @@ export interface DiscoveredAsset {
|
|
|
63
62
|
/** Cross-asset dependency edges originating from this asset. */
|
|
64
63
|
requires: RequiresEdge[];
|
|
65
64
|
/**
|
|
66
|
-
*
|
|
67
|
-
* when no
|
|
68
|
-
*
|
|
69
|
-
* @docLink packages/discovery/concepts#domains
|
|
65
|
+
* Claude plugin (`.claude-plugin/` manifest membership) this asset belongs
|
|
66
|
+
* to, or `undefined` when no plugin lists it. Display-only — never part of identity.
|
|
70
67
|
*/
|
|
71
|
-
|
|
68
|
+
plugin?: string;
|
|
72
69
|
}
|
|
73
70
|
export interface DiscoveryOptions {
|
|
74
71
|
/** Optional source config (adapted from `skaile.manifest.yaml`) for publisher resolution. */
|
|
75
72
|
sourceConfig?: SourceConfig;
|
|
73
|
+
/**
|
|
74
|
+
* Fallback publisher for assets no `publisher_overrides` entry or literal
|
|
75
|
+
* `publisher_default` covers (bare, no `@`). Defaults to the basename of the
|
|
76
|
+
* scanned root. Never derived from a path segment inside the tree.
|
|
77
|
+
*/
|
|
78
|
+
publisher?: string;
|
|
76
79
|
/**
|
|
77
80
|
* Optional sidecar directory (e.g. `~/.skaile/sources/<slug>/`) carrying a
|
|
78
81
|
* local overlay `skaile.manifest.yaml`. When set and `sourceConfig` is
|
|
@@ -94,18 +97,6 @@ export interface DiscoveryOptions {
|
|
|
94
97
|
* @docLink packages/discovery/concepts#sidecar-overlay
|
|
95
98
|
*/
|
|
96
99
|
sidecarManifestFile?: string;
|
|
97
|
-
/**
|
|
98
|
-
* Explicit `DOMAIN.md` descriptors (path relative to the repo root + raw
|
|
99
|
-
* content). When provided, these are the authoritative domain source and the
|
|
100
|
-
* in-tree / sidecar `DOMAIN.md` scan is skipped — the store supplies these
|
|
101
|
-
* from a sidecar repo. Paths resolve against the upstream tree.
|
|
102
|
-
*
|
|
103
|
-
* @docLink packages/discovery/concepts#domains
|
|
104
|
-
*/
|
|
105
|
-
domainFiles?: Array<{
|
|
106
|
-
path: string;
|
|
107
|
-
content: string;
|
|
108
|
-
}>;
|
|
109
100
|
/** Optional kind registry. If omitted, a default registry with all built-in providers is used. */
|
|
110
101
|
registry?: IAssetKindRegistry;
|
|
111
102
|
/**
|
|
@@ -149,13 +140,6 @@ export interface DiscoveryResult {
|
|
|
149
140
|
* @docLink packages/discovery/concepts#atomization
|
|
150
141
|
*/
|
|
151
142
|
warnings: ReferenceWarning[];
|
|
152
|
-
/**
|
|
153
|
-
* Resolved navigational domains (from sidecar `DOMAIN.md`), ordered for
|
|
154
|
-
* display. Absent when no `DOMAIN.md` was supplied.
|
|
155
|
-
*
|
|
156
|
-
* @docLink packages/discovery/concepts#domains
|
|
157
|
-
*/
|
|
158
|
-
domains?: DomainIndexEntry[];
|
|
159
143
|
}
|
|
160
144
|
/**
|
|
161
145
|
* Create a default AssetKindRegistry with all built-in providers registered.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"discover.d.ts","sourceRoot":"","sources":["../../../discovery/src/discover.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;
|
|
1
|
+
{"version":3,"file":"discover.d.ts","sourceRoot":"","sources":["../../../discovery/src/discover.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAQH,OAAO,KAAK,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAE1F,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAI7D,OAAO,EAML,KAAK,gBAAgB,EAItB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAsB,KAAK,YAAY,EAAE,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAChG,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AASvD,OAAO,EAAE,wBAAwB,EAAE,MAAM,WAAW,CAAC;AAMrD;;;;;;;;;;;;;GAaG;AACH,MAAM,MAAM,iBAAiB,GAAG,QAAQ,GAAG,SAAS,GAAG,UAAU,CAAC;AAElE;;;;GAIG;AACH,eAAO,MAAM,0BAA0B,EAAE,iBAA4B,CAAC;AAEtE;;;;;GAKG;AACH,MAAM,WAAW,eAAe;IAC9B,qDAAqD;IACrD,GAAG,EAAE,MAAM,CAAC;IACZ,6CAA6C;IAC7C,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,wEAAwE;IACxE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,0CAA0C;IAC1C,YAAY,EAAE,MAAM,CAAC;IACrB,sCAAsC;IACtC,YAAY,EAAE,MAAM,CAAC;IACrB,8CAA8C;IAC9C,UAAU,EAAE,mBAAmB,CAAC;IAChC,wDAAwD;IACxD,MAAM,EAAE,MAAM,CAAC;IACf,gEAAgE;IAChE,QAAQ,EAAE,YAAY,EAAE,CAAC;IACzB;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,6FAA6F;IAC7F,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;;;;;;OASG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;;;;;OAQG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,kGAAkG;IAClG,QAAQ,CAAC,EAAE,kBAAkB,CAAC;IAC9B;;;;;;OAMG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;;;OAKG;IACH,WAAW,CAAC,EAAE,iBAAiB,CAAC;CACjC;AAED;;;;;GAKG;AACH,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,KAAK,EAAE,aAAa,CAAC;IACrB,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC/C;;;;;;;;;;OAUG;IACH,QAAQ,EAAE,gBAAgB,EAAE,CAAC;CAC9B;AAMD;;;GAGG;AACH,wBAAgB,qBAAqB,IAAI,iBAAiB,CAMzD;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,MAAM,EAChB,qBAAqB,CAAC,EAAE,gBAAgB,GAAG,YAAY,GACtD,eAAe,CA6DjB"}
|
|
@@ -12,8 +12,6 @@ export { discoverFromManifest } from "./discover-manifest.js";
|
|
|
12
12
|
export { AGENT_COMPANION_DIRS, SKILL_COMPANION_DIRS } from "./atomization-conventions.js";
|
|
13
13
|
export type { AssetFs, AssetReference, ClosureResult, ReferenceClass, ReferenceWarning, } from "./reference-lint.js";
|
|
14
14
|
export { closeOverReferences, createNodeAssetFs, extractPathCandidates, extractSlashCommands, lintUncoveredReferences, scanAssetReferences, scanSlashCommandNames, } from "./reference-lint.js";
|
|
15
|
-
export { DOMAIN_MD_FILENAME, isDomainMdPath, isValidDomainSlug, parseDomainMd, validateDomains, assignDomain, buildDomainIndex, } from "./domains.js";
|
|
16
|
-
export type { DomainRelation, DomainMember, DomainMd, DomainIndexEntry, DomainValidationError, DomainAssignable, } from "./domains.js";
|
|
17
15
|
export { computeDeterministicHashDetailed } from "./hash.js";
|
|
18
16
|
export type { RequiresEdge, RequiresGraph } from "./requires-graph.js";
|
|
19
17
|
export { buildRequiresGraph, detectCycles, extractRequires, } from "./requires-graph.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../discovery/src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,eAAO,MAAM,OAAO,UAAU,CAAC;AAG/B,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAG7D,OAAO,EACL,aAAa,EACb,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,EACjB,eAAe,EACf,cAAc,EACd,cAAc,EACd,eAAe,EACf,aAAa,GACd,MAAM,wBAAwB,CAAC;AAChC,YAAY,EACV,iBAAiB,EACjB,eAAe,EACf,gBAAgB,EAChB,eAAe,GAChB,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,wBAAwB,EACxB,qBAAqB,EACrB,0BAA0B,EAC1B,oBAAoB,GACrB,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAG9D,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AAG1F,YAAY,EACV,OAAO,EACP,cAAc,EACd,aAAa,EACb,cAAc,EACd,gBAAgB,GACjB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,mBAAmB,EACnB,iBAAiB,EACjB,qBAAqB,EACrB,oBAAoB,EACpB,uBAAuB,EACvB,mBAAmB,EACnB,qBAAqB,GACtB,MAAM,qBAAqB,CAAC;AAG7B,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../discovery/src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,eAAO,MAAM,OAAO,UAAU,CAAC;AAG/B,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAG7D,OAAO,EACL,aAAa,EACb,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,EACjB,eAAe,EACf,cAAc,EACd,cAAc,EACd,eAAe,EACf,aAAa,GACd,MAAM,wBAAwB,CAAC;AAChC,YAAY,EACV,iBAAiB,EACjB,eAAe,EACf,gBAAgB,EAChB,eAAe,GAChB,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,wBAAwB,EACxB,qBAAqB,EACrB,0BAA0B,EAC1B,oBAAoB,GACrB,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAG9D,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AAG1F,YAAY,EACV,OAAO,EACP,cAAc,EACd,aAAa,EACb,cAAc,EACd,gBAAgB,GACjB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,mBAAmB,EACnB,iBAAiB,EACjB,qBAAqB,EACrB,oBAAoB,EACpB,uBAAuB,EACvB,mBAAmB,EACnB,qBAAqB,GACtB,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EAAE,gCAAgC,EAAE,MAAM,WAAW,CAAC;AAC7D,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEvE,OAAO,EACL,kBAAkB,EAClB,YAAY,EACZ,eAAe,GAChB,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EACV,UAAU,EACV,kBAAkB,EAClB,iBAAiB,EACjB,YAAY,EACZ,cAAc,EACd,UAAU,EACV,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,aAAa,EACb,0BAA0B,EAC1B,iBAAiB,EACjB,cAAc,EACd,sBAAsB,EACtB,8BAA8B,EAC9B,gBAAgB,EAChB,sBAAsB,EACtB,kBAAkB,EAClB,iBAAiB,EACjB,wBAAwB,EACxB,SAAS,EACT,kBAAkB,EAClB,oBAAoB,GACrB,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EACV,kCAAkC,EAClC,SAAS,GACV,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,2BAA2B,EAAE,MAAM,mBAAmB,CAAC"}
|
|
@@ -48,9 +48,9 @@ declare const AssetEntrySchema: z.ZodObject<{
|
|
|
48
48
|
* which {@link manifestToSourceConfig} adapts into this shape; the raw schema is
|
|
49
49
|
* also accepted directly (tests, programmatic callers).
|
|
50
50
|
*
|
|
51
|
-
* Declares how a repo maps to Catalog publisher namespaces
|
|
52
|
-
*
|
|
53
|
-
*
|
|
51
|
+
* Declares how a repo maps to Catalog publisher namespaces: `publisher_overrides`
|
|
52
|
+
* (path-prefix match), then the literal `publisher_default`, then the caller's
|
|
53
|
+
* fallback publisher.
|
|
54
54
|
*
|
|
55
55
|
* Schema version `1` is the original glob-discovery surface. Version `2`
|
|
56
56
|
* extends the schema with an optional `assets:` block — when present,
|
|
@@ -234,14 +234,14 @@ export declare function barePublisher(publisher: string): string;
|
|
|
234
234
|
* repo-level manifest when the entry omits them; `dependencies` → `requires`;
|
|
235
235
|
* store-listing fields → `metadata`).
|
|
236
236
|
* - No inventory maps to a `version: 1` glob-mode config carrying the derived
|
|
237
|
-
* `publisher_default` (`@<publisher>` when declared, else `@<
|
|
237
|
+
* `publisher_default` (`@<publisher>` when declared, else `@<fallbackPublisher>`).
|
|
238
238
|
*
|
|
239
239
|
* The manifest carries no `publisher_default` template / `publisher_overrides` /
|
|
240
240
|
* `sync` — those were `.skaile-source.yaml`-only and are synthesised/defaulted.
|
|
241
241
|
*
|
|
242
242
|
* @docLink packages/discovery/concepts#manifest-to-source-config
|
|
243
243
|
*/
|
|
244
|
-
export declare function manifestToSourceConfig(manifest: SkPublishManifest): SourceConfig;
|
|
244
|
+
export declare function manifestToSourceConfig(manifest: SkPublishManifest, fallbackPublisher: string): SourceConfig;
|
|
245
245
|
/**
|
|
246
246
|
* Decode `skaile.manifest.yaml` text and adapt it to an internal
|
|
247
247
|
* {@link SourceConfig}. Fatal decode diagnostics (YAML syntax / non-object
|
|
@@ -250,7 +250,7 @@ export declare function manifestToSourceConfig(manifest: SkPublishManifest): Sou
|
|
|
250
250
|
*
|
|
251
251
|
* @docLink packages/discovery/concepts#decode-manifest-source-config
|
|
252
252
|
*/
|
|
253
|
-
export declare function decodeManifestSourceConfig(text: string): ValidationResult;
|
|
253
|
+
export declare function decodeManifestSourceConfig(text: string, fallbackPublisher: string): ValidationResult;
|
|
254
254
|
/**
|
|
255
255
|
* Read `<dir>/skaile.manifest.yaml` (if present) and adapt it to a
|
|
256
256
|
* {@link SourceConfig}. Returns `undefined` when the file is absent or
|
|
@@ -258,7 +258,7 @@ export declare function decodeManifestSourceConfig(text: string): ValidationResu
|
|
|
258
258
|
*
|
|
259
259
|
* @docLink packages/discovery/concepts#read-manifest-source-config
|
|
260
260
|
*/
|
|
261
|
-
export declare function readManifestSourceConfig(dir: string): SourceConfig | undefined;
|
|
261
|
+
export declare function readManifestSourceConfig(dir: string, fallbackPublisher: string): SourceConfig | undefined;
|
|
262
262
|
/**
|
|
263
263
|
* A {@link SourceConfig} produced by merging a base in-repo config with a
|
|
264
264
|
* local sidecar overlay. Always shaped like a regular `SourceConfig` —
|
|
@@ -304,6 +304,8 @@ export declare function mergeSourceConfigs(base: SourceConfig | undefined, overl
|
|
|
304
304
|
* @param rootPath - Absolute path to the upstream repo root
|
|
305
305
|
* @param sidecarPath - Optional absolute path to the sidecar directory
|
|
306
306
|
* (e.g. `~/.skaile/sources/<slug>/`)
|
|
307
|
+
* @param fallbackPublisher - Publisher used when a manifest declares none
|
|
308
|
+
* (defaults to the basename of `rootPath`)
|
|
307
309
|
* @returns A {@link ValidationResult} carrying the merged config. Returns
|
|
308
310
|
* `{ ok: true, config: <merged> }` when at least one side parses; returns
|
|
309
311
|
* `{ ok: false, errors: [...] }` only when a present file is structurally
|
|
@@ -311,7 +313,7 @@ export declare function mergeSourceConfigs(base: SourceConfig | undefined, overl
|
|
|
311
313
|
* empty/default v2 config.
|
|
312
314
|
* @docLink packages/discovery/concepts#load-merged-source-config
|
|
313
315
|
*/
|
|
314
|
-
export declare function loadMergedSourceConfig(rootPath: string, sidecarPath?: string): ValidationResult;
|
|
316
|
+
export declare function loadMergedSourceConfig(rootPath: string, sidecarPath?: string, fallbackPublisher?: string): ValidationResult;
|
|
315
317
|
/**
|
|
316
318
|
* File-based twin of {@link loadMergedSourceConfig}: merge the base
|
|
317
319
|
* `<rootPath>/skaile.manifest.yaml` with an overlay read from an EXPLICIT file
|
|
@@ -324,9 +326,11 @@ export declare function loadMergedSourceConfig(rootPath: string, sidecarPath?: s
|
|
|
324
326
|
*
|
|
325
327
|
* @param rootPath - Absolute path to the upstream repo root
|
|
326
328
|
* @param overlayManifestFile - Optional absolute path to the overlay manifest file
|
|
329
|
+
* @param fallbackPublisher - Publisher used when a manifest declares none
|
|
330
|
+
* (defaults to the basename of `rootPath`)
|
|
327
331
|
* @returns Same {@link ValidationResult} contract as {@link loadMergedSourceConfig}
|
|
328
332
|
* @docLink packages/discovery/concepts#load-merged-source-config
|
|
329
333
|
*/
|
|
330
|
-
export declare function loadMergedSourceConfigFromFile(rootPath: string, overlayManifestFile?: string): ValidationResult;
|
|
334
|
+
export declare function loadMergedSourceConfigFromFile(rootPath: string, overlayManifestFile?: string, fallbackPublisher?: string): ValidationResult;
|
|
331
335
|
export {};
|
|
332
336
|
//# sourceMappingURL=source-config.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"source-config.d.ts","sourceRoot":"","sources":["../../../discovery/src/source-config.ts"],"names":[],"mappings":"AAEA,OAAO,EAIL,KAAK,iBAAiB,EACvB,MAAM,0CAA0C,CAAC;AAElD,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AAMzB;;;;;;GAMG;AACH,eAAO,MAAM,SAAS,QAA6D,CAAC;AAMpF,QAAA,MAAM,uBAAuB;;;iBAO3B,CAAC;AAEH,QAAA,MAAM,gBAAgB;;;;;;iBAUlB,CAAC;AAEL;;;;;;;;;;GAUG;AACH,QAAA,MAAM,gBAAgB;;;;;;;;;;;iBA0ClB,CAAC;AAEL;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"source-config.d.ts","sourceRoot":"","sources":["../../../discovery/src/source-config.ts"],"names":[],"mappings":"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"}
|
|
@@ -38,7 +38,7 @@ import type { SourceConfig } from "./source-config.js";
|
|
|
38
38
|
* @docLink packages/discovery/concepts#tree-entry
|
|
39
39
|
*/
|
|
40
40
|
export interface TreeEntry {
|
|
41
|
-
/** Repo-relative path (forward slashes), e.g. `
|
|
41
|
+
/** Repo-relative path (forward slashes), e.g. `ai-assets/skills/review/SKILL.md`. */
|
|
42
42
|
path: string;
|
|
43
43
|
/** `"blob"` for files, `"tree"` for directories, `"commit"` for submodules. */
|
|
44
44
|
type: "blob" | "tree" | "commit" | string;
|
|
@@ -76,17 +76,12 @@ export interface DiscoverAssetsInTreeEntriesOptions {
|
|
|
76
76
|
*/
|
|
77
77
|
sidecarSourceConfig?: SourceConfig;
|
|
78
78
|
/**
|
|
79
|
-
*
|
|
80
|
-
*
|
|
81
|
-
*
|
|
82
|
-
*
|
|
83
|
-
*
|
|
84
|
-
* @docLink packages/discovery/concepts#domains
|
|
79
|
+
* Fallback publisher (bare, no `@`) for assets that no `publisher_overrides`
|
|
80
|
+
* entry or literal `publisher_default` covers. The virtual tree has no root
|
|
81
|
+
* directory name to fall back on, so callers should pass the source's
|
|
82
|
+
* identity; defaults to `"unknown"`. Never derived from a path segment.
|
|
85
83
|
*/
|
|
86
|
-
|
|
87
|
-
path: string;
|
|
88
|
-
content: string;
|
|
89
|
-
}>;
|
|
84
|
+
publisher?: string;
|
|
90
85
|
/** Optional kind registry. Defaults to {@link createDefaultRegistry}. */
|
|
91
86
|
registry?: IAssetKindRegistry;
|
|
92
87
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tree-entries.d.ts","sourceRoot":"","sources":["../../../discovery/src/tree-entries.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAOH,OAAO,KAAK,EAAuB,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAG1F,OAAO,KAAK,EAAE,iBAAiB,EAAmB,eAAe,EAAE,MAAM,eAAe,CAAC;AAczF,OAAO,KAAK,EAAc,YAAY,EAAkB,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"tree-entries.d.ts","sourceRoot":"","sources":["../../../discovery/src/tree-entries.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAOH,OAAO,KAAK,EAAuB,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAG1F,OAAO,KAAK,EAAE,iBAAiB,EAAmB,eAAe,EAAE,MAAM,eAAe,CAAC;AAczF,OAAO,KAAK,EAAc,YAAY,EAAkB,MAAM,oBAAoB,CAAC;AAanF;;;;;;;;;GASG;AACH,MAAM,WAAW,SAAS;IACxB,qFAAqF;IACrF,IAAI,EAAE,MAAM,CAAC;IACb,+EAA+E;IAC/E,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,QAAQ,GAAG,MAAM,CAAC;IAC1C,2GAA2G;IAC3G,GAAG,EAAE,MAAM,CAAC;IACZ,sFAAsF;IACtF,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,mCAAmC;IACnC,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;;GAIG;AACH,MAAM,WAAW,kCAAkC;IACjD;;;;;;;OAOG;IACH,SAAS,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,UAAU,GAAG,MAAM,GAAG,IAAI,CAAC,CAAC;IAEzE,oEAAoE;IACpE,YAAY,CAAC,EAAE,YAAY,CAAC;IAE5B;;;;;;;OAOG;IACH,mBAAmB,CAAC,EAAE,YAAY,CAAC;IAEnC;;;;;OAKG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,yEAAyE;IACzE,QAAQ,CAAC,EAAE,kBAAkB,CAAC;IAE9B;;;;;;OAMG;IACH,WAAW,CAAC,EAAE,iBAAiB,CAAC;IAEhC;;;;;OAKG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAMD;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,2BAA2B,CAC/C,OAAO,EAAE,SAAS,EAAE,EACpB,OAAO,EAAE,kCAAkC,GAC1C,OAAO,CAAC,eAAe,CAAC,CA0F1B"}
|
|
@@ -1,26 +1,27 @@
|
|
|
1
|
-
import { logErr, logOk, logInfo } from './chunk-
|
|
2
|
-
import './chunk-
|
|
3
|
-
import './chunk-
|
|
4
|
-
import './chunk-
|
|
5
|
-
import './chunk-
|
|
1
|
+
import { logErr, logOk, logInfo } from './chunk-WOJ4AK3Q.js';
|
|
2
|
+
import './chunk-LHFZTVIM.js';
|
|
3
|
+
import './chunk-X7MHVL4R.js';
|
|
4
|
+
import './chunk-UVOJSWD2.js';
|
|
5
|
+
import './chunk-H4EGUQ7M.js';
|
|
6
6
|
import './chunk-R7FOF242.js';
|
|
7
|
-
import './chunk-
|
|
8
|
-
import './chunk-
|
|
7
|
+
import './chunk-ZDKJHQY2.js';
|
|
8
|
+
import './chunk-7QMRP6BC.js';
|
|
9
9
|
import './chunk-CGYEHQOX.js';
|
|
10
|
-
import { WorkspaceYamlEditor } from './chunk-
|
|
10
|
+
import { WorkspaceYamlEditor } from './chunk-MBVNMPG7.js';
|
|
11
11
|
import './chunk-4GY63JU6.js';
|
|
12
|
-
import './chunk-
|
|
12
|
+
import './chunk-CGJ7B6MZ.js';
|
|
13
13
|
import './chunk-KAJH3XPW.js';
|
|
14
14
|
import './chunk-K5GBV4SA.js';
|
|
15
|
-
import './chunk-
|
|
16
|
-
import { sourceCacheKey, sourceShortName, getGlobalCacheDir } from './chunk-
|
|
15
|
+
import './chunk-A2ULN3KX.js';
|
|
16
|
+
import { sourceCacheKey, sourceShortName, getGlobalCacheDir } from './chunk-HWE3FXF4.js';
|
|
17
17
|
import './chunk-TLKM4M47.js';
|
|
18
18
|
import './chunk-EB4ZTESQ.js';
|
|
19
|
-
import './chunk-
|
|
20
|
-
import './chunk-
|
|
21
|
-
import './chunk-
|
|
22
|
-
import './chunk-
|
|
19
|
+
import './chunk-AG44ZJ7W.js';
|
|
20
|
+
import './chunk-RVRB27AN.js';
|
|
21
|
+
import './chunk-DXUQCMVT.js';
|
|
22
|
+
import './chunk-43ZBF3WH.js';
|
|
23
23
|
import './chunk-ICSCSM5D.js';
|
|
24
|
+
import './chunk-JMKB7IB4.js';
|
|
24
25
|
import './chunk-MJHSLODD.js';
|
|
25
26
|
import './chunk-C3CAXQMA.js';
|
|
26
27
|
import './chunk-BOFL7GIF.js';
|
|
@@ -91,5 +92,5 @@ function ensureSourcesCloned(projectDir, opts = {}) {
|
|
|
91
92
|
}
|
|
92
93
|
|
|
93
94
|
export { ensureSourcesCloned };
|
|
94
|
-
//# sourceMappingURL=ensure-sources-
|
|
95
|
-
//# sourceMappingURL=ensure-sources-
|
|
95
|
+
//# sourceMappingURL=ensure-sources-G4FXTJDB.js.map
|
|
96
|
+
//# sourceMappingURL=ensure-sources-G4FXTJDB.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../cli/src/ensure-sources.ts"],"names":[],"mappings":"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","file":"ensure-sources-G4FXTJDB.js","sourcesContent":["/**\n * ensure-sources.ts — hydrate the `~/.skaile/cache/sources/` clone cache from a\n * project's `skaile.yaml` `sources:` entries.\n *\n * Called by `skaile init` (idempotent: no-op when no sources declared) and\n * `skaile install` so checking out a project pulls its source clones onto\n * the local machine.\n */\n\nimport { spawnSync } from \"node:child_process\";\nimport { existsSync, mkdirSync } from \"node:fs\";\nimport * as path from \"node:path\";\nimport {\n getGlobalCacheDir,\n type SourceEntry,\n sourceCacheKey,\n sourceShortName,\n WorkspaceYamlEditor,\n} from \"@skaile/workspaces/core\";\nimport { logErr, logInfo, logOk } from \"./helpers.ts\";\n\nfunction sourceClonePath(key: string): string {\n return path.join(getGlobalCacheDir(), key);\n}\n\nexport interface EnsureResult {\n cloned: string[];\n cached: string[];\n failed: string[];\n}\n\n/** Load `sources:` from a project's `skaile.yaml`, or `null` when unavailable. */\nfunction loadProjectSources(yamlPath: string, quiet: boolean): SourceEntry[] | null {\n try {\n return WorkspaceYamlEditor.load(yamlPath).getSources();\n } catch (err) {\n if (!quiet) {\n logErr(`Could not read ${yamlPath}: ${err instanceof Error ? err.message : String(err)}`);\n }\n return null;\n }\n}\n\n/**\n * Hydrate a single source entry into `result`: skip when already cached,\n * otherwise clone and record success/failure. Mutates `result` in place.\n */\nfunction hydrateSourceEntry(entry: SourceEntry, quiet: boolean, result: EnsureResult): void {\n const key = sourceCacheKey(entry.url);\n const slug = sourceShortName(entry.url);\n const dest = sourceClonePath(key);\n if (existsSync(dest)) {\n result.cached.push(slug);\n return;\n }\n mkdirSync(path.dirname(dest), { recursive: true });\n const args = [\"clone\", entry.url, dest];\n if (entry.pin) args.splice(1, 0, \"--branch\", entry.pin);\n const clone = spawnSync(\"git\", args, { stdio: quiet ? \"pipe\" : \"inherit\" });\n if (clone.status !== 0) {\n result.failed.push(slug);\n if (quiet) {\n logErr(`git clone failed for ${entry.url}`);\n }\n return;\n }\n result.cloned.push(slug);\n}\n\n/** Log a full-hydrate summary of cloned + reused-cached entries. */\nfunction logHydrateSummary(result: EnsureResult): void {\n for (const n of result.cloned) logOk(`Cloned source \"${n}\".`);\n if (result.cached.length > 0) {\n logInfo(`Reused cached clones: ${result.cached.join(\", \")}`);\n }\n}\n\n/**\n * Walk `projectDir/skaile.yaml` `sources:` and clone any entries whose\n * clone directory does not yet exist under `~/.skaile/cache/sources/`. Existing\n * clones are left untouched — this is hydration, not sync.\n *\n * Quiet by default: when `quiet: true` the helper only prints failures.\n * On full hydrate (`quiet: false`) it logs each cloned/cached entry.\n */\nexport function ensureSourcesCloned(\n projectDir: string,\n opts: { quiet?: boolean } = {},\n): EnsureResult {\n const result: EnsureResult = { cloned: [], cached: [], failed: [] };\n const yamlPath = path.join(projectDir, \"skaile.yaml\");\n if (!existsSync(yamlPath)) return result;\n\n const quiet = opts.quiet ?? false;\n const sources = loadProjectSources(yamlPath, quiet);\n if (sources === null) return result;\n if (sources.length === 0) return result;\n\n for (const entry of sources) {\n hydrateSourceEntry(entry, quiet, result);\n }\n\n if (!quiet) {\n logHydrateSummary(result);\n }\n\n return result;\n}\n"]}
|
|
@@ -11,7 +11,7 @@ skills laid out for the resolver.
|
|
|
11
11
|
|---|---|---|
|
|
12
12
|
| skill | [`authoring-skaile-assets`](skills/authoring-skaile-assets/SKILL.md) | Author/restructure an asset repo: the 11 kinds, file layout, frontmatter, `requires` vs `dependencies`, local testing. |
|
|
13
13
|
| skill | [`authoring-skaile-manifests`](skills/authoring-skaile-manifests/SKILL.md) | Write/fix/generate a `skaile.yaml`; the **canonical dependency standard**, version waterfall, conflict resolution, v3 lock file. |
|
|
14
|
-
| skill | [`skaile-author-asset`](skills/skaile-author-asset/SKILL.md) | Build a skill in a local library and publish it: the source/library/store model,
|
|
14
|
+
| skill | [`skaile-author-asset`](skills/skaile-author-asset/SKILL.md) | Build a skill in a local library and publish it: the source/library/store model, any-depth layout and plugin grouping, and the `.skaile-source.yaml` manifest + publish flow. |
|
|
15
15
|
| skill | [`skaile-manage-workspace`](skills/skaile-manage-workspace/SKILL.md) | Manage a workspace from the CLI: init/install, add/remove/list/search assets, sources, libraries, the manage TUI, patches, sessions. |
|
|
16
16
|
| skill | [`manifest-compliance`](skills/manifest-compliance/SKILL.md) | Detect + fix non-canonical asset names/refs (the `parseAssetRef` hard error) across a repo via `skaile validate`. |
|
|
17
17
|
| bundle | `workspaces-authoring` | Installs the authoring skills together. |
|