@skaile/workspaces 5.17.0 → 5.18.1
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 +37 -0
- package/dist/{asset-feeds-MALYFZUM.js → asset-feeds-MKB5JUML.js} +21 -21
- package/dist/{asset-feeds-MALYFZUM.js.map → asset-feeds-MKB5JUML.js.map} +1 -1
- package/dist/asset-manager/catalog-deployer.js +8 -8
- package/dist/asset-manager/index.js +18 -14
- package/dist/asset-manager/installer.js +10 -10
- package/dist/asset-manager/renderers.js +9 -9
- package/dist/asset-manager/src/index.d.ts +122 -5
- package/dist/asset-manager/src/index.d.ts.map +1 -1
- package/dist/asset-manager/src/installer.d.ts +13 -10
- package/dist/asset-manager/src/installer.d.ts.map +1 -1
- package/dist/asset-manager/src/mcp-config.d.ts +61 -1
- package/dist/asset-manager/src/mcp-config.d.ts.map +1 -1
- package/dist/asset-manager/src/renderers.d.ts.map +1 -1
- package/dist/bridge/drivers/claude-sdk.js +12 -12
- package/dist/bridge/drivers/codex.js +12 -12
- package/dist/bridge/drivers/continue.js +11 -11
- package/dist/bridge/drivers/echo.js +27 -8
- package/dist/bridge/drivers/echo.js.map +1 -1
- package/dist/bridge/drivers/gemini.js +7 -7
- package/dist/bridge/drivers/goose.js +11 -11
- package/dist/bridge/drivers/omp.js +31 -5
- package/dist/bridge/drivers/omp.js.map +1 -1
- package/dist/bridge/drivers/opencode.js +11 -11
- package/dist/bridge/drivers/qwen.js +7 -7
- package/dist/bridge/index.js +14 -14
- package/dist/bridge/src/driver-model-check.d.ts +8 -8
- package/dist/bridge/src/driver-model-check.d.ts.map +1 -1
- package/dist/bridge/src/drivers/echo.d.ts +3 -0
- package/dist/bridge/src/drivers/echo.d.ts.map +1 -1
- package/dist/bridge/src/drivers/omp-models-yml.d.ts +5 -0
- package/dist/bridge/src/drivers/omp-models-yml.d.ts.map +1 -1
- package/dist/bridge/src/drivers/omp.d.ts.map +1 -1
- package/dist/bridge/src/index.d.ts +1 -1
- package/dist/bridge/src/index.d.ts.map +1 -1
- package/dist/{chunk-CWAWYXD5.js → chunk-2ABUJYVI.js} +3 -3
- package/dist/{chunk-CWAWYXD5.js.map → chunk-2ABUJYVI.js.map} +1 -1
- package/dist/{chunk-ZVZTCDUN.js → chunk-2NOLF7B2.js} +37 -9
- package/dist/chunk-2NOLF7B2.js.map +1 -0
- package/dist/{chunk-QSLXB44M.js → chunk-34C2EKWJ.js} +3 -3
- package/dist/{chunk-QSLXB44M.js.map → chunk-34C2EKWJ.js.map} +1 -1
- package/dist/{chunk-3OYOBTY4.js → chunk-3KMREAR2.js} +3 -3
- package/dist/{chunk-3OYOBTY4.js.map → chunk-3KMREAR2.js.map} +1 -1
- package/dist/{chunk-D54T2F54.js → chunk-5TBFN46Z.js} +4 -4
- package/dist/chunk-5TBFN46Z.js.map +1 -0
- package/dist/{chunk-PGZDSDOB.js → chunk-6Z5KTFJT.js} +3 -3
- package/dist/{chunk-PGZDSDOB.js.map → chunk-6Z5KTFJT.js.map} +1 -1
- package/dist/{chunk-WY22FMZF.js → chunk-7ANRSTNR.js} +5 -5
- package/dist/{chunk-WY22FMZF.js.map → chunk-7ANRSTNR.js.map} +1 -1
- package/dist/{chunk-GYZJKZPJ.js → chunk-7FHZB2QU.js} +3 -3
- package/dist/{chunk-GYZJKZPJ.js.map → chunk-7FHZB2QU.js.map} +1 -1
- package/dist/{chunk-QBY74UBH.js → chunk-AIBAOXDU.js} +7 -7
- package/dist/{chunk-QBY74UBH.js.map → chunk-AIBAOXDU.js.map} +1 -1
- package/dist/{chunk-ZPCABSSW.js → chunk-BBWSGVVE.js} +4 -4
- package/dist/{chunk-ZPCABSSW.js.map → chunk-BBWSGVVE.js.map} +1 -1
- package/dist/{chunk-QEX75L77.js → chunk-BO426QWN.js} +13 -7
- package/dist/chunk-BO426QWN.js.map +1 -0
- package/dist/{chunk-46IRZJV4.js → chunk-CD7SVH6W.js} +4 -4
- package/dist/{chunk-46IRZJV4.js.map → chunk-CD7SVH6W.js.map} +1 -1
- package/dist/{chunk-WKEBNB5S.js → chunk-CKBCX3HQ.js} +4 -4
- package/dist/{chunk-WKEBNB5S.js.map → chunk-CKBCX3HQ.js.map} +1 -1
- package/dist/{chunk-H7R7R5BN.js → chunk-CKICWXMU.js} +18 -15
- package/dist/chunk-CKICWXMU.js.map +1 -0
- package/dist/{chunk-YK3XLEQJ.js → chunk-CKNIYIV2.js} +83 -77
- package/dist/chunk-CKNIYIV2.js.map +1 -0
- package/dist/{chunk-SPV2CXJ3.js → chunk-D6UBEYQH.js} +4 -4
- package/dist/{chunk-SPV2CXJ3.js.map → chunk-D6UBEYQH.js.map} +1 -1
- package/dist/{chunk-D5REDKVU.js → chunk-FKU57Q5Q.js} +3 -3
- package/dist/{chunk-D5REDKVU.js.map → chunk-FKU57Q5Q.js.map} +1 -1
- package/dist/{chunk-5SWED2LW.js → chunk-GBYNC5V3.js} +3 -3
- package/dist/{chunk-5SWED2LW.js.map → chunk-GBYNC5V3.js.map} +1 -1
- package/dist/{chunk-YW2BNDSE.js → chunk-GOCWM7FN.js} +22 -4
- package/dist/chunk-GOCWM7FN.js.map +1 -0
- package/dist/{chunk-ZWUJ22RF.js → chunk-GOK4QRJR.js} +16 -23
- package/dist/chunk-GOK4QRJR.js.map +1 -0
- package/dist/{chunk-AP24HESN.js → chunk-H6UVIKQ2.js} +3 -3
- package/dist/{chunk-AP24HESN.js.map → chunk-H6UVIKQ2.js.map} +1 -1
- package/dist/{chunk-ES6ARJPQ.js → chunk-HPVMTX6M.js} +15 -10
- package/dist/chunk-HPVMTX6M.js.map +1 -0
- package/dist/{chunk-BVXXBZWA.js → chunk-IW6F6R2W.js} +24 -15
- package/dist/chunk-IW6F6R2W.js.map +1 -0
- package/dist/{chunk-HUKUYWBJ.js → chunk-JYWW32JI.js} +17 -6
- package/dist/chunk-JYWW32JI.js.map +1 -0
- package/dist/{chunk-5RDZ5JHH.js → chunk-KC6HGWXN.js} +4 -4
- package/dist/{chunk-5RDZ5JHH.js.map → chunk-KC6HGWXN.js.map} +1 -1
- package/dist/{chunk-FACRITOL.js → chunk-KSBDLCZI.js} +8 -4
- package/dist/chunk-KSBDLCZI.js.map +1 -0
- package/dist/{chunk-LQT2IKYY.js → chunk-KY4UXX7M.js} +2 -2
- package/dist/{chunk-LQT2IKYY.js.map → chunk-KY4UXX7M.js.map} +1 -1
- package/dist/{chunk-L6UMSKDF.js → chunk-LW7ZI6EQ.js} +8 -36
- package/dist/chunk-LW7ZI6EQ.js.map +1 -0
- package/dist/{chunk-DR5ZOEYI.js → chunk-OYIENLJI.js} +32 -18
- package/dist/chunk-OYIENLJI.js.map +1 -0
- package/dist/{chunk-EOKWTN4N.js → chunk-PBSN4RTV.js} +44 -29
- package/dist/chunk-PBSN4RTV.js.map +1 -0
- package/dist/{chunk-WXWQNJCT.js → chunk-PUK7TQT4.js} +3 -3
- package/dist/{chunk-WXWQNJCT.js.map → chunk-PUK7TQT4.js.map} +1 -1
- package/dist/{chunk-5DCOG5B5.js → chunk-RD6N2D7I.js} +3 -3
- package/dist/{chunk-5DCOG5B5.js.map → chunk-RD6N2D7I.js.map} +1 -1
- package/dist/{chunk-OXUCYHL5.js → chunk-RP3FZ2T6.js} +53 -16
- package/dist/chunk-RP3FZ2T6.js.map +1 -0
- package/dist/{chunk-6GSE63K2.js → chunk-SRNCN4X2.js} +13 -5
- package/dist/chunk-SRNCN4X2.js.map +1 -0
- package/dist/{chunk-PIC23DDE.js → chunk-T2TQAH2X.js} +42 -11
- package/dist/chunk-T2TQAH2X.js.map +1 -0
- package/dist/{chunk-SXWGLW23.js → chunk-U2FI547Z.js} +4 -4
- package/dist/{chunk-SXWGLW23.js.map → chunk-U2FI547Z.js.map} +1 -1
- package/dist/{chunk-KZWZRNIY.js → chunk-U7V5SIFW.js} +55 -17
- package/dist/chunk-U7V5SIFW.js.map +1 -0
- package/dist/{chunk-EYDRONKO.js → chunk-V3D4HQMS.js} +4 -4
- package/dist/{chunk-EYDRONKO.js.map → chunk-V3D4HQMS.js.map} +1 -1
- package/dist/{chunk-D3PU3C6F.js → chunk-VKPBUPH7.js} +41 -15
- package/dist/chunk-VKPBUPH7.js.map +1 -0
- package/dist/{chunk-W44KA24A.js → chunk-VM3PH7BB.js} +695 -96
- package/dist/chunk-VM3PH7BB.js.map +1 -0
- package/dist/{chunk-HLETG3CX.js → chunk-VOBXINUZ.js} +3 -3
- package/dist/{chunk-HLETG3CX.js.map → chunk-VOBXINUZ.js.map} +1 -1
- package/dist/{chunk-FT4ZHLYR.js → chunk-WDXZA7QW.js} +33 -3
- package/dist/chunk-WDXZA7QW.js.map +1 -0
- package/dist/{chunk-FSSRBWYL.js → chunk-WJCQFNF6.js} +4 -4
- package/dist/chunk-WJCQFNF6.js.map +1 -0
- package/dist/{chunk-2SKPPIV7.js → chunk-WJLYL6RY.js} +5 -5
- package/dist/{chunk-2SKPPIV7.js.map → chunk-WJLYL6RY.js.map} +1 -1
- package/dist/{chunk-MMARPEV7.js → chunk-WMF2C5U7.js} +6 -6
- package/dist/{chunk-MMARPEV7.js.map → chunk-WMF2C5U7.js.map} +1 -1
- package/dist/{chunk-OQN7PCI4.js → chunk-X3AUS4RW.js} +4 -4
- package/dist/{chunk-OQN7PCI4.js.map → chunk-X3AUS4RW.js.map} +1 -1
- package/dist/{chunk-BBRMS4IC.js → chunk-X6GUNN7X.js} +8 -8
- package/dist/{chunk-BBRMS4IC.js.map → chunk-X6GUNN7X.js.map} +1 -1
- package/dist/{chunk-QXA2W6UB.js → chunk-XTO436PV.js} +3 -3
- package/dist/{chunk-QXA2W6UB.js.map → chunk-XTO436PV.js.map} +1 -1
- package/dist/{chunk-QW534EZB.js → chunk-YARXR3CN.js} +53 -8
- package/dist/chunk-YARXR3CN.js.map +1 -0
- package/dist/{chunk-FSLVMZXR.js → chunk-YZ3N7IUU.js} +72 -31
- package/dist/chunk-YZ3N7IUU.js.map +1 -0
- package/dist/{chunk-V5CDPKDA.js → chunk-ZBMC6IAE.js} +44 -27
- package/dist/chunk-ZBMC6IAE.js.map +1 -0
- package/dist/cli/index.js +346 -147
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/src/commands/asset-cmd.d.ts.map +1 -1
- package/dist/cli/src/commands/catalog.d.ts.map +1 -1
- package/dist/cli/src/commands/config.d.ts.map +1 -1
- package/dist/cli/src/commands/integration.d.ts.map +1 -1
- package/dist/cli/src/commands/library-cmd.d.ts.map +1 -1
- package/dist/cli/src/commands/library-publish.d.ts.map +1 -1
- package/dist/cli/src/commands/plugin/claude-code.d.ts.map +1 -1
- package/dist/cli/src/commands/plugin/codex.d.ts +6 -0
- package/dist/cli/src/commands/plugin/codex.d.ts.map +1 -1
- package/dist/cli/src/commands/project.d.ts.map +1 -1
- package/dist/cli/src/commands/run.d.ts.map +1 -1
- package/dist/cli/src/commands/serve.d.ts +5 -0
- package/dist/cli/src/commands/serve.d.ts.map +1 -1
- package/dist/cli/src/commands/source.d.ts.map +1 -1
- package/dist/cli/src/commands/validate.d.ts.map +1 -1
- package/dist/cli/src/commands/verify.d.ts.map +1 -1
- package/dist/cli/src/driver-error.d.ts +3 -1
- package/dist/cli/src/driver-error.d.ts.map +1 -1
- package/dist/cli/src/helpers.d.ts +6 -4
- package/dist/cli/src/helpers.d.ts.map +1 -1
- package/dist/cli/src/plugin-store/index.d.ts +6 -0
- package/dist/cli/src/plugin-store/index.d.ts.map +1 -1
- package/dist/cli/src/skill-checks.d.ts +4 -3
- package/dist/cli/src/skill-checks.d.ts.map +1 -1
- package/dist/connectors/config.js +5 -5
- package/dist/connectors/index.js +20 -20
- package/dist/connectors/src/connector-manager.d.ts.map +1 -1
- package/dist/connectors/src/connector-types.d.ts +5 -0
- package/dist/connectors/src/connector-types.d.ts.map +1 -1
- package/dist/connectors/src/watcher.d.ts.map +1 -1
- package/dist/{connectors-CIEIMJY2.js → connectors-YNQ3WJGM.js} +23 -23
- package/dist/{connectors-CIEIMJY2.js.map → connectors-YNQ3WJGM.js.map} +1 -1
- package/dist/core/index.js +7 -7
- package/dist/core/manifest.js +2 -2
- package/dist/core/models.js +1 -1
- package/dist/core/publish-manifest.js +3 -3
- package/dist/core/ref.js +1 -1
- package/dist/core/runtime-assets.js +5 -5
- package/dist/core/src/bind.d.ts +30 -0
- package/dist/core/src/bind.d.ts.map +1 -0
- package/dist/core/src/index.d.ts +4 -3
- package/dist/core/src/index.d.ts.map +1 -1
- package/dist/core/src/lock.d.ts +11 -2
- package/dist/core/src/lock.d.ts.map +1 -1
- package/dist/core/src/manifest.d.ts.map +1 -1
- package/dist/core/src/models.d.ts +19 -0
- package/dist/core/src/models.d.ts.map +1 -1
- package/dist/core/src/publish-manifest.d.ts +15 -13
- package/dist/core/src/publish-manifest.d.ts.map +1 -1
- package/dist/core/src/store.d.ts +2 -1
- package/dist/core/src/store.d.ts.map +1 -1
- package/dist/core/src/workspace-config.d.ts +26 -1
- package/dist/core/src/workspace-config.d.ts.map +1 -1
- package/dist/core/store.js +1 -1
- package/dist/core/workspace-config.js +4 -4
- package/dist/deploy/index.js +7 -7
- package/dist/discovery/index.js +5 -5
- package/dist/discovery/src/parse-manifest.d.ts +1 -1
- package/dist/discovery/src/source-config.d.ts +2 -1
- package/dist/discovery/src/source-config.d.ts.map +1 -1
- package/dist/{ensure-sources-I62QMZZP.js → ensure-sources-UJWEZSR3.js} +21 -17
- package/dist/ensure-sources-UJWEZSR3.js.map +1 -0
- package/dist/factory-assets/connectors/box.js +20 -20
- package/dist/factory-assets/connectors/deploy.js +20 -20
- package/dist/factory-assets/connectors/devserver.js +20 -20
- package/dist/factory-assets/connectors/flow/adapter.js +20 -20
- package/dist/factory-assets/connectors/flow/engine.js +9 -9
- package/dist/factory-assets/connectors/flow/run-flow.js +22 -22
- package/dist/factory-assets/connectors/flow.js +20 -20
- package/dist/factory-assets/connectors/git.js +20 -20
- package/dist/factory-assets/connectors/gmail.js +20 -20
- package/dist/factory-assets/connectors/googledrive.js +20 -20
- package/dist/factory-assets/connectors/local.js +20 -20
- package/dist/factory-assets/connectors/mattermost.js +20 -20
- package/dist/factory-assets/connectors/memory.js +20 -20
- package/dist/factory-assets/connectors/minio.js +20 -20
- package/dist/factory-assets/connectors/postgres.js +20 -20
- package/dist/factory-assets/connectors/s3.js +20 -20
- package/dist/factory-assets/connectors/sharepoint.js +20 -20
- package/dist/factory-assets/connectors/sqlite.js +20 -20
- package/dist/factory-assets/connectors/static-server.js +20 -20
- package/dist/factory-assets/connectors/tunnel.js +20 -20
- package/dist/factory-assets/connectors/webdav.js +20 -20
- package/dist/factory-assets/connectors/xstate-store/adapter.d.ts +1 -1
- package/dist/factory-assets/connectors/xstate-store/adapter.d.ts.map +1 -1
- package/dist/factory-assets/connectors/xstate-store.js +20 -20
- package/dist/factory-assets/connectors/xstate.js +20 -20
- package/dist/{flows-YKC53LDP.js → flows-BHY73K3O.js} +12 -12
- package/dist/{flows-YKC53LDP.js.map → flows-BHY73K3O.js.map} +1 -1
- package/dist/{helpers-3FOM37BO.js → helpers-3CG7ZVX4.js} +21 -17
- package/dist/{helpers-3FOM37BO.js.map → helpers-3CG7ZVX4.js.map} +1 -1
- package/dist/library/index.js +11 -11
- package/dist/library/install.js +4 -4
- package/dist/library/src/index.d.ts +1 -1
- package/dist/library/src/index.d.ts.map +1 -1
- package/dist/library/src/manifest-writer.d.ts +17 -1
- package/dist/library/src/manifest-writer.d.ts.map +1 -1
- package/dist/{library-publish-EFKITCGE.js → library-publish-NWWVYJUK.js} +60 -63
- package/dist/library-publish-NWWVYJUK.js.map +1 -0
- package/dist/model-endpoint/index.js +10 -10
- package/dist/model-endpoint/src/server.d.ts.map +1 -1
- package/dist/open-library-7ZG2FFAX.js +42 -0
- package/dist/{open-library-NZUI4XGF.js.map → open-library-7ZG2FFAX.js.map} +1 -1
- package/dist/open-registry-RBELV5YH.js +32 -0
- package/dist/{open-registry-YPRQDUMK.js.map → open-registry-RBELV5YH.js.map} +1 -1
- package/dist/paths-BFM6K2QO.js +22 -0
- package/dist/{paths-P55DTBEK.js.map → paths-BFM6K2QO.js.map} +1 -1
- package/dist/plugin-store-QOQDM24E.js +23 -0
- package/dist/{plugin-store-IPIBZRBX.js.map → plugin-store-QOQDM24E.js.map} +1 -1
- package/dist/{project-2BNFZ2CR.js → project-YQM3I25D.js} +45 -45
- package/dist/{project-2BNFZ2CR.js.map → project-YQM3I25D.js.map} +1 -1
- package/dist/resolver/index.js +8 -8
- package/dist/runner/index.js +37 -37
- package/dist/runner/src/agent.d.ts.map +1 -1
- package/dist/runner/src/capability-roundtrip.d.ts.map +1 -1
- package/dist/sdk/asset-manager.js +18 -14
- package/dist/sdk/bridge.js +14 -14
- package/dist/sdk/core.js +7 -7
- package/dist/sdk/flow.js +9 -9
- package/dist/sdk/index.js +37 -37
- package/dist/sdk/resolver.js +8 -8
- package/dist/sdk/runner.js +37 -37
- package/dist/sdk/transport/ws/server.js +19 -1
- package/dist/sdk/transport/ws.js +19 -1
- package/dist/sdk/transport.js +19 -1
- package/dist/{serve-preflight-V5GM33T3.js → serve-preflight-5QMY7DBC.js} +9 -9
- package/dist/{serve-preflight-V5GM33T3.js.map → serve-preflight-5QMY7DBC.js.map} +1 -1
- package/dist/{setup-ZMAPTKJW.js → setup-AAHVAXRA.js} +28 -24
- package/dist/setup-AAHVAXRA.js.map +1 -0
- package/dist/{skills-7G6QCDEM.js → skills-RSZVUIYZ.js} +13 -13
- package/dist/{skills-7G6QCDEM.js.map → skills-RSZVUIYZ.js.map} +1 -1
- package/dist/{source-6BZA34F5.js → source-KWMCMEMB.js} +47 -47
- package/dist/{source-6BZA34F5.js.map → source-KWMCMEMB.js.map} +1 -1
- package/dist/{source-manifest-publish-MJXCSUKT.js → source-manifest-publish-EDYKM4YZ.js} +49 -49
- package/dist/{source-manifest-publish-MJXCSUKT.js.map → source-manifest-publish-EDYKM4YZ.js.map} +1 -1
- package/dist/transport/index.js +19 -1
- package/dist/transport/src/ws/server.d.ts +2 -16
- package/dist/transport/src/ws/server.d.ts.map +1 -1
- package/dist/transport/ws/server.js +19 -1
- package/dist/transport/ws.js +19 -1
- package/dist/tui/index.js +54 -42
- package/dist/tui/index.js.map +1 -1
- package/dist/tui/src/repl.d.ts +4 -1
- package/dist/tui/src/repl.d.ts.map +1 -1
- package/dist/types/manifests.js +1 -1
- package/dist/types/src/manifests/index.d.ts +1 -1
- package/dist/types/src/manifests/index.d.ts.map +1 -1
- package/dist/types/src/manifests/scaffold-body.d.ts +8 -0
- package/dist/types/src/manifests/scaffold-body.d.ts.map +1 -1
- package/dist/types/src/manifests/skill.d.ts +0 -2
- package/dist/types/src/manifests/skill.d.ts.map +1 -1
- package/dist/workspace-plugin/adapters/mcp.js +27 -27
- package/dist/workspace-plugin/adapters/omp.js +32 -18
- package/dist/workspace-plugin/adapters/omp.js.map +1 -1
- package/dist/workspace-plugin/index.js +1 -1
- package/dist/workspace-plugin/src/adapters/claude-code.d.ts +1 -1
- package/dist/workspace-plugin/src/adapters/omp.d.ts +8 -5
- package/dist/workspace-plugin/src/adapters/omp.d.ts.map +1 -1
- package/dist/workspace-plugin/src/plugin.d.ts +7 -1
- package/dist/workspace-plugin/src/plugin.d.ts.map +1 -1
- package/package.json +1 -1
- package/dist/chunk-6GSE63K2.js.map +0 -1
- package/dist/chunk-BVXXBZWA.js.map +0 -1
- package/dist/chunk-D3PU3C6F.js.map +0 -1
- package/dist/chunk-D54T2F54.js.map +0 -1
- package/dist/chunk-DR5ZOEYI.js.map +0 -1
- package/dist/chunk-EOKWTN4N.js.map +0 -1
- package/dist/chunk-ES6ARJPQ.js.map +0 -1
- package/dist/chunk-FACRITOL.js.map +0 -1
- package/dist/chunk-FSLVMZXR.js.map +0 -1
- package/dist/chunk-FSSRBWYL.js.map +0 -1
- package/dist/chunk-FT4ZHLYR.js.map +0 -1
- package/dist/chunk-H7R7R5BN.js.map +0 -1
- package/dist/chunk-HUKUYWBJ.js.map +0 -1
- package/dist/chunk-KZWZRNIY.js.map +0 -1
- package/dist/chunk-L6UMSKDF.js.map +0 -1
- package/dist/chunk-OXUCYHL5.js.map +0 -1
- package/dist/chunk-PIC23DDE.js.map +0 -1
- package/dist/chunk-QEX75L77.js.map +0 -1
- package/dist/chunk-QW534EZB.js.map +0 -1
- package/dist/chunk-V5CDPKDA.js.map +0 -1
- package/dist/chunk-W44KA24A.js.map +0 -1
- package/dist/chunk-YK3XLEQJ.js.map +0 -1
- package/dist/chunk-YW2BNDSE.js.map +0 -1
- package/dist/chunk-ZVZTCDUN.js.map +0 -1
- package/dist/chunk-ZWUJ22RF.js.map +0 -1
- package/dist/ensure-sources-I62QMZZP.js.map +0 -1
- package/dist/library-publish-EFKITCGE.js.map +0 -1
- package/dist/open-library-NZUI4XGF.js +0 -40
- package/dist/open-registry-YPRQDUMK.js +0 -32
- package/dist/paths-P55DTBEK.js +0 -22
- package/dist/plugin-store-IPIBZRBX.js +0 -23
- package/dist/setup-ZMAPTKJW.js.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,42 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 5.18.1
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- [#1095](https://github.com/skaile-ai/workspaces/pull/1095) [`f73d02a`](https://github.com/skaile-ai/workspaces/commit/f73d02af44d2e2e9fbbbf8605b1dca8a87b7fbfc) Thanks [@Frozen666](https://github.com/Frozen666)! - The echo driver's `test question` keyword now asks a real question. It emits an `AskUserQuestion` tool call, which the normalizer turns into a `question` event with the options PostgreSQL, MySQL and SQLite, instead of a plain text reply. Hosts that open a "waiting on you" state only on a `question` event (the Skaile platform's needs-you marker) can now test that path on the echo driver. No text or turn summary follows the question, so it stays open; the turn still ends, and the answer arrives as a fresh prompt.
|
|
8
|
+
|
|
9
|
+
## 5.18.0
|
|
10
|
+
|
|
11
|
+
### Minor Changes
|
|
12
|
+
|
|
13
|
+
- [#1092](https://github.com/skaile-ai/workspaces/pull/1092) [`611bf2b`](https://github.com/skaile-ai/workspaces/commit/611bf2bb36f146f9959053bdbccc73fce61b5dba) Thanks [@mortegro](https://github.com/mortegro)! - Authoring: one verdict for secrets, symlinks, flows and kinds (5.16.0 critique, p1040, p1041, p411, p1042, p135, p871, p873, p1193, p1194, p926, p915, p486, p743, p875).
|
|
14
|
+
|
|
15
|
+
- `add` and `install` withhold every file the publish plan calls a secret (`.npmrc`, `.netrc`, `.envrc`, `credentials`, `token.json`, private keys, certificates, `.pypirc`, `.htpasswd`, `secrets.yaml`, `service-account.json`, `terraform.tfstate`, not only `.env*`) and warn once per file. The list is `isSecretFileName`, shared with the publish plan and the `.gitignore` scaffold. `onEnvFile` / `listEnvFiles` are now `onSecretFile` / `listSecretFiles`.
|
|
16
|
+
- A symlink in an asset folder refuses the deploy (`add`, `install`, `update`: exit 1, `Nothing was added`), as `library index`, `validate` and the publish plan refuse the library. The `! skipped symlink` line and `DeployOptions.onSkippedSymlink` are gone.
|
|
17
|
+
- A hand-written `RULESET.md` or `PERSONA.md` is a supported library asset: `library index` writes it to the manifest, `validate` checks it, `show`, `asset show`, `add` and an agent's `composes:` resolve it.
|
|
18
|
+
- `metadata.requires` of a SKILL.md and the `items[].ref` of a preset are checked with the one ref rule `dependencies:` uses, in `validate`, `library index` and the publish plan; `add` says `invalid publisher "Bad!"` instead of `publisher required`.
|
|
19
|
+
- `asset show` prints the same not-semver cause as `show` and `info` for an asset `library index` skipped; the 15-digit hint covers a numeric pre-release identifier too.
|
|
20
|
+
- `library index` drops the old entry of a flow whose `id:` was renamed but whose file was not; the message names the real rule (a deployed flow is loaded as `<id>/<id>.flow.yaml`).
|
|
21
|
+
- `validate` and the publish plan fail an asset directory the manifest does not list; `validate versions` in a directory with no asset exits 1; `validate` warns on `reads_from:` / `writes_to:` (no release reads them; they left the skill schema).
|
|
22
|
+
- `add`, `install` and `update` name a placeholder `description:` next to a placeholder body (`description and body are still the scaffold placeholder`).
|
|
23
|
+
- `library init --path` refuses a folder with deployed copies (`.claude/`, `.skaile/`, `.codex/`, `.omp/`) also without a `skaile.yaml` unless `--force`, and refuses a tree with an asset file that does not parse before anything is registered.
|
|
24
|
+
- A symlink in an asset folder is refused before the first copy is written and before `install` removes a stale asset, for every kind including `agent` (an agent with a symlink used to deploy with its source cache dropped). A credential file that an older release deployed is listed as extra by `check`, `doctor` and `diff` and deleted by the next `install` or `update` (`.env*` stays). `validate` and the publish plan skip deployed copies under `.claude/`, `.codex/`, `.omp/`, `.skaile/` and `dist/`; `library init --path` refuses only the deploy folders, not `settings.local.json` or `.omp/plans`; `validate versions` says `no versioned asset` for a library without versioned kinds.
|
|
25
|
+
|
|
26
|
+
- [#1092](https://github.com/skaile-ai/workspaces/pull/1092) [`611bf2b`](https://github.com/skaile-ai/workspaces/commit/611bf2bb36f146f9959053bdbccc73fce61b5dba) Thanks [@mortegro](https://github.com/mortegro)! - Harnesses: the omp extension file that `integration install --driver omp` writes holds no host path and is committed, not gitignored (omp skips an ignored extension; install removes the old ignore line and says when another rule still ignores it); `integration uninstall --driver codex|all` removes the trust entry install added to the user's codex config; a `--model <provider>/<model>` whose provider is not in the registry is refused by `run` and `repl` (also with `--dry-run`); a driver failure points at a real session id or at nothing, never at a literal `<session-id>`; a plugin that fails to install prints one `!` line with the installer's last error; the codex delegate warning is printed when files are written, not on every install; `config unset <driver|model> [--global]` exists and the `config set driver` warning in a project that names another harness names it; the omp home sweep removes the `standalone-*` homes of older releases; `integration install --driver claude-code --full` copies the installed skills into the plugin; a REPL failed turn is printed once, not again as the driver's own record (p345, p598, p1110, p1111, p1112, p1113, p1114, p1115, p1151, p1190).
|
|
27
|
+
|
|
28
|
+
- [#1092](https://github.com/skaile-ai/workspaces/pull/1092) [`611bf2b`](https://github.com/skaile-ai/workspaces/commit/611bf2bb36f146f9959053bdbccc73fce61b5dba) Thanks [@mortegro](https://github.com/mortegro)! - `add`, `remove` and `source` no longer touch what the project does not own, and the status commands say more. `add --force` replaces a symlink at an agent file (claude-code, codex, omp) instead of writing through it into the file it points at (p1060). A dangling symlink where a locked asset should be is drift for `check`, `doctor`, `outdated` and `diff` (p1061). `source remove` refuses while a locked asset comes from the source (`--force` overrides), and `check`, `doctor` and `outdated` report an asset whose source is gone or now publishes it under another publisher (p1062). `source add --publisher` on a source registered without one is guarded like a declared publisher (p722). `remove` with the library gone prunes the dependencies the lock recorded, `#range` forms included (p95). `add` refuses a flow the flow engine cannot parse (p1192). `install` keeps an agent that an `agents.<id>.ref` or `agent.definition` binds (p982). The `check` line for an agent binding whose library is gone reads as one sentence (p1152).
|
|
29
|
+
|
|
30
|
+
- [#1092](https://github.com/skaile-ai/workspaces/pull/1092) [`611bf2b`](https://github.com/skaile-ai/workspaces/commit/611bf2bb36f146f9959053bdbccc73fce61b5dba) Thanks [@mortegro](https://github.com/mortegro)! - `mcp-server` assets of the store are project state. The payload under `.skaile/assets/mcp-server/<name>/` and the entry skaile wrote to `.mcp.json` count as files of the locked asset: a deleted, edited or extra file, or a missing or changed entry, is drift for `check`, `doctor`, `outdated`, `diff` and `verify`, and `install --locked` writes them back and prints `Restored …` (p1130). `skaile diff mcp-server:<ref>` shows the payload and entry differences instead of `not deployed` (p1132). `verify` of a source asset compares the store's hash with the lock's hash and ignores the commit: the same bytes at another commit are `verified` (p1131). A server skaile does not write to `.mcp.json` shows as `skipped: <reason>` in `list` and `info` and as a `!` line in `check` and `doctor` (p1133). `add` names every required `MCP.md` field nothing sets (`SQL_MCP_DSN`) and says to set it with an `mcp_servers` entry in `skaile.yaml`; `doctor` and `check` keep listing it (p1134). A hand-written `mcp_servers` entry of `skaile.yaml` is configuration, not a locked asset, and is never drift.
|
|
31
|
+
|
|
32
|
+
- [#1092](https://github.com/skaile-ai/workspaces/pull/1092) [`611bf2b`](https://github.com/skaile-ai/workspaces/commit/611bf2bb36f146f9959053bdbccc73fce61b5dba) Thanks [@mortegro](https://github.com/mortegro)! - Serve and mounts: the model endpoint port uses the same bind check as the websocket port (a port held on every interface is refused), a mount watcher does not follow a symlink out of its mount, `@xstate/store` is looked up in the project first and its miss names the add command, a registry no longer replaces the user's own omp default model that only their `models.yml` serves, `serve` refuses an empty `--host` and a padded `--port`, and a `mountPath` that is a symlink leaving the project fails `validate` and is not mounted (p833, p1006, p1170, p1171, p1172, p1173).
|
|
33
|
+
|
|
34
|
+
- [#1092](https://github.com/skaile-ai/workspaces/pull/1092) [`611bf2b`](https://github.com/skaile-ai/workspaces/commit/611bf2bb36f146f9959053bdbccc73fce61b5dba) Thanks [@mortegro](https://github.com/mortegro)! - `install` and `install --locked` keep a locked library asset at its locked version when the library holds a newer one and the deployed copy is intact; only `update` moves a lock. A library re-registered under another name is found by publisher and content hash, and `update`/`install` re-lock the new name for git libraries too. `check`, `doctor`, `outdated` and `diff` print one line for an invalid library asset version. `validate .` checks publisher slugs in `skaile.yaml`. A never-held `#pin` names the pin in `skaile.yaml`. `add` prints one collision summary (`--verbose` lists each). `install --locked` fails on an unresolvable agent instance ref without a lock. `remove` of the last asset of a repo drops its `sources:` row.
|
|
35
|
+
|
|
36
|
+
### Patch Changes
|
|
37
|
+
|
|
38
|
+
- [#1092](https://github.com/skaile-ai/workspaces/pull/1092) [`611bf2b`](https://github.com/skaile-ai/workspaces/commit/611bf2bb36f146f9959053bdbccc73fce61b5dba) Thanks [@mortegro](https://github.com/mortegro)! - Docs match 5.16 behaviour: `sources[]` is `{url, pin?, publisher?}` (also in the `repositories:` migration error text), `run` refuses a one-word prompt that matches no flow (quote more words), `skaile session logs` is named for the log database, the `skaile-ai` publisher in `asset` examples, and the other doc defects of the 5.16.0 critique. `WORKSPACE_IDEAS.md` moved to `docs/superpowers/` so the docs site no longer builds it.
|
|
39
|
+
|
|
3
40
|
## 5.17.0
|
|
4
41
|
|
|
5
42
|
### Minor Changes
|
|
@@ -1,28 +1,28 @@
|
|
|
1
|
-
import { storeNotInstallableReason } from './chunk-
|
|
2
|
-
import { getKnownKinds } from './chunk-
|
|
3
|
-
import './chunk-
|
|
4
|
-
import './chunk-X3RMRJNR.js';
|
|
1
|
+
import { storeNotInstallableReason } from './chunk-PUK7TQT4.js';
|
|
2
|
+
import { getKnownKinds } from './chunk-WJLYL6RY.js';
|
|
3
|
+
import './chunk-D6UBEYQH.js';
|
|
5
4
|
import './chunk-7RGTAEG6.js';
|
|
6
|
-
import './chunk-
|
|
7
|
-
import './chunk-
|
|
8
|
-
import './chunk-
|
|
9
|
-
import './chunk-SXWGLW23.js';
|
|
5
|
+
import './chunk-VKPBUPH7.js';
|
|
6
|
+
import './chunk-HPVMTX6M.js';
|
|
7
|
+
import './chunk-U2FI547Z.js';
|
|
10
8
|
import './chunk-BFMYYNDT.js';
|
|
11
9
|
import './chunk-3TXEJN4W.js';
|
|
12
|
-
import './chunk-
|
|
13
|
-
import './chunk-
|
|
10
|
+
import './chunk-X3RMRJNR.js';
|
|
11
|
+
import './chunk-NUELZWCF.js';
|
|
12
|
+
import './chunk-CKNIYIV2.js';
|
|
13
|
+
import './chunk-T2TQAH2X.js';
|
|
14
14
|
import './chunk-4GY63JU6.js';
|
|
15
|
-
import { factoryAssetRoots } from './chunk-
|
|
16
|
-
import './chunk-
|
|
15
|
+
import { factoryAssetRoots } from './chunk-KC6HGWXN.js';
|
|
16
|
+
import './chunk-5TBFN46Z.js';
|
|
17
17
|
import './chunk-5BEFNLOR.js';
|
|
18
18
|
import './chunk-A2ULN3KX.js';
|
|
19
|
-
import { scanRepo } from './chunk-
|
|
19
|
+
import { scanRepo } from './chunk-2NOLF7B2.js';
|
|
20
20
|
import './chunk-L5VSIPQD.js';
|
|
21
21
|
import './chunk-IG5LZ3WU.js';
|
|
22
|
-
import './chunk-
|
|
22
|
+
import './chunk-CKICWXMU.js';
|
|
23
23
|
import './chunk-RVRB27AN.js';
|
|
24
|
-
import { parseRequires } from './chunk-
|
|
25
|
-
import './chunk-
|
|
24
|
+
import { parseRequires } from './chunk-GOCWM7FN.js';
|
|
25
|
+
import './chunk-WDXZA7QW.js';
|
|
26
26
|
import './chunk-ICSCSM5D.js';
|
|
27
27
|
import './chunk-DKXNKFKP.js';
|
|
28
28
|
import './chunk-MJHSLODD.js';
|
|
@@ -52,8 +52,8 @@ function libraryEntryOf(asset) {
|
|
|
52
52
|
async function libraryAssets() {
|
|
53
53
|
const notes = [];
|
|
54
54
|
try {
|
|
55
|
-
const { openLibraryManager } = await import('./open-library-
|
|
56
|
-
const { getKindRegistry } = await import('./open-registry-
|
|
55
|
+
const { openLibraryManager } = await import('./open-library-7ZG2FFAX.js');
|
|
56
|
+
const { getKindRegistry } = await import('./open-registry-RBELV5YH.js');
|
|
57
57
|
const { scanAuthoringLibraries } = await import('./library/index.js');
|
|
58
58
|
const { library: index, close } = await openLibraryManager();
|
|
59
59
|
try {
|
|
@@ -86,7 +86,7 @@ async function libraryAssets() {
|
|
|
86
86
|
async function storeAssets(projectDir) {
|
|
87
87
|
const notes = [];
|
|
88
88
|
try {
|
|
89
|
-
const { resolveCatalogSource } = await import('./open-library-
|
|
89
|
+
const { resolveCatalogSource } = await import('./open-library-7ZG2FFAX.js');
|
|
90
90
|
const { source, close } = await resolveCatalogSource({ projectDir });
|
|
91
91
|
try {
|
|
92
92
|
const assets = (await source.listAssets()).filter(
|
|
@@ -167,5 +167,5 @@ async function gatherAssetFeeds(am, projectDir) {
|
|
|
167
167
|
}
|
|
168
168
|
|
|
169
169
|
export { gatherAssetFeeds };
|
|
170
|
-
//# sourceMappingURL=asset-feeds-
|
|
171
|
-
//# sourceMappingURL=asset-feeds-
|
|
170
|
+
//# sourceMappingURL=asset-feeds-MKB5JUML.js.map
|
|
171
|
+
//# sourceMappingURL=asset-feeds-MKB5JUML.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../cli/src/asset-feeds.ts"],"names":[],"mappings":"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","file":"asset-feeds-MALYFZUM.js","sourcesContent":["/**\n * asset-feeds.ts — gather installable assets from every feed the manage TUI\n * surfaces.\n *\n * Four feeds, normalized into `CatalogEntry`:\n * - **Project sources** — `skaile.yaml` `sources:` entries (scanned via\n * `AssetManager.search()`; the new `sources:` field is merged into the\n * legacy repositories map in `AssetManager.loadConfig`).\n * - **Local libraries** — user authoring places from `LocalIndex`, read through\n * `scanAuthoringLibraries` (`@skaile/workspaces/library`): the same scan\n * `library index` / `search --local` use, so publishers and refs match them\n * (per-asset `publisher_overrides` honoured), `dev_paths` assets are left out,\n * and a library that fails to scan becomes one note while the rest stay listed.\n * - **Factory assets** — the bundled first-party `factory-assets` tree\n * (`factoryAssetRoots()`), scanned from disk. Always present; no network.\n * - **Remote store** — the configured catalog source when `catalog.url` is\n * not `local`. Failures are non-fatal — they surface as notes.\n */\n\nimport * as path from \"node:path\";\nimport {\n type AssetKind,\n type CatalogEntry,\n factoryAssetRoots,\n parseRequires,\n scanRepo,\n} from \"@skaile/workspaces/core\";\nimport { getKnownKinds } from \"./open-registry.ts\";\nimport { storeNotInstallableReason } from \"./store-addable.ts\";\nimport type { DiscoveredAsset } from \"@skaile/workspaces/discovery\";\n\n/** One non-fatal note returned to the caller for surfacing in the UI. */\nexport interface FeedNote {\n feed: \"sources\" | \"libraries\" | \"store\" | \"factory\";\n message: string;\n}\n\n/**\n * Which feed an asset came from. This is the top-level grouping axis in the\n * manage TUI (\"where is this skill coming from?\") and is intentionally distinct\n * from `publisher` (asset-intrinsic identity): the same publisher can legitimately\n * appear under more than one origin (e.g. a github repo you added as a `source`\n * that is also listed in the remote `store`).\n */\nexport type AssetOrigin = \"source\" | \"library\" | \"factory\" | \"store\";\n\n/** A catalog entry tagged with the feed it was gathered from. */\nexport interface OriginEntry {\n origin: AssetOrigin;\n entry: CatalogEntry;\n /**\n * Second-level grouping label for the manage tree. Defaults (when unset) to the\n * entry's `publisher`; the source feed sets it to the source's short repo name\n * so the Sources band groups by source — \"which repo did this come from\" — not\n * by the asset-intrinsic publisher.\n */\n group?: string;\n}\n\nexport interface AssetFeedResult {\n entries: OriginEntry[];\n notes: FeedNote[];\n}\n\n/**\n * Map one discovered library asset to the `CatalogEntry` the manage rows read.\n * `publisher` is the bare per-asset publisher (what `search --local` prints),\n * `source` the manifest path. `repo` is left unset: it only feeds the Sources-tree\n * org grouping. `requires` / `dependencies` come from the manifest the way the\n * scanner fills them — string `requires:` refs parsed to `{kind, name}`, a bundle's\n * string `dependencies:` list verbatim.\n */\nfunction libraryEntryOf(asset: DiscoveredAsset): CatalogEntry {\n const { manifest } = asset;\n const nested = (manifest.metadata as Record<string, unknown> | undefined)?.requires;\n const rawRequires = manifest.requires ?? nested;\n const requireRefs =\n typeof rawRequires === \"string\"\n ? rawRequires\n : Array.isArray(rawRequires)\n ? rawRequires.filter((r): r is string => typeof r === \"string\")\n : undefined;\n const deps = manifest.dependencies;\n return {\n name: asset.name,\n kind: asset.kind as AssetKind,\n description: typeof manifest.description === \"string\" ? manifest.description : \"\",\n source: asset.manifestPath,\n publisher: asset.publisher,\n ...(asset.plugin ? { plugin: asset.plugin } : {}),\n version: asset.version,\n requires: requireRefs === undefined ? [] : parseRequires({ requires: requireRefs }),\n dependencies:\n asset.kind === \"bundle\" && Array.isArray(deps)\n ? deps.filter((d): d is string => typeof d === \"string\" && d.length > 0)\n : [],\n };\n}\n\n/**\n * Pull assets from local libraries (the authoring places under\n * `~/.skaile/libraries/<name>/`, not the `~/.skaile/cache/sources/` cache) through\n * `scanAuthoringLibraries`, grouped under the bare library name\n * (`group: <name>`) so the manage TUI shows a clean `<name>` band — no\n * `library:` prefix (mirrors the source feed). Plugin grouping (`entry.plugin`)\n * comes from `DiscoveredAsset.plugin`. A library whose scan fails becomes one\n * `FeedNote`; the outer `catch` covers only opening the index.\n */\nasync function libraryAssets(): Promise<{\n entries: OriginEntry[];\n notes: FeedNote[];\n}> {\n const notes: FeedNote[] = [];\n try {\n // Lazy: the library subpath pulls in SQLite, which the other feeds never need.\n const { openLibraryManager } = await import(\"./open-library.ts\");\n const { getKindRegistry } = await import(\"./open-registry.ts\");\n const { scanAuthoringLibraries } = await import(\"@skaile/workspaces/library\");\n const { library: index, close } = await openLibraryManager();\n try {\n const entries: OriginEntry[] = [];\n for (const scan of await scanAuthoringLibraries(index, getKindRegistry())) {\n if (scan.error !== undefined) {\n notes.push({ feed: \"libraries\", message: `${scan.library.name}: ${scan.error}` });\n continue;\n }\n for (const asset of scan.assets) {\n entries.push({\n origin: \"library\",\n entry: libraryEntryOf(asset),\n group: scan.library.name,\n });\n }\n }\n return { entries, notes };\n } finally {\n close();\n }\n } catch (err) {\n notes.push({\n feed: \"libraries\",\n message: err instanceof Error ? err.message : String(err),\n });\n return { entries: [], notes };\n }\n}\n\n/**\n * Pull a (best-effort) snapshot of the connected remote store catalog.\n *\n * - Returns no entries when the resolved catalog is local-only or the host\n * is unreachable (the failure becomes a note, not an exception).\n * - Maps `CatalogAsset` → `CatalogEntry`, carrying `publisher`, `repo`, and\n * `category` straight through and using `source = \"store://<id>\"`; per-file\n * `source` paths are not available for remote assets so the canonical ref is\n * a stable placeholder.\n */\nasync function storeAssets(projectDir: string): Promise<{\n entries: CatalogEntry[];\n notes: FeedNote[];\n}> {\n const notes: FeedNote[] = [];\n try {\n const { resolveCatalogSource } = await import(\"./open-library.ts\");\n const { source, close } = await resolveCatalogSource({ projectDir });\n try {\n // The store lists only what `skaile add` can install (see store-addable.ts).\n const assets = (await source.listAssets()).filter(\n (a) => storeNotInstallableReason(a) === undefined,\n );\n const entries: CatalogEntry[] = assets.map((a) => ({\n name: a.name,\n kind: (a.kind as AssetKind) ?? \"skill\",\n description: a.description ?? \"\",\n source: `store://${a.id}`,\n publisher: a.publisher,\n repo: a.repo,\n plugin: a.plugin,\n category: a.category,\n version: a.version,\n requires: [],\n dependencies: [],\n }));\n return { entries, notes };\n } finally {\n close();\n }\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n // Local-only catalog throws a recognizable message — silence it; absence\n // is the user's choice, not an error.\n if (!/local/i.test(msg)) {\n notes.push({ feed: \"store\", message: msg });\n }\n return { entries: [], notes };\n }\n}\n\n/** The slice of `AssetManager` the source feed needs (kept narrow for tests). */\ninterface AssetManagerLike {\n search: () => Promise<CatalogEntry[]>;\n searchRepoRoots: () => { repoName: string; root: string }[];\n}\n\n/**\n * Project-source feed: leans on `AssetManager.search()`, which merges\n * `skaile.yaml`'s `sources:` field into the repositories map. Plugin grouping\n * (`entry.plugin`) is stamped by the scanner, so entries pass through as-is.\n */\nasync function sourceAssets(am: AssetManagerLike): Promise<OriginEntry[]> {\n // The bundled factory tree is injected into the repositories map as an implicit\n // source, so `am.search()` returns it too. It has its own `factory` origin band,\n // so drop it here — otherwise the same first-party skills list twice under Sources.\n const factoryPrefixes = factoryAssetRoots().map((r) => (r.endsWith(path.sep) ? r : r + path.sep));\n const isFactoryPath = (p: string) =>\n factoryPrefixes.some((fp) => p === fp.slice(0, -1) || p.startsWith(fp));\n\n const all = (await am.search()).filter((e) => !isFactoryPath(e.source));\n const entries: OriginEntry[] = [];\n // Group each source's entries under the source node (its short repo name), not\n // the publisher: under Sources the navigational question is \"which repo did\n // this come from\". Each entry's `source` (absolute manifest path) lives under\n // exactly one declared root, so group by prefix. The cache slug is\n // URL-keyed `github.com/<org>/<repo>` — take the trailing segment.\n for (const { repoName, root } of am.searchRepoRoots()) {\n if (isFactoryPath(root)) continue;\n const prefix = root.endsWith(path.sep) ? root : root + path.sep;\n const owned = all.filter((e) => e.source === root || e.source.startsWith(prefix));\n if (owned.length === 0) continue;\n const sourceName = repoName.split(\"/\").pop() || repoName;\n for (const entry of owned) entries.push({ origin: \"source\", entry, group: sourceName });\n }\n return entries;\n}\n\n/**\n * Factory-asset feed: scan the bundled first-party `factory-assets` tree(s)\n * resolved by `factoryAssetRoots()` (the `SKAILE_FACTORY_ASSETS_DIR` override\n * layer ahead of the bundled tree). Local disk only, no network — the entries are\n * the built-in skills / connectors / bundles that ship with `@skaile/workspaces`.\n * `factoryAssetRoots()` already dedupes, so the env override pointing at the\n * bundled dir collapses to one root.\n */\nasync function factoryAssets(): Promise<{\n entries: CatalogEntry[];\n notes: FeedNote[];\n}> {\n const notes: FeedNote[] = [];\n try {\n const entries: CatalogEntry[] = [];\n for (const root of factoryAssetRoots()) {\n entries.push(...(await scanRepo(root, \"skaile-factory\", { knownKinds: getKnownKinds() })));\n }\n return { entries, notes };\n } catch (err) {\n notes.push({\n feed: \"factory\",\n message: err instanceof Error ? err.message : String(err),\n });\n return { entries: [], notes };\n }\n}\n\n/** Tag a flat entry list with a single origin. */\nfunction tag(origin: AssetOrigin, entries: CatalogEntry[]): OriginEntry[] {\n return entries.map((entry) => ({ origin, entry }));\n}\n\n/**\n * Run all feeds and return a single normalized result.\n *\n * Feeds run in parallel where possible — the store fetch is the slow one\n * (one HTTP call) and is fired alongside the local library walk. The factory\n * scan is local disk only, so it runs inline.\n */\nexport async function gatherAssetFeeds(\n am: AssetManagerLike,\n projectDir: string,\n): Promise<AssetFeedResult> {\n const [libs, store] = await Promise.all([libraryAssets(), storeAssets(projectDir)]);\n const factory = await factoryAssets();\n const src = await sourceAssets(am);\n return {\n entries: [\n ...src,\n ...libs.entries,\n ...tag(\"factory\", factory.entries),\n ...tag(\"store\", store.entries),\n ],\n notes: [...libs.notes, ...store.notes, ...factory.notes],\n };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../cli/src/asset-feeds.ts"],"names":[],"mappings":"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","file":"asset-feeds-MKB5JUML.js","sourcesContent":["/**\n * asset-feeds.ts — gather installable assets from every feed the manage TUI\n * surfaces.\n *\n * Four feeds, normalized into `CatalogEntry`:\n * - **Project sources** — `skaile.yaml` `sources:` entries (scanned via\n * `AssetManager.search()`; the new `sources:` field is merged into the\n * legacy repositories map in `AssetManager.loadConfig`).\n * - **Local libraries** — user authoring places from `LocalIndex`, read through\n * `scanAuthoringLibraries` (`@skaile/workspaces/library`): the same scan\n * `library index` / `search --local` use, so publishers and refs match them\n * (per-asset `publisher_overrides` honoured), `dev_paths` assets are left out,\n * and a library that fails to scan becomes one note while the rest stay listed.\n * - **Factory assets** — the bundled first-party `factory-assets` tree\n * (`factoryAssetRoots()`), scanned from disk. Always present; no network.\n * - **Remote store** — the configured catalog source when `catalog.url` is\n * not `local`. Failures are non-fatal — they surface as notes.\n */\n\nimport * as path from \"node:path\";\nimport {\n type AssetKind,\n type CatalogEntry,\n factoryAssetRoots,\n parseRequires,\n scanRepo,\n} from \"@skaile/workspaces/core\";\nimport { getKnownKinds } from \"./open-registry.ts\";\nimport { storeNotInstallableReason } from \"./store-addable.ts\";\nimport type { DiscoveredAsset } from \"@skaile/workspaces/discovery\";\n\n/** One non-fatal note returned to the caller for surfacing in the UI. */\nexport interface FeedNote {\n feed: \"sources\" | \"libraries\" | \"store\" | \"factory\";\n message: string;\n}\n\n/**\n * Which feed an asset came from. This is the top-level grouping axis in the\n * manage TUI (\"where is this skill coming from?\") and is intentionally distinct\n * from `publisher` (asset-intrinsic identity): the same publisher can legitimately\n * appear under more than one origin (e.g. a github repo you added as a `source`\n * that is also listed in the remote `store`).\n */\nexport type AssetOrigin = \"source\" | \"library\" | \"factory\" | \"store\";\n\n/** A catalog entry tagged with the feed it was gathered from. */\nexport interface OriginEntry {\n origin: AssetOrigin;\n entry: CatalogEntry;\n /**\n * Second-level grouping label for the manage tree. Defaults (when unset) to the\n * entry's `publisher`; the source feed sets it to the source's short repo name\n * so the Sources band groups by source — \"which repo did this come from\" — not\n * by the asset-intrinsic publisher.\n */\n group?: string;\n}\n\nexport interface AssetFeedResult {\n entries: OriginEntry[];\n notes: FeedNote[];\n}\n\n/**\n * Map one discovered library asset to the `CatalogEntry` the manage rows read.\n * `publisher` is the bare per-asset publisher (what `search --local` prints),\n * `source` the manifest path. `repo` is left unset: it only feeds the Sources-tree\n * org grouping. `requires` / `dependencies` come from the manifest the way the\n * scanner fills them — string `requires:` refs parsed to `{kind, name}`, a bundle's\n * string `dependencies:` list verbatim.\n */\nfunction libraryEntryOf(asset: DiscoveredAsset): CatalogEntry {\n const { manifest } = asset;\n const nested = (manifest.metadata as Record<string, unknown> | undefined)?.requires;\n const rawRequires = manifest.requires ?? nested;\n const requireRefs =\n typeof rawRequires === \"string\"\n ? rawRequires\n : Array.isArray(rawRequires)\n ? rawRequires.filter((r): r is string => typeof r === \"string\")\n : undefined;\n const deps = manifest.dependencies;\n return {\n name: asset.name,\n kind: asset.kind as AssetKind,\n description: typeof manifest.description === \"string\" ? manifest.description : \"\",\n source: asset.manifestPath,\n publisher: asset.publisher,\n ...(asset.plugin ? { plugin: asset.plugin } : {}),\n version: asset.version,\n requires: requireRefs === undefined ? [] : parseRequires({ requires: requireRefs }),\n dependencies:\n asset.kind === \"bundle\" && Array.isArray(deps)\n ? deps.filter((d): d is string => typeof d === \"string\" && d.length > 0)\n : [],\n };\n}\n\n/**\n * Pull assets from local libraries (the authoring places under\n * `~/.skaile/libraries/<name>/`, not the `~/.skaile/cache/sources/` cache) through\n * `scanAuthoringLibraries`, grouped under the bare library name\n * (`group: <name>`) so the manage TUI shows a clean `<name>` band — no\n * `library:` prefix (mirrors the source feed). Plugin grouping (`entry.plugin`)\n * comes from `DiscoveredAsset.plugin`. A library whose scan fails becomes one\n * `FeedNote`; the outer `catch` covers only opening the index.\n */\nasync function libraryAssets(): Promise<{\n entries: OriginEntry[];\n notes: FeedNote[];\n}> {\n const notes: FeedNote[] = [];\n try {\n // Lazy: the library subpath pulls in SQLite, which the other feeds never need.\n const { openLibraryManager } = await import(\"./open-library.ts\");\n const { getKindRegistry } = await import(\"./open-registry.ts\");\n const { scanAuthoringLibraries } = await import(\"@skaile/workspaces/library\");\n const { library: index, close } = await openLibraryManager();\n try {\n const entries: OriginEntry[] = [];\n for (const scan of await scanAuthoringLibraries(index, getKindRegistry())) {\n if (scan.error !== undefined) {\n notes.push({ feed: \"libraries\", message: `${scan.library.name}: ${scan.error}` });\n continue;\n }\n for (const asset of scan.assets) {\n entries.push({\n origin: \"library\",\n entry: libraryEntryOf(asset),\n group: scan.library.name,\n });\n }\n }\n return { entries, notes };\n } finally {\n close();\n }\n } catch (err) {\n notes.push({\n feed: \"libraries\",\n message: err instanceof Error ? err.message : String(err),\n });\n return { entries: [], notes };\n }\n}\n\n/**\n * Pull a (best-effort) snapshot of the connected remote store catalog.\n *\n * - Returns no entries when the resolved catalog is local-only or the host\n * is unreachable (the failure becomes a note, not an exception).\n * - Maps `CatalogAsset` → `CatalogEntry`, carrying `publisher`, `repo`, and\n * `category` straight through and using `source = \"store://<id>\"`; per-file\n * `source` paths are not available for remote assets so the canonical ref is\n * a stable placeholder.\n */\nasync function storeAssets(projectDir: string): Promise<{\n entries: CatalogEntry[];\n notes: FeedNote[];\n}> {\n const notes: FeedNote[] = [];\n try {\n const { resolveCatalogSource } = await import(\"./open-library.ts\");\n const { source, close } = await resolveCatalogSource({ projectDir });\n try {\n // The store lists only what `skaile add` can install (see store-addable.ts).\n const assets = (await source.listAssets()).filter(\n (a) => storeNotInstallableReason(a) === undefined,\n );\n const entries: CatalogEntry[] = assets.map((a) => ({\n name: a.name,\n kind: (a.kind as AssetKind) ?? \"skill\",\n description: a.description ?? \"\",\n source: `store://${a.id}`,\n publisher: a.publisher,\n repo: a.repo,\n plugin: a.plugin,\n category: a.category,\n version: a.version,\n requires: [],\n dependencies: [],\n }));\n return { entries, notes };\n } finally {\n close();\n }\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n // Local-only catalog throws a recognizable message — silence it; absence\n // is the user's choice, not an error.\n if (!/local/i.test(msg)) {\n notes.push({ feed: \"store\", message: msg });\n }\n return { entries: [], notes };\n }\n}\n\n/** The slice of `AssetManager` the source feed needs (kept narrow for tests). */\ninterface AssetManagerLike {\n search: () => Promise<CatalogEntry[]>;\n searchRepoRoots: () => { repoName: string; root: string }[];\n}\n\n/**\n * Project-source feed: leans on `AssetManager.search()`, which merges\n * `skaile.yaml`'s `sources:` field into the repositories map. Plugin grouping\n * (`entry.plugin`) is stamped by the scanner, so entries pass through as-is.\n */\nasync function sourceAssets(am: AssetManagerLike): Promise<OriginEntry[]> {\n // The bundled factory tree is injected into the repositories map as an implicit\n // source, so `am.search()` returns it too. It has its own `factory` origin band,\n // so drop it here — otherwise the same first-party skills list twice under Sources.\n const factoryPrefixes = factoryAssetRoots().map((r) => (r.endsWith(path.sep) ? r : r + path.sep));\n const isFactoryPath = (p: string) =>\n factoryPrefixes.some((fp) => p === fp.slice(0, -1) || p.startsWith(fp));\n\n const all = (await am.search()).filter((e) => !isFactoryPath(e.source));\n const entries: OriginEntry[] = [];\n // Group each source's entries under the source node (its short repo name), not\n // the publisher: under Sources the navigational question is \"which repo did\n // this come from\". Each entry's `source` (absolute manifest path) lives under\n // exactly one declared root, so group by prefix. The cache slug is\n // URL-keyed `github.com/<org>/<repo>` — take the trailing segment.\n for (const { repoName, root } of am.searchRepoRoots()) {\n if (isFactoryPath(root)) continue;\n const prefix = root.endsWith(path.sep) ? root : root + path.sep;\n const owned = all.filter((e) => e.source === root || e.source.startsWith(prefix));\n if (owned.length === 0) continue;\n const sourceName = repoName.split(\"/\").pop() || repoName;\n for (const entry of owned) entries.push({ origin: \"source\", entry, group: sourceName });\n }\n return entries;\n}\n\n/**\n * Factory-asset feed: scan the bundled first-party `factory-assets` tree(s)\n * resolved by `factoryAssetRoots()` (the `SKAILE_FACTORY_ASSETS_DIR` override\n * layer ahead of the bundled tree). Local disk only, no network — the entries are\n * the built-in skills / connectors / bundles that ship with `@skaile/workspaces`.\n * `factoryAssetRoots()` already dedupes, so the env override pointing at the\n * bundled dir collapses to one root.\n */\nasync function factoryAssets(): Promise<{\n entries: CatalogEntry[];\n notes: FeedNote[];\n}> {\n const notes: FeedNote[] = [];\n try {\n const entries: CatalogEntry[] = [];\n for (const root of factoryAssetRoots()) {\n entries.push(...(await scanRepo(root, \"skaile-factory\", { knownKinds: getKnownKinds() })));\n }\n return { entries, notes };\n } catch (err) {\n notes.push({\n feed: \"factory\",\n message: err instanceof Error ? err.message : String(err),\n });\n return { entries: [], notes };\n }\n}\n\n/** Tag a flat entry list with a single origin. */\nfunction tag(origin: AssetOrigin, entries: CatalogEntry[]): OriginEntry[] {\n return entries.map((entry) => ({ origin, entry }));\n}\n\n/**\n * Run all feeds and return a single normalized result.\n *\n * Feeds run in parallel where possible — the store fetch is the slow one\n * (one HTTP call) and is fired alongside the local library walk. The factory\n * scan is local disk only, so it runs inline.\n */\nexport async function gatherAssetFeeds(\n am: AssetManagerLike,\n projectDir: string,\n): Promise<AssetFeedResult> {\n const [libs, store] = await Promise.all([libraryAssets(), storeAssets(projectDir)]);\n const factory = await factoryAssets();\n const src = await sourceAssets(am);\n return {\n entries: [\n ...src,\n ...libs.entries,\n ...tag(\"factory\", factory.entries),\n ...tag(\"store\", store.entries),\n ],\n notes: [...libs.notes, ...store.notes, ...factory.notes],\n };\n}\n"]}
|
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
export { WORKSPACE_MOUNT_ENV_VAR, deployAll, deployCatalogEntry, findAiAssetsRoot, isUnderWorkspaceMount, resolveFlowSkills, undeployCatalogEntry, workspaceMountDirs } from '../chunk-
|
|
2
|
-
import '../chunk-
|
|
1
|
+
export { WORKSPACE_MOUNT_ENV_VAR, deployAll, deployCatalogEntry, findAiAssetsRoot, isUnderWorkspaceMount, resolveFlowSkills, undeployCatalogEntry, workspaceMountDirs } from '../chunk-H6UVIKQ2.js';
|
|
2
|
+
import '../chunk-T2TQAH2X.js';
|
|
3
3
|
import '../chunk-4GY63JU6.js';
|
|
4
|
-
import '../chunk-
|
|
5
|
-
import '../chunk-
|
|
4
|
+
import '../chunk-KC6HGWXN.js';
|
|
5
|
+
import '../chunk-5TBFN46Z.js';
|
|
6
6
|
import '../chunk-5BEFNLOR.js';
|
|
7
7
|
import '../chunk-A2ULN3KX.js';
|
|
8
|
-
import '../chunk-
|
|
8
|
+
import '../chunk-2NOLF7B2.js';
|
|
9
9
|
import '../chunk-L5VSIPQD.js';
|
|
10
10
|
import '../chunk-IG5LZ3WU.js';
|
|
11
|
-
import '../chunk-
|
|
11
|
+
import '../chunk-CKICWXMU.js';
|
|
12
12
|
import '../chunk-RVRB27AN.js';
|
|
13
|
-
import '../chunk-
|
|
14
|
-
import '../chunk-
|
|
13
|
+
import '../chunk-GOCWM7FN.js';
|
|
14
|
+
import '../chunk-WDXZA7QW.js';
|
|
15
15
|
import '../chunk-ICSCSM5D.js';
|
|
16
16
|
import '../chunk-DKXNKFKP.js';
|
|
17
17
|
import '../chunk-MJHSLODD.js';
|
|
@@ -1,28 +1,32 @@
|
|
|
1
|
-
export { AssetManager, FACTORY_SOURCE_URL, MissingManifestError, installAgentInstances, normalizeRepoUrl, parseCanonicalLockKey, parseRefTolerant, renderMcpServerConfig, softDepName } from '../chunk-
|
|
2
|
-
import '../chunk-
|
|
3
|
-
import '../chunk-
|
|
4
|
-
import '../chunk-
|
|
1
|
+
export { AssetManager, FACTORY_SOURCE_URL, LibraryEntryError, MissingManifestError, installAgentInstances, normalizeRepoUrl, parseCanonicalLockKey, parseRefTolerant, renderMcpServerConfig, softDepName } from '../chunk-VM3PH7BB.js';
|
|
2
|
+
import '../chunk-VKPBUPH7.js';
|
|
3
|
+
import '../chunk-HPVMTX6M.js';
|
|
4
|
+
import '../chunk-U2FI547Z.js';
|
|
5
5
|
import '../chunk-BFMYYNDT.js';
|
|
6
6
|
import '../chunk-3TXEJN4W.js';
|
|
7
|
-
|
|
7
|
+
import '../chunk-ISHJITXJ.js';
|
|
8
|
+
import '../chunk-LNFKL23K.js';
|
|
9
|
+
import '../chunk-X3RMRJNR.js';
|
|
10
|
+
import '../chunk-NUELZWCF.js';
|
|
11
|
+
export { SCAFFOLD_KINDS, createScaffold, deployAll, installAgent, installTargetOf, removeAsset } from '../chunk-YZ3N7IUU.js';
|
|
8
12
|
export { BUILT_IN_FRAGMENTS, loadPromptExtensions, resolveFragments } from '../chunk-NOA6EJXE.js';
|
|
9
13
|
export { appendHistory, clearHistory, getRecentHistory, loadHistory } from '../chunk-KTBKW2FI.js';
|
|
10
14
|
import '../chunk-UQ6LFBPZ.js';
|
|
11
|
-
export { AGENT_RENDERERS, claudeCodeRenderer, codexRenderer, driverTargetSupportsAgents, ompRenderer, renderAgentToFramework } from '../chunk-
|
|
12
|
-
import '../chunk-
|
|
13
|
-
import '../chunk-
|
|
15
|
+
export { AGENT_RENDERERS, claudeCodeRenderer, codexRenderer, driverTargetSupportsAgents, ompRenderer, renderAgentToFramework } from '../chunk-SRNCN4X2.js';
|
|
16
|
+
import '../chunk-CKNIYIV2.js';
|
|
17
|
+
import '../chunk-T2TQAH2X.js';
|
|
14
18
|
import '../chunk-4GY63JU6.js';
|
|
15
|
-
import '../chunk-
|
|
16
|
-
import '../chunk-
|
|
19
|
+
import '../chunk-KC6HGWXN.js';
|
|
20
|
+
import '../chunk-5TBFN46Z.js';
|
|
17
21
|
import '../chunk-5BEFNLOR.js';
|
|
18
22
|
import '../chunk-A2ULN3KX.js';
|
|
19
|
-
import '../chunk-
|
|
23
|
+
import '../chunk-2NOLF7B2.js';
|
|
20
24
|
import '../chunk-L5VSIPQD.js';
|
|
21
25
|
import '../chunk-IG5LZ3WU.js';
|
|
22
|
-
import '../chunk-
|
|
26
|
+
import '../chunk-CKICWXMU.js';
|
|
23
27
|
import '../chunk-RVRB27AN.js';
|
|
24
|
-
import '../chunk-
|
|
25
|
-
import '../chunk-
|
|
28
|
+
import '../chunk-GOCWM7FN.js';
|
|
29
|
+
import '../chunk-WDXZA7QW.js';
|
|
26
30
|
import '../chunk-ICSCSM5D.js';
|
|
27
31
|
import '../chunk-DKXNKFKP.js';
|
|
28
32
|
import '../chunk-MJHSLODD.js';
|
|
@@ -1,20 +1,20 @@
|
|
|
1
|
-
export { SCAFFOLD_KINDS, canonicalEntryRef, createScaffold, deployAll, deployAsset, deployedAssetDrift, diffDeployedAgent, installTargetOf, readKeptLegacyCopies, removeAsset, writeKeptLegacyCopies } from '../chunk-
|
|
1
|
+
export { SCAFFOLD_KINDS, assertNoLibrarySymlinks, canonicalEntryRef, createScaffold, deployAll, deployAsset, deployedAssetDrift, diffDeployedAgent, installTargetOf, readKeptLegacyCopies, removeAsset, writeKeptLegacyCopies } from '../chunk-YZ3N7IUU.js';
|
|
2
2
|
import '../chunk-NOA6EJXE.js';
|
|
3
|
-
import '../chunk-
|
|
4
|
-
import '../chunk-
|
|
5
|
-
import '../chunk-
|
|
3
|
+
import '../chunk-SRNCN4X2.js';
|
|
4
|
+
import '../chunk-CKNIYIV2.js';
|
|
5
|
+
import '../chunk-T2TQAH2X.js';
|
|
6
6
|
import '../chunk-4GY63JU6.js';
|
|
7
|
-
import '../chunk-
|
|
8
|
-
import '../chunk-
|
|
7
|
+
import '../chunk-KC6HGWXN.js';
|
|
8
|
+
import '../chunk-5TBFN46Z.js';
|
|
9
9
|
import '../chunk-5BEFNLOR.js';
|
|
10
10
|
import '../chunk-A2ULN3KX.js';
|
|
11
|
-
import '../chunk-
|
|
11
|
+
import '../chunk-2NOLF7B2.js';
|
|
12
12
|
import '../chunk-L5VSIPQD.js';
|
|
13
13
|
import '../chunk-IG5LZ3WU.js';
|
|
14
|
-
import '../chunk-
|
|
14
|
+
import '../chunk-CKICWXMU.js';
|
|
15
15
|
import '../chunk-RVRB27AN.js';
|
|
16
|
-
import '../chunk-
|
|
17
|
-
import '../chunk-
|
|
16
|
+
import '../chunk-GOCWM7FN.js';
|
|
17
|
+
import '../chunk-WDXZA7QW.js';
|
|
18
18
|
import '../chunk-ICSCSM5D.js';
|
|
19
19
|
import '../chunk-DKXNKFKP.js';
|
|
20
20
|
import '../chunk-MJHSLODD.js';
|
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
export { AGENT_RENDERERS, CODEX_IDENTITY_DIR, claudeCodeRenderer, codexRenderer, driverTargetSupportsAgents, ompRenderer, renderAgentToFramework } from '../chunk-
|
|
2
|
-
import '../chunk-
|
|
3
|
-
import '../chunk-
|
|
1
|
+
export { AGENT_RENDERERS, CODEX_IDENTITY_DIR, claudeCodeRenderer, codexRenderer, driverTargetSupportsAgents, ompRenderer, renderAgentToFramework } from '../chunk-SRNCN4X2.js';
|
|
2
|
+
import '../chunk-CKNIYIV2.js';
|
|
3
|
+
import '../chunk-T2TQAH2X.js';
|
|
4
4
|
import '../chunk-4GY63JU6.js';
|
|
5
|
-
import '../chunk-
|
|
6
|
-
import '../chunk-
|
|
5
|
+
import '../chunk-KC6HGWXN.js';
|
|
6
|
+
import '../chunk-5TBFN46Z.js';
|
|
7
7
|
import '../chunk-5BEFNLOR.js';
|
|
8
8
|
import '../chunk-A2ULN3KX.js';
|
|
9
|
-
import '../chunk-
|
|
9
|
+
import '../chunk-2NOLF7B2.js';
|
|
10
10
|
import '../chunk-L5VSIPQD.js';
|
|
11
11
|
import '../chunk-IG5LZ3WU.js';
|
|
12
|
-
import '../chunk-
|
|
12
|
+
import '../chunk-CKICWXMU.js';
|
|
13
13
|
import '../chunk-RVRB27AN.js';
|
|
14
|
-
import '../chunk-
|
|
15
|
-
import '../chunk-
|
|
14
|
+
import '../chunk-GOCWM7FN.js';
|
|
15
|
+
import '../chunk-WDXZA7QW.js';
|
|
16
16
|
import '../chunk-ICSCSM5D.js';
|
|
17
17
|
import '../chunk-DKXNKFKP.js';
|
|
18
18
|
import '../chunk-MJHSLODD.js';
|
|
@@ -79,6 +79,14 @@ export declare function softDepName(ref: string): string;
|
|
|
79
79
|
* @internal Exported for unit tests; not part of the stable public surface.
|
|
80
80
|
*/
|
|
81
81
|
export declare function parseRefTolerant(ref: string): AssetRef | null;
|
|
82
|
+
/**
|
|
83
|
+
* A library asset that `add`, `install` and the status commands cannot use as it is (a version
|
|
84
|
+
* that is not semver, a flow file the engine does not load). The CLI prints its message as one
|
|
85
|
+
* `✗` line, never a stack trace (p874, p1082).
|
|
86
|
+
*/
|
|
87
|
+
export declare class LibraryEntryError extends Error {
|
|
88
|
+
constructor(message: string);
|
|
89
|
+
}
|
|
82
90
|
/** A locked asset that now resolves from another library than its lock entry named. */
|
|
83
91
|
export interface LibraryMove {
|
|
84
92
|
/** `kind:@publisher/name` (no version). */
|
|
@@ -93,7 +101,7 @@ export interface LibraryMove {
|
|
|
93
101
|
* `invalid` flags a `dependencies:` entry that isn't a parseable canonical ref —
|
|
94
102
|
* surfaced (not silently dropped) so a `skaile.yaml` typo is visible.
|
|
95
103
|
*/
|
|
96
|
-
export type DeclaredState = "declared" | "installed" | "drift" | "invalid";
|
|
104
|
+
export type DeclaredState = "declared" | "installed" | "drift" | "invalid" | "skipped";
|
|
97
105
|
/**
|
|
98
106
|
* A top-level dependency declared in `skaile.yaml`, annotated with its
|
|
99
107
|
* reconciliation {@link DeclaredState}. Transitive (lock-only) deps are never
|
|
@@ -105,6 +113,18 @@ export interface DeclaredAsset {
|
|
|
105
113
|
kind: string;
|
|
106
114
|
name: string;
|
|
107
115
|
state: DeclaredState;
|
|
116
|
+
/** Set with `skipped`: why skaile does not write the `mcp-server` to the coding agent's MCP config. */
|
|
117
|
+
reason?: string;
|
|
118
|
+
}
|
|
119
|
+
/** A note about an `mcp-server` that fails nothing. See {@link AssetManager.mcpNotices}. */
|
|
120
|
+
export interface McpNotice {
|
|
121
|
+
/** The declaration id (`sql`, `@admin/sql`). */
|
|
122
|
+
id: string;
|
|
123
|
+
kind: "skipped" | "unset-field";
|
|
124
|
+
/** With `skipped`: why the server is not written to the MCP config. */
|
|
125
|
+
reason?: string;
|
|
126
|
+
/** The `!` line `check` and `doctor` print. */
|
|
127
|
+
text: string;
|
|
108
128
|
}
|
|
109
129
|
/** A deployed library asset that lacks files of its library entry. See {@link AssetManager.incompleteDeploys}. */
|
|
110
130
|
export interface IncompleteDeploy {
|
|
@@ -257,6 +277,11 @@ export interface InstallResult {
|
|
|
257
277
|
* fail `validate` and the publish plan, so `install` names them (p926). Absent when none is.
|
|
258
278
|
*/
|
|
259
279
|
placeholderBodies?: string[];
|
|
280
|
+
/**
|
|
281
|
+
* Deployed library assets whose `description:` is still the `library create` placeholder
|
|
282
|
+
* (`TODO: …`): `validate` and the publish plan fail it as well. Absent when none is.
|
|
283
|
+
*/
|
|
284
|
+
placeholderDescriptions?: string[];
|
|
260
285
|
/** Asset refs (`kind:name`) removed because they are no longer in the resolved set. */
|
|
261
286
|
removed: string[];
|
|
262
287
|
/**
|
|
@@ -352,6 +377,11 @@ export interface InstallResult {
|
|
|
352
377
|
* one message each. Their earlier rendering is kept. `skaile install` fails on a non-empty list.
|
|
353
378
|
*/
|
|
354
379
|
agentInstanceErrors?: string[];
|
|
380
|
+
/**
|
|
381
|
+
* The resolver's own text (with the directories it searched) for each entry of
|
|
382
|
+
* {@link agentInstanceErrors} whose message was shortened to one line of advice; for `--verbose`.
|
|
383
|
+
*/
|
|
384
|
+
agentInstanceDetails?: string[];
|
|
355
385
|
}
|
|
356
386
|
/**
|
|
357
387
|
* An installed asset whose source repository is behind the remote.
|
|
@@ -632,7 +662,13 @@ export interface AssetManagerOptions {
|
|
|
632
662
|
* with a `skaile:` prefix. A CLI with a live spinner passes a collector and
|
|
633
663
|
* prints the lines after the spinner stops, so frames can't overwrite them.
|
|
634
664
|
*/
|
|
635
|
-
onLibraryCollision?: (message: string) => void;
|
|
665
|
+
onLibraryCollision?: (message: string, keys?: readonly string[]) => void;
|
|
666
|
+
/**
|
|
667
|
+
* An `add` that meets several colliding assets prints one summary line by default; `true`
|
|
668
|
+
* prints each asset's full message (`skaile add --verbose`). A single collision always
|
|
669
|
+
* prints in full.
|
|
670
|
+
*/
|
|
671
|
+
verboseCollisions?: boolean;
|
|
636
672
|
}
|
|
637
673
|
/** Canonical git URL identity for the bundled factory source. Never fetched —
|
|
638
674
|
* the bytes live inside the package (`factory-assets/`); the URL is only the
|
|
@@ -689,6 +725,8 @@ export declare class AssetManager {
|
|
|
689
725
|
private readonly indexPathOverride?;
|
|
690
726
|
/** Sink for cross-library collision warnings; else `console.warn`. */
|
|
691
727
|
private readonly onLibraryCollision?;
|
|
728
|
+
/** Print every colliding asset's full message instead of one summary ({@link AssetManagerOptions.verboseCollisions}). */
|
|
729
|
+
private readonly verboseCollisions;
|
|
692
730
|
/** Store URLs whose failed version lookup was already reported (one warning per URL). */
|
|
693
731
|
private readonly warnedStoreVersionLookups;
|
|
694
732
|
/** Stores a lookup could not reach (store URL -> one line why); `add` reports them instead of "not found". */
|
|
@@ -780,6 +818,19 @@ export declare class AssetManager {
|
|
|
780
818
|
/** Deploy options for one harness. In global mode, `driverTarget` is the
|
|
781
819
|
* fan-out target (not the constructor's `driverTarget`, which is project-only). */
|
|
782
820
|
private deployOptsFor;
|
|
821
|
+
/**
|
|
822
|
+
* Names of the `mcp-server` assets the lock holds (the declaration ids, unscoped); a missing
|
|
823
|
+
* `.mcp.json` entry of one counts as drift even before skaile owned it.
|
|
824
|
+
*/
|
|
825
|
+
private lockedMcpNames;
|
|
826
|
+
/**
|
|
827
|
+
* The payloads and managed `.mcp.json` entries of the project's **locked** `mcp-server`
|
|
828
|
+
* assets that differ from what the declarations render (see {@link mcpServerDrift}), one row
|
|
829
|
+
* per server, named by the lock identity `mcp-server:@publisher/name`; `key` is the lock key.
|
|
830
|
+
* An `mcp_servers:` entry of `skaile.yaml` is configuration, not a locked asset: it has no
|
|
831
|
+
* row. Empty for a global manager and for a project that locks no `mcp-server`.
|
|
832
|
+
*/
|
|
833
|
+
private mcpDriftRows;
|
|
783
834
|
/**
|
|
784
835
|
* Render the project's declared MCP servers into the driver target's own
|
|
785
836
|
* native MCP config (`<project>/.mcp.json` for `claude-code`), so the coding
|
|
@@ -789,6 +840,10 @@ export declare class AssetManager {
|
|
|
789
840
|
* write, and the coding agent's user scope is a large user-state file this
|
|
790
841
|
* must not touch. Never fails an install — a render error is warned and
|
|
791
842
|
* swallowed.
|
|
843
|
+
*
|
|
844
|
+
* @returns The payload files and config entries the render wrote back (and the files it
|
|
845
|
+
* removed) because they had drifted from the declaration: `install` names them, as it does
|
|
846
|
+
* a restored skill file.
|
|
792
847
|
*/
|
|
793
848
|
private renderDriverMcpConfig;
|
|
794
849
|
/**
|
|
@@ -938,6 +993,11 @@ export declare class AssetManager {
|
|
|
938
993
|
* @returns a phrase per ref that follows the ref name, without parentheses.
|
|
939
994
|
*/
|
|
940
995
|
private unresolvedFixes;
|
|
996
|
+
/**
|
|
997
|
+
* A ref pinned to a version its library never held (`#9.9.9`): the thing to change is the pin
|
|
998
|
+
* in `skaile.yaml`, not the library (p1096). Sets the fix and returns `true` when it applies.
|
|
999
|
+
*/
|
|
1000
|
+
private pinNeverHeld;
|
|
941
1001
|
/**
|
|
942
1002
|
* The ref a library now holds a flow under when a project still locks it by the slug of the
|
|
943
1003
|
* flow's `name:` (5.12.0 named a flow by `name:`; later releases name it by `id:`), or
|
|
@@ -946,11 +1006,25 @@ export declare class AssetManager {
|
|
|
946
1006
|
private renamedFlowRef;
|
|
947
1007
|
/** Collision messages already printed by this instance (one warning per ref + library set). */
|
|
948
1008
|
private readonly warnedLibraryCollisions;
|
|
1009
|
+
/**
|
|
1010
|
+
* Collisions of one `add`, held back until {@link flushLibraryCollisions} so a dependency
|
|
1011
|
+
* tree that touches several colliding assets prints one summary, not one line per asset
|
|
1012
|
+
* (p1097). `null` outside an `add`: a collision then warns at once.
|
|
1013
|
+
*/
|
|
1014
|
+
private collisionBatch;
|
|
949
1015
|
/**
|
|
950
1016
|
* Warn once when `key` is held by more than one library: names every library
|
|
951
1017
|
* with its version and the one chosen, so a silent pick can't surprise.
|
|
952
1018
|
*/
|
|
953
1019
|
private warnLibraryCollision;
|
|
1020
|
+
/** Print each distinct collision message once; the sink also gets the keys it names. */
|
|
1021
|
+
private emitLibraryCollision;
|
|
1022
|
+
/**
|
|
1023
|
+
* End the batch of {@link collisionBatch}: one collision prints its full message; several
|
|
1024
|
+
* print one summary (how many libraries and assets, the library each asset came from, the
|
|
1025
|
+
* assets whose bytes differ). `verboseCollisions` prints every asset's full message instead.
|
|
1026
|
+
*/
|
|
1027
|
+
private flushLibraryCollisions;
|
|
954
1028
|
/** Kind, name and bare publisher of a deploy entry; the publisher comes from its canonical ref. */
|
|
955
1029
|
private entryIdentity;
|
|
956
1030
|
/**
|
|
@@ -1052,6 +1126,16 @@ export declare class AssetManager {
|
|
|
1052
1126
|
* `ref`. A kind with no install target has no deployed copy.
|
|
1053
1127
|
*/
|
|
1054
1128
|
private keptCopyDeployed;
|
|
1129
|
+
/** Whether the deployed copy of a library asset is on disk; a kind with no install target has none to check. */
|
|
1130
|
+
private lockedCopyDeployed;
|
|
1131
|
+
/**
|
|
1132
|
+
* The library-origin lock entries `install` keeps when the library holds a newer version:
|
|
1133
|
+
* only `update` moves a locked asset, so `install` restores the locked one (p1095).
|
|
1134
|
+
* Keyed by `<publisher>/<kind>:<name>`. `requires` is what the locked version needs: the
|
|
1135
|
+
* lock's own list, or for a lock that predates the field the deployed copy's requirements,
|
|
1136
|
+
* never the newer library entry's.
|
|
1137
|
+
*/
|
|
1138
|
+
private keepLockedLibraryEntries;
|
|
1055
1139
|
/**
|
|
1056
1140
|
* How the library `origin` names stands on this machine. THE one lookup of a locked library
|
|
1057
1141
|
* ("is it registered here?"): `check`, `outdated`, `install` and `install --locked` all ask it.
|
|
@@ -1068,6 +1152,8 @@ export declare class AssetManager {
|
|
|
1068
1152
|
* machine-local; the remote is what a clone shares.
|
|
1069
1153
|
*/
|
|
1070
1154
|
private lockedLibrary;
|
|
1155
|
+
/** The registered library whose files for `asset` hash to `sha256` (the locked bytes), if any. */
|
|
1156
|
+
private libraryHoldingLockedBytes;
|
|
1071
1157
|
/** On-disk root of the library `origin` names; `null` unless {@link lockedLibrary} says `ok`. */
|
|
1072
1158
|
private libraryPath;
|
|
1073
1159
|
/**
|
|
@@ -1343,6 +1429,8 @@ export declare class AssetManager {
|
|
|
1343
1429
|
onLibraryOrigin?: (deployedRef: string, library: string) => void;
|
|
1344
1430
|
/** Called per deployed library asset whose body is still the untouched `library create` scaffold. */
|
|
1345
1431
|
onPlaceholderBody?: (deployedRef: string) => void;
|
|
1432
|
+
/** Called per deployed library asset whose `description:` is still the `library create` placeholder. */
|
|
1433
|
+
onPlaceholderDescription?: (deployedRef: string) => void;
|
|
1346
1434
|
/** Called per already-locked asset this add moved to another library than its lock entry named. */
|
|
1347
1435
|
onLibraryMoved?: (move: LibraryMove) => void;
|
|
1348
1436
|
/** `update <name>`: an equal-version tie between libraries goes to the default library, then the locked one (see {@link install}'s `moveLibraries`). */
|
|
@@ -1350,10 +1438,8 @@ export declare class AssetManager {
|
|
|
1350
1438
|
onPresets?: (presets: PresetExpansion[]) => void;
|
|
1351
1439
|
/** Deploy over a folder no lock entry owns (a hand-made skill of the same name) instead of refusing. */
|
|
1352
1440
|
force?: boolean;
|
|
1353
|
-
/** Called per symlink an asset's copy deploy leaves out (`ref`, path under the asset dir). */
|
|
1354
|
-
onSkippedSymlink?: (ref: string, path: string) => void;
|
|
1355
1441
|
/** Called per `.env` file in an asset's directory that a copy deploy leaves out. */
|
|
1356
|
-
|
|
1442
|
+
onSecretFile?: (ref: string, path: string) => void;
|
|
1357
1443
|
}): Promise<string[]>;
|
|
1358
1444
|
/**
|
|
1359
1445
|
* Report the body-link **soft dependencies** of the given assets that are not
|
|
@@ -1650,6 +1736,15 @@ export declare class AssetManager {
|
|
|
1650
1736
|
* @throws {Error} with a `migrate-skaile-manifest` hint on legacy `repositories:` / `ai_resources:` keys.
|
|
1651
1737
|
*/
|
|
1652
1738
|
listDeclared(kind?: string): Promise<DeclaredAsset[]>;
|
|
1739
|
+
/**
|
|
1740
|
+
* Notes about the project's `mcp-server`s that are not drift and fail nothing: a declared
|
|
1741
|
+
* server skaile does not write to the coding agent's MCP config (`reason` from the last
|
|
1742
|
+
* render), and a required `MCP.md` field nothing sets. `check` and `doctor` print them as
|
|
1743
|
+
* `!` lines; `list` shows the first kind as `skipped`.
|
|
1744
|
+
*
|
|
1745
|
+
* @returns One {@link McpNotice} per note; empty for a global manager.
|
|
1746
|
+
*/
|
|
1747
|
+
mcpNotices(): Promise<McpNotice[]>;
|
|
1653
1748
|
/**
|
|
1654
1749
|
* Locked assets whose deployed directory lacks files the deploy writes — a deleted
|
|
1655
1750
|
* `build.py` / `scripts/` helper next to an intact `SKILL.md`. The expected set is the file
|
|
@@ -1963,6 +2058,22 @@ export declare class AssetManager {
|
|
|
1963
2058
|
* @param named - `kind:name` identities already reported; they are skipped.
|
|
1964
2059
|
*/
|
|
1965
2060
|
private libraryOriginGaps;
|
|
2061
|
+
/**
|
|
2062
|
+
* Locked source assets whose source cannot supply them any more: the source is no longer in
|
|
2063
|
+
* `skaile.yaml` `sources:` (`source remove`, a hand edit), or it is there but now publishes
|
|
2064
|
+
* the asset under another publisher (`source add <url> --publisher`). `skaile install` has
|
|
2065
|
+
* nothing to restore them from, so the fix is manual. A source of a store-resolved lock entry
|
|
2066
|
+
* is not told apart from one, so no source is called missing while a `stores:` entry exists.
|
|
2067
|
+
*
|
|
2068
|
+
* @param named - `kind:name` identities already reported; they are skipped.
|
|
2069
|
+
* @param index - What the registered sources publish today.
|
|
2070
|
+
*/
|
|
2071
|
+
private sourceOriginGaps;
|
|
2072
|
+
/**
|
|
2073
|
+
* The locked assets that come from the source `url` (a `sources:` entry): canonical refs,
|
|
2074
|
+
* `kind:@publisher/name`. `skaile source remove` refuses while this list is not empty.
|
|
2075
|
+
*/
|
|
2076
|
+
lockedFromSource(url: string): string[];
|
|
1966
2077
|
/**
|
|
1967
2078
|
* Record, on every agent entry of `lock` that has none, the files the agent's harness
|
|
1968
2079
|
* rendering occupies and their sha256. Call it after the deploy, so the bytes hashed are the
|
|
@@ -2159,6 +2270,12 @@ export declare class AssetManager {
|
|
|
2159
2270
|
* @returns `true` when a declaration was removed.
|
|
2160
2271
|
*/
|
|
2161
2272
|
private removeDependencyFromConfig;
|
|
2273
|
+
/**
|
|
2274
|
+
* The locked agents an agent instance binds (`agents.<id>.ref`, `agent.definition`) that
|
|
2275
|
+
* `declared` does not name, as version-less `agent:@publisher/name`. An agent no lock entry
|
|
2276
|
+
* holds is left out: `install` does not add what the user never added (`skaile add` does).
|
|
2277
|
+
*/
|
|
2278
|
+
private lockedAgentBindings;
|
|
2162
2279
|
/** The refs `skaile.yaml` binds agent instances to: every `agents.<id>.ref` and `agent.definition`. Project mode only. */
|
|
2163
2280
|
private declaredAgentInstanceRefs;
|
|
2164
2281
|
/**
|