@skaile/workspaces 5.18.0 → 5.19.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 +88 -0
- package/dist/{asset-feeds-WAKBHGEV.js → asset-feeds-QGLI3AXI.js} +16 -16
- package/dist/{asset-feeds-WAKBHGEV.js.map → asset-feeds-QGLI3AXI.js.map} +1 -1
- package/dist/asset-manager/catalog-deployer.js +5 -5
- package/dist/asset-manager/index.js +12 -12
- package/dist/asset-manager/installer.js +8 -8
- package/dist/asset-manager/renderers.js +7 -7
- package/dist/asset-manager/src/index.d.ts +91 -2
- package/dist/asset-manager/src/index.d.ts.map +1 -1
- package/dist/asset-manager/src/installer.d.ts.map +1 -1
- package/dist/asset-manager/src/mcp-config.d.ts +29 -3
- package/dist/asset-manager/src/mcp-config.d.ts.map +1 -1
- package/dist/bridge/drivers/claude-sdk.js +22 -20
- package/dist/bridge/drivers/claude-sdk.js.map +1 -1
- package/dist/bridge/drivers/codex.js +11 -11
- package/dist/bridge/drivers/continue.js +10 -10
- package/dist/bridge/drivers/echo.js +27 -8
- package/dist/bridge/drivers/echo.js.map +1 -1
- package/dist/bridge/drivers/gemini.js +8 -8
- package/dist/bridge/drivers/goose.js +10 -10
- package/dist/bridge/drivers/omp.js +18 -460
- package/dist/bridge/drivers/omp.js.map +1 -1
- package/dist/bridge/drivers/opencode.js +10 -10
- package/dist/bridge/drivers/qwen.js +8 -8
- package/dist/bridge/index.js +15 -13
- package/dist/bridge/src/driver-model-check.d.ts +8 -4
- package/dist/bridge/src/driver-model-check.d.ts.map +1 -1
- package/dist/bridge/src/drivers/_subprocess-cli.d.ts.map +1 -1
- package/dist/bridge/src/drivers/claude-sdk.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 +11 -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/{chunk-E5YNGE3I.js → chunk-25ZVWL2R.js} +4 -4
- package/dist/{chunk-E5YNGE3I.js.map → chunk-25ZVWL2R.js.map} +1 -1
- package/dist/{chunk-GRKU3S5V.js → chunk-2GXSSZAM.js} +3 -3
- package/dist/{chunk-GRKU3S5V.js.map → chunk-2GXSSZAM.js.map} +1 -1
- package/dist/{chunk-RO2BPKXK.js → chunk-2LSDMJI2.js} +3 -3
- package/dist/{chunk-RO2BPKXK.js.map → chunk-2LSDMJI2.js.map} +1 -1
- package/dist/{chunk-CKBCX3HQ.js → chunk-2PBSAH3Z.js} +4 -4
- package/dist/{chunk-CKBCX3HQ.js.map → chunk-2PBSAH3Z.js.map} +1 -1
- package/dist/{chunk-CKNIYIV2.js → chunk-335ENCCS.js} +5 -5
- package/dist/chunk-335ENCCS.js.map +1 -0
- package/dist/{chunk-V4RV2NJF.js → chunk-7NT4F6SR.js} +151 -27
- package/dist/chunk-7NT4F6SR.js.map +1 -0
- package/dist/{chunk-L6IFN6ER.js → chunk-7SCS64BG.js} +13 -7
- package/dist/chunk-7SCS64BG.js.map +1 -0
- package/dist/{chunk-U2FI547Z.js → chunk-7XSAW5OC.js} +3 -3
- package/dist/{chunk-U2FI547Z.js.map → chunk-7XSAW5OC.js.map} +1 -1
- package/dist/{chunk-ZNN7ONJX.js → chunk-A6SMCEEE.js} +2 -2
- package/dist/{chunk-ZNN7ONJX.js.map → chunk-A6SMCEEE.js.map} +1 -1
- package/dist/{chunk-SRNCN4X2.js → chunk-C7WBGSBV.js} +4 -4
- package/dist/{chunk-SRNCN4X2.js.map → chunk-C7WBGSBV.js.map} +1 -1
- package/dist/chunk-COJIL7G4.js +505 -0
- package/dist/chunk-COJIL7G4.js.map +1 -0
- package/dist/{chunk-X54YR4AW.js → chunk-CQJH4G2K.js} +2 -2
- package/dist/{chunk-X54YR4AW.js.map → chunk-CQJH4G2K.js.map} +1 -1
- package/dist/{chunk-WJLYL6RY.js → chunk-F6AA42GW.js} +5 -5
- package/dist/{chunk-WJLYL6RY.js.map → chunk-F6AA42GW.js.map} +1 -1
- package/dist/{chunk-EZVZDCHZ.js → chunk-FPHNJE4M.js} +102 -32
- package/dist/chunk-FPHNJE4M.js.map +1 -0
- package/dist/{chunk-EELKR2WP.js → chunk-HT35SQZD.js} +15 -14
- package/dist/chunk-HT35SQZD.js.map +1 -0
- package/dist/chunk-HU5HVKY7.js +285 -0
- package/dist/chunk-HU5HVKY7.js.map +1 -0
- package/dist/{chunk-HPVMTX6M.js → chunk-I37INEWE.js} +47 -12
- package/dist/chunk-I37INEWE.js.map +1 -0
- package/dist/{chunk-WJCQFNF6.js → chunk-I7TWVK6N.js} +3 -3
- package/dist/{chunk-WJCQFNF6.js.map → chunk-I7TWVK6N.js.map} +1 -1
- package/dist/{chunk-D6UBEYQH.js → chunk-IF6IA3PZ.js} +6 -6
- package/dist/chunk-IF6IA3PZ.js.map +1 -0
- package/dist/{chunk-DJD36HC5.js → chunk-IP2IPMEH.js} +7 -7
- package/dist/{chunk-DJD36HC5.js.map → chunk-IP2IPMEH.js.map} +1 -1
- package/dist/{chunk-ODDATIII.js → chunk-J24CY3PF.js} +8 -8
- package/dist/chunk-J24CY3PF.js.map +1 -0
- package/dist/{chunk-YZ3N7IUU.js → chunk-JTOWA6RS.js} +60 -19
- package/dist/{chunk-YZ3N7IUU.js.map → chunk-JTOWA6RS.js.map} +1 -1
- package/dist/{chunk-L5XUEC2W.js → chunk-MKRWN7XP.js} +4 -4
- package/dist/{chunk-L5XUEC2W.js.map → chunk-MKRWN7XP.js.map} +1 -1
- package/dist/{chunk-TDQ2ERCM.js → chunk-MRHVPQNO.js} +519 -86
- package/dist/chunk-MRHVPQNO.js.map +1 -0
- package/dist/{chunk-A2ULN3KX.js → chunk-MWXYN6NY.js} +2 -2
- package/dist/{chunk-A2ULN3KX.js.map → chunk-MWXYN6NY.js.map} +1 -1
- package/dist/{chunk-T2TQAH2X.js → chunk-N46LQR46.js} +74 -18
- package/dist/chunk-N46LQR46.js.map +1 -0
- package/dist/{chunk-CD7SVH6W.js → chunk-PYJS5K7V.js} +3 -3
- package/dist/{chunk-CD7SVH6W.js.map → chunk-PYJS5K7V.js.map} +1 -1
- package/dist/{chunk-K5LVU2MN.js → chunk-QG6GHTRM.js} +4 -4
- package/dist/{chunk-K5LVU2MN.js.map → chunk-QG6GHTRM.js.map} +1 -1
- package/dist/{chunk-RD6N2D7I.js → chunk-R4I3VBSS.js} +2 -2
- package/dist/{chunk-RD6N2D7I.js.map → chunk-R4I3VBSS.js.map} +1 -1
- package/dist/{chunk-JY7GVNYU.js → chunk-RO6VOM6Z.js} +15 -15
- package/dist/{chunk-JY7GVNYU.js.map → chunk-RO6VOM6Z.js.map} +1 -1
- package/dist/{chunk-B4X2N7JQ.js → chunk-RPZVHXQ3.js} +12 -12
- package/dist/chunk-RPZVHXQ3.js.map +1 -0
- package/dist/{chunk-KC6HGWXN.js → chunk-TIIXG3PN.js} +3 -3
- package/dist/{chunk-KC6HGWXN.js.map → chunk-TIIXG3PN.js.map} +1 -1
- package/dist/{chunk-CKICWXMU.js → chunk-UQ33Y4DM.js} +139 -10
- package/dist/chunk-UQ33Y4DM.js.map +1 -0
- package/dist/{chunk-2NOLF7B2.js → chunk-V257LUBM.js} +16 -7
- package/dist/chunk-V257LUBM.js.map +1 -0
- package/dist/{chunk-N5P2WBUL.js → chunk-VIM3PWZM.js} +3 -3
- package/dist/{chunk-N5P2WBUL.js.map → chunk-VIM3PWZM.js.map} +1 -1
- package/dist/{chunk-3KMREAR2.js → chunk-VJ7NU7GD.js} +22 -22
- package/dist/{chunk-3KMREAR2.js.map → chunk-VJ7NU7GD.js.map} +1 -1
- package/dist/{chunk-6HK6RUFM.js → chunk-VSZWNUZC.js} +3 -3
- package/dist/{chunk-6HK6RUFM.js.map → chunk-VSZWNUZC.js.map} +1 -1
- package/dist/{chunk-MQIRRN76.js → chunk-W4Q6CKJ5.js} +6 -6
- package/dist/chunk-W4Q6CKJ5.js.map +1 -0
- package/dist/{chunk-FHIMIXT3.js → chunk-WG6V4ISA.js} +34 -15
- package/dist/chunk-WG6V4ISA.js.map +1 -0
- package/dist/{chunk-DA2MCPFN.js → chunk-WOIRYY5L.js} +110 -37
- package/dist/chunk-WOIRYY5L.js.map +1 -0
- package/dist/{chunk-JJ7LDI3S.js → chunk-WST6UITC.js} +6 -6
- package/dist/{chunk-JJ7LDI3S.js.map → chunk-WST6UITC.js.map} +1 -1
- package/dist/{chunk-FV2MSBVA.js → chunk-X4ZZTHU3.js} +4 -4
- package/dist/{chunk-FV2MSBVA.js.map → chunk-X4ZZTHU3.js.map} +1 -1
- package/dist/{chunk-PZ6NF5DE.js → chunk-XJVBUDDJ.js} +5 -5
- package/dist/{chunk-PZ6NF5DE.js.map → chunk-XJVBUDDJ.js.map} +1 -1
- package/dist/{chunk-VKPBUPH7.js → chunk-XM6T2AZ2.js} +36 -11
- package/dist/chunk-XM6T2AZ2.js.map +1 -0
- package/dist/{chunk-YU6AURJY.js → chunk-XWOPZW26.js} +3 -3
- package/dist/{chunk-YU6AURJY.js.map → chunk-XWOPZW26.js.map} +1 -1
- package/dist/{chunk-LW7ZI6EQ.js → chunk-Y5MBW5EU.js} +3 -3
- package/dist/chunk-Y5MBW5EU.js.map +1 -0
- package/dist/{chunk-24AXETE3.js → chunk-ZQSOJH6I.js} +36 -18
- package/dist/chunk-ZQSOJH6I.js.map +1 -0
- package/dist/{chunk-JYWW32JI.js → chunk-ZX4KRWRB.js} +17 -5
- package/dist/chunk-ZX4KRWRB.js.map +1 -0
- package/dist/claude-code-2PU7TITZ.js +10 -0
- package/dist/claude-code-2PU7TITZ.js.map +1 -0
- package/dist/cli/index.js +574 -492
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/src/agent-checks.d.ts +5 -0
- package/dist/cli/src/agent-checks.d.ts.map +1 -1
- package/dist/cli/src/agent-pins.d.ts +18 -0
- package/dist/cli/src/agent-pins.d.ts.map +1 -0
- package/dist/cli/src/commands/catalog.d.ts +6 -0
- 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/diff.d.ts.map +1 -1
- package/dist/cli/src/commands/flow.d.ts +8 -8
- package/dist/cli/src/commands/flow.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-index.d.ts +17 -5
- package/dist/cli/src/commands/library-index.d.ts.map +1 -1
- package/dist/cli/src/commands/library-publish.d.ts +3 -0
- package/dist/cli/src/commands/library-publish.d.ts.map +1 -1
- package/dist/cli/src/commands/migrate-assets.d.ts +2 -0
- package/dist/cli/src/commands/migrate-assets.d.ts.map +1 -1
- package/dist/cli/src/commands/migrate.d.ts.map +1 -1
- package/dist/cli/src/commands/outdated.d.ts.map +1 -1
- package/dist/cli/src/commands/plugin/claude-code.d.ts +6 -0
- package/dist/cli/src/commands/plugin/claude-code.d.ts.map +1 -1
- package/dist/cli/src/commands/plugin/codex.d.ts +19 -4
- package/dist/cli/src/commands/plugin/codex.d.ts.map +1 -1
- package/dist/cli/src/commands/preset-cmd.d.ts.map +1 -1
- package/dist/cli/src/commands/project.d.ts +6 -3
- package/dist/cli/src/commands/project.d.ts.map +1 -1
- package/dist/cli/src/commands/providers.d.ts +13 -0
- package/dist/cli/src/commands/providers.d.ts.map +1 -1
- package/dist/cli/src/commands/run.d.ts.map +1 -1
- package/dist/cli/src/commands/serve-preflight.d.ts +23 -0
- package/dist/cli/src/commands/serve-preflight.d.ts.map +1 -1
- package/dist/cli/src/commands/serve.d.ts.map +1 -1
- package/dist/cli/src/commands/update.d.ts.map +1 -1
- package/dist/cli/src/commands/validate.d.ts.map +1 -1
- package/dist/cli/src/driver-error.d.ts +7 -0
- package/dist/cli/src/driver-error.d.ts.map +1 -1
- package/dist/cli/src/flow-discovery.d.ts +69 -53
- package/dist/cli/src/flow-discovery.d.ts.map +1 -1
- package/dist/cli/src/plugin-store/index.d.ts +6 -2
- package/dist/cli/src/plugin-store/index.d.ts.map +1 -1
- package/dist/cli/src/skill-checks.d.ts +32 -1
- package/dist/cli/src/skill-checks.d.ts.map +1 -1
- package/dist/connectors/config.js +3 -3
- package/dist/connectors/index.js +18 -16
- package/dist/{connectors-QL4GBMH3.js → connectors-RBGZ3M7G.js} +21 -19
- package/dist/{connectors-QL4GBMH3.js.map → connectors-RBGZ3M7G.js.map} +1 -1
- package/dist/core/discovery.js +1 -1
- package/dist/core/index.js +5 -5
- package/dist/core/publish-manifest.js +1 -1
- package/dist/core/runtime-assets.js +3 -3
- package/dist/core/src/asset-roots.d.ts +14 -0
- package/dist/core/src/asset-roots.d.ts.map +1 -1
- package/dist/core/src/bind.d.ts +33 -14
- package/dist/core/src/bind.d.ts.map +1 -1
- package/dist/core/src/discovery.d.ts +1 -1
- package/dist/core/src/index.d.ts +4 -4
- package/dist/core/src/index.d.ts.map +1 -1
- package/dist/core/src/lock.d.ts +8 -0
- package/dist/core/src/lock.d.ts.map +1 -1
- package/dist/core/src/publish-manifest.d.ts +45 -10
- package/dist/core/src/publish-manifest.d.ts.map +1 -1
- package/dist/core/src/workspace-config.d.ts +18 -1
- package/dist/core/src/workspace-config.d.ts.map +1 -1
- package/dist/core/workspace-config.js +2 -2
- package/dist/deploy/index.js +5 -5
- package/dist/discovery/index.js +3 -3
- package/dist/discovery/src/discover-manifest.d.ts +1 -1
- package/dist/discovery/src/discover-manifest.d.ts.map +1 -1
- package/dist/discovery/src/discover.d.ts.map +1 -1
- package/dist/discovery/src/tree-entries.d.ts.map +1 -1
- package/dist/{ensure-sources-CEFODJCE.js → ensure-sources-GKVLE6L5.js} +15 -15
- package/dist/{ensure-sources-CEFODJCE.js.map → ensure-sources-GKVLE6L5.js.map} +1 -1
- package/dist/factory-assets/connectors/box.js +18 -16
- package/dist/factory-assets/connectors/deploy.js +18 -16
- package/dist/factory-assets/connectors/devserver.js +18 -16
- package/dist/factory-assets/connectors/flow/adapter.js +18 -16
- package/dist/factory-assets/connectors/flow/engine/loader.d.ts +1 -1
- package/dist/factory-assets/connectors/flow/engine/locate.d.ts +8 -5
- package/dist/factory-assets/connectors/flow/engine/locate.d.ts.map +1 -1
- package/dist/factory-assets/connectors/flow/engine.js +6 -6
- package/dist/factory-assets/connectors/flow/run-flow.d.ts.map +1 -1
- package/dist/factory-assets/connectors/flow/run-flow.js +19 -17
- package/dist/factory-assets/connectors/flow.js +18 -16
- package/dist/factory-assets/connectors/git.js +18 -16
- package/dist/factory-assets/connectors/gmail.js +18 -16
- package/dist/factory-assets/connectors/googledrive.js +18 -16
- package/dist/factory-assets/connectors/local.js +18 -16
- package/dist/factory-assets/connectors/mattermost.js +18 -16
- package/dist/factory-assets/connectors/memory.js +18 -16
- package/dist/factory-assets/connectors/minio.js +18 -16
- package/dist/factory-assets/connectors/postgres.js +18 -16
- package/dist/factory-assets/connectors/s3.js +18 -16
- package/dist/factory-assets/connectors/sharepoint.js +18 -16
- package/dist/factory-assets/connectors/sqlite.js +18 -16
- package/dist/factory-assets/connectors/static-server.js +18 -16
- package/dist/factory-assets/connectors/tunnel.js +18 -16
- package/dist/factory-assets/connectors/webdav.js +18 -16
- package/dist/factory-assets/connectors/xstate/adapter.d.ts +1 -1
- package/dist/factory-assets/connectors/xstate/adapter.d.ts.map +1 -1
- package/dist/factory-assets/connectors/xstate-store.js +18 -16
- package/dist/factory-assets/connectors/xstate.js +18 -16
- package/dist/factory-assets/skills/skaile-manage-workspace/SKILL.md +1 -1
- package/dist/{flows-BHY73K3O.js → flows-W2FB7WIM.js} +8 -8
- package/dist/{flows-BHY73K3O.js.map → flows-W2FB7WIM.js.map} +1 -1
- package/dist/{helpers-R22QNPFN.js → helpers-34QNVIGB.js} +15 -15
- package/dist/{helpers-R22QNPFN.js.map → helpers-34QNVIGB.js.map} +1 -1
- package/dist/library/index.js +9 -9
- 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/manifest-writer.d.ts +13 -0
- package/dist/library/src/manifest-writer.d.ts.map +1 -1
- package/dist/{library-publish-VBE3X2TH.js → library-publish-RUQTKTJU.js} +125 -48
- package/dist/library-publish-RUQTKTJU.js.map +1 -0
- package/dist/model-endpoint/index.js +8 -8
- package/dist/{open-library-JP5TC5UX.js → open-library-PVTIUQUF.js} +18 -18
- package/dist/{open-library-JP5TC5UX.js.map → open-library-PVTIUQUF.js.map} +1 -1
- package/dist/{open-registry-RBELV5YH.js → open-registry-SOIS3TA2.js} +13 -13
- package/dist/{open-registry-RBELV5YH.js.map → open-registry-SOIS3TA2.js.map} +1 -1
- package/dist/{paths-BFM6K2QO.js → paths-JLNX7Y4X.js} +8 -8
- package/dist/{paths-BFM6K2QO.js.map → paths-JLNX7Y4X.js.map} +1 -1
- package/dist/{plugin-store-QOQDM24E.js → plugin-store-G2GWAHSD.js} +8 -8
- package/dist/{plugin-store-QOQDM24E.js.map → plugin-store-G2GWAHSD.js.map} +1 -1
- package/dist/{project-6ETXGQWD.js → project-EX47PUBN.js} +38 -37
- package/dist/{project-6ETXGQWD.js.map → project-EX47PUBN.js.map} +1 -1
- package/dist/resolver/index.js +5 -5
- package/dist/runner/index.js +30 -29
- package/dist/runner/src/agents/instances.d.ts.map +1 -1
- package/dist/runner/src/composition/compile.d.ts +11 -0
- package/dist/runner/src/composition/compile.d.ts.map +1 -1
- package/dist/runner/src/composition/index.d.ts +1 -1
- package/dist/runner/src/composition/index.d.ts.map +1 -1
- package/dist/runner/src/serve.d.ts.map +1 -1
- package/dist/runner/src/turn-end-contract.d.ts +55 -0
- package/dist/runner/src/turn-end-contract.d.ts.map +1 -0
- package/dist/runner/src/turn-scheduler.d.ts +5 -0
- package/dist/runner/src/turn-scheduler.d.ts.map +1 -1
- package/dist/sdk/asset-manager.js +12 -12
- package/dist/sdk/bridge.js +15 -13
- package/dist/sdk/core.js +5 -5
- package/dist/sdk/flow.js +6 -6
- package/dist/sdk/index.js +30 -29
- package/dist/sdk/index.js.map +1 -1
- package/dist/sdk/resolver.js +5 -5
- package/dist/sdk/runner.js +30 -29
- package/dist/sdk/transport/ws/server.js +6 -6
- package/dist/sdk/transport/ws.js +6 -6
- package/dist/sdk/transport.js +6 -6
- package/dist/serve-preflight-QXRKGOI5.js +108 -0
- package/dist/serve-preflight-QXRKGOI5.js.map +1 -0
- package/dist/{setup-JQDTYPSD.js → setup-AFZQNGKA.js} +25 -23
- package/dist/setup-AFZQNGKA.js.map +1 -0
- package/dist/{skills-RSZVUIYZ.js → skills-YYYC6D5X.js} +8 -8
- package/dist/{skills-RSZVUIYZ.js.map → skills-YYYC6D5X.js.map} +1 -1
- package/dist/{source-FPLHY3DP.js → source-DGPCT5IC.js} +40 -39
- package/dist/{source-FPLHY3DP.js.map → source-DGPCT5IC.js.map} +1 -1
- package/dist/{source-manifest-publish-LY4H63VA.js → source-manifest-publish-AGJ63JF2.js} +42 -41
- package/dist/source-manifest-publish-AGJ63JF2.js.map +1 -0
- package/dist/transport/index.js +6 -6
- package/dist/transport/src/ws/server.d.ts +1 -1
- package/dist/transport/src/ws/server.d.ts.map +1 -1
- package/dist/transport/ws/server.js +6 -6
- package/dist/transport/ws.js +6 -6
- package/dist/tui/index.js +30 -29
- package/dist/tui/index.js.map +1 -1
- package/dist/types/manifests.js +1 -1
- package/dist/types/src/manifests/scaffold-body.d.ts +6 -3
- package/dist/types/src/manifests/scaffold-body.d.ts.map +1 -1
- package/dist/workspace-plugin/adapters/mcp.js +22 -20
- package/dist/workspace-plugin/adapters/omp.js +14 -14
- package/dist/workspace-plugin/index.js +1 -1
- package/package.json +1 -1
- package/dist/chunk-24AXETE3.js.map +0 -1
- package/dist/chunk-2NOLF7B2.js.map +0 -1
- package/dist/chunk-B4X2N7JQ.js.map +0 -1
- package/dist/chunk-CKICWXMU.js.map +0 -1
- package/dist/chunk-CKNIYIV2.js.map +0 -1
- package/dist/chunk-D6UBEYQH.js.map +0 -1
- package/dist/chunk-DA2MCPFN.js.map +0 -1
- package/dist/chunk-EELKR2WP.js.map +0 -1
- package/dist/chunk-EZVZDCHZ.js.map +0 -1
- package/dist/chunk-FHIMIXT3.js.map +0 -1
- package/dist/chunk-HPVMTX6M.js.map +0 -1
- package/dist/chunk-JYWW32JI.js.map +0 -1
- package/dist/chunk-L6IFN6ER.js.map +0 -1
- package/dist/chunk-LW7ZI6EQ.js.map +0 -1
- package/dist/chunk-MQIRRN76.js.map +0 -1
- package/dist/chunk-ODDATIII.js.map +0 -1
- package/dist/chunk-T2TQAH2X.js.map +0 -1
- package/dist/chunk-TDQ2ERCM.js.map +0 -1
- package/dist/chunk-V4RV2NJF.js.map +0 -1
- package/dist/chunk-VKPBUPH7.js.map +0 -1
- package/dist/library-publish-VBE3X2TH.js.map +0 -1
- package/dist/serve-preflight-BTGTZUDN.js +0 -60
- package/dist/serve-preflight-BTGTZUDN.js.map +0 -1
- package/dist/setup-JQDTYPSD.js.map +0 -1
- package/dist/source-manifest-publish-LY4H63VA.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../asset-manager/src/install-instances.ts","../asset-manager/src/mcp-config.ts","../asset-manager/src/index.ts"],"names":["bytes","entry","parseYaml","readFileSync","join","resolve","sep","files","semverGt","existsSync","path","rmSync","dir","dirname","deps","resolveConfig","gaps","sameAsset","writeFileSync","stringifyYaml","reason","mkdirSync"],"mappings":"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","file":"chunk-TDQ2ERCM.js","sourcesContent":["/**\n * Agent instance rendering — the `skaile install` step that renders every agent\n * instance of `skaile.yaml` (`agent:` as `default`, plus the `agents:` map) into\n * the target harness's native agent format.\n *\n * One rendering per instance, named by the instance id: claude\n * `.claude/agents/<id>.md`, omp `.omp/agents/<id>/`, codex\n * `.codex/agents/<id>.toml` (+ `.codex/skaile-agents/<id>.md`). The `delegate`\n * sub-agents an instance composes are rendered flat next to it.\n *\n * Stale outputs follow the ownership rule `mcp-config.ts` uses for `.mcp.json`:\n * what this step wrote is recorded per harness and instance in\n * `.skaile/agent-instances-managed.json`; a rendering whose instance left\n * `skaile.yaml` (or that an instance no longer composes) is removed on the next\n * install, and nothing the ledger does not list is ever touched. An instance\n * whose agent cannot be resolved this run keeps its previous rendering.\n */\n\nimport { existsSync, mkdirSync, readFileSync, rmSync, writeFileSync } from \"node:fs\";\nimport { dirname, join, resolve, sep } from \"node:path\";\nimport type { DriverTarget, SkWorkspaceConfig } from \"@skaile/workspaces/core\";\nimport {\n DRIVER_TARGETS,\n deployedBase,\n effectiveAgentInstances,\n resolveAgentDefinitionDir,\n resolveSkWorkspaceConfig,\n} from \"@skaile/workspaces/core\";\nimport { installAgent } from \"./install-agent.js\";\nimport { CODEX_IDENTITY_DIR, driverTargetSupportsAgents } from \"./renderers.js\";\n\n/** One rendered instance: its id and every path written for it (workspace-relative). */\nexport interface InstalledAgentInstance {\n id: string;\n files: string[];\n}\n\n/** Outcome of {@link installAgentInstances}. */\nexport interface InstallAgentInstancesResult {\n /** Instances rendered in this pass. */\n instances: InstalledAgentInstance[];\n /** Workspace-relative paths removed because their instance (or sub-agent) is gone. */\n removed: string[];\n /** Non-fatal renderer notes. */\n warnings: string[];\n /** Instances that could not be rendered because their `ref` does not resolve to an agent. */\n errors: string[];\n}\n\n/** Options for {@link installAgentInstances}. */\nexport interface InstallAgentInstancesOptions {\n /** Workspace root (where `skaile.yaml` lives). */\n projectDir: string;\n /** Harness to render for. */\n driverTarget: DriverTarget;\n /** Parsed workspace config; read from `projectDir` when omitted. */\n wsConfig?: SkWorkspaceConfig;\n log?: (msg: string) => void;\n}\n\ninterface InstanceLedger {\n version: 1;\n /** harness → instance id → workspace-relative paths this step wrote. */\n targets: Record<string, Record<string, string[]>>;\n}\n\nconst ledgerPath = (projectDir: string): string =>\n join(projectDir, \".skaile\", \"agent-instances-managed.json\");\n\nfunction readLedger(projectDir: string): InstanceLedger {\n const p = ledgerPath(projectDir);\n if (!existsSync(p)) return { version: 1, targets: {} };\n try {\n const parsed = JSON.parse(readFileSync(p, \"utf-8\")) as Partial<InstanceLedger>;\n return { version: 1, targets: parsed.targets ?? {} };\n } catch {\n // An unreadable ledger owns nothing: render fresh, never delete on a guess.\n return { version: 1, targets: {} };\n }\n}\n\nfunction writeLedger(projectDir: string, ledger: InstanceLedger): void {\n const p = ledgerPath(projectDir);\n mkdirSync(dirname(p), { recursive: true });\n writeFileSync(p, `${JSON.stringify(ledger, null, 2)}\\n`, \"utf-8\");\n}\n\n/**\n * The files an earlier install rendered for each agent instance of `driverTarget`, with the\n * `ref` the instance binds to: one row per instance that has a record in\n * `.skaile/agent-instances-managed.json` and is still declared in `skaile.yaml`. Paths are\n * workspace-relative. The lock keeps them under the `rendered:` list of the agent entry the\n * `ref` names, so a hand edit of `default.md` is drift like one of the asset-named file.\n */\nexport function renderedInstanceFiles(\n projectDir: string,\n driverTarget: DriverTarget,\n): Array<{ id: string; ref: string; files: string[] }> {\n const recorded = readLedger(projectDir).targets[driverTarget];\n if (!recorded) return [];\n let instances: Record<string, { ref: string }>;\n try {\n instances = effectiveAgentInstances(resolveSkWorkspaceConfig(projectDir));\n } catch {\n return [];\n }\n return Object.entries(instances)\n .filter(([id]) => recorded[id]?.length)\n .map(([id, instance]) => ({ id, ref: instance.ref, files: recorded[id] }));\n}\n\n/**\n * The names of the entries of the harness agent directory that an instance render wrote\n * (`default`, `books-eu`, `checker`, …): the stem of the file, or the directory name. They are\n * renderings of an agent, not assets of their own, so `skaile show` leaves the unlocked ones\n * out of its overview.\n */\nexport function instanceRenderedAgentNames(\n projectDir: string,\n driverTarget: DriverTarget,\n): Set<string> {\n const names = new Set<string>();\n if (!driverTargetSupportsAgents(driverTarget)) return names;\n const agentDir = resolve(deployedBase(\"agent\", driverTarget, false, projectDir));\n for (const files of Object.values(readLedger(projectDir).targets[driverTarget] ?? {})) {\n for (const rel of files) {\n const abs = resolve(projectDir, rel);\n if (!abs.startsWith(agentDir + sep)) continue;\n const top = abs.slice(agentDir.length + 1).split(sep)[0] ?? \"\";\n if (top) names.add(top.replace(/\\.(md|toml|yaml|json)$/, \"\"));\n }\n }\n return names;\n}\n\n/**\n * Resolve the agent definition directory one instance binds to. `errors` lists why it does\n * not: the `ref` finds no agent, or the directory it finds has no `agent.yaml`. What to do about\n * an `agent:` ref that finds no agent depends on the libraries registered, so the caller adds\n * it (see `AssetManager.projectState`). `srcDir` is `undefined` for an `ai-assets://` ref\n * with no `ai-assets/` directory above the project, which is no error.\n */\nfunction bindInstance(\n projectDir: string,\n id: string,\n instance: { ref: string },\n): { srcDir: string | undefined; errors: string[] } {\n const errors: string[] = [];\n let srcDir: string | undefined;\n try {\n srcDir = resolveAgentDefinitionDir(projectDir, instance.ref);\n } catch (err) {\n errors.push(`agent instance \"${id}\": ${err instanceof Error ? err.message : String(err)}`);\n }\n if (srcDir !== undefined && !existsSync(join(srcDir, \"agent.yaml\"))) {\n errors.push(\n `agent instance \"${id}\": ${instance.ref} resolves to ${srcDir}, which has no agent.yaml`,\n );\n }\n return { srcDir, errors };\n}\n\n/** One agent instance of `skaile.yaml` whose `ref` does not bind to an agent. */\nexport interface UnboundAgentInstance {\n /** Instance id (`default` for the `agent:` block). */\n id: string;\n /** The instance's `ref`. */\n ref: string;\n /** Why it does not bind, as `install` prints it. */\n error: string;\n}\n\n/**\n * The instances of `skaile.yaml` that {@link installAgentInstances} cannot render because their\n * `ref` binds to no agent: `skaile check` fails on them, and `skaile install` too. A harness\n * without a native agent format renders nothing, so it has none. An unreadable `skaile.yaml`\n * has none either.\n */\nexport function unboundAgentInstances(\n projectDir: string,\n driverTarget: DriverTarget,\n): UnboundAgentInstance[] {\n if (!driverTargetSupportsAgents(driverTarget)) return [];\n let instances: Record<string, { ref: string }>;\n try {\n instances = effectiveAgentInstances(resolveSkWorkspaceConfig(projectDir));\n } catch {\n return [];\n }\n const out: UnboundAgentInstance[] = [];\n for (const [id, instance] of Object.entries(instances)) {\n const { errors } = bindInstance(projectDir, id, instance);\n if (errors.length > 0) out.push({ id, ref: instance.ref, error: errors.join(\"; \") });\n }\n return out;\n}\n\n/**\n * Remove the native agent files an earlier install rendered for the instances `ids`, as far as\n * no other instance claims them, and drop those instances from the ledger. Only paths the ledger\n * lists and that sit inside the harness agent dir are removed.\n *\n * @returns Workspace-relative paths removed.\n */\nexport function removeAgentInstanceRenderings(opts: {\n projectDir: string;\n driverTarget: DriverTarget;\n ids: readonly string[];\n}): string[] {\n const { projectDir, driverTarget, ids } = opts;\n if (!driverTargetSupportsAgents(driverTarget) || ids.length === 0) return [];\n const ledger = readLedger(projectDir);\n const previous = ledger.targets[driverTarget];\n if (!previous) return [];\n const gone = new Set(ids);\n const claimed = new Set(\n Object.entries(previous)\n .filter(([id]) => !gone.has(id))\n .flatMap(([, files]) => files),\n );\n const agentDeployDir = deployedBase(\"agent\", driverTarget, false, projectDir);\n const removable = [resolve(agentDeployDir), resolve(dirname(agentDeployDir), CODEX_IDENTITY_DIR)];\n const root = resolve(projectDir);\n const removed: string[] = [];\n for (const id of gone) {\n for (const rel of previous[id] ?? []) {\n if (claimed.has(rel)) continue;\n const abs = resolve(root, rel);\n if (!removable.some((dir) => abs.startsWith(dir + sep)) || !existsSync(abs)) continue;\n rmSync(abs, { recursive: true, force: true });\n removed.push(rel);\n }\n }\n const owned = Object.fromEntries(Object.entries(previous).filter(([id]) => !gone.has(id)));\n const nextTargets = { ...ledger.targets };\n if (Object.keys(owned).length > 0) nextTargets[driverTarget] = owned;\n else delete nextTargets[driverTarget];\n if (JSON.stringify(nextTargets) !== JSON.stringify(ledger.targets)) {\n writeLedger(projectDir, { version: 1, targets: nextTargets });\n }\n return removed;\n}\n\n/**\n * Render every agent instance of the workspace for `driverTarget`, then remove\n * the renderings this step wrote earlier that no instance claims any more.\n * Harnesses without a native agent format are a no-op (nothing rendered, the\n * ledger is not touched).\n *\n * Never throws for a bad instance: an unresolvable `ref` becomes a warning and\n * leaves that instance's previous rendering in place.\n *\n * @docLink packages/asset-manager/concepts#install-agent-instances\n */\nexport function installAgentInstances(\n opts: InstallAgentInstancesOptions,\n): InstallAgentInstancesResult {\n const { projectDir, driverTarget, log } = opts;\n const result: InstallAgentInstancesResult = {\n instances: [],\n removed: [],\n warnings: [],\n errors: [],\n };\n if (!driverTargetSupportsAgents(driverTarget)) return result;\n\n const wsConfig = opts.wsConfig ?? resolveSkWorkspaceConfig(projectDir);\n const instances = effectiveAgentInstances(wsConfig);\n const agentDeployDir = deployedBase(\"agent\", driverTarget, false, projectDir);\n const skillsRelDir = DRIVER_TARGETS[driverTarget]?.local.skill ?? \"\";\n\n const ledger = readLedger(projectDir);\n const previous = ledger.targets[driverTarget] ?? {};\n const owned: Record<string, string[]> = {};\n\n for (const [id, instance] of Object.entries(instances)) {\n const { srcDir, errors } = bindInstance(projectDir, id, instance);\n result.errors.push(...errors);\n if (srcDir === undefined || errors.length > 0) {\n // Nothing new to record: keep whatever an earlier pass rendered for it.\n if (previous[id]) owned[id] = previous[id];\n continue;\n }\n\n const rendered = installAgent(\n srcDir,\n agentDeployDir,\n projectDir,\n driverTarget,\n skillsRelDir,\n id,\n /* includeSubAgents */ true,\n new Set<string>(),\n wsConfig,\n log,\n instance,\n );\n result.warnings.push(...rendered.warnings);\n const files = [...new Set(rendered.created)];\n owned[id] = files;\n result.instances.push({ id, files });\n }\n\n // Remove what an earlier pass wrote and no instance claims now.\n const claimed = new Set(Object.values(owned).flat());\n const root = resolve(projectDir);\n // The ledger is a file in the workspace, so it is input: only paths strictly inside what this\n // step renders into (the harness agent dir, and codex's identity dir beside it) may be removed.\n const removable = [resolve(agentDeployDir), resolve(dirname(agentDeployDir), CODEX_IDENTITY_DIR)];\n for (const rel of Object.values(previous).flat()) {\n if (claimed.has(rel)) continue;\n const abs = resolve(root, rel);\n if (!removable.some((dir) => abs.startsWith(dir + sep)) || !existsSync(abs)) continue;\n rmSync(abs, { recursive: true, force: true });\n result.removed.push(rel);\n }\n\n const nextTargets = { ...ledger.targets };\n if (Object.keys(owned).length > 0) nextTargets[driverTarget] = owned;\n else delete nextTargets[driverTarget];\n if (JSON.stringify(nextTargets) !== JSON.stringify(ledger.targets)) {\n writeLedger(projectDir, { version: 1, targets: nextTargets });\n }\n\n return result;\n}\n","/**\n * Render the workspace's declared MCP servers into the **coding agent's own**\n * native MCP config, so a developer who runs `skaile install` in a project and\n * then opens their coding agent in that folder gets the same MCP servers\n * skaile's own agent loop wires up.\n *\n * This is the sibling of skill deployment (`.claude/skills/`): skills already\n * render into the driver target's native tree, MCP servers now do too.\n *\n * Declarations come from the single resolver `loadMcpServerDeclarations()` in\n * `@skaile/workspaces/core` — the same one the runner uses. There is no second\n * resolver here.\n */\n\nimport { createHash } from \"node:crypto\";\nimport fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport type { DriverTarget, McpServerDeclaration, McpServerPayload } from \"@skaile/workspaces/core\";\nimport { loadMcpServerDeclarations } from \"@skaile/workspaces/core\";\nimport { isNonAssetDir, isNonAssetFile } from \"@skaile/workspaces/core/publish-manifest\";\n\n// ── Driver-target coverage ───────────────────────────────────────────────────\n\n/**\n * Per-driver-target native MCP config location, relative to the project root.\n *\n * Only `claude-code` is populated: its project-scope `.mcp.json` schema is\n * documented and stable. `codex` (TOML `config.toml`) and `omp` (no documented\n * project-scope MCP file) are deliberately absent — an unlisted target is a\n * silent no-op, and adding one later is a one-line change here.\n */\nconst TARGET_MCP_CONFIG: Partial<Record<DriverTarget, string>> = {\n \"claude-code\": \".mcp.json\",\n};\n\n/** IDs reserved for skaile's built-in MCP servers. Never rendered. */\nconst RESERVED_MCP_SERVER_IDS = new Set([\n \"skaile-connectors\",\n \"skaile-workspace\",\n \"skaile-capabilities\",\n]);\n\n/**\n * Secret-ref prefixes that cannot be represented in a coding agent's MCP\n * config. `env:` is the one exception — it maps onto the agent's own `${VAR}`\n * environment expansion (see {@link renderSecretRef}).\n *\n * Must stay in sync with `KNOWN_PREFIXES` in\n * `@skaile/workspaces/connectors` (`src/secrets.ts`) minus `env:`. Writing an\n * unresolved ref verbatim is exactly what `resolveRecordSecretsStrict` in\n * `runner/src/external-mcp.ts` refuses to do — it would put e.g.\n * `Authorization: mcp:github` on the wire and surface a misleading upstream\n * rejection instead of \"the credential is unavailable\".\n */\nconst UNSUPPORTED_SECRET_PREFIXES = [\n \"vault:\",\n \"forge:\",\n \"op:\",\n \"kp:\",\n \"oauth:\",\n \"mount:\",\n \"connector:\",\n \"mcp:\",\n] as const;\n\n/** A `<name>` template slot left in a value, e.g. `https://alma-next-<slug>-api.example.org/mcp`. */\nconst TEMPLATE_PLACEHOLDER = /<[^<>\\s/]+>/;\n\n/** Deadline for one payload download. */\nconst PAYLOAD_FETCH_TIMEOUT_MS = 60_000;\n\n/**\n * `${workspace}` marker, substituted with the absolute workspace root in\n * `command` / `args` / `env` — the same token the runner resolves.\n */\nconst WORKSPACE_MARKER = /\\$\\{workspace\\}/g;\n\n// ── Types ────────────────────────────────────────────────────────────────────\n\n/** A skipped declaration and the human-readable reason it was not rendered. */\nexport interface SkippedMcpServer {\n id: string;\n reason: string;\n}\n\n/** Outcome of one {@link renderMcpServerConfig} pass. */\nexport interface RenderMcpConfigResult {\n /** Absolute path to the config file, when the target is supported. */\n path?: string;\n /** Whether the config file was actually written. */\n written: boolean;\n /** IDs skaile wrote (and now owns) in this pass. */\n servers: string[];\n /** Previously-owned IDs removed in this pass. */\n removed: string[];\n /** Declarations deliberately not rendered, with reasons. */\n skipped: SkippedMcpServer[];\n}\n\n/** Options for {@link renderMcpServerConfig}. */\nexport interface RenderMcpConfigOptions {\n /** Warning sink. Defaults to `console.warn` prefixed with `skaile:`. */\n warn?: (message: string) => void;\n /**\n * Download one `payload.url` of a store MCP server (bytes only; the caller verifies the\n * sha256). Defaults to an HTTPS `fetch` with a 60 s deadline. Tests inject a stub.\n */\n fetchPayload?: (url: string) => Promise<Uint8Array>;\n}\n\n/** A rendered `.mcp.json` server entry (stdio or remote). */\ninterface McpConfigEntry {\n type?: \"sse\" | \"http\";\n command?: string;\n args?: string[];\n env?: Record<string, string>;\n url?: string;\n headers?: Record<string, string>;\n}\n\ninterface McpJsonFile {\n mcpServers?: Record<string, unknown>;\n [k: string]: unknown;\n}\n\ninterface ManagedState {\n version: number;\n targets: Record<string, string[]>;\n}\n\n// ── Value rendering ──────────────────────────────────────────────────────────\n\n/**\n * Substitute `${workspace}` with the absolute project dir. A literal\n * `${workspace}` left in the file would be read by the coding agent as an\n * environment-variable expansion and silently resolve to nothing.\n */\nfunction substituteWorkspace(value: string, projectDir: string): string {\n return value.replace(WORKSPACE_MARKER, projectDir);\n}\n\n/**\n * Map an `env:NAME` secret ref onto `${NAME}`, which the coding agent expands\n * from its own environment. Any other value passes through unchanged.\n */\nfunction renderSecretRef(value: string): string {\n return value.startsWith(\"env:\") ? `\\${${value.slice(4)}}` : value;\n}\n\n/**\n * Render one `env` / `headers` map, or `undefined` when it is empty.\n *\n * `projectDir` is passed only for `env` (a local subprocess's environment);\n * `headers` are remote-transport config, where `${workspace}` is meaningless —\n * the same split the runner applies.\n */\nfunction renderValueMap(\n map: Record<string, string> | undefined,\n projectDir?: string,\n): Record<string, string> | undefined {\n if (!map) return undefined;\n const out: Record<string, string> = {};\n for (const [k, v] of Object.entries(map)) {\n out[k] = renderSecretRef(projectDir ? substituteWorkspace(v, projectDir) : v);\n }\n return Object.keys(out).length > 0 ? out : undefined;\n}\n\n/** First unsupported secret ref found across the declaration's value maps. */\nfunction findUnsupportedSecretRef(decl: McpServerDeclaration): string | undefined {\n const values = [...Object.values(decl.env ?? {}), ...Object.values(decl.headers ?? {})];\n return values.find((v) => UNSUPPORTED_SECRET_PREFIXES.some((p) => v.startsWith(p)));\n}\n\n// ── Skip rules ───────────────────────────────────────────────────────────────\n\n/**\n * Why this declaration cannot be rendered into a coding agent's MCP config, or\n * `undefined` when it can. Never attempts a Nix build or any other resolution.\n */\nfunction skipReason(decl: McpServerDeclaration): string | undefined {\n if (RESERVED_MCP_SERVER_IDS.has(decl.id)) return \"reserved id\";\n\n // Mirrors the runner's back-compat default: an unset launcher with a recipe\n // binding means \"recipe\". Recipe resolution needs the platform's Nix runtime,\n // which a consumer machine does not have.\n if (decl.launcher === \"recipe\" || (decl.launcher == null && decl.recipe != null)) {\n return \"requires the skaile platform's Nix recipe runtime\";\n }\n\n if (decl.auth === \"backend\") return \"requires a platform-minted credential\";\n if (decl.ca) return \"pins a CA, which the coding agent's MCP config cannot carry\";\n\n // A materialized/store-staged asset can have live plaintext credentials\n // folded into `env` from a sibling `.instance.json`. Those must never be\n // persisted to a file the project is told to commit — the same rule that\n // keeps `.instance.json` out of `.claude/skills/`.\n if (decl.instanceSecretsFolded) return \"resolved credentials are folded in from .instance.json\";\n\n const transport = decl.transport ?? \"stdio\";\n if (transport === \"stdio\" && !decl.command) return \"no command\";\n if (transport !== \"stdio\" && !decl.url) return \"no url\";\n\n // A store entry whose url still carries its own template (`…-<slug>-api….org`) points at no\n // host: writing it would hand the coding agent a server that cannot connect, in a file the\n // user is told not to edit by hand.\n const placeholder = decl.url ? TEMPLATE_PLACEHOLDER.exec(decl.url)?.[0] : undefined;\n if (placeholder) {\n return (\n `its url still holds the placeholder ${placeholder} — set the real value with an ` +\n `mcp_servers entry (id: ${decl.id}, url: ...) in skaile.yaml`\n );\n }\n\n const badRef = findUnsupportedSecretRef(decl);\n if (badRef) return `unsupported secret reference '${badRef}'`;\n\n return undefined;\n}\n\n// ── Payload ──────────────────────────────────────────────────────────────────\n\n/** Where a store MCP server's payload lives: `<project>/.skaile/assets/mcp-server/<name>/`. */\nfunction payloadDir(projectDir: string, id: string): string | undefined {\n const name = id.split(\"/\").pop() ?? id;\n if (!isPlainName(name)) return undefined;\n return path.join(projectDir, \".skaile\", \"assets\", \"mcp-server\", name);\n}\n\n/**\n * Whether `name` is one plain path segment: no separator (either kind), no `.`/`..`, no NUL,\n * not absolute. Payload names come from the store and from a URL's last segment, so a value\n * like `../../x` or `%2F..` (after decoding) must never reach a path join.\n */\nfunction isPlainName(name: string): boolean {\n return (\n name !== \"\" &&\n name !== \".\" &&\n name !== \"..\" &&\n !/[/\\\\\\0]/.test(name) &&\n !path.isAbsolute(name) &&\n !path.win32.isAbsolute(name)\n );\n}\n\n/** Decode one URL path segment; `undefined` when it is not valid percent-encoding. */\nfunction decodeSegment(segment: string): string | undefined {\n try {\n return decodeURIComponent(segment);\n } catch {\n return undefined;\n }\n}\n\nasync function defaultFetchPayload(url: string): Promise<Uint8Array> {\n const res = await fetch(url, {\n redirect: \"follow\",\n signal: AbortSignal.timeout(PAYLOAD_FETCH_TIMEOUT_MS),\n });\n if (!res.ok) throw new Error(`${url} answered ${res.status}`);\n return new Uint8Array(await res.arrayBuffer());\n}\n\n/**\n * A release payload that is an ES module but is named `*.js` (the store's `sql` server ships\n * `server.js` with `import` statements) cannot be started by `node <file>`: node reads a `.js`\n * file as CommonJS unless the nearest `package.json` says `\"type\": \"module\"` (p971). Write that\n * `package.json` beside the payload, in the directory skaile owns. An existing `package.json`\n * is never touched; a payload that is not ESM (or not `.js`) gets no marker.\n */\nasync function markEsmPayload(dir: string, dest: string, bytes: Uint8Array): Promise<void> {\n if (!dest.endsWith(\".js\")) return;\n const text = Buffer.from(bytes).toString(\"utf-8\");\n if (!/^\\s*(import\\s*[\\w{*\"']|export\\s|export\\s*\\{)|\\bimport\\.meta\\b/m.test(text)) return;\n try {\n await fs.writeFile(path.join(dir, \"package.json\"), `${JSON.stringify({ type: \"module\" })}\\n`, {\n flag: \"wx\",\n });\n } catch {\n // Already there (a hand-written or platform-written package.json stays) or not writable.\n }\n}\n\n/** The file name a payload is written to: its `dest`, else the URL's last path segment (decoded). */\nfunction rawPayloadDest(payload: McpServerPayload): string | undefined {\n if (payload.dest !== undefined) return payload.dest;\n try {\n return decodeSegment(new URL(payload.url).pathname.split(\"/\").pop() ?? \"\");\n } catch {\n return undefined;\n }\n}\n\n/**\n * Top-level entries of skaile's own payload directory that are not part of the payload (an\n * edit leaves them, `install` removes them). A directory with an `MCP.md` was materialized by\n * the platform, not written here: it has no extras.\n */\nasync function extraPayloadEntries(dir: string, dest: string): Promise<string[]> {\n let entries: import(\"node:fs\").Dirent[];\n try {\n entries = await fs.readdir(dir, { withFileTypes: true });\n } catch {\n return [];\n }\n if (entries.some((e) => e.name === \"MCP.md\")) return [];\n // Files that are never part of an asset (`.DS_Store`, `.env*`, `node_modules/`, `__pycache__/`)\n // are the user's: not drift, and `install` never deletes them.\n return entries\n .filter((e) => e.name !== dest && e.name !== \"package.json\")\n .filter((e) => !(e.isDirectory() ? isNonAssetDir(e.name) : isNonAssetFile(e.name)))\n .map((e) => e.name)\n .sort();\n}\n\nasync function pruneExtraPayloadFiles(dir: string, dest: string): Promise<void> {\n for (const name of await extraPayloadEntries(dir, dest)) {\n await fs.rm(path.join(dir, name), { recursive: true, force: true });\n }\n}\n\n/**\n * Make the `payload` of a store MCP server (a release `server.js` its `command`/`args` run)\n * exist on disk, verified against its pinned sha256. A file already there with the pinned\n * hash is kept (no download); any other file is replaced. A download whose bytes do not\n * hash to the pin is never written.\n *\n * @returns `undefined` when the payload is in place, else why it is not (no throw).\n */\nasync function ensurePayload(\n projectDir: string,\n decl: McpServerDeclaration,\n fetchPayload: (url: string) => Promise<Uint8Array>,\n): Promise<string | undefined> {\n const payload = decl.payload;\n if (!payload) return undefined;\n const dest = rawPayloadDest(payload);\n if (dest === undefined || !isPlainName(dest)) {\n return `payload ${payload.url} has no usable file name (${JSON.stringify(dest ?? \"\")}): a plain file name is required`;\n }\n const dir = payloadDir(projectDir, decl.id);\n if (!dir) return `payload of '${decl.id}' has no usable directory name`;\n const file = path.join(dir, dest);\n const sha = (bytes: Uint8Array): string => createHash(\"sha256\").update(bytes).digest(\"hex\");\n let existing: Uint8Array | undefined;\n try {\n existing = await fs.readFile(file);\n } catch {\n // Not on disk yet.\n }\n if (existing && sha(existing) === payload.sha256) {\n await markEsmPayload(dir, dest, existing);\n await pruneExtraPayloadFiles(dir, dest);\n return undefined;\n }\n let bytes: Uint8Array;\n try {\n bytes = await fetchPayload(payload.url);\n } catch (err) {\n const why =\n (err as { cause?: { code?: string } }).cause?.code ??\n (err instanceof Error ? err.message : String(err));\n return `payload ${payload.url} could not be fetched (${why})`;\n }\n const actual = sha(bytes);\n if (actual !== payload.sha256) {\n return `payload ${payload.url} has sha256 ${actual}, not the pinned ${payload.sha256}; it was not written`;\n }\n try {\n await fs.mkdir(dir, { recursive: true });\n const tmp = `${file}.${process.pid}.tmp`;\n await fs.writeFile(tmp, bytes);\n await fs.rename(tmp, file);\n } catch (err) {\n return `payload ${dest} could not be written: ${err instanceof Error ? err.message : String(err)}`;\n }\n await markEsmPayload(dir, dest, bytes);\n await pruneExtraPayloadFiles(dir, dest);\n return undefined;\n}\n\n/**\n * Drop the payload directory of a server skaile no longer renders. Only a directory that\n * holds no `MCP.md` goes: one with an `MCP.md` was materialized by the platform, not here.\n */\nasync function removePayloadDir(projectDir: string, id: string): Promise<void> {\n const dir = payloadDir(projectDir, id);\n if (!dir) return;\n try {\n await fs.access(path.join(dir, \"MCP.md\"));\n return;\n } catch {\n // No MCP.md: skaile's own payload directory.\n }\n await fs.rm(dir, { recursive: true, force: true });\n}\n\n// ── Entry building ───────────────────────────────────────────────────────────\n\n/** Build the `.mcp.json` entry for a declaration that passed the skip rules. */\nfunction buildEntry(decl: McpServerDeclaration, projectDir: string): McpConfigEntry {\n const transport = decl.transport ?? \"stdio\";\n if (transport !== \"stdio\") {\n const entry: McpConfigEntry = { type: transport, url: decl.url };\n const headers = renderValueMap(decl.headers);\n if (headers) entry.headers = headers;\n return entry;\n }\n\n // stdio is the documented default type and is omitted from the canonical\n // project-scope examples — omit it here too.\n const entry: McpConfigEntry = {\n command: substituteWorkspace(decl.command as string, projectDir),\n };\n const args = decl.args?.map((a) => substituteWorkspace(a, projectDir));\n if (args && args.length > 0) entry.args = args;\n const env = renderValueMap(decl.env, projectDir);\n if (env) entry.env = env;\n return entry;\n}\n\n// ── Managed-state I/O ────────────────────────────────────────────────────────\n\nfunction managedStatePath(projectDir: string): string {\n return path.join(projectDir, \".skaile\", \"mcp-managed.json\");\n}\n\n/**\n * Parse JSON at `p`, or `null` when the file is absent.\n *\n * @throws When the file exists but is unparseable — silently overwriting a\n * hand-edited, version-controlled file would be worse than failing loudly.\n */\nasync function readJsonStrict<T>(p: string): Promise<T | null> {\n let raw: string;\n try {\n raw = await fs.readFile(p, \"utf-8\");\n } catch {\n return null;\n }\n try {\n return JSON.parse(raw) as T;\n } catch (e: unknown) {\n throw new Error(\n `cannot parse ${p}: ${e instanceof Error ? e.message : String(e)}; please fix or remove`,\n );\n }\n}\n\nasync function writeJson(p: string, value: unknown): Promise<void> {\n await fs.mkdir(path.dirname(p), { recursive: true });\n await fs.writeFile(p, `${JSON.stringify(value, null, 2)}\\n`);\n}\n\n/** Skipped servers already warned about, per target: `{ [id]: reason }`. */\ninterface NotedSkipsState {\n version: 1;\n targets?: Partial<Record<string, Record<string, string>>>;\n}\n\nfunction notedSkipsPath(projectDir: string): string {\n return path.join(projectDir, \".skaile\", \"mcp-skipped.json\");\n}\n\n/** The ledger as stored; an unreadable one only repeats a warning, so it reads as empty. */\nasync function readNotedSkipsState(projectDir: string): Promise<NotedSkipsState> {\n try {\n return JSON.parse(await fs.readFile(notedSkipsPath(projectDir), \"utf-8\")) as NotedSkipsState;\n } catch {\n return { version: 1 };\n }\n}\n\nasync function readNotedSkips(\n projectDir: string,\n target: DriverTarget,\n): Promise<Record<string, string>> {\n const noted = (await readNotedSkipsState(projectDir)).targets?.[target];\n return noted && typeof noted === \"object\" ? noted : {};\n}\n\nasync function writeNotedSkips(\n projectDir: string,\n target: DriverTarget,\n before: Record<string, string>,\n skipped: SkippedMcpServer[],\n): Promise<void> {\n const now = Object.fromEntries(skipped.map((s) => [s.id, s.reason]));\n if (JSON.stringify(now) === JSON.stringify(before)) return;\n const targets = { ...((await readNotedSkipsState(projectDir)).targets ?? {}) };\n if (skipped.length > 0) targets[target] = now;\n else delete targets[target];\n await writeJson(notedSkipsPath(projectDir), { version: 1, targets });\n}\n\nasync function readManagedIds(projectDir: string, target: DriverTarget): Promise<string[]> {\n const state = await readJsonStrict<ManagedState>(managedStatePath(projectDir));\n const ids = state?.targets?.[target];\n return Array.isArray(ids) ? ids : [];\n}\n\nasync function writeManagedIds(\n projectDir: string,\n target: DriverTarget,\n ids: string[],\n): Promise<void> {\n const p = managedStatePath(projectDir);\n const state = (await readJsonStrict<ManagedState>(p)) ?? { version: 1, targets: {} };\n const targets = { ...(state.targets ?? {}) };\n if (ids.length > 0) targets[target] = ids;\n else delete targets[target];\n await writeJson(p, { version: 1, targets });\n}\n\n/** Delete `.mcp-managed.json` when no target holds an id any more, and `.skaile/` when that empties it. */\nasync function removeEmptyLedger(projectDir: string): Promise<void> {\n const p = managedStatePath(projectDir);\n const state = await readJsonStrict<ManagedState>(p);\n if (!state || Object.keys(state.targets ?? {}).length > 0) return;\n await fs.rm(p, { force: true });\n try {\n await fs.rmdir(path.dirname(p));\n } catch {\n // Not empty (other `.skaile/` state): stays.\n }\n}\n\n// ── Merge ────────────────────────────────────────────────────────────────────\n\n/** Result of merging renderable entries into an existing `mcpServers` map. */\ninterface MergeResult {\n next: Record<string, unknown>;\n owned: string[];\n removed: string[];\n}\n\n/**\n * Merge skaile-owned entries into the existing map without ever clobbering a\n * user-authored one. Ownership is explicit (the managed-id list), never\n * inferred from the entry's shape.\n */\nfunction mergeServers(\n existing: Record<string, unknown>,\n renderable: Map<string, McpConfigEntry>,\n managedIds: string[],\n warn: (message: string) => void,\n configLabel: string,\n): MergeResult {\n const next = { ...existing };\n const managed = new Set(managedIds);\n const owned: string[] = [];\n const removed: string[] = [];\n\n // Only previously-managed ids may be deleted. Never touch anything else.\n // `Object.hasOwn`, not `in` — `in` walks the prototype chain, so ids like\n // `constructor` / `toString` would read as pre-existing hand-written entries.\n for (const id of managed) {\n if (!renderable.has(id) && Object.hasOwn(next, id)) {\n delete next[id];\n removed.push(id);\n }\n }\n\n for (const [id, entry] of renderable) {\n if (Object.hasOwn(next, id) && !managed.has(id)) {\n warn(`\"${id}\" already declared in ${configLabel} by hand — leaving the existing entry`);\n continue;\n }\n next[id] = entry;\n owned.push(id);\n }\n\n return { next, owned, removed };\n}\n\n// ── Drift ────────────────────────────────────────────────────────────────────\n\n/** What differs between an MCP server's declaration and what a render wrote for it. */\nexport interface McpServerDrift {\n /** The declaration id (the unscoped asset name). */\n id: string;\n /** Written files or config entries that are gone: a project-relative path, or `.mcp.json entry \"<id>\"`. */\n missing: string[];\n /** Written files or entries whose content is not what the declaration renders. */\n modified: string[];\n /** Entries of skaile's payload directory the declaration does not ship. */\n extra: string[];\n /** The config entry as the declaration renders it and as found, when they differ (for `diff`). */\n entry?: { expected: unknown; actual: unknown };\n /** The payload file as pinned and as found, when it differs. */\n payload?: { file: string; pinned: string; actual?: string };\n}\n\n/** `JSON.stringify` with sorted keys, so two entries compare by content, not key order. */\nfunction canonicalJson(value: unknown): string {\n return JSON.stringify(value, (_key, v) =>\n v && typeof v === \"object\" && !Array.isArray(v)\n ? Object.fromEntries(Object.entries(v).sort(([a], [b]) => (a < b ? -1 : a > b ? 1 : 0)))\n : v,\n );\n}\n\n/**\n * Compare what {@link renderMcpServerConfig} writes for each declared MCP server (the payload\n * file under `.skaile/assets/mcp-server/<name>/` and the entry in the driver target's MCP config)\n * with what is on disk. Reads only; nothing is fetched or written.\n *\n * - A payload file that is gone, has other bytes than the pinned sha256, or a payload directory\n * that holds files the server does not ship is drift.\n * - A config entry skaile owns (the `.mcp.json` ledger names it) that is gone or differs from the\n * declaration is drift; so is a missing entry of a locked server. A hand-written entry is\n * never compared: skaile does not own it.\n * - A server the last render skipped (see {@link readSkippedMcpServers}) has nothing written\n * and is not compared.\n *\n * @param opts.declarations - The declarations to compare; loaded from `projectDir` when absent.\n * @param opts.locked - Ids of the MCP servers the lock holds (a missing entry of those counts).\n * @returns One row per drifted server; empty for a target with no MCP config file.\n */\nexport async function mcpServerDrift(\n projectDir: string,\n driverTarget: DriverTarget,\n opts: { declarations?: McpServerDeclaration[]; locked?: ReadonlySet<string> } = {},\n): Promise<McpServerDrift[]> {\n const relConfig = TARGET_MCP_CONFIG[driverTarget];\n if (!relConfig) return [];\n const declarations = opts.declarations ?? (await loadMcpServerDeclarations(projectDir));\n const skippedNow = await readNotedSkips(projectDir, driverTarget);\n const managed = new Set(await readManagedIds(projectDir, driverTarget));\n let servers: Record<string, unknown> = {};\n try {\n const file = await readJsonStrict<McpJsonFile>(path.join(projectDir, relConfig));\n servers = (file?.mcpServers ?? {}) as Record<string, unknown>;\n } catch {\n // An unparseable config is the render's error to report; nothing is compared.\n return [];\n }\n const rel = (p: string): string => path.relative(projectDir, p).split(path.sep).join(\"/\");\n const out: McpServerDrift[] = [];\n for (const decl of declarations) {\n if (skippedNow[decl.id] !== undefined || skipReason(decl)) continue;\n const drift: McpServerDrift = { id: decl.id, missing: [], modified: [], extra: [] };\n\n const dest = decl.payload ? rawPayloadDest(decl.payload) : undefined;\n const dir = payloadDir(projectDir, decl.id);\n if (decl.payload && dest !== undefined && isPlainName(dest) && dir) {\n const file = rel(path.join(dir, dest));\n let actual: string | undefined;\n try {\n actual = createHash(\"sha256\")\n .update(await fs.readFile(path.join(dir, dest)))\n .digest(\"hex\");\n } catch {\n // Not on disk.\n }\n if (actual === undefined) {\n drift.missing.push(file);\n drift.payload = { file, pinned: decl.payload.sha256 };\n } else if (actual !== decl.payload.sha256) {\n drift.modified.push(file);\n drift.payload = { file, pinned: decl.payload.sha256, actual };\n }\n for (const name of await extraPayloadEntries(dir, dest)) {\n drift.extra.push(rel(path.join(dir, name)));\n }\n }\n\n const owned = managed.has(decl.id);\n const lockedHere =\n opts.locked?.has(decl.id) || opts.locked?.has(decl.id.split(\"/\").pop() ?? \"\");\n if (owned || lockedHere) {\n const expected = JSON.parse(JSON.stringify(buildEntry(decl, projectDir))) as unknown;\n const actual = Object.hasOwn(servers, decl.id) ? servers[decl.id] : undefined;\n const label = `${relConfig} entry \"${decl.id}\"`;\n if (actual === undefined) {\n drift.missing.push(label);\n drift.entry = { expected, actual };\n } else if (owned && canonicalJson(actual) !== canonicalJson(expected)) {\n drift.modified.push(label);\n drift.entry = { expected, actual };\n }\n }\n if (drift.missing.length + drift.modified.length + drift.extra.length > 0) out.push(drift);\n }\n return out;\n}\n\n/** Lines of `a` that `b` lacks, each prefixed (a small line diff of two pretty-printed JSON values). */\nfunction jsonLineDiff(from: unknown, to: unknown): string[] {\n const lines = (v: unknown): string[] =>\n v === undefined ? [] : JSON.stringify(v, null, 2).split(\"\\n\");\n const a = lines(from);\n const b = lines(to);\n return [\n ...a.filter((l) => !b.includes(l)).map((l) => `-${l}`),\n ...b.filter((l) => !a.includes(l)).map((l) => `+${l}`),\n ];\n}\n\n/**\n * A readable diff of one drifted MCP server: `-` lines are what the project has, `+` lines what\n * the declaration renders (the config entry), plus one line per payload file and extra file.\n */\nexport function mcpDriftDiff(drift: McpServerDrift): string {\n const out: string[] = [];\n if (drift.payload) {\n const { file, pinned, actual } = drift.payload;\n out.push(`--- ${file} (deployed)`, `+++ ${file} (pinned)`);\n out.push(\n actual === undefined ? \"-(file is missing)\" : `-sha256 ${actual}`,\n `+sha256 ${pinned}`,\n );\n }\n for (const f of drift.extra)\n out.push(`--- ${f} (deployed)`, \"+++ /dev/null (not part of the asset)\");\n if (drift.entry) {\n const file =\n drift.missing.concat(drift.modified).find((f) => f.includes(\" entry \")) ?? \"MCP config entry\";\n out.push(`--- ${file} (deployed)`, `+++ ${file} (declared)`);\n out.push(...jsonLineDiff(drift.entry.actual, drift.entry.expected));\n }\n return `${out.join(\"\\n\")}\\n`;\n}\n\n/**\n * The MCP servers the last render did not write to the driver target's config, with the reason\n * (`{ [id]: reason }`). Reads the `.skaile/mcp-skipped.json` ledger; empty for a target with no\n * MCP config file or when nothing was skipped.\n */\nexport const readSkippedMcpServers = readNotedSkips;\n\n/** The required `fields:` of a declaration that nothing sets: no `default`, no `env` entry of that key. */\nexport function unsetRequiredFields(decl: McpServerDeclaration): string[] {\n return (decl.fields ?? [])\n .filter((f) => f.required === true && f.default === undefined)\n .filter((f) => !(decl.env && Object.hasOwn(decl.env, f.key)))\n .map((f) => f.key);\n}\n\n/** What a server with unset required fields needs: follows the server's name in a line. */\nexport function requiredFieldsAdvice(id: string, keys: string[]): string {\n return `needs ${keys.join(\", \")} (required): set it with an mcp_servers entry (id: ${id}, env: …) in skaile.yaml`;\n}\n\n// ── Public API ───────────────────────────────────────────────────────────────\n\n/**\n * Render every MCP server declared for `projectDir` into `driverTarget`'s\n * native project-scope MCP config.\n *\n * Merge rules, in short:\n * - Entries skaile previously wrote (tracked in `.skaile/mcp-managed.json`) are\n * refreshed, or deleted once their declaration disappears.\n * - A hand-written entry with the same id is left untouched and warned about.\n * - Every other key of the config file survives verbatim.\n * - A project with no renderable servers and no prior state writes nothing.\n *\n * Unsupported driver targets (`codex`, `omp`) are a silent no-op.\n *\n * @param projectDir - Workspace root where `skaile.yaml` lives.\n * @param driverTarget - Coding agent whose native MCP config to write.\n * @param opts - Optional warning sink.\n * @returns What was written, removed and skipped.\n * @docLink packages/asset-manager/concepts#coding-agent-mcp-config\n */\nexport async function renderMcpServerConfig(\n projectDir: string,\n driverTarget: DriverTarget,\n opts?: RenderMcpConfigOptions,\n): Promise<RenderMcpConfigResult> {\n const warn = opts?.warn ?? ((m: string) => console.warn(`skaile: ${m}`));\n\n const relConfig = TARGET_MCP_CONFIG[driverTarget];\n if (!relConfig) return { written: false, servers: [], removed: [], skipped: [] };\n\n const configPath = path.join(projectDir, relConfig);\n\n const declarations = await loadMcpServerDeclarations(projectDir);\n const skipped: SkippedMcpServer[] = [];\n const renderable = new Map<string, McpConfigEntry>();\n // A skipped server is warned about once (p966): at the pass that first sees its reason, not\n // on every later `add`, `install` and `update`. The ledger drops it when the server renders\n // or is gone, so a server skipped again later warns again.\n const noted = await readNotedSkips(projectDir, driverTarget);\n for (const decl of declarations) {\n const reason =\n skipReason(decl) ??\n (await ensurePayload(projectDir, decl, opts?.fetchPayload ?? defaultFetchPayload));\n if (reason) {\n skipped.push({ id: decl.id, reason });\n if (noted[decl.id] !== reason) {\n warn(`MCP server \"${decl.id}\" not written to ${relConfig}: ${reason}`);\n }\n continue;\n }\n renderable.set(decl.id, buildEntry(decl, projectDir));\n }\n await writeNotedSkips(projectDir, driverTarget, noted, skipped);\n\n const managedIds = await readManagedIds(projectDir, driverTarget);\n const existingFile = await readJsonStrict<McpJsonFile>(configPath);\n\n // Nothing to write and nothing ever written: leave the project untouched\n // rather than creating an empty `.mcp.json` / `.skaile/` dir.\n if (renderable.size === 0 && managedIds.length === 0 && !existingFile) {\n return { path: configPath, written: false, servers: [], removed: [], skipped };\n }\n\n const file = existingFile ?? {};\n const existingServers = (file.mcpServers ?? {}) as Record<string, unknown>;\n const { next, owned, removed } = mergeServers(\n existingServers,\n renderable,\n managedIds,\n warn,\n relConfig,\n );\n for (const id of removed) await removePayloadDir(projectDir, id);\n // A server the config now carries for the first time that cannot start without a setting: say\n // so at that pass (`doctor` and `check` keep listing it).\n for (const decl of declarations) {\n if (!owned.includes(decl.id) || managedIds.includes(decl.id)) continue;\n const unset = unsetRequiredFields(decl);\n if (unset.length > 0) warn(`MCP server \"${decl.id}\" ${requiredFieldsAdvice(decl.id, unset)}`);\n }\n\n // Claim ownership BEFORE writing the config. A crash between the two writes\n // must leave a ledger entry with no config entry (self-healing — the next\n // pass simply re-adds it), never a config entry with no ledger entry (which\n // would be misread as hand-written and disowned forever).\n const ledgerStale = JSON.stringify(owned) !== JSON.stringify(managedIds);\n if (ledgerStale) await writeManagedIds(projectDir, driverTarget, owned);\n\n // Never conjure an empty `.mcp.json` into a project that has none: with\n // nothing to write and no file to update, the ledger reconciliation above is\n // the whole job.\n if (Object.keys(next).length === 0 && !existingFile) {\n return { path: configPath, written: false, servers: owned, removed, skipped };\n }\n\n if (!ledgerStale && JSON.stringify(next) === JSON.stringify(existingServers) && existingFile) {\n return { path: configPath, written: false, servers: owned, removed, skipped };\n }\n\n // The last skaile-owned entry left and the file holds nothing else: it is skaile's own\n // creation, so it goes with its ledger (no empty `.mcp.json` stays behind).\n if (\n removed.length > 0 &&\n Object.keys(next).length === 0 &&\n Object.keys(file).every((k) => k === \"mcpServers\")\n ) {\n await fs.rm(configPath, { force: true });\n if (owned.length === 0) await removeEmptyLedger(projectDir);\n return { path: configPath, written: true, servers: owned, removed, skipped };\n }\n\n await writeJson(configPath, { ...file, mcpServers: next });\n\n return { path: configPath, written: true, servers: owned, removed, skipped };\n}\n","/**\n * @skaile/asset-manager — programmatic AI asset management API.\n *\n * Manages project-local repositories, dependency resolution, deployment,\n * lock files, patches, and contribution workflows.\n *\n * Usage:\n * import { AssetManager } from \"@skaile/workspaces/asset-manager\"\n * const am = new AssetManager({ projectDir: \"/path/to/project\" })\n * await am.install()\n */\n\nimport { spawnSync } from \"node:child_process\";\nimport type { Stats } from \"node:fs\";\nimport {\n existsSync,\n lstatSync,\n mkdirSync,\n readdirSync,\n readFileSync,\n rmSync,\n unlinkSync,\n writeFileSync,\n} from \"node:fs\";\nimport { dirname, join, posix, relative, resolve, sep } from \"node:path\";\nimport type {\n AgentInstanceConfig,\n AiComponent,\n AssetRef,\n CatalogEntry,\n DriverTarget,\n LockEntry,\n LockFile,\n LockFileEntry,\n OverrideEntry,\n ProvenanceCandidate,\n ProvenanceIndex,\n SkWorkspaceConfig,\n SourceClone,\n SourceDeclaration,\n SourceEntry,\n StoreEntry,\n StoreFetcher,\n} from \"@skaile/workspaces/core\";\nimport {\n discoverAssetsInTree,\n flowFileNameError,\n invalidSemverMessage,\n isManifestMode,\n readManifestSourceConfig,\n SEMVER_RE,\n} from \"@skaile/workspaces/discovery\";\nimport type { IAssetKindRegistry } from \"@skaile/workspaces/plugins\";\nimport {\n agentSourceCacheDir,\n assetRefToStr,\n buildLibraryLockEntries,\n buildLockFile,\n buildProvenanceIndex,\n checkRepoStatus,\n coerceVersion,\n computeHash,\n parseFrontmatter,\n readAssetBody,\n applyPatch as coreApplyPatch,\n dedupeRequirements,\n DEFAULT_AGENT_INSTANCE_ID,\n deployedBase,\n deployedDir,\n deployedPaths,\n effectiveAgentInstances,\n depToStr,\n ensureRepo,\n extractForPatch,\n factoryAssetRoots,\n generatePatch,\n getGlobalCacheDir,\n getRepoCommit,\n GLOBAL_INSTALL_DIR_NAME,\n LOCK_SCHEMA_VERSION,\n globalCacheRoot,\n globalSkaileDir,\n isCommitOnRemote,\n isDeployed,\n loadMcpServerDeclarations,\n loadSkPublishManifest,\n matchPin,\n MAX_PRESET_DEPTH,\n mergeLockFile,\n migrateLegacyDir,\n parseAssetRef,\n parseAssetRefLoose,\n parseDep,\n parseRequires,\n PresetDepthError,\n readLinks,\n readLock,\n resolveAgentDefinitionDir,\n resolveAll,\n resolveAsset,\n resolveConfiguredDriverTarget,\n resolveGlobalHarnesses,\n SUPPORTED_DRIVER_TARGETS,\n resolveGlobalSkWorkspaceConfig,\n resolveRuntimeAssets,\n resolveSkWorkspaceConfig,\n resyncLockSources,\n savePatch,\n scanDirectory,\n scanRepo,\n SKAILE_YAML_DEFAULT,\n slugifyAssetName,\n sourceCacheKey,\n sourceShortName,\n verifyLock,\n writeLock,\n} from \"@skaile/workspaces/core\";\nimport type { McpServerDeclaration, PresetExpansion, ResolveResult } from \"@skaile/workspaces/core\";\nimport type { AssetDefinition, AssetFetcher, Library } from \"@skaile/workspaces/library\";\nimport {\n CatalogHttpError,\n describeCatalogError,\n missingLibraryDirMessage,\n OfflineError,\n RemoteCatalogSource,\n renamedLibraryName,\n storeManifestFile,\n resolveConfig,\n resolveLibraryDir,\n scanUnlistedAssets,\n unregisteredLibraryNames,\n} from \"@skaile/workspaces/library\";\nimport { listAssetFiles } from \"@skaile/workspaces/core/publish-manifest\";\nimport { parseFlowDefinition } from \"@skaile/workspaces/factory-assets/connectors/flow/contract\";\nimport type { InstallManifest } from \"@skaile/workspaces/types\";\nimport { isScaffoldBody, isScaffoldDescription } from \"@skaile/workspaces/types/manifests\";\nimport { gt as semverGt } from \"semver\";\nimport { parse as parseYaml, stringify as stringifyYaml } from \"yaml\";\nimport { commitChanges } from \"./contrib.js\";\nimport type { HistoryEntry } from \"./history.js\";\nimport { appendHistory, clearHistory, getRecentHistory } from \"./history.js\";\nimport {\n type InstalledAgentInstance,\n installAgentInstances,\n instanceRenderedAgentNames,\n removeAgentInstanceRenderings,\n renderedInstanceFiles,\n unboundAgentInstances,\n} from \"./install-instances.js\";\nimport type { DeployOptions, ScaffoldOptions } from \"./installer.js\";\nimport { CODEX_IDENTITY_DIR } from \"./renderers.js\";\nimport {\n assertNoLibrarySymlinks,\n canonicalEntryRef,\n createScaffold,\n type DeployableEntry,\n type DeployedDrift,\n deployAll,\n deployedAssetDrift,\n diffDeployedAgent,\n installTargetOf,\n readKeptLegacyCopies,\n removeAsset,\n writeKeptLegacyCopies,\n} from \"./installer.js\";\nimport {\n type McpServerDrift,\n mcpDriftDiff,\n mcpServerDrift,\n readSkippedMcpServers,\n renderMcpServerConfig,\n requiredFieldsAdvice,\n unsetRequiredFields,\n} from \"./mcp-config.js\";\n\n/**\n * Normalize a git remote URL to a comparable identity so the same repo declared\n * in different syntaxes (`https://…`, `git@host:…`, trailing `/`, `.git` suffix,\n * case) compares equal. Used to dedupe the implicit factory source against an\n * explicit user declaration.\n */\nexport function normalizeRepoUrl(url: string): string {\n return url\n .trim()\n .replace(/^git@([^:]+):/, \"https://$1/\") // git@host:org/repo → https://host/org/repo\n .replace(/^[a-z]+:\\/\\//i, \"\") // drop scheme\n .replace(/\\/+$/, \"\")\n .replace(/\\.git$/i, \"\")\n .replace(/\\/+$/, \"\")\n .toLowerCase();\n}\n\n/**\n * `url` without anything secret, for a lock that is committed. A `scheme://` URL loses its\n * password, its query and its fragment (tokens travel there); an http(s) URL loses its user\n * name too, an ssh-style one keeps a bare user name (`ssh://git@host/…` holds no secret). A\n * `scheme://` URL the parser rejects (an unescaped `/` in the userinfo) loses everything up to\n * its last `@`. A path or an scp-style `git@host:path` has no secret and stays as written.\n */\nfunction withoutUrlSecrets(url: string): string {\n if (!/^[a-z][a-z0-9+.-]*:\\/\\//i.test(url)) return url;\n try {\n const parsed = new URL(url);\n if (parsed.protocol === \"http:\" || parsed.protocol === \"https:\" || parsed.password) {\n parsed.username = \"\";\n }\n parsed.password = \"\";\n parsed.search = \"\";\n parsed.hash = \"\";\n return parsed.toString();\n } catch {\n return url.replace(/[?#].*$/, \"\").replace(/^([a-z][a-z0-9+.-]*:\\/\\/).*@/i, \"$1\");\n }\n}\n\n/**\n * The remote URL a lock records for `library`: its git remote without secrets (see\n * {@link withoutUrlSecrets}), or `undefined` for a library without a remote (a local library).\n */\nfunction libraryRemoteUrl(library: Library): string | undefined {\n const config = library.backendConfig;\n if (library.backend !== \"git\" || !(\"url\" in config) || typeof config.url !== \"string\") {\n return undefined;\n }\n const url = config.url.trim();\n return url ? withoutUrlSecrets(url) : undefined;\n}\n\n/**\n * Absolute path to a source URL's curated store manifest\n * (`~/.skaile/store/manifests/<slug>.yaml`, authored by `source manifest init`).\n * Keyed by the collision-free {@link storeManifestSlug}, matching the CLI writer\n * + the `source add` overlay reader, so the provenance walker honors the same\n * curated inventory `search --local` shows.\n */\nfunction storeOverlayPathForUrl(url: string): string {\n return storeManifestFile(url);\n}\n\n/**\n * Declared pin per source cache key. Every entry point that hands `sources:`\n * declarations to `ensureRepo` MUST pass these through — an unpinned managed\n * clone is pulled to the branch tip, so a dropped pin silently moves a pinned\n * source (and, from `lock()`, launders the branch-tip SHA into the lockfile).\n */\nfunction pinsBySlug(sources: SourceEntry[]): Map<string, string | undefined> {\n return new Map(sources.map((s) => [sourceCacheKey(s.url), s.pin]));\n}\n\n/** Primary manifest filename for each asset kind (the deploy entry point). */\nconst MD_BY_KIND: Record<string, string> = {\n skill: \"SKILL.md\",\n agent: \"AGENT.md\",\n \"mcp-server\": \"MCP.md\",\n connector: \"CONNECTOR.md\",\n prompt: \"PROMPT.md\",\n contract: \"CONTRACT.md\",\n};\n\n/**\n * Pick a candidate's primary manifest file from its `files[]`. Fixed-name kinds\n * (skill/agent/contract/…) match their `MD_BY_KIND` basename; `prompt` and\n * `flow` use their `<name>.prompt.md` / `<name>.flow.{yaml,json}` suffixes\n * (these have no fixed basename, so an exact-name match alone would miss them).\n */\nfunction matchManifestPath(kind: string, paths: readonly string[]): string | undefined {\n const exact = MD_BY_KIND[kind];\n if (exact) {\n const hit = paths.find((p) => p.endsWith(exact));\n if (hit) return hit;\n }\n if (kind === \"preset\") return paths.find((p) => p.endsWith(\".preset.yaml\"));\n if (kind === \"prompt\") return paths.find((p) => p.endsWith(\".prompt.md\"));\n if (kind === \"flow\") {\n return paths.find((p) => p.endsWith(\".flow.yaml\") || p.endsWith(\".flow.json\"));\n }\n return undefined;\n}\n\n/**\n * Drop a publisher scope so a declared `@pub/name` compares equal to an on-disk\n * / declared `name` (both directions are checked at the call sites).\n */\nfunction unscopedName(x: string): string {\n return x.includes(\"/\") ? x.split(\"/\").pop()! : x;\n}\n\n/**\n * Longest common leading directory prefix across `paths` (slash-joined, no\n * trailing slash). Mirrors the prefix-strip `installFromManifest` flat mode\n * applies, so a staged asset's manifest can be located deterministically.\n */\nfunction commonDirPrefix(paths: readonly string[]): string {\n if (paths.length === 0) return \"\";\n const dirs = paths.map((p) => p.split(\"/\").slice(0, -1));\n let common = dirs[0]!;\n for (let i = 1; i < dirs.length && common.length > 0; i++) {\n const segs = dirs[i]!;\n let n = 0;\n while (n < common.length && n < segs.length && common[n] === segs[n]) n++;\n common = common.slice(0, n);\n }\n return common.join(\"/\");\n}\n\n/**\n * An asset's `paths` relative to its primary manifest's directory, `manifestRel`\n * (both in one coordinate space), dropping anything outside it. This is the file\n * set a deploy copies: exactly what the lock records for the asset, so a deployed\n * tree never differs from its lock (a `.gitignore` or a `resources/` dir the kind's\n * convention filter would not pick is still the asset's).\n */\nfunction filesUnderManifestDir(paths: readonly string[], manifestRel: string): string[] {\n const manifestDir = posix.dirname(manifestRel);\n return paths\n .map((p) => posix.relative(manifestDir, p))\n .filter((rel) => rel !== \"\" && !rel.startsWith(\"..\"));\n}\n\n/**\n * The files a source- or store-origin lock entry lists, relative to the deployed asset directory\n * (the primary manifest's directory): the file set a restore writes and `check` compares. Files\n * the lock lists outside the manifest's directory are not part of the deployed copy.\n */\nfunction lockedAssetFiles(\n kind: string,\n files: ReadonlyArray<{ path: string; sha256: string }>,\n): Array<{ rel: string; sha256: string }> {\n const manifestRel =\n matchManifestPath(\n kind,\n files.map((f) => f.path),\n ) ?? files[0]?.path;\n if (!manifestRel) return [];\n const manifestDir = posix.dirname(manifestRel);\n return files.flatMap((f) => {\n const rel = posix.relative(manifestDir, f.path);\n return rel === \"\" || rel.startsWith(\"..\") ? [] : [{ rel, sha256: f.sha256 }];\n });\n}\n\n/** A GitHub repository URL: the origin of a store asset (no `sources:` entry declares it). */\nconst GITHUB_REPO_URL = /github\\.com[/:]/i;\n\n/** A git remote (https, ssh, scp form): a lock `source.url` that a `sources:` entry registers, not a local path. */\nconst GIT_URL = /^(?:[a-z][a-z0-9+.-]*:\\/\\/|[\\w.-]+@[\\w.-]+:)/i;\n\n/**\n * Index lock entries by their `<kind>:<name>` suffix for deployed-asset lookup.\n * Only entries whose canonical key fully parses (kind, name, publisher, version)\n * are included.\n */\nfunction indexLockByKindName(\n lock: LockFile | null,\n): Map<string, { publisher: string; version: string; url: string; library: boolean }> {\n const lockByKindName = new Map<\n string,\n { publisher: string; version: string; url: string; library: boolean }\n >();\n for (const [key, entry] of Object.entries(lock?.assets ?? {})) {\n const parsed = parseCanonicalLockKey(key);\n if (parsed.kind && parsed.name && parsed.publisher && parsed.version) {\n lockByKindName.set(`${parsed.kind}:${parsed.name}`, {\n publisher: parsed.publisher,\n version: parsed.version,\n url: entry.source?.url ?? \"\",\n library: entry.library !== undefined,\n });\n }\n }\n return lockByKindName;\n}\n\n/**\n * Snapshot of the local index's library side: the registered libraries and every\n * indexed asset definition. Library assets are bytes on disk; the index is the\n * authority on their *version* (a `skaile.manifest.yaml` `assets[].version` can\n * differ from the asset's own frontmatter) and content hash.\n */\ninterface LibraryIndexSnapshot {\n libraries: Library[];\n defs: AssetDefinition[];\n}\n\n/**\n * Commits in `from..to` of the clone at `repoDir`. The caller already knows the\n * two commits differ: a lock that is ahead of the clone (git exits 0 with `0`) is\n * not behind, but an unreadable range (shallow clone, rewritten history, a commit\n * that is not a plain hex id) still counts as one commit. Results are memoised in\n * `cache` per `(from, to)` pair; one `outdated()` call owns that map.\n */\nfunction commitsBetween(\n repoDir: string,\n from: string,\n to: string,\n cache: Map<string, number>,\n): number {\n const key = `${from}..${to}`;\n const hit = cache.get(key);\n if (hit !== undefined) return hit;\n let count = 1;\n // `from` comes from the committed lock file: never let it reach git's argv as an option.\n if (COMMIT_ID.test(from) && COMMIT_ID.test(to)) {\n const r = spawnSync(\"git\", [\"-C\", repoDir, \"rev-list\", \"--count\", key], {\n encoding: \"utf8\",\n stdio: \"pipe\",\n });\n if (r.status === 0) {\n const n = Number.parseInt(r.stdout.trim(), 10);\n if (Number.isFinite(n) && n >= 0) count = n;\n }\n }\n cache.set(key, count);\n return count;\n}\n\nconst COMMIT_ID = /^[0-9a-f]{7,64}$/;\n\n/**\n * Commits in `from..to` that touch `dir` (an asset's directory relative to the repo root), or\n * `null` when git cannot tell (an unknown commit in a shallow clone, a malformed id): the\n * caller then keeps the per-repository count. Memoised in `cache`.\n */\nfunction commitsTouching(\n repoDir: string,\n from: string,\n to: string,\n dir: string,\n cache: Map<string, number>,\n): number | null {\n if (!COMMIT_ID.test(from) || !COMMIT_ID.test(to)) return null;\n if (from === to) return 0;\n const key = `${from}..${to} -- ${dir}`;\n const hit = cache.get(key);\n if (hit !== undefined) return hit;\n const r = spawnSync(\"git\", [\"-C\", repoDir, \"rev-list\", \"--count\", `${from}..${to}`, \"--\", dir], {\n encoding: \"utf8\",\n stdio: \"pipe\",\n });\n const n = r.status === 0 ? Number.parseInt(r.stdout.trim(), 10) : Number.NaN;\n if (!Number.isFinite(n) || n < 0) return null;\n cache.set(key, n);\n return n;\n}\n\n/** The directory of a lock entry's primary manifest relative to the repo root (`.` at the root). */\nfunction lockedAssetDir(kind: string, files: ReadonlyArray<{ path: string }>): string {\n const manifestRel =\n matchManifestPath(\n kind,\n files.map((f) => f.path),\n ) ?? files[0]?.path;\n return manifestRel ? posix.dirname(manifestRel) : \".\";\n}\n\n/**\n * `kind:name` → sha256 of every asset in the library at `libPath`, hashed from\n * the files on disk by the same discovery pass `skaile library index` runs. The\n * publisher only affects refs, never the hash, so a manifest-less library gets a\n * placeholder. Memoised per root in `cache` for one lock/restore pass.\n */\nfunction libraryDiskHashes(\n libPath: string,\n cache: Map<string, Map<string, string>>,\n registry: IAssetKindRegistry,\n): Map<string, string> {\n let hashes = cache.get(libPath);\n if (!hashes) {\n const sourceConfig = readManifestSourceConfig(libPath, \"library\") ?? {\n version: 1,\n publisher_default: \"@library\",\n default_ref: \"main\",\n publisher_overrides: [],\n dev_paths: [],\n };\n hashes = new Map(\n discoverAssetsInTree(libPath, { sourceConfig, registry }).assets.map((a) => [\n `${a.kind}:${a.name}`,\n a.sha256,\n ]),\n );\n cache.set(libPath, hashes);\n }\n return hashes;\n}\n\n/** `true` when the library's own `skaile.manifest.yaml` has an `assets:` list, even an empty one. */\nfunction manifestFileHasAssetsArray(libPath: string): boolean {\n try {\n const doc = parseYaml(readFileSync(join(libPath, \"skaile.manifest.yaml\"), \"utf8\")) as {\n assets?: unknown;\n } | null;\n return Array.isArray(doc?.assets);\n } catch {\n return false;\n }\n}\n\n/**\n * `true` when the library at `libPath` has a first-party `skaile.manifest.yaml` that\n * carries an `assets:` inventory (`library index` writes one, even an empty one) and none\n * of its entries' `root:` holds `entry`'s manifest file. Such an asset is on disk yet not\n * indexed: a deploy would copy only the kind's default file set and drop its helper\n * files (or deploy an asset `library index` refused), so `add` refuses and names\n * `skaile library index`. A library with no manifest file, a manifest without `assets:`\n * (glob mode), or a curated `source:` manifest, has no inventory to be missing from.\n */\nfunction isUnlistedLibraryAsset(entry: { source: string }, libPath: string): boolean {\n const manifest = loadSkPublishManifest(libPath);\n const listed = manifest?.assets ?? [];\n if (!manifest || manifest.source) return false;\n if (listed.length === 0 && !manifestFileHasAssetsArray(libPath)) return false;\n const file = resolve(entry.source);\n return !listed.some((a) => {\n if (!a.root || a.source) return false;\n const root = resolve(libPath, a.root);\n return file === root || file.startsWith(root + sep);\n });\n}\n\n/**\n * Give a scanned library entry the file set its content hash covers, so a deploy\n * copies exactly those bytes (every file under the manifest entry's `root:`, or\n * its explicit `files:`) instead of the kind's convention filter, which drops a\n * skill's `build.py` / `template.html` / `example.data/`. Same discovery pass as\n * {@link libraryDiskHashes} and `skaile library publish`, so the deployed tree\n * never differs from what the lock hashed. A library without `assets:` in its\n * `skaile.manifest.yaml` (glob mode), or an entry discovery rejected, keeps the\n * kind's default filter — the entry is returned untouched.\n *\n * @param cache - Per library root: manifest path → asset files relative to the\n * manifest's directory. Memoised for one resolution pass.\n */\nfunction withLibraryFiles<E extends DeployableEntry>(\n entry: E,\n libPath: string,\n cache: Map<string, Map<string, string[]>>,\n registry: IAssetKindRegistry,\n): E {\n let byManifest = cache.get(libPath);\n if (!byManifest) {\n byManifest = new Map();\n const sourceConfig = readManifestSourceConfig(libPath, \"library\");\n if (sourceConfig && isManifestMode(sourceConfig)) {\n for (const a of discoverAssetsInTree(libPath, { sourceConfig, registry }).assets) {\n const { assetRoot, files } = a.fileFilter;\n byManifest.set(\n resolve(a.manifestPath),\n filesUnderManifestDir(files, relative(assetRoot, a.manifestPath).split(sep).join(\"/\")),\n );\n }\n }\n cache.set(libPath, byManifest);\n }\n const files = byManifest.get(resolve(entry.source));\n if (files) entry.files = files;\n return entry;\n}\n\n/**\n * The highest-versioned indexed definition of `kind:@publisher/name` held by the\n * library named `libraryName`, or `undefined` when the library is unknown to the\n * index or has not indexed the asset. Stored publishers may carry the `@` scope\n * sigil, so both sides are compared bare.\n */\nfunction newestLibraryDef(\n snap: LibraryIndexSnapshot | null,\n libraryName: string,\n id: { kind: string; publisher: string; name: string },\n): AssetDefinition | undefined {\n const lib = snap?.libraries.find((l) => l.name === libraryName);\n if (!snap || !lib) return undefined;\n let best: AssetDefinition | undefined;\n for (const d of snap.defs) {\n if (d.libraryId !== lib.id || d.kind !== id.kind || d.name !== id.name) continue;\n if (d.publisher.replace(/^@/, \"\") !== id.publisher) continue;\n if (!best || semverGt(coerceVersion(d.version), coerceVersion(best.version))) best = d;\n }\n return best;\n}\n\n/** Prefix of the pseudo-version of an asset that declares no version (`0.0.0-sha.<commit>`). */\nconst PSEUDO_VERSION_PREFIX = \"0.0.0-sha.\";\n\nfunction isPseudoVersion(version: string): boolean {\n return version.startsWith(PSEUDO_VERSION_PREFIX);\n}\n\n/**\n * THE version of an asset held by the library named `libraryName`: the one its file declares;\n * for an asset without one in a source clone (a `reader` library with a remote url) the repo\n * commit pseudo-version `0.0.0-sha.<commit>`, as the source pass keys it and `search` lists it\n * (p967); otherwise the indexed one. `add`, the lock, `install --locked`, `check` and\n * `outdated` all ask here, so a version-less asset has one version everywhere.\n */\nfunction libraryAssetVersion(\n snap: LibraryIndexSnapshot | null | undefined,\n libraryName: string,\n id: { kind: string; publisher: string; name: string },\n declared: string | undefined,\n): string | undefined {\n if (declared) return declared;\n const lib = snap?.libraries.find((l) => l.name === libraryName);\n if (lib?.ownership === \"reader\" && \"url\" in lib.backendConfig) {\n const commit = getRepoCommit(lib.path);\n if (commit) return `${PSEUDO_VERSION_PREFIX}${commit.slice(0, 7)}`;\n }\n return newestLibraryDef(snap ?? null, libraryName, id)?.version;\n}\n\n/** One row of {@link AssetManager.libraryHolders}: a library holding a ref at one version. */\nexport interface LibraryHolder {\n library: string;\n version: string;\n description: string;\n /** `true` for the holder `add <ref>` deploys. */\n picked: boolean;\n}\n\n/**\n * One origin that holds a ref, see {@link AssetManager.refOrigins}: the bundled factory\n * source, a project source clone, or a registered library.\n */\nexport interface RefOrigin {\n kind: \"factory\" | \"source\" | \"library\";\n /** `factory`, the source's short name, or the library name. */\n label: string;\n version: string;\n description: string;\n}\n\n/** Kind, name and bare publisher of an asset, as far as known; compared for deploy-folder clashes. */\ninterface FolderIdentity {\n kind?: string;\n name?: string;\n publisher?: string;\n}\n\n/** What `update` knows about the locked libraries, so an equal-version tie keeps the locked source. */\ninterface PreferLocked {\n /** `kind:publisher/name` → the library name its lock entry resolves to here ({@link AssetManager.lockedLibraryNames}). */\n libraries: ReadonlyMap<string, string | null>;\n /** `kind:publisher/name` → the sha256 the lock recorded for the library copy. */\n shas: ReadonlyMap<string, string>;\n}\n\n/**\n * Sort order of library candidates for one ref: highest version first; an equal version\n * goes to the default library, then to the candidates `rank` puts first (lower is better),\n * then by library name — so the pick never depends on scan order.\n */\nfunction libraryPreference(\n isDefaultLib: Map<string, boolean>,\n rank?: (c: { entry: CatalogEntry; library: string }) => number,\n): (\n a: { entry: CatalogEntry; library: string },\n b: { entry: CatalogEntry; library: string },\n) => number {\n return (a, b) => {\n const va = coerceVersion(a.entry.version ?? \"\");\n const vb = coerceVersion(b.entry.version ?? \"\");\n if (semverGt(va, vb)) return -1;\n if (semverGt(vb, va)) return 1;\n const da = isDefaultLib.get(a.library) ? 0 : 1;\n const db = isDefaultLib.get(b.library) ? 0 : 1;\n if (da !== db) return da - db;\n const byRank = rank ? rank(a) - rank(b) : 0;\n return byRank || a.library.localeCompare(b.library);\n };\n}\n\n/** Library leg of a resolution: matched deploy entries, the refs they cover, and their library. */\ninterface LibraryResolution {\n entries: DeployableEntry[];\n resolved: Set<string>;\n libraryOf: Map<CatalogEntry, string>;\n}\n\n/** Where a ref that misses went when its publisher changed: see {@link AssetManager.publisherChangeHints}. */\ninterface PublisherChange {\n /** The lock holds the same kind + name under this other publisher, from the library that now publishes it elsewhere. */\n lockedAs?: string;\n /** A registered library holds the same kind + name under another publisher: its ref and library name. */\n moved?: { ref: string; library?: string };\n}\n\n/**\n * Qualify a dependency ref with `fallback` (the declaring asset's publisher) when it\n * names none: `name` / `kind:name[#pin]` become `kind:@fallback/name[#pin]`. A ref\n * that already carries a scope is returned unchanged. Same rule `resolveAll` applies\n * to a source/store candidate's transitive deps.\n */\nfunction qualifyDepRef(ref: string, fallback: string): string {\n const hash = ref.indexOf(\"#\");\n const head = hash === -1 ? ref : ref.slice(0, hash);\n if (head.includes(\"@\") || !fallback) return ref;\n const pin = hash === -1 ? undefined : ref.slice(hash + 1) || undefined;\n const colon = head.indexOf(\":\");\n return assetRefToStr({\n kind: colon === -1 ? \"skill\" : head.slice(0, colon),\n name: colon === -1 ? head : head.slice(colon + 1),\n publisher: fallback,\n pin,\n });\n}\n\n/**\n * The canonical refs among `deployed` whose library asset body is still the untouched\n * `library create` scaffold (the check `validate` and the publish plan fail, p926). An entry whose\n * file cannot be read, or that has no markdown body, is never reported.\n */\nfunction scaffoldBodyRefs(entries: readonly CatalogEntry[], deployed: readonly string[]): string[] {\n const out: string[] = [];\n for (const e of entries) {\n const ref = canonicalEntryRef(e);\n if (!deployed.includes(ref) || !e.source) continue;\n try {\n if (isScaffoldBody(e.kind, readAssetBody(e.source, readFileSync(e.source, \"utf8\")))) {\n out.push(ref);\n }\n } catch {\n // A source that cannot be read has no body to flag.\n }\n }\n return out;\n}\n\n/**\n * The canonical refs among `deployed` whose library asset `description:` is still the untouched\n * `library create` placeholder (the check `validate` and the publish plan fail, p926).\n */\nfunction scaffoldDescriptionRefs(\n entries: readonly CatalogEntry[],\n deployed: readonly string[],\n): string[] {\n return entries\n .filter(\n (e) =>\n deployed.includes(canonicalEntryRef(e)) && isScaffoldDescription(e.kind, e.description),\n )\n .map((e) => canonicalEntryRef(e));\n}\n\n/**\n * Every dependency a library asset declares, as publisher-qualified refs: bundle\n * `dependencies` (raw refs) plus `requires` (as parsed by `parseRequires`, which also\n * carries a manifest entry's `dependencies`). A dependency without a publisher inherits\n * the declaring asset's (same-library assumption); `@publisher/name` ones keep theirs.\n */\nfunction libraryEntryDepRefs(e: CatalogEntry): string[] {\n const publisher = e.publisher ?? \"\";\n const refs = new Set<string>();\n for (const d of e.dependencies ?? []) {\n if (d) refs.add(qualifyDepRef(d, publisher));\n }\n for (const r of e.requires ?? []) {\n const p = r.publisher ?? publisher;\n if (p) refs.add(assetRefToStr({ kind: r.kind, name: r.name, publisher: p, pin: r.pin }));\n }\n return [...refs];\n}\n\n/**\n * Refuse a `flow` entry whose file the flow engine rejects (the parse `loadFlow` runs). A file\n * that cannot be read is left to the deploy, which names it.\n *\n * @throws One line naming the flow and the engine's first complaints.\n */\nfunction assertFlowsLoad(entries: readonly CatalogEntry[]): void {\n for (const e of entries) {\n if (e.kind !== \"flow\" || !e.source) continue;\n let file = e.source;\n let authored: unknown;\n try {\n if (lstatSync(file).isDirectory()) {\n const inside = [`${e.name}.flow.yaml`, `${e.name}.flow.yml`, `${e.name}.flow.json`]\n .map((n) => join(file, n))\n .find((p) => existsSync(p));\n if (!inside) continue;\n file = inside;\n }\n const raw = readFileSync(file, \"utf8\");\n authored = /\\.json$/i.test(file) ? JSON.parse(raw) : parseYaml(raw);\n } catch {\n continue;\n }\n const parsed = parseFlowDefinition(authored);\n if (parsed.ok) continue;\n const details = parsed.errors\n .slice(0, 3)\n .map((issue) => `${issue.path || \"<root>\"}: ${issue.message}`)\n .join(\"; \");\n throw new Error(\n `${canonicalEntryRef(e).split(\"#\")[0]} is not a flow the flow engine can load (${details}) — nothing was added; fix the flow in its library or source`,\n );\n }\n}\n\n/** `<publisher>/<kind>:<name>` identity of a publisher-qualified ref; `null` when unparseable or unqualified. */\nfunction refIdentity(ref: string): string | null {\n try {\n const p = parseAssetRef(ref);\n return p.publisher ? `${p.publisher}/${p.kind}:${p.name}` : null;\n } catch {\n return null;\n }\n}\n\n/** Derive an asset's sync status from its repository's live status. */\nfunction computeSyncStatus(repoStatus: RepoStatusInfo | undefined): string {\n if (!repoStatus) return \"unknown\";\n if (repoStatus.kind === \"local\") return \"local\";\n if (repoStatus.error) return \"error\";\n if (repoStatus.upToDate) return \"synced\";\n return \"outdated\";\n}\n\n/**\n * Group overview entries by publisher, sort publishers alphabetically, and sort\n * entries within each publisher by kind then name.\n */\nfunction groupAndSortByPublisher(entries: OverviewEntry[]): Map<string, OverviewEntry[]> {\n const byPublisher = new Map<string, OverviewEntry[]>();\n for (const e of entries) {\n if (!byPublisher.has(e.publisher)) byPublisher.set(e.publisher, []);\n byPublisher.get(e.publisher)!.push(e);\n }\n\n const sorted = new Map<string, OverviewEntry[]>();\n for (const key of [...byPublisher.keys()].sort()) {\n sorted.set(\n key,\n byPublisher\n .get(key)!\n .sort((a, b) =>\n a.kind !== b.kind ? a.kind.localeCompare(b.kind) : a.name.localeCompare(b.name),\n ),\n );\n }\n return sorted;\n}\n\n/**\n * Parse a canonical lock key (`<kind>:@<publisher>/<name>#<version>`) into its\n * parts. The lock key is a canonical asset ref, so this delegates to the one ref\n * parser; `AssetRef.pin` is exposed as `version` so the callers' destructuring is\n * unchanged. Stays total — callers rely on `{}`-then-`continue`, but `parseAssetRef`\n * throws, so a genuinely malformed key is caught and returned as `{}`.\n *\n * A **content-sha pseudo-version** key (`#0.0.0-sha.<hash>`, the version every\n * manifest-less source gets) fails `parseAssetRef`'s canonical-pin check. Dropping\n * it to `{}` would strip the identity, so the install reconcile / state machine\n * could never act on such an asset (it silently survives a remove-from-yaml). Fall\n * back to parsing the bare identity, keeping the raw pin as `version`.\n *\n * @internal Exported for unit tests; not part of the stable public surface.\n */\nexport function parseCanonicalLockKey(key: string): {\n publisher?: string;\n kind?: string;\n name?: string;\n version?: string;\n} {\n try {\n const ref = parseAssetRef(key);\n return {\n publisher: ref.publisher,\n kind: ref.kind,\n name: ref.name,\n version: ref.pin,\n };\n } catch {\n // Reuse the shared pin-tolerant parse for the identity; keep the raw pin.\n const loose = parseAssetRefLoose(key);\n if (!loose) return {};\n const hash = key.indexOf(\"#\");\n return {\n publisher: loose.publisher,\n kind: loose.kind,\n name: loose.name,\n version: hash < 0 ? undefined : key.slice(hash + 1),\n };\n }\n}\n\n/**\n * Bare asset name of a soft-dep target ref (`@pub/name@ver` → `name`); splits the\n * version off the *last* `@` since the leading one is the scope sigil. The\n * present-check matches on this bare name only (under-reports — the safe direction).\n */\nexport function softDepName(ref: string): string {\n const at = ref.lastIndexOf(\"@\");\n const base = at > 0 ? ref.slice(0, at) : ref;\n const slash = base.lastIndexOf(\"/\");\n return slash >= 0 ? base.slice(slash + 1) : base;\n}\n\n/**\n * Build a **version-less** dep ref (`kind:@publisher/name`) for the `skaile add`\n * suggestion. Omits the version: a manifest-less source resolves under a content-sha\n * pin the index's frontmatter version never matches, so a pinned ref is unaddable.\n */\nfunction depRefFromDef(def: {\n kind: string;\n publisher: string;\n name: string;\n version: string;\n}): string | undefined {\n const publisher = def.publisher.replace(/^@/, \"\");\n if (!publisher) return undefined;\n return assetRefToStr({ kind: def.kind, name: def.name, publisher });\n}\n\n/**\n * Parse a ref for lookup, tolerating a **missing publisher** (`kind:name`, the\n * shape `listDeployed` emits and the strict `parseAssetRef` rejects). Returns\n * `null` when neither kind nor name is recoverable. Unlike {@link parseAssetRefLoose}\n * (publisher-required, only strips a `#pin`), this keeps the publisher optional.\n *\n * @internal Exported for unit tests; not part of the stable public surface.\n */\nexport function parseRefTolerant(ref: string): AssetRef | null {\n try {\n return parseAssetRef(ref);\n } catch {\n const colon = ref.indexOf(\":\");\n if (colon < 0) return null;\n let kind = ref.slice(0, colon).trim();\n // Mirror parseAssetRef's shorthand so a bare `mcp:name` matches `mcp-server` entries.\n if (kind === \"mcp\") kind = \"mcp-server\";\n const hash = ref.indexOf(\"#\", colon);\n const name = ref.slice(colon + 1, hash < 0 ? undefined : hash).trim();\n if (!kind || !name) return null;\n return { kind, name, publisher: undefined };\n }\n}\n\n/**\n * A library asset that `add`, `install` and the status commands cannot use as it is (a version\n * that is not semver, a flow file the engine does not load). The CLI prints its message as one\n * `✗` line, never a stack trace (p874, p1082).\n */\nexport class LibraryEntryError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"LibraryEntryError\";\n }\n}\n\n/**\n * Lock entries a declared ref that no longer resolves keeps: every lock entry of the same\n * kind + name (and publisher, when the ref names one), so `install` neither deletes the\n * deployed files nor drops the pin, plus the `sources[]` rows those entries point at.\n * `refs` are the missed refs that matched an entry.\n */\ninterface KeptLockEntries {\n assets: Record<string, LockEntry>;\n sources: LockFile[\"sources\"];\n refs: Set<string>;\n /** The lock keys each kept ref matched. */\n keysByRef: Map<string, string[]>;\n}\n\nfunction keptLockEntries(prev: LockFile | null, missing: string[]): KeptLockEntries {\n const out: KeptLockEntries = { assets: {}, sources: [], refs: new Set(), keysByRef: new Map() };\n if (!prev) return out;\n for (const ref of missing) {\n const want = parseRefTolerant(ref.split(\" \")[0] ?? ref);\n if (!want) continue;\n for (const [key, entry] of Object.entries(prev.assets)) {\n // `asset install` entries are carried over separately.\n if (entry.library?.installed) continue;\n const id = parseCanonicalLockKey(key);\n if (id.kind !== want.kind || id.name !== want.name) continue;\n if (want.publisher && id.publisher !== want.publisher) continue;\n out.assets[key] = entry;\n out.refs.add(ref);\n out.keysByRef.set(ref, [...(out.keysByRef.get(ref) ?? []), key]);\n const src = entry.source ? prev.sources.find((s) => s.url === entry.source?.url) : undefined;\n if (src) out.sources.push(src);\n }\n }\n return out;\n}\n\n/** The `presets` slice of a lock built for `presets`: canonical refs, one per preset, sorted; empty when none. */\nfunction presetsLockSlice(presets: readonly PresetExpansion[]): Pick<LockFile, \"presets\"> {\n const refs = [...new Set(presets.map((p) => p.ref))].sort();\n return refs.length > 0 ? { presets: refs } : {};\n}\n\n/** `lock` plus the entries (and their sources) that `install` kept for unresolved refs. */\nfunction withKeptLockEntries(lock: LockFile, kept: KeptLockEntries): LockFile {\n if (Object.keys(kept.assets).length === 0) return lock;\n const sources = new Map(lock.sources.map((s) => [s.url, s]));\n for (const s of kept.sources) if (!sources.has(s.url)) sources.set(s.url, s);\n return {\n ...lock,\n schema_version: LOCK_SCHEMA_VERSION,\n assets: { ...lock.assets, ...kept.assets },\n sources: [...sources.values()].sort((a, b) => a.url.localeCompare(b.url)),\n };\n}\n\n/**\n * Lock keys of `next` whose entry changed against `prev`: the same kind/publisher/name locked\n * at another version, or at the same version with another content hash or source commit.\n * New keys (nothing locked before) and `asset install` entries are not re-locks.\n */\nfunction relockedRefs(prev: LockFile | null, next: LockFile): string[] {\n if (!prev) return [];\n // A source asset keyed by a repo-commit pseudo-version (`0.0.0-sha.<commit>`) whose files hash\n // the same is not changed by a newer commit of its repo: only the content hash counts.\n const fingerprint = (e: LockEntry, key: string): string =>\n [\n e.library?.version ?? \"\",\n e.library && !e.library.installed ? e.library.name : \"\",\n e.library?.sha256 ?? e.sha256,\n key.includes(\"#0.0.0-sha.\") ? \"\" : (e.source?.commit ?? \"\"),\n ].join(\"\\0\");\n const out: string[] = [];\n for (const [key, entry] of Object.entries(next.assets)) {\n if (entry.library?.installed) continue;\n const id = parseCanonicalLockKey(key);\n const before = prev.assets[key]\n ? ([key, prev.assets[key]] as const)\n : Object.entries(prev.assets).find(([k]) => {\n const o = parseCanonicalLockKey(k);\n return o.kind === id.kind && o.name === id.name && o.publisher === id.publisher;\n });\n if (!before) continue;\n if (before[0] !== key || fingerprint(before[1], before[0]) !== fingerprint(entry, key))\n out.push(key);\n }\n return out;\n}\n\n/** A locked asset that now resolves from another library than its lock entry named. */\nexport interface LibraryMove {\n /** `kind:@publisher/name` (no version). */\n ref: string;\n /** Library name the lock entry recorded. */\n from: string;\n /** Library name the asset resolved from now. */\n to: string;\n}\n\n/**\n * The library-origin entries of `next` whose library differs from the one `prev` locked for the\n * same kind/publisher/name (any version). New assets and `asset install` entries never move.\n */\nfunction libraryMoves(prev: LockFile | null, next: Record<string, LockEntry>): LibraryMove[] {\n if (!prev) return [];\n const out: LibraryMove[] = [];\n for (const [key, entry] of Object.entries(next)) {\n const to = entry.library;\n if (!to || to.installed) continue;\n const id = parseCanonicalLockKey(key);\n for (const [prevKey, before] of Object.entries(prev.assets)) {\n const o = parseCanonicalLockKey(prevKey);\n if (o.kind !== id.kind || o.name !== id.name || o.publisher !== id.publisher) continue;\n const from = before.library;\n if (!from || from.installed || from.name === to.name) continue;\n // A library renamed here with `library rename` is the same library: no move (p893).\n if (renamedLibraryName(from.name) === to.name) continue;\n out.push({ ref: `${id.kind}:@${id.publisher}/${id.name}`, from: from.name, to: to.name });\n break;\n }\n }\n return out;\n}\n\n/**\n * What to do about a locked library asset whose library is not registered (renamed or removed).\n * A lock entry that records the library's remote names it too, and registers the library by it:\n * no registered library has that remote either, or the lookup would have matched it.\n */\nfunction unregisteredLibraryFix(origin: { name: string; url?: string }, ref: string): string {\n const register = origin.url\n ? `\\`skaile library init ${origin.name} --git ${origin.url}\\` (no registered library has the remote ${origin.url} either)`\n : `\\`skaile library init ${origin.name} --path <dir>\\``;\n return `register library \"${origin.name}\" again with ${register}, or drop the dependency with \\`skaile remove ${ref}\\``;\n}\n\n/**\n * Why a declared ref is a gap when no registered library or source holds it: `skaile install`\n * has nothing to resolve it from, so the user registers the library or drops the ref. The one\n * text `check`, `doctor`, `outdated`, `install`, `install --locked`, `why` and `update` print.\n */\nfunction declaredNoHolderReason(ref: string): string {\n return `is declared but no library or source holds it — register the library that holds it with \\`skaile library init <name> --path <dir>\\`, or drop it with \\`skaile remove ${ref.split(\"#\")[0]}\\``;\n}\n\n/** The first half of every \"nothing holds it\" fix: register the library that holds the ref. */\nconst REGISTER_HOLDER =\n \"register the library that holds it with `skaile library init <name> --path <dir>`\";\n\n/**\n * What to do about a requirement of `asset` that no registered library or source holds:\n * `skaile install` has nothing to resolve it from, so the user registers the library that\n * holds it or drops the requirer. The one text `check`, `doctor`, `outdated`, `install` and\n * `add` print.\n */\nfunction requirementNoHolderFix(asset: string): string {\n return `${REGISTER_HOLDER}, or drop ${asset} with \\`skaile remove ${asset}\\``;\n}\n\n/** Whether `ref` names the asset `want` does: same kind and name, same publisher when both carry one. */\nfunction sameAsset(ref: string, want: { kind: string; name: string; publisher?: string }): boolean {\n const p = parseRefTolerant(ref);\n return (\n p !== null &&\n p.kind === want.kind &&\n p.name === want.name &&\n (!want.publisher || !p.publisher || p.publisher === want.publisher)\n );\n}\n\n/** A locked library asset `install` keeps in place of a newer library version, with what it requires. */\ninterface KeptLibraryEntry {\n key: string;\n entry: LockEntry;\n requires: string[];\n}\n\n/** What {@link AssetManager.resolveLibraryFirst} resolved: candidates, still-missing refs, library entries, presets. */\ninterface LibraryFirstResolution {\n resolved: ProvenanceCandidate[];\n missing: string[];\n overridesApplied: Set<string>;\n lib: LibraryResolution;\n presets: PresetExpansion[];\n requiredBy: Map<string, string[]>;\n /** Lock entries of library assets the library holds at another version than locked: `install` keeps them (only `update` moves a lock). */\n keptVersions: Record<string, LockEntry>;\n /** One `ref (reason)` line for each such asset whose deployed copy is gone: the locked version cannot be restored from the newer files. */\n versionBlocked: string[];\n}\n\n/**\n * How a library named in a lock entry stands on this machine: usable at `path`, registered but\n * with its directory gone, or not registered at all (renamed away, removed, or never registered\n * here). One result for {@link AssetManager.lockedLibrary}, the only place that decides it.\n * `name` of an `ok` lookup is the name the library is registered under here, which is not the\n * locked name when the lock's remote URL matched another registered library.\n */\ntype LockedLibrary =\n /**\n * `matched: \"content\"` - the locked name is gone and the library was found by the asset it\n * holds (same publisher and name, the locked content hash), not by name or remote URL.\n */\n | { state: \"ok\"; path: string; name: string; matched?: \"content\" }\n | { state: \"dir-missing\"; path: string }\n | { state: \"unregistered\" };\n\n/** One asset that several registered libraries hold, as an `add` met it. */\ninterface LibraryCollision {\n /** `kind:@publisher/name`. */\n key: string;\n libraries: string[];\n /** `library (version)` per holder. */\n held: string[];\n chosen: string;\n version: string;\n /** Libraries holding the chosen version with other bytes. */\n differing: string[];\n}\n\n/** The full warning for one asset held by several libraries. */\nfunction libraryCollisionMessage(c: LibraryCollision): string {\n return (\n `${c.key} exists in ${c.libraries.length} libraries: ${c.held.join(\", \")} — ` +\n `using ${c.chosen} (${c.version}). ` +\n \"Highest version wins; an equal version goes to the default library, then by name. \" +\n (c.differing.length > 0\n ? `Same version, different content: ${c.chosen} and ${c.differing.join(\", \")} hold ` +\n `${c.version} with different bytes. `\n : \"\") +\n `Pin a version (${c.key}#<version>) to choose another.`\n );\n}\n\n/**\n * One warning for several assets held by several libraries (p1097): how many assets and\n * libraries, the library each asset came from, and the assets whose bytes differ.\n */\nfunction libraryCollisionSummary(all: readonly LibraryCollision[]): string {\n const libraries = [...new Set(all.flatMap((c) => c.libraries))].sort();\n const used = new Map<string, number>();\n for (const c of all) used.set(c.chosen, (used.get(c.chosen) ?? 0) + 1);\n const usedText = [...used].sort((a, b) => b[1] - a[1]).map(([lib, n]) => `${lib} for ${n}`);\n const short = (key: string): string => key.slice(key.lastIndexOf(\"/\") + 1);\n const differing = all.filter((c) => c.differing.length > 0).map((c) => short(c.key));\n return (\n `${all.length} assets exist in several libraries (${libraries.join(\", \")}); using ${usedText.join(\", \")}. ` +\n \"Highest version wins; an equal version goes to the default library, then by name. \" +\n (differing.length > 0 ? `Same version, different bytes for: ${differing.join(\", \")}. ` : \"\") +\n \"Pin a version (<ref>#<version>) to choose another; `--verbose` lists each asset.\"\n );\n}\n\n/** Why a locked library cannot supply its assets, with the fix, for a lookup that is not `ok`. */\nfunction lockedLibraryProblem(\n lookup: Exclude<LockedLibrary, { state: \"ok\" }>,\n origin: { name: string; url?: string },\n ref: string,\n): string {\n return lookup.state === \"dir-missing\"\n ? missingLibraryDirMessage({ name: origin.name, path: lookup.path })\n : `library \"${origin.name}\" is not registered — renamed or removed? ${unregisteredLibraryFix(origin, ref)}`;\n}\n\n/** `kind:name` of a {@link LockGap} ref, publisher and pin left out; the raw ref when it does not parse. */\nfunction gapIdentity(ref: string): string {\n const p = parseRefTolerant(ref);\n return p ? `${p.kind}:${p.name}` : ref;\n}\n\n/** Version-agnostic identity of a member ref (see {@link memberIdentity}). */\ninterface MemberIdentity {\n kind: string;\n name: string;\n publisher?: string;\n}\n\n/**\n * Version-agnostic `{ kind, name, publisher? }` of a member ref as a preset may\n * write it: canonical `kind:@pub/name`, bare `kind:name`, or the legacy\n * `kind:name@pub`, each optionally `#pinned`. Publisher is bare (no `@`).\n */\nfunction memberIdentity(ref: string): MemberIdentity | null {\n const parsed = parseRefTolerant(ref.trim());\n if (!parsed) return null;\n let name = parsed.name;\n let publisher = parsed.publisher?.replace(/^@/, \"\") || undefined;\n const slash = name.startsWith(\"@\") ? name.indexOf(\"/\") : -1;\n if (slash > 0) {\n publisher ??= name.slice(1, slash);\n name = name.slice(slash + 1);\n }\n const at = name.indexOf(\"@\");\n if (at > 0) {\n publisher ??= name.slice(at + 1).replace(/^@/, \"\");\n name = name.slice(0, at);\n }\n return { kind: parsed.kind, name, publisher };\n}\n\n/**\n * Find the cached AssetDefinition(s) for an input ref. Tries an exact id match\n * first (canonical refs), then falls back to a name (+publisher/kind when the\n * ref carries them) match so `kind:name` / `kind:@pub/name` inputs resolve. The\n * fallback is version-agnostic, so a lock ref pinned at a content-sha\n * pseudo-version still matches the index def stored under a canonical semver.\n */\nfunction matchDefsForRef<T extends { id: string; kind: string; name: string; publisher: string }>(\n defs: T[],\n ref: string,\n): T[] {\n const exact = defs.filter((d) => d.id === ref);\n if (exact.length > 0) return exact;\n const parsed = parseAssetRefLoose(ref);\n if (!parsed) return [];\n const wantPub = parsed.publisher?.replace(/^@/, \"\");\n return defs.filter(\n (d) =>\n d.name === parsed.name &&\n d.kind === parsed.kind &&\n (wantPub === undefined || d.publisher.replace(/^@/, \"\") === wantPub),\n );\n}\n\n/**\n * Reconciliation state of a declared dependency relative to the lock + disk.\n * `invalid` flags a `dependencies:` entry that isn't a parseable canonical ref —\n * surfaced (not silently dropped) so a `skaile.yaml` typo is visible.\n */\nexport type DeclaredState = \"declared\" | \"installed\" | \"drift\" | \"invalid\" | \"skipped\";\n\n/**\n * A top-level dependency declared in `skaile.yaml`, annotated with its\n * reconciliation {@link DeclaredState}. Transitive (lock-only) deps are never\n * included — {@link AssetManager.listDeclared} walks the declared set only.\n */\nexport interface DeclaredAsset {\n /** The canonical declared ref exactly as written in `skaile.yaml`. */\n ref: string;\n kind: string;\n name: string;\n state: DeclaredState;\n /** Set with `skipped`: why skaile does not write the `mcp-server` to the coding agent's MCP config. */\n reason?: string;\n}\n\n/** A note about an `mcp-server` that fails nothing. See {@link AssetManager.mcpNotices}. */\nexport interface McpNotice {\n /** The declaration id (`sql`, `@admin/sql`). */\n id: string;\n kind: \"skipped\" | \"unset-field\";\n /** With `skipped`: why the server is not written to the MCP config. */\n reason?: string;\n /** The `!` line `check` and `doctor` print. */\n text: string;\n}\n\n/** A deployed library asset that lacks files of its library entry. See {@link AssetManager.incompleteDeploys}. */\nexport interface IncompleteDeploy {\n /** Canonical ref of the asset. */\n ref: string;\n /** Files the deploy writes that are absent from the deployed directory, relative to it. */\n missing: string[];\n}\n\n/**\n * A tracked asset whose copy still sits in the previous default deploy dir\n * (`.claude/…`) although the project now deploys to another harness. See\n * {@link AssetManager.listLegacyClaudeDeployed}.\n */\nexport interface LegacyDeployedAsset {\n kind: string;\n name: string;\n /** Absolute path of the stale copy. */\n path: string;\n}\n\n/**\n * A global declared dependency from `~/.skaile/skaile.yaml`, reconciled against\n * **one** harness's global deploy dir. The same ref yields one entry per global\n * harness (see {@link AssetManager.globalState}) so an asset can read `installed`\n * for `claude-code` and `drift`/`declared` for `codex` simultaneously.\n */\nexport interface HarnessDeclaredAsset extends DeclaredAsset {\n /** The global harness this state was reconciled against. */\n harness: DriverTarget;\n}\n\n/** @deprecated Use {@link HarnessDeclaredAsset}; the `backend` field is now `harness`. Removed in the next major. */\nexport type BackendDeclaredAsset = HarnessDeclaredAsset;\n\n/**\n * A body-link soft-dependency edge: asset `from` references target `to` in its\n * body (not its typed `requires`). `toRef` is the parseable `skaile add` ref when\n * the target is in the index, omitted otherwise. Surfaced read-only — never\n * auto-installed (see {@link AssetManager.softDepsOf} / {@link AssetManager.reportSoftDeps}).\n */\nexport interface SoftDepEdge {\n from: string;\n to: string;\n toRef?: string;\n}\n\n/**\n * A soft-dependency target that would be left orphaned by removing some assets:\n * it is still present in the project, came in as `from`'s soft dependency, and\n * nothing else still needs it (neither a soft-dep nor a typed `requires`).\n * Report-only — {@link AssetManager.orphanedSoftDepsAfterRemoving} never removes\n * it; the caller prompts (default No). `targetRef` is the parseable `skaile\n * remove` ref when the target is in the index.\n */\nexport interface OrphanedSoftDep {\n from: string;\n target: string;\n targetRef?: string;\n}\n\n/**\n * Thrown by {@link AssetManager.listDeclared} when the project has no\n * `skaile.yaml`. The CLI maps this to a `skaile init` hint.\n */\nexport class MissingManifestError extends Error {\n constructor(readonly projectDir: string) {\n super(`No skaile.yaml in ${projectDir}.`);\n this.name = \"MissingManifestError\";\n }\n}\n\nexport type { HistoryEntry } from \"./history.js\";\nexport {\n appendHistory,\n clearHistory,\n getRecentHistory,\n loadHistory,\n} from \"./history.js\";\n// Re-export sub-modules\nexport type { DeployOptions, ScaffoldOptions } from \"./installer.js\";\nexport type { DeployableEntry } from \"./installer.js\";\nexport {\n createScaffold,\n deployAll,\n installTargetOf,\n removeAsset,\n SCAFFOLD_KINDS,\n} from \"./installer.js\";\nexport type {\n RenderMcpConfigOptions,\n RenderMcpConfigResult,\n SkippedMcpServer,\n} from \"./mcp-config.js\";\nexport { renderMcpServerConfig } from \"./mcp-config.js\";\nexport type { Log } from \"./renderers.js\";\nexport { renderAgentToFramework } from \"./renderers.js\";\n// Contrib helpers (commitChanges et al.) are still used internally by the\n// patch-submit flow but are no longer part of the public API surface — the\n// `skaile repo contrib *` command tree was removed on 2026-05-12.\n\n// ── Types ────────────────────────────────────────────────────────────────────\n\n/**\n * Metadata about a repository declared in `skaile.yaml`.\n *\n * @docLink packages/asset-manager/concepts#asset-manager\n */\nexport interface RepoInfo {\n /** Repository name as declared in `skaile.yaml`. */\n name: string;\n /** How the repo is sourced: cloned from a URL, mounted from a local path, or symlinked via `skaile repo link`. */\n kind: \"local\" | \"remote\" | \"linked\";\n /** Remote URL (present when `kind === \"remote\"`). */\n url?: string;\n /** Filesystem path (present when `kind === \"local\"` or `kind === \"linked\"`). */\n path?: string;\n /** Git branch configured for this repository. */\n branch: string;\n /** Whether the repository has been cloned/resolved locally. */\n cloned: boolean;\n}\n\n/**\n * Live sync status for a repository.\n *\n * @docLink packages/asset-manager/concepts#asset-manager\n */\nexport interface RepoStatusInfo {\n /** Repository name as declared in `skaile.yaml`. */\n name: string;\n /** How the repo is sourced. */\n kind: \"local\" | \"remote\" | \"linked\";\n /** Number of commits the local clone is behind the remote. */\n behind: number;\n /** `true` when the local clone matches the remote HEAD. */\n upToDate: boolean;\n /** Error message when status check failed. */\n error?: string;\n}\n\n/** The rendered native files of one locked agent that a deploy wrote with other content. */\nexport interface RewrittenAgent {\n /** Lock key of the agent asset. */\n ref: string;\n /** Project-relative POSIX paths of the files whose bytes changed. */\n files: string[];\n}\n\n/** One deployed copy `install` made equal to its locked bytes again. */\nexport interface RestoredAsset {\n /** Canonical ref of the asset. */\n ref: string;\n /** Deployed files whose hand edit was overwritten (project-relative POSIX paths). */\n restored: string[];\n /** Files the asset does not ship that were deleted from its deployed directory. */\n removed: string[];\n}\n\n/** One asset `install` moved from one locked version to another. */\nexport interface ReplacedAsset {\n /** `kind:@publisher/name`, no version. */\n ref: string;\n from: string;\n to: string;\n}\n\n/**\n * Result of a full `skaile install` or `skaile add` run.\n *\n * @docLink packages/asset-manager/concepts#asset-manager\n */\n/** A locked store asset `install` did not re-check against the store; see {@link InstallResult.storeNotChecked}. */\nexport interface StoreNotChecked {\n /** The declared ref as `install` reports it (`kind:@publisher/name#version`). */\n ref: string;\n reason: \"air-gapped\" | \"unreachable\" | \"skipped\";\n /** Why the store was not asked, or what it answered (the store URL and the cause). */\n detail: string;\n}\n\nexport interface InstallResult {\n /** Canonical refs (`kind:@publisher/name#version`) successfully deployed in this run. */\n deployed: string[];\n /**\n * Deployed library assets whose body is still the untouched `library create` scaffold: they\n * fail `validate` and the publish plan, so `install` names them (p926). Absent when none is.\n */\n placeholderBodies?: string[];\n /**\n * Deployed library assets whose `description:` is still the `library create` placeholder\n * (`TODO: …`): `validate` and the publish plan fail it as well. Absent when none is.\n */\n placeholderDescriptions?: string[];\n /** Asset refs (`kind:name`) removed because they are no longer in the resolved set. */\n removed: string[];\n /**\n * Asset refs that could not be resolved in any configured repository. On the\n * non-locked path every entry is a bare ref; the reason a miss happened lives in\n * {@link InstallResult.missingHints}. The `--locked` path still appends its prose\n * (`ref (not found in library \"x\")`) to the entry, and also lists every\n * {@link AssetManager.projectState} gap (a declared dependency or a locked asset's\n * `requires` with no lock entry, a lock that contradicts a `skaile.yaml` pin, a library\n * that cannot supply a locked asset) as its one-line message.\n */\n missing: string[];\n /**\n * Why a ref in {@link InstallResult.missing} may have missed, keyed by that ref:\n * the asset's publisher changed (`library set publisher=`), so the lock still holds\n * it under the old one and/or a library now holds it under another. Parenthesised\n * parts such as `did you mean skill:@acme/x?` and\n * `locked as skill:@plain/x; run skaile install to re-resolve`. Only refs with a\n * hint appear; absent when none has.\n */\n missingHints?: Record<string, string>;\n /**\n * Locked store assets `install` could not check against the store (p792, p799): the deployed\n * copy and the lock entry stay as they are and the asset is not in {@link InstallResult.missing}.\n * `air-gapped` (`catalog.cache_ttl: 0`, nothing cached) and `skipped` (`update --no-catalog`)\n * are a chosen mode, `unreachable` a store that did not answer. Absent when every locked store\n * asset was checked.\n */\n storeNotChecked?: StoreNotChecked[];\n /**\n * Lock keys whose entry `install` rewrote for an asset that was already locked: the\n * library or source holds another version of it, or the same version with other\n * content. A re-lock can happen with nothing to deploy. Absent when none changed.\n */\n relocked?: string[];\n /**\n * Library-origin assets whose lock entry now names another library than before. `install`\n * keeps a locked asset on its library; only `update`, a pin, or a locked library that no\n * longer holds the asset moves it. Absent when none moved.\n */\n moved?: LibraryMove[];\n /**\n * Assets whose locked version `install` replaced with another version of the same asset\n * (`ref` is `kind:@publisher/name`). Not part of {@link InstallResult.removed}: nothing\n * left the project. Absent when none changed.\n */\n replaced?: ReplacedAsset[];\n /**\n * Deployed copies `install` made equal to their locked bytes again: a file edited by hand\n * (`restored`) or an extra file in the asset directory (`removed`), both as project-relative\n * POSIX paths. Absent when every deployed copy already matched.\n */\n restored?: RestoredAsset[];\n /**\n * Rendered agent files that a lock without `rendered:` entries (written by a CLI before\n * 5.12.0) did not cover and that this run wrote with other content, because the render of\n * the agent changed. Absent when none.\n */\n rewritten?: RewrittenAgent[];\n /** Whether `skaile.lock.yaml` was written or updated. */\n lockWritten: boolean;\n /**\n * npm packages installed as a side effect of resolving runtime asset peer\n * deps (connectors / mounts declared in skaile.yaml). Empty when nothing\n * needed installing or when the runtime-deps step was skipped.\n */\n npmInstalled?: string[];\n /**\n * npm packages that the runtime-deps step tried but failed to install.\n * Non-fatal — listed for telemetry and CLI reporting.\n */\n npmFailed?: string[];\n /**\n * One entry per `preset:` dependency expanded into this install (nested presets\n * included): how many asset items joined the install set and how many instance\n * items (`library://`, placeholders) were skipped.\n */\n presets?: PresetExpansion[];\n /**\n * One entry per `skaile.yaml` agent instance (`agent:` as `default`, plus\n * `agents:`) rendered into the target harness's native agent files, with the\n * workspace-relative paths written. Absent for `--global` installs and\n * harnesses without a native agent format.\n */\n agentInstances?: InstalledAgentInstance[];\n /**\n * Workspace-relative native agent files removed because their instance left\n * `skaile.yaml` (only files an earlier `skaile install` rendered are ever removed).\n */\n agentFilesRemoved?: string[];\n /**\n * Agent instances of `skaile.yaml` whose `ref` resolves to no agent (never added, or gone):\n * one message each. Their earlier rendering is kept. `skaile install` fails on a non-empty list.\n */\n agentInstanceErrors?: string[];\n /**\n * The resolver's own text (with the directories it searched) for each entry of\n * {@link agentInstanceErrors} whose message was shortened to one line of advice; for `--verbose`.\n */\n agentInstanceDetails?: string[];\n}\n\n/**\n * An installed asset whose source repository is behind the remote.\n *\n * @docLink packages/asset-manager/concepts#asset-manager\n */\nexport interface OutdatedEntry {\n /** Asset kind (`skill`, `agent`, `prompt`, `flow`, `contract`). */\n kind: string;\n /** Asset name as registered in the catalog. */\n name: string;\n /** Repository that provides this asset. */\n publisher: string;\n /** Version string recorded in the lock file at install time. */\n currentVersion: string;\n /** Number of commits the local repository is behind the remote (always 0 for a library asset). */\n behind: number;\n /** Library-origin asset only: the version the library index now offers (newer than `currentVersion`). */\n latestVersion?: string;\n /** Library-origin asset only: name of the library the asset was locked from. */\n library?: string;\n /**\n * Set when the locked asset cannot be checked or is not in place: its library is\n * not registered (renamed or removed), its deployed copy is gone, or the lock does not\n * cover it ({@link AssetManager.projectState}). Such a row has no `latestVersion`.\n */\n problem?: string;\n /**\n * Library-origin asset only: the library's files on disk differ from the content\n * hash recorded in the lock at the same version (edited in place, no version bump).\n * `skaile update` (or `skaile install`) re-locks and re-deploys them.\n */\n contentChanged?: boolean;\n /**\n * Library-origin asset only: the library `update` would re-lock the asset from, when it is\n * not the one the lock names (`library`), e.g. after `skaile library default <other>`.\n */\n movesTo?: string;\n /**\n * Source asset only: the version the next `install` or `update` locks it under, when that\n * is not the locked key. A `0.0.0-sha.<commit>` key whose file now declares a version is\n * re-keyed (`0.0.0-sha.7de3555 → 0.2.0`, p914).\n */\n rekeyTo?: string;\n /**\n * Set on a `problem` row whose cause `skaile install` cannot fix: the asset's library is\n * gone or its publisher changed, so the ref resolves nowhere. `problem` names what to\n * change instead (`skaile library init …`, the ref under its new publisher).\n */\n manualFix?: true;\n}\n\n/**\n * Outcome of `AssetManager.diff()` — distinguishes an unknown ref from a real\n * \"no differences\" so callers never conflate the two.\n *\n * - `not-found` — the ref resolves to no asset (source, store or library).\n * - `not-deployed` — the asset resolves, but there is no deployed copy to compare.\n * - `identical` — the deployed copy matches the source.\n * - `differs` — the deployed copy differs; `diff` carries the unified diff.\n * - `no-files` — the asset kind has no files of its own (a preset: its items are the assets to\n * compare) and the lock records it.\n *\n * @docLink packages/asset-manager/concepts#asset-manager\n */\nexport type DiffResult =\n | { status: \"not-found\" }\n | { status: \"not-deployed\" }\n | { status: \"identical\" }\n | { status: \"no-files\" }\n | { status: \"differs\"; diff: string };\n\n/**\n * A node in the resolved dependency tree (returned by `AssetManager.tree()`).\n *\n * @docLink packages/asset-manager/concepts#asset-manager\n */\nexport interface DependencyNode {\n /** Lock key (`kind:@publisher/name#version`), or `\"project\"` for the root node. */\n ref: string;\n /** Assets this node requires, nested under it. */\n children: DependencyNode[];\n}\n\n/**\n * The refusal for an asset a library holds on disk but its `skaile.manifest.yaml` does not list.\n * A source's cache clone (`.skaile/cache/sources/…`) is a reader: `library index` would edit only\n * the clone, so the fix is in the source repo.\n */\nfunction unlistedAssetMessage(\n ref: string,\n library: string,\n libPath: string,\n ownership?: string,\n): string {\n const head = `${ref} is in library \"${library}\" but not listed in its skaile.manifest.yaml, so only part of its files would be deployed.`;\n const segments = libPath.split(/[\\\\/]/);\n const isReader =\n ownership === \"reader\" ||\n segments.some((s, i) => s === \"cache\" && segments[i + 1] === \"sources\");\n return isReader\n ? `${head} \"${library}\" is a read-only source clone: add it to skaile.manifest.yaml in the source repo and push, then run \\`skaile source sync\\`.`\n : `${head} Run \\`skaile library index ${library}\\`, then add it again.`;\n}\n\n/** Whether something sits at `p`, a dangling symlink included (`existsSync` follows the link and says no). */\nfunction pathEntryExists(p: string): boolean {\n try {\n lstatSync(p);\n return true;\n } catch {\n return false;\n }\n}\n\n/** Whether `p` is a symlink, dangling or not. */\nfunction isSymlink(p: string): boolean {\n try {\n return lstatSync(p).isSymbolicLink();\n } catch {\n return false;\n }\n}\n\n/** Outcome of {@link AssetManager.removeWithDependencies}. */\nexport interface RemoveResult {\n /** Whether anything changed (as {@link AssetManager.remove}). */\n changed: boolean;\n /** Canonical refs (`kind:@publisher/name`) of the orphaned dependencies dropped as well. */\n pruned: string[];\n /**\n * Set when the removal was refused because other assets still require it; nothing was\n * removed. `ref` is the asset (`kind:@publisher/name`), `requiredBy` the refs requiring it.\n */\n blocked?: { ref: string; requiredBy: string[] };\n /**\n * Deployed folders or files of the asset that no lock entry holds (the user's own work):\n * kept, not deleted. Empty when `force` was given.\n */\n kept?: string[];\n /**\n * Deployed folders or files of the asset that another publisher's lock entry holds: kept, not\n * deleted (only that entry's own `remove` may delete them, or `force`). `refs` are the owning\n * lock entries, `paths` the kept folders.\n */\n ownedBy?: { refs: string[]; paths: string[] }[];\n}\n\n/** Identity {@link AssetManager.remove} acts on; `publisher` is absent for an unqualified short ref. */\ninterface RemoveTarget {\n kind: string;\n name: string;\n publisher?: string;\n}\n\n/**\n * A missing dependency detected by `AssetManager.doctor()`.\n *\n * @docLink packages/asset-manager/concepts#asset-manager\n */\nexport interface DepIssue {\n /** Kind of the asset that has the unsatisfied requirement. */\n assetKind: string;\n /** Name of the asset that has the unsatisfied requirement. */\n assetName: string;\n /** Kind of the missing dependency. */\n depKind: string;\n /** Name of the missing dependency (`@<publisher>/<name>` when it names a publisher). */\n depName: string;\n /** `true` when the missing dependency exists in a configured repository but has not been installed. */\n inRepos: boolean;\n /**\n * `true` when the asset itself is lock-managed but no source or library holds it\n * any more, so its `requires` cannot be checked. `depKind`/`depName` repeat the asset.\n */\n unresolved?: boolean;\n /**\n * Set with `unresolved` when the lock ties the asset to a library: what to change\n * (`register library \"x\" again with …`, `did you mean <ref>?`). `skaile install`\n * cannot restore it. Absent when the lock names no library for it.\n */\n fix?: string;\n}\n\n/**\n * One way the project differs from what it declares and locks; see {@link AssetManager.projectState}.\n *\n * @docLink packages/asset-manager/concepts#asset-manager\n */\nexport interface LockGap {\n type:\n | \"declared\"\n | \"invalid\"\n | \"drift\"\n | \"pin\"\n | \"requires\"\n | \"unresolved\"\n | \"library\"\n | \"incomplete\"\n | \"content\"\n | \"modified\"\n | \"agent\"\n | \"source\";\n /** The ref to act on: the declared ref, the unmet dependency `kind:name`, or the asset itself. */\n ref: string;\n /** Set on a `requires` gap: the requiring asset, `kind:@publisher/name` (`kind:name` when the lock knows no publisher). */\n asset?: string;\n /** What is wrong, as a phrase that follows `ref` (e.g. `is declared but not locked — run …`). */\n reason: string;\n /** One line naming the gap, without a leading status mark: `${ref} ${reason}`, except a `requires` gap, which leads with the requiring asset. */\n message: string;\n /** Set when `skaile install` cannot fix the gap; `reason` then names what to change instead. */\n manualFix?: true;\n}\n\n/**\n * The project's state as {@link AssetManager.projectState} computes it: the one verdict\n * `check`, `doctor`, `outdated`, `diff` and `install --locked` share.\n *\n * @docLink packages/asset-manager/concepts#asset-manager\n */\nexport interface ProjectState {\n /** Every problem, one {@link LockGap} each; empty when the project is as declared and locked. */\n gaps: LockGap[];\n /** What {@link AssetManager.doctor} found: the unmet requirements (a `doctor` table row each) and the locked assets nothing provides. */\n requirements: DepIssue[];\n}\n\n/**\n * A single deployed asset shown in the workspace overview.\n *\n * @docLink packages/asset-manager/concepts#asset-manager\n */\nexport interface OverviewEntry {\n /** Asset kind (`skill`, `agent`, `prompt`, `flow`, `contract`). */\n kind: string;\n /** Asset name. */\n name: string;\n /** Publisher that provides this asset (from the lock file; `\"unknown\"` when unresolvable). */\n publisher: string;\n /** Version string from the lock file. */\n version: string;\n /**\n * Sync status relative to the source repository.\n * - `\"synced\"` — local clone matches remote HEAD\n * - `\"outdated\"` — local clone is behind the remote\n * - `\"local\"` — sourced from a local path, no remote to compare\n * - `\"error\"` — status check failed\n * - `\"unknown\"` — repository not found or lock entry missing\n */\n syncStatus: string;\n}\n\n/**\n * Aggregated workspace overview returned by `AssetManager.overview()`.\n *\n * @docLink packages/asset-manager/concepts#asset-manager\n */\nexport interface OverviewResult {\n /** Entries grouped by publisher, sorted alphabetically. Each group is sorted by kind then name. */\n byPublisher: Map<string, OverviewEntry[]>;\n /** Total number of deployed assets. */\n total: number;\n /** Sync status for each configured repository. */\n repos: RepoStatusInfo[];\n}\n\n// ── AssetManager ─────────────────────────────────────────────────────────────\n\n/**\n * Options for constructing an {@link AssetManager}.\n *\n * @docLink packages/asset-manager/concepts#asset-manager\n */\nexport interface AssetManagerOptions {\n /** Absolute or relative path to the workspace root (must contain `skaile.yaml`). */\n projectDir: string;\n /**\n * The process's asset-kind registry — the only authority on which kinds exist.\n * Typed frontmatter whose `type:` is not registered is reported, not catalogued.\n */\n registry: IAssetKindRegistry;\n /**\n * Agent framework to target for asset deployment.\n * Determines which framework directories (``.claude/``, ``.omp/``, etc.) are used.\n * Defaults to the harness the project is configured for (`skaile.yaml`\n * `agent-config.default.driver`, `.skaile/settings.json`), else `\"claude-code\"`.\n */\n driverTarget?: DriverTarget;\n /**\n * When `true`, the manager operates in **global cross-harness** mode: config\n * SSOT, lock, cache, and history root at `~/.skaile` (not the project), the\n * `dependencies:` manifest edits target `~/.skaile/skaile.yaml`, and deploy\n * fans out to every harness in {@link harnesses}. When `false` (default),\n * everything is project-scoped against the single {@link driverTarget}.\n */\n global?: boolean;\n /**\n * Global-mode harness set the deploy fans out to. When omitted in global mode,\n * resolved from `~/.skaile/skaile.yaml` `global_harnesses:` else auto-detection\n * (`resolveGlobalHarnesses`). Ignored in project mode. A `--harness` filter\n * narrows this to a subset.\n */\n harnesses?: DriverTarget[];\n /** @deprecated Use `harnesses`. Honoured only when `harnesses` is absent; removed in the next major. */\n backends?: DriverTarget[];\n /**\n * Catalog read-protocol fetcher used to resolve store-published assets. When\n * omitted, one is built per call from the configured stores\n * (`RemoteCatalogSource`). Injected mainly by tests to stay network-free.\n */\n storeFetcher?: StoreFetcher;\n /**\n * Byte fetcher used to fetch a store asset's files at its pinned commit before\n * deploy. When omitted, the production GitHub fetcher is used. Injected by\n * tests to stay network-free.\n */\n assetFetcher?: AssetFetcher;\n /**\n * Overrides the global `catalog.url` used as a store fallback when the project\n * declares no `stores:`. `\"local\"` disables the fallback; project `stores:` are\n * still asked. `\"\"` (`update --no-catalog`) asks no store at all, project `stores:`\n * included. When omitted, the URL is read from `~/.skaile/config.yaml` (`resolveConfig`).\n */\n catalogUrl?: string;\n /**\n * Overrides the index SQLite path read by {@link AssetManager.reportSoftDeps}\n * (default `~/.skaile/index.db` via `resolveIndexPath`). Injected by tests to\n * read a seeded index without touching the user's real one.\n */\n indexPath?: string;\n /**\n * Receives the warning printed when {@link AssetManager.add} picks one ref out of several\n * local libraries (which library was chosen and why); no other method warns. Defaults to\n * `console.warn`\n * with a `skaile:` prefix. A CLI with a live spinner passes a collector and\n * prints the lines after the spinner stops, so frames can't overwrite them.\n */\n onLibraryCollision?: (message: string, keys?: readonly string[]) => void;\n /**\n * An `add` that meets several colliding assets prints one summary line by default; `true`\n * prints each asset's full message (`skaile add --verbose`). A single collision always\n * prints in full.\n */\n verboseCollisions?: boolean;\n}\n\n/** Canonical git URL identity for the bundled factory source. Never fetched —\n * the bytes live inside the package (`factory-assets/`); the URL is only the\n * match key the provenance walker and `candidateToCatalogEntry` key off. */\nexport const FACTORY_SOURCE_URL = \"https://github.com/skaile-ai/ai-assets\";\n\n/**\n * Locate the built-in first-party skills/bundles shipped inside the package.\n *\n * Resolves through the shared {@link factoryAssetRoots} helper — the\n * `SKAILE_FACTORY_ASSETS_DIR` override layer (when set) ahead of the bundled\n * tree (in-repo source during dev, `dist/factory-assets/` after install), so a\n * container's override is honoured here identically to `serve`. Returns the\n * highest-precedence root that carries a `skaile.manifest.yaml` (the publication\n * manifest that names the source's publisher), or `null` when none qualifies —\n * the factory source is then simply not injected rather than erroring.\n */\nfunction resolveFactoryAssetsDir(): string | null {\n for (const dir of factoryAssetRoots()) {\n if (existsSync(join(dir, \"skaile.manifest.yaml\"))) return dir;\n }\n return null;\n}\n\n/** Read the declared `publisher` from a source's root `skaile.manifest.yaml`. */\nfunction readDeclaredPublisher(sourceDir: string): string | undefined {\n try {\n const raw = parseYaml(readFileSync(join(sourceDir, \"skaile.manifest.yaml\"), \"utf8\")) as {\n publisher?: unknown;\n } | null;\n return raw && typeof raw.publisher === \"string\" && raw.publisher.length > 0\n ? raw.publisher\n : undefined;\n } catch {\n return undefined;\n }\n}\n\n/**\n * The bundled factory source `{ dir, publisher }`, or `null` when no usable\n * bundle is present. Resolved once per process — the package location and the\n * bundled `skaile.manifest.yaml` are immutable for the process lifetime, so the\n * `require.resolve` + `existsSync` probes + YAML parse run a single time rather\n * than on every `loadConfig()` call. `undefined` = not yet computed.\n */\nlet factorySourceCache: { dir: string; publisher: string } | null | undefined;\n\nfunction resolveFactorySource(): { dir: string; publisher: string } | null {\n if (factorySourceCache !== undefined) return factorySourceCache;\n const dir = resolveFactoryAssetsDir();\n const publisher = dir ? readDeclaredPublisher(dir) : undefined;\n factorySourceCache = dir && publisher ? { dir, publisher } : null;\n return factorySourceCache;\n}\n\n/** The 5.12.0 omp deploy paths of `name` (`~/.omp/<dir>/<name>`) that exist on disk. */\nfunction legacyOmpPaths(component: AiComponent, name: string): string[] {\n const modern = `${sep}.omp${sep}agent${sep}`;\n return deployedPaths(component, name, \"omp\", true)\n .filter((path) => path.includes(modern))\n .map((path) => path.replace(modern, `${sep}.omp${sep}`))\n .filter(pathEntryExists);\n}\n\n/** True when two files, or two directory trees, hold the same bytes. A symlink never matches. */\nfunction sameBytes(a: string, b: string): boolean {\n try {\n const sa = lstatSync(a);\n const sb = lstatSync(b);\n if (sa.isSymbolicLink() || sb.isSymbolicLink()) return false;\n if (sa.isDirectory() !== sb.isDirectory()) return false;\n if (!sa.isDirectory()) return readFileSync(a).equals(readFileSync(b));\n const na = readdirSync(a).sort();\n const nb = readdirSync(b).sort();\n return (\n na.length === nb.length &&\n na.every((n, i) => n === nb[i] && sameBytes(join(a, n), join(b, n)))\n );\n } catch {\n return false;\n }\n}\n\n/** The `~/.skaile/skaile.yaml` key that records the harnesses of `add --global --harness`. */\nconst ENTRY_HARNESSES_KEY = \"global_asset_harnesses\";\n\nfunction sameList(a: readonly string[], b: readonly string[]): boolean {\n return a.length === b.length && a.every((v, i) => v === b[i]);\n}\n\n/** Read the `global_asset_harnesses:` map; rows with no known harness are dropped. */\nfunction decodeEntryHarnesses(value: unknown): Record<string, DriverTarget[]> {\n const out: Record<string, DriverTarget[]> = {};\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) return out;\n for (const [key, list] of Object.entries(value)) {\n if (!Array.isArray(list)) continue;\n const valid = list.filter((h): h is DriverTarget =>\n (SUPPORTED_DRIVER_TARGETS as string[]).includes(h as string),\n );\n if (valid.length > 0) out[key] = [...new Set(valid)];\n }\n return out;\n}\n\n/**\n * Programmatic API for managing AI assets in a Skaile workspace.\n *\n * `AssetManager` wraps repository management, catalog search, asset installation,\n * lock-file tracking, patch workflows, and workspace diagnostics. The CLI delegates\n * all `skaile catalog`, `skaile repo`, `skaile install`, `skaile add`, and\n * `skaile init` commands to this class.\n *\n * @example\n * ```typescript\n * import { AssetManager } from \"@skaile/workspaces/asset-manager\";\n *\n * const am = new AssetManager({ projectDir: \"/my-project\" });\n *\n * // Install all dependencies declared in skaile.yaml\n * const result = await am.install();\n * console.log(`Deployed: ${result.deployed.join(\", \")}`);\n *\n * // Add a single skill (resolves transitive deps, updates skaile.yaml)\n * const deployed = am.add(\"skill:my-skill\");\n *\n * // Search the catalog\n * const skills = am.search(\"code review\", \"skill\");\n * ```\n *\n * @docLink packages/asset-manager/concepts#asset-manager\n */\nexport class AssetManager {\n /** Resolved absolute path to the workspace root. */\n readonly projectDir: string;\n /** Agent framework driver target used for all deploy operations. */\n readonly driverTarget: DriverTarget;\n /** Whether this instance operates in global-install mode. */\n readonly global: boolean;\n /** Asset-kind registry shared with the host (one instance per process). */\n readonly registry: IAssetKindRegistry;\n private _knownKinds?: ReadonlySet<string>;\n /** Explicit global-harness override (global mode only); else auto-resolved. */\n private readonly harnessesOverride?: DriverTarget[];\n private readonly legacyCopiesRemoved: string[] = [];\n private readonly legacyCopiesKept: string[] = [];\n /** Injected catalog fetcher (tests / custom); falls back to a built one. */\n private readonly injectedStoreFetcher?: StoreFetcher;\n /** Injected byte fetcher for store staging; falls back to GitHub. */\n private readonly injectedAssetFetcher?: AssetFetcher;\n /** Injected global catalog URL override for the no-project-store fallback. */\n private readonly catalogUrlOverride?: string;\n /** Injected index SQLite path override (tests); else the default index.db. */\n private readonly indexPathOverride?: string;\n /** Sink for cross-library collision warnings; else `console.warn`. */\n private readonly onLibraryCollision?: (message: string, keys?: readonly string[]) => void;\n /** Print every colliding asset's full message instead of one summary ({@link AssetManagerOptions.verboseCollisions}). */\n private readonly verboseCollisions: boolean;\n /** Store URLs whose failed version lookup was already reported (one warning per URL). */\n private readonly warnedStoreVersionLookups = new Set<string>();\n /** Stores a lookup could not reach (store URL -> one line why); `add` reports them instead of \"not found\". */\n private readonly storeFailures = new Map<string, string>();\n /** Store URLs a lookup failed on because the client is air-gapped (`cache_ttl: 0`), not because the store is down. */\n private readonly airGappedStores = new Set<string>();\n /** Sources a provenance walk had to skip (source URL → why); one warning per source. */\n private readonly skippedSources = new Map<string, string>();\n /** `onSourceError` of every provenance walk: name the source once, leave it out, go on. */\n private readonly reportSourceError = (clone: SourceClone, err: unknown): void => {\n const why = err instanceof Error ? err.message : String(err);\n if (this.skippedSources.has(clone.sourceUrl)) return;\n this.skippedSources.set(clone.sourceUrl, why);\n console.warn(`skaile: source ${clone.sourceUrl} skipped: ${why}`);\n };\n\n constructor(opts: AssetManagerOptions) {\n this.projectDir = resolve(opts.projectDir);\n this.global = opts.global ?? false;\n this.registry = opts.registry;\n // Project mode deploys into the harness the project is configured for (the\n // `driver` that `skaile config show` resolves); `claude-code` only when the\n // project configures none. Global mode fans out over harnesses instead.\n this.driverTarget =\n opts.driverTarget ??\n (this.global ? undefined : resolveConfiguredDriverTarget(this.projectDir)) ??\n \"claude-code\";\n this.harnessesOverride = opts.harnesses ?? opts.backends;\n this.injectedStoreFetcher = opts.storeFetcher;\n this.injectedAssetFetcher = opts.assetFetcher;\n this.catalogUrlOverride = opts.catalogUrl;\n this.indexPathOverride = opts.indexPath;\n this.onLibraryCollision = opts.onLibraryCollision;\n this.verboseCollisions = opts.verboseCollisions ?? false;\n }\n\n /** Registered kind names — the `knownKinds` argument of the manifest scanners. */\n private get knownKinds(): ReadonlySet<string> {\n this._knownKinds ??= new Set(this.registry.getAllKinds());\n return this._knownKinds;\n }\n\n /**\n * The harness component dir a kind installs into (its provider's\n * `installTarget`), or `undefined` for composition-only kinds, which are only\n * cached in the store cache and composed at session start.\n */\n private installTarget(kind: string): AiComponent | undefined {\n return installTargetOf(this.registry, kind);\n }\n\n /**\n * Root for this manager's **state** — config SSOT, lock, cache, history.\n * `~/.skaile` in global mode (the cross-harness SSOT), else the project dir.\n * Deploy dirs are unaffected; they come from `DRIVER_TARGETS[target]`.\n */\n private get stateRoot(): string {\n return this.global ? globalSkaileDir() : this.projectDir;\n }\n\n /**\n * The harnesses a global deploy fans out to: the explicit `harnesses` override (a `--harness`\n * filter), else the explicit `global_harnesses:` of `~/.skaile/skaile.yaml`, else every harness\n * whose root dir exists under `~` plus the harness the project is configured for (a project on\n * a harness whose dir does not exist yet still gets its user-scope assets). In project mode\n * this is exactly `[driverTarget]`, so the shared fan-out loop degenerates to the\n * single-target path.\n */\n private targetHarnesses(): DriverTarget[] {\n if (!this.global) return [this.driverTarget];\n if (this.harnessesOverride && this.harnessesOverride.length > 0) return this.harnessesOverride;\n return this.defaultGlobalHarnesses();\n }\n\n /** The global harness set without a `--harness` filter (see {@link AssetManager.targetHarnesses}). */\n private defaultGlobalHarnesses(): DriverTarget[] {\n const resolved = resolveGlobalHarnesses();\n if (resolveGlobalSkWorkspaceConfig().global_harnesses?.length) return resolved;\n const configured = resolveConfiguredDriverTarget(this.projectDir);\n return configured && !resolved.includes(configured) ? [...resolved, configured] : resolved;\n }\n\n /**\n * `global_asset_harnesses:` of `~/.skaile/skaile.yaml`: the harnesses `add --global --harness`\n * limited an entry to, keyed by the declared ref without its pin. An entry with no row goes to\n * every global harness. Global mode only.\n */\n private readEntryHarnesses(): Record<string, DriverTarget[]> {\n if (!this.global) return {};\n const configPath = join(this.stateRoot, \"skaile.yaml\");\n if (!existsSync(configPath)) return {};\n try {\n const raw = parseYaml(readFileSync(configPath, \"utf8\")) as Record<string, unknown> | null;\n return decodeEntryHarnesses(raw?.[ENTRY_HARNESSES_KEY]);\n } catch {\n return {};\n }\n }\n\n /** The harnesses recorded for `kind:name` (`publisher` must agree when both sides have one). */\n private entryHarnessRecord(\n kind: string,\n name: string,\n publisher?: string,\n ): DriverTarget[] | undefined {\n const wantPub = publisher?.replace(/^@/, \"\");\n for (const [key, harnesses] of Object.entries(this.readEntryHarnesses())) {\n const id = parseAssetRefLoose(key);\n if (!id || id.kind !== kind || id.name !== name) continue;\n const havePub = id.publisher?.replace(/^@/, \"\");\n if (wantPub === undefined || havePub === undefined || havePub === wantPub) return harnesses;\n }\n return undefined;\n }\n\n /** Keep the entries a recorded `--harness` limit sends to `target` (all of them in project mode). */\n private entriesForHarness<E extends { kind: string; name: string; publisher?: string }>(\n entries: E[],\n target: DriverTarget,\n ): E[] {\n if (!this.global || Object.keys(this.readEntryHarnesses()).length === 0) return entries;\n return entries.filter((e) => {\n const recorded = this.entryHarnessRecord(e.kind, e.name, e.publisher);\n return !recorded || recorded.includes(target);\n });\n }\n\n /**\n * Set (or, with `harnesses` undefined, clear) the harness row of `ref` in the parsed\n * `~/.skaile/skaile.yaml` `raw`. Returns whether `raw` changed.\n */\n private setEntryHarnessRow(\n raw: Record<string, unknown>,\n ref: string,\n harnesses: DriverTarget[] | undefined,\n ): boolean {\n const id = parseAssetRefLoose(ref);\n if (!id) return false;\n const key = `${id.kind}:${id.publisher ? `@${id.publisher.replace(/^@/, \"\")}/` : \"\"}${id.name}`;\n const rows = decodeEntryHarnesses(raw[ENTRY_HARNESSES_KEY]);\n // Drop every row of the same asset (a bare row and a publisher row name it alike).\n let changed = false;\n for (const k of Object.keys(rows)) {\n const other = parseAssetRefLoose(k);\n if (\n other &&\n other.kind === id.kind &&\n other.name === id.name &&\n (!other.publisher || !id.publisher || other.publisher === id.publisher)\n ) {\n if (k === key && harnesses && sameList(rows[k], harnesses)) continue;\n delete rows[k];\n changed = true;\n }\n }\n if (harnesses && harnesses.length > 0 && !(key in rows)) {\n rows[key] = [...harnesses];\n changed = true;\n }\n if (!changed) return false;\n if (Object.keys(rows).length === 0) delete raw[ENTRY_HARNESSES_KEY];\n else raw[ENTRY_HARNESSES_KEY] = rows;\n return true;\n }\n\n /**\n * Delete the copies a 5.12.0 global install left in `~/.omp/skills`, `~/.omp/agents`,\n * `~/.omp/prompts` and `~/.omp/contracts` (omp reads `~/.omp/agent/<dir>`) for the assets just\n * deployed into omp's new folder, and remember them for {@link takeLegacyCopiesRemoved} (p744).\n */\n private sweepLegacyOmpCopies(entries: CatalogEntry[]): void {\n if (!this.global || !this.targetHarnesses().includes(\"omp\")) return;\n const locked = new Set(Object.keys(this.tryReadLock()?.assets ?? {}));\n const kept = readKeptLegacyCopies();\n for (const entry of entries) {\n const component = this.installTarget(entry.kind);\n if (!component || !entry.name) continue;\n if (!isDeployed(component, entry.name, \"omp\", true)) continue;\n const modern = deployedPaths(component, entry.name, \"omp\", true).filter((p) =>\n p.includes(`${sep}.omp${sep}agent${sep}`),\n );\n const recorded = [...locked].some((key) => {\n const id = parseCanonicalLockKey(key);\n return id.kind === entry.kind && id.name === entry.name;\n });\n for (const legacy of legacyOmpPaths(component, entry.name)) {\n // Only a copy skaile wrote: its bytes equal the copy just deployed, or the old global lock\n // recorded the asset (an agent changed shape, so its bytes cannot be compared). Anything\n // else is the user's own folder: keep it and say so.\n const twin = modern.find(\n (p) => p === legacy.replace(`${sep}.omp${sep}`, `${sep}.omp${sep}agent${sep}`),\n );\n // A folder an earlier run kept stays: the asset being in the lock now says nothing\n // about who wrote that folder.\n if (kept.has(legacy)) continue;\n if (recorded || (twin !== undefined && sameBytes(legacy, twin))) {\n rmSync(legacy, { recursive: true, force: true });\n this.legacyCopiesRemoved.push(legacy);\n } else {\n this.legacyCopiesKept.push(legacy);\n kept.add(legacy);\n writeKeptLegacyCopies(kept);\n }\n }\n }\n }\n\n /** The old omp copies the deploys since the last call kept, as skaile did not write them. */\n takeLegacyCopiesKept(): string[] {\n return this.legacyCopiesKept.splice(0);\n }\n\n /**\n * The old `~/.omp/<dir>/<name>` copies of the globally locked assets that are still on disk\n * (a 5.12.0 install wrote them; omp reads `~/.omp/agent/<dir>`). Global mode only. `check`,\n * `doctor` and `clean` with `--global` report or remove them (p911).\n */\n staleLegacyOmpCopies(): { ref: string; path: string }[] {\n if (!this.global) return [];\n const out: { ref: string; path: string }[] = [];\n const kept = readKeptLegacyCopies();\n for (const key of Object.keys(this.tryReadLock()?.assets ?? {})) {\n const id = parseCanonicalLockKey(key);\n const component = id.kind && id.name ? this.installTarget(id.kind) : undefined;\n if (!component || !id.name) continue;\n for (const path of legacyOmpPaths(component, id.name)) {\n if (!kept.has(path)) out.push({ ref: key, path });\n }\n }\n return out;\n }\n\n /** The old omp copies the deploys since the last call removed (see {@link sweepLegacyOmpCopies}). */\n takeLegacyCopiesRemoved(): string[] {\n return this.legacyCopiesRemoved.splice(0);\n }\n\n /**\n * The harnesses `add` / `install` deploy into: `[driverTarget]` for a project, the global\n * harness set (see {@link AssetManager.targetHarnesses}) for a global manager.\n */\n deployTargets(): DriverTarget[] {\n return this.targetHarnesses();\n }\n\n private get storeCacheDir(): string {\n if (this.global) return join(globalCacheRoot(), \"store\");\n return migrateLegacyDir(\n join(this.projectDir, \".skaile\", \"cache\", \"store\"),\n join(this.projectDir, \".skaile\", \"store-cache\"),\n );\n }\n\n private get reposDir(): string {\n if (this.global) return join(globalCacheRoot(), \"sources\");\n return migrateLegacyDir(\n join(this.projectDir, \".skaile\", \"cache\", \"sources\"),\n join(this.projectDir, \".skaile\", \"repos\"),\n );\n }\n\n /**\n * Project-scoped cache dirs rooted at `.skaile/cache/` (`store`, `sources`)\n * relative to `projectDir`. Reading is a side effect: it triggers lazy\n * migration of the legacy `.skaile/{store-cache,repos}` dirs.\n */\n get projectCacheDirs(): { store: string; sources: string } {\n return { store: this.storeCacheDir, sources: this.reposDir };\n }\n\n private get lockPath(): string {\n return join(this.stateRoot, \"skaile.lock.yaml\");\n }\n\n private get patchDir(): string {\n return join(this.projectDir, \".skaile\", \"patches\");\n }\n\n /** Deploy options for one harness. In global mode, `driverTarget` is the\n * fan-out target (not the constructor's `driverTarget`, which is project-only). */\n private deployOptsFor(\n target: DriverTarget,\n link?: boolean,\n onSecretFile?: (ref: string, path: string) => void,\n ): DeployOptions {\n return {\n registry: this.registry,\n driverTarget: target,\n global: this.global,\n cwd: this.projectDir,\n link: link === true,\n ...(onSecretFile\n ? { onSecretFile: (entry, p) => onSecretFile(canonicalEntryRef(entry), p) }\n : {}),\n };\n }\n\n /**\n * Names of the `mcp-server` assets the lock holds (the declaration ids, unscoped); a missing\n * `.mcp.json` entry of one counts as drift even before skaile owned it.\n */\n private lockedMcpNames(): Set<string> {\n return new Set(\n Object.keys(this.tryReadLock()?.assets ?? {})\n .map(parseCanonicalLockKey)\n .filter((id) => id.kind === \"mcp-server\" && id.name)\n .map((id) => id.name as string),\n );\n }\n\n /**\n * The payloads and managed `.mcp.json` entries of the project's **locked** `mcp-server`\n * assets that differ from what the declarations render (see {@link mcpServerDrift}), one row\n * per server, named by the lock identity `mcp-server:@publisher/name`; `key` is the lock key.\n * An `mcp_servers:` entry of `skaile.yaml` is configuration, not a locked asset: it has no\n * row. Empty for a global manager and for a project that locks no `mcp-server`.\n */\n private async mcpDriftRows(): Promise<\n Array<{ ref: string; key: string; drift: McpServerDrift }>\n > {\n if (this.global) return [];\n const locked = this.lockedMcpNames();\n if (locked.size === 0) return [];\n let rows: McpServerDrift[];\n try {\n rows = await mcpServerDrift(this.projectDir, this.driverTarget, { locked });\n } catch {\n return [];\n }\n const keys = Object.keys(this.tryReadLock()?.assets ?? {});\n const out: Array<{ ref: string; key: string; drift: McpServerDrift }> = [];\n for (const drift of rows) {\n const name = unscopedName(drift.id);\n const key = keys.find((k) => {\n const id = parseCanonicalLockKey(k);\n return id.kind === \"mcp-server\" && id.name === name;\n });\n if (!key) continue;\n const publisher = parseCanonicalLockKey(key).publisher;\n const ref = publisher ? `mcp-server:@${publisher}/${name}` : `mcp-server:${name}`;\n out.push({ ref, key, drift });\n }\n return out;\n }\n\n /**\n * Render the project's declared MCP servers into the driver target's own\n * native MCP config (`<project>/.mcp.json` for `claude-code`), so the coding\n * agent sees the same servers skaile's agent loop wires up.\n *\n * Project scope only: a `--global` install has no project-scope config to\n * write, and the coding agent's user scope is a large user-state file this\n * must not touch. Never fails an install — a render error is warned and\n * swallowed.\n *\n * @returns The payload files and config entries the render wrote back (and the files it\n * removed) because they had drifted from the declaration: `install` names them, as it does\n * a restored skill file.\n */\n private async renderDriverMcpConfig(): Promise<RestoredAsset[]> {\n if (this.global) return [];\n const before = await this.mcpDriftRows();\n try {\n await renderMcpServerConfig(this.projectDir, this.driverTarget);\n } catch (err) {\n console.warn(\n `skaile: could not render MCP config for ${this.driverTarget}: ${\n err instanceof Error ? err.message : String(err)\n }`,\n );\n return [];\n }\n if (before.length === 0) return [];\n const after = await this.mcpDriftRows();\n const restored: RestoredAsset[] = [];\n for (const { ref, key, drift } of before) {\n const left = after.find((a) => a.ref === ref)?.drift;\n const stillWrong = new Set([...(left?.missing ?? []), ...(left?.modified ?? [])]);\n const rewritten = [...drift.missing, ...drift.modified].filter((f) => !stillWrong.has(f));\n const removed = drift.extra.filter((f) => !left?.extra.includes(f));\n if (rewritten.length > 0 || removed.length > 0)\n restored.push({ ref: key, restored: rewritten, removed });\n }\n return restored;\n }\n\n /**\n * Render every agent instance of `skaile.yaml` into the driver target's native\n * agent files (`.claude/agents/<id>.md`, …) and prune the renderings of\n * instances that left the config. Runs after the skills deploy, so composed\n * skills resolve. Project scope only. An instance whose `ref` resolves to no agent is\n * reported in `agentInstanceErrors`; any other render error is warned and swallowed.\n */\n private async renderAgentInstances(): Promise<\n Pick<\n InstallResult,\n \"agentInstances\" | \"agentFilesRemoved\" | \"agentInstanceErrors\" | \"agentInstanceDetails\"\n >\n > {\n if (this.global) return {};\n try {\n const result = installAgentInstances({\n projectDir: this.projectDir,\n driverTarget: this.driverTarget,\n });\n // An `agent:` ref that finds no agent is one line with the advice `check` gives, not the\n // resolver's list of searched directories (kept in `agentInstanceDetails`, p1083).\n const details: string[] = [];\n for (const u of unboundAgentInstances(this.projectDir, this.driverTarget)) {\n if (!u.ref.startsWith(\"agent:\")) continue;\n const at = result.errors.findIndex((e) => e.startsWith(`agent instance \"${u.id}\":`));\n if (at < 0) continue;\n details.push(result.errors[at]!);\n const { lead, advice } = await this.unboundAgentAdvice(u.ref);\n result.errors[at] = `agent instance \"${u.id}\" is bound to ${u.ref} but ${lead} — ${advice}`;\n }\n for (const w of [...result.warnings, ...result.errors]) console.warn(`skaile: ${w}`);\n return {\n agentInstances: result.instances,\n agentFilesRemoved: result.removed,\n ...(result.errors.length > 0 ? { agentInstanceErrors: result.errors } : {}),\n ...(details.length > 0 ? { agentInstanceDetails: details } : {}),\n };\n } catch (err) {\n console.warn(\n `skaile: could not render agent instances for ${this.driverTarget}: ${\n err instanceof Error ? err.message : String(err)\n }`,\n );\n return {};\n }\n }\n\n private loadConfig(): {\n repositories: Record<string, SourceDeclaration>;\n sources: SourceEntry[];\n stores: StoreEntry[];\n dependencies: string[];\n overrides: OverrideEntry[];\n patches: Record<string, string>;\n config: SkWorkspaceConfig;\n } {\n // resolveSkWorkspaceConfig runs the canonical normalizer and throws on\n // legacy keys (`repositories:` / `ai_resources:`) — propagate to the caller.\n // Global mode reads ONLY the user-scope SSOT (`~/.skaile/skaile.yaml`) so a\n // project's deps never leak into a global fan-out (and vice versa).\n const config = this.global\n ? resolveGlobalSkWorkspaceConfig()\n : resolveSkWorkspaceConfig(this.projectDir);\n\n const sources = config.sources ?? [];\n const stores = config.stores ?? [];\n const dependencies = config.dependencies ?? [];\n const overrides = config.overrides ?? [];\n const patches = config.patches ?? {};\n\n // Source clones live in the global clone cache (cache/sources); the slug is\n // the cache key for ensureRepo. getGlobalCacheDir() migrates legacy roots.\n const sourcesDir = getGlobalCacheDir();\n const repositories: Record<string, SourceDeclaration> = {};\n for (const s of sources) {\n const slug = sourceCacheKey(s.url);\n if (repositories[slug]) continue;\n repositories[slug] = {\n path: join(sourcesDir, slug),\n url: s.url,\n ...(s.publisher ? { publisher: s.publisher } : {}),\n };\n }\n\n // Implicit built-in source: the first-party assets shipped inside the\n // package (`dist/factory-assets/`). Always available, zero config — keyed by\n // its declared publisher so refs (`kind:@<publisher>/name`) and `info`\n // resolve cleanly. Skipped when the user already declares the same source\n // explicitly (avoids duplicate catalog entries) or when no bundle is present.\n const factory = resolveFactorySource();\n const factoryUrl = normalizeRepoUrl(FACTORY_SOURCE_URL);\n const alreadyDeclared = Object.values(repositories).some(\n (d) => d.url !== undefined && normalizeRepoUrl(d.url) === factoryUrl,\n );\n if (factory && !alreadyDeclared && !repositories[factory.publisher]) {\n repositories[factory.publisher] = {\n path: factory.dir,\n url: FACTORY_SOURCE_URL,\n factory: true,\n };\n }\n\n return { repositories, sources, stores, dependencies, overrides, patches, config };\n }\n\n /** Build provenance-index clones from the resolved source declarations. */\n private buildClones(repositories: Record<string, SourceDeclaration>): SourceClone[] {\n const clones: SourceClone[] = [];\n for (const [slug, decl] of Object.entries(repositories)) {\n const localPath = this.resolveRepoDir(decl, slug);\n if (!localPath || !existsSync(localPath)) continue;\n const commit = getRepoCommit(localPath) ?? \"0\".repeat(40);\n clones.push({\n localPath,\n sourceUrl: decl.url ?? localPath,\n commit,\n tag: decl.branch,\n ...(decl.publisher ? { publisher: decl.publisher } : {}),\n // A curated store manifest (`source manifest init` → the flat\n // `~/.skaile/store/manifests/<slug>.yaml`) is the authoritative inventory\n // for a foreign source. Point the walker at it so `add`/resolve honor the\n // curated publisher + asset set — the same overlay `source add` indexed.\n overlayManifestPath: decl.url ? storeOverlayPathForUrl(decl.url) : undefined,\n });\n }\n return clones;\n }\n\n /**\n * Bridge a resolved {@link ProvenanceCandidate} to a {@link CatalogEntry} for\n * the deploy pipeline. `source` is the absolute path to the asset's primary\n * manifest (or its directory) inside the clone; `publisher` is set to the\n * clone slug so `deployAll`'s repositories lookup resolves local-vs-remote.\n */\n private candidateToCatalogEntry(\n c: ProvenanceCandidate,\n repositories: Record<string, SourceDeclaration>,\n ): DeployableEntry | null {\n // Find the clone slug whose declaration URL matches the candidate's source.\n let slug: string | undefined;\n let cloneDir: string | undefined;\n for (const [s, decl] of Object.entries(repositories)) {\n if (decl.url === c.sourceUrl) {\n slug = s;\n cloneDir = this.resolveRepoDir(decl, s) ?? undefined;\n break;\n }\n }\n if (!cloneDir) {\n // Unknown source — store assets whose bytes get staged are routed via\n // `stagedCandidateToEntry` before reaching here, so this branch only hits\n // candidates without bytes. Fall back to first clone.\n const first = Object.entries(repositories)[0];\n if (first) {\n slug = first[0];\n cloneDir = this.resolveRepoDir(first[1], first[0]) ?? undefined;\n }\n }\n if (!cloneDir || !slug) return null;\n\n // Resolve a concrete manifest file (suffix-aware for prompt/flow), falling\n // back to the first file — never the clone dir, which deploy can't copy as a\n // single asset (cpSync without recursive throws on a directory).\n const mdRel =\n matchManifestPath(\n c.kind,\n c.files.map((f) => f.path),\n ) ?? c.files[0]?.path;\n const source = mdRel ? join(cloneDir, mdRel) : cloneDir;\n\n const entry: DeployableEntry = {\n ...(mdRel\n ? {\n files: filesUnderManifestDir(\n c.files.map((f) => f.path),\n mdRel,\n ),\n }\n : {}),\n name: c.name,\n kind: c.kind as CatalogEntry[\"kind\"],\n description: c.description ?? \"\",\n source,\n publisher: slug,\n version: c.version,\n // `publisher` above is the clone key; the printed ref carries the real publisher.\n canonicalRef: assetRefToStr({\n kind: c.kind,\n name: c.name,\n publisher: c.publisher,\n pin: c.version || undefined,\n }),\n requires: [],\n // Manifest-declared deps are authoritative for the candidate's deps.\n dependencies: c.deps ?? [],\n metadata: c.metadata,\n };\n if (c.category != null) entry.category = c.category;\n if (c.keywords && c.keywords.length > 0) entry.keywords = c.keywords;\n if (c.license != null) entry.license = c.license;\n if (c.homepage != null) entry.homepage = c.homepage;\n return entry;\n }\n\n /**\n * The {@link ProvenanceCandidate} a source- or store-origin lock entry stands for: what a\n * deploy needs to restore the asset from the commit the lock names (`files[]` is the asset's\n * whole file set). `null` for a library-origin entry or a key that is not a canonical ref.\n * The source URL is the declared source's own spelling (the bundled factory tree and a\n * `sources:` entry match their declaration by it).\n */\n private lockedCandidate(\n key: string,\n entry: LockEntry,\n repositories: Record<string, SourceDeclaration>,\n ): ProvenanceCandidate | null {\n if (!entry.source) return null;\n const { publisher, kind, name, version } = parseCanonicalLockKey(key);\n if (!publisher || !kind || !name) return null;\n const url = entry.source.url;\n const factory = Object.values(repositories).find((d) => d.factory);\n const declared =\n factory?.url !== undefined && normalizeRepoUrl(url) === normalizeRepoUrl(factory.url)\n ? factory\n : repositories[sourceCacheKey(url)];\n return {\n publisher,\n kind,\n name,\n version: version ?? \"\",\n sourceUrl: declared?.url ?? url,\n commit: entry.source.commit,\n files: entry.files,\n sha256: entry.sha256,\n };\n }\n\n /**\n * Resolve refs the source/store pass could not against the user's registered\n * **libraries** (local authoring places). Each library dir is scanned on disk\n * under its declared publisher (its root `skaile.manifest.yaml`, falling back\n * to the kebab-cased library name); a matching asset becomes a deployable\n * {@link CatalogEntry} whose `source` points at the on-disk manifest. This is\n * the consume side of `library create` — a freshly authored asset is\n * deployable with `skaile add <kind>:@<publisher>/<name>` without publishing.\n *\n * Local read (no network) and mirrors how `findSkills` discovers library\n * content. The returned `libraryOf` map names the library each entry came from\n * so callers can lock it as library-origin (see {@link libraryLockEntries}).\n *\n * @param opts.quiet - Skip the cross-library collision warning (a lookup that only\n * builds an error hint must not warn).\n * @param opts.library - Resolve only from this library (the one a lock entry names), not\n * from every registered one. Never warns: no choice is made between libraries.\n * @param opts.lockedLibraries - `kind:publisher/name` → the library its lock entry names\n * ({@link AssetManager.lockedLibraryNames}). A ref listed here resolves from that library\n * when it holds a match, whatever the default library is.\n * @returns the matched deploy entries, the set of `missing` refs covered, and\n * each entry's originating library name.\n */\n private async resolveLibraryEntries(\n missing: string[],\n opts: {\n quiet?: boolean;\n library?: string;\n lockedLibraries?: ReadonlyMap<string, string | null>;\n /** `update`: a tie between equal versions goes to the default library, then to the locked library or the one holding the locked bytes. */\n preferLocked?: PreferLocked;\n } = {},\n ): Promise<LibraryResolution> {\n const resolved = new Set<string>();\n const libraryOf = new Map<CatalogEntry, string>();\n if (missing.length === 0) return { entries: [], resolved, libraryOf };\n\n const scan = await this.scanLibraries();\n if (!scan) return { entries: [], resolved, libraryOf };\n const { byKey, isDefaultLib, libraryDir } = scan;\n\n const entries: DeployableEntry[] = [];\n const fileSets = new Map<string, Map<string, string[]>>();\n const diskHashes = new Map<string, Map<string, string>>();\n let snap: LibraryIndexSnapshot | null | undefined;\n const allCandidates = [...byKey.values()].flat();\n for (const ref of missing) {\n const parsed = parseRefTolerant(ref);\n if (!parsed) continue;\n const hash = ref.indexOf(\"#\");\n const pin = parsed.pin ?? (hash >= 0 ? ref.slice(hash + 1) : undefined);\n // A publisher-less ref (`kind:name`, what `info`/`diff`/`why` accept) matches\n // on kind + name across every publisher; the highest version wins below.\n const key = parsed.publisher\n ? `${parsed.kind}:@${parsed.publisher}/${parsed.name}`\n : undefined;\n // Honour an explicit version pin (SemVer range, exact, or SHA); an unpinned\n // ref accepts every on-disk version. Same matcher `resolveAll` uses for sources.\n const scanned = (\n key\n ? (byKey.get(key) ?? [])\n : allCandidates.filter(\n (c) => c.entry.kind === parsed.kind && c.entry.name === parsed.name,\n )\n ).filter((c) => !opts.library || c.library === opts.library);\n // An asset file that declares no version of its own (AGENT.md frontmatter) has the\n // indexed one, as the lock key does: a pin matches it and the ref printed for the deploy\n // carries it. A copy, so the scanned catalog entry stays as the library scan produced it.\n const pool: typeof scanned = [];\n for (const c of scanned) {\n if (c.entry.version) {\n pool.push(c);\n continue;\n }\n if (snap === undefined) snap = await this.loadLibraryIndex();\n const version = libraryAssetVersion(\n snap,\n c.library,\n { kind: c.entry.kind, publisher: c.entry.publisher ?? \"\", name: c.entry.name },\n undefined,\n );\n pool.push(version ? { ...c, entry: { ...c.entry, version } } : c);\n }\n let candidates = pool.filter((c) => !pin || matchPin(pin, c.entry.version ?? \"\"));\n // A locked asset stays on the library its lock entry names while that library still\n // holds a match; a pin it does not satisfy, or a library that dropped the asset, moves it.\n let lockedLibrary: string | null | undefined;\n const lockedMap = opts.preferLocked?.libraries ?? opts.lockedLibraries;\n if (parsed.publisher) {\n lockedLibrary = lockedMap?.get(\n `${parsed.kind}:${parsed.publisher.replace(/^@/, \"\")}/${parsed.name}`,\n );\n } else {\n // No publisher on the ref: the lock entry is the one with this kind and name, when\n // exactly one has it.\n const same = [...(lockedMap ?? [])].filter(([k]) => {\n const slash = k.indexOf(\"/\");\n return k.startsWith(`${parsed.kind}:`) && k.slice(slash + 1) === parsed.name;\n });\n if (same.length === 1) lockedLibrary = same[0]![1];\n }\n if (lockedLibrary && !opts.preferLocked) {\n const inLocked = candidates.filter((c) => c.library === lockedLibrary);\n if (inLocked.length > 0) candidates = inLocked;\n }\n if (candidates.length === 0) continue;\n // Highest version wins; an equal version goes to the default library, then (`update`\n // only: a rename or a same-ref copy must not swap the source) to the library the lock\n // names, then the library name — so the pick never depends on scan order.\n const prefer = opts.preferLocked\n ? (c: { entry: CatalogEntry; library: string }): number => {\n if (lockedLibrary && c.library === lockedLibrary) return 0;\n const id = `${c.entry.kind}:${(c.entry.publisher ?? \"\").replace(/^@/, \"\")}/${c.entry.name}`;\n const lockedSha = opts.preferLocked?.shas.get(id);\n const libPath = libraryDir.get(c.library);\n const onDisk =\n lockedSha && libPath\n ? libraryDiskHashes(libPath, diskHashes, this.registry).get(\n `${c.entry.kind}:${c.entry.name}`,\n )\n : undefined;\n return onDisk !== undefined && onDisk === lockedSha ? 1 : 2;\n }\n : undefined;\n candidates.sort(libraryPreference(isDefaultLib, prefer));\n const hit = candidates[0]!;\n // `library index` skips and `validate` fails an asset whose version is not semver; `add`\n // and `install` refuse it with the same text instead of deploying and locking it (p743).\n if (hit.entry.version && !SEMVER_RE.test(hit.entry.version)) {\n throw new LibraryEntryError(\n `${canonicalEntryRef(hit.entry)} (library ${hit.library}): ${invalidSemverMessage(hit.entry.version)}. Set a valid version in the asset file and run \\`skaile library index ${hit.library}\\`.`,\n );\n }\n // The flow engine loads `<id>/<id>.flow.yaml` only; a flow file named otherwise is ignored at\n // run time, so `add` refuses it with the text `validate` prints (p871).\n const flowFileError =\n hit.entry.kind === \"flow\" && hit.entry.source\n ? flowFileNameError({ id: hit.entry.name }, hit.entry.source.split(/[\\\\/]/).pop())\n : undefined;\n if (flowFileError) {\n throw new LibraryEntryError(\n `${canonicalEntryRef(hit.entry)} (library ${hit.library}): ${flowFileError}. Fix it, then run \\`skaile library index ${hit.library}\\`.`,\n );\n }\n if (!opts.quiet && !opts.library) {\n // Same version, different bytes: the version alone does not say the copies are equal.\n const hashOf = (c: { entry: CatalogEntry; library: string }): string | undefined => {\n const libPath = libraryDir.get(c.library);\n return libPath\n ? libraryDiskHashes(libPath, diskHashes, this.registry).get(\n `${c.entry.kind}:${c.entry.name}`,\n )\n : undefined;\n };\n const hitHash = hashOf(hit);\n const sameVersionDiffers = candidates\n .filter((c) => c.library !== hit.library && c.entry.version === hit.entry.version)\n .filter((c) => {\n const other = hashOf(c);\n return hitHash !== undefined && other !== undefined && other !== hitHash;\n })\n .map((c) => c.library);\n this.warnLibraryCollision(\n `${hit.entry.kind}:@${hit.entry.publisher}/${hit.entry.name}`,\n candidates,\n hit,\n sameVersionDiffers,\n );\n }\n const entry = hit.entry;\n withLibraryFiles(entry, libraryDir.get(hit.library)!, fileSets, this.registry);\n entries.push(entry);\n libraryOf.set(entry, hit.library);\n resolved.add(ref);\n }\n return { entries, resolved, libraryOf };\n }\n\n /**\n * Scan every candidate library (the set {@link resolveLibraryEntries} resolves from)\n * into `kind:@publisher/name` → every holder, across all libraries and versions.\n *\n * @param minRoots - Return `null` without scanning when fewer candidate libraries\n * exist (a cross-library question needs at least two).\n * @returns `null` when there is no candidate library or none holds an asset.\n */\n private async scanLibraries(minRoots = 1): Promise<{\n byKey: Map<string, Array<{ entry: DeployableEntry; library: string }>>;\n isDefaultLib: Map<string, boolean>;\n libraryDir: Map<string, string>;\n } | null> {\n // Candidate libraries: every registered one at its registered path (it may\n // live anywhere, e.g. `library init --path`), plus any unregistered\n // subdirectory of the libraries dir (a hand-made library never `init`ed, and not one that\n // was unregistered with `library remove`).\n // `<libraries dir>/installed` is never a library: it holds the assets\n // `skaile install <ref>` placed from the store, reachable by their real ref.\n const roots: Array<{ name: string; dir: string; isDefault: boolean; publisher?: string }> = [];\n for (const l of (await this.loadLibraryIndex())?.libraries ?? []) {\n if (l.name === GLOBAL_INSTALL_DIR_NAME) continue;\n // A source's library row records the publisher `source add --publisher` declared: the\n // one identity of its assets (p967), not a second one made of the library name.\n const cfg = l.backendConfig;\n const publisher = \"url\" in cfg ? cfg.publisher : undefined;\n if (existsSync(l.path)) {\n roots.push({\n name: l.name,\n dir: l.path,\n isDefault: l.isDefault,\n ...(publisher ? { publisher } : {}),\n });\n }\n }\n const registered = new Set(roots.map((r) => r.name));\n // A library `library remove` unregistered (without `--purge`) keeps its directory, which no longer resolves.\n const unregistered = unregisteredLibraryNames();\n try {\n const librariesRoot = resolveLibraryDir();\n if (existsSync(librariesRoot)) {\n for (const dirent of readdirSync(librariesRoot, { withFileTypes: true })) {\n if (\n dirent.isDirectory() &&\n dirent.name !== GLOBAL_INSTALL_DIR_NAME &&\n !registered.has(dirent.name) &&\n !unregistered.has(dirent.name)\n ) {\n roots.push({\n name: dirent.name,\n dir: join(librariesRoot, dirent.name),\n isDefault: false,\n });\n }\n }\n }\n } catch {\n // No readable libraries dir: only registered libraries remain.\n }\n if (roots.length === 0 || roots.length < minRoots) return null;\n\n // Index every library asset by its canonical `kind:@publisher/name` key,\n // keeping EVERY candidate (all libraries, all versions): an explicit\n // `#version` must find the library that holds it even when another library\n // holds a higher one, and a cross-library collision is surfaced, not hidden.\n const byKey = new Map<string, Array<{ entry: DeployableEntry; library: string }>>();\n const libraryDir = new Map(roots.map((r) => [r.name, r.dir]));\n const isDefaultLib = new Map(roots.map((r) => [r.name, r.isDefault]));\n for (const { name, dir, publisher: declared } of roots) {\n const publisher = readDeclaredPublisher(dir) ?? declared ?? slugifyAssetName(name);\n for (const entry of await scanDirectory(dir, publisher, { knownKinds: this.knownKinds })) {\n const key = `${entry.kind}:@${entry.publisher}/${entry.name}`;\n const list = byKey.get(key);\n if (list) list.push({ entry, library: name });\n else byKey.set(key, [{ entry, library: name }]);\n }\n }\n return byKey.size === 0 ? null : { byKey, isDefaultLib, libraryDir };\n }\n\n /**\n * Every ref that more than one registered library holds, with one row per holder\n * (all libraries, all versions) in the order `add` prefers them: the first row is\n * the one `add <ref>` deploys. The local index keeps a single row per ref and\n * version, so `search` reads this to show equal-version copies in both libraries.\n *\n * @returns `kind:@publisher/name` → holders; refs held by one library are absent.\n */\n async libraryHolders(): Promise<Map<string, LibraryHolder[]>> {\n const out = new Map<string, LibraryHolder[]>();\n const scan = await this.scanLibraries(2);\n if (!scan) return out;\n for (const [key, candidates] of scan.byKey) {\n if (new Set(candidates.map((c) => c.library)).size < 2) continue;\n const sorted = [...candidates].sort(libraryPreference(scan.isDefaultLib));\n out.set(\n key,\n sorted.map((c, i) => ({\n library: c.library,\n version: c.entry.version ?? \"\",\n description: c.entry.description ?? \"\",\n picked: i === 0,\n })),\n );\n }\n return out;\n }\n\n /**\n * Every asset a registered library holds, read from the library directories themselves\n * (not the local index, which keeps one row per ref and version and loses a ref when\n * another library re-publishes it). One row per holder, all versions.\n *\n * @returns `[]` when no library holds an asset. Never warns.\n */\n async libraryAssets(): Promise<Array<{ entry: CatalogEntry; library: string }>> {\n const scan = await this.scanLibraries();\n if (!scan) return [];\n return [...scan.byKey.values()].flat();\n }\n\n /**\n * Every origin that holds `ref` (`kind:@publisher/name`) with the version it holds, in\n * the order `add <ref>` prefers them, so the first row is the one `add` deploys: the\n * project's source clones and the bundled factory source (highest version first), then\n * the registered libraries. `add`, `info` and `search` all read this, so the three name\n * one origin for one ref. Stores are not asked (no network).\n *\n * @returns one row per origin and version; `[]` for a ref without a publisher or one\n * nothing holds. Never warns.\n */\n async refOrigins(ref: string): Promise<RefOrigin[]> {\n const parsed = parseRefTolerant(ref);\n if (!parsed?.publisher) return [];\n const key = `${parsed.kind}:@${parsed.publisher}/${parsed.name}`;\n return (await this.collectOrigins(key)).get(key) ?? [];\n }\n\n /**\n * Every ref (`kind:@publisher/name`) that several origins hold at different versions,\n * with its origins in {@link refOrigins} order. A ref the origins hold at one version\n * has nothing to choose between and is left out.\n */\n async competingOrigins(): Promise<Map<string, RefOrigin[]>> {\n const out = new Map<string, RefOrigin[]>();\n for (const [key, origins] of await this.allOrigins()) {\n if (new Set(origins.map((o) => o.version)).size > 1) out.set(key, origins);\n }\n return out;\n }\n\n /**\n * The origins of {@link refOrigins} for every ref, keyed by `kind:@publisher/name`: the\n * version in each row is the one `add` locks (a source asset whose file declares none is\n * `0.0.0-sha.<commit>`), which `search` lists too (p855).\n */\n async allOrigins(): Promise<Map<string, RefOrigin[]>> {\n return this.collectOrigins();\n }\n\n /**\n * The origins of {@link refOrigins} for every ref, or for the one `only` names\n * (`kind:@publisher/name`), keyed by `kind:@publisher/name`.\n */\n private async collectOrigins(only?: string): Promise<Map<string, RefOrigin[]>> {\n const { repositories, sources } = this.loadConfig();\n this.ensureSourceClonesQuiet(repositories, sources);\n const clones = this.buildClones(repositories);\n const cloneDirs = new Set(clones.map((c) => resolve(c.localPath)));\n const index = await buildProvenanceIndex(clones, {\n projectDir: this.projectDir,\n knownKinds: this.knownKinds,\n onSourceError: this.reportSourceError,\n });\n const factoryUrl = normalizeRepoUrl(FACTORY_SOURCE_URL);\n const hasFactory = Object.values(repositories).some((d) => d.factory);\n const out = new Map<string, RefOrigin[]>();\n const originsOf = (key: string): RefOrigin[] => {\n let list = out.get(key);\n if (!list) {\n list = [];\n out.set(key, list);\n }\n return list;\n };\n for (const candidates of index.values()) {\n const first = candidates[0];\n if (!first) continue;\n const key = `${first.kind}:@${first.publisher}/${first.name}`;\n if (only !== undefined && key !== only) continue;\n const held = [...candidates].sort((a, b) => {\n const va = coerceVersion(a.version);\n const vb = coerceVersion(b.version);\n if (semverGt(va, vb)) return -1;\n if (semverGt(vb, va)) return 1;\n return a.sourceUrl.localeCompare(b.sourceUrl);\n });\n for (const c of held) {\n const factory = hasFactory && normalizeRepoUrl(c.sourceUrl) === factoryUrl;\n originsOf(key).push({\n kind: factory ? \"factory\" : \"source\",\n label: factory ? \"factory\" : sourceShortName(c.sourceUrl),\n version: c.version,\n description: c.description ?? \"\",\n });\n }\n }\n const scan = await this.scanLibraries();\n const prefer = libraryPreference(scan?.isDefaultLib ?? new Map());\n for (const [key, holders] of scan?.byKey ?? []) {\n if (only !== undefined && key !== only) continue;\n for (const c of [...holders].sort(prefer)) {\n // `source sync` registers a source clone as a library: the clone is listed once, as a source.\n const dir = scan?.libraryDir.get(c.library);\n if (dir && cloneDirs.has(resolve(dir))) continue;\n originsOf(key).push({\n kind: \"library\",\n label: c.library,\n version: c.entry.version ?? \"\",\n description: c.entry.description ?? \"\",\n });\n }\n }\n return out;\n }\n\n /**\n * Where each missed publisher-qualified ref went when its publisher changed, for every\n * ref at once (one library scan, one lock read):\n * - `moved` when a registered library holds the same kind + name under another publisher.\n * When the lock ties the missed ref to a library, only that library is looked at (an\n * asset of the same name in another library is a different asset). Without a lock\n * entry, a library asset the project already declares or locks under its own ref is\n * not offered, and two candidate publishers are ambiguous: no hint;\n * - `lockedAs` when the lock holds the same kind + name under another publisher, records\n * the library it came from, and that library now holds the asset under yet another\n * publisher than the locked one. An unrelated asset that merely shares kind + name does\n * not qualify.\n *\n * @param refs - Missed refs; a trailing `(reason)` after the first space is ignored.\n * @returns one finding per ref that has one. Never warns.\n */\n private async publisherChangeFindings(refs: string[]): Promise<Map<string, PublisherChange>> {\n const out = new Map<string, PublisherChange>();\n const wanted = new Map<string, { kind: string; name: string; publisher: string }>();\n for (const ref of refs) {\n const parsed = parseRefTolerant(ref.split(\" \")[0] ?? ref);\n if (parsed?.publisher) {\n wanted.set(ref, { kind: parsed.kind, name: parsed.name, publisher: parsed.publisher });\n }\n }\n if (wanted.size === 0) return out;\n\n const lockEntries = Object.entries(this.tryReadLock()?.assets ?? {});\n const scan = await this.scanLibraries();\n if (!scan) return out;\n // Identities (`publisher/kind:name`) the project already holds: not a place a ref moved to.\n const held = new Set<string>();\n for (const [key] of lockEntries) {\n const { publisher, kind, name } = parseCanonicalLockKey(key);\n if (publisher && kind && name) held.add(`${publisher}/${kind}:${name}`);\n }\n for (const d of this.loadConfig().dependencies) {\n const id = refIdentity(d);\n if (id !== null) held.add(id);\n }\n\n for (const [ref, w] of wanted) {\n const origin = lockEntries\n .map(([key, e]) => ({ id: parseCanonicalLockKey(key), library: e.library }))\n .find(\n ({ id, library }) =>\n library &&\n !library.installed &&\n id.kind === w.kind &&\n id.name === w.name &&\n id.publisher === w.publisher,\n )?.library?.name;\n const pool = [...scan.byKey.values()]\n .flat()\n .filter(\n (c) =>\n c.entry.kind === w.kind &&\n c.entry.name === w.name &&\n c.entry.publisher !== w.publisher &&\n (origin\n ? c.library === origin\n : !held.has(`${c.entry.publisher}/${c.entry.kind}:${c.entry.name}`)),\n );\n const publishers = new Set(pool.map((c) => c.entry.publisher));\n const best =\n publishers.size === 1 ? pool.sort(libraryPreference(scan.isDefaultLib))[0] : undefined;\n const moved = best?.entry;\n const movedLibrary = best?.library;\n const finding: PublisherChange = {};\n for (const [key, entry] of lockEntries) {\n const id = parseCanonicalLockKey(key);\n if (\n id.kind === w.kind &&\n id.name === w.name &&\n id.publisher &&\n id.publisher !== w.publisher &&\n entry.library &&\n moved &&\n movedLibrary === entry.library.name &&\n moved.publisher !== id.publisher\n ) {\n finding.lockedAs = `${id.kind}:@${id.publisher}/${id.name}`;\n break;\n }\n }\n if (moved && moved.publisher !== w.publisher) {\n finding.moved = {\n ref: `${moved.kind}:@${moved.publisher}/${moved.name}`,\n ...(movedLibrary ? { library: movedLibrary } : {}),\n };\n }\n if (finding.lockedAs || finding.moved) out.set(ref, finding);\n }\n return out;\n }\n\n /**\n * Explain misses caused by a publisher change, as parenthesized hint text per ref:\n * `did you mean <ref>?` when a registered library holds the same kind + name under\n * another publisher, and `locked as <lockRef>; run skaile install to re-resolve` when\n * the lock holds it under the library's previous publisher (see\n * {@link AssetManager.publisherChangeFindings}).\n *\n * @param refs - Missed refs; a trailing `(reason)` after the first space is ignored.\n * @returns hint text per ref, only for refs that have one. Never warns.\n */\n private async publisherChangeHints(refs: string[]): Promise<Record<string, string>> {\n const out: Record<string, string> = {};\n for (const [ref, f] of await this.publisherChangeFindings(refs)) {\n const hints: string[] = [];\n if (f.lockedAs) hints.push(`locked as ${f.lockedAs}; run skaile install to re-resolve`);\n if (f.moved) hints.push(`did you mean ${f.moved.ref}?`);\n out[ref] = hints.map((h) => ` (${h})`).join(\"\");\n }\n return out;\n }\n\n /**\n * What the user has to change for each ref that is locked from a library but resolves\n * nowhere any more, where `skaile install` cannot help: the library is not registered\n * (renamed away or removed), the library now publishes the asset under another\n * publisher, or the library no longer holds it. A ref the lock does not tie to a\n * library has no entry.\n *\n * @param refs - Declared or locked refs, `kind:@publisher/name` (a trailing `(reason)`\n * after the first space is ignored).\n * @returns a phrase per ref that follows the ref name, without parentheses.\n */\n private async unresolvedFixes(refs: string[]): Promise<Map<string, string>> {\n const out = new Map<string, string>();\n if (refs.length === 0) return out;\n const lockEntries = Object.entries(this.tryReadLock()?.assets ?? {});\n const snap = await this.loadLibraryIndex();\n const findings = await this.publisherChangeFindings(refs);\n for (const ref of refs) {\n const want = parseRefTolerant(ref.split(\" \")[0] ?? ref);\n if (!want) continue;\n const origin = lockEntries\n .map(([key, e]) => ({ id: parseCanonicalLockKey(key), library: e.library }))\n .find(\n ({ id, library }) =>\n library &&\n !library.installed &&\n id.kind === want.kind &&\n id.name === want.name &&\n (!want.publisher || id.publisher === want.publisher),\n )?.library;\n if (!origin) continue;\n const plain = want.publisher\n ? `${want.kind}:@${want.publisher}/${want.name}`\n : `${want.kind}:${want.name}`;\n const moved = findings.get(ref)?.moved;\n const lookup = this.lockedLibrary(\n origin,\n snap,\n want.publisher\n ? { kind: want.kind, publisher: want.publisher, name: want.name }\n : undefined,\n );\n if (moved?.library && want.publisher) {\n out.set(\n ref,\n `did you mean ${moved.ref}? Change the ref in skaile.yaml to it, or keep the old ref with \\`skaile library set ${moved.library} publisher=${want.publisher}\\``,\n );\n } else if (lookup.state === \"dir-missing\") {\n out.set(ref, lockedLibraryProblem(lookup, origin, plain));\n } else if (lookup.state === \"unregistered\") {\n out.set(ref, unregisteredLibraryFix(origin, plain));\n } else if (await this.pinNeverHeld(ref, plain, lookup, out)) {\n continue;\n } else {\n const renamedTo = await this.renamedFlowRef(lookup, want.publisher, want.kind, want.name);\n out.set(\n ref,\n renamedTo\n ? `library \"${lookup.name}\" holds it as ${renamedTo} now (a flow is named by its \\`id:\\`) — run \\`skaile remove ${plain}\\`, then \\`skaile add ${renamedTo}\\``\n : `library \"${lookup.name}\" no longer holds it — restore it there, or drop the dependency with \\`skaile remove ${plain}\\``,\n );\n }\n }\n return out;\n }\n\n /**\n * A ref pinned to a version its library never held (`#9.9.9`): the thing to change is the pin\n * in `skaile.yaml`, not the library (p1096). Sets the fix and returns `true` when it applies.\n */\n private async pinNeverHeld(\n ref: string,\n plain: string,\n lookup: LockedLibrary,\n out: Map<string, string>,\n ): Promise<boolean> {\n const pin = (ref.split(\" \")[0] ?? ref).split(\"#\")[1];\n if (!pin || lookup.state !== \"ok\") return false;\n const held = (await this.resolveLibraryEntries([plain], { quiet: true, library: lookup.name }))\n .entries[0];\n if (!held?.version || held.version === pin) return false;\n const name = plain.split(/[:/]/).pop() ?? plain;\n out.set(\n ref,\n `Asset not found: ${plain}#${pin} (${name} has version(s): ${held.version}); change the pin in skaile.yaml`,\n );\n return true;\n }\n\n /**\n * The ref a library now holds a flow under when a project still locks it by the slug of the\n * flow's `name:` (5.12.0 named a flow by `name:`; later releases name it by `id:`), or\n * `undefined` when `kind` is no flow, the library is not at hand or no flow of it matches.\n */\n private async renamedFlowRef(\n lookup: LockedLibrary,\n publisher: string | undefined,\n kind: string,\n name: string,\n ): Promise<string | undefined> {\n if (kind !== \"flow\" || !publisher || lookup.state !== \"ok\") return undefined;\n const scanned = await scanDirectory(lookup.path, publisher, { knownKinds: this.knownKinds });\n for (const entry of scanned) {\n if (entry.kind !== \"flow\" || entry.name === name) continue;\n try {\n const meta: unknown = parseYaml(readFileSync(entry.source, \"utf8\"));\n if (\n meta &&\n typeof meta === \"object\" &&\n \"name\" in meta &&\n typeof meta.name === \"string\" &&\n slugifyAssetName(meta.name) === name\n ) {\n return `flow:@${publisher}/${entry.name}`;\n }\n } catch {\n // An unreadable flow file is no match.\n }\n }\n return undefined;\n }\n\n /** Collision messages already printed by this instance (one warning per ref + library set). */\n private readonly warnedLibraryCollisions = new Set<string>();\n\n /**\n * Collisions of one `add`, held back until {@link flushLibraryCollisions} so a dependency\n * tree that touches several colliding assets prints one summary, not one line per asset\n * (p1097). `null` outside an `add`: a collision then warns at once.\n */\n private collisionBatch: Map<string, LibraryCollision> | null = null;\n\n /**\n * Warn once when `key` is held by more than one library: names every library\n * with its version and the one chosen, so a silent pick can't surprise.\n */\n private warnLibraryCollision(\n key: string,\n candidates: Array<{ entry: CatalogEntry; library: string }>,\n chosen: { entry: CatalogEntry; library: string },\n differing: string[] = [],\n ): void {\n const libraries = [...new Set(candidates.map((c) => c.library))];\n if (libraries.length < 2) return;\n const collision: LibraryCollision = {\n key,\n libraries,\n held: candidates.map((c) => `${c.library} (${c.entry.version || \"unversioned\"})`),\n chosen: chosen.library,\n version: chosen.entry.version || \"unversioned\",\n differing,\n };\n if (this.collisionBatch) {\n this.collisionBatch.set(key, collision);\n return;\n }\n this.emitLibraryCollision(libraryCollisionMessage(collision), [key]);\n }\n\n /** Print each distinct collision message once; the sink also gets the keys it names. */\n private emitLibraryCollision(msg: string, keys: readonly string[]): void {\n if (this.warnedLibraryCollisions.has(msg)) return;\n this.warnedLibraryCollisions.add(msg);\n if (this.onLibraryCollision) this.onLibraryCollision(msg, keys);\n else console.warn(`skaile: ${msg}`);\n }\n\n /**\n * End the batch of {@link collisionBatch}: one collision prints its full message; several\n * print one summary (how many libraries and assets, the library each asset came from, the\n * assets whose bytes differ). `verboseCollisions` prints every asset's full message instead.\n */\n private flushLibraryCollisions(): void {\n const batch = this.collisionBatch ? [...this.collisionBatch.values()] : [];\n this.collisionBatch = null;\n if (batch.length === 0) return;\n if (batch.length === 1 || this.verboseCollisions) {\n for (const c of batch) this.emitLibraryCollision(libraryCollisionMessage(c), [c.key]);\n return;\n }\n this.emitLibraryCollision(\n libraryCollisionSummary(batch),\n batch.map((c) => c.key),\n );\n }\n\n /** Kind, name and bare publisher of a deploy entry; the publisher comes from its canonical ref. */\n private entryIdentity(entry: CatalogEntry): FolderIdentity {\n const ref = parseAssetRefLoose(canonicalEntryRef(entry));\n return {\n kind: entry.kind,\n name: entry.name,\n publisher: ref?.publisher ?? entry.publisher?.replace(/^@/, \"\"),\n };\n }\n\n /**\n * Refuse to lock a source commit another machine cannot check out. A commit made in the clone\n * itself (or one `source sync` could not fast-forward past) is in no remote branch: the lock\n * would name bytes nobody else has, and `install --locked` there could not restore them.\n * Linked (dev-override) and user-owned local sources are never checked: their lock is\n * machine-local by choice.\n *\n * @param resolved - Candidates about to be locked.\n * @param repositories - Source declarations of the project.\n * @throws With `<url> clone has unpublished commit <sha>` and the way out.\n */\n private assertSourceCommitsPublished(\n resolved: readonly ProvenanceCandidate[],\n repositories: Record<string, SourceDeclaration>,\n ): void {\n const links = readLinks(this.projectDir);\n const checked = new Set<string>();\n for (const c of resolved) {\n if (!c.commit || /^0+$/.test(c.commit) || checked.has(`${c.sourceUrl}@${c.commit}`)) continue;\n checked.add(`${c.sourceUrl}@${c.commit}`);\n const hit = Object.entries(repositories).find(\n ([, d]) => d.url !== undefined && !d.factory && d.url === c.sourceUrl,\n );\n if (!hit || links[hit[0]]) continue;\n const dir = this.resolveRepoDir(hit[1], hit[0]);\n if (!dir || isCommitOnRemote(dir, c.commit)) continue;\n throw new Error(\n `${c.sourceUrl} clone has unpublished commit ${c.commit.slice(0, 7)} - push it, or reset the clone ` +\n `(git -C ${dir} reset --hard origin/${hit[1].branch ?? \"main\"}) - nothing was locked`,\n );\n }\n }\n\n /**\n * Refuse assets of one kind and name from different publishers: they deploy into the\n * same folder, so the later one would silently overwrite the earlier. Throws one line\n * naming the folder and the asset that holds it.\n *\n * @param incoming - Assets about to be deployed. Two of them clashing is refused.\n * @param held - Assets the project already declares or has locked; one of them\n * clashing with an incoming asset is refused when its folder is on disk.\n */\n private assertNoFolderCollision(incoming: FolderIdentity[], held: FolderIdentity[] = []): void {\n const refOf = (a: FolderIdentity) =>\n assetRefToStr({ kind: a.kind, name: a.name, publisher: a.publisher } as AssetRef);\n const differs = (a: FolderIdentity, b: FolderIdentity) =>\n !!a.publisher && !!b.publisher && a.publisher !== b.publisher;\n const shown = (dir: string) => (this.global ? dir : relative(this.projectDir, dir));\n const seen = new Map<string, FolderIdentity>();\n for (const a of incoming) {\n if (!a.kind || !a.name) continue;\n const component = installTargetOf(this.registry, a.kind);\n if (!component) continue;\n const slot = `${component}/${a.name}`;\n const prior = seen.get(slot);\n if (prior && differs(prior, a)) {\n const dir = deployedDir(component, a.name, this.driverTarget, this.global, this.projectDir);\n throw new Error(\n `${refOf(prior)} and ${refOf(a)} both deploy to ${shown(dir)} — keep only one of them`,\n );\n }\n if (!prior) seen.set(slot, a);\n const holder = held.find(\n (h) =>\n !!h.kind &&\n h.name === a.name &&\n installTargetOf(this.registry, h.kind) === component &&\n differs(h, a),\n );\n if (!holder) continue;\n const target = this.targetHarnesses().find((t) =>\n isDeployed(component, a.name!, t, this.global, this.projectDir),\n );\n if (!target) continue; // declared but never deployed: nothing to overwrite\n const dir = deployedDir(component, a.name, target, this.global, this.projectDir);\n throw new Error(\n `${refOf(a)} would overwrite ${shown(dir)}, which ${refOf(holder)} already holds — ` +\n `run skaile remove ${refOf(holder)} first`,\n );\n }\n }\n\n /**\n * Refuse to deploy over a folder (or agent file) the project did not put there: it is on disk,\n * but no lock entry of the same kind and name owns it, so it is the user's own work and the\n * deploy would replace it and `remove` would delete it. Throws one line naming the folder.\n *\n * A folder the deploy would rewrite with the same content is adopted silently (the way back\n * from `asset import`: the project's own copy is what the library now holds): every file in\n * it is shipped by the asset with the same bytes, or the same body and an asset frontmatter\n * that only adds to the folder's (import normalizes it). Nothing is lost then.\n *\n * @param incoming - Assets about to be deployed, with the entry whose bytes would be written\n * when there is one.\n * @param owned - Assets the lock holds; one of the same kind and name, from any publisher,\n * owns the folder (a publisher clash is {@link assertNoFolderCollision}'s refusal).\n */\n private assertNoUnownedFolder(\n incoming: Array<{ id: FolderIdentity; entry?: DeployableEntry | null }>,\n owned: FolderIdentity[],\n ): void {\n for (const { id: a, entry } of incoming) {\n if (!a.kind || !a.name) continue;\n const component = installTargetOf(this.registry, a.kind);\n if (!component) continue;\n const isOwned = owned.some(\n (o) =>\n !!o.kind && o.name === a.name && installTargetOf(this.registry, o.kind) === component,\n );\n if (isOwned) continue;\n for (const target of this.targetHarnesses()) {\n const held = deployedPaths(component, a.name, target, this.global, this.projectDir).find(\n pathEntryExists,\n );\n if (!held) continue;\n // A symlink (even a dangling one) is the user's own wiring: never adopted, never replaced.\n if (entry && !isSymlink(held) && this.deployWouldOnlyRewriteSame(entry, target)) continue;\n const shown = this.global ? held : relative(this.projectDir, held);\n throw new Error(\n `${assetRefToStr({ kind: a.kind, name: a.name, publisher: a.publisher } as AssetRef)} would overwrite ${shown}, ` +\n \"which no lock entry owns (your own files?) — move it away, or pass --force to replace it\",\n );\n }\n }\n }\n\n /**\n * Whether deploying `entry` over the folder already in `target` loses nothing: the folder\n * holds no file the asset does not ship, and each of its files equals the asset's, or is a\n * markdown file with the same body whose frontmatter the asset's only extends.\n */\n private deployWouldOnlyRewriteSame(entry: DeployableEntry, target: DriverTarget): boolean {\n // An agent is a rendering, not a copy: a deployed file whose bytes equal what skaile renders\n // from the asset is skaile's own (a project whose lock is gone), so it is adopted.\n if (this.installTarget(entry.kind) === \"agent\") {\n try {\n return diffDeployedAgent(entry, { ...this.deployOptsFor(target) }) === \"\";\n } catch {\n return false;\n }\n }\n const drift = deployedAssetDrift(entry, {\n registry: this.registry,\n driverTarget: target,\n global: this.global,\n cwd: this.projectDir,\n });\n if (!drift || drift.extra.length > 0) return false;\n if (drift.modified.length === 0) return true;\n const component = installTargetOf(this.registry, entry.kind);\n if (!component) return false;\n const dest = deployedDir(component, entry.name, target, this.global, this.projectDir);\n let assetRoot: string;\n try {\n assetRoot = lstatSync(entry.source).isDirectory() ? entry.source : dirname(entry.source);\n } catch {\n return false;\n }\n return drift.modified.every((rel) => {\n if (!/\\.md$/i.test(rel)) return false;\n try {\n const mine = parseFrontmatter(readFileSync(join(dest, rel), \"utf8\"));\n const theirs = parseFrontmatter(readFileSync(join(assetRoot, rel), \"utf8\"));\n if (mine.body !== theirs.body) return false;\n const covered = (have: Record<string, unknown>, want: Record<string, unknown>): boolean =>\n Object.entries(have).every(([k, v]) => {\n const w = want[k];\n if (JSON.stringify(v) === JSON.stringify(w)) return true;\n return (\n k === \"metadata\" &&\n !!v &&\n typeof v === \"object\" &&\n !!w &&\n typeof w === \"object\" &&\n covered(v as Record<string, unknown>, w as Record<string, unknown>)\n );\n });\n return covered(mine.data, theirs.data);\n } catch {\n return false;\n }\n });\n }\n\n /**\n * Open the local index and snapshot its libraries + asset definitions.\n * Best-effort: no index file (never indexed), or any open/guard failure,\n * yields `null` — a lock/outdated read must never create `index.db` or throw.\n */\n private async loadLibraryIndex(): Promise<LibraryIndexSnapshot | null> {\n try {\n const { LocalIndex, resolveIndexPath } = await import(\"@skaile/workspaces/library\");\n const indexPath = this.indexPathOverride ?? resolveIndexPath();\n if (!existsSync(indexPath)) return null;\n const index = new LocalIndex({ indexPath });\n try {\n return { libraries: await index.listSources(), defs: await index.listAssetDefs() };\n } finally {\n index.close();\n }\n } catch {\n return null;\n }\n }\n\n /**\n * Library-origin lock entries for the assets {@link resolveLibraryEntries}\n * matched. The locked version is the one actually deployed: the on-disk\n * entry's version, falling back to the library index only when the disk entry\n * carries none — the index lags until the next `skaile library index`, so\n * preferring it would lock a stale version after an in-place bump. The hash is\n * computed from the files on disk, so it matches what `install --locked`\n * re-hashes.\n *\n * A git-backed library also records its remote URL. When the previous lock names the\n * library under another name that {@link lockedLibrary} matched to this one by URL (a\n * teammate registered the same remote under a different name), the entry keeps the locked\n * name and URL: the lock does not change because it was installed on another machine. A\n * library renamed on this machine with `library rename` is locked under its new name.\n */\n private async libraryLockEntries(\n lib: {\n entries: CatalogEntry[];\n libraryOf: Map<CatalogEntry, string>;\n },\n relockGit = false,\n ): Promise<Record<string, LockEntry>> {\n if (lib.entries.length === 0) return {};\n const snap = await this.loadLibraryIndex();\n const previous = Object.entries(this.tryReadLock()?.assets ?? {}).filter(\n ([, e]) => e.library !== undefined && !e.library.installed,\n );\n const diskHashes = new Map<string, Map<string, string>>();\n return buildLibraryLockEntries(\n lib.entries.map((e) => {\n const name = lib.libraryOf.get(e) ?? \"\";\n const publisher = e.publisher ?? \"\";\n const def = newestLibraryDef(snap, name, { kind: e.kind, publisher, name: e.name });\n const libPath = this.libraryPath({ name }, snap);\n const sha256 =\n (libPath\n ? libraryDiskHashes(libPath, diskHashes, this.registry).get(`${e.kind}:${e.name}`)\n : undefined) ?? def?.sha256;\n const registered = snap?.libraries.find((l) => l.name === name);\n let lockName = name;\n let url = registered ? libraryRemoteUrl(registered) : undefined;\n const locked = previous.find(([key]) => {\n const id = parseCanonicalLockKey(key);\n return id.kind === e.kind && id.name === e.name && id.publisher === publisher;\n })?.[1].library;\n if (locked) {\n const lookup = this.lockedLibrary(locked, snap, {\n kind: e.kind,\n publisher,\n name: e.name,\n });\n // A library renamed on this machine (`library rename`), or found again by what it holds\n // (re-registered under another name, p1081), is the same library under a new name: the\n // lock follows it, so the old name never shows up in `check`'s advice once the library is\n // gone (p893). A git-backed library's lock is shared through the repo and the remote\n // finds the library on another machine (p122/p172), so only `update` (`relockGit`)\n // moves its name; `install` keeps the lock as it is.\n const renamedHere =\n renamedLibraryName(locked.name) === name ||\n (lookup.state === \"ok\" && lookup.matched === \"content\");\n const keepName = !renamedHere || (Boolean(locked.url) && !relockGit);\n if (lookup.state === \"ok\" && lookup.name === name && keepName) {\n lockName = locked.name;\n if (locked.url && url && normalizeRepoUrl(locked.url) === normalizeRepoUrl(url)) {\n url = locked.url;\n }\n }\n }\n // What the library lists the asset as requiring: the deployed copy cannot say a manifest\n // `dependencies:` entry, so `remove` reads it here when the library is gone (p95).\n const requires = [\n ...new Set(\n libraryEntryDepRefs(e).flatMap((dep) => {\n const id = memberIdentity(dep);\n return id?.publisher ? [`${id.kind}:@${id.publisher}/${id.name}`] : [];\n }),\n ),\n ].sort();\n return {\n kind: e.kind,\n publisher,\n name: e.name,\n library: {\n name: lockName,\n version: e.version || def?.version || \"0.0.0\",\n sha256,\n ...(url ? { url } : {}),\n },\n ...(requires.length > 0 ? { requires } : {}),\n };\n }),\n );\n }\n\n /**\n * Lock keys that `skaile.yaml` still wants: the entries a declared ref names, plus every\n * entry such an asset requires, transitively. All keys when a `preset:` is declared.\n */\n private async declaredLockKeys(\n lock: LockFile,\n declared: readonly string[],\n ): Promise<Set<string>> {\n const keys = Object.keys(lock.assets);\n const wanted = declared.map((d) => parseRefTolerant(d.split(\" \")[0] ?? d));\n if (wanted.some((w) => w?.kind === \"preset\")) return new Set(keys);\n const matching = (want: { kind?: string; name?: string; publisher?: string }): string[] =>\n keys.filter((key) => {\n const id = parseCanonicalLockKey(key);\n return (\n id.kind === want.kind &&\n id.name === want.name &&\n (!want.publisher || !id.publisher || id.publisher === want.publisher)\n );\n });\n const inScope = new Set<string>();\n const queue: string[] = [];\n const add = (key: string): void => {\n if (inScope.has(key)) return;\n inScope.add(key);\n queue.push(key);\n };\n for (const w of wanted) if (w) matching(w).forEach(add);\n for (const key of queue) {\n for (const dep of await this.deployedRequirementsOf(parseCanonicalLockKey(key))) {\n const want = memberIdentity(dep);\n if (want) matching(want).forEach(add);\n }\n }\n return inScope;\n }\n\n /**\n * The `Missing:` lines of every library-origin lock entry whose library cannot supply\n * assets on this machine (not registered, or registered with its directory gone). Plain\n * `install` stops on a non-empty list, the same lines `install --locked` prints: it must\n * not re-resolve a locked asset from another origin. The ONE function that decides \"the\n * locked library is not here\", so a lock-recorded URL fallback extends it in one place.\n *\n * Only entries `skaile.yaml` still declares, or that a declared asset requires\n * (transitively, read from the deployed copy), count. A stale entry nothing declares is\n * pruned by `install` as usual, so a removed dependency whose library is gone can be\n * cleaned up. With a declared `preset:` every entry counts: the lock records no edge\n * from a preset to its items, and the preset's own library may be the one that is gone.\n *\n * @param declared - The `dependencies:` refs as written in `skaile.yaml`.\n */\n private async unavailableLockedLibraries(\n lock: LockFile,\n declared: readonly string[],\n ): Promise<string[]> {\n const inScope = await this.declaredLockKeys(lock, declared);\n const locked = Object.entries(lock.assets).filter(\n ([key, e]) => e.library !== undefined && !e.library.installed && inScope.has(key),\n );\n if (locked.length === 0) return [];\n const snap = await this.loadLibraryIndex();\n const lines: string[] = [];\n for (const [ref, e] of locked) {\n const { publisher, kind, name } = parseCanonicalLockKey(ref);\n if (!publisher || !kind || !name) continue;\n const lookup = this.lockedLibrary(e.library!, snap, { kind, publisher, name });\n if (lookup.state === \"ok\") continue;\n const component = this.installTarget(kind);\n const deployed =\n component !== undefined &&\n isDeployed(component, name, this.driverTarget, this.global, this.projectDir);\n const problem = lockedLibraryProblem(lookup, e.library!, `${kind}:@${publisher}/${name}`);\n // `install` touches neither the files nor the lock entry: say so.\n const kept = deployed\n ? \"the deployed copy and its lock entry are kept\"\n : \"its lock entry is kept; no deployed copy exists\";\n lines.push(`${ref} (${problem}; ${kept})`);\n }\n return lines;\n }\n\n /**\n * Re-resolve every library-origin lock entry from its named library, for\n * `install --locked`. An entry is restored only when its library is still\n * registered/on disk, still holds the asset, and still offers the locked\n * version; anything else is reported in `missing` with the reason.\n */\n private async restoreLibraryLockEntries(\n lock: LockFile,\n ): Promise<{ entries: DeployableEntry[]; missing: string[] }> {\n const entries: DeployableEntry[] = [];\n const missing: string[] = [];\n // Direct `asset install` entries were placed in the project already; there is nothing to deploy.\n const locked = Object.entries(lock.assets).filter(\n ([, e]) => e.library !== undefined && !e.library.installed,\n );\n if (locked.length === 0) return { entries, missing };\n\n const snap = await this.loadLibraryIndex();\n /** Per library root: `kind:name` → sha256 of the files on disk. */\n const diskHashes = new Map<string, Map<string, string>>();\n /** Per library root: manifest path → the asset's deployable files. */\n const fileSets = new Map<string, Map<string, string[]>>();\n for (const [ref, e] of locked) {\n const origin = e.library!;\n const { publisher, kind, name } = parseCanonicalLockKey(ref);\n if (!publisher || !kind || !name) {\n missing.push(`${ref} (unparseable lock key)`);\n continue;\n }\n const lookup = this.lockedLibrary(origin, snap, { kind, publisher, name });\n if (lookup.state !== \"ok\") {\n missing.push(\n `${ref} (${lockedLibraryProblem(lookup, origin, `${kind}:@${publisher}/${name}`)})`,\n );\n continue;\n }\n const libPath = lookup.path;\n const found = (await scanDirectory(libPath, publisher, { knownKinds: this.knownKinds })).find(\n (x) => x.kind === kind && x.name === name,\n );\n if (!found) {\n const renamedTo = await this.renamedFlowRef(lookup, publisher, kind, name);\n missing.push(\n renamedTo\n ? `${ref} (library \"${lookup.name}\" holds it as ${renamedTo} now (a flow is named by its \\`id:\\`) — run \\`skaile remove ${kind}:@${publisher}/${name}\\`, then \\`skaile add ${renamedTo}\\`)`\n : `${ref} (not found in library \"${lookup.name}\")`,\n );\n continue;\n }\n const current =\n libraryAssetVersion(snap, lookup.name, { kind, publisher, name }, found.version) || \"0.0.0\";\n // A version-less source asset is keyed by the clone's commit: a newer commit with the\n // same files is the same asset, and the hash check below decides (as `check` does).\n const sameVersion =\n current === origin.version || (isPseudoVersion(current) && isPseudoVersion(origin.version));\n if (!sameVersion) {\n // The library moved on, the project did not: only `update` moves a locked asset. A\n // deployed copy is what the lock describes, so restoring has nothing to do for it (p1095);\n // a copy that is gone cannot be restored from the newer files.\n const component = this.installTarget(kind);\n const newer = semverGt(coerceVersion(current), coerceVersion(origin.version));\n const intact =\n newer &&\n (component === undefined ||\n isDeployed(component, name, this.driverTarget, this.global, this.projectDir));\n if (!intact) {\n missing.push(\n `${ref} (library \"${lookup.name}\" is at ${current}, locked ${origin.version}${\n newer ? \"; `skaile update` moves the lock to it\" : \"\"\n })`,\n );\n }\n continue;\n }\n if (origin.sha256) {\n // Re-hash on disk: the index hash is only as fresh as the last\n // `skaile library index`, so an in-place edit would otherwise deploy silently.\n const onDisk = libraryDiskHashes(libPath, diskHashes, this.registry).get(`${kind}:${name}`);\n if (onDisk !== undefined && onDisk !== origin.sha256) {\n missing.push(\n `${ref} (library \"${lookup.name}\" content changed since lock — or the lock predates the one shared asset hash; re-lock with \\`skaile install\\`)`,\n );\n continue;\n }\n }\n // The printed ref carries the locked version even when the asset file declares none.\n found.version = sameVersion ? origin.version : current;\n entries.push(withLibraryFiles(found, libPath, fileSets, this.registry));\n }\n return { entries, missing };\n }\n\n /**\n * Whether a deployed copy exists for the lock entries `install` kept for the unresolved\n * `ref`. A kind with no install target has no deployed copy.\n */\n private keptCopyDeployed(kept: KeptLockEntries, ref: string): boolean {\n const want = parseRefTolerant(ref.split(\" \")[0] ?? ref);\n if (!want) return false;\n return Object.keys(kept.assets).some((key) => {\n const id = parseCanonicalLockKey(key);\n if (id.kind !== want.kind || id.name !== want.name) return false;\n if (want.publisher && id.publisher !== want.publisher) return false;\n const component = this.installTarget(id.kind);\n return (\n component !== undefined &&\n isDeployed(component, id.name, this.driverTarget, this.global, this.projectDir)\n );\n });\n }\n\n /** Whether the deployed copy of a library asset is on disk; a kind with no install target has none to check. */\n private lockedCopyDeployed(kind: string, name: string): boolean {\n const component = this.installTarget(kind);\n return (\n component === undefined ||\n isDeployed(component, name, this.driverTarget, this.global, this.projectDir)\n );\n }\n\n /**\n * The library-origin lock entries `install` keeps when the library holds a newer version:\n * only `update` moves a locked asset, so `install` restores the locked one (p1095).\n * Keyed by `<publisher>/<kind>:<name>`. `requires` is what the locked version needs: the\n * lock's own list, or for a lock that predates the field the deployed copy's requirements,\n * never the newer library entry's.\n */\n private async keepLockedLibraryEntries(\n lock: LockFile | null,\n ): Promise<ReadonlyMap<string, KeptLibraryEntry> | undefined> {\n if (!lock) return undefined;\n const out = new Map<string, KeptLibraryEntry>();\n for (const [key, entry] of Object.entries(lock.assets)) {\n if (!entry.library || entry.library.installed || !entry.library.version) continue;\n const id = parseCanonicalLockKey(key);\n if (!id.publisher || !id.kind || !id.name) continue;\n const requires = entry.requires ?? (await this.deployedRequirementsOf(id));\n out.set(`${id.publisher}/${id.kind}:${id.name}`, { key, entry, requires });\n }\n return out.size > 0 ? out : undefined;\n }\n\n /**\n * How the library `origin` names stands on this machine. THE one lookup of a locked library\n * (\"is it registered here?\"): `check`, `outdated`, `install` and `install --locked` all ask it.\n *\n * - registered in the index under its name: `ok` at its registered path, or `dir-missing` when\n * that directory is gone;\n * - not registered: a directory `<libraries dir>/<name>` nobody unregistered still counts as a\n * hand-made library (`ok`). One `library remove` unregistered without `--purge` does not\n * (it stays on disk but no longer resolves), and neither does the reserved `installed` folder.\n * - otherwise, when the lock recorded the library's remote URL: another registered library\n * whose git remote is the same repository (`.git` suffix, trailing `/` and the\n * `git@host:o/r` / `https://host/o/r` forms do not matter) and whose directory exists is\n * `ok`, with `name` set to the name it is registered under here. The library name is\n * machine-local; the remote is what a clone shares.\n */\n private lockedLibrary(\n origin: { name: string; url?: string; sha256?: string },\n snap: LibraryIndexSnapshot | null,\n asset?: { kind: string; publisher: string; name: string },\n ): LockedLibrary {\n const { name } = origin;\n if (name === GLOBAL_INSTALL_DIR_NAME) return { state: \"unregistered\" };\n let byName: LockedLibrary = { state: \"unregistered\" };\n const registered = snap?.libraries.find((l) => l.name === name)?.path;\n if (registered) {\n byName = existsSync(registered)\n ? { state: \"ok\", path: registered, name }\n : { state: \"dir-missing\", path: registered };\n } else {\n try {\n const guess = join(resolveLibraryDir(), name);\n if (existsSync(guess) && !unregisteredLibraryNames().has(name)) {\n byName = { state: \"ok\", path: guess, name };\n }\n } catch {\n // No libraries directory: the name resolves nowhere.\n }\n }\n // Renamed with `library rename`: a local library has no remote URL, so the rename record finds it.\n if (byName.state === \"unregistered\") {\n const renamed = renamedLibraryName(name);\n const now = renamed ? snap?.libraries.find((l) => l.name === renamed) : undefined;\n if (now && existsSync(now.path)) return { state: \"ok\", path: now.path, name: now.name };\n }\n if (byName.state === \"ok\") return byName;\n if (origin.url) {\n const wanted = normalizeRepoUrl(origin.url);\n const byUrl = snap?.libraries.find((l) => {\n const url = libraryRemoteUrl(l);\n return (\n l.name !== name &&\n url !== undefined &&\n normalizeRepoUrl(url) === wanted &&\n existsSync(l.path)\n );\n });\n if (byUrl) return { state: \"ok\", path: byUrl.path, name: byUrl.name };\n }\n // A library registered again under another name (`library remove`, then `library init` of\n // the same folder) has no rename record and, when local, no remote URL: find it by what it\n // holds. A registered library whose copy of the asset hashes to the locked bytes is the one\n // the lock meant (p1081).\n const holder =\n asset && origin.sha256\n ? this.libraryHoldingLockedBytes(origin.sha256, asset, snap)\n : undefined;\n return holder\n ? { state: \"ok\", path: holder.path, name: holder.name, matched: \"content\" }\n : byName;\n }\n\n /** The registered library whose files for `asset` hash to `sha256` (the locked bytes), if any. */\n private libraryHoldingLockedBytes(\n sha256: string,\n asset: { kind: string; publisher: string; name: string },\n snap: LibraryIndexSnapshot | null,\n ): { name: string; path: string } | undefined {\n if (!snap) return undefined;\n for (const l of snap.libraries) {\n if (!existsSync(l.path) || !newestLibraryDef(snap, l.name, asset)) continue;\n const onDisk = libraryDiskHashes(l.path, new Map(), this.registry).get(\n `${asset.kind}:${asset.name}`,\n );\n if (onDisk === sha256) return { name: l.name, path: l.path };\n }\n return undefined;\n }\n\n /** On-disk root of the library `origin` names; `null` unless {@link lockedLibrary} says `ok`. */\n private libraryPath(\n origin: { name: string; url?: string },\n snap: LibraryIndexSnapshot | null,\n ): string | null {\n const found = this.lockedLibrary(origin, snap);\n return found.state === \"ok\" ? found.path : null;\n }\n\n /**\n * The `kind:@publisher/name` identities the lock holds for one `kind` and `name`, whatever\n * their publisher. `diff` uses it to accept a ref without a publisher only when it names\n * exactly one locked asset.\n */\n lockedRefsNamed(kind: string, name: string): string[] {\n return Object.keys(this.tryReadLock()?.assets ?? {})\n .map(parseCanonicalLockKey)\n .filter((id) => id.kind === kind && id.name === name)\n .map((id) => (id.publisher ? `${kind}:@${id.publisher}/${name}` : `${kind}:${name}`));\n }\n\n /**\n * Where each library-origin lock entry of this project resolves on this machine: identity\n * `kind:publisher/name` (no scope sigil, no version) → the name the locked library is\n * registered under here. The name differs from the locked one when the lock's remote URL\n * matched another registered library ({@link lockedLibrary}). A deployed entry whose library\n * resolves nowhere (not registered, directory gone) maps to `null`.\n *\n * Direct `asset install` entries (`library.installed`) are included and resolved the same\n * way, but they map to the locked library name when that lookup fails: such a copy sits in\n * the project and does not depend on the library still being registered. A missing or\n * unreadable lock yields an empty map. `skaile manage` uses it to tick the right library row.\n */\n async lockedLibraryNames(): Promise<Map<string, string | null>> {\n const out = new Map<string, string | null>();\n const locked = Object.entries(this.tryReadLock()?.assets ?? {}).filter(\n ([, e]) => e.library !== undefined,\n );\n if (locked.length === 0) return out;\n const snap = await this.loadLibraryIndex();\n for (const [key, e] of locked) {\n const { publisher, kind, name } = parseCanonicalLockKey(key);\n if (!publisher || !kind || !name) continue;\n const origin = e.library!;\n const lookup = this.lockedLibrary(origin, snap, { kind, publisher, name });\n const resolved = lookup.state === \"ok\" ? lookup.name : origin.installed ? origin.name : null;\n out.set(`${kind}:${publisher}/${name}`, resolved);\n }\n return out;\n }\n\n /**\n * What `update` prefers when libraries tie: the library each lock entry resolves to here\n * ({@link lockedLibraryNames}, a `library rename` followed) and the sha256 it locked.\n */\n private async lockedPreference(): Promise<PreferLocked> {\n const shas = new Map<string, string>();\n for (const [key, e] of Object.entries(this.tryReadLock()?.assets ?? {})) {\n if (!e.library?.sha256 || e.library.installed) continue;\n const { publisher, kind, name } = parseCanonicalLockKey(key);\n if (publisher && kind && name) shas.set(`${kind}:${publisher}/${name}`, e.library.sha256);\n }\n return { libraries: await this.lockedLibraryNames(), shas };\n }\n\n // ── Store fetch-then-deploy ────────────────────────────────────────────\n\n /** A candidate's stable identity key (`<publisher>/<kind>:<name>@<version>`). */\n private candidateKey(c: ProvenanceCandidate): string {\n return `${c.publisher}/${c.kind}:${c.name}@${c.version}`;\n }\n\n /**\n * Resolve `deps`, falling back to the global `catalog.url` store when the\n * project declares no store and the first pass leaves something missing.\n *\n * The first pass uses the project stores only, so locally-resolvable refs\n * never trigger a network probe. The fallback retry is best-effort: any error\n * (offline, store down) keeps the first pass's result rather than regressing.\n */\n private async resolveWithStores(\n deps: string[],\n opts: {\n provenanceIndex: Awaited<ReturnType<typeof buildProvenanceIndex>>;\n overrides: OverrideEntry[];\n stores: StoreEntry[];\n declaredRefs?: readonly string[];\n },\n ): Promise<ResolveResult> {\n const first = await resolveAll(deps, {\n provenanceIndex: opts.provenanceIndex,\n overrides: opts.overrides,\n stores: opts.stores,\n storeFetcher: this.storeFetcherFor(opts.stores),\n projectDir: this.projectDir,\n knownKinds: this.knownKinds,\n declaredRefs: opts.declaredRefs,\n });\n if (first.missing.length === 0) return first;\n\n const fallback = await this.globalStoreFallback(opts.stores);\n if (fallback.length === 0) return first;\n\n const stores = [...opts.stores, ...fallback];\n try {\n const retry = await resolveAll(deps, {\n provenanceIndex: opts.provenanceIndex,\n overrides: opts.overrides,\n stores,\n storeFetcher: this.storeFetcherFor(stores),\n projectDir: this.projectDir,\n knownKinds: this.knownKinds,\n declaredRefs: opts.declaredRefs,\n });\n // Monotone: same provenanceIndex + overrides, only more stores added —\n // resolution can gain deps but never lose one, so fewer-missing wins.\n return retry.missing.length < first.missing.length ? retry : first;\n } catch {\n return first;\n }\n }\n\n /**\n * Resolve `deps` library-first, then walk the dependencies of every library\n * asset it picks.\n *\n * A publisher-qualified ref that no project source declares is looked up in the\n * registered **libraries** before any store is asked, so a locally authored\n * asset resolves (and deploys) with the store unreachable and without a\n * version-discovery round trip. Only refs the libraries did not satisfy go to\n * {@link resolveWithStores}; its misses get one more library try (a ref a source\n * knows only under another version). A `#version` pin still selects through\n * `matchPin` inside {@link resolveLibraryEntries}.\n *\n * Library assets declare `dependencies` / `requires`. Those are fed back through\n * the same resolution with a `seen` identity set (mirrors `resolveAll`), so deps\n * deploy, get lock entries, and a dependency cycle terminates.\n *\n * @returns source/store candidates, still-unresolved refs, applied overrides,\n * expanded presets, and the library leg (entries + originating library per entry).\n */\n private async resolveLibraryFirst(\n deps: string[],\n opts: {\n provenanceIndex: ProvenanceIndex;\n overrides: OverrideEntry[];\n stores: StoreEntry[];\n /** Refs `skaile.yaml` declares; a dependency of a resolved asset with the same identity resolves at the declared ref/pin. */\n declaredRefs?: readonly string[];\n /** Print the \"exists in N libraries\" warning for a ref several libraries hold (`add` only; every other command is silent about a choice the lock or a pin already made). */\n warnCollisions?: boolean;\n /** Keep a locked asset on the library its lock entry names ({@link AssetManager.lockedLibraryNames}); `install` passes it, `update` and `add` do not. */\n lockedLibraries?: ReadonlyMap<string, string | null>;\n /** `update` and `update <name>`: a locked asset may move to another library (the highest version wins) but an equal-version tie goes to the default library, then to the library its lock entry names (renames followed), then to one holding the locked bytes. */\n preferLocked?: PreferLocked;\n /** `install`: lock entries of library assets by identity (`<publisher>/<kind>:<name>`). A library holding another version of one keeps the locked version. */\n keepLocked?: ReadonlyMap<string, KeptLibraryEntry>;\n },\n ): Promise<LibraryFirstResolution> {\n const resolved: ProvenanceCandidate[] = [];\n const overridesApplied = new Set<string>();\n const presets: PresetExpansion[] = [];\n /** Requirement ref → canonical refs of the library assets that require it (declared refs excluded). */\n const requiredBy = new Map<string, string[]>();\n const keptVersions: Record<string, LockEntry> = {};\n const versionBlocked: string[] = [];\n const lib: LibraryResolution = { entries: [], resolved: new Set(), libraryOf: new Map() };\n const missing = new Set<string>();\n /** Identities already handed to a resolver (or satisfied by one): never resolved twice. */\n const seen = new Set<string>();\n /** Identities a source/store candidate or a library entry covers. */\n const covered = new Set<string>();\n /** Declared refs by identity: a walked dependency the project already declares keeps its declared pin. */\n const declaredById = new Map<string, string>();\n for (const d of opts.declaredRefs ?? []) {\n const id = refIdentity(d);\n if (id !== null) declaredById.set(id, d);\n }\n\n /** Preset identity → identity of the library preset that listed it (absent for a top-level one). */\n const presetParent = new Map<string, string>();\n\n /**\n * The locked library entry `install` keeps in place of `e`: the lock holds `e` at another\n * version of the same library and no declared pin asks for the one the library has now.\n */\n const keepFor = (\n e: CatalogEntry,\n id: string,\n asked: ReadonlySet<string>,\n ): KeptLibraryEntry | undefined => {\n const locked = opts.keepLocked?.get(id);\n const lockedVersion = locked?.entry.library?.version;\n if (!locked || !lockedVersion || !e.version) return undefined;\n if (isPseudoVersion(lockedVersion) || isPseudoVersion(e.version)) return undefined;\n // Only a NEWER library version is kept back; an older one is a re-lock (`check` says so).\n if (!semverGt(coerceVersion(e.version), coerceVersion(lockedVersion))) return undefined;\n for (const r of asked) if (refIdentity(r) === id && r.includes(\"#\")) return undefined;\n return locked;\n };\n\n /**\n * Merge a library hit into `lib`; returns the refs its assets depend on. A library\n * preset is a grouping, like a source/store preset: its asset items go on to be\n * resolved, the preset itself is never deployed nor locked (it is only reported).\n */\n const absorb = (hit: LibraryResolution): string[] => {\n const next: string[] = [];\n for (const e of hit.entries) {\n const origin = hit.libraryOf.get(e);\n const id = `${e.publisher}/${e.kind}:${e.name}`;\n seen.add(id);\n covered.add(id);\n const keep = e.kind === \"preset\" ? undefined : keepFor(e, id, hit.resolved);\n const deps = keep?.requires ?? libraryEntryDepRefs(e);\n if (e.kind === \"preset\") {\n const chain = [id];\n for (let up = presetParent.get(id); up !== undefined; up = presetParent.get(up)) {\n chain.unshift(up);\n }\n if (chain.length > MAX_PRESET_DEPTH) {\n throw new PresetDepthError(\"depth\", canonicalEntryRef(e), chain);\n }\n for (const dep of deps) {\n const depId = refIdentity(dep);\n if (depId === null || !depId.includes(\"/preset:\")) continue;\n if (chain.includes(depId)) throw new PresetDepthError(\"cycle\", dep, [...chain, depId]);\n if (!presetParent.has(depId)) presetParent.set(depId, id);\n }\n presets.push({\n ref: canonicalEntryRef(e),\n assets: deps.filter((d) => !d.startsWith(\"preset:\")).length,\n skipped: e.skippedItems ?? 0,\n ...(origin ? { library: origin } : {}),\n });\n } else if (keep) {\n // The library holds another version than the lock: `install` keeps the locked one\n // (only `update` moves it) and the deployed copy with it.\n keptVersions[keep.key] = keep.entry;\n if (!this.lockedCopyDeployed(e.kind, e.name)) {\n versionBlocked.push(\n `${keep.key} (library \"${origin ?? keep.entry.library?.name}\" is at ${e.version}, locked ${keep.entry.library?.version}; the deployed copy is gone and cannot be restored from the newer files — \\`skaile update\\` moves the lock to it)`,\n );\n }\n } else {\n lib.entries.push(e);\n if (origin) lib.libraryOf.set(e, origin);\n }\n next.push(\n ...deps.map((dep) => {\n const depId = refIdentity(dep);\n return (depId !== null && declaredById.get(depId)) || dep;\n }),\n );\n if (e.kind !== \"preset\") {\n // Who asked for each requirement that is not itself declared: a requirement nothing\n // holds is that asset's problem, not a declared ref's.\n for (const dep of deps) {\n const depId = refIdentity(dep);\n if (depId !== null && declaredById.has(depId)) continue;\n requiredBy.set(dep, [\n ...(requiredBy.get(dep) ?? []),\n keep ? keep.key : canonicalEntryRef(e),\n ]);\n }\n }\n }\n for (const r of hit.resolved) lib.resolved.add(r);\n return next;\n };\n\n let wave = deps;\n while (wave.length > 0) {\n const fresh: string[] = [];\n for (const ref of wave) {\n const id = refIdentity(ref);\n if (id !== null) {\n if (seen.has(id)) continue;\n seen.add(id);\n }\n fresh.push(ref);\n }\n if (fresh.length === 0) break;\n\n // Library leg first: refs no project source declares.\n const libraryTried = new Set(\n fresh.filter((ref) => {\n const id = refIdentity(ref);\n return id !== null && (opts.provenanceIndex.get(id)?.length ?? 0) === 0;\n }),\n );\n const hit = await this.resolveLibraryEntries([...libraryTried], {\n quiet: !opts.warnCollisions,\n lockedLibraries: opts.lockedLibraries,\n preferLocked: opts.preferLocked,\n });\n const next = absorb(hit);\n\n // Source/store leg for what the library did not answer.\n const rest = fresh.filter((ref) => !hit.resolved.has(ref));\n if (rest.length > 0) {\n const r = await this.resolveWithStores(rest, opts);\n for (const c of r.resolved) {\n const id = `${c.publisher}/${c.kind}:${c.name}`;\n // A later wave may re-reach an identity an earlier wave or a library entry covers.\n if (covered.has(id)) continue;\n seen.add(id);\n covered.add(id);\n resolved.push(c);\n }\n for (const o of r.overridesApplied) overridesApplied.add(o);\n presets.push(...r.presets);\n // A ref sources/stores missed (an unmatched pin, or a transitive dep) may\n // still be a library asset that was not tried above.\n const hit2 = await this.resolveLibraryEntries(\n r.missing.filter((m) => !libraryTried.has(m)),\n {\n quiet: !opts.warnCollisions,\n lockedLibraries: opts.lockedLibraries,\n preferLocked: opts.preferLocked,\n },\n );\n next.push(...absorb(hit2));\n for (const m of r.missing) if (!hit2.resolved.has(m)) missing.add(m);\n }\n wave = next;\n }\n\n // A ref missed early may be covered later (a library asset's dependency).\n const stillMissing = [...missing].filter((m) => {\n const id = refIdentity(m);\n return !lib.resolved.has(m) && !(id !== null && covered.has(id));\n });\n this.keepUnchangedSourceVersions(resolved, [...deps, ...(opts.declaredRefs ?? [])]);\n return {\n resolved,\n missing: stillMissing,\n overridesApplied,\n lib,\n presets,\n requiredBy,\n keptVersions,\n versionBlocked,\n };\n }\n\n /**\n * A source asset without a declared version is keyed `0.0.0-sha.<repo commit>`, so every\n * commit of its repo would re-key (and re-lock, and report as updated) every asset of\n * that repo, changed or not. Keep the locked key and version of an asset whose files hash\n * to what the lock holds: `update` then re-locks only what changed, as `outdated` lists.\n * The commit stays the clone's, so the lock's `sources:` row still names the bytes' commit.\n * A ref the user pinned (`#<version>`) keeps the version it names.\n */\n private keepUnchangedSourceVersions(\n resolved: ProvenanceCandidate[],\n requested: readonly string[],\n ): void {\n const prev = this.tryReadLock();\n if (!prev) return;\n const pinned = new Set<string>();\n for (const ref of requested) {\n const id = refIdentity(ref);\n if (id !== null && ref.includes(\"#\")) pinned.add(id);\n }\n for (const c of resolved) {\n if (!c.version.startsWith(\"0.0.0-sha.\")) continue;\n const id = `${c.publisher}/${c.kind}:${c.name}`;\n if (pinned.has(id)) continue;\n for (const [key, entry] of Object.entries(prev.assets)) {\n const o = parseCanonicalLockKey(key);\n if (o.kind !== c.kind || o.name !== c.name || o.publisher !== c.publisher) continue;\n if (!o.version?.startsWith(\"0.0.0-sha.\")) continue;\n if (entry.source?.url === c.sourceUrl && entry.sha256 === c.sha256) c.version = o.version;\n break;\n }\n }\n }\n\n /**\n * The catalog fetcher to use: an injected one, else built from `stores`. `catalogUrl: \"\"`\n * (`update --no-catalog`) asks no store at all, project `stores:` included.\n */\n private storeFetcherFor(stores: StoreEntry[]): StoreFetcher | undefined {\n if (this.injectedStoreFetcher) return this.injectedStoreFetcher;\n return this.catalogUrlOverride === \"\" ? undefined : this.buildStoreFetcher(stores);\n }\n\n /**\n * The global `catalog.url` as a single-store fallback, or `[]` when no\n * project store should be synthesized — `local` sentinel, already-declared,\n * or no URL. Honours an explicit `catalogUrl` injection (`\"\"` and `\"local\"` disable it).\n */\n private async globalStoreFallback(projectStores: StoreEntry[]): Promise<StoreEntry[]> {\n let url = this.catalogUrlOverride;\n if (url === undefined) {\n try {\n const { resolveConfig } = await import(\"@skaile/workspaces/library\");\n url = resolveConfig({ projectDir: this.projectDir }).catalog.url;\n } catch {\n return [];\n }\n }\n if (!url || url.trim().toLowerCase() === \"local\") return [];\n if (projectStores.some((s) => normalizeRepoUrl(s.url) === normalizeRepoUrl(url!))) return [];\n return [{ url }];\n }\n\n /**\n * Build deployable catalog entries from resolved candidates. Store-resolved\n * candidates (no local clone bytes) are fetched + SHA-verified into the\n * project store-cache first, then their entry points at the staged bytes so\n * the existing copy-deploy path works. Source-backed candidates keep the\n * clone-relative entry.\n */\n private async buildCatalogEntries(\n resolved: ProvenanceCandidate[],\n repositories: Record<string, SourceDeclaration>,\n ): Promise<DeployableEntry[]> {\n const staged = await this.stageStoreAssets(resolved, repositories);\n const entries: DeployableEntry[] = [];\n for (const c of resolved) {\n const stagedPath = staged.get(this.candidateKey(c));\n const entry = stagedPath\n ? this.stagedCandidateToEntry(c, stagedPath)\n : this.candidateToCatalogEntry(c, repositories);\n if (entry) entries.push(entry);\n }\n return entries;\n }\n\n /**\n * Fetch + SHA-verify the bytes of every store-resolved candidate that needs\n * bytes on disk into `.skaile/cache/store/`, reusing the same verified-fetch\n * path the pointer-only `library.install` uses (`installFromManifest` flat\n * mode). Every kind with bytes, composition-only kinds included.\n *\n * @returns Map of candidate key → staged primary-manifest path.\n */\n private async stageStoreAssets(\n resolved: ProvenanceCandidate[],\n repositories: Record<string, SourceDeclaration>,\n ): Promise<Map<string, string>> {\n const staged = new Map<string, string>();\n let installFromManifest:\n | typeof import(\"@skaile/workspaces/library\").installFromManifest\n | undefined;\n\n for (const c of resolved) {\n // Every kind with bytes is staged — kinds with an `installTarget` are then\n // copied into the harness dir, composition-only kinds (mcp-server, persona,\n // ruleset, knowledge, …) are read from the store cache at session start\n // (`loadMcpServerDeclarations` reads a staged `MCP.md`; a skipped fetch made a\n // store-sourced MCP a silent no-op, #462). Remote kinds carry no `files[]`.\n if (!c.files || c.files.length === 0 || !c.sourceUrl || !c.commit) continue;\n if (this.candidateHasLocalBytes(c, repositories)) continue;\n\n if (!installFromManifest) {\n ({ installFromManifest } = await import(\"@skaile/workspaces/library\"));\n }\n const targetDir = join(this.storeCacheDir, c.publisher, c.kind, c.name, c.version);\n // Per-file paths in c.files are attacker-controlled but validated by\n // installFromManifest before any fetch/write (rejects abs / `..`); this\n // outer guard only asserts the staging dir stays inside the cache root.\n const cacheRoot = resolve(this.storeCacheDir);\n if (!resolve(targetDir).startsWith(cacheRoot + sep)) {\n throw new Error(`unsafe store-cache path for ${this.candidateKey(c)}`);\n }\n const manifest: InstallManifest = {\n ref: `${c.kind}:@${c.publisher}/${c.name}#${c.version}`,\n source: { url: c.sourceUrl, commitSha: c.commit },\n files: c.files,\n sha256: c.sha256,\n kind: c.kind,\n // tier = catalog storage hint (S3/CDN); flat-mode verified fetch pulls\n // from source.url@commit and ignores it, so \"\" is inert.\n tier: \"\",\n };\n // Bytes an earlier `add`/`install` staged for the same pointer stay valid while every\n // file still hashes to what the pointer lists: nothing to fetch (an offline restore).\n const root = commonDirPrefix(c.files.map((f) => f.path));\n const intact = c.files.every((f) => {\n const rel = root && f.path.startsWith(`${root}/`) ? f.path.slice(root.length + 1) : f.path;\n try {\n return computeHash(join(targetDir, rel)) === f.sha256;\n } catch {\n return false;\n }\n });\n if (intact) {\n staged.set(this.candidateKey(c), join(targetDir, this.stagedManifestRel(c)));\n continue;\n }\n try {\n const { installPath } = await installFromManifest({\n manifest,\n libraryRoot: this.storeCacheDir,\n targetDir,\n fetcher: this.injectedAssetFetcher,\n });\n staged.set(this.candidateKey(c), join(installPath, this.stagedManifestRel(c)));\n } catch (err) {\n const reason = err instanceof Error ? err.message : String(err);\n throw new Error(`${manifest.ref} (${c.sourceUrl} at ${c.commit.slice(0, 7)}): ${reason}`);\n }\n }\n return staged;\n }\n\n /** Repo-relative path of a candidate's primary manifest (un-stripped). */\n private primaryManifestRel(c: ProvenanceCandidate): string | undefined {\n const paths = (c.files ?? []).map((f) => f.path);\n // Last resort: a kind with no manifest convention falls back to the first\n // file so deploy still has a concrete source rather than crashing.\n return matchManifestPath(c.kind, paths) ?? paths[0];\n }\n\n /**\n * The primary-manifest path relative to a staged asset dir. Takes the kind's\n * manifest (e.g. `SKILL.md`), then strips the same common-dir prefix\n * `installFromManifest` flat mode removed on write.\n */\n private stagedManifestRel(c: ProvenanceCandidate): string {\n const paths = (c.files ?? []).map((f) => f.path);\n const mdRel = this.primaryManifestRel(c) ?? \"\";\n const root = commonDirPrefix(paths);\n return root && mdRel.startsWith(`${root}/`) ? mdRel.slice(root.length + 1) : mdRel;\n }\n\n /**\n * `true` when a candidate's primary manifest is present on a local source\n * clone — its `sourceUrl` matches a registered source AND the manifest file\n * exists on disk at the expected path. A URL match alone is not enough: a\n * store can pin a different commit (or a subtree not bundled) of a repo that\n * is also a registered source, in which case the bytes must be fetched from\n * the store rather than read from the clone. (Only the primary manifest is\n * probed — a partially-cloned source is deployed as-is, matching the existing\n * clone-deploy path.)\n */\n private candidateHasLocalBytes(\n c: ProvenanceCandidate,\n repositories: Record<string, SourceDeclaration>,\n ): boolean {\n if (!c.sourceUrl) return false;\n const rel = this.primaryManifestRel(c);\n for (const [slug, decl] of Object.entries(repositories)) {\n if (decl.url === undefined || decl.url !== c.sourceUrl) continue;\n const dir = this.resolveRepoDir(decl, slug);\n if (!dir) continue;\n if (existsSync(rel ? join(dir, rel) : dir)) return true;\n }\n return false;\n }\n\n /** Build a copy-deploy catalog entry pointing at staged store bytes. */\n private stagedCandidateToEntry(\n c: ProvenanceCandidate,\n stagedManifestPath: string,\n ): DeployableEntry {\n // The verified pointer defines the asset: every staged file under the\n // manifest's directory, not just what the provider's default filter picks.\n const paths = (c.files ?? []).map((f) => f.path);\n const root = commonDirPrefix(paths);\n const files = filesUnderManifestDir(\n paths.map((p) => (root && p.startsWith(`${root}/`) ? p.slice(root.length + 1) : p)),\n this.stagedManifestRel(c),\n );\n const entry: DeployableEntry = {\n files,\n name: c.name,\n kind: c.kind as CatalogEntry[\"kind\"],\n description: c.description ?? \"\",\n source: stagedManifestPath,\n // Real publisher (never a clone slug) → deployAsset copies rather than\n // symlinking the ephemeral store-cache dir.\n publisher: c.publisher,\n version: c.version,\n requires: [],\n dependencies: c.deps ?? [],\n metadata: c.metadata,\n };\n if (c.category != null) entry.category = c.category;\n if (c.keywords && c.keywords.length > 0) entry.keywords = c.keywords;\n if (c.license != null) entry.license = c.license;\n if (c.homepage != null) entry.homepage = c.homepage;\n return entry;\n }\n\n // ── Install / resolve ──────────────────────────────────────────────────\n\n /**\n * Install all dependencies declared in `skaile.yaml`.\n *\n * Steps: clone/pull repositories → resolve transitive dependencies → reconcile\n * (remove stale assets) → deploy new assets → write `skaile.lock.yaml` → record history.\n *\n * @param opts - Optional installation options.\n * @param opts.locked - When `true`, restore the exact versions recorded in the existing\n * lock file instead of resolving from source. Throws if no lock file is found, unless the\n * project declares no dependencies (nothing to restore).\n * @param opts.link - When `true`, symlink local-path assets instead of copying them\n * (the author dev-loop). Machine-local / not for committing; a no-op for\n * store/factory sources. Defaults to copy.\n * @param opts.moveLibraries - When `true` (`skaile update`), a locked library asset is\n * re-resolved from every library and may move to another one; {@link InstallResult.moved}\n * lists the moves. Without it a locked asset stays on the library its lock entry names.\n * @returns {@link InstallResult} summarising what was deployed, what was missing, and any collisions.\n */\n async install(opts?: {\n locked?: boolean;\n link?: boolean;\n moveLibraries?: boolean;\n /** Deploy over a folder no lock entry owns (a hand-made skill of the same name) instead of refusing. */\n force?: boolean;\n }): Promise<InstallResult> {\n const config = this.loadConfig();\n const { repositories, sources, stores, overrides, patches } = config;\n // An agent an instance binds (`agents.<id>.ref`, `agent.definition`) stays: it is declared\n // as much as a `dependencies:` entry, so the reconcile below must not prune it (p982).\n const dependencies = [...config.dependencies, ...this.lockedAgentBindings(config.dependencies)];\n\n if (opts?.locked) {\n return this.installLocked(repositories, patches, dependencies);\n }\n\n // A lock that pins a library this machine does not have (not registered, or its directory\n // gone) is not re-resolved from another origin: that would swap the bytes and rewrite the\n // lock. Fail like `--locked` before any clone, deploy or lock write.\n const lockForLibraries = this.tryReadLock();\n if (lockForLibraries) {\n const unavailable = await this.unavailableLockedLibraries(lockForLibraries, dependencies);\n if (unavailable.length > 0) {\n return {\n deployed: [],\n removed: [],\n missing: unavailable,\n lockWritten: false,\n npmInstalled: [],\n npmFailed: [],\n };\n }\n }\n\n // 1. Ensure all source clones are present/up to date. A locked source stays on its locked\n // commit: only `update` (`moveLibraries`) moves a pin, so the prompt an agent composes\n // does not change under `install`.\n const cloneError = this.ensureSourceClones(\n repositories,\n sources,\n opts?.moveLibraries ? undefined : lockForLibraries,\n );\n if (cloneError) return cloneError;\n\n // 2. Build the provenance index from the clones and resolve.\n const provenanceIndex = await buildProvenanceIndex(this.buildClones(repositories), {\n projectDir: this.projectDir,\n knownKinds: this.knownKinds,\n onSourceError: this.reportSourceError,\n });\n const keepLocked = opts?.moveLibraries\n ? undefined\n : await this.keepLockedLibraryEntries(lockForLibraries);\n const {\n resolved,\n missing,\n overridesApplied,\n lib,\n presets,\n requiredBy,\n keptVersions,\n versionBlocked,\n } = await this.resolveLibraryFirst(dependencies, {\n provenanceIndex,\n overrides,\n stores,\n declaredRefs: dependencies,\n // `install` restores what the lock recorded: a changed default library or a second\n // library holding the same ref does not move a locked asset. `update` re-resolves.\n ...(opts?.moveLibraries\n ? { preferLocked: await this.lockedPreference() }\n : { lockedLibraries: await this.lockedLibraryNames() }),\n ...(keepLocked ? { keepLocked } : {}),\n });\n // Two declared assets of one kind and name from different publishers share a deploy\n // folder: refuse before reconciling or deploying anything.\n this.assertNoFolderCollision([...resolved, ...lib.entries.map((e) => this.entryIdentity(e))]);\n // A folder no lock entry owns is the user's own work (a hand-made skill of the same name):\n // the deploy would replace it and delete its other files, as `add` refuses to do (p721).\n // A lock file that exists but cannot be read says nothing about ownership: `install` then\n // rebuilds it, so the folders on disk are not refused as foreign.\n if (!opts?.force && !(existsSync(this.lockPath) && this.tryReadLock() === null)) {\n this.assertNoUnownedFolder(\n [\n ...resolved.map((c) => ({\n id: c as FolderIdentity,\n entry: this.candidateToCatalogEntry(c, repositories),\n })),\n ...lib.entries.map((e) => ({ id: this.entryIdentity(e), entry: e })),\n ],\n Object.keys(this.tryReadLock()?.assets ?? {}).map(parseCanonicalLockKey),\n );\n }\n this.assertSourceCommitsPublished(resolved, repositories);\n const stillMissing = missing.filter((m) => !lib.resolved.has(m));\n // A declared asset the lock does not hold yet whose requirement nothing holds would deploy\n // into a project `check` fails on: refuse before anything is deployed, removed or locked,\n // as `add` does. An asset already locked keeps the old behaviour (the gap is reported).\n const lockedKeys = new Set(Object.keys(this.tryReadLock()?.assets ?? {}));\n const unmetByNew = new Map<string, string[]>();\n for (const m of stillMissing) {\n const newcomers = (requiredBy.get(m) ?? []).filter((parent) => !lockedKeys.has(parent));\n if (newcomers.length > 0) unmetByNew.set(m, newcomers);\n }\n if (unmetByNew.size > 0) {\n const hints: Record<string, string> = {};\n for (const [m, parents] of unmetByNew) {\n const requirer = parents.map((p) => p.split(\"#\")[0]).join(\", \");\n const unreachable = [...this.storeFailures.values()];\n hints[m] =\n unreachable.length > 0\n ? ` is required by ${requirer} (store unreachable, so it was not looked up: ${unreachable.join(\"; \")} — check the URL with \\`skaile catalog test\\`) — nothing was installed`\n : ` is required by ${requirer} (not found — ${REGISTER_HOLDER}, ` +\n `or drop ${requirer} with \\`skaile remove ${parents[0]!.split(\"#\")[0]}\\`) — nothing was installed`;\n }\n return {\n deployed: [],\n removed: [],\n missing: [...unmetByNew.keys()],\n missingHints: hints,\n lockWritten: false,\n npmInstalled: [],\n npmFailed: [],\n };\n }\n // A ref whose publisher changed (`library set publisher=`) misses; say where it went.\n // Computed before the lock rewrite below, which drops the old publisher's entry.\n const missingHints = await this.publisherChangeHints(stillMissing);\n // A declared ref that no longer resolves keeps its deployed files and its lock entry: the\n // bytes are the only copy left. The user changes the library or the ref, not the project.\n const prevLock = this.tryReadLock();\n const kept = keptLockEntries(prevLock, stillMissing);\n // A locked store asset the store was not asked about (air-gapped, `--no-catalog`) or could\n // not answer for is not \"missing\": its deployed copy is simply not re-checked (p792, p799).\n const storeNotChecked = this.storeNotCheckedRefs(\n kept,\n sources.map((s) => s.url),\n );\n const fixes = await this.unresolvedFixes(stillMissing);\n for (const ref of new Set([...kept.refs, ...fixes.keys()])) {\n const fix = fixes.get(ref);\n // The fix names the moved ref itself, so it replaces the bare `did you mean` hint.\n const notes = [\n kept.refs.has(ref)\n ? this.keptCopyDeployed(kept, ref)\n ? \"the deployed copy and its lock entry are kept\"\n : \"its lock entry is kept; no deployed copy exists\"\n : undefined,\n fix,\n ].filter((n): n is string => n !== undefined);\n missingHints[ref] = `${fix ? \"\" : (missingHints[ref] ?? \"\")} (${notes.join(\"; \")})`;\n }\n // `asset install` entries are not driven by skaile.yaml: carry them over so\n // neither their lock entry nor their files are reconciled away.\n const directLock = this.directInstallLockEntries();\n const libraryLock = {\n ...directLock,\n ...(await this.libraryLockEntries(lib, opts?.moveLibraries === true)),\n ...keptVersions,\n };\n // The assets a kept asset requires stay as well, or the install would delete what it needs.\n const freshLock = {\n ...buildLockFile(resolved, overridesApplied, libraryLock),\n ...presetsLockSlice(presets),\n };\n await this.keepRequiredByKept(prevLock, kept, Object.keys(freshLock.assets));\n\n // 3. Build the catalog entries (fetching store bytes) and refuse a symlink in any of them\n // before anything is removed or written (p743).\n const entries = [...(await this.buildCatalogEntries(resolved, repositories)), ...lib.entries];\n assertNoLibrarySymlinks(entries, this.registry, repositories, opts?.link === true);\n\n // Reconcile: remove stale assets (in old lock but not in new resolved set).\n const { removed, replaced } = this.reconcileRemovedAssets(\n resolved,\n new Set([...Object.keys(libraryLock), ...Object.keys(kept.assets)]),\n );\n\n // 4. Deploy. Fan out to every target harness (one in project mode; the resolved\n // global set in `--global` mode) — same lock, one staged byte set.\n const copyDrift = await this.lockedCopyDrift();\n const missingCopies = await this.incompleteDeploys();\n const unrecordedAgents = this.unrecordedAgentFiles(prevLock);\n const deployed = [\n ...new Set(\n this.targetHarnesses().flatMap((t) =>\n deployAll(\n this.entriesForHarness(entries, t),\n repositories,\n patches,\n this.deployOptsFor(t, opts?.link),\n ),\n ),\n ),\n ];\n this.sweepLegacyOmpCopies(entries);\n\n // 4b. Render declared MCP servers into the coding agent's own MCP config.\n const mcpRestored = await this.renderDriverMcpConfig();\n const agentRender = await this.renderAgentInstances();\n // After the instance render: it rewrites the instance files `restored` reports.\n const restored = [...this.restoredCopies(copyDrift, deployed, missingCopies), ...mcpRestored];\n const rewritten = this.rewrittenAgentFiles(unrecordedAgents);\n\n // 5. Write the v2 lock file (authoritative full rewrite), library-origin\n // entries included. Skip only when there is nothing lockable AND no lock\n // exists yet — a project that resolved nothing should not get a vacuous\n // `skaile.lock.yaml`. When a lock DOES exist, still write (an empty\n // rewrite clears entries for now-removed deps).\n const lockWanted = resolved.length > 0 || lib.entries.length > 0 || existsSync(this.lockPath);\n let lockWritten = false;\n let relocked: string[] = [];\n let moved: LibraryMove[] = [];\n if (lockWanted) {\n const lockData = this.withRenderedAgents(withKeptLockEntries(freshLock, kept));\n moved = libraryMoves(prevLock, libraryLock);\n // A library renamed here keeps its asset: that is a re-lock of the name. A move to another\n // library has its own line.\n const movedRefs = new Set(moved.map((m) => m.ref));\n relocked = relockedRefs(prevLock, lockData).filter((k) => !movedRefs.has(k.split(\"#\")[0]!));\n // `writeLock` leaves an identical lock untouched (no `locked_at` churn).\n lockWritten = writeLock(this.lockPath, lockData);\n }\n\n // 6. Record history.\n this.recordInstallHistory(deployed, removed);\n\n // 7. Install npm peer deps for any mount/connector declared in skaile.yaml.\n const { npmInstalled, npmFailed } = await this.installRuntimeAssetDeps();\n const reportedMissing = stillMissing.filter((m) => !storeNotChecked.some((n) => n.ref === m));\n for (const n of storeNotChecked) delete missingHints[n.ref];\n await this.adviseMissing(reportedMissing, missingHints);\n\n const placeholderBodies = scaffoldBodyRefs(lib.entries, deployed);\n const placeholderDescriptions = scaffoldDescriptionRefs(lib.entries, deployed);\n return {\n deployed,\n removed,\n missing: [...reportedMissing, ...versionBlocked.filter((b) => !reportedMissing.includes(b))],\n ...(placeholderBodies.length > 0 ? { placeholderBodies } : {}),\n ...(placeholderDescriptions.length > 0 ? { placeholderDescriptions } : {}),\n ...(storeNotChecked.length > 0 ? { storeNotChecked } : {}),\n ...(Object.keys(missingHints).length > 0 ? { missingHints } : {}),\n ...(relocked.length > 0 ? { relocked } : {}),\n ...(moved.length > 0 ? { moved } : {}),\n ...(replaced.length > 0 ? { replaced } : {}),\n ...(restored.length > 0 ? { restored } : {}),\n ...(rewritten.length > 0 ? { rewritten } : {}),\n lockWritten,\n npmInstalled,\n npmFailed,\n presets,\n ...agentRender,\n };\n }\n\n /**\n * The kept refs whose locked copy came from a store that `install` did not (or could not)\n * ask, and whose deployed copy is still there: nothing says the copy is wrong, so it stays\n * and the run does not fail on it. A ref whose store answered \"no such asset\", one with no\n * deployed copy, and one a source or library used to supply stay missing.\n *\n * @param declaredSourceUrls - The `sources:` URLs of `skaile.yaml`; a lock entry from one of\n * them is that source's, not the store's.\n */\n private storeNotCheckedRefs(\n kept: KeptLockEntries,\n declaredSourceUrls: readonly string[],\n ): StoreNotChecked[] {\n const skipped = this.catalogUrlOverride === \"\";\n if (!skipped && this.storeFailures.size === 0) return [];\n const declared = new Set(declaredSourceUrls.map(normalizeRepoUrl));\n const out: StoreNotChecked[] = [];\n for (const ref of kept.refs) {\n const keys = kept.keysByRef.get(ref) ?? [];\n const fromStore = keys.some((key) => {\n const entry = kept.assets[key];\n return (\n entry !== undefined &&\n !entry.library &&\n entry.source !== undefined &&\n !declared.has(normalizeRepoUrl(entry.source.url))\n );\n });\n if (!fromStore || !this.keptCopyDeployed(kept, ref)) continue;\n if (skipped && this.storeFailures.size === 0) {\n out.push({ ref, reason: \"skipped\", detail: \"--no-catalog: the store was not asked\" });\n continue;\n }\n const urls = [...this.storeFailures.keys()];\n const airGapped = urls.every((url) => this.airGappedStores.has(url));\n out.push({\n ref,\n reason: airGapped ? \"air-gapped\" : \"unreachable\",\n detail: [...this.storeFailures.values()].join(\"; \"),\n });\n }\n return out;\n }\n\n /**\n * Extend `kept` (see {@link keptLockEntries}) with every previous lock entry a kept asset\n * requires, transitively, that the new lock (`freshKeys`) does not already carry. The lock\n * records no edges, so they are read from the kept asset's deployed copy, where the\n * requirement is publisher-qualified the same way a library scan does it. A copy that\n * cannot be read has no known requirements.\n */\n private async keepRequiredByKept(\n prev: LockFile | null,\n kept: KeptLockEntries,\n freshKeys: string[],\n ): Promise<void> {\n if (!prev) return;\n const fresh = freshKeys.map(parseCanonicalLockKey);\n const queue = Object.keys(kept.assets);\n for (const key of queue) {\n for (const dep of await this.deployedRequirementsOf(parseCanonicalLockKey(key))) {\n const want = memberIdentity(dep);\n if (!want) continue;\n const matches = (id: { kind?: string; name?: string; publisher?: string }): boolean =>\n id.kind === want.kind &&\n id.name === want.name &&\n (!want.publisher || !id.publisher || id.publisher === want.publisher);\n if (fresh.some(matches)) continue;\n for (const [depKey, entry] of Object.entries(prev.assets)) {\n if (depKey in kept.assets || entry.library?.installed) continue;\n if (!matches(parseCanonicalLockKey(depKey))) continue;\n kept.assets[depKey] = entry;\n queue.push(depKey);\n const src = entry.source\n ? prev.sources.find((s) => s.url === entry.source?.url)\n : undefined;\n if (src) kept.sources.push(src);\n }\n }\n }\n }\n\n /**\n * Publisher-qualified refs the deployed copy of `id` requires, read from its own\n * manifest file (`metadata.requires`, a manifest `dependencies:` entry): the one place\n * the requirements stay knowable when no source or library holds the asset any more.\n * A copy that is not deployed or cannot be read has no known requirements.\n */\n private async deployedRequirementsOf(id: {\n kind?: string;\n name?: string;\n publisher?: string;\n }): Promise<string[]> {\n const { kind, name, publisher } = id;\n const component = kind ? this.installTarget(kind) : undefined;\n if (!kind || !name || !component) return [];\n const locked = this.lockedRequirementsOf(id);\n const withLocked = (scanned: string[]): string[] => [...new Set([...scanned, ...locked])];\n // A deployed agent is a rendering with no `composes:`; its kept source has them.\n const keptAgent =\n kind === \"agent\" && !this.global ? join(agentSourceCacheDir(this.projectDir), name) : null;\n const dir =\n keptAgent && existsSync(keptAgent)\n ? keptAgent\n : deployedDir(component, name, this.driverTarget, this.global, this.projectDir);\n if (!existsSync(dir)) return withLocked([]);\n try {\n const scanned = await scanDirectory(dir, publisher ?? \"\", { knownKinds: this.knownKinds });\n const own = scanned.find((e) => e.kind === kind && e.name === name);\n return withLocked(own ? libraryEntryDepRefs(own) : []);\n } catch {\n return withLocked([]);\n }\n }\n\n /**\n * The `requires:` the lock recorded for the store-resolved asset `id` (see\n * {@link LockEntry.requires}): what its deployed copy cannot say, a store agent's skills.\n * Empty for an asset the lock does not hold or records none for.\n */\n private lockedRequirementsOf(id: { kind?: string; name?: string; publisher?: string }): string[] {\n const out: string[] = [];\n for (const [key, entry] of Object.entries(this.tryReadLock()?.assets ?? {})) {\n if (!entry.requires?.length) continue;\n const k = parseCanonicalLockKey(key);\n if (k.kind !== id.kind || k.name !== id.name) continue;\n if (id.publisher && k.publisher && k.publisher !== id.publisher) continue;\n out.push(...entry.requires);\n }\n return out;\n }\n\n /**\n * Ensure all source clones are present/up to date. Returns an early\n * {@link InstallResult} describing the failed source on the first error, or\n * `null` when every clone succeeds.\n */\n private ensureSourceClones(\n repositories: Record<string, SourceDeclaration>,\n sources: SourceEntry[],\n lock?: LockFile | null,\n ): InstallResult | null {\n const pinBySlug = pinsBySlug(sources);\n const lockedCommit = new Map<string, string>();\n for (const s of lock?.sources ?? []) {\n if (!/^0*$/.test(s.commit)) lockedCommit.set(sourceCacheKey(s.url), s.commit);\n }\n for (const [name, decl] of Object.entries(repositories)) {\n try {\n const declaredPin = pinBySlug.get(name);\n let locked = decl.url && !decl.factory ? lockedCommit.get(name) : undefined;\n // A clone holding a commit no remote branch has stays where it is, so resolution sees\n // that commit and `assertSourceCommitsPublished` refuses it (p260); pinning the clone\n // to the locked commit would hide it and let `install` report nothing wrong. A clone\n // already on the locked commit is kept there: the remote may have moved on (a shallow\n // clone then cannot show the commit on a remote branch), and nothing is hidden.\n if (locked && declaredPin === undefined) {\n const dir = this.resolveRepoDir(decl, name);\n const head = dir ? getRepoCommit(dir) : undefined;\n if (dir && head && head !== locked && !isCommitOnRemote(dir, head)) locked = undefined;\n }\n ensureRepo(decl, name, this.reposDir, {\n projectDir: this.projectDir,\n pin: declaredPin ?? locked,\n ...(declaredPin === undefined && locked ? { strictPin: true } : {}),\n });\n } catch (err) {\n return {\n deployed: [],\n removed: [],\n missing: [`source:${name} (${err instanceof Error ? err.message : String(err)})`],\n lockWritten: false,\n };\n }\n }\n return null;\n }\n\n /**\n * Best-effort twin of {@link ensureSourceClones} for the read-mostly entry\n * points (`add` / `lock`): same declarations and the same pins — a pinned\n * source must never be pulled off its pin — but a clone failure is swallowed\n * so resolution still runs against whatever is on disk.\n */\n private ensureSourceClonesQuiet(\n repositories: Record<string, SourceDeclaration>,\n sources: SourceEntry[],\n ): void {\n const pinBySlug = pinsBySlug(sources);\n for (const [name, decl] of Object.entries(repositories)) {\n try {\n ensureRepo(decl, name, this.reposDir, {\n projectDir: this.projectDir,\n pin: pinBySlug.get(name),\n });\n } catch {}\n }\n }\n\n /** Lock entries `skaile asset install` wrote (copied/linked straight into the project). */\n private directInstallLockEntries(): Record<string, LockEntry> {\n const entries = this.tryReadLock()?.assets ?? {};\n return Object.fromEntries(Object.entries(entries).filter(([, e]) => e.library?.installed));\n }\n\n /**\n * Remove stale assets — those recorded in the old lock but absent from the\n * newly resolved set (`resolved` source candidates plus `keep`, the canonical\n * refs of library-origin assets locked in this run). Returns the list of\n * removed refs.\n */\n private reconcileRemovedAssets(\n resolved: ProvenanceCandidate[],\n keep: ReadonlySet<string> = new Set(),\n ): { removed: string[]; replaced: ReplacedAsset[] } {\n const oldLock = this.tryReadLock();\n // Must match the canonical lock-key format from buildLockFile (core/lock.ts):\n // `<kind>:@<publisher>/<name>#<version>`. A different shape here made every\n // locked asset miss the set → wrongly \"removed\" (undeployed) then redeployed.\n const resolvedRefs = new Set([\n ...resolved.map((c) => `${c.kind}:@${c.publisher}/${c.name}#${c.version}`),\n ...keep,\n ]);\n const removed: string[] = [];\n const replaced: ReplacedAsset[] = [];\n if (oldLock) {\n for (const ref of Object.keys(oldLock.assets)) {\n if (!resolvedRefs.has(ref)) {\n const { kind, name, publisher, version } = parseCanonicalLockKey(ref);\n // A preset is a grouping with nothing deployed; a `preset:` row an older\n // release locked for a library preset just drops out of the rewritten lock.\n if (kind === \"preset\") continue;\n if (kind && name) {\n for (const t of this.targetHarnesses()) removeAsset(kind, name, this.deployOptsFor(t));\n // The same asset stays locked at another version: a replacement, not a removal.\n const successor = [...resolvedRefs].find((r) => {\n const o = parseCanonicalLockKey(r);\n return o.kind === kind && o.name === name && o.publisher === publisher;\n });\n if (successor) {\n replaced.push({\n ref: `${kind}:${publisher ? `@${publisher}/` : \"\"}${name}`,\n from: version ?? \"\",\n to: parseCanonicalLockKey(successor).version ?? \"\",\n });\n } else removed.push(ref);\n } else {\n // Surface the skip — an unparseable lock key means a stale asset can't\n // be reconciled away and would silently survive a remove-from-yaml.\n console.warn(`skaile: cannot reconcile unparseable lock key \"${ref}\" — left in place.`);\n }\n }\n }\n }\n return { removed, replaced };\n }\n\n /** Append `add`/`remove` history entries for a completed install reconcile. */\n private recordInstallHistory(deployed: string[], removed: string[]): void {\n for (const ref of deployed) {\n appendHistory(this.projectDir, {\n ref,\n action: \"add\",\n timestamp: new Date().toISOString(),\n context: this.global ? \"global\" : \"project\",\n });\n }\n for (const ref of removed) {\n appendHistory(this.projectDir, {\n ref,\n action: \"remove\",\n timestamp: new Date().toISOString(),\n context: this.global ? \"global\" : \"project\",\n });\n }\n }\n\n /** Read the lock, returning null on a legacy v1 lock instead of throwing. */\n private tryReadLock(): LockFile | null {\n try {\n return readLock(this.lockPath);\n } catch {\n return null;\n }\n }\n\n /**\n * A catalog client for `storeUrl` that honours `catalog.cache_ttl` (`0` = air-gapped: no\n * network, so every lookup that is not cached throws `OfflineError`).\n */\n private remoteStore(storeUrl: string): RemoteCatalogSource {\n let cacheTtlMs: number | undefined;\n try {\n cacheTtlMs = resolveConfig({ projectDir: this.projectDir }).catalog.cache_ttl * 1000;\n } catch {\n // An unreadable config keeps the client's own default TTL.\n }\n return new RemoteCatalogSource({ baseUrl: storeUrl, cacheTtlMs });\n }\n\n /**\n * Remember why a store could not be asked (store URL → one line without a JS error class\n * name), so `add` can say `store unreachable` instead of a bare `Asset not found`.\n */\n private noteStoreFailure(storeUrl: string, err: unknown): string {\n const text =\n err instanceof OfflineError\n ? `${storeUrl}: air-gapped (catalog.cache_ttl: 0), the store was not asked`\n : describeCatalogError(err, storeUrl);\n this.storeFailures.set(storeUrl, text);\n if (err instanceof OfflineError) this.airGappedStores.add(storeUrl);\n else this.airGappedStores.delete(storeUrl);\n return text;\n }\n\n /** Build a store fetcher from the configured stores, or undefined when none. */\n private buildStoreFetcher(stores: StoreEntry[]): StoreFetcher | undefined {\n if (stores.length === 0) return undefined;\n return {\n getInstallManifest: async (storeUrl, ref) => {\n const src = this.remoteStore(storeUrl);\n try {\n const m = await src.getInstallManifest(ref);\n // The install manifest has no dependency field; the catalog asset row does.\n // A failed lookup must not fail the install (the manifest above proved the\n // store is up), but warn so the missing deps are not silent.\n let deps: string[] | undefined;\n let gap: string | undefined;\n try {\n let row = await src.resolve(ref);\n // The manifest just proved the asset exists, so a `null` row is a cached miss\n // from before it was published: ask the store again (air-gapped can't).\n if (row === null && !src.cache.airGapped) row = await src.revalidate(ref);\n deps = row?.requires;\n if (row === null) gap = `has no catalog row for ${ref}`;\n // Air-gapped serves cache entries from older CLIs, which lack `requires`.\n else if (deps === undefined)\n gap = `has a cached catalog row for ${ref} without dependencies`;\n } catch (err) {\n gap = `dependency lookup for ${ref} failed — ${describeCatalogError(err, storeUrl)}`;\n }\n if (gap) {\n console.warn(`skaile: store ${storeUrl} ${gap}; installing without its dependencies`);\n }\n return {\n sourceUrl: m.source.url,\n commit: m.source.commitSha,\n sha256: m.sha256,\n files: m.files,\n deps,\n };\n } catch (err) {\n if (err instanceof CatalogHttpError && err.status === 404) return null;\n this.noteStoreFailure(storeUrl, err);\n throw err;\n }\n },\n getCanonicalDigest: async (storeUrl, ref) => {\n const src = this.remoteStore(storeUrl);\n return src.getCanonicalDigest(ref);\n },\n listVersions: async (storeUrl, ref) => {\n const src = this.remoteStore(storeUrl);\n try {\n return await src.listVersions(ref);\n } catch (err) {\n // Version discovery is a best-effort hint; a store/transport failure must\n // not fail the whole add/install. Warn, though — without it the ref just\n // lands in `missing` and a store outage reads as \"Asset not found\". One\n // warning per store URL: an unreachable store fails every ref the same way.\n const text = this.noteStoreFailure(storeUrl, err);\n if (!this.warnedStoreVersionLookups.has(storeUrl)) {\n this.warnedStoreVersionLookups.add(storeUrl);\n console.warn(`skaile: store lookup of ${ref} failed: ${text}`);\n }\n return [];\n }\n },\n };\n }\n\n /**\n * Resolve runtime assets and install any missing npm peer deps.\n *\n * - Required deps: installed via `bun add --optional`. Failure is recorded\n * in `npmFailed` but does not throw — install() proceeds so users get a\n * useful error message rather than a hung command.\n * - Optional deps: not installed automatically (would force every consumer\n * to pull every connector's deps). Future: add a flag to opt in.\n */\n private async installRuntimeAssetDeps(): Promise<{\n npmInstalled: string[];\n npmFailed: string[];\n }> {\n const npmInstalled: string[] = [];\n const npmFailed: string[] = [];\n let runtimeAssets: Awaited<ReturnType<typeof resolveRuntimeAssets>> | null = null;\n try {\n runtimeAssets = await resolveRuntimeAssets(this.projectDir);\n } catch {\n // Non-fatal — projects with no skaile.yaml or unresolvable factory-assets\n // simply have no runtime deps to install.\n return { npmInstalled, npmFailed };\n }\n\n const required = runtimeAssets.requiredNpmDeps.required;\n if (required.length === 0) return { npmInstalled, npmFailed };\n\n const { findMissingPackages, installNpmPackages } = await import(\n \"@skaile/workspaces/connectors\"\n );\n const missing = findMissingPackages(required, this.projectDir);\n if (missing.length === 0) return { npmInstalled, npmFailed };\n\n const result = await installNpmPackages(missing, this.projectDir);\n if (result.success) {\n npmInstalled.push(...missing);\n } else {\n npmFailed.push(...missing);\n }\n return { npmInstalled, npmFailed };\n }\n\n /**\n * Give every ref `install` could not resolve, and that has no hint yet, the fix the shared\n * {@link AssetManager.projectState} names for it (a declared ref no library or source holds,\n * a requirement nothing holds). Runs after the deploy, so a requirer is known by then.\n * Mutates `hints`: ` <reason>` follows the ref in the `Missing:` line.\n */\n private async adviseMissing(refs: string[], hints: Record<string, string>): Promise<void> {\n const open = refs.filter((r) => !hints[r]);\n if (open.length === 0) return;\n const { gaps } = await this.projectState();\n for (const ref of open) {\n const want = parseRefTolerant(ref.split(\" \")[0] ?? ref);\n if (!want) continue;\n const gap = gaps.find(\n (g) =>\n (g.type === \"declared\" || g.type === \"requires\") && g.manualFix && sameAsset(g.ref, want),\n );\n if (gap) hints[ref] = ` ${gap.reason}`;\n }\n }\n\n private async installLocked(\n repositories: Record<string, SourceDeclaration>,\n patches: Record<string, string>,\n dependencies: string[],\n ): Promise<InstallResult> {\n const lock = this.tryReadLock();\n if (!lock) {\n // A declared ref nothing holds is not fixed by `install`: say what `check` says instead of\n // sending the user to a command that fails on it too.\n const all = (await this.projectState()).gaps;\n const gaps = all.filter((g) => g.type !== \"agent\");\n if (gaps.some((g) => g.manualFix)) {\n return {\n deployed: [],\n removed: [],\n missing: gaps.map((g) => g.message),\n lockWritten: false,\n npmInstalled: [],\n npmFailed: [],\n };\n }\n // A project that declares nothing has nothing to lock (`install` writes no lock for it\n // either): restoring it is a no-op, not a missing lock. An agent instance bound to an\n // agent nothing holds is not \"nothing\": `check` fails on it, so does this (p97).\n if (dependencies.length === 0) {\n const unbound = all.filter((g) => g.type === \"agent\");\n return {\n deployed: [],\n removed: [],\n missing: unbound.map((g) => g.message),\n lockWritten: false,\n npmInstalled: [],\n npmFailed: [],\n };\n }\n throw new Error(\"No lock file found. Run `skaile install` first.\");\n }\n this.assertNoFolderCollision(Object.keys(lock.assets).map(parseCanonicalLockKey));\n\n // Every contributing source clone must exist at its pinned commit. Sources are keyed by\n // URL slug; the lock's `sources[]` carries the URL + commit.\n const declBySlug = new Map(Object.entries(repositories));\n\n // The factory source shares FACTORY_SOURCE_URL with the real ai-assets repo but ships\n // its bytes in-package (never fetched); resolve it to its bundled `path` + skip the fetch,\n // else verifyLock checks the ai-assets clone and false-reports every factory asset missing.\n const factoryUrl = normalizeRepoUrl(FACTORY_SOURCE_URL);\n const factoryDecl = Object.values(repositories).find((d) => d.factory);\n const factoryDir = factoryDecl?.path ?? null;\n const isFactoryUrl = (url: string): boolean =>\n factoryDir !== null && normalizeRepoUrl(url) === factoryUrl;\n\n const unavailable: string[] = [];\n for (const src of lock.sources) {\n if (isFactoryUrl(src.url)) continue;\n const slug = sourceCacheKey(src.url);\n const declared = declBySlug.get(slug);\n // A GitHub repository no `sources:` entry declares is a store's: its assets are fetched\n // file by file at the locked commit and SHA-verified below, never cloned.\n if (!declared && GITHUB_REPO_URL.test(src.url)) continue;\n try {\n const dir = ensureRepo(declared ?? { url: src.url }, slug, this.reposDir, {\n projectDir: this.projectDir,\n // A lock restore deploys the pinned commit's bytes or fails: never another commit's.\n ...(/^0*$/.test(src.commit) ? {} : { pin: src.commit, strictPin: true }),\n });\n // Ensure the repositories map has an entry for the local/remote check of the deploy.\n if (!declared) repositories[slug] = { url: src.url, path: dir };\n } catch (err) {\n const reason = err instanceof Error ? err.message : String(err);\n unavailable.push(`unavailable: ${src.url} at ${src.commit.slice(0, 7)} (${reason})`);\n }\n }\n if (unavailable.length > 0) {\n throw new Error(`Lock file verification failed:\\n ${unavailable.join(\"\\n \")}`);\n }\n\n // The source- and store-origin entries, as the candidates `add` and `install` deploy from:\n // the lock's `files[]` is the asset, so a restore writes every file the lock lists, not the\n // per-kind default file set. Entries restored from a clone (a declared source, the bundled\n // factory tree) are verified against it; store entries are fetched and SHA-verified file by\n // file when staged below.\n const candidates: ProvenanceCandidate[] = [];\n const cloneOrigin: LockFile[\"assets\"] = {};\n for (const [key, entry] of Object.entries(lock.assets)) {\n const candidate = this.lockedCandidate(key, entry, repositories);\n if (!candidate) continue;\n candidates.push(candidate);\n // An entry the bundled factory tree or a declared clone holds is verified against it. A\n // store entry whose upstream repo is the ai-assets repo (the factory source's URL) is not\n // in the bundled tree: it is fetched and verified file by file below (RCW p380, p610).\n if (this.candidateHasLocalBytes(candidate, repositories)) {\n cloneOrigin[key] = entry;\n }\n }\n const verification = verifyLock({ ...lock, assets: cloneOrigin }, (sourceUrl) => {\n if (isFactoryUrl(sourceUrl)) return factoryDir;\n const slug = sourceCacheKey(sourceUrl);\n return this.resolveRepoDir(repositories[slug] ?? { url: sourceUrl }, slug);\n });\n if (!verification.ok) {\n const issues = [\n ...verification.drifted.map((r) => `drifted: ${r}`),\n ...verification.missing.map((r) => `missing: ${r}`),\n ];\n throw new Error(`Lock file verification failed:\\n ${issues.join(\"\\n \")}`);\n }\n\n // A declared preset is only its items: one the lock does not cover (it never\n // resolved) must not pass as a restorable set.\n const presetGaps = await this.declaredPresetGaps(dependencies, lock);\n if (presetGaps.size > 0) {\n const lines = [...presetGaps].flatMap(([preset, gaps]) =>\n gaps.map((g) => `${preset} item ${g.ref}`),\n );\n throw new Error(\n `Lock file does not pin every item of the declared presets (not resolved by \\`skaile install\\`):\\n ${lines.join(\"\\n \")}`,\n );\n }\n\n // Library-origin entries have no clone: they are re-resolved from their named library below.\n let resolved: DeployableEntry[];\n try {\n resolved = await this.buildCatalogEntries(candidates, repositories);\n } catch (err) {\n const reason = err instanceof Error ? err.message : String(err);\n throw new Error(`Lock file verification failed:\\n ${reason}`);\n }\n\n const library = await this.restoreLibraryLockEntries(lock);\n assertNoLibrarySymlinks([...resolved, ...library.entries], this.registry, repositories);\n const copyDrift = await this.lockedCopyDrift();\n const missingCopies = await this.incompleteDeploys();\n const unrecordedAgents = this.unrecordedAgentFiles(lock);\n const deployed = [\n ...new Set(\n this.targetHarnesses().flatMap((t) =>\n deployAll(\n this.entriesForHarness([...resolved, ...library.entries], t),\n repositories,\n patches,\n this.deployOptsFor(t),\n ),\n ),\n ),\n ];\n this.sweepLegacyOmpCopies([...resolved, ...library.entries]);\n const mcpRestored = await this.renderDriverMcpConfig();\n const agentRender = await this.renderAgentInstances();\n const restored = [...this.restoredCopies(copyDrift, deployed, missingCopies), ...mcpRestored];\n const rewritten = this.rewrittenAgentFiles(unrecordedAgents);\n // The lock is only \"restored exactly\" when it covers the project: the gaps `check`, `doctor`\n // and `outdated` report (a declared dep with no lock entry, an unlocked `requires`, a pin the\n // lock contradicts, a library that cannot supply a locked asset) are drift here too.\n // A ref already reported in `library.missing` is not listed twice.\n const alreadyMissing = new Set(\n library.missing.map((m) => {\n const p = parseRefTolerant(m.split(\" \")[0] ?? m);\n return p ? `${p.kind}:${p.name}` : m;\n }),\n );\n const gaps = (await this.projectState()).gaps\n .filter((g) => {\n // An unbound agent instance is already in `agentRender.agentInstanceErrors`.\n if (g.type === \"agent\") return false;\n const p = parseRefTolerant(g.ref);\n return !(p && alreadyMissing.has(`${p.kind}:${p.name}`));\n })\n .map((g) => g.message);\n const placeholderBodies = scaffoldBodyRefs(library.entries, deployed);\n const placeholderDescriptions = scaffoldDescriptionRefs(library.entries, deployed);\n return {\n deployed,\n removed: [],\n missing: [...library.missing, ...gaps],\n ...(placeholderBodies.length > 0 ? { placeholderBodies } : {}),\n ...(placeholderDescriptions.length > 0 ? { placeholderDescriptions } : {}),\n lockWritten: false,\n ...(restored.length > 0 ? { restored } : {}),\n ...(rewritten.length > 0 ? { rewritten } : {}),\n ...agentRender,\n };\n }\n\n /**\n * The versions of `parsed`'s name that a source, a library or a store holds, newest first,\n * for the `Asset not found` of a pinned ref. Empty for an unpinned ref (nothing was ruled\n * out by a version) and when the name is unknown everywhere. A store that cannot be asked\n * adds nothing here: its failure is reported by the caller.\n */\n private async availableVersions(\n parsed: AssetRef,\n projectStores: StoreEntry[],\n ): Promise<string[]> {\n if (!parsed.pin) return [];\n const unpinned = assetRefToStr({ ...parsed, pin: undefined });\n const found = new Set<string>();\n try {\n const own = await this.info(unpinned);\n if (own?.version) found.add(own.version);\n } catch {\n // An unreadable source holds nothing to list.\n }\n const stores = [...projectStores, ...(await this.globalStoreFallback(projectStores))];\n const fetcher = this.storeFetcherFor(stores);\n for (const store of stores) {\n for (const v of (await fetcher?.listVersions?.(store.url, unpinned)) ?? []) found.add(v);\n }\n return [...found].sort((a, b) => (semverGt(coerceVersion(a), coerceVersion(b)) ? -1 : 1));\n }\n\n /**\n * Parse the ref `add` was given. A ref the grammar rejects fails with the parser's message\n * minus its manifest-migration advice (it points at a skill that is not for `add`), and:\n * - a publisher-less ref (`report-html`, `skill:report-html`) names the assets of that\n * kind and name that `add` can resolve (a source, the bundled factory source or a\n * library holds them), so `Did you mean` never names an asset that does not resolve;\n * - a `@version` suffix (`skill:@acme/x@1.0.0`) says the pin is written `#<version>`.\n */\n private async parseAddRef(\n ref: string,\n repositories: Record<string, SourceDeclaration>,\n sources: SourceEntry[],\n ): Promise<AssetRef> {\n try {\n return parseAssetRef(ref);\n } catch (err) {\n if (!(err instanceof Error)) throw err;\n const advice = \" Run the `migrate-skaile-manifest` skill on legacy manifests.\";\n const plain = err.message.endsWith(advice)\n ? err.message.slice(0, -advice.length)\n : err.message;\n if (plain.startsWith(\"publisher required\")) {\n const matches = await this.resolvableMatches(ref, repositories, sources);\n const hint =\n matches.length === 0\n ? \"\"\n : matches.length === 1\n ? ` Did you mean ${matches[0]}?`\n : ` Did you mean one of: ${matches.join(\", \")}?`;\n throw new Error(`${plain}${hint}`);\n }\n const pinned = /^(.*\\/[^@#/]+)@([^@#/]+)$/.exec(ref.trim());\n if (pinned && plain.startsWith(\"invalid asset name\")) {\n throw new Error(`${plain} To pin a version, write ${pinned[1]}#${pinned[2]}.`);\n }\n throw new Error(plain);\n }\n }\n\n /**\n * The publisher-qualified refs of the assets named like the publisher-less `ref` that\n * `add` resolves: held by a source clone, the bundled factory source or a registered\n * library. A ref without a kind means a skill, as the grammar says.\n */\n private async resolvableMatches(\n ref: string,\n repositories: Record<string, SourceDeclaration>,\n sources: SourceEntry[],\n ): Promise<string[]> {\n const trimmed = ref.trim();\n const colon = trimmed.indexOf(\":\");\n const rawKind = colon === -1 ? \"skill\" : trimmed.slice(0, colon).trim();\n const kind = rawKind === \"mcp\" ? \"mcp-server\" : rawKind;\n const hash = trimmed.indexOf(\"#\", colon + 1);\n const name = trimmed.slice(colon + 1, hash === -1 ? undefined : hash).trim();\n if (!name || /[@/\\s]/.test(name)) return [];\n const found = new Set<string>();\n const note = (c: { kind: string; name: string; publisher?: string }): void => {\n if (c.kind === kind && c.name === name && c.publisher) {\n found.add(assetRefToStr({ kind, name, publisher: c.publisher.replace(/^@/, \"\") }));\n }\n };\n try {\n this.ensureSourceClonesQuiet(repositories, sources);\n const index = await buildProvenanceIndex(this.buildClones(repositories), {\n projectDir: this.projectDir,\n knownKinds: this.knownKinds,\n onSourceError: this.reportSourceError,\n });\n for (const candidates of index.values()) for (const c of candidates) note(c);\n for (const { entry } of await this.libraryAssets()) note(entry);\n } catch {\n // A hint must never replace the real error.\n }\n return [...found].sort();\n }\n\n /**\n * Add a single asset (and its transitive dependencies) to the workspace.\n *\n * Resolves `ref`, deploys the asset and all requirements, then records the ref\n * in `skaile.yaml` `dependencies` so subsequent `skaile install` runs re-deploy it.\n *\n * @param ref - Asset ref in `kind:name` or `repo/kind:name` form (e.g. `skill:my-skill`).\n * @param opts - Optional deploy options.\n * @param opts.link - When `true`, symlink local-path assets instead of copying them\n * (the author dev-loop). Machine-local / not for committing; a no-op for\n * store/factory sources. Defaults to copy.\n * @param opts.onLibraryOrigin - Called once per deployed library-origin asset with its\n * canonical ref and the name of the library it was resolved from.\n * @param opts.onLibraryMoved - Called once per asset whose lock entry named another library\n * than the one this add resolved it from.\n * @param opts.onPresets - Called once with the presets expanded into this add (the\n * added preset and any it nests); a library-held preset names its library.\n * @returns Array of asset refs that were deployed in this call.\n * @throws When the asset cannot be found in any configured repository, or when a\n * preset's items do not all resolve (nothing is deployed or recorded then).\n */\n async add(\n ref: string,\n opts?: {\n link?: boolean;\n onLibraryOrigin?: (deployedRef: string, library: string) => void;\n /** Called per deployed library asset whose body is still the untouched `library create` scaffold. */\n onPlaceholderBody?: (deployedRef: string) => void;\n /** Called per deployed library asset whose `description:` is still the `library create` placeholder. */\n onPlaceholderDescription?: (deployedRef: string) => void;\n /** Called per already-locked asset this add moved to another library than its lock entry named. */\n onLibraryMoved?: (move: LibraryMove) => void;\n /** `update <name>`: an equal-version tie between libraries goes to the default library, then the locked one (see {@link install}'s `moveLibraries`). */\n preferLockedLibrary?: boolean;\n onPresets?: (presets: PresetExpansion[]) => void;\n /** Deploy over a folder no lock entry owns (a hand-made skill of the same name) instead of refusing. */\n force?: boolean;\n /** Called per `.env` file in an asset's directory that a copy deploy leaves out. */\n onSecretFile?: (ref: string, path: string) => void;\n },\n ): Promise<string[]> {\n const { repositories, sources, stores, dependencies, overrides, patches } = this.loadConfig();\n const parsed = await this.parseAddRef(ref, repositories, sources);\n\n this.ensureSourceClonesQuiet(repositories, sources);\n\n const provenanceIndex = await buildProvenanceIndex(this.buildClones(repositories), {\n projectDir: this.projectDir,\n knownKinds: this.knownKinds,\n onSourceError: this.reportSourceError,\n });\n this.collisionBatch = new Map();\n let resolution: LibraryFirstResolution;\n try {\n resolution = await this.resolveLibraryFirst([ref], {\n provenanceIndex,\n overrides,\n stores,\n declaredRefs: dependencies,\n warnCollisions: true,\n ...(opts?.preferLockedLibrary ? { preferLocked: await this.lockedPreference() } : {}),\n });\n } finally {\n this.flushLibraryCollisions();\n }\n const { resolved, missing, overridesApplied, lib, presets } = resolution;\n if (resolved.length === 0 && lib.entries.length === 0 && presets.length === 0) {\n // The directory may be on disk in a registered library whose manifest does not list\n // it yet: name `library index`, as the listed-but-partial case does.\n const snap = await this.loadLibraryIndex();\n const bare = (p: string | undefined) => (p ?? \"\").replace(/^@/, \"\");\n for (const l of snap?.libraries ?? []) {\n const libPath = this.libraryPath({ name: l.name }, snap);\n if (!libPath || !manifestFileHasAssetsArray(libPath)) continue;\n const unlisted = await scanUnlistedAssets(libPath, l.name, this.registry);\n const hit = unlisted.find(\n (u) =>\n !u.registeredAt &&\n u.entry.kind === parsed.kind &&\n u.entry.name === parsed.name &&\n (!parsed.publisher || bare(u.entry.publisher) === bare(parsed.publisher)),\n );\n if (hit) {\n throw new Error(\n unlistedAssetMessage(canonicalEntryRef(hit.entry), l.name, libPath, l.ownership),\n );\n }\n }\n // A store that could not be asked is not \"not found\": name the URL and the cause.\n const unreachable = [...this.storeFailures.values()];\n if (unreachable.length > 0) {\n throw new Error(\n `Store unreachable — ${ref} was not looked up: ${unreachable.join(\"; \")}. ` +\n \"Check the URL with `skaile catalog test`; a library or source can still hold the asset.\",\n );\n }\n const available = await this.availableVersions(parsed, stores);\n throw new Error(\n `Asset not found: ${ref}${(await this.publisherChangeHints([ref]))[ref] ?? \"\"}` +\n `${missing.length ? ` (missing: ${missing.join(\", \")})` : \"\"}` +\n // The name exists, the pinned version does not: say which versions do (p791).\n `${available.length ? `; ${parsed.name} has version(s): ${available.join(\", \")}` : \"\"}`,\n );\n }\n // A preset is only its items: one that does not resolve would leave the project\n // declaring a set it cannot install, so refuse before deploying or recording anything.\n if (parsed.kind === \"preset\" && missing.length > 0) {\n throw new Error(\n `Preset ${ref} has items that do not resolve: ${missing.join(\", \")} — nothing was added`,\n );\n }\n // A library asset the manifest does not list would deploy without its helper files:\n // refuse before anything is written, and name the fix.\n if (lib.entries.length > 0) {\n const snap = await this.loadLibraryIndex();\n for (const e of lib.entries) {\n const origin = lib.libraryOf.get(e);\n const libPath = origin ? this.libraryPath({ name: origin }, snap) : null;\n if (origin && libPath && isUnlistedLibraryAsset(e, libPath)) {\n throw new Error(\n unlistedAssetMessage(\n canonicalEntryRef(e),\n origin,\n libPath,\n snap?.libraries.find((l) => l.name === origin)?.ownership,\n ),\n );\n }\n }\n }\n this.assertSourceCommitsPublished(resolved, repositories);\n // Two publishers' assets of one kind and name share a deploy folder: refuse before\n // anything is fetched or written, rather than overwrite the one already there.\n this.assertNoFolderCollision(\n [...resolved, ...lib.entries.map((e) => this.entryIdentity(e))],\n [\n ...Object.keys(this.tryReadLock()?.assets ?? {}).map(parseCanonicalLockKey),\n ...dependencies.map((d) => parseAssetRefLoose(d) ?? {}),\n ],\n );\n if (!opts?.force) {\n this.assertNoUnownedFolder(\n [\n ...resolved.map((c) => ({\n id: c as FolderIdentity,\n entry: this.candidateToCatalogEntry(c, repositories),\n })),\n ...lib.entries.map((e) => ({ id: this.entryIdentity(e), entry: e })),\n ],\n [\n ...Object.keys(this.tryReadLock()?.assets ?? {}).map(parseCanonicalLockKey),\n ...dependencies.map((d) => parseAssetRefLoose(d) ?? {}),\n ],\n );\n }\n // The asset resolved, but a requirement of it did not: deploying it would leave a project\n // `check`, `install` and `diff` all fail, so refuse before anything is written or recorded.\n if (missing.length > 0) {\n // A store that could not be asked is not \"not found\": name the cause, as for the asset itself.\n const unreachable = [...this.storeFailures.values()];\n if (unreachable.length > 0) {\n throw new Error(\n `Store unreachable — ${ref.split(\"#\")[0]} requires ${missing.join(\", \")}, which was not looked up: ${unreachable.join(\"; \")}. ` +\n \"Check the URL with `skaile catalog test`; a library or source can still hold the requirement — nothing was added\",\n );\n }\n throw new Error(\n `${ref.split(\"#\")[0]} requires ${missing.join(\", \")} (not found — ${REGISTER_HOLDER}, or remove the requirement from the asset's manifest) — nothing was added`,\n );\n }\n\n const entries = [...(await this.buildCatalogEntries(resolved, repositories)), ...lib.entries];\n // A flow the flow engine cannot load is no flow: `validate` and `index` refuse it, and a\n // copy deployed here would be `installed` for `list` and `check` yet `Flow not found` for\n // `run` (p1192).\n assertFlowsLoad(entries);\n assertNoLibrarySymlinks(entries, this.registry, repositories, opts?.link === true);\n const deployed = [\n ...new Set(\n this.targetHarnesses().flatMap((t) =>\n deployAll(\n this.entriesForHarness(entries, t),\n repositories,\n patches,\n this.deployOptsFor(t, opts?.link, opts?.onSecretFile),\n ),\n ),\n ),\n ];\n this.sweepLegacyOmpCopies(entries);\n // Tell the caller which library each library-origin asset came from, keyed by\n // the canonical ref `deployAll` returned, so its success line can name it.\n if (opts?.onLibraryOrigin) {\n for (const e of lib.entries) {\n const origin = lib.libraryOf.get(e);\n const deployedRef = canonicalEntryRef(e);\n if (origin && deployed.includes(deployedRef)) opts.onLibraryOrigin(deployedRef, origin);\n }\n }\n if (presets.length > 0) opts?.onPresets?.(presets);\n for (const placeholder of scaffoldBodyRefs(lib.entries, deployed)) {\n opts?.onPlaceholderBody?.(placeholder);\n }\n for (const placeholder of scaffoldDescriptionRefs(lib.entries, deployed)) {\n opts?.onPlaceholderDescription?.(placeholder);\n }\n\n // Add to skaile.yaml dependencies (canonical ref string). Global mode routes\n // this to the user-scope SSOT (`~/.skaile/skaile.yaml`).\n this.addDependencyToConfig(ref);\n\n // Render declared MCP servers into the coding agent's own MCP config. Runs\n // after the dependency lands in skaile.yaml — the resolver only admits\n // declared assets.\n await this.renderDriverMcpConfig();\n await this.renderAgentInstances();\n\n // Keep the lock in sync — else a later remove-from-yaml + install has no\n // entry to diff against and the asset orphans. Merge (superset-write, never\n // drops existing entries or the plugins slice), not a full rewrite. Library\n // assets are locked as library-origin entries; a hit that resolved nothing at\n // all skips the write rather than stamp a vacuous lock into the project.\n if (resolved.length > 0 || lib.entries.length > 0) {\n const libraryLock = await this.libraryLockEntries(lib);\n const fresh = {\n ...buildLockFile(resolved, overridesApplied, libraryLock),\n ...presetsLockSlice(presets),\n };\n const prevLock = this.tryReadLock();\n if (opts?.onLibraryMoved) {\n for (const m of libraryMoves(prevLock, libraryLock)) opts.onLibraryMoved(m);\n }\n // The add re-rendered every instance, so the instances' files are re-hashed on the\n // entries kept from `prevLock` too.\n writeLock(\n this.lockPath,\n this.withInstanceRenderings(mergeLockFile(prevLock, this.withRenderedAgents(fresh))),\n );\n }\n\n for (const d of deployed) {\n appendHistory(this.projectDir, {\n ref: d,\n action: \"add\",\n timestamp: new Date().toISOString(),\n context: this.global ? \"global\" : \"project\",\n });\n }\n\n return deployed;\n }\n\n /**\n * Report the body-link **soft dependencies** of the given assets that are not\n * already present in the project.\n *\n * Looks up each ref's persisted `softDeps` in the local index\n * (`~/.skaile/index.db`, populated by `skaile source sync`) and returns the\n * edges whose target is neither a declared dependency nor deployed on disk. It\n * does **not** install anything and never touches the resolver / lock /\n * reconcile path: callers surface the result as a hint, the user opts in with\n * a follow-up `skaile add`. Inspects exactly the passed `refs` — soft deps of\n * their transitively-deployed dependencies are not surfaced here.\n *\n * Opening the index runs its idempotent migrations, so this is not a pure\n * read — but it is **best-effort**: any failure (legacy/corrupt index, a\n * removed-backend guard) yields `[]`, so it can never fail a primary `add`\n * that already succeeded.\n *\n * @param refs - Asset refs to inspect (canonical, `kind:@pub/name`, or `kind:name`).\n * @returns One edge per absent soft-dep target (deduped by target). `toRef` is\n * the parseable `skaile add` ref, omitted when the target isn't in the index.\n */\n async reportSoftDeps(\n refs: string[],\n ): Promise<Array<{ from: string; to: string; toRef?: string }>> {\n if (refs.length === 0) return [];\n return this.withIndexDefs(\n (allDefs) => this.collectSoftDeps(allDefs, refs, true),\n [] as SoftDepEdge[],\n );\n }\n\n /**\n * Presets in the configured sources (and the bundled factory source) that list\n * `ref` as an asset item, for the `skaile add` discoverability hint. Membership is\n * not a dependency: nothing here installs the preset or its siblings.\n *\n * Matches on kind + name, and on publisher only when both sides carry one, so\n * a bare `skill:x` item still matches `skill:@pub/x`. Presets already\n * declared in `skaile.yaml` are left out. Best-effort: any failure yields `[]`,\n * so it can never fail an `add` that succeeded.\n *\n * @param ref - The added asset ref (`kind:name`, `kind:@pub/name`, optionally pinned).\n * @returns One `{ name, ref }` per containing preset, deduped by `ref`; `ref` is\n * the `skaile add` form (`preset:@pub/name`, or `preset:name` without a publisher).\n */\n async presetsContaining(ref: string): Promise<Array<{ name: string; ref: string }>> {\n const target = memberIdentity(ref);\n if (!target || target.kind === \"preset\") return [];\n try {\n const sameAsset = (id: MemberIdentity | null, want: MemberIdentity) =>\n !!id &&\n id.kind === want.kind &&\n id.name === want.name &&\n (!id.publisher || !want.publisher || id.publisher === want.publisher);\n // A preset that is already declared needs no \"add the whole set\" hint.\n const declared = this.loadConfig().dependencies.map(memberIdentity);\n const out: Array<{ name: string; ref: string }> = [];\n const seen = new Set<string>();\n for (const p of await this.search(undefined, \"preset\")) {\n const members = [...p.dependencies, ...p.requires.map(depToStr)];\n if (!members.some((m) => sameAsset(memberIdentity(m), target))) continue;\n const publisher = p.publisher?.replace(/^@/, \"\");\n const presetId = { kind: \"preset\", name: p.name, publisher };\n if (declared.some((d) => sameAsset(d, presetId))) continue;\n const presetRef = publisher\n ? assetRefToStr({ kind: \"preset\", name: p.name, publisher })\n : `preset:${p.name}`;\n if (seen.has(presetRef)) continue;\n seen.add(presetRef);\n out.push({ name: p.name, ref: presetRef });\n }\n return out;\n } catch {\n return [];\n }\n }\n\n /**\n * All body-link soft dependencies of the given assets — present or not.\n *\n * Unlike {@link reportSoftDeps} (which filters to *absent* targets so it can\n * nudge a follow-up `skaile add`), this returns the asset's full inferred\n * soft-dep set for display surfaces (`skaile info` / `tree` / `why`). Read-only\n * and best-effort: any index failure yields `[]`. Targets are deduped.\n *\n * @param refs - Asset refs to inspect (canonical, `kind:@pub/name`, or `kind:name`).\n * @returns One {@link SoftDepEdge} per soft-dep target. `toRef` is the parseable\n * ref, omitted when the target isn't in the index.\n */\n async softDepsOf(refs: string[]): Promise<SoftDepEdge[]> {\n if (refs.length === 0) return [];\n return this.withIndexDefs((allDefs) => this.collectSoftDeps(allDefs, refs, false), []);\n }\n\n /**\n * Reverse lookup: refs (canonical ids) of cached assets whose persisted\n * `softDeps` include `targetRef`. Scans the whole index, not just present\n * assets. Read-only and best-effort (`[]` on any index failure).\n *\n * @param targetRef - Canonical soft-dep target ref (`<publisher>/<name>@<version>`).\n * @returns Def ids that declare `targetRef` as a soft dependency.\n */\n async softDepDependents(targetRef: string): Promise<string[]> {\n return this.withIndexDefs(\n (allDefs) => allDefs.filter((d) => d.softDeps?.includes(targetRef)).map((d) => d.id),\n [],\n );\n }\n\n /**\n * Compute which soft-dependency targets would be left **orphaned** by removing\n * `refs`: targets still present in the project that came in as one of `refs`'\n * soft dependencies and that **nothing else still needs** — neither another\n * present asset's soft-dep ({@link softDepDependents}) nor a typed `requires`.\n *\n * Pure read — never removes anything. The CLI / manage surfaces each result as\n * a prompt (default No) so the user opts in to an extra `skaile remove`. Safe to\n * call before or after the primary remove: assets being removed are excluded\n * from the \"needed by others\" scan, so a soft target referenced only by the\n * removed asset is still reported as an orphan.\n *\n * @param refs - Asset refs being removed (canonical, `kind:@pub/name`, or `kind:name`).\n * @returns One {@link OrphanedSoftDep} per orphaned target (deduped).\n */\n async orphanedSoftDepsAfterRemoving(refs: string[]): Promise<OrphanedSoftDep[]> {\n if (refs.length === 0) return [];\n return this.withIndexDefs((allDefs) => {\n const byId = new Map(allDefs.map((d) => [d.id, d]));\n const present = this.presentRefNames();\n\n // Bare names of the assets being removed — excluded from \"needed by others\".\n const removedNames = new Set<string>();\n for (const ref of refs) {\n for (const def of matchDefsForRef(allDefs, ref)) removedNames.add(def.name);\n try {\n removedNames.add(parseAssetRef(ref).name);\n } catch {}\n }\n\n // Names still needed by a *surviving* present asset (soft-dep or typed requires).\n const neededByOthers = new Set<string>();\n for (const presentRef of this.presentRefs()) {\n for (const def of matchDefsForRef(allDefs, presentRef)) {\n if (removedNames.has(def.name)) continue;\n for (const to of def.softDeps ?? []) neededByOthers.add(softDepName(to));\n for (const req of parseRequires(def.manifest)) neededByOthers.add(softDepName(req.name));\n }\n }\n\n // A present soft target is flagged even when directly declared in\n // skaile.yaml: with no install-provenance tracking we can't tell \"added for\n // the removed asset\" from \"wanted standalone\", so we report the fact (no\n // surviving referrer) and let the user decide — never auto-remove.\n const out: OrphanedSoftDep[] = [];\n const seen = new Set<string>();\n for (const ref of refs) {\n for (const def of matchDefsForRef(allDefs, ref)) {\n for (const to of def.softDeps ?? []) {\n const targetName = softDepName(to);\n if (!present.has(targetName)) continue; // not in the project — nothing to orphan\n if (removedNames.has(targetName)) continue; // also being removed\n if (neededByOthers.has(targetName)) continue; // something else still needs it\n if (seen.has(to)) continue;\n seen.add(to);\n const targetDef = byId.get(to);\n out.push({\n from: def.id,\n target: to,\n targetRef: targetDef ? depRefFromDef(targetDef) : undefined,\n });\n }\n }\n }\n return out;\n }, []);\n }\n\n /**\n * Open the local index, run `fn` against its cached asset defs, and close it.\n * Best-effort: no index (user never ran `source sync`), a missing file, or any\n * open/guard failure yields `fallback` — so a read surface can never throw or\n * create an empty `index.db` as a side effect.\n */\n private async withIndexDefs<T>(fn: (defs: AssetDefinition[]) => T, fallback: T): Promise<T> {\n try {\n const { LocalIndex, resolveIndexPath } = await import(\"@skaile/workspaces/library\");\n const indexPath = this.indexPathOverride ?? resolveIndexPath();\n if (!existsSync(indexPath)) return fallback;\n const index = new LocalIndex({ indexPath });\n try {\n return fn(await index.listAssetDefs());\n } finally {\n index.close();\n }\n } catch {\n return fallback;\n }\n }\n\n /**\n * Build soft-dep edges for `refs` from cached defs. With `onlyAbsent`, targets\n * already present in the project are skipped (the `reportSoftDeps` nudge); else\n * the full inferred set is returned (the `softDepsOf` display). Deduped by target.\n */\n private collectSoftDeps(\n allDefs: AssetDefinition[],\n refs: string[],\n onlyAbsent: boolean,\n ): SoftDepEdge[] {\n const present = onlyAbsent ? this.presentRefNames() : null;\n const byId = new Map(allDefs.map((d) => [d.id, d]));\n const out: SoftDepEdge[] = [];\n const seen = new Set<string>();\n for (const ref of refs) {\n for (const def of matchDefsForRef(allDefs, ref)) {\n for (const to of def.softDeps ?? []) {\n if (present?.has(softDepName(to))) continue;\n if (seen.has(to)) continue;\n seen.add(to);\n const targetDef = byId.get(to);\n out.push({ from: def.id, to, toRef: targetDef ? depRefFromDef(targetDef) : undefined });\n }\n }\n }\n return out;\n }\n\n /**\n * Names of assets already in the project — declared deps + deployed on disk.\n * Bare name only (see {@link softDepName}): a same-named asset of a different\n * publisher/kind counts as present, so the report under-reports rather than\n * nags about something already installed.\n */\n private presentRefNames(): Set<string> {\n const names = new Set<string>();\n for (const ref of this.presentRefs()) {\n try {\n names.add(parseAssetRef(ref).name);\n } catch {}\n }\n return names;\n }\n\n /**\n * Present asset refs — declared `skaile.yaml` deps (canonical refs as written)\n * plus deployed assets as `kind:name`. Used by the soft-dep present-check and\n * the orphan \"needed by others\" scan.\n */\n private presentRefs(): string[] {\n const refs: string[] = [];\n try {\n for (const ref of resolveSkWorkspaceConfig(this.projectDir).dependencies ?? [])\n refs.push(ref);\n } catch {}\n for (const e of this.listDeployed()) refs.push(`${e.kind}:${e.name}`);\n return refs;\n }\n\n /**\n * Remove a deployed asset and unregister it from `skaile.yaml` and the lock.\n *\n * A declared asset is always unregistered, even when nothing is deployed any\n * more (e.g. its library file was deleted): the declaration and lock entry\n * would otherwise be stuck behind a \"not deployed\" refusal.\n *\n * Removes only `ref` itself; use {@link removeWithDependencies} to also drop the\n * dependencies it leaves orphaned.\n *\n * Deliberately does NOT re-render the driver target's MCP config: the render\n * step is async (the declaration resolver is), and making this synchronous\n * method async would break every external caller. {@link removeWithDependencies}\n * (what `skaile remove` runs) does re-render it; a caller of this method gets the\n * dropped entry at the next {@link AssetManager.install} — see\n * {@link renderMcpServerConfig}.\n *\n * @param ref - Asset ref: `kind:@publisher/name`, or the short `kind:name` /\n * `name` form when exactly one declared, locked or deployed asset matches it.\n * @returns `true` if anything changed (files undeployed, declaration or lock\n * entry removed), `false` if the asset was neither deployed nor declared.\n * A `preset:` ref has no deployed files: only its declaration goes — its\n * expanded items leave with the next `skaile install`.\n * @throws When `ref` is malformed, or a short ref matches several assets (the\n * message lists them).\n */\n remove(ref: string, opts?: { force?: boolean }): boolean {\n const target = this.resolveRemoveTarget(ref);\n return target ? this.removeResolved(target, { force: opts?.force }) : false;\n }\n\n /**\n * {@link remove} `ref`, then drop the dependencies that removal left orphaned:\n * locked assets `ref` required (directly or through one another) that\n * `skaile.yaml` no longer declares and no remaining locked asset requires. A\n * preset's items count as its requirements. They are undeployed and unlocked;\n * a dependency still declared or required elsewhere stays.\n *\n * An asset another locked asset (or a declared preset) requires is kept and reported in\n * `blocked`, nothing changes, unless `opts.force` (see {@link requiredByOthers}).\n *\n * @returns `changed` as {@link remove}; `pruned` the canonical refs\n * (`kind:@publisher/name`) of the dependencies dropped as well; `blocked` when the\n * removal was refused.\n */\n async removeWithDependencies(ref: string, opts?: { force?: boolean }): Promise<RemoveResult> {\n const target = this.resolveRemoveTarget(ref);\n if (!target) return { changed: false, pruned: [] };\n if (!opts?.force) {\n const blocked = await this.requiredByOthers(target);\n if (blocked) return { changed: false, pruned: [], blocked };\n }\n const asked = target.publisher\n ? assetRefToStr({ kind: target.kind, name: target.name, publisher: target.publisher })\n : `${target.kind}:${target.name}`;\n let entry: CatalogEntry | null = null;\n try {\n entry = await this.info(asked);\n } catch {\n // Unreadable source/library: nothing known to prune.\n }\n let requiredRefs: string[];\n if (entry) {\n requiredRefs = [\n ...libraryEntryDepRefs(entry),\n ...this.lockedRequirementsOf({\n kind: target.kind,\n name: target.name,\n publisher: target.publisher,\n }),\n ];\n } else {\n // No source or library holds the asset any more: the deployed copy still names\n // what it required. A bare ref takes the publisher the lock recorded for it.\n const lockedAs = Object.keys(this.tryReadLock()?.assets ?? {})\n .map(parseCanonicalLockKey)\n .find(\n (id) =>\n id.kind === target.kind &&\n id.name === target.name &&\n (!target.publisher || id.publisher === target.publisher),\n );\n requiredRefs = await this.deployedRequirementsOf({\n kind: target.kind,\n name: target.name,\n publisher: target.publisher ?? lockedAs?.publisher,\n });\n }\n const kept: string[] = [];\n const ownedBy: { refs: string[]; paths: string[] }[] = [];\n const changed = this.removeResolved(target, { force: opts?.force, kept, ownedBy });\n const keptNote = {\n ...(kept.length > 0 ? { kept } : {}),\n ...(ownedBy.length > 0 ? { ownedBy } : {}),\n };\n const pruned = changed && requiredRefs.length > 0 ? await this.pruneOrphans(requiredRefs) : [];\n // A removed MCP server's generated entry leaves the driver target's MCP config now, also when\n // it was the last one (not at the next `install`).\n if (\n changed &&\n (target.kind === \"mcp-server\" || pruned.some((r) => r.startsWith(\"mcp-server:\")))\n ) {\n await this.renderDriverMcpConfig();\n }\n return { changed, pruned, ...keptNote };\n }\n\n /**\n * Resolve the identity {@link remove} acts on. A publisher-qualified ref is taken\n * as written; a short ref (`kind:name`, or just `name`) is matched on kind + name\n * against the declared dependencies, the lock and the deployed assets, like\n * `why` / `diff` do.\n *\n * @returns the identity, or `null` when a name-only ref matches nothing.\n * @throws On a malformed ref, or when a short ref matches more than one asset.\n */\n private resolveRemoveTarget(ref: string): RemoveTarget | null {\n const trimmed = ref.trim();\n try {\n return parseAssetRef(trimmed);\n } catch (err) {\n // Only a missing publisher is resolvable; every other fault already has a clear message.\n if (!(err instanceof Error) || !err.message.startsWith(\"publisher required\")) throw err;\n const colon = trimmed.indexOf(\":\");\n const rawKind = colon === -1 ? undefined : trimmed.slice(0, colon).trim();\n const kind = rawKind === \"mcp\" ? \"mcp-server\" : rawKind;\n const hash = trimmed.indexOf(\"#\", colon + 1);\n const name = trimmed.slice(colon + 1, hash === -1 ? undefined : hash).trim();\n if (!name || /[@/\\s]/.test(name)) throw err;\n\n const found: RemoveTarget[] = [];\n const note = (id: { kind?: string; name?: string; publisher?: string } | null): void => {\n if (!id?.kind || id.name !== name || (kind && id.kind !== kind)) return;\n found.push({ kind: id.kind, name: id.name, publisher: id.publisher });\n };\n try {\n for (const dep of this.loadConfig().dependencies) note(memberIdentity(dep));\n } catch {\n // No readable skaile.yaml: the lock and deployed assets still count.\n }\n for (const key of Object.keys(this.tryReadLock()?.assets ?? {})) {\n note(parseCanonicalLockKey(key));\n }\n for (const e of this.listDeployed()) note(e);\n\n // A publisher-less hit (a deployed file) is the same asset as a qualified one.\n const qualified = found.filter((f) => f.publisher);\n const distinct = new Map<string, RemoveTarget>();\n for (const f of found) {\n if (!f.publisher && qualified.some((q) => q.kind === f.kind)) continue;\n distinct.set(`${f.kind}:${f.publisher ?? \"\"}/${f.name}`, f);\n }\n const matches = [...distinct.values()];\n if (matches.length > 1) {\n const list = matches\n .map((m) => (m.publisher ? `${m.kind}:@${m.publisher}/${m.name}` : `${m.kind}:${m.name}`))\n .join(\", \");\n throw new Error(`\"${ref}\" matches several assets (${list}) — name one with its full ref.`);\n }\n if (matches.length === 1) return matches[0];\n return kind ? { kind, name } : null;\n }\n }\n\n /**\n * The reverse guard of {@link removeWithDependencies}: which other locked assets (and\n * declared presets) require `target`. Their requirements are read the way {@link lockedGraph}\n * reads them for pruning. Never touches the project.\n *\n * @returns `ref` and `requiredBy` (both `kind:@publisher/name`, version-agnostic), or `null`\n * when `target` is not locked or nothing else requires it.\n */\n private async requiredByOthers(\n target: RemoveTarget,\n ): Promise<{ ref: string; requiredBy: string[] } | null> {\n const lock = this.tryReadLock();\n if (!lock) return null;\n const { requires, findKey } = await this.lockedGraph(lock);\n const targetKey = findKey(\n target.publisher\n ? assetRefToStr({ kind: target.kind, name: target.name, publisher: target.publisher })\n : `${target.kind}:${target.name}`,\n );\n if (!targetKey) return null;\n const display = (node: string): string => {\n if (!lock.assets[node]) return node; // a declared preset, keyed by its declared ref\n const { kind, name, publisher } = parseCanonicalLockKey(node);\n if (!kind || !name) return node;\n return publisher ? assetRefToStr({ kind, name, publisher }) : `${kind}:${name}`;\n };\n const requiredBy = [...requires]\n .filter(([node, deps]) => node !== targetKey && deps.includes(targetKey))\n .map(([node]) => display(node));\n return requiredBy.length > 0 ? { ref: display(targetKey), requiredBy } : null;\n }\n\n /**\n * Publishers under which the lock or `skaile.yaml` track `kind:name`. A deployed dir carries\n * no publisher, so this is what says whose copy it is. `undefined` stands for a\n * publisher-less declaration.\n */\n private trackedPublishers(kind: string, name: string): Set<string | undefined> {\n const found = new Set<string | undefined>();\n const note = (id: { kind?: string; name?: string; publisher?: string } | null): void => {\n if (id?.kind === kind && id.name === name) found.add(id.publisher?.replace(/^@/, \"\"));\n };\n for (const key of Object.keys(this.tryReadLock()?.assets ?? {})) {\n note(parseCanonicalLockKey(key));\n }\n try {\n for (const dep of this.loadConfig().dependencies) note(memberIdentity(dep));\n } catch {\n // No readable skaile.yaml: the lock alone says whose copy is deployed.\n }\n return found;\n }\n\n /**\n * The lock entries that hold `kind:name`, each with its publisher (no leading `@`) and its\n * canonical ref. A deployed folder carries no publisher; these are who it belongs to.\n */\n private lockHolders(kind: string, name: string): { publisher?: string; ref: string }[] {\n return Object.keys(this.tryReadLock()?.assets ?? {})\n .map(parseCanonicalLockKey)\n .filter((id) => id.kind === kind && id.name === name)\n .map((id) => {\n const publisher = id.publisher?.replace(/^@/, \"\");\n return {\n publisher,\n ref: publisher ? assetRefToStr({ kind, name, publisher }) : `${kind}:${name}`,\n };\n });\n }\n\n /** The folders or files of `kind:name` on disk in `target`, shown relative to the project. */\n private heldDeployPaths(kind: string, name: string, target: DriverTarget): string[] {\n const component = this.installTarget(kind);\n if (!component) return [];\n return deployedPaths(component, name, target, this.global, this.projectDir)\n .filter(pathEntryExists)\n .map((p) => (this.global ? p : relative(this.projectDir, p)));\n }\n\n /**\n * Undeploy `parsed` from every target harness and drop its declaration and lock entry.\n *\n * A folder no lock entry holds is the user's own work (a hand-made skill of the same name):\n * it is kept and named in `opts.kept` unless `opts.force`.\n */\n private removeResolved(\n parsed: RemoveTarget,\n opts: {\n force?: boolean;\n kept?: string[];\n ownedBy?: { refs: string[]; paths: string[] }[];\n } = {},\n ): boolean {\n // Undeploy from every target harness; \"found\" if any harness had it. The lock decides whose\n // folder it is: a ref naming a publisher that never owned it must not delete the deployed\n // copy another publisher's lock entry holds (the deployed folder carries no publisher).\n const wantPub = parsed.publisher?.replace(/^@/, \"\");\n const tracked = this.trackedPublishers(parsed.kind, parsed.name);\n const holders = this.lockHolders(parsed.kind, parsed.name);\n const ownHolder = holders.some(\n (h) => wantPub === undefined || !h.publisher || h.publisher === wantPub,\n );\n const otherHolders = ownHolder ? [] : holders;\n const someoneElses =\n wantPub !== undefined && tracked.size > 0 && !tracked.has(wantPub) && !tracked.has(undefined);\n const owned = opts.force === true || ownHolder;\n let undeployed = false;\n if (!someoneElses || otherHolders.length > 0) {\n for (const t of this.targetHarnesses()) {\n if (!owned) {\n const held = this.heldDeployPaths(parsed.kind, parsed.name, t);\n if (otherHolders.length > 0) {\n if (held.length > 0)\n opts.ownedBy?.push({ refs: otherHolders.map((h) => h.ref), paths: held });\n } else {\n opts.kept?.push(...held);\n }\n continue;\n }\n if (removeAsset(parsed.kind, parsed.name, this.deployOptsFor(t))) undeployed = true;\n }\n }\n // `remove --global --harness omp` takes the copy out of omp only: while another harness still\n // holds one, the declaration stays, limited to those harnesses (p912).\n const stillHeldBy = this.harnessesStillHolding(parsed);\n const undeclared = stillHeldBy ? false : this.removeDependencyFromConfig(parsed);\n if (stillHeldBy) this.limitDeclaredEntry(parsed, stillHeldBy);\n const unbound = this.removeAgentBindings(parsed);\n const unlocked =\n !stillHeldBy && (undeployed || undeclared || unbound) ? this.pruneLockEntry(parsed) : false;\n const changed = undeployed || undeclared || unbound || unlocked;\n if (changed) {\n appendHistory(this.projectDir, {\n ref: `${parsed.kind}:${parsed.name}`,\n action: \"remove\",\n timestamp: new Date().toISOString(),\n context: this.global ? \"global\" : \"project\",\n });\n }\n return changed;\n }\n\n /**\n * After `remove --global --harness X`: the harnesses outside `X` that still hold a copy of the\n * asset, or `undefined` when none does (or this is not a harness-limited global remove).\n */\n private harnessesStillHolding(target: RemoveTarget): DriverTarget[] | undefined {\n if (!this.global || !this.harnessesOverride?.length) return undefined;\n const component = this.installTarget(target.kind);\n if (!component) return undefined;\n const current =\n this.entryHarnessRecord(target.kind, target.name, target.publisher) ??\n this.defaultGlobalHarnesses();\n const left = current.filter((h) => !this.harnessesOverride?.includes(h));\n const holding = left.filter((h) => isDeployed(component, target.name, h, true));\n return holding.length > 0 ? holding : undefined;\n }\n\n /** Limit the declared global entry of `target` to `harnesses` (`~/.skaile/skaile.yaml`). */\n private limitDeclaredEntry(target: RemoveTarget, harnesses: DriverTarget[]): void {\n const configPath = join(this.stateRoot, \"skaile.yaml\");\n if (!existsSync(configPath)) return;\n const raw = parseYaml(readFileSync(configPath, \"utf8\")) ?? {};\n const ref = assetRefToStr(target as AssetRef);\n if (this.setEntryHarnessRow(raw, ref, harnesses)) {\n writeFileSync(configPath, stringifyYaml(raw, { lineWidth: 120 }));\n }\n }\n\n /**\n * Drop the locked assets among `requiredRefs` (and what they require in turn) that\n * nothing needs any more: not declared in `skaile.yaml`, not required by a locked\n * asset outside that set. Call after the requiring asset is gone.\n *\n * @returns the canonical refs of the assets dropped.\n */\n private async pruneOrphans(requiredRefs: string[]): Promise<string[]> {\n const lock = this.tryReadLock();\n if (!lock) return [];\n const { requires, roots, findKey } = await this.lockedGraph(lock);\n const closure = (seeds: string[]): Set<string> => {\n const out = new Set(seeds);\n for (const node of out) for (const dep of requires.get(node) ?? []) out.add(dep);\n return out;\n };\n const candidates = closure(requiredRefs.map(findKey).filter((k): k is string => !!k));\n const needed = closure([\n ...roots,\n ...Object.keys(lock.assets).filter((k) => !candidates.has(k)),\n ]);\n const pruned: string[] = [];\n for (const key of candidates) {\n if (needed.has(key) || !lock.assets[key]) continue;\n const { kind, name, publisher } = parseCanonicalLockKey(key);\n if (!kind || !name) continue;\n this.removeResolved({ kind, name, publisher });\n // A dependency whose files are already gone still leaves the lock.\n this.pruneLockEntry({ kind, name, publisher });\n pruned.push(publisher ? assetRefToStr({ kind, name, publisher }) : `${kind}:${name}`);\n }\n return pruned;\n }\n\n /**\n * Drop every lock entry matching a removed asset's identity, version-agnostic so\n * a content-sha pseudo-version key is pruned too. Symmetric with {@link add}'s\n * lock-merge — stops a stale entry reporting a phantom \"removed\" on next install.\n *\n * @returns `true` when at least one lock entry was dropped.\n */\n private pruneLockEntry(parsed: { kind: string; name: string; publisher?: string }): boolean {\n const lock = this.tryReadLock();\n if (!lock) return false;\n let changed = false;\n const droppedUrls: string[] = [];\n for (const key of Object.keys(lock.assets)) {\n const id = parseCanonicalLockKey(key);\n if (\n id.kind === parsed.kind &&\n id.name === parsed.name &&\n (!parsed.publisher || id.publisher === parsed.publisher)\n ) {\n const url = lock.assets[key]?.source?.url;\n if (url) droppedUrls.push(url);\n delete lock.assets[key];\n changed = true;\n }\n }\n // A preset is never a lock asset: its record lives in `presets`, dropped with the preset.\n if (parsed.kind === \"preset\" && lock.presets) {\n const kept = lock.presets.filter((key) => {\n const id = parseCanonicalLockKey(key);\n return !(\n id.kind === parsed.kind &&\n id.name === parsed.name &&\n (!parsed.publisher || id.publisher === parsed.publisher)\n );\n });\n if (kept.length !== lock.presets.length) {\n if (kept.length > 0) lock.presets = kept;\n else delete lock.presets;\n changed = true;\n }\n }\n // The `sources:` row of a repo takes the commit of the asset that sorts first: re-derive it\n // from the assets left, and drop the row of a repo no asset uses any more, so the next\n // `install` finds the lock clean (p790).\n if (changed) writeLock(this.lockPath, resyncLockSources(lock, droppedUrls));\n return changed;\n }\n\n // ── Query ──────────────────────────────────────────────────────────────\n\n /**\n * Search the catalog across all configured repositories.\n *\n * @param query - Substring to match against entry names and descriptions (case-insensitive).\n * Omit to return all entries.\n * @param kind - Filter by asset kind (`\"skill\"`, `\"agent\"`, `\"prompt\"`, `\"flow\"`, `\"contract\"`).\n * Omit to return all kinds.\n * @returns Array of matching {@link CatalogEntry} objects from all accessible repositories.\n */\n async search(query?: string, kind?: string): Promise<CatalogEntry[]> {\n const { repositories } = this.loadConfig();\n let all: CatalogEntry[] = [];\n\n for (const [name, decl] of Object.entries(repositories)) {\n const repoDir = this.resolveRepoDir(decl, name);\n if (!repoDir) continue;\n all = [\n ...all,\n ...(await scanRepo(repoDir, name, {\n knownKinds: this.knownKinds,\n declaredPublisher: decl.publisher,\n })),\n ];\n }\n\n if (kind) all = all.filter((e) => e.kind === kind);\n if (query) {\n const q = query.toLowerCase();\n all = all.filter(\n (e) => e.name.toLowerCase().includes(q) || e.description.toLowerCase().includes(q),\n );\n }\n return all;\n }\n\n /**\n * On-disk root + config slug for every declared (and the implicit factory)\n * source that has a local clone. Companion to {@link search}: callers that\n * need to relate a scanned entry back to its source root (e.g. to stamp\n * plugin grouping) can't recover the root from the flat\n * {@link CatalogEntry} list `search` returns.\n */\n searchRepoRoots(): { repoName: string; root: string }[] {\n const { repositories } = this.loadConfig();\n const out: { repoName: string; root: string }[] = [];\n for (const [name, decl] of Object.entries(repositories)) {\n const repoDir = this.resolveRepoDir(decl, name);\n if (repoDir) out.push({ repoName: name, root: repoDir });\n }\n return out;\n }\n\n /**\n * Look up a single asset's full catalog entry.\n *\n * Accepts a bare `kind:name` ref (no publisher) in addition to the fully-qualified\n * `kind:@publisher/name` form — {@link listDeployed} emits publisher-less refs and\n * {@link doctor} passes them straight to this method.\n *\n * @param ref - Asset ref in `kind:name`, `kind:@publisher/name`, or `repo/kind:name` form.\n * @returns The matching {@link CatalogEntry}, or `null` when not found.\n */\n async info(ref: string): Promise<DeployableEntry | null> {\n const { repositories } = this.loadConfig();\n const parsed = parseRefTolerant(ref);\n if (!parsed) return null;\n\n // Several repositories may hold the ref: take the highest version, as `add` resolves\n // it (the first one on a tie), so `info` shows the version `add` installs.\n let best: DeployableEntry | undefined;\n for (const [name, decl] of Object.entries(repositories)) {\n const repoDir = this.resolveRepoDir(decl, name);\n if (!repoDir) continue;\n // Match on the entry's scanned (manifest) publisher, not the repo map key\n // (= URL slug). The two are unrelated identities under canonical schema.\n const entries = await scanRepo(repoDir, name, {\n knownKinds: this.knownKinds,\n declaredPublisher: decl.publisher,\n });\n let match = entries.find(\n (e) =>\n e.kind === parsed.kind &&\n e.name === parsed.name &&\n (!parsed.publisher || e.publisher === parsed.publisher),\n );\n // A source asset that declares no version is keyed by its repo commit, as `add` locks it\n // and `search` lists it (p967).\n const commit = match && !match.version ? getRepoCommit(repoDir) : null;\n if (match && commit) match = { ...match, version: `0.0.0-sha.${commit.slice(0, 7)}` };\n if (\n match &&\n (!best || semverGt(coerceVersion(match.version ?? \"\"), coerceVersion(best.version ?? \"\")))\n ) {\n best = match;\n }\n }\n if (best) return best;\n // Not in any source: a publisher-qualified ref may be a local library asset.\n const lib = await this.resolveLibraryEntries([ref], { quiet: true });\n return lib.entries[0] ?? null;\n }\n\n /**\n * List all assets currently deployed in the workspace (or global cache).\n *\n * Scans the framework deploy directories rather than the lock file, so it\n * also returns assets that were installed manually or outside of `skaile install`.\n *\n * @param kind - Filter by asset kind. Omit to return all kinds.\n * @returns Shallow {@link CatalogEntry} objects (description and version will be empty).\n */\n listDeployed(kind?: string): CatalogEntry[] {\n // Only kinds with an install target have a deploy dir to scan.\n const kinds: AiComponent[] = kind\n ? [this.installTarget(kind)].filter((k): k is AiComponent => k !== undefined)\n : [\n ...new Set(\n this.registry\n .getAllProviders()\n .map((p) => p.installTarget)\n .filter((t): t is AiComponent => t !== undefined),\n ),\n ];\n const result: CatalogEntry[] = [];\n const seen = new Set<string>();\n for (const k of kinds) {\n try {\n const base = deployedBase(k, this.driverTarget, this.global, this.projectDir);\n if (!existsSync(base)) continue;\n for (const item of readdirSync(base, { withFileTypes: true })) {\n // Directories and symlinks use the directory name directly (skills, omp agents, etc.)\n // Files use the stem without extension (claude-code agents → .md, codex agents → .toml,\n // prompts → .prompt.md, flows → .flow.yaml/.flow.json)\n let name: string;\n if (item.isDirectory() || item.isSymbolicLink()) {\n name = item.name;\n } else if (item.isFile()) {\n name = item.name\n .replace(/\\.prompt\\.md$/, \"\")\n .replace(/\\.flow\\.(yaml|json)$/, \"\")\n .replace(/\\.(md|toml|yaml|json)$/, \"\");\n } else {\n continue;\n }\n const key = `${k}:${name}`;\n if (seen.has(key)) continue;\n seen.add(key);\n result.push({\n name,\n kind: k as any,\n description: \"\",\n source: join(base, item.name),\n version: \"\",\n requires: [],\n dependencies: [],\n });\n }\n } catch {}\n }\n return result;\n }\n\n /**\n * Tracked assets (`skaile.lock.yaml` or declared in `skaile.yaml`) whose copy\n * still sits in the project's `.claude/…` dirs although this manager deploys\n * to another harness. Before the default followed the configured harness every\n * project deployed to `.claude/`, so an omp/codex project upgraded from then\n * holds orphans there that `remove` / `clean` / `list` no longer look at.\n *\n * Read-only: nothing is deleted. Empty for `claude-code`, for global mode, and\n * for kinds whose dir is shared with the active target (flows).\n *\n * @returns One {@link LegacyDeployedAsset} per stale copy, sorted by kind then name.\n */\n listLegacyClaudeDeployed(): LegacyDeployedAsset[] {\n if (this.global || this.driverTarget === \"claude-code\") return [];\n const tracked = new Map<string, { kind: string; name: string; component: AiComponent }>();\n const track = (kind: string | undefined, name: string | undefined): void => {\n const component = kind ? this.installTarget(kind) : undefined;\n if (kind && name && component) {\n tracked.set(`${kind}:${name}`, { kind, name, component });\n }\n };\n const lock = this.tryReadLock();\n if (lock) {\n for (const key of Object.keys(lock.assets)) {\n const { kind, name } = parseCanonicalLockKey(key);\n track(kind, name);\n }\n }\n try {\n for (const ref of resolveSkWorkspaceConfig(this.projectDir).dependencies ?? []) {\n try {\n const parsed = parseAssetRef(ref);\n track(parsed.kind, parsed.name);\n } catch {\n // unparseable ref: reported as `invalid` by listDeclared, nothing to look up here\n }\n }\n } catch {\n // no / legacy skaile.yaml: the lock alone decides\n }\n const out: LegacyDeployedAsset[] = [];\n for (const { kind, name, component: k } of tracked.values()) {\n const legacy = deployedDir(k, name, \"claude-code\", false, this.projectDir);\n // Flows deploy to `.skaile/flows` for every harness — not a legacy copy.\n if (legacy === deployedDir(k, name, this.driverTarget, false, this.projectDir)) continue;\n // A flat agent (`<name>.md` / `.toml`) sits beside the `<name>` dir: name the path that exists.\n const found = deployedPaths(k, name, \"claude-code\", false, this.projectDir).find((p) => {\n try {\n lstatSync(p);\n return true;\n } catch {\n return false;\n }\n });\n if (found) out.push({ kind, name, path: found });\n }\n return out.sort((a, b) => a.kind.localeCompare(b.kind) || a.name.localeCompare(b.name));\n }\n\n /**\n * List the **declared** top-level dependencies from `skaile.yaml`, each tagged\n * with a reconciliation {@link DeclaredState}:\n *\n * - `declared` — in `skaile.yaml`, not yet resolved into the lock.\n * - `installed` — declared + locked, and (for kinds with an `installTarget`)\n * materialized on disk. An `mcp-server` is instead checked against the\n * declarations the runner would actually wire (store-staged or materialized\n * `MCP.md`); the remaining composition-only kinds (no `installTarget`) count as\n * installed once locked — they are resolved at session start with no harness\n * footprint here.\n * - `drift` — declared + locked but the deployed files are missing on disk.\n * - `invalid` — the `dependencies:` entry isn't a parseable canonical ref. Only\n * surfaced in the unfiltered listing (a `kind` filter can't classify it).\n *\n * Transitive (lock-only) deps are excluded by construction — only the declared\n * set is walked, so a lock entry with no matching `dependencies:` ref never shows.\n *\n * @param kind - Filter by asset kind. Omit to return all kinds.\n * @returns One {@link DeclaredAsset} per declared dep (after the optional kind filter).\n * @throws {MissingManifestError} when the project has no `skaile.yaml`.\n * @throws {Error} with a `migrate-skaile-manifest` hint on legacy `repositories:` / `ai_resources:` keys.\n */\n async listDeclared(kind?: string): Promise<DeclaredAsset[]> {\n if (!existsSync(join(this.projectDir, SKAILE_YAML_DEFAULT))) {\n throw new MissingManifestError(this.projectDir);\n }\n // resolveSkWorkspaceConfig runs the canonical normalizer (throws on legacy\n // keys) — used directly rather than loadConfig() to avoid the latter's\n // repositories-map build + getGlobalCacheDir() migration side effects on a read.\n const dependencies = resolveSkWorkspaceConfig(this.projectDir).dependencies ?? [];\n const lock = this.tryReadLock();\n const lockKeys = lock ? Object.keys(lock.assets).map(parseCanonicalLockKey) : [];\n const presetGaps = await this.declaredPresetGaps(dependencies, lock);\n\n // Names of every MCP the runner would actually wire, in both scoped and\n // unscoped form. Built at most once per call and only when a locked\n // mcp-server is reached — the load builds a provenance index, too expensive\n // to pay for a listing that has none. A throw degrades to \"nothing wired\"\n // (→ drift) rather than failing the whole read-only listing.\n let wiredMcps: Set<string> | undefined;\n const wiredMcpNames = async (): Promise<Set<string>> => {\n if (wiredMcps === undefined) {\n try {\n const decls = await loadMcpServerDeclarations(this.projectDir);\n wiredMcps = new Set(decls.flatMap((d) => [d.id, unscopedName(d.id)]));\n } catch {\n wiredMcps = new Set<string>();\n }\n }\n return wiredMcps;\n };\n\n const out: DeclaredAsset[] = [];\n for (const ref of dependencies) {\n let parsed: ReturnType<typeof parseAssetRef>;\n try {\n parsed = parseAssetRef(ref);\n } catch {\n // An unparseable ref has no kind to match a filter against; surface it\n // as `invalid` in the unfiltered listing rather than dropping it silently.\n if (!kind) out.push({ ref, kind: \"\", name: ref, state: \"invalid\" });\n continue;\n }\n if (kind && parsed.kind !== kind) continue;\n\n // A declared ref need not carry a publisher; match on kind+name and, when\n // present, the publisher — the lock key is always fully canonical.\n // A preset is never locked itself (the lock lists its expanded items), so a\n // declared preset counts as resolved once a lock exists and covers every item.\n const locked =\n parsed.kind === \"preset\"\n ? lock !== null && !presetGaps.get(ref)?.length\n : lockKeys.some(\n (k) =>\n k.kind === parsed.kind &&\n k.name === parsed.name &&\n (!parsed.publisher || k.publisher === parsed.publisher),\n );\n\n let state: DeclaredState;\n let reason: string | undefined;\n if (!locked) {\n state = \"declared\";\n } else if (parsed.kind === \"mcp-server\") {\n // An mcp-server has no target-dir footprint, but it is not bytes-free\n // either: it is wired from a store-staged or materialized `MCP.md`. Only\n // \"the runner would see a declaration for this name\" counts as installed\n // — locked-but-invisible is real drift, fixable by `skaile install`.\n const wired = await wiredMcpNames();\n const isWired = wired.has(parsed.name) || wired.has(unscopedName(parsed.name));\n const skippedReason = Object.entries(\n await readSkippedMcpServers(this.projectDir, this.driverTarget),\n ).find(([id]) => id === parsed.name || unscopedName(id) === parsed.name)?.[1];\n const drifted = (await this.mcpDriftRows()).some(\n (r) => unscopedName(r.drift.id) === unscopedName(parsed.name),\n );\n if (isWired && skippedReason !== undefined) {\n state = \"skipped\";\n reason = skippedReason;\n } else {\n state = isWired && !drifted ? \"installed\" : \"drift\";\n }\n } else {\n const component = this.installTarget(parsed.kind);\n if (!component) {\n state = \"installed\";\n } else {\n const onDisk = isDeployed(\n component,\n parsed.name,\n this.driverTarget,\n this.global,\n this.projectDir,\n );\n state = onDisk ? \"installed\" : \"drift\";\n }\n }\n out.push({ ref, kind: parsed.kind, name: parsed.name, state, ...(reason ? { reason } : {}) });\n }\n return out;\n }\n\n /**\n * Notes about the project's `mcp-server`s that are not drift and fail nothing: a declared\n * server skaile does not write to the coding agent's MCP config (`reason` from the last\n * render), and a required `MCP.md` field nothing sets. `check` and `doctor` print them as\n * `!` lines; `list` shows the first kind as `skipped`.\n *\n * @returns One {@link McpNotice} per note; empty for a global manager.\n */\n async mcpNotices(): Promise<McpNotice[]> {\n if (this.global) return [];\n const out: McpNotice[] = [];\n const skipped = await readSkippedMcpServers(this.projectDir, this.driverTarget);\n for (const [id, reason] of Object.entries(skipped)) {\n out.push({ id, kind: \"skipped\", reason, text: `MCP server \"${id}\" is skipped: ${reason}` });\n }\n let decls: McpServerDeclaration[] = [];\n try {\n decls = await loadMcpServerDeclarations(this.projectDir);\n } catch {\n // A declaration that cannot be read has no fields to name.\n }\n for (const decl of decls) {\n if (skipped[decl.id] !== undefined) continue;\n const unset = unsetRequiredFields(decl);\n if (unset.length > 0) {\n out.push({\n id: decl.id,\n kind: \"unset-field\",\n text: `MCP server \"${decl.id}\" ${requiredFieldsAdvice(decl.id, unset)}`,\n });\n }\n }\n return out;\n }\n\n /**\n * Locked assets whose deployed directory lacks files the deploy writes — a deleted\n * `build.py` / `scripts/` helper next to an intact `SKILL.md`. The expected set is the file\n * set the lock covers: a library entry's files (every file under its manifest `root:`), a\n * source or store entry's `files[]` (the asset's whole file set at the locked commit). Only\n * presence is checked, so a local edit never counts. An asset with no deployed directory is\n * not listed (`listDeclared` reports it as drift); an agent is rendered, not copied, so it\n * has no file mirror to compare. `skaile install` restores what is listed.\n *\n * @returns One {@link IncompleteDeploy} per affected asset; empty when healthy\n * or when the project has no lock.\n */\n async incompleteDeploys(): Promise<IncompleteDeploy[]> {\n const lock = this.tryReadLock();\n if (!lock) return [];\n const out: IncompleteDeploy[] = [];\n\n const { patches } = this.loadConfig();\n for (const [key, entry] of Object.entries(lock.assets)) {\n if (!entry.source || entry.files.length === 0) continue;\n const { publisher, kind, name } = parseCanonicalLockKey(key);\n const component = kind ? this.installTarget(kind) : undefined;\n if (!publisher || !kind || !name || !component || component === \"agent\") continue;\n if (patches[`${kind}:${name}`]) continue;\n const dest = join(\n deployedBase(component, this.driverTarget, this.global, this.projectDir),\n name,\n );\n if (!existsSync(dest) || lstatSync(dest).isSymbolicLink()) continue;\n const missing = lockedAssetFiles(kind, entry.files)\n .map((f) => f.rel)\n .filter((rel) => !existsSync(join(dest, rel)));\n if (missing.length > 0) out.push({ ref: `${kind}:@${publisher}/${name}`, missing });\n }\n\n const locked = Object.entries(lock.assets)\n .filter(([, e]) => e.library !== undefined && !e.library.installed)\n .map(([key]) => key);\n if (locked.length === 0) return out;\n const lib = await this.resolveLibraryEntries(locked, { quiet: true });\n for (const entry of lib.entries) {\n const component = this.installTarget(entry.kind);\n if (!entry.files || !component || component === \"agent\") continue;\n const dest = join(\n deployedBase(component, this.driverTarget, this.global, this.projectDir),\n entry.name,\n );\n if (!existsSync(dest)) continue;\n const missing = entry.files.filter((rel) => !existsSync(join(dest, rel)));\n if (missing.length > 0) out.push({ ref: canonicalEntryRef(entry), missing });\n }\n return out;\n }\n\n /**\n * Per-harness reconciliation of the **global** declared deps\n * (`~/.skaile/skaile.yaml`) against each global harness's deploy dir. The\n * global twin of {@link listDeclared}: the same `declared` / `installed` /\n * `drift` / `invalid` vocabulary, but one row **per (ref, harness)** so an\n * asset can be `installed` for `claude-code` and `drift`/`declared` for\n * `codex` at once.\n *\n * Reads the SSOT + the global lock (`~/.skaile/skaile.lock.yaml`) — construct\n * the manager with `global: true`. Unlike `listDeclared`, a missing SSOT is\n * **not** an error: it yields an empty list (a fresh machine has no globals).\n *\n * @param opts.harness - Reconcile against this one harness only (the\n * `--harness` filter); omit for every harness in {@link targetHarnesses}.\n * @param opts.kind - Filter by asset kind.\n * @returns One {@link HarnessDeclaredAsset} per declared dep × harness.\n * @throws {Error} on legacy keys in `~/.skaile/skaile.yaml` (migration hint).\n */\n globalState(opts?: {\n harness?: DriverTarget;\n /** @deprecated Use `harness`. Honoured only when `harness` is absent; removed in the next major. */\n backend?: DriverTarget;\n kind?: string;\n }): HarnessDeclaredAsset[] {\n const dependencies = resolveGlobalSkWorkspaceConfig().dependencies ?? [];\n const lock = this.tryReadLock();\n const lockKeys = lock ? Object.keys(lock.assets).map(parseCanonicalLockKey) : [];\n const harnessFilter = opts?.harness ?? opts?.backend;\n const harnesses = harnessFilter ? [harnessFilter] : this.targetHarnesses();\n\n const out: HarnessDeclaredAsset[] = [];\n for (const ref of dependencies) {\n let parsed: ReturnType<typeof parseAssetRef>;\n try {\n parsed = parseAssetRef(ref);\n } catch {\n if (!opts?.kind) {\n for (const harness of harnesses)\n out.push({ ref, kind: \"\", name: ref, state: \"invalid\", harness });\n }\n continue;\n }\n if (opts?.kind && parsed.kind !== opts.kind) continue;\n\n // A preset is never locked itself (the lock lists its expanded items), so a\n // declared preset counts as resolved once any lock exists.\n const locked =\n parsed.kind === \"preset\"\n ? lock !== null\n : lockKeys.some(\n (k) =>\n k.kind === parsed.kind &&\n k.name === parsed.name &&\n (!parsed.publisher || k.publisher === parsed.publisher),\n );\n\n // `add --global --harness` limited this entry to some harnesses: no row for the others.\n const recorded = this.entryHarnessRecord(parsed.kind, parsed.name, parsed.publisher);\n for (const harness of recorded ? harnesses.filter((h) => recorded.includes(h)) : harnesses) {\n let state: DeclaredState;\n if (!locked) {\n state = \"declared\";\n } else {\n const component = this.installTarget(parsed.kind);\n state =\n !component || isDeployed(component, parsed.name, harness, true) ? \"installed\" : \"drift\";\n }\n out.push({ ref, kind: parsed.kind, name: parsed.name, state, harness });\n }\n }\n return out;\n }\n\n /**\n * Build an aggregated workspace overview with publisher grouping and sync status.\n *\n * Combines deployed assets, lock file metadata, and live repository status\n * into a single structured result. Used by `skaile status`.\n *\n * @returns {@link OverviewResult} with entries grouped by publisher and per-repo sync status.\n */\n overview(): OverviewResult {\n const { repositories } = this.loadConfig();\n const lock = this.tryReadLock();\n const deployed = this.listDeployed();\n\n const repoStatuses = this.buildRepoStatuses(repositories);\n const lockByKindName = indexLockByKindName(lock);\n\n // Build entries with publisher + sync info. Entries are grouped by the\n // lock-entry publisher; assets without one fall under `\"unknown\"`.\n const entries: OverviewEntry[] = [];\n // The instance renderings (`default.md`, `books-eu.md`) are files of an agent, not assets:\n // an unlocked one is left out, so the overview does not list them under `unknown`.\n const instanceFiles = this.global\n ? new Set<string>()\n : instanceRenderedAgentNames(this.projectDir, this.driverTarget);\n for (const d of deployed) {\n const lockEntry = lockByKindName.get(`${d.kind}:${d.name}`);\n if (!lockEntry && d.kind === \"agent\" && instanceFiles.has(d.name)) continue;\n const publisher = lockEntry?.publisher || \"unknown\";\n const version = lockEntry?.version ?? \"\";\n const slug = lockEntry && !lockEntry.library ? sourceCacheKey(lockEntry.url) : \"\";\n // A library asset has no remote to be behind: it is as local as a path source.\n const syncStatus = lockEntry?.library\n ? \"local\"\n : slug\n ? computeSyncStatus(repoStatuses.get(slug))\n : \"unknown\";\n entries.push({ kind: d.kind, name: d.name, publisher, version, syncStatus });\n }\n\n return {\n byPublisher: groupAndSortByPublisher(entries),\n total: entries.length,\n repos: [...repoStatuses.values()],\n };\n }\n\n /** Collect live sync status for every configured repository, keyed by name. */\n private buildRepoStatuses(\n repositories: Record<string, SourceDeclaration>,\n ): Map<string, RepoStatusInfo> {\n const repoStatuses = new Map<string, RepoStatusInfo>();\n for (const [name, decl] of Object.entries(repositories)) {\n const status = checkRepoStatus(decl, name, this.reposDir);\n repoStatuses.set(name, {\n name,\n kind: status.kind,\n behind: status.behind,\n upToDate: status.upToDate,\n error: status.error,\n });\n }\n return repoStatuses;\n }\n\n /**\n * Requirement graph of the locked assets, for {@link tree} / {@link why} / removal pruning.\n *\n * The lock records no edges, so they are rebuilt from each locked asset's own\n * declaration (`requires`, manifest `dependencies`, a preset's items) — the same\n * source the install walk reads, via {@link info}. An asset that no source or\n * library can be found for has no known requirements. Nodes are lock keys, plus\n * each declared `preset:` that the lock does not carry (a preset is expanded at\n * install, never locked), keyed by its declared ref.\n *\n * @returns `requires` (node → the lock keys it requires), `roots` (nodes\n * `skaile.yaml` declares) and `findKey` (a ref → its lock key, version-agnostic).\n */\n private async lockedGraph(lock: LockFile): Promise<{\n requires: Map<string, string[]>;\n roots: string[];\n findKey: (ref: string) => string | undefined;\n }> {\n const locked = Object.keys(lock.assets).map((key) => ({ key, ...parseCanonicalLockKey(key) }));\n const findKey = (ref: string): string | undefined => {\n const id = memberIdentity(ref);\n if (!id) return undefined;\n return locked.find(\n (l) =>\n l.kind === id.kind &&\n l.name === id.name &&\n (!id.publisher || !l.publisher || l.publisher === id.publisher),\n )?.key;\n };\n const requires = new Map<string, string[]>();\n const link = async (node: string, ref: string): Promise<void> => {\n const out: string[] = [];\n try {\n const entry = await this.info(ref);\n // No source or library holds a locked asset any more: its deployed copy still\n // names what it requires.\n const deps = entry\n ? [...libraryEntryDepRefs(entry), ...(lock.assets[node]?.requires ?? [])]\n : lock.assets[node]\n ? await this.deployedRequirementsOf(parseCanonicalLockKey(node))\n : [];\n for (const dep of deps) {\n const key = findKey(dep);\n if (key && key !== node && !out.includes(key)) out.push(key);\n }\n } catch {\n // Unreadable source/library: its requirements stay unknown.\n }\n requires.set(node, out);\n };\n for (const l of locked) {\n await link(\n l.key,\n l.publisher ? `${l.kind}:@${l.publisher}/${l.name}` : `${l.kind}:${l.name}`,\n );\n }\n\n const roots: string[] = [];\n let declared: string[] = [];\n try {\n declared = this.loadConfig().dependencies;\n } catch {\n // No readable skaile.yaml: nothing is declared.\n }\n // An agent bound as `agents.<id>.ref` / `agent.definition` is declared too: what it requires\n // is needed, as for a `dependencies:` line.\n declared = [...declared, ...this.declaredAgentInstanceRefs()];\n for (const dep of declared) {\n const key = findKey(dep);\n if (key) {\n if (!roots.includes(key)) roots.push(key);\n } else if (memberIdentity(dep)?.kind === \"preset\" && !roots.includes(dep)) {\n await link(dep, dep);\n roots.push(dep);\n }\n }\n return { requires, roots, findKey };\n }\n\n /**\n * Build the resolved dependency tree from the lock file.\n *\n * Required assets nest under the asset that requires them (see {@link lockedGraph});\n * an asset required by several parents appears under each, and a dependency cycle\n * is cut where it would repeat.\n *\n * @returns Root {@link DependencyNode} with `ref === \"project\"` whose children\n * are the directly-declared assets, followed by locked assets nothing requires,\n * each with the assets it requires as children.\n * Returns a single node with `ref === \"(no lock file)\"` when no lock exists.\n */\n async tree(): Promise<DependencyNode> {\n const lock = this.tryReadLock();\n if (!lock) return { ref: \"(no lock file)\", children: [] };\n\n const { requires, roots } = await this.lockedGraph(lock);\n const required = new Set([...requires.values()].flat());\n const build = (ref: string, path: Set<string>): DependencyNode => ({\n ref,\n children: (requires.get(ref) ?? [])\n .filter((child) => !path.has(child))\n .map((child) => build(child, new Set([...path, child]))),\n });\n const shown = new Set<string>();\n const top: DependencyNode[] = [];\n const addTop = (ref: string): void => {\n const node = build(ref, new Set([ref]));\n top.push(node);\n const walk = (n: DependencyNode): void => {\n shown.add(n.ref);\n for (const c of n.children) walk(c);\n };\n walk(node);\n };\n const lockKeys = Object.keys(lock.assets);\n for (const ref of roots) addTop(ref);\n for (const ref of lockKeys) if (!roots.includes(ref) && !required.has(ref)) addTop(ref);\n // Assets that only require each other (a cycle nothing declared reaches).\n for (const ref of lockKeys) if (!shown.has(ref)) addTop(ref);\n return { ref: \"project\", children: top };\n }\n\n /**\n * Explain why an asset is installed by tracing its dependency chain.\n *\n * The chain is read from the requirement graph ({@link lockedGraph}): the asset,\n * then the asset that requires it, and so on up to a dependency `skaile.yaml`\n * declares (the shortest such path; cycles are not followed twice).\n *\n * @param ref - Asset ref in `kind:name` form.\n * @returns Chain of refs from the asset back to `\"direct (skaile.yaml)\"`; an asset\n * no declared dependency reaches ends in `\"not required by a declared dependency\"`\n * instead. `[]` when the asset is not in the lock file.\n */\n async why(ref: string): Promise<string[]> {\n const lock = this.tryReadLock();\n if (!lock) return [];\n // Exact lock-key hit, else a version-agnostic match on the `kind:@pub/name`\n // prefix — the lock can pin a content-sha pseudo-version, so a bare\n // `kind:@pub/name` ref would otherwise never find its locked entry. A ref\n // without a publisher (`kind:name`) matches on kind + name alone.\n const bare = (s: string) => (s.includes(\"#\") ? s.slice(0, s.indexOf(\"#\")) : s);\n const asked = parseRefTolerant(ref);\n const matchesIdentity = (k: string): boolean => {\n if (bare(k) === bare(ref)) return true;\n if (!asked || asked.publisher) return false;\n const locked = parseCanonicalLockKey(k);\n return locked.kind === asked.kind && locked.name === asked.name;\n };\n const key = lock.assets[ref] ? ref : Object.keys(lock.assets).find(matchesIdentity);\n if (!key) return asked?.kind === \"preset\" ? this.whyPreset(lock, asked) : []; // not in lock file\n\n const { requires, roots } = await this.lockedGraph(lock);\n if (roots.includes(key)) return [key, \"direct (skaile.yaml)\"];\n const requirers = new Map<string, string[]>();\n for (const [node, deps] of requires) {\n for (const dep of deps) requirers.set(dep, [...(requirers.get(dep) ?? []), node]);\n }\n // Breadth-first upward from the asset to the nearest declared requirer.\n const child = new Map<string, string>();\n const seen = new Set([key]);\n const queue = [key];\n for (let node = queue.shift(); node !== undefined; node = queue.shift()) {\n for (const parent of requirers.get(node) ?? []) {\n if (seen.has(parent)) continue;\n seen.add(parent);\n child.set(parent, node);\n if (roots.includes(parent)) {\n const chain: string[] = [];\n for (let c: string | undefined = parent; c !== undefined; c = child.get(c)) chain.push(c);\n return [...chain.reverse(), \"direct (skaile.yaml)\"];\n }\n queue.push(parent);\n }\n }\n return [key, \"not required by a declared dependency\"];\n }\n\n /**\n * The {@link AssetManager.why} chain of a preset. A preset is never a lock asset: its record\n * is the lock's `presets` slice. Declared in `skaile.yaml` it is `direct`; one only a declared\n * preset nests is traced through the presets that list it.\n *\n * @returns `[]` when the lock does not record the preset.\n */\n private async whyPreset(lock: LockFile, asked: AssetRef): Promise<string[]> {\n const wanted = memberIdentity(assetRefToStr(asked));\n const same = (ref: string): boolean => {\n const id = memberIdentity(ref);\n return (\n id !== null &&\n wanted !== null &&\n id.kind === \"preset\" &&\n id.name === wanted.name &&\n (!id.publisher || !wanted.publisher || id.publisher === wanted.publisher)\n );\n };\n const recorded = (lock.presets ?? []).find(same);\n if (!recorded) return [];\n\n let declared: string[] = [];\n try {\n declared = this.loadConfig().dependencies;\n } catch {\n // No readable skaile.yaml: nothing is declared.\n }\n const roots = declared.filter((d) => memberIdentity(d)?.kind === \"preset\");\n if (roots.some(same)) return [recorded, \"direct (skaile.yaml)\"];\n\n // Breadth-first down the declared presets to the one that nests the asked preset.\n const parent = new Map<string, string>();\n const seen = new Set<string>(roots);\n const queue = [...roots];\n for (let node = queue.shift(); node !== undefined; node = queue.shift()) {\n let items: string[] = [];\n try {\n const entry = await this.info(node);\n items = entry ? libraryEntryDepRefs(entry) : [];\n } catch {\n // Unreadable preset: its items stay unknown.\n }\n for (const item of items) {\n if (memberIdentity(item)?.kind !== \"preset\" || seen.has(item)) continue;\n seen.add(item);\n parent.set(item, node);\n if (same(item)) {\n const chain: string[] = [];\n for (let c: string | undefined = item; c !== undefined; c = parent.get(c)) chain.push(c);\n return [...chain, \"direct (skaile.yaml)\"];\n }\n queue.push(item);\n }\n }\n return [recorded, \"not required by a declared dependency\"];\n }\n\n /**\n * List installed assets that have a newer upstream available.\n *\n * Two kinds of staleness are reported:\n * - **Source assets** — only remote repositories (not local paths) are checked;\n * `behind` counts the commits the clone is missing from the remote plus the\n * commits the clone moved past the locked commit (`source sync` after `add`).\n * - **Library assets** — a library-origin lock entry whose library files on disk\n * (not the index, which lags until `skaile library index`) hold a newer version\n * than the locked one (`latestVersion`, `library` set), or the same version with\n * different bytes (`contentChanged`). `behind` is 0.\n * - **Project state** — every {@link AssetManager.projectState} gap (an unregistered or\n * renamed library, a missing deployed copy, a declared dependency or a deployed asset's\n * `requires` with no lock entry, a lock that contradicts a `skaile.yaml` pin) as a\n * `problem` row, so `outdated` lists what `check`, `doctor` and `install --locked` fail\n * on. An asset that also has a version row is listed once, with that row.\n *\n * @returns Array of {@link OutdatedEntry} objects.\n */\n async outdated(): Promise<OutdatedEntry[]> {\n const { repositories } = this.loadConfig();\n const lock = this.tryReadLock();\n if (!lock) return this.addLockGapRows([]);\n\n const result: OutdatedEntry[] = [];\n /** `from..to` → commit count, shared by every lock entry of a source. */\n const commitCounts = new Map<string, number>();\n for (const src of lock.sources) {\n const slug = sourceCacheKey(src.url);\n const decl = repositories[slug];\n // Every `sources:` entry carries a `path:` into the clone cache; a\n // user-owned local path reports `behind: 0` from checkRepoStatus.\n if (!decl) continue;\n const status = checkRepoStatus(decl, slug, this.reposDir);\n // A user-owned local path (or a clone that was never made) has no commit to compare.\n if (status.kind !== \"remote\" || !status.localHead) continue;\n const clone = decl.path ?? join(this.reposDir, slug);\n for (const [ref, entry] of Object.entries(lock.assets)) {\n if (entry.source?.url !== src.url) continue;\n const { publisher, kind, name, version } = parseCanonicalLockKey(ref);\n if (!kind || !name) continue;\n // Behind the remote (`status.behind`) AND/OR the clone itself moved past the\n // locked commit (`source sync` pulled it): either way the deployed copy is stale, but\n // only when a commit in between touched the asset's own files.\n const lockedCommit = entry.source.commit || src.commit;\n const moved =\n lockedCommit && !/^0+$/.test(lockedCommit) && lockedCommit !== status.localHead\n ? commitsBetween(clone, lockedCommit, status.localHead, commitCounts)\n : 0;\n let behind = status.behind + moved;\n if (behind > 0) {\n const touching = commitsTouching(\n clone,\n COMMIT_ID.test(lockedCommit) && !/^0+$/.test(lockedCommit)\n ? lockedCommit\n : status.localHead,\n status.behind > 0 && status.remoteHead ? status.remoteHead : status.localHead,\n lockedAssetDir(kind, entry.files),\n commitCounts,\n );\n if (touching !== null) behind = touching;\n }\n if (behind <= 0) continue;\n result.push({\n kind,\n name,\n publisher: publisher ?? sourceShortName(src.url),\n currentVersion: version ?? \"\",\n behind,\n });\n }\n }\n\n // Direct `asset install` entries (`library.installed`) were placed in the project\n // by hand; there is no library or deploy-dir copy to compare against.\n const libraryAssets = Object.entries(lock.assets).filter(\n ([, e]) => e.library && !e.library.installed,\n );\n if (libraryAssets.length > 0) {\n const snap = await this.loadLibraryIndex();\n /** Per library root: `kind:name` → sha256 of the files on disk. */\n const diskHashes = new Map<string, Map<string, string>>();\n /** Per library root + default publisher: the on-disk scan `add`/`update` resolve from. */\n const scans = new Map<string, CatalogEntry[]>();\n for (const [ref, entry] of libraryAssets) {\n const origin = entry.library!;\n const { publisher, kind, name } = parseCanonicalLockKey(ref);\n if (!publisher || !kind || !name) continue;\n // A library that is gone is a `projectState` gap, listed as a problem row below.\n const lookup = this.lockedLibrary(origin, snap, { kind, publisher, name });\n if (lookup.state !== \"ok\") continue;\n const libPath = lookup.path;\n // The library's files on disk are the truth (what `add`/`update` deploy), not\n // the index, which lags until the next `skaile library index`.\n const scanKey = `${libPath}\\0${publisher}`;\n let scanned = scans.get(scanKey);\n if (!scanned) {\n scanned = await scanDirectory(libPath, publisher, { knownKinds: this.knownKinds });\n scans.set(scanKey, scanned);\n }\n const found = scanned.find((x) => x.kind === kind && x.name === name);\n if (!found) continue; // gone from the library: a `projectState` gap\n const diskVersion = libraryAssetVersion(\n snap,\n lookup.name,\n { kind, publisher, name },\n found.version,\n );\n // A newer commit of a version-less source asset is not a version: the hash check below.\n if (\n diskVersion &&\n !isPseudoVersion(diskVersion) &&\n semverGt(coerceVersion(diskVersion), coerceVersion(origin.version))\n ) {\n result.push({\n kind,\n name,\n publisher,\n currentVersion: origin.version,\n behind: 0,\n latestVersion: diskVersion,\n library: lookup.name,\n });\n continue;\n }\n // Same (or older) version, different bytes: an in-place edit with no bump.\n if (origin.sha256) {\n const onDisk = libraryDiskHashes(libPath, diskHashes, this.registry).get(\n `${kind}:${name}`,\n );\n if (onDisk !== undefined && onDisk !== origin.sha256) {\n result.push({\n kind,\n name,\n publisher,\n currentVersion: origin.version,\n behind: 0,\n library: lookup.name,\n contentChanged: true,\n });\n }\n }\n }\n await this.addLibraryMoves(libraryAssets, result);\n }\n\n await this.addRekeyRows(lock, result);\n return this.addLockGapRows(result);\n }\n\n /**\n * List a source asset locked under a `0.0.0-sha.<commit>` key whose file now declares a\n * version: the next `install` or `update` re-keys it (`replaced 0.0.0-sha.7de3555 → 0.2.0`),\n * so `outdated` lists it as `re-key (…)` instead of saying everything is up to date (p914).\n * An asset already listed (behind its remote) gets the target on that row.\n */\n private async addRekeyRows(lock: LockFile, rows: OutdatedEntry[]): Promise<void> {\n const sha = Object.entries(lock.assets).filter(\n ([key, e]) => e.source && parseCanonicalLockKey(key).version?.startsWith(\"0.0.0-sha.\"),\n );\n if (sha.length === 0) return;\n const { repositories } = this.loadConfig();\n let index: Awaited<ReturnType<typeof buildProvenanceIndex>>;\n try {\n index = await buildProvenanceIndex(this.buildClones(repositories), {\n projectDir: this.projectDir,\n knownKinds: this.knownKinds,\n onSourceError: () => undefined,\n });\n } catch {\n return;\n }\n for (const [key, entry] of sha) {\n const { publisher, kind, name, version } = parseCanonicalLockKey(key);\n if (!publisher || !kind || !name || !version || !entry.source) continue;\n const url = normalizeRepoUrl(entry.source.url);\n const now = (index.get(`${publisher}/${kind}:${name}`) ?? []).find(\n (c) => normalizeRepoUrl(c.sourceUrl) === url,\n );\n if (!now || now.version === version || now.version.startsWith(\"0.0.0-sha.\")) continue;\n const row = rows.find(\n (r) => r.kind === kind && r.name === name && r.publisher.replace(/^@/, \"\") === publisher,\n );\n if (row) {\n row.rekeyTo = now.version;\n continue;\n }\n rows.push({\n kind,\n name,\n publisher,\n currentVersion: version,\n behind: 0,\n rekeyTo: now.version,\n });\n }\n }\n\n /**\n * List a locked library asset that `update` would move to another library (a default-library\n * switch, a library that now holds a newer version) as `library → movesTo`, so `outdated`\n * does not say \"up to date\" and `update` then re-locks it announced only after the fact.\n * The resolution is the one `update` runs ({@link lockedPreference}); an asset already listed\n * with a version row gets the target library on that row.\n */\n private async addLibraryMoves(\n libraryAssets: Array<[string, LockEntry]>,\n rows: OutdatedEntry[],\n ): Promise<void> {\n const refs: string[] = [];\n const lockedIn = new Map<string, { name: string; key: string }>();\n for (const [key, entry] of libraryAssets) {\n const { publisher, kind, name } = parseCanonicalLockKey(key);\n if (!publisher || !kind || !name || !entry.library) continue;\n const ref = `${kind}:@${publisher}/${name}`;\n refs.push(ref);\n lockedIn.set(ref, { name: entry.library.name, key });\n }\n if (refs.length === 0) return;\n let res: LibraryResolution;\n try {\n res = await this.resolveLibraryEntries(refs, {\n quiet: true,\n preferLocked: await this.lockedPreference(),\n });\n } catch {\n return;\n }\n for (const e of res.entries) {\n const to = res.libraryOf.get(e);\n const publisher = (e.publisher ?? \"\").replace(/^@/, \"\");\n const ref = `${e.kind}:@${publisher}/${e.name}`;\n const from = lockedIn.get(ref);\n if (!to || !from || from.name === to) continue;\n const row = rows.find(\n (r) =>\n r.kind === e.kind && r.name === e.name && r.publisher.replace(/^@/, \"\") === publisher,\n );\n if (row) {\n // The row names the library the lock records on the left of `origin changes`, not the\n // renamed library it resolved to (`rl3 → rl3`, p890).\n row.library = from.name;\n row.movesTo = to;\n continue;\n }\n rows.push({\n kind: e.kind,\n name: e.name,\n publisher,\n currentVersion: parseCanonicalLockKey(from.key).version ?? \"\",\n behind: 0,\n library: from.name,\n movesTo: to,\n });\n }\n }\n\n /**\n * Add one `problem` row per {@link AssetManager.projectState} gap whose asset is not\n * listed yet, so `outdated` lists the same assets `check`, `doctor` and `install --locked`\n * fail on. An asset that is behind its source and also broken is listed once, with its\n * version row.\n */\n private async addLockGapRows(rows: OutdatedEntry[]): Promise<OutdatedEntry[]> {\n const listed = new Set(rows.map((r) => `${r.kind}:${r.name}`));\n for (const gap of (await this.projectState()).gaps) {\n const parsed = parseRefTolerant(gap.ref);\n const id = parsed ? `${parsed.kind}:${parsed.name}` : gap.ref;\n if (listed.has(id)) continue;\n listed.add(id);\n rows.push({\n kind: parsed?.kind ?? \"\",\n name: parsed?.name ?? gap.ref,\n publisher: parsed?.publisher ?? \"\",\n currentVersion: \"\",\n behind: 0,\n problem: gap.reason,\n ...(gap.manualFix ? { manualFix: true as const } : {}),\n });\n }\n return rows;\n }\n\n /**\n * The deploy entry of a library-origin asset from the library its lock entry records,\n * at the locked version when that library still holds it (else its newest). Other\n * libraries holding the same ref are not consulted: the lock already chose.\n *\n * @param want - Kind, name and optional publisher of the asset.\n * @returns `null` when the lock has no library-origin entry for it, or the recorded\n * library is gone or no longer holds it (callers fall back to a general lookup).\n */\n private async lockedLibraryEntry(want: AssetRef): Promise<DeployableEntry | null> {\n const snap = await this.loadLibraryIndex();\n for (const [key, e] of Object.entries(this.tryReadLock()?.assets ?? {})) {\n const id = parseCanonicalLockKey(key);\n if (!e.library || e.library.installed || !id.publisher) continue;\n if (id.kind !== want.kind || id.name !== want.name) continue;\n if (want.publisher && id.publisher !== want.publisher) continue;\n const canonical = `${id.kind}:@${id.publisher}/${id.name}`;\n const refs = e.library.version\n ? [`${canonical}#${e.library.version}`, canonical]\n : [canonical];\n // The library may be registered here under another name than the lock's.\n const lookup = this.lockedLibrary(e.library, snap, {\n kind: id.kind,\n publisher: id.publisher,\n name: id.name,\n });\n const library = lookup.state === \"ok\" ? lookup.name : e.library.name;\n for (const r of refs) {\n const hit = (await this.resolveLibraryEntries([r], { library })).entries[0];\n if (hit) return hit;\n }\n }\n return null;\n }\n\n /**\n * The deploy entry of a source- or store-origin asset, carrying the file set its lock entry\n * lists (so a missing or edited helper shows in `diff`, not only the manifest). A source asset\n * reads from its clone; a store asset from the bytes `add`/`install` staged in the project\n * store cache. `null` when the lock has no such entry or its bytes are not on disk.\n *\n * @param want - Kind, name and optional publisher of the asset.\n */\n private lockedSourceEntry(want: AssetRef): DeployableEntry | null {\n const { repositories } = this.loadConfig();\n for (const [key, e] of Object.entries(this.tryReadLock()?.assets ?? {})) {\n const id = parseCanonicalLockKey(key);\n if (!e.source || id.kind !== want.kind || id.name !== want.name) continue;\n if (want.publisher && id.publisher !== want.publisher) continue;\n const c = this.lockedCandidate(key, e, repositories);\n if (!c) continue;\n if (this.candidateHasLocalBytes(c, repositories)) {\n return this.candidateToCatalogEntry(c, repositories);\n }\n const staged = join(\n this.storeCacheDir,\n c.publisher,\n c.kind,\n c.name,\n c.version,\n this.stagedManifestRel(c),\n );\n if (existsSync(staged)) return this.stagedCandidateToEntry(c, staged);\n }\n return null;\n }\n\n /**\n * Produce a unified diff from the deployed asset to its catalog source: `-` lines\n * are in the deployed copy only (local edits `update` would overwrite), `+` lines\n * are in the source only (what `update` would add).\n *\n * Useful for detecting manual edits to deployed files or seeing what an upstream\n * change would bring in; also for verifying that a patch\n * was applied correctly.\n *\n * @param ref - Asset ref in `kind:name` form.\n * @returns A {@link DiffResult}: `not-found` (unknown ref), `not-deployed`,\n * `identical`, or `differs` with the unified diff.\n * @throws When `diff(1)` itself fails (exit status other than 0/1).\n */\n async diff(ref: string): Promise<DiffResult> {\n const parsed = parseRefTolerant(ref);\n if (!parsed) return { status: \"not-found\" };\n // An `mcp-server` has no copy under the harness dir: its footprint is the payload under\n // `.skaile/assets/mcp-server/<name>/` and the managed entry of the coding agent's MCP config.\n if (parsed.kind === \"mcp-server\") {\n const wantPub = parsed.publisher?.replace(/^@/, \"\");\n const lockedHere = Object.keys(this.tryReadLock()?.assets ?? {})\n .map(parseCanonicalLockKey)\n .filter((id) => id.kind === \"mcp-server\" && id.name === parsed.name);\n if (lockedHere.length > 0) {\n if (wantPub && !lockedHere.some((id) => id.publisher === wantPub)) {\n return { status: \"not-deployed\" };\n }\n const row = (await this.mcpDriftRows()).find(\n (r) => unscopedName(r.drift.id) === unscopedName(parsed.name),\n );\n return row ? { status: \"differs\", diff: mcpDriftDiff(row.drift) } : { status: \"identical\" };\n }\n }\n const entry =\n (await this.lockedLibraryEntry(parsed)) ??\n this.lockedSourceEntry(parsed) ??\n (await this.info(ref));\n if (!entry || !existsSync(entry.source)) return { status: \"not-found\" };\n\n // The deployed folder `<base>/<name>` belongs to the publisher the lock names for that kind\n // and name: another publisher's ref is not deployed, whatever sits in that folder.\n const wantPublisher = parsed.publisher?.replace(/^@/, \"\");\n if (wantPublisher) {\n const lockedHere = Object.keys(this.tryReadLock()?.assets ?? {})\n .map(parseCanonicalLockKey)\n .filter((id) => id.kind === parsed.kind && id.name === parsed.name);\n if (lockedHere.length > 0 && !lockedHere.some((id) => id.publisher === wantPublisher)) {\n return { status: \"not-deployed\" };\n }\n }\n const component = this.installTarget(parsed.kind);\n // A preset has no deployed copy: the lock's `presets` records it and its items are the\n // assets to compare.\n if (parsed.kind === \"preset\" && this.presetRecorded(parsed)) return { status: \"no-files\" };\n if (!component) return { status: \"not-deployed\" };\n // An agent is rendered into the harness's native file (`<name>.md`, `<name>.toml`, `<name>/`),\n // never copied to `<base>/<name>`: compare the source rendered the way the deploy renders it.\n if (component === \"agent\") {\n const opts = this.deployOptsFor(this.driverTarget);\n // The asset's own rendering, then the rendering of every agent instance of `skaile.yaml`\n // that binds to it (`.claude/agents/<instance id>.md`): a hand edit of an instance file\n // shows like an edit of the asset-named one (p925).\n const parts = [diffDeployedAgent(entry, opts)];\n for (const inst of this.instancesBoundTo(parsed)) {\n parts.push(diffDeployedAgent(entry, opts, inst));\n }\n if (parts.every((d) => d === null)) return { status: \"not-deployed\" };\n const diff = parts.filter((d): d is string => d !== null).join(\"\");\n return diff === \"\" ? { status: \"identical\" } : { status: \"differs\", diff };\n }\n const deployedPath = join(\n deployedBase(component, this.driverTarget, this.global, this.projectDir),\n parsed.name,\n );\n if (!existsSync(deployedPath)) return { status: \"not-deployed\" };\n\n // An entry with a file set (a library asset under its manifest `root:`) is\n // compared file by file — the set a deploy writes. A deleted or edited helper\n // shows; the manifest alone would answer \"identical\".\n const pairs = entry.files\n ? entry.files.map((rel) => [join(deployedPath, rel), join(dirname(entry.source), rel)])\n : [[deployedPath, entry.source]];\n const diffs: string[] = [];\n for (const [from, to] of pairs) {\n const r = spawnSync(\"diff\", [entry.files ? \"-uN\" : \"-ruN\", from!, to!], {\n encoding: \"utf8\",\n });\n if (r.status === 1) diffs.push(r.stdout);\n else if (r.status !== 0) {\n throw new Error(\n `diff failed for ${ref}: ${r.stderr || r.error?.message || \"unknown error\"}`,\n );\n }\n }\n return diffs.length > 0 ? { status: \"differs\", diff: diffs.join(\"\") } : { status: \"identical\" };\n }\n\n /**\n * The agent instances of `skaile.yaml` whose `ref` names `want` (an `agent:` ref, matched on\n * name and, when both name one, publisher) and bind to an agent definition directory.\n */\n private instancesBoundTo(\n want: AssetRef,\n ): Array<{ id: string; srcDir: string; config: AgentInstanceConfig }> {\n if (this.global) return [];\n let instances: Record<string, AgentInstanceConfig>;\n try {\n instances = effectiveAgentInstances(resolveSkWorkspaceConfig(this.projectDir));\n } catch {\n return [];\n }\n const out: Array<{ id: string; srcDir: string; config: AgentInstanceConfig }> = [];\n for (const [id, config] of Object.entries(instances)) {\n const ref = parseRefTolerant(config.ref);\n if (!ref || ref.kind !== \"agent\" || ref.name !== want.name) continue;\n const refPublisher = ref.publisher?.replace(/^@/, \"\");\n const wantPublisher = want.publisher?.replace(/^@/, \"\");\n if (refPublisher && wantPublisher && refPublisher !== wantPublisher) continue;\n try {\n const srcDir = resolveAgentDefinitionDir(this.projectDir, config.ref);\n if (srcDir !== undefined) out.push({ id, srcDir, config });\n } catch {\n // An instance that binds to no agent has nothing to render.\n }\n }\n return out;\n }\n\n // ── Lock ───────────────────────────────────────────────────────────────\n\n /**\n * Resolve all declared dependencies and write (or overwrite) `skaile.lock.yaml`.\n *\n * Performs repository sync and full dependency resolution without deploying assets.\n * Use this to regenerate the lock file after manually editing `skaile.yaml`.\n *\n * @returns The written {@link LockFile} data.\n */\n async lock(): Promise<LockFile> {\n const { repositories, sources, stores, dependencies, overrides } = this.loadConfig();\n\n this.ensureSourceClonesQuiet(repositories, sources);\n\n const provenanceIndex = await buildProvenanceIndex(this.buildClones(repositories), {\n projectDir: this.projectDir,\n knownKinds: this.knownKinds,\n onSourceError: this.reportSourceError,\n });\n const { resolved, overridesApplied, lib } = await this.resolveLibraryFirst(dependencies, {\n provenanceIndex,\n overrides,\n stores,\n declaredRefs: dependencies,\n });\n // Same refusal as `add`/`install`/`update`: a lock must not name a commit no remote has.\n this.assertSourceCommitsPublished(resolved, repositories);\n const libraryLock = await this.libraryLockEntries(lib);\n const lockData = buildLockFile(resolved, overridesApplied, libraryLock);\n // `lock` deploys nothing: it keeps what the last deploy recorded for an agent's rendering.\n const prior = this.tryReadLock();\n for (const [key, entry] of Object.entries(lockData.assets)) {\n const rendered = prior?.assets[key]?.rendered;\n if (rendered) entry.rendered = rendered;\n }\n writeLock(this.lockPath, lockData);\n return lockData;\n }\n\n // ── Patch workflow ─────────────────────────────────────────────────────\n\n /**\n * Extract a deployed asset into a patch working directory for editing.\n *\n * Copies the deployed asset to `.skaile/patches/<kind>-<name>/` so changes\n * can be made there and then committed as a patch file via `patchCommit`.\n *\n * @param ref - Asset ref in `kind:name` form.\n * @returns Absolute path to the patch working directory.\n * @throws When the asset cannot be found in the catalog.\n */\n async patch(ref: string): Promise<string> {\n const entry = await this.info(ref);\n if (!entry) throw new Error(`Asset not found: ${ref}`);\n return extractForPatch(entry, this.patchDir);\n }\n\n /**\n * Generate a `.patch` file from changes made in the patch working directory.\n *\n * Diffs the patch working directory against the original catalog source and\n * writes the result to `.skaile/patches/<kind>-<name>.patch`.\n *\n * @param ref - Asset ref in `kind:name` form.\n * @returns Absolute path to the generated `.patch` file.\n * @throws When the patch working directory does not exist or no differences are found.\n */\n async patchCommit(ref: string): Promise<string> {\n const parsed = parseAssetRef(ref);\n const entry = await this.info(ref);\n if (!entry) throw new Error(`Asset not found: ${ref}`);\n\n const patchedDir = join(this.patchDir, `${parsed.kind}-${parsed.name}`);\n if (!existsSync(patchedDir)) {\n throw new Error(`No patch working dir found. Run \\`skaile patch ${ref}\\` first.`);\n }\n\n const originalDir = dirname(entry.source);\n const content = generatePatch(originalDir, patchedDir);\n if (!content) throw new Error(\"No differences found.\");\n\n const patchFile = join(this.patchDir, `${parsed.kind}-${parsed.name}.patch`);\n savePatch(patchFile, content);\n return patchFile;\n }\n\n /**\n * Apply the committed patch file to the repository clone and open a contribution branch.\n *\n * Applies `.skaile/patches/<kind>-<name>.patch` to the repository clone, creates a\n * `patch/<kind>-<name>` branch, and stages a commit — ready to push via `contribPush`.\n *\n * @param ref - Asset ref in `kind:name` form.\n * @throws When the asset is not found, has no repository, or the patch file is missing.\n */\n async patchSubmit(ref: string): Promise<void> {\n const parsed = parseAssetRef(ref);\n const entry = await this.info(ref);\n if (!entry?.publisher) throw new Error(`Asset not found or no publisher: ${ref}`);\n\n const { repositories } = this.loadConfig();\n const decl = repositories[entry.publisher];\n if (!decl?.url) throw new Error(\"Can only submit patches for remote sources.\");\n\n // Resolve through the same helper search/info use so patch + read agree on the clone dir.\n const repoDir = this.resolveRepoDir(decl, entry.publisher);\n if (!repoDir) throw new Error(`Repository clone not found for ${entry.publisher}.`);\n const branchName = `patch/${parsed.kind}-${parsed.name}`;\n\n // Apply patch to repo clone\n const patchFile = join(this.patchDir, `${parsed.kind}-${parsed.name}.patch`);\n if (!existsSync(patchFile)) throw new Error(\"No patch file. Run `skaile patch-commit` first.\");\n\n coreApplyPatch(repoDir, patchFile);\n commitChanges(repoDir, `fix: improve ${parsed.kind} ${parsed.name}`, branchName);\n }\n\n /**\n * Delete the patch working directory and patch file for an asset.\n *\n * @param ref - Asset ref in `kind:name` form.\n */\n patchRemove(ref: string): void {\n const parsed = parseAssetRef(ref);\n const patchFile = join(this.patchDir, `${parsed.kind}-${parsed.name}.patch`);\n const patchedDir = join(this.patchDir, `${parsed.kind}-${parsed.name}`);\n try {\n rmSync(patchFile);\n } catch {}\n try {\n rmSync(patchedDir, { recursive: true });\n } catch {}\n }\n\n // ── Doctor ─────────────────────────────────────────────────────────────\n\n /**\n * Scan deployed assets for unsatisfied transitive dependencies.\n *\n * For each deployed asset, checks that all entries in its `requires` list are\n * also deployed. Returns a list of issues with a flag indicating whether the\n * missing dependency can be resolved from a configured repository or library.\n *\n * A deployed asset is looked up by its publisher-qualified identity taken from\n * the lock key (`kind:@pub/name`), so library and source assets resolve alike.\n * A lock-managed asset that no source or library can be found for is reported\n * as an issue with `unresolved: true` (its `requires` cannot be verified);\n * unmanaged deployed files carry no declared origin and are skipped.\n *\n * @returns Array of {@link DepIssue} objects. An empty array means the workspace is healthy.\n */\n async doctor(): Promise<DepIssue[]> {\n const { repositories, dependencies } = this.loadConfig();\n const deployed = this.listDeployed();\n const issues: DepIssue[] = [];\n\n const lock = this.tryReadLock();\n const lockedPublisher: Record<string, string> = {};\n for (const key of Object.keys(lock?.assets ?? {})) {\n const { kind, name, publisher } = parseCanonicalLockKey(key);\n if (kind && name && publisher) lockedPublisher[`${kind}:${name}`] = publisher;\n }\n\n for (const entry of deployed) {\n const publisher = lockedPublisher[`${entry.kind}:${entry.name}`];\n const full = await this.info(\n publisher ? `${entry.kind}:@${publisher}/${entry.name}` : `${entry.kind}:${entry.name}`,\n );\n // A source- or store-origin entry restores from the commit its lock entry pins\n // (`install --locked`), so no source has to hold it today: its requirements are those of\n // its deployed copy.\n const restorable =\n !full &&\n publisher !== undefined &&\n Object.entries(lock?.assets ?? {}).some(([key, e]) => {\n const id = parseCanonicalLockKey(key);\n return (\n e.source !== undefined &&\n id.kind === entry.kind &&\n id.name === entry.name &&\n id.publisher === publisher\n );\n });\n if (!full && !restorable) {\n if (publisher) {\n const canonical = `${entry.kind}:@${publisher}/${entry.name}`;\n const fix = (await this.unresolvedFixes([canonical])).get(canonical);\n issues.push({\n assetKind: entry.kind,\n assetName: entry.name,\n depKind: entry.kind,\n depName: entry.name,\n inRepos: false,\n unresolved: true,\n ...(fix ? { fix } : {}),\n });\n }\n continue;\n }\n // A flow's node skills and a bundle's `dependencies` are requirements too: `add` deploys\n // them, so one removed with `--force` is a gap (p857), not only one the lock still lists.\n const declaredRequires = full\n ? [...full.requires, ...(full.dependencies ?? []).filter(Boolean).map(parseDep)]\n : (await this.deployedRequirementsOf({ ...entry, publisher })).map(parseDep);\n const gaps: Array<{ issue: DepIssue; ref: string }> = [];\n // One requirement per `publisher/kind:name`: the SKILL.md form (bare) and the\n // manifest `dependencies:` form (qualified) of the same asset are one gap, and a\n // bare one is the requiring asset's own publisher.\n const requirements = dedupeRequirements(declaredRequires, publisher).map((r) =>\n r.publisher || !publisher ? r : { ...r, publisher },\n );\n for (const req of requirements) {\n // A cross-publisher `requires` carries its publisher; deploy dirs and\n // source catalogs key on the bare name.\n const dep = memberIdentity(depToStr(req));\n if (!dep) continue;\n const depComponent = this.installTarget(dep.kind);\n if (\n depComponent &&\n !isDeployed(depComponent, dep.name, this.driverTarget, this.global, this.projectDir)\n ) {\n const inRepos =\n (await resolveAsset({ kind: dep.kind, name: dep.name }, repositories, this.reposDir, {\n knownKinds: this.knownKinds,\n })) !== null;\n const issue: DepIssue = {\n assetKind: entry.kind,\n assetName: entry.name,\n depKind: req.kind,\n depName: req.publisher ? `@${req.publisher}/${req.name}` : req.name,\n inRepos,\n };\n issues.push(issue);\n if (!inRepos) gaps.push({ issue, ref: depToStr(req) });\n }\n }\n // A dep no source offers may still be a library asset: one library scan per asset.\n const inLibrary = await this.resolveLibraryEntries(\n gaps.map((g) => g.ref),\n { quiet: true },\n );\n for (const g of gaps) g.issue.inRepos = inLibrary.resolved.has(g.ref);\n }\n // A declared preset's items are declared dependencies: one the lock does not\n // cover never resolved, so the project is missing it.\n for (const [presetRef, gaps] of await this.declaredPresetGaps(dependencies, lock)) {\n const preset = parseRefTolerant(presetRef);\n if (!preset) continue;\n for (const g of gaps) {\n const item = parseRefTolerant(g.ref);\n if (!item) continue;\n issues.push({\n assetKind: \"preset\",\n assetName: preset.name,\n depKind: item.kind,\n depName: item.publisher ? `@${item.publisher}/${item.name}` : item.name,\n inRepos: g.resolvable,\n });\n }\n }\n return issues;\n }\n\n /**\n * The project's state as one verdict: every way the project differs from what it\n * declares and locks. `skaile check`, `skaile doctor`, `skaile outdated`, `skaile diff`\n * and `skaile install --locked` all take their verdict and exit code from this one list,\n * so one situation reads the same in all five.\n *\n * - `declared` — a `skaile.yaml` dependency with no lock entry (library or source gone,\n * unresolvable ref, never installed);\n * - `invalid` — a `dependencies:` entry that is not a parseable ref;\n * - `drift` — a locked asset whose deployed files are missing;\n * - `pin` — a declared `#pin` that no lock entry for that asset satisfies;\n * - `requires` — a deployed asset's `requires` (or a declared preset's item) that is not\n * deployed (so not locked either);\n * - `unresolved` — a lock-managed deployed asset that no source or library holds any more;\n * - `library` — a locked library asset whose library is not registered (renamed or\n * removed) or no longer holds it, while another library holds it now;\n * - `incomplete` — a deployed library asset that lacks files of its library entry;\n * - `content` — a locked library asset whose files in the library changed since the lock\n * (or whose lock hash predates the one shared asset hash); `skaile install` re-locks it;\n * - `agent` — an `agents.<id>.ref` (or `agent.definition`) that binds to no agent.\n *\n * An asset appears once for what the lock says about it (`unresolved`, else `library`,\n * else `drift`). A declared ref no registered library or source holds names\n * `skaile library init` / `skaile remove`, never `skaile install`: `install` has nothing\n * to resolve it from.\n *\n * Project mode only: a global manager (`global: true`) has no gaps. A project without\n * `skaile.yaml` has no declared set, so only the lock and deployed-asset gaps can appear.\n *\n * @returns The {@link ProjectState}; `gaps` is empty when the project is as declared and locked.\n */\n async projectState(): Promise<ProjectState> {\n if (this.global) return { gaps: [], requirements: [] };\n const lock = this.tryReadLock();\n const lockedIds = Object.keys(lock?.assets ?? {}).map(parseCanonicalLockKey);\n const requirements = await this.doctor();\n let gaps: LockGap[] = [];\n /** `kind:@publisher/name` of a deployed asset when the lock knows its publisher, else `kind:name`. */\n const lockIdentity = (kind: string, name: string): string => {\n const publisher = lockedIds.find((id) => id.kind === kind && id.name === name)?.publisher;\n return publisher ? `${kind}:@${publisher}/${name}` : `${kind}:${name}`;\n };\n\n for (const i of requirements) {\n if (i.unresolved) {\n // The lock knows the publisher; the deployed copy alone does not.\n const publisher = lockedIds.find(\n (id) => id.kind === i.assetKind && id.name === i.assetName,\n )?.publisher;\n const ref = publisher\n ? `${i.assetKind}:@${publisher}/${i.assetName}`\n : `${i.assetKind}:${i.assetName}`;\n const reason = `is locked but no source or library provides it any more — its requirements cannot be checked${i.fix ? ` (${i.fix})` : \"\"}`;\n gaps.push({\n type: \"unresolved\",\n ref,\n reason,\n message: `${ref} ${reason}`,\n ...(i.fix ? { manualFix: true as const } : {}),\n });\n continue;\n }\n const asset = lockIdentity(i.assetKind, i.assetName);\n const dep = `${i.depKind}:${i.depName}`;\n const depId = /^@([^/]+)\\/(.+)$/.exec(i.depName);\n const lockedOnly = lockedIds.some(\n (id) =>\n id.kind === i.depKind &&\n id.name === (depId ? depId[2] : i.depName) &&\n (!depId || id.publisher === depId[1]),\n );\n if (lockedOnly) {\n // Locked, only its folder is gone: `install --locked` restores it from the lock.\n gaps.push({\n type: \"requires\",\n ref: dep,\n asset,\n reason: `is required by ${asset} but locked and not deployed (run skaile install --locked)`,\n message: `${asset} requires ${dep} (run skaile install --locked)`,\n });\n } else if (i.inRepos) {\n gaps.push({\n type: \"requires\",\n ref: dep,\n asset,\n reason: `is required by ${asset} but neither deployed nor locked (run skaile install)`,\n message: `${asset} requires ${dep} (run skaile install)`,\n });\n } else {\n // Nothing holds it: `install` cannot fix it, the user registers a library or drops the requirer.\n const fix = requirementNoHolderFix(asset);\n gaps.push({\n type: \"requires\",\n ref: dep,\n asset,\n reason: `is required by ${asset} but neither deployed nor locked (not found — ${fix})`,\n message: `${asset} requires ${dep} (not found — ${fix})`,\n manualFix: true,\n });\n }\n }\n\n // What the lock says about an asset is reported once, most specific first.\n const named = new Set(\n gaps.filter((g) => g.type === \"unresolved\").map((g) => gapIdentity(g.ref)),\n );\n for (const gap of await this.libraryOriginGaps(named)) {\n gaps.push(gap);\n named.add(gapIdentity(gap.ref));\n }\n // What every registered source publishes today, walked once: the source gaps below and the\n // unreadable-source lines at the end read it.\n const skipped: Array<{ url: string; why: string }> = [];\n const sourceIndex = await buildProvenanceIndex(\n this.buildClones(this.loadConfig().repositories),\n {\n projectDir: this.projectDir,\n knownKinds: this.knownKinds,\n onSourceError: (clone, err) =>\n skipped.push({\n url: clone.sourceUrl,\n why: err instanceof Error ? err.message : String(err),\n }),\n },\n );\n for (const gap of await this.sourceOriginGaps(named, sourceIndex)) {\n gaps.push(gap);\n named.add(gapIdentity(gap.ref));\n }\n // A requirement the lock ties to a library that cannot supply it is that library's gap, said\n // once: `install` cannot restore it, whatever the requirement check says about its source.\n const libraryHeld = (dep: string): boolean => {\n const want = parseRefTolerant(dep);\n return want !== null && gaps.some((g) => g.type === \"library\" && sameAsset(g.ref, want));\n };\n gaps = gaps.filter((g) => !(g.type === \"requires\" && libraryHeld(g.ref)));\n for (const gap of this.undeployedLockGaps(lock, named)) {\n gaps.push(gap);\n named.add(gapIdentity(gap.ref));\n }\n // A deployed file edited by hand, or one the asset does not ship, differs from the bytes\n // the lock covers: `install` / `install --locked` restore it.\n for (const d of await this.lockedCopyDrift()) {\n if (named.has(gapIdentity(d.ref))) continue;\n const parts = [\n ...d.modified.map((f) => {\n // An agent instance's file is named by its instance, not blamed on the asset (p925).\n const instance = d.instanceOf?.get(f);\n return instance\n ? `${f}, the file of agent instance \"${instance}\", was edited`\n : `${f} was edited`;\n }),\n ...d.extra.map((f) => `${f} is not part of the asset`),\n ];\n const reason = `is locked, but its deployed copy differs from the lock (${parts.join(\"; \")}) — run \\`skaile install --locked\\` to restore it`;\n gaps.push({ type: \"modified\", ref: d.ref, reason, message: `${d.ref} ${reason}` });\n named.add(gapIdentity(d.ref));\n }\n // An `mcp-server`'s payload files and managed config entry are drift like a skill's files.\n for (const { ref, drift } of await this.mcpDriftRows()) {\n if (named.has(gapIdentity(ref))) continue;\n const parts = [\n ...drift.missing.map((f) => `${f} is missing`),\n ...drift.modified.map((f) => `${f} was edited`),\n ...drift.extra.map((f) => `${f} is not part of the asset`),\n ];\n const reason = `is locked, but its deployed copy differs from the lock (${parts.join(\"; \")}) — run \\`skaile install --locked\\` to restore it`;\n gaps.push({ type: \"modified\", ref, reason, message: `${ref} ${reason}` });\n named.add(gapIdentity(ref));\n }\n gaps.push(...(await this.declaredGaps(requirements, named)));\n for (const d of await this.incompleteDeploys()) {\n const reason = `is deployed without ${d.missing.join(\", \")} — run \\`skaile install --locked\\` to restore it`;\n gaps.push({ type: \"incomplete\", ref: d.ref, reason, message: `${d.ref} ${reason}` });\n }\n // A `sources:` entry the walk cannot read is left out of every resolve; say so here, as\n // the one place a project's health is read, with the source named.\n for (const s of skipped) {\n const reason = `is skipped: ${s.why.replace(`${s.url}: `, \"\")} — fix it or run \\`skaile source remove\\``;\n gaps.push({\n type: \"source\",\n ref: s.url,\n reason,\n message: `source ${s.url} ${reason}`,\n manualFix: true,\n });\n }\n for (const u of unboundAgentInstances(this.projectDir, this.driverTarget)) {\n // `install` cannot fix it: the agent is added (or the binding dropped) by hand.\n const reason = u.ref.startsWith(\"agent:\")\n ? await this.unboundAgentReason(u.id, u.ref)\n : `is bound by agent instance \"${u.id}\" but resolves to no agent.yaml — fix the path, or drop the binding from skaile.yaml`;\n gaps.push({\n type: \"agent\",\n ref: u.ref,\n reason,\n message: `${u.ref} ${reason}`,\n manualFix: true,\n });\n }\n return {\n gaps,\n requirements: requirements.filter(\n (i) => i.unresolved || !libraryHeld(`${i.depKind}:${i.depName}`),\n ),\n };\n }\n\n /**\n * Why the `agent:` ref of agent instance `id` binds to nothing, as the phrase that follows\n * the ref in a {@link LockGap}; see {@link AssetManager.unboundAgentAdvice}.\n */\n private async unboundAgentReason(id: string, ref: string): Promise<string> {\n const { lead, advice } = await this.unboundAgentAdvice(ref);\n return `is bound by agent instance \"${id}\" but ${lead} — ${advice}`;\n }\n\n /**\n * What is wrong with an `agent:` ref bound by an agent instance and what to do (`lead`, then\n * `advice`). `skaile add` is named only when a registered library or source holds the agent\n * and `add` takes the ref (it needs a publisher); otherwise the user registers the library\n * that holds it, writes the publisher, or drops the binding.\n */\n private async unboundAgentAdvice(ref: string): Promise<{ lead: string; advice: string }> {\n const drop = \"or drop the binding from skaile.yaml\";\n const parsedRef = parseRefTolerant(ref);\n const publisher = parsedRef?.publisher;\n // A locked agent whose source is not restored yet (a fresh clone: `.skaile/cache` is gitignored)\n // is restored by `install --locked`; `add` is for a ref the lock does not have.\n const lockedAgent = Object.keys(this.tryReadLock()?.assets ?? {}).some((key) => {\n const k = parseCanonicalLockKey(key);\n return (\n k.kind === \"agent\" &&\n k.name === parsedRef?.name &&\n (!publisher || !k.publisher || k.publisher === publisher)\n );\n });\n if (lockedAgent) {\n // The locked library is not registered here (a fresh clone): `install --locked` cannot\n // restore the agent and says so itself, so naming it again only sends the user in a circle.\n const libraryFix = (await this.unresolvedFixes([ref])).get(ref);\n if (libraryFix) {\n const register = libraryFix.replace(\n /, or drop the dependency with `skaile remove [^`]*`$/,\n \"\",\n );\n return {\n lead: \"its agent is locked and the library cannot supply it here\",\n advice: `${register}, ${drop}`,\n };\n }\n return {\n lead: \"its agent is locked and not restored here\",\n advice: `run \\`skaile install --locked\\` first, ${drop}`,\n };\n }\n if (publisher && (await this.info(ref)) !== null) {\n return {\n lead: \"no agent was added for it\",\n advice: `run \\`skaile add ${ref}\\` first, ${drop}`,\n };\n }\n if (!publisher) {\n return {\n lead: \"names no publisher\",\n advice: `write it as agent:@<publisher>/<name> (\\`skaile add\\` needs the publisher), ${drop}`,\n };\n }\n // The lock may know the library that held it: say what is wrong with that library.\n const fix = (await this.unresolvedFixes([ref])).get(ref);\n if (fix) {\n const register = fix.replace(/, or drop the dependency with `skaile remove [^`]*`$/, \"\");\n return {\n lead: \"no agent was added for it, and `skaile add` cannot resolve it\",\n advice: `${register}, ${drop}`,\n };\n }\n return {\n lead: \"no registered library or source holds it\",\n advice: `register the library that holds it with \\`skaile library init <name> --path <dir>\\`, ${drop}`,\n };\n }\n\n /** @deprecated Use `(await projectState()).gaps`; removed in the next major. */\n async lockGaps(): Promise<LockGap[]> {\n return (await this.projectState()).gaps;\n }\n\n /**\n * The {@link ProjectState} gaps that name `ref`: as the gap's own ref, or as the asset\n * whose requirement is unmet. A ref without a publisher matches any publisher.\n *\n * @param ref - Asset ref in `kind:name` or `kind:@publisher/name` form.\n */\n async gapsOf(ref: string): Promise<LockGap[]> {\n const want = parseRefTolerant(ref);\n if (!want) return [];\n const names = (gapRef: string): boolean => {\n const p = parseRefTolerant(gapRef);\n return (\n p !== null &&\n p.kind === want.kind &&\n p.name === want.name &&\n (!want.publisher || !p.publisher || p.publisher === want.publisher)\n );\n };\n return (await this.projectState()).gaps.filter(\n (g) => names(g.ref) || (g.asset && names(g.asset)),\n );\n }\n\n /**\n * The {@link ProjectState} gaps of everything `ref` requires, transitively: what `check`\n * says about the requirements of `ref`, so a command that answers for one asset (`diff`)\n * does not call it fine while a requirement of it is broken. The requirements are read from\n * the deployed copies (the lock records no edges), the way `remove` and `install` read them\n * when no library holds the asset any more. The gaps of `ref` itself are not included\n * ({@link gapsOf}).\n *\n * @param ref - Asset ref in `kind:name` or `kind:@publisher/name` form.\n */\n async requirementGapsOf(ref: string): Promise<LockGap[]> {\n const want = parseRefTolerant(ref);\n if (!want) return [];\n const gaps = (await this.projectState()).gaps;\n const lockedIds = Object.keys(this.tryReadLock()?.assets ?? {}).map(parseCanonicalLockKey);\n const idKey = (id: { kind?: string; name?: string; publisher?: string }): string =>\n `${id.publisher ?? \"\"}/${id.kind}:${id.name}`;\n const seen = new Set<string>();\n const queue: Array<{ kind?: string; name?: string; publisher?: string }> = [\n {\n kind: want.kind,\n name: want.name,\n publisher:\n want.publisher?.replace(/^@/, \"\") ??\n lockedIds.find((l) => l.kind === want.kind && l.name === want.name)?.publisher,\n },\n ];\n seen.add(idKey(queue[0]!));\n const out: LockGap[] = [];\n for (const asset of queue) {\n for (const dep of await this.deployedRequirementsOf(asset)) {\n const id = memberIdentity(dep);\n if (!id) continue;\n const publisher =\n id.publisher ??\n lockedIds.find((l) => l.kind === id.kind && l.name === id.name)?.publisher;\n const next = { kind: id.kind, name: id.name, publisher };\n if (seen.has(idKey(next))) continue;\n seen.add(idKey(next));\n queue.push(next);\n for (const g of gaps) {\n if (out.includes(g)) continue;\n const p = parseRefTolerant(g.ref);\n if (\n p !== null &&\n p.kind === next.kind &&\n p.name === next.name &&\n (!publisher || !p.publisher || p.publisher.replace(/^@/, \"\") === publisher)\n ) {\n out.push(g);\n }\n }\n }\n }\n return out;\n }\n\n /**\n * Locked library assets whose library cannot supply them: the library is not registered\n * (renamed or removed) or no longer holds the asset. Another library holding it makes the\n * gap fixable by `skaile install` (it re-locks); otherwise the user registers the library\n * again or drops the dependency.\n *\n * @param named - `kind:name` identities already reported; they are skipped.\n */\n private async libraryOriginGaps(named: ReadonlySet<string>): Promise<LockGap[]> {\n const locked = Object.entries(this.tryReadLock()?.assets ?? {}).filter(\n ([, e]) => e.library !== undefined && !e.library.installed,\n );\n if (locked.length === 0) return [];\n const snap = await this.loadLibraryIndex();\n /** Per library root + default publisher: the on-disk scan `add`/`update` resolve from. */\n const scans = new Map<string, CatalogEntry[]>();\n /** Per library root: `kind:name` → sha256 of the files on disk. */\n const diskHashes = new Map<string, Map<string, string>>();\n const gaps: LockGap[] = [];\n for (const [key, entry] of locked) {\n const origin = entry.library!;\n const { publisher, kind, name } = parseCanonicalLockKey(key);\n if (!publisher || !kind || !name || named.has(`${kind}:${name}`)) continue;\n const ref = `${kind}:@${publisher}/${name}`;\n const lookup = this.lockedLibrary(origin, snap, { kind, publisher, name });\n const libPath = lookup.state === \"ok\" ? lookup.path : null;\n if (lookup.state === \"ok\" && libPath) {\n const scanKey = `${libPath}\\0${publisher}`;\n let scanned = scans.get(scanKey);\n if (!scanned) {\n scanned = await scanDirectory(libPath, publisher, { knownKinds: this.knownKinds });\n scans.set(scanKey, scanned);\n }\n const found = scanned.find((x) => x.kind === kind && x.name === name);\n if (found) {\n // The files in the library are the truth (the index lags): changed bytes under the\n // locked version make `install --locked` fail, so `check` fails on them too. A newer\n // version in the library is `outdated` news, not a gap.\n const onDisk = origin.sha256\n ? libraryDiskHashes(libPath, diskHashes, this.registry).get(`${kind}:${name}`)\n : undefined;\n if (onDisk !== undefined && onDisk !== origin.sha256) {\n const diskVersion = libraryAssetVersion(\n snap,\n lookup.name,\n { kind, publisher, name },\n found.version,\n );\n if (\n !diskVersion ||\n isPseudoVersion(diskVersion) ||\n !semverGt(coerceVersion(diskVersion), coerceVersion(origin.version))\n ) {\n const reason = `is locked, but library \"${lookup.name}\" content changed since lock — or the lock predates the one shared asset hash; run \\`skaile install\\` to re-lock it`;\n gaps.push({ type: \"content\", ref, reason, message: `${ref} ${reason}` });\n }\n }\n continue;\n }\n }\n // A library that is not here (not registered, or its directory gone) is never re-locked\n // by `install`: it fails like `install --locked`, so the fix is manual.\n if (lookup.state === \"dir-missing\") {\n const reason = `is locked, but ${lockedLibraryProblem(lookup, origin, ref)}`;\n gaps.push({ type: \"library\", ref, reason, message: `${ref} ${reason}`, manualFix: true });\n continue;\n }\n if (lookup.state === \"unregistered\") {\n const reason = `is locked, but library \"${origin.name}\" is not registered (renamed or removed?) — ${unregisteredLibraryFix(origin, ref)}`;\n gaps.push({ type: \"library\", ref, reason, message: `${ref} ${reason}`, manualFix: true });\n continue;\n }\n const heldElsewhere =\n (await this.resolveLibraryEntries([ref], { quiet: true })).resolved.size > 0;\n if (heldElsewhere) {\n const reason = `is locked, but library \"${lookup.name}\" no longer holds it — run \\`skaile install\\` to re-lock it against the library that holds it now`;\n gaps.push({ type: \"library\", ref, reason, message: `${ref} ${reason}` });\n continue;\n }\n const renamedTo = await this.renamedFlowRef(lookup, publisher, kind, name);\n const reason = renamedTo\n ? `is locked, but library \"${lookup.name}\" holds it as ${renamedTo} now (a flow is named by its \\`id:\\`) — run \\`skaile remove ${ref}\\`, then \\`skaile add ${renamedTo}\\``\n : `is locked, but library \"${lookup.name}\" no longer holds it — restore it there, or drop the dependency with \\`skaile remove ${ref}\\``;\n gaps.push({ type: \"library\", ref, reason, message: `${ref} ${reason}`, manualFix: true });\n }\n return gaps;\n }\n\n /**\n * Locked source assets whose source cannot supply them any more: the source is no longer in\n * `skaile.yaml` `sources:` (`source remove`, a hand edit), or it is there but now publishes\n * the asset under another publisher (`source add <url> --publisher`). `skaile install` has\n * nothing to restore them from, so the fix is manual. A source of a store-resolved lock entry\n * is not told apart from one, so no source is called missing while a `stores:` entry exists.\n *\n * @param named - `kind:name` identities already reported; they are skipped.\n * @param index - What the registered sources publish today.\n */\n private async sourceOriginGaps(\n named: ReadonlySet<string>,\n index: Awaited<ReturnType<typeof buildProvenanceIndex>>,\n ): Promise<LockGap[]> {\n let config: { sources: SourceEntry[]; stores: StoreEntry[] };\n try {\n config = this.loadConfig();\n } catch {\n return [];\n }\n // A store (a project `stores:` entry or the global `catalog.url`) resolves GitHub assets\n // without any `sources:` entry, so a GitHub url that no source declares may be a store's.\n const storeBacked =\n config.stores.length > 0 || (await this.globalStoreFallback(config.stores)).length > 0;\n const registered = new Set(config.sources.map((s) => sourceCacheKey(s.url)));\n const published = [...index.values()].flat();\n const gaps: LockGap[] = [];\n for (const [key, entry] of Object.entries(this.tryReadLock()?.assets ?? {})) {\n const url = entry.source?.url;\n // A path (the bundled factory tree moves with every upgrade) is no registered source.\n if (!url || entry.library || !GIT_URL.test(url)) continue;\n // The bundled factory source is never declared in `sources:`: it ships in the package.\n if (normalizeRepoUrl(url) === normalizeRepoUrl(FACTORY_SOURCE_URL)) continue;\n const { publisher, kind, name } = parseCanonicalLockKey(key);\n if (!publisher || !kind || !name || named.has(`${kind}:${name}`)) continue;\n const ref = `${kind}:@${publisher}/${name}`;\n if (!registered.has(sourceCacheKey(url))) {\n if (storeBacked && GITHUB_REPO_URL.test(url)) continue;\n const reason = `is locked, but its source ${url} is not in skaile.yaml sources: any more — register it again with \\`skaile source add ${url}\\`, or drop the dependency with \\`skaile remove ${ref}\\``;\n gaps.push({ type: \"source\", ref, reason, message: `${ref} ${reason}`, manualFix: true });\n continue;\n }\n const here = published.filter(\n (c) =>\n c.kind === kind && c.name === name && sourceCacheKey(c.sourceUrl) === sourceCacheKey(url),\n );\n if (here.length > 0 && !here.some((c) => c.publisher === publisher)) {\n const now = here[0]!.publisher;\n const reason = `is locked, but source ${url} publishes it as ${kind}:@${now}/${name} now (the source's publisher changed) — run \\`skaile source add ${url} --publisher ${publisher} --force\\` to give it back, or change the ref in skaile.yaml to the new one`;\n gaps.push({ type: \"source\", ref, reason, message: `${ref} ${reason}`, manualFix: true });\n }\n }\n return gaps;\n }\n\n /**\n * The locked assets that come from the source `url` (a `sources:` entry): canonical refs,\n * `kind:@publisher/name`. `skaile source remove` refuses while this list is not empty.\n */\n lockedFromSource(url: string): string[] {\n const want = sourceCacheKey(url);\n const out: string[] = [];\n for (const [key, entry] of Object.entries(this.tryReadLock()?.assets ?? {})) {\n if (entry.library || !entry.source || sourceCacheKey(entry.source.url) !== want) continue;\n const { publisher, kind, name } = parseCanonicalLockKey(key);\n if (kind && name) out.push(publisher ? `${kind}:@${publisher}/${name}` : `${kind}:${name}`);\n }\n return out;\n }\n\n /**\n * Record, on every agent entry of `lock` that has none, the files the agent's harness\n * rendering occupies and their sha256. Call it after the deploy, so the bytes hashed are the\n * ones `install` just wrote; {@link lockedCopyDrift} compares later edits with them.\n * Entries that carry a record (kept from an earlier lock) are left as they are.\n */\n private withRenderedAgents<T extends LockFile>(lock: T): T {\n if (this.global) return lock;\n for (const [key, entry] of Object.entries(lock.assets)) {\n if (entry.rendered || entry.library?.installed) continue;\n const { kind, name } = parseCanonicalLockKey(key);\n if (!kind || !name || this.installTarget(kind) !== \"agent\") continue;\n const rendered = this.renderedAgentFiles(name);\n if (rendered.length > 0) entry.rendered = rendered;\n }\n return this.withInstanceRenderings(lock);\n }\n\n /**\n * Make the `rendered:` list of every agent entry say exactly which files belong to it: the\n * asset-named files of its own rendering (hashes kept as recorded) plus the files of the agent\n * instances whose `ref` names it (`.claude/agents/default.md`, …) with their current sha256,\n * so a hand edit of an instance file is drift like one of the asset-named file. A path that is\n * neither is dropped: an instance that left `skaile.yaml`, or was bound to another agent, no\n * longer lists its file under the old entry. A file that is another entry's own rendering\n * stays with that entry; an instance whose `ref` names no locked agent (a path ref) has no\n * entry to hold its files. Call it after `renderAgentInstances`, which rewrites every\n * instance file, so the bytes hashed are the ones just written.\n */\n private withInstanceRenderings<T extends LockFile>(lock: T): T {\n if (this.global) return lock;\n const agentKeys = Object.keys(lock.assets).filter((k) => {\n const { kind, name } = parseCanonicalLockKey(k);\n return kind && name && this.installTarget(kind) === \"agent\";\n });\n const ownFiles = new Map<string, Set<string>>();\n for (const key of agentKeys) {\n const { name } = parseCanonicalLockKey(key);\n ownFiles.set(key, new Set(this.renderedAgentFiles(name as string).map((f) => f.path)));\n }\n // Instance files per agent entry, hashed now.\n const instanceFiles = new Map<string, Map<string, LockFileEntry>>();\n for (const instance of renderedInstanceFiles(this.projectDir, this.driverTarget)) {\n const want = parseRefTolerant(instance.ref);\n if (!want || want.kind !== \"agent\") continue;\n const wantPublisher = want.publisher?.replace(/^@/, \"\");\n const key = agentKeys.find((k) => {\n const p = parseCanonicalLockKey(k);\n return (\n p.name === want.name && (wantPublisher === undefined || p.publisher === wantPublisher)\n );\n });\n if (!key) continue;\n const files: LockFileEntry[] = [];\n for (const rel of instance.files) this.hashTree(join(this.projectDir, rel), files);\n const held = instanceFiles.get(key) ?? new Map<string, LockFileEntry>();\n for (const f of files) {\n const ownedElsewhere = agentKeys.some((k) => k !== key && ownFiles.get(k)?.has(f.path));\n if (!ownedElsewhere) held.set(f.path, f);\n }\n instanceFiles.set(key, held);\n }\n for (const key of agentKeys) {\n const entry = lock.assets[key];\n if (entry.library?.installed) continue;\n const own = ownFiles.get(key) ?? new Set<string>();\n const instance = instanceFiles.get(key) ?? new Map<string, LockFileEntry>();\n const byPath = new Map<string, LockFileEntry>();\n for (const f of entry.rendered ?? []) if (own.has(f.path)) byPath.set(f.path, f);\n for (const [path, f] of instance) byPath.set(path, f);\n if (byPath.size > 0) {\n entry.rendered = [...byPath.values()].sort((x, y) => x.path.localeCompare(y.path));\n } else {\n delete entry.rendered;\n }\n }\n return lock;\n }\n\n /** Append the regular files under `path` (a file or a directory) to `out`, project-relative with sha256. Symlinks are skipped. */\n private hashTree(path: string, out: LockFileEntry[]): void {\n let stat: Stats;\n try {\n stat = lstatSync(path);\n } catch {\n return;\n }\n if (stat.isSymbolicLink()) return;\n if (stat.isDirectory()) {\n for (const child of readdirSync(path).sort()) this.hashTree(join(path, child), out);\n } else if (stat.isFile()) {\n out.push({\n path: relative(this.projectDir, path).split(sep).join(\"/\"),\n sha256: computeHash(path),\n });\n }\n }\n\n /** The files of one agent's rendering for the active harness, project-relative, with sha256. */\n private renderedAgentFiles(name: string): LockFileEntry[] {\n const out: LockFileEntry[] = [];\n for (const path of deployedPaths(\"agent\", name, this.driverTarget, false, this.projectDir)) {\n this.hashTree(path, out);\n }\n // Codex also renders the identity file its `model_instructions_file` points at, beside the\n // agent file (`.codex/skaile-agents/<name>.md`).\n this.hashTree(\n join(\n dirname(deployedBase(\"agent\", this.driverTarget, false, this.projectDir)),\n CODEX_IDENTITY_DIR,\n `${name}.md`,\n ),\n out,\n );\n return out.sort((a, b) => a.path.localeCompare(b.path));\n }\n\n /**\n * The rendered native files of every locked agent whose lock entry records no `rendered:`\n * (a lock an older CLI wrote), as path → sha256, taken before a deploy. `check` cannot tell\n * such a file from a stale one, so {@link rewrittenAgentFiles} compares it afterwards.\n * Project mode only.\n */\n private unrecordedAgentFiles(lock: LockFile | null): Map<string, Map<string, string>> {\n const out = new Map<string, Map<string, string>>();\n if (this.global || !lock) return out;\n for (const [key, entry] of Object.entries(lock.assets)) {\n if (entry.rendered || entry.library?.installed) continue;\n const { kind, name } = parseCanonicalLockKey(key);\n if (!kind || !name || this.installTarget(kind) !== \"agent\") continue;\n const files = this.renderedAgentFiles(name);\n if (files.length > 0) out.set(key, new Map(files.map((f) => [f.path, f.sha256])));\n }\n return out;\n }\n\n /**\n * The agent files a deploy changed that {@link unrecordedAgentFiles} saw before it: one row\n * per locked agent, listing the project-relative paths whose bytes differ now. A render the\n * CLI changed (the 5.12.0 abilities block) otherwise reaches the user as a silent rewrite.\n */\n private rewrittenAgentFiles(before: Map<string, Map<string, string>>): RewrittenAgent[] {\n const out: RewrittenAgent[] = [];\n for (const [key, files] of before) {\n const { name } = parseCanonicalLockKey(key);\n if (!name) continue;\n const changed = this.renderedAgentFiles(name)\n .filter((f) => files.has(f.path) && files.get(f.path) !== f.sha256)\n .map((f) => f.path);\n if (changed.length > 0) out.push({ ref: key, files: changed });\n }\n return out;\n }\n\n /**\n * The {@link RestoredAsset} rows for the drifted copies (see {@link lockedCopyDrift}) a\n * deploy just wrote again: those whose ref is among the `deployed` canonical refs.\n */\n private restoredCopies(\n drifts: ReadonlyArray<\n {\n ref: string;\n key: string;\n rendered?: true;\n lockedSha?: ReadonlyMap<string, string>;\n } & DeployedDrift\n >,\n deployed: readonly string[],\n incomplete: readonly IncompleteDeploy[] = [],\n ): RestoredAsset[] {\n const rewritten = new Set(deployed.map((d) => d.split(\"#\")[0]));\n const out: RestoredAsset[] = [];\n for (const d of drifts) {\n // A rendered agent file is named by its project-relative path already. An instance file\n // (`default.md`) is rewritten by the instance render, not by the asset's deploy, so a file\n // counts as restored when the asset was deployed or its bytes equal the locked ones again.\n if (d.rendered) {\n const restored = d.modified.filter((f) => {\n if (rewritten.has(d.ref)) return true;\n try {\n return computeHash(join(this.projectDir, f)) === d.lockedSha?.get(f);\n } catch {\n return false;\n }\n });\n if (restored.length > 0) out.push({ ref: d.key, restored, removed: [] });\n continue;\n }\n if (!rewritten.has(d.ref)) continue;\n const { kind, name } = parseCanonicalLockKey(d.key);\n const component = kind ? this.installTarget(kind) : undefined;\n if (!kind || !name || !component) continue;\n const dir = relative(\n this.projectDir,\n deployedDir(component, name, this.driverTarget, this.global, this.projectDir),\n )\n .split(sep)\n .join(\"/\");\n out.push({\n ref: d.key,\n restored: d.modified.map((f) => `${dir}/${f}`),\n removed: d.extra.map((f) => `${dir}/${f}`),\n });\n }\n // A file deleted from the copy is written back by the same deploy: name it like an edited one.\n for (const inc of incomplete) {\n const bare = inc.ref.split(\"#\")[0];\n const key = deployed.find((d) => d.split(\"#\")[0] === bare);\n if (!key) continue;\n const { kind, name } = parseCanonicalLockKey(inc.ref);\n const component = kind ? this.installTarget(kind) : undefined;\n if (!kind || !name || !component) continue;\n const dir = relative(\n this.projectDir,\n deployedDir(component, name, this.driverTarget, this.global, this.projectDir),\n )\n .split(sep)\n .join(\"/\");\n const files = inc.missing.map((f) => `${dir}/${f}`);\n const row = out.find((r) => r.ref.split(\"#\")[0] === bare);\n if (row) row.restored.push(...files.filter((f) => !row.restored.includes(f)));\n else out.push({ ref: key, restored: files, removed: [] });\n }\n return out;\n }\n\n /**\n * Locked assets whose deployed copy differs from the bytes the lock covers: a file edited by\n * hand, or a file the asset does not ship. One row per asset, `ref` being `kind:@publisher/name`\n * and `key` its lock key. The one comparison behind the `modified` gap and the `Restored` lines\n * of `install`.\n *\n * - A library-origin asset is compared with its library's files, but only while those equal the\n * locked hash (changed library content is the `content` gap's business), both modified and\n * extra files.\n * - A source asset is compared with the per-file hashes the lock records (modified files only:\n * the lock lists what the source covers, not what the deploy copies).\n *\n * A `--link` deploy, an asset with a configured patch, and a copy that is missing are not\n * compared: other gaps cover them. An agent (rendered, not copied) is compared with the\n * hashes of its rendered files the lock records (`LockEntry.rendered`); its `modified` paths\n * are project-relative. Project mode only.\n */\n private async lockedCopyDrift(): Promise<\n Array<\n { ref: string; key: string } & DeployedDrift & {\n library: boolean;\n rendered?: true;\n lockedSha?: ReadonlyMap<string, string>;\n /** Project-relative path of an agent instance's file → the instance id. */\n instanceOf?: ReadonlyMap<string, string>;\n }\n >\n > {\n if (this.global) return [];\n const lock = this.tryReadLock();\n if (!lock) return [];\n const { patches } = this.loadConfig();\n const out: Array<\n { ref: string; key: string } & DeployedDrift & {\n library: boolean;\n rendered?: true;\n lockedSha?: ReadonlyMap<string, string>;\n instanceOf?: ReadonlyMap<string, string>;\n }\n > = [];\n const deployOpts = {\n registry: this.registry,\n driverTarget: this.driverTarget,\n global: this.global,\n cwd: this.projectDir,\n };\n const refOf = (key: string): string => {\n const { kind, publisher, name } = parseCanonicalLockKey(key);\n return publisher ? `${kind}:@${publisher}/${name}` : `${kind}:${name}`;\n };\n const keyOf = new Map<string, string>();\n for (const key of Object.keys(lock.assets)) keyOf.set(refOf(key), key);\n\n const { entries } = await this.restoreLibraryLockEntries(lock);\n for (const e of entries) {\n if (patches[`${e.kind}:${e.name}`]) continue;\n const drift = deployedAssetDrift(e, deployOpts);\n if (!drift || (drift.modified.length === 0 && drift.extra.length === 0)) continue;\n const ref = `${e.kind}:@${(e.publisher ?? \"\").replace(/^@/, \"\")}/${e.name}`;\n out.push({ ref, key: keyOf.get(ref) ?? ref, ...drift, library: true });\n }\n\n for (const [key, entry] of Object.entries(lock.assets)) {\n if (!entry.source || entry.files.length === 0) continue;\n const { kind, name } = parseCanonicalLockKey(key);\n const component = kind ? this.installTarget(kind) : undefined;\n if (!kind || !name || !component || component === \"agent\") continue;\n if (patches[`${kind}:${name}`]) continue;\n const dest = deployedDir(component, name, this.driverTarget, this.global, this.projectDir);\n try {\n const deployed = lstatSync(dest);\n if (deployed.isSymbolicLink() || !deployed.isDirectory()) continue;\n } catch {\n continue;\n }\n const modified: string[] = [];\n const locked = lockedAssetFiles(kind, entry.files);\n for (const f of locked) {\n const deployedFile = join(dest, f.rel);\n if (!existsSync(deployedFile)) continue;\n try {\n if (computeHash(deployedFile) !== f.sha256) modified.push(f.rel);\n } catch {\n modified.push(f.rel);\n }\n }\n // A file the lock does not list is not part of the asset (a leftover tool file such as\n // `__pycache__/` never counts): `install --locked` deletes it, so say so (p964).\n const covered = new Set(locked.map((f) => f.rel));\n let extra: string[] = [];\n try {\n extra = listAssetFiles(dest).filter((rel) => !covered.has(rel));\n } catch {\n // An unreadable copy has no extra files to name.\n }\n if (modified.length > 0 || extra.length > 0)\n out.push({ ref: refOf(key), key, modified, extra, library: false });\n }\n // An agent is rendered, not copied: its rendered file is compared with the hash `install`\n // recorded for it, so a hand edit reads like an edited skill file.\n for (const [key, entry] of Object.entries(lock.assets)) {\n if (!entry.rendered || entry.rendered.length === 0 || entry.library?.installed) continue;\n const { kind, name } = parseCanonicalLockKey(key);\n if (!kind || !name || this.installTarget(kind) !== \"agent\") continue;\n if (patches[`${kind}:${name}`]) continue;\n const modified: string[] = [];\n for (const f of entry.rendered) {\n const file = join(this.projectDir, f.path);\n if (!existsSync(file)) continue;\n try {\n if (computeHash(file) !== f.sha256) modified.push(f.path);\n } catch {\n modified.push(f.path);\n }\n }\n if (modified.length > 0) {\n const instanceOf = new Map<string, string>();\n for (const inst of renderedInstanceFiles(this.projectDir, this.driverTarget)) {\n for (const f of inst.files) if (modified.includes(f)) instanceOf.set(f, inst.id);\n }\n out.push({\n ref: refOf(key),\n key,\n modified,\n extra: [],\n library: false,\n rendered: true,\n lockedSha: new Map(entry.rendered.map((f) => [f.path, f.sha256])),\n instanceOf,\n });\n }\n }\n return out;\n }\n\n /**\n * Locked assets (declared or required by one) whose deployed copy is gone: `skaile install`\n * restores them. Same deployability rule as {@link AssetManager.listDeclared}'s `drift`.\n *\n * @param named - `kind:name` identities already reported; they are skipped.\n */\n private undeployedLockGaps(lock: LockFile | null, named: ReadonlySet<string>): LockGap[] {\n const gaps: LockGap[] = [];\n for (const [key, entry] of Object.entries(lock?.assets ?? {})) {\n if (entry.library?.installed) continue;\n const { publisher, kind, name } = parseCanonicalLockKey(key);\n const component = kind ? this.installTarget(kind) : undefined;\n if (!kind || !name || !component || named.has(`${kind}:${name}`)) continue;\n if (isDeployed(component, name, this.driverTarget, this.global, this.projectDir)) {\n // An agent is several rendered files (codex: the `.toml` and `.codex/skaile-agents/<n>.md`;\n // omp: `agent.yaml` and `SOUL.md`): the primary one alone does not make it deployed.\n const renderedGone =\n component === \"agent\" &&\n !this.global &&\n (entry.rendered ?? []).some((f) => !existsSync(join(this.projectDir, f.path)));\n if (!renderedGone) continue;\n }\n const ref = publisher ? `${kind}:@${publisher}/${name}` : `${kind}:${name}`;\n // A symlink whose target is gone is no copy either: say what is there (p1061).\n const dangling = deployedPaths(\n component,\n name,\n this.driverTarget,\n this.global,\n this.projectDir,\n ).find((p) => isSymlink(p) && !existsSync(p));\n const reason = dangling\n ? `is locked but its deployed copy is a symlink to nothing (${relative(this.projectDir, dangling)}) — run \\`skaile install --locked\\``\n : \"is locked but its deployed copy is missing — run `skaile install --locked`\";\n gaps.push({ type: \"drift\", ref, reason, message: `${ref} ${reason}` });\n }\n return gaps;\n }\n\n /**\n * The `skaile.yaml` side of {@link AssetManager.projectState}: declared refs that do not\n * parse, never resolved into the lock, are not materialized, or contradict a `#pin`.\n * A project with no (or an unreadable) `skaile.yaml` has no declared set to reconcile.\n *\n * @param requirements - What {@link AssetManager.doctor} found; a declared preset whose\n * items it already named needs no second line.\n * @param named - `kind:name` identities already reported; a declared asset among them\n * needs no `drift` line.\n */\n private async declaredGaps(\n requirements: readonly DepIssue[],\n named: ReadonlySet<string>,\n ): Promise<LockGap[]> {\n let declared: DeclaredAsset[];\n try {\n declared = await this.listDeclared();\n } catch {\n return [];\n }\n const gaps: LockGap[] = [];\n const unlocked = declared.filter((d) => d.state === \"declared\").map((d) => d.ref);\n const hints = await this.publisherChangeHints(unlocked);\n const lockKeys = Object.keys(this.tryReadLock()?.assets ?? {});\n for (const d of declared) {\n if (\n d.kind === \"preset\" &&\n requirements.some((i) => i.assetKind === \"preset\" && i.assetName === d.name)\n ) {\n continue;\n }\n let gap: Pick<LockGap, \"type\" | \"reason\" | \"manualFix\"> | undefined;\n if (d.state === \"invalid\") {\n gap = {\n type: \"invalid\",\n reason: \"is not a valid asset ref (expected kind:@<publisher>/<name>#<version>)\",\n };\n } else if (d.state === \"drift\") {\n if (named.has(`${d.kind}:${d.name}`)) continue;\n gap = {\n type: \"drift\",\n reason: \"is declared and locked but not materialized — run `skaile install`\",\n };\n } else if (d.state === \"declared\") {\n const hint = hints[d.ref];\n if (hint) {\n // A moved publisher is not fixed by `install`: the hint names the new ref instead.\n gap = {\n type: \"declared\",\n reason: `is declared but does not resolve${hint}`,\n manualFix: true,\n };\n } else if (await this.declaredRefResolvable(d.ref)) {\n // `install` refuses a newcomer whose requirement nothing holds: say that here, not\n // `run skaile install`, which would only fail with the real cause.\n const unmet = await this.unmetRequirementOf(d.ref);\n gap = unmet\n ? {\n type: \"declared\",\n reason: `requires ${unmet} but no library or source holds it — ${REGISTER_HOLDER}, or drop ${d.ref.split(\"#\")[0]} with \\`skaile remove ${d.ref.split(\"#\")[0]}\\``,\n manualFix: true,\n }\n : { type: \"declared\", reason: \"is declared but not locked — run `skaile install`\" };\n } else {\n gap = {\n type: \"declared\",\n reason: declaredNoHolderReason(d.ref),\n manualFix: true,\n };\n }\n } else {\n const want = parseAssetRef(d.ref);\n if (want.kind === \"preset\") {\n // A preset is never locked as an asset: it resolved once `install` / `add` recorded it\n // in the lock's `presets`, or a local library or source holds it right now.\n if (this.presetRecorded(want) || (await this.info(d.ref)) !== null) continue;\n gap = (await this.declaredRefResolvable(d.ref))\n ? { type: \"declared\", reason: \"is declared but not locked — run `skaile install`\" }\n : {\n type: \"declared\",\n reason: declaredNoHolderReason(d.ref),\n manualFix: true,\n };\n gaps.push({ ...gap, ref: d.ref, message: `${d.ref} ${gap.reason}` });\n continue;\n }\n if (!want.pin) continue;\n const held = lockKeys\n .map((key) => ({ key, id: parseCanonicalLockKey(key) }))\n .filter(\n ({ id }) =>\n id.kind === want.kind &&\n id.name === want.name &&\n (!want.publisher || id.publisher === want.publisher),\n );\n if (\n held.length > 0 &&\n !held.some(({ id }) => !id.version || matchPin(want.pin, id.version))\n ) {\n gap = {\n type: \"pin\",\n reason: `is pinned in skaile.yaml but the lock holds ${held.map((h) => h.key).join(\", \")} — run \\`skaile install\\``,\n };\n }\n }\n if (gap) gaps.push({ ...gap, ref: d.ref, message: `${d.ref} ${gap.reason}` });\n }\n return gaps;\n }\n\n /** Whether the lock's `presets` slice records `want` (kind, name and, when both carry one, publisher). */\n private presetRecorded(want: AssetRef): boolean {\n return (this.tryReadLock()?.presets ?? []).some((ref) => {\n const p = parseRefTolerant(ref);\n return (\n p !== null &&\n p.kind === want.kind &&\n p.name === want.name &&\n (!want.publisher || !p.publisher || p.publisher === want.publisher)\n );\n });\n }\n\n /**\n * The first requirement, direct or transitive, of the declared `ref` that no local source or\n * library holds and that nothing in the project already provides — the case `install` ends\n * with `Missing: … nothing was installed`. `undefined` when every requirement is held, when a\n * store is declared (it may hold the requirement and a check never goes to the network), or\n * when `ref` itself resolves to nothing.\n */\n private async unmetRequirementOf(ref: string): Promise<string | undefined> {\n if (this.loadConfig().stores.length > 0) return undefined;\n const lockedIds = Object.keys(this.tryReadLock()?.assets ?? {}).map(parseCanonicalLockKey);\n const seen = new Set<string>();\n const queue = [ref];\n for (let cur = queue.shift(); cur !== undefined; cur = queue.shift()) {\n const id = refIdentity(cur);\n if (id !== null) {\n if (seen.has(id)) continue;\n seen.add(id);\n }\n const entry = await this.info(cur);\n if (!entry) {\n if (cur === ref) return undefined;\n const want = parseRefTolerant(cur);\n const locked =\n want !== null &&\n lockedIds.some(\n (l) =>\n l.kind === want.kind &&\n l.name === want.name &&\n (!want.publisher || l.publisher === want.publisher),\n );\n if (!locked) return cur;\n continue;\n }\n queue.push(...libraryEntryDepRefs(entry));\n }\n return undefined;\n }\n\n /**\n * Whether `skaile install` can resolve a declared ref: a source or library holds it, or the\n * project declares a store that may. The global catalog is not asked: a check never goes\n * to the network.\n */\n private async declaredRefResolvable(ref: string): Promise<boolean> {\n if ((await this.info(ref)) !== null) return true;\n return this.loadConfig().stores.length > 0;\n }\n\n /**\n * Items of each declared `preset:` dependency that the lock does not cover.\n *\n * A preset is never locked itself; the lock lists only its expanded items, so an\n * item missing from the lock never resolved (or was declared after the last\n * install). Presets are read from the local sources and libraries (nested presets\n * followed); one only a store holds cannot be read without the network and\n * reports no gaps. Without a lock nothing is reported: `list` and `check` already\n * show a never-installed declaration as `declared`.\n *\n * @param declared - The `dependencies:` refs as written in `skaile.yaml`.\n * @param lock - The current lock, or `null` when none exists.\n * @returns Declared preset ref → its uncovered items; `resolvable` is `true` when a\n * local source or library offers the item (so `skaile install` can fix it).\n * Presets without gaps are absent.\n */\n private async declaredPresetGaps(\n declared: readonly string[],\n lock: LockFile | null,\n ): Promise<Map<string, Array<{ ref: string; resolvable: boolean }>>> {\n const gaps = new Map<string, Array<{ ref: string; resolvable: boolean }>>();\n if (!lock) return gaps;\n const presetRefs = declared.filter((d) => parseRefTolerant(d)?.kind === \"preset\");\n if (presetRefs.length === 0) return gaps;\n\n const { repositories } = this.loadConfig();\n const provenanceIndex = await buildProvenanceIndex(this.buildClones(repositories), {\n projectDir: this.projectDir,\n knownKinds: this.knownKinds,\n onSourceError: this.reportSourceError,\n });\n const lockKeys = Object.keys(lock.assets).map(parseCanonicalLockKey);\n\n /** Best source candidate of a publisher-qualified ref: pin honoured, highest version. */\n const sourceCandidate = (ref: string): ProvenanceCandidate | undefined => {\n const p = parseRefTolerant(ref);\n if (!p?.publisher) return undefined;\n const hash = ref.indexOf(\"#\");\n const pin = p.pin ?? (hash >= 0 ? ref.slice(hash + 1) : undefined);\n return (provenanceIndex.get(`${p.publisher}/${p.kind}:${p.name}`) ?? [])\n .filter((c) => matchPin(pin, c.version))\n .sort((a, b) => {\n const va = coerceVersion(a.version);\n const vb = coerceVersion(b.version);\n return semverGt(va, vb) ? -1 : semverGt(vb, va) ? 1 : 0;\n })[0];\n };\n /** Dependency refs a locally known preset lists; `null` when no local source or library holds it. */\n const itemsOf = async (ref: string): Promise<string[] | null> => {\n const src = sourceCandidate(ref);\n if (src) return (src.deps ?? []).map((d) => qualifyDepRef(d, src.publisher));\n const entry = (await this.resolveLibraryEntries([ref], { quiet: true })).entries[0];\n return entry ? libraryEntryDepRefs(entry) : null;\n };\n const resolvableLocally = async (ref: string): Promise<boolean> =>\n sourceCandidate(ref) !== undefined ||\n (await this.resolveLibraryEntries([ref], { quiet: true })).resolved.has(ref);\n const isLocked = (item: AssetRef): boolean =>\n lockKeys.some(\n (k) =>\n k.kind === item.kind &&\n k.name === item.name &&\n (!item.publisher || k.publisher === item.publisher),\n );\n\n for (const presetRef of presetRefs) {\n const out: Array<{ ref: string; resolvable: boolean }> = [];\n const visited = new Set<string>();\n const walk = async (ref: string): Promise<void> => {\n if (visited.has(ref)) return;\n visited.add(ref);\n for (const item of (await itemsOf(ref)) ?? []) {\n const p = parseRefTolerant(item);\n if (!p) continue;\n if (p.kind === \"preset\") await walk(item);\n else if (!isLocked(p)) out.push({ ref: item, resolvable: await resolvableLocally(item) });\n }\n };\n await walk(presetRef);\n if (out.length > 0) gaps.set(presetRef, out);\n }\n return gaps;\n }\n\n // ── Scaffold ───────────────────────────────────────────────────────────\n\n /**\n * Create a minimal asset scaffold directory (delegates to {@link createScaffold}).\n *\n * @param name - Asset name (also used as the directory name).\n * @param kind - Asset kind: `skill` | `agent` | `preset` | `flow` | `prompt` | `contract`.\n * @param destDir - Parent directory to create the asset in.\n * @param opts - Optional scaffold content (`description`).\n * @returns `{ ok: true, path }` on success, `{ ok: false, path: errorMessage }` if the\n * directory already exists or `kind` has no scaffold template.\n */\n create(\n name: string,\n kind: string,\n destDir: string,\n opts?: ScaffoldOptions,\n ): { ok: boolean; path: string } {\n return createScaffold(name, kind, destDir, opts);\n }\n\n // ── Contrib (REMOVED 2026-05-12) ───────────────────────────────────────\n //\n // The `contribChanges / contribDiff / contribCommit / contribPush /\n // contribCompare` methods were retired alongside `skaile repo contrib *`.\n // The refinement push-back workflow is being re-introduced in Phase 4 as\n // `skaile publish` + `skaile preset push` against the Library Source model.\n\n // ── History ────────────────────────────────────────────────────────────\n\n /**\n * Return recent asset action history entries, newest first.\n *\n * @param limit - Maximum number of entries to return. Defaults to `20`.\n * @returns Array of {@link HistoryEntry} objects in reverse-chronological order.\n */\n history(limit = 20): HistoryEntry[] {\n return getRecentHistory(this.projectDir, limit);\n }\n\n /**\n * Erase all asset action history for this workspace.\n */\n clearHistory(): void {\n clearHistory(this.projectDir);\n }\n\n // ── Clean ───────────────────────────────────────────────────────────────\n\n /**\n * Remove deployed assets tracked by the lock file and report unmanaged ones.\n *\n * With `opts.all`, also deletes `.skaile/history.yaml`, `.skaile/patches/`,\n * `.skaile/cache/sources/`, and `skaile.lock.yaml` — effectively resetting the\n * workspace to a pre-install state.\n *\n * @param opts - Optional cleanup options.\n * @param opts.all - When `true`, remove all Skaile-managed state in addition to deployed assets.\n * @returns Object with `removed` (successfully cleaned refs), `skipped` (with reasons),\n * and `unmanaged` (deployed assets not in the lock file).\n */\n clean(opts?: { all?: boolean }): {\n removed: string[];\n skipped: Array<{ ref: string; reason: string }>;\n unmanaged: string[];\n } {\n if (this.global) return this.cleanGlobal(opts);\n const lock = this.tryReadLock();\n const skipped: Array<{ ref: string; reason: string }> = [];\n\n const removed = this.cleanLockedDeployedAssets(lock);\n const unmanaged = this.collectUnmanagedAssets(lock);\n\n if (opts?.all) this.removeAllManagedState();\n\n return { removed, skipped, unmanaged };\n }\n\n /**\n * `clean --global`: remove the copy of every asset the global lock tracks from each global\n * harness (and the old `~/.omp/<dir>` copy), keeping `~/.skaile/skaile.yaml`. With `all`, the\n * global lock goes too.\n */\n private cleanGlobal(opts?: { all?: boolean }): {\n removed: string[];\n skipped: Array<{ ref: string; reason: string }>;\n unmanaged: string[];\n } {\n const lock = this.tryReadLock();\n const removed: string[] = [];\n const stale = this.staleLegacyOmpCopies();\n for (const key of Object.keys(lock?.assets ?? {})) {\n const { kind, name } = parseCanonicalLockKey(key);\n const component = kind ? this.installTarget(kind) : undefined;\n if (!kind || !name || !component) continue;\n const paths = [\n ...this.targetHarnesses().flatMap((t) =>\n deployedPaths(component, name, t, true, this.projectDir),\n ),\n ...stale.filter((s) => s.ref === key).map((s) => s.path),\n ];\n for (const dest of paths) {\n try {\n if (lstatSync(dest).isSymbolicLink()) unlinkSync(dest);\n else rmSync(dest, { recursive: true, force: true });\n } catch {\n // Already gone: counts as removed\n }\n }\n removed.push(key);\n }\n if (opts?.all) {\n try {\n unlinkSync(this.lockPath);\n } catch {}\n }\n return { removed, skipped: [], unmanaged: [] };\n }\n\n /**\n * Remove the deployed dir of every asset tracked by the lock; missing dirs\n * still count as removed. Returns the list of cleaned refs.\n */\n private cleanLockedDeployedAssets(lock: LockFile | null): string[] {\n const removed: string[] = [];\n if (!lock) return removed;\n for (const ref of Object.keys(lock.assets)) {\n const { kind, name } = parseCanonicalLockKey(ref);\n const component = kind ? this.installTarget(kind) : undefined;\n if (!kind || !name || !component) continue;\n for (const dest of deployedPaths(\n component,\n name,\n this.driverTarget,\n this.global,\n this.projectDir,\n )) {\n try {\n const stat = lstatSync(dest);\n if (stat.isSymbolicLink()) unlinkSync(dest);\n else rmSync(dest, { recursive: true, force: true });\n } catch {\n // Already gone — counts as removed\n }\n }\n removed.push(ref);\n }\n return removed;\n }\n\n /**\n * Report deployed assets not tracked by the lock file. Deployed assets are\n * keyed by <kind>:<name>; lock canonical refs are mapped to that shape.\n */\n private collectUnmanagedAssets(lock: LockFile | null): string[] {\n const lockRefs = lock\n ? new Set(\n Object.keys(lock.assets).map((r) => {\n const p = parseCanonicalLockKey(r);\n return p.kind && p.name ? `${p.kind}:${p.name}` : r;\n }),\n )\n : new Set<string>();\n const unmanaged: string[] = [];\n const allDeployed = this.listDeployed();\n for (const d of allDeployed) {\n const ref = `${d.kind}:${d.name}`;\n if (!lockRefs.has(ref)) {\n unmanaged.push(ref);\n }\n }\n return unmanaged;\n }\n\n /** Delete all Skaile-managed state: history file, patches/, cache/sources/, lock. */\n private removeAllManagedState(): void {\n // Delete history file\n const historyFile = join(this.projectDir, \".skaile\", \"history.yaml\");\n try {\n unlinkSync(historyFile);\n } catch {}\n\n // Remove patches dir\n try {\n rmSync(this.patchDir, { recursive: true, force: true });\n } catch {}\n\n // Remove repos dir\n try {\n rmSync(this.reposDir, { recursive: true, force: true });\n } catch {}\n\n // Remove lock file\n try {\n unlinkSync(this.lockPath);\n } catch {}\n }\n\n // ── Helpers ────────────────────────────────────────────────────────────\n\n /**\n * Add a dependency ref to the manifest `dependencies:` if not already present.\n * Project mode edits `<projectDir>/skaile.yaml`; global mode edits the\n * user-scope SSOT `~/.skaile/skaile.yaml`, **bootstrapping** the file (and its\n * parent dir) when absent so `skaile add --global` works on a fresh machine.\n */\n private addDependencyToConfig(ref: string): void {\n const configPath = join(this.stateRoot, \"skaile.yaml\");\n // `add --global --harness omp` limits the entry to omp; a plain `add --global` lifts the limit.\n const limit =\n this.global && this.harnessesOverride?.length ? this.harnessesOverride : undefined;\n if (!existsSync(configPath)) {\n if (!this.global) return; // project mode never bootstraps a manifest\n mkdirSync(this.stateRoot, { recursive: true });\n const fresh: Record<string, unknown> = { dependencies: [ref] };\n if (limit) this.setEntryHarnessRow(fresh, ref, limit);\n writeFileSync(configPath, stringifyYaml(fresh, { lineWidth: 120 }));\n return;\n }\n const raw = parseYaml(readFileSync(configPath, \"utf8\")) ?? {};\n if (!Array.isArray(raw.dependencies)) raw.dependencies = [];\n const deps: unknown[] = raw.dependencies;\n const limitChanged = this.global ? this.setEntryHarnessRow(raw, ref, limit) : false;\n if (deps.includes(ref) && deps.filter((d) => this.sameDeclaredAsset(d, ref)).length === 1) {\n if (limitChanged) writeFileSync(configPath, stringifyYaml(raw, { lineWidth: 120 }));\n return;\n }\n // One line per asset: a re-add with a new pin (`add x#0.2.0` after `add x`)\n // replaces the earlier declaration in place instead of appending a second one.\n const next: unknown[] = [];\n let placed = false;\n for (const dep of deps) {\n if (!this.sameDeclaredAsset(dep, ref)) {\n next.push(dep);\n } else if (!placed) {\n next.push(ref);\n placed = true;\n }\n }\n if (!placed) next.push(ref);\n raw.dependencies = next;\n writeFileSync(configPath, stringifyYaml(raw, { lineWidth: 120 }));\n }\n\n /**\n * Whether the declared `dep` names the same asset (kind, publisher, name) as\n * `ref`, ignoring the version pin. A publisher must agree on both sides —\n * unlike {@link removeDependencyFromConfig}, a bare `kind:name` never replaces a\n * publisher-qualified line. Unparseable entries only match on string equality.\n */\n private sameDeclaredAsset(dep: unknown, ref: string): boolean {\n if (typeof dep !== \"string\") return false;\n if (dep === ref) return true;\n const a = parseAssetRefLoose(dep);\n const b = parseAssetRefLoose(ref);\n if (!a || !b) return false;\n return (\n a.kind === b.kind &&\n a.name === b.name &&\n a.publisher?.replace(/^@/, \"\") === b.publisher?.replace(/^@/, \"\")\n );\n }\n\n /**\n * Remove a dependency ref from the manifest `dependencies:`. Targets the same\n * file as {@link addDependencyToConfig} (`~/.skaile/skaile.yaml` in global mode).\n *\n * @returns `true` when a declaration was removed.\n */\n private removeDependencyFromConfig(target: {\n kind: string;\n name: string;\n publisher?: string;\n }): boolean {\n const configPath = join(this.stateRoot, \"skaile.yaml\");\n if (!existsSync(configPath)) return false;\n const raw = parseYaml(readFileSync(configPath, \"utf8\")) ?? {};\n if (!Array.isArray(raw.dependencies)) return false;\n // Match by parsed identity, not by an exact string: `add` stores deps\n // publisher-qualified (`skill:@pub/name`) while a remove caller only knows\n // `kind:name`, so an `indexOf` of the bare key never matched. When both\n // sides carry a publisher they must agree; otherwise fall back to kind+name.\n const wantPub = target.publisher?.replace(/^@/, \"\");\n // Drop every matching line: a project that hit the old duplicate-pin bug\n // (`skill:@pub/x` and `skill:@pub/x#0.2.0`) has more than one.\n const before = raw.dependencies.length;\n raw.dependencies = raw.dependencies.filter((dep: unknown) => {\n if (typeof dep !== \"string\") return true;\n const p = parseAssetRefLoose(dep);\n if (!p || p.kind !== target.kind || p.name !== target.name) return true;\n const havePub = p.publisher?.replace(/^@/, \"\");\n return !(wantPub === undefined || havePub === undefined || havePub === wantPub);\n });\n if (raw.dependencies.length === before) return false;\n if (this.global) this.setEntryHarnessRow(raw, assetRefToStr(target as AssetRef), undefined);\n writeFileSync(configPath, stringifyYaml(raw, { lineWidth: 120 }));\n return true;\n }\n\n /**\n * The locked agents an agent instance binds (`agents.<id>.ref`, `agent.definition`) that\n * `declared` does not name, as version-less `agent:@publisher/name`. An agent no lock entry\n * holds is left out: `install` does not add what the user never added (`skaile add` does).\n */\n private lockedAgentBindings(declared: readonly string[]): string[] {\n const lock = this.tryReadLock();\n if (!lock) return [];\n const locked = Object.keys(lock.assets).map(parseCanonicalLockKey);\n const named = declared.map(memberIdentity);\n const out: string[] = [];\n for (const ref of this.declaredAgentInstanceRefs()) {\n const want = memberIdentity(ref.split(\"#\")[0] ?? ref);\n if (want?.kind !== \"agent\") continue;\n const hit = locked.find(\n (id) =>\n id.kind === \"agent\" &&\n id.name === want.name &&\n !!id.publisher &&\n (!want.publisher || id.publisher === want.publisher),\n );\n if (!hit?.publisher) continue;\n if (\n named.some(\n (n) =>\n n?.kind === \"agent\" &&\n n.name === hit.name &&\n (!n.publisher || n.publisher === hit.publisher),\n )\n )\n continue;\n const canonical = `agent:@${hit.publisher}/${hit.name}`;\n if (!out.includes(canonical)) out.push(canonical);\n }\n return out;\n }\n\n /** The refs `skaile.yaml` binds agent instances to: every `agents.<id>.ref` and `agent.definition`. Project mode only. */\n private declaredAgentInstanceRefs(): string[] {\n if (this.global) return [];\n const configPath = join(this.stateRoot, \"skaile.yaml\");\n if (!existsSync(configPath)) return [];\n try {\n const raw = parseYaml(readFileSync(configPath, \"utf8\")) as {\n agents?: Record<string, { ref?: unknown } | null>;\n agent?: { definition?: unknown };\n } | null;\n const refs: unknown[] = [\n ...Object.values(raw?.agents ?? {}).map((i) => i?.ref),\n raw?.agent?.definition,\n ];\n return refs.filter((r): r is string => typeof r === \"string\");\n } catch {\n return [];\n }\n }\n\n /**\n * Drop the agent instances of `skaile.yaml` (`agents.<id>`, or the `agent.definition`\n * default) whose `ref` binds to `target`, and the native agent files an install rendered for\n * them. Only an `agent` target has bindings; project mode only. A `ref` without a publisher\n * matches any publisher, and a pin is ignored.\n *\n * @returns `true` when a binding was removed.\n */\n private removeAgentBindings(target: { kind: string; name: string; publisher?: string }): boolean {\n if (this.global || target.kind !== \"agent\") return false;\n const configPath = join(this.stateRoot, \"skaile.yaml\");\n if (!existsSync(configPath)) return false;\n let raw: {\n agents?: Record<string, { ref?: unknown } | null>;\n agent?: Record<string, unknown>;\n } | null;\n try {\n raw = parseYaml(readFileSync(configPath, \"utf8\"));\n } catch {\n return false;\n }\n if (!raw || typeof raw !== \"object\") return false;\n const wantPub = target.publisher?.replace(/^@/, \"\");\n const binds = (ref: unknown): boolean => {\n const p = typeof ref === \"string\" ? parseRefTolerant(ref) : null;\n if (!p || p.kind !== \"agent\" || p.name !== target.name) return false;\n const havePub = p.publisher?.replace(/^@/, \"\");\n return wantPub === undefined || havePub === undefined || havePub === wantPub;\n };\n const ids: string[] = [];\n const instances = raw.agents;\n if (instances && typeof instances === \"object\") {\n for (const [id, instance] of Object.entries(instances)) {\n if (!binds(instance?.ref)) continue;\n ids.push(id);\n delete instances[id];\n }\n if (Object.keys(instances).length === 0) delete raw.agents;\n }\n if (raw.agent && typeof raw.agent === \"object\" && binds(raw.agent.definition)) {\n ids.push(DEFAULT_AGENT_INSTANCE_ID);\n delete raw.agent.definition;\n if (Object.keys(raw.agent).length === 0) delete raw.agent;\n }\n if (ids.length === 0) return false;\n writeFileSync(configPath, stringifyYaml(raw, { lineWidth: 120 }));\n for (const driverTarget of this.targetHarnesses()) {\n removeAgentInstanceRenderings({ projectDir: this.projectDir, driverTarget, ids });\n }\n return true;\n }\n\n private resolveRepoDir(decl: SourceDeclaration, name: string): string | null {\n // Check links first\n const links = readLinks(this.projectDir);\n if (links[name]) {\n return existsSync(links[name]) ? links[name] : null;\n }\n\n if (decl.path) {\n const resolved = resolve(this.projectDir, decl.path);\n return existsSync(resolved) ? resolved : null;\n }\n\n // Check project-local symlink, then global cache\n const dest = join(this.reposDir, name);\n if (existsSync(dest)) return dest;\n\n const globalDest = join(getGlobalCacheDir(), name);\n if (existsSync(join(globalDest, \".git\"))) return globalDest;\n\n return null;\n }\n}\n\n// ── Agent install (renders GitAgent packages to framework-native files) ──\n\nexport { installAgent } from \"./install-agent.js\";\nexport type {\n InstalledAgentInstance,\n InstallAgentInstancesOptions,\n InstallAgentInstancesResult,\n} from \"./install-instances.js\";\nexport { installAgentInstances } from \"./install-instances.js\";\n\n// ── Renderers ─────────────────────────────────────────────────────────────\n\nexport type { AgentRenderer, AgentRenderInput, AgentRenderResult } from \"./renderers.js\";\nexport {\n AGENT_RENDERERS,\n claudeCodeRenderer,\n codexRenderer,\n driverTargetSupportsAgents,\n ompRenderer,\n} from \"./renderers.js\";\n\n// ── Fragments ─────────────────────────────────────────────────────────────\n\nexport type {\n AbilityRef,\n ConnectorRef,\n ContractRef,\n FragmentContext,\n FragmentId,\n} from \"./fragments.js\";\nexport { BUILT_IN_FRAGMENTS, loadPromptExtensions, resolveFragments } from \"./fragments.js\";\n"]}
|