@skaile/workspaces 6.15.0 → 6.16.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 +73 -0
- package/dist/agent-file-refresh-76NNFB4W.js +89 -0
- package/dist/agent-file-refresh-76NNFB4W.js.map +1 -0
- package/dist/ai-sdk.js +8 -7
- package/dist/ai-sdk.js.map +1 -1
- package/dist/{asset-feeds-PM7FKHJP.js → asset-feeds-ON7FYHHF.js} +25 -23
- package/dist/asset-feeds-ON7FYHHF.js.map +1 -0
- package/dist/asset-manager/catalog-deployer.js +8 -7
- package/dist/asset-manager/history.js +7 -6
- package/dist/asset-manager/index.js +17 -15
- package/dist/asset-manager/installer.js +16 -9
- package/dist/asset-manager/renderers.js +8 -8
- package/dist/asset-manager/src/add-remove/add.d.ts +134 -0
- package/dist/asset-manager/src/add-remove/add.d.ts.map +1 -0
- package/dist/asset-manager/src/add-remove/remove.d.ts +329 -0
- package/dist/asset-manager/src/add-remove/remove.d.ts.map +1 -0
- package/dist/asset-manager/src/agent-render.d.ts +116 -0
- package/dist/asset-manager/src/agent-render.d.ts.map +1 -0
- package/dist/asset-manager/src/composed-blocks.d.ts +40 -0
- package/dist/asset-manager/src/composed-blocks.d.ts.map +1 -0
- package/dist/asset-manager/src/config/core.d.ts +297 -0
- package/dist/asset-manager/src/config/core.d.ts.map +1 -0
- package/dist/asset-manager/src/config/edit.d.ts +161 -0
- package/dist/asset-manager/src/config/edit.d.ts.map +1 -0
- package/dist/asset-manager/src/index.d.ts +31 -2961
- package/dist/asset-manager/src/index.d.ts.map +1 -1
- package/dist/asset-manager/src/install/clone-commit-fetcher.d.ts +11 -0
- package/dist/asset-manager/src/install/clone-commit-fetcher.d.ts.map +1 -0
- package/dist/asset-manager/src/install/install.d.ts +151 -0
- package/dist/asset-manager/src/install/install.d.ts.map +1 -0
- package/dist/asset-manager/src/install/restore.d.ts +76 -0
- package/dist/asset-manager/src/install/restore.d.ts.map +1 -0
- package/dist/asset-manager/src/install-agent.d.ts +52 -4
- package/dist/asset-manager/src/install-agent.d.ts.map +1 -1
- package/dist/asset-manager/src/install-instances.d.ts +70 -2
- package/dist/asset-manager/src/install-instances.d.ts.map +1 -1
- package/dist/asset-manager/src/installer.d.ts +54 -4
- package/dist/asset-manager/src/installer.d.ts.map +1 -1
- package/dist/asset-manager/src/lock/copies.d.ts +156 -0
- package/dist/asset-manager/src/lock/copies.d.ts.map +1 -0
- package/dist/asset-manager/src/lock/library.d.ts +261 -0
- package/dist/asset-manager/src/lock/library.d.ts.map +1 -0
- package/dist/asset-manager/src/mcp-render.d.ts +86 -0
- package/dist/asset-manager/src/mcp-render.d.ts.map +1 -0
- package/dist/asset-manager/src/omp-sweep.d.ts +25 -0
- package/dist/asset-manager/src/omp-sweep.d.ts.map +1 -0
- package/dist/asset-manager/src/read/diff.d.ts +109 -0
- package/dist/asset-manager/src/read/diff.d.ts.map +1 -0
- package/dist/asset-manager/src/read/doctor.d.ts +116 -0
- package/dist/asset-manager/src/read/doctor.d.ts.map +1 -0
- package/dist/asset-manager/src/read/gaps.d.ts +120 -0
- package/dist/asset-manager/src/read/gaps.d.ts.map +1 -0
- package/dist/asset-manager/src/read/graph.d.ts +69 -0
- package/dist/asset-manager/src/read/graph.d.ts.map +1 -0
- package/dist/asset-manager/src/read/outdated.d.ts +152 -0
- package/dist/asset-manager/src/read/outdated.d.ts.map +1 -0
- package/dist/asset-manager/src/read/state.d.ts +265 -0
- package/dist/asset-manager/src/read/state.d.ts.map +1 -0
- package/dist/asset-manager/src/renderers.d.ts +11 -1
- package/dist/asset-manager/src/renderers.d.ts.map +1 -1
- package/dist/asset-manager/src/resolve/guards.d.ts +167 -0
- package/dist/asset-manager/src/resolve/guards.d.ts.map +1 -0
- package/dist/asset-manager/src/resolve/scan.d.ts +222 -0
- package/dist/asset-manager/src/resolve/scan.d.ts.map +1 -0
- package/dist/asset-manager/src/resolve/stores.d.ts +176 -0
- package/dist/asset-manager/src/resolve/stores.d.ts.map +1 -0
- package/dist/asset-manager/src/shared/files.d.ts +42 -0
- package/dist/asset-manager/src/shared/files.d.ts.map +1 -0
- package/dist/asset-manager/src/shared/library-hooks.d.ts +16 -0
- package/dist/asset-manager/src/shared/library-hooks.d.ts.map +1 -0
- package/dist/asset-manager/src/shared/library.d.ts +96 -0
- package/dist/asset-manager/src/shared/library.d.ts.map +1 -0
- package/dist/asset-manager/src/shared/refs.d.ts +101 -0
- package/dist/asset-manager/src/shared/refs.d.ts.map +1 -0
- package/dist/asset-manager/src/shared/types.d.ts +399 -0
- package/dist/asset-manager/src/shared/types.d.ts.map +1 -0
- package/dist/bridge/harnesses/claude-sdk.js +11 -17
- package/dist/bridge/harnesses/claude-sdk.js.map +1 -1
- package/dist/bridge/harnesses/codex.js +10 -10
- package/dist/bridge/harnesses/continue.js +12 -16
- package/dist/bridge/harnesses/continue.js.map +1 -1
- package/dist/bridge/harnesses/echo.js +3 -8
- package/dist/bridge/harnesses/echo.js.map +1 -1
- package/dist/bridge/harnesses/gemini.js +5 -5
- package/dist/bridge/harnesses/goose.js +13 -17
- package/dist/bridge/harnesses/goose.js.map +1 -1
- package/dist/bridge/harnesses/omp.js +5 -11
- package/dist/bridge/harnesses/omp.js.map +1 -1
- package/dist/bridge/harnesses/opencode.js +13 -17
- package/dist/bridge/harnesses/opencode.js.map +1 -1
- package/dist/bridge/harnesses/qwen.js +6 -11
- package/dist/bridge/harnesses/qwen.js.map +1 -1
- package/dist/bridge/index.js +16 -16
- package/dist/bridge/src/codex/managed-harness.d.ts.map +1 -1
- package/dist/bridge/src/driver-contract.d.ts +72 -0
- package/dist/bridge/src/driver-contract.d.ts.map +1 -0
- package/dist/bridge/src/harness-model-check.d.ts +1 -1
- package/dist/bridge/src/harness-model-check.d.ts.map +1 -1
- package/dist/bridge/src/harnesses/_subprocess-cli.d.ts +8 -0
- package/dist/bridge/src/harnesses/_subprocess-cli.d.ts.map +1 -1
- package/dist/bridge/src/harnesses/claude-sdk.d.ts.map +1 -1
- package/dist/bridge/src/harnesses/codex.d.ts +2 -0
- package/dist/bridge/src/harnesses/codex.d.ts.map +1 -1
- package/dist/bridge/src/harnesses/continue.d.ts.map +1 -1
- package/dist/bridge/src/harnesses/echo.d.ts.map +1 -1
- package/dist/bridge/src/harnesses/gemini.d.ts.map +1 -1
- package/dist/bridge/src/harnesses/goose.d.ts.map +1 -1
- package/dist/bridge/src/harnesses/omp.d.ts.map +1 -1
- package/dist/bridge/src/harnesses/opencode.d.ts.map +1 -1
- package/dist/bridge/src/harnesses/qwen.d.ts.map +1 -1
- package/dist/bridge/src/index.d.ts +2 -0
- package/dist/bridge/src/index.d.ts.map +1 -1
- package/dist/bridge/src/preflight.d.ts +114 -0
- package/dist/bridge/src/preflight.d.ts.map +1 -0
- package/dist/bridge/src/registry.d.ts +12 -0
- package/dist/bridge/src/registry.d.ts.map +1 -1
- package/dist/{chunk-MUQBP2BK.js → chunk-2JUCWMIS.js} +8808 -8337
- package/dist/chunk-2JUCWMIS.js.map +1 -0
- package/dist/{chunk-VS6XC5JE.js → chunk-2MTRRK37.js} +3 -3
- package/dist/{chunk-VS6XC5JE.js.map → chunk-2MTRRK37.js.map} +1 -1
- package/dist/chunk-2PJYJPDE.js +3 -0
- package/dist/chunk-2PJYJPDE.js.map +1 -0
- package/dist/{chunk-J7FEWDRQ.js → chunk-2SSG5B24.js} +4 -4
- package/dist/{chunk-J7FEWDRQ.js.map → chunk-2SSG5B24.js.map} +1 -1
- package/dist/{chunk-WDG5IVEA.js → chunk-2ZDZJ7XQ.js} +3 -3
- package/dist/{chunk-WDG5IVEA.js.map → chunk-2ZDZJ7XQ.js.map} +1 -1
- package/dist/{chunk-V2VDTQ7A.js → chunk-3A7JUOY2.js} +3 -3
- package/dist/{chunk-V2VDTQ7A.js.map → chunk-3A7JUOY2.js.map} +1 -1
- package/dist/chunk-3LAJJURV.js +26 -0
- package/dist/chunk-3LAJJURV.js.map +1 -0
- package/dist/{chunk-FJJEC6O2.js → chunk-3UYKT62L.js} +5 -5
- package/dist/{chunk-FJJEC6O2.js.map → chunk-3UYKT62L.js.map} +1 -1
- package/dist/{chunk-HCIXCCUH.js → chunk-4X5WXQV7.js} +4 -4
- package/dist/{chunk-HCIXCCUH.js.map → chunk-4X5WXQV7.js.map} +1 -1
- package/dist/chunk-4ZNKEDYH.js +887 -0
- package/dist/chunk-4ZNKEDYH.js.map +1 -0
- package/dist/{chunk-R7422XD4.js → chunk-65SOXO7I.js} +20 -14
- package/dist/chunk-65SOXO7I.js.map +1 -0
- package/dist/{chunk-YDMZWVZN.js → chunk-6KV34G6A.js} +8 -8
- package/dist/{chunk-YDMZWVZN.js.map → chunk-6KV34G6A.js.map} +1 -1
- package/dist/{chunk-OIWFXUZB.js → chunk-6M44OQKH.js} +40 -44
- package/dist/chunk-6M44OQKH.js.map +1 -0
- package/dist/{chunk-SXRN27TU.js → chunk-72DYHOO2.js} +24 -25
- package/dist/chunk-72DYHOO2.js.map +1 -0
- package/dist/{chunk-XPSZIBPU.js → chunk-7IW5E6LB.js} +43 -48
- package/dist/chunk-7IW5E6LB.js.map +1 -0
- package/dist/{chunk-BNLXZXZN.js → chunk-BRAOB37W.js} +97 -47
- package/dist/chunk-BRAOB37W.js.map +1 -0
- package/dist/{chunk-ZLDAPZIX.js → chunk-BTMSHGN3.js} +4 -4
- package/dist/{chunk-ZLDAPZIX.js.map → chunk-BTMSHGN3.js.map} +1 -1
- package/dist/{chunk-7K73MCI6.js → chunk-CU5WY6HN.js} +3 -3
- package/dist/{chunk-7K73MCI6.js.map → chunk-CU5WY6HN.js.map} +1 -1
- package/dist/{chunk-CG63XGVV.js → chunk-EGKCKWWE.js} +3 -3
- package/dist/{chunk-CG63XGVV.js.map → chunk-EGKCKWWE.js.map} +1 -1
- package/dist/{chunk-CJO3XKO7.js → chunk-ETGC2MEM.js} +4 -4
- package/dist/{chunk-CJO3XKO7.js.map → chunk-ETGC2MEM.js.map} +1 -1
- package/dist/{chunk-PFBPESW7.js → chunk-FPG36VC4.js} +8 -13
- package/dist/chunk-FPG36VC4.js.map +1 -0
- package/dist/{chunk-SBAUZ7XH.js → chunk-H3PY5DFL.js} +4 -4
- package/dist/{chunk-SBAUZ7XH.js.map → chunk-H3PY5DFL.js.map} +1 -1
- package/dist/{chunk-7HRZACI4.js → chunk-HW4BDJPC.js} +17 -6
- package/dist/chunk-HW4BDJPC.js.map +1 -0
- package/dist/{chunk-7VBD5XUM.js → chunk-IG4YQ7ER.js} +32 -90
- package/dist/chunk-IG4YQ7ER.js.map +1 -0
- package/dist/{chunk-6WIZC6GM.js → chunk-KDRA6FYE.js} +120 -211
- package/dist/chunk-KDRA6FYE.js.map +1 -0
- package/dist/{chunk-KOI7QFDH.js → chunk-M7XIYHWB.js} +3 -3
- package/dist/{chunk-KOI7QFDH.js.map → chunk-M7XIYHWB.js.map} +1 -1
- package/dist/{chunk-7LJUK5JK.js → chunk-MG6QD7GE.js} +201 -43
- package/dist/chunk-MG6QD7GE.js.map +1 -0
- package/dist/{chunk-CWUHUL6W.js → chunk-NAQXDTF3.js} +3 -3
- package/dist/{chunk-CWUHUL6W.js.map → chunk-NAQXDTF3.js.map} +1 -1
- package/dist/{chunk-JIZ35OOU.js → chunk-NJ6UCY2B.js} +3 -3
- package/dist/{chunk-JIZ35OOU.js.map → chunk-NJ6UCY2B.js.map} +1 -1
- package/dist/{chunk-A3G3FHGB.js → chunk-NNJQQYHY.js} +2 -2
- package/dist/{chunk-A3G3FHGB.js.map → chunk-NNJQQYHY.js.map} +1 -1
- package/dist/{chunk-TYRAEMWE.js → chunk-OD4N5O7V.js} +4 -4
- package/dist/{chunk-TYRAEMWE.js.map → chunk-OD4N5O7V.js.map} +1 -1
- package/dist/{chunk-LBJCOEXH.js → chunk-P6FJDT35.js} +27 -7
- package/dist/chunk-P6FJDT35.js.map +1 -0
- package/dist/{chunk-IOXFT5D7.js → chunk-PD42JZWI.js} +3 -3
- package/dist/{chunk-IOXFT5D7.js.map → chunk-PD42JZWI.js.map} +1 -1
- package/dist/{chunk-MS2IXLTC.js → chunk-PMXTBWFD.js} +27 -7
- package/dist/chunk-PMXTBWFD.js.map +1 -0
- package/dist/{chunk-O74SRQ3W.js → chunk-PPSSDUN6.js} +3 -3
- package/dist/{chunk-O74SRQ3W.js.map → chunk-PPSSDUN6.js.map} +1 -1
- package/dist/{chunk-IYXOSBQ4.js → chunk-PRB67LCK.js} +126 -17
- package/dist/chunk-PRB67LCK.js.map +1 -0
- package/dist/{chunk-6VQW2X2F.js → chunk-QUIK7L3Z.js} +9 -9
- package/dist/{chunk-6VQW2X2F.js.map → chunk-QUIK7L3Z.js.map} +1 -1
- package/dist/{chunk-DRUAQ7IY.js → chunk-QUPZKTF3.js} +9 -8
- package/dist/chunk-QUPZKTF3.js.map +1 -0
- package/dist/{chunk-7FXOOUOC.js → chunk-RPRMD7XV.js} +27 -11
- package/dist/chunk-RPRMD7XV.js.map +1 -0
- package/dist/{chunk-U7EJB6LY.js → chunk-S3UOZBGE.js} +20 -3
- package/dist/chunk-S3UOZBGE.js.map +1 -0
- package/dist/{chunk-LQWOU7S2.js → chunk-SFBLZOV5.js} +3 -3
- package/dist/{chunk-LQWOU7S2.js.map → chunk-SFBLZOV5.js.map} +1 -1
- package/dist/{chunk-EB2LKPI6.js → chunk-SMFZ5YGN.js} +4 -4
- package/dist/{chunk-EB2LKPI6.js.map → chunk-SMFZ5YGN.js.map} +1 -1
- package/dist/{chunk-IRIWNKQS.js → chunk-SX54OQQT.js} +4 -4
- package/dist/{chunk-IRIWNKQS.js.map → chunk-SX54OQQT.js.map} +1 -1
- package/dist/{chunk-2PVYDAFN.js → chunk-T65N4CIZ.js} +3 -3
- package/dist/{chunk-2PVYDAFN.js.map → chunk-T65N4CIZ.js.map} +1 -1
- package/dist/{chunk-C5ZCREBI.js → chunk-TVRL3IPZ.js} +3 -3
- package/dist/{chunk-C5ZCREBI.js.map → chunk-TVRL3IPZ.js.map} +1 -1
- package/dist/{chunk-RKTEHX2S.js → chunk-TW5AP6IF.js} +5 -5
- package/dist/{chunk-RKTEHX2S.js.map → chunk-TW5AP6IF.js.map} +1 -1
- package/dist/{chunk-EMIOFJQJ.js → chunk-TYK752MU.js} +3 -3
- package/dist/{chunk-EMIOFJQJ.js.map → chunk-TYK752MU.js.map} +1 -1
- package/dist/{chunk-HPQ2WDYC.js → chunk-U2WPJHRA.js} +5 -5
- package/dist/{chunk-HPQ2WDYC.js.map → chunk-U2WPJHRA.js.map} +1 -1
- package/dist/{chunk-MEU2HHGV.js → chunk-U7P22GEB.js} +386 -46
- package/dist/chunk-U7P22GEB.js.map +1 -0
- package/dist/{chunk-AEFDFCS2.js → chunk-VFEZUSB6.js} +4 -4
- package/dist/{chunk-AEFDFCS2.js.map → chunk-VFEZUSB6.js.map} +1 -1
- package/dist/{chunk-A4VKIVGB.js → chunk-WW22FS74.js} +75 -67
- package/dist/chunk-WW22FS74.js.map +1 -0
- package/dist/{chunk-72PPC4SC.js → chunk-Z23I2JA6.js} +6 -6
- package/dist/{chunk-72PPC4SC.js.map → chunk-Z23I2JA6.js.map} +1 -1
- package/dist/{chunk-KIFAU62K.js → chunk-Z7HLX4V2.js} +4 -4
- package/dist/{chunk-KIFAU62K.js.map → chunk-Z7HLX4V2.js.map} +1 -1
- package/dist/{chunk-YLKOCMU7.js → chunk-ZII54C3E.js} +266 -1032
- package/dist/chunk-ZII54C3E.js.map +1 -0
- package/dist/{chunk-CVUMZTNO.js → chunk-ZQPBYLCS.js} +4 -4
- package/dist/{chunk-CVUMZTNO.js.map → chunk-ZQPBYLCS.js.map} +1 -1
- package/dist/{claude-code-5QYXWC5H.js → claude-code-VL6UM7BZ.js} +4 -4
- package/dist/{claude-code-5QYXWC5H.js.map → claude-code-VL6UM7BZ.js.map} +1 -1
- package/dist/cli/index.js +491 -298
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/src/agent-file-refresh.d.ts +25 -0
- package/dist/cli/src/agent-file-refresh.d.ts.map +1 -0
- package/dist/cli/src/commands/asset-cmd.d.ts.map +1 -1
- package/dist/cli/src/commands/catalog.d.ts +9 -2
- 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/harness.d.ts +1 -1
- package/dist/cli/src/commands/harness.d.ts.map +1 -1
- package/dist/cli/src/commands/library-cmd.d.ts.map +1 -1
- package/dist/cli/src/commands/library-index.d.ts +5 -7
- package/dist/cli/src/commands/library-index.d.ts.map +1 -1
- package/dist/cli/src/commands/library-publish.d.ts.map +1 -1
- package/dist/cli/src/commands/preset-export.d.ts.map +1 -1
- package/dist/cli/src/commands/project.d.ts.map +1 -1
- package/dist/cli/src/commands/run.d.ts.map +1 -1
- package/dist/cli/src/commands/serve-preflight.d.ts +27 -48
- 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/source.d.ts +6 -9
- package/dist/cli/src/commands/source.d.ts.map +1 -1
- package/dist/cli/src/commands/validate.d.ts +6 -0
- package/dist/cli/src/commands/validate.d.ts.map +1 -1
- package/dist/cli/src/config-checks.d.ts.map +1 -1
- package/dist/cli/src/harness-error.d.ts +11 -9
- package/dist/cli/src/harness-error.d.ts.map +1 -1
- package/dist/cli/src/skill-checks.d.ts +48 -74
- package/dist/cli/src/skill-checks.d.ts.map +1 -1
- package/dist/connectors/config.js +5 -5
- package/dist/connectors/index.js +19 -19
- package/dist/{connectors-DLXW27NQ.js → connectors-7EPJRVLJ.js} +22 -22
- package/dist/{connectors-DLXW27NQ.js.map → connectors-7EPJRVLJ.js.map} +1 -1
- package/dist/core/index.js +7 -6
- package/dist/core/manifest.js +2 -2
- package/dist/core/models.js +1 -1
- package/dist/core/publish-manifest.js +3 -3
- package/dist/core/ref.js +1 -1
- package/dist/core/runtime-assets.js +5 -5
- package/dist/core/src/agent-prompt-sections.d.ts +96 -4
- package/dist/core/src/agent-prompt-sections.d.ts.map +1 -1
- package/dist/core/src/check-asset.d.ts +115 -0
- package/dist/core/src/check-asset.d.ts.map +1 -0
- package/dist/core/src/harness-model.d.ts +20 -0
- package/dist/core/src/harness-model.d.ts.map +1 -0
- package/dist/core/src/index.d.ts +10 -6
- package/dist/core/src/index.d.ts.map +1 -1
- package/dist/core/src/lock.d.ts +12 -10
- package/dist/core/src/lock.d.ts.map +1 -1
- package/dist/core/src/models.d.ts +42 -11
- package/dist/core/src/models.d.ts.map +1 -1
- package/dist/core/src/publish-manifest.d.ts +17 -0
- package/dist/core/src/publish-manifest.d.ts.map +1 -1
- package/dist/core/src/repo-identity.d.ts +41 -0
- package/dist/core/src/repo-identity.d.ts.map +1 -0
- package/dist/core/src/repo-manager.d.ts +3 -9
- package/dist/core/src/repo-manager.d.ts.map +1 -1
- package/dist/core/src/walker.d.ts.map +1 -1
- package/dist/core/src/workspace-config.d.ts.map +1 -1
- package/dist/core/workspace-config.js +4 -4
- package/dist/deploy/index.js +7 -6
- package/dist/deploy/index.js.map +1 -1
- package/dist/discovery/index.js +5 -5
- package/dist/discovery/src/source-config.d.ts.map +1 -1
- package/dist/{ensure-sources-I7GCXPXK.js → ensure-sources-CI3JQJST.js} +30 -28
- package/dist/ensure-sources-CI3JQJST.js.map +1 -0
- package/dist/factory-assets/connectors/box.js +19 -19
- package/dist/factory-assets/connectors/deploy.js +19 -19
- package/dist/factory-assets/connectors/devserver.js +19 -19
- package/dist/factory-assets/connectors/flow/adapter.js +19 -19
- package/dist/factory-assets/connectors/flow/engine.js +8 -7
- package/dist/factory-assets/connectors/flow/run-flow.js +21 -21
- package/dist/factory-assets/connectors/flow.js +19 -19
- package/dist/factory-assets/connectors/git.js +19 -19
- package/dist/factory-assets/connectors/gmail.js +19 -19
- package/dist/factory-assets/connectors/googledrive.js +19 -19
- package/dist/factory-assets/connectors/local.js +19 -19
- package/dist/factory-assets/connectors/mattermost.js +19 -19
- package/dist/factory-assets/connectors/memory.js +19 -19
- package/dist/factory-assets/connectors/minio.js +19 -19
- package/dist/factory-assets/connectors/postgres.js +19 -19
- package/dist/factory-assets/connectors/s3.js +19 -19
- package/dist/factory-assets/connectors/sharepoint.js +19 -19
- package/dist/factory-assets/connectors/sqlite.js +19 -19
- package/dist/factory-assets/connectors/static-server.js +19 -19
- package/dist/factory-assets/connectors/tunnel.js +19 -19
- package/dist/factory-assets/connectors/webdav.js +19 -19
- package/dist/factory-assets/connectors/xstate-store.js +19 -19
- package/dist/factory-assets/connectors/xstate.js +19 -19
- package/dist/{flows-J64L5MGJ.js → flows-6XQAYQS4.js} +12 -11
- package/dist/{flows-J64L5MGJ.js.map → flows-6XQAYQS4.js.map} +1 -1
- package/dist/{helpers-U75UGGH5.js → helpers-26MR5QPO.js} +30 -28
- package/dist/{helpers-U75UGGH5.js.map → helpers-26MR5QPO.js.map} +1 -1
- package/dist/library/index.js +10 -10
- package/dist/library/install.js +4 -4
- package/dist/library/src/index.d.ts +1 -1
- package/dist/library/src/index.d.ts.map +1 -1
- package/dist/library/src/local/db.d.ts.map +1 -1
- package/dist/library/src/local/library-manager.d.ts.map +1 -1
- package/dist/library/src/local/library.d.ts.map +1 -1
- package/dist/library/src/local/schema.d.ts +19 -0
- package/dist/library/src/local/schema.d.ts.map +1 -1
- package/dist/library/src/user-library.d.ts +18 -0
- package/dist/library/src/user-library.d.ts.map +1 -1
- package/dist/{library-publish-57422ULT.js → library-publish-F3AKF66O.js} +71 -65
- package/dist/library-publish-F3AKF66O.js.map +1 -0
- package/dist/model-endpoint/index.js +10 -9
- package/dist/{open-library-EVUKLOV7.js → open-library-FVV6GG4I.js} +33 -31
- package/dist/{open-library-EVUKLOV7.js.map → open-library-FVV6GG4I.js.map} +1 -1
- package/dist/{open-registry-4HNCWOCN.js → open-registry-VX2BVMS5.js} +16 -16
- package/dist/{open-registry-4HNCWOCN.js.map → open-registry-VX2BVMS5.js.map} +1 -1
- package/dist/{paths-PXBWY532.js → paths-PIWSSUUG.js} +10 -9
- package/dist/{paths-PXBWY532.js.map → paths-PIWSSUUG.js.map} +1 -1
- package/dist/{plugin-store-ZC3EGZ3D.js → plugin-store-MVTW6G7J.js} +10 -9
- package/dist/{plugin-store-ZC3EGZ3D.js.map → plugin-store-MVTW6G7J.js.map} +1 -1
- package/dist/{project-HB7OYPEF.js → project-GFQP4TW6.js} +47 -45
- package/dist/{project-HB7OYPEF.js.map → project-GFQP4TW6.js.map} +1 -1
- package/dist/resolver/index.js +8 -7
- package/dist/runner/composition-content.d.ts +2 -0
- package/dist/runner/composition-content.js +29 -0
- package/dist/runner/composition-content.js.map +1 -0
- package/dist/runner/index.js +37 -36
- package/dist/runner/src/composition/content-entry.d.ts +15 -0
- package/dist/runner/src/composition/content-entry.d.ts.map +1 -0
- package/dist/runner/src/composition/content-source.d.ts +7 -0
- package/dist/runner/src/composition/content-source.d.ts.map +1 -1
- package/dist/runner/src/composition/dry-run.d.ts +5 -1
- package/dist/runner/src/composition/dry-run.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/composition/prompt-sections.d.ts +47 -20
- package/dist/runner/src/composition/prompt-sections.d.ts.map +1 -1
- package/dist/runner/src/session-builder.d.ts +3 -8
- package/dist/runner/src/session-builder.d.ts.map +1 -1
- package/dist/sdk/asset-manager.js +17 -15
- package/dist/sdk/bridge.js +16 -16
- package/dist/sdk/core.js +7 -6
- package/dist/sdk/flow.js +8 -7
- package/dist/sdk/index.js +37 -36
- package/dist/sdk/index.js.map +1 -1
- package/dist/sdk/resolver.js +8 -7
- package/dist/sdk/runner.js +37 -36
- package/dist/sdk/transport/ws/server.js +8 -7
- package/dist/sdk/transport/ws.js +8 -7
- package/dist/sdk/transport.js +8 -7
- package/dist/serve-preflight-XJS5OZML.js +138 -0
- package/dist/serve-preflight-XJS5OZML.js.map +1 -0
- package/dist/{setup-2XV6T53V.js → setup-BFEBJLYF.js} +31 -29
- package/dist/setup-BFEBJLYF.js.map +1 -0
- package/dist/{skills-5D4KDVPJ.js → skills-OCG7B5CL.js} +13 -12
- package/dist/{skills-5D4KDVPJ.js.map → skills-OCG7B5CL.js.map} +1 -1
- package/dist/source-P6JPZYWP.js +93 -0
- package/dist/{source-VXE3RSSA.js.map → source-P6JPZYWP.js.map} +1 -1
- package/dist/{source-manifest-publish-IIVQLM67.js → source-manifest-publish-XBFHEURV.js} +51 -49
- package/dist/source-manifest-publish-XBFHEURV.js.map +1 -0
- package/dist/transport/index.js +8 -7
- package/dist/transport/ws/server.js +8 -7
- package/dist/transport/ws.js +8 -7
- package/dist/tui/index.js +37 -36
- package/dist/tui/index.js.map +1 -1
- package/dist/types/src/runtime.d.ts +6 -0
- package/dist/types/src/runtime.d.ts.map +1 -1
- package/dist/workspace-plugin/adapters/mcp.js +26 -26
- package/dist/workspace-plugin/adapters/omp.js +14 -14
- package/dist/workspace-plugin/index.js +1 -1
- package/package.json +7 -1
- package/dist/asset-feeds-PM7FKHJP.js.map +0 -1
- package/dist/chunk-2RVEYDQK.js +0 -110
- package/dist/chunk-2RVEYDQK.js.map +0 -1
- package/dist/chunk-6WIZC6GM.js.map +0 -1
- package/dist/chunk-7FXOOUOC.js.map +0 -1
- package/dist/chunk-7HRZACI4.js.map +0 -1
- package/dist/chunk-7LJUK5JK.js.map +0 -1
- package/dist/chunk-7VBD5XUM.js.map +0 -1
- package/dist/chunk-A4VKIVGB.js.map +0 -1
- package/dist/chunk-BNLXZXZN.js.map +0 -1
- package/dist/chunk-DRUAQ7IY.js.map +0 -1
- package/dist/chunk-IYXOSBQ4.js.map +0 -1
- package/dist/chunk-LBJCOEXH.js.map +0 -1
- package/dist/chunk-MEU2HHGV.js.map +0 -1
- package/dist/chunk-MS2IXLTC.js.map +0 -1
- package/dist/chunk-MUQBP2BK.js.map +0 -1
- package/dist/chunk-OIWFXUZB.js.map +0 -1
- package/dist/chunk-PFBPESW7.js.map +0 -1
- package/dist/chunk-R7422XD4.js.map +0 -1
- package/dist/chunk-SXRN27TU.js.map +0 -1
- package/dist/chunk-U7EJB6LY.js.map +0 -1
- package/dist/chunk-XPSZIBPU.js.map +0 -1
- package/dist/chunk-YLKOCMU7.js.map +0 -1
- package/dist/cli/src/commands/harness-preflight.d.ts +0 -40
- package/dist/cli/src/commands/harness-preflight.d.ts.map +0 -1
- package/dist/ensure-sources-I7GCXPXK.js.map +0 -1
- package/dist/library-publish-57422ULT.js.map +0 -1
- package/dist/serve-preflight-YY3YC6GH.js +0 -61
- package/dist/serve-preflight-YY3YC6GH.js.map +0 -1
- package/dist/setup-2XV6T53V.js.map +0 -1
- package/dist/source-VXE3RSSA.js +0 -91
- package/dist/source-manifest-publish-IIVQLM67.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../runner/src/composition/errors.ts","../runner/src/mixin-resolver.ts","../runner/src/composition/content-source.ts","../runner/src/composition/types.ts","../runner/src/composition/compile.ts","../runner/src/composition/prompt-sections.ts"],"names":["path","fs","parseYaml","dir","realpathSync","existsSync"],"mappings":"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","file":"chunk-4ZNKEDYH.js","sourcesContent":["/**\n * composition/errors.ts\n *\n * Typed failures of the composition pipeline. Composition never omits an item\n * silently: a ref that cannot be served exactly as pinned ends the session\n * start (or the rebuild) with one of these.\n */\n\n/** Diagnostic code carried by a {@link CompositionError}. */\nexport type CompositionErrorCode =\n | \"composition_asset_missing\"\n | \"composition_conflict\"\n | \"composition_rebuild_required\";\n\n/** Why a {@link CompositionError} was raised (stable, for tests and tooling). */\nexport type CompositionErrorReason =\n /** No content found for the ref (nothing on disk, no lock pin bytes, no catalog hit). */\n | \"missing\"\n /** Several distinct catalog/lock candidates match the ref. */\n | \"ambiguous\"\n /** Bytes on disk differ from the hash the lock or compile manifest recorded. */\n | \"hash_mismatch\"\n /** Sub-agent composition loops back onto an agent already being composed. */\n | \"cycle\"\n /** `compile_manifest.json` has the old schema or is malformed. */\n | \"stale_manifest\"\n /** An `inline-snapshot` item has no compiled bytes. */\n | \"not_compiled\";\n\n/** A locked asset whose pinned version the registered library no longer holds (p1510). */\nexport interface LockedAssetMoved {\n /** Lock key, `kind:@publisher/name#version`. */\n key: string;\n /** Name of the library the lock entry came from. */\n library: string;\n /** Version the library holds now. */\n libraryVersion: string;\n /** Version the lock pins. */\n lockedVersion: string;\n}\n\n/**\n * Thrown by the content source, the compile writer and the resolver. `code`\n * mirrors the `skaile validate` diagnostic of the same name.\n *\n * @docLink packages/runner/capabilities#composition-error\n */\nexport class CompositionError extends Error {\n constructor(\n readonly code: CompositionErrorCode,\n readonly reason: CompositionErrorReason,\n message: string,\n /** The composes ref the failure belongs to, when there is one. */\n readonly ref?: string,\n /** Set when only `skaile update` can serve the ref: the library moved past the locked version. */\n readonly moved?: LockedAssetMoved,\n ) {\n super(message);\n this.name = \"CompositionError\";\n }\n}\n\n/** True for a {@link CompositionError} with the given code (any code when omitted). */\nexport function isCompositionError(\n err: unknown,\n code?: CompositionErrorCode,\n): err is CompositionError {\n return err instanceof CompositionError && (code === undefined || err.code === code);\n}\n","/**\n * mixin-resolver.ts\n *\n * Resolves agent composition mixin refs (persona, ruleset, knowledge) to text\n * for rendering into the agent definition at install time.\n *\n * Three ref forms:\n * Local path — \"./extra-rules.md\" or \"/abs/path/rules.md\"\n * Read directly relative to agentDir (or absolute).\n * Bare name — \"skaile-base\"\n * Resolved from repos as `${defaultKind}:skaile-base`\n * Qualified — \"persona:researcher@ext-repo#v2.0\"\n * Full AssetRef syntax; repo qualifier searches specific repo only.\n *\n * Knowledge bundles (kind=\"knowledge\") resolve to a directory — all *.md files\n * inside are loaded in priority order (same priority-based loadKnowledge logic used by the asset-manager).\n */\n\nimport fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport type { CatalogEntry } from \"@skaile/workspaces/core\";\nimport { parse as parseYaml } from \"yaml\";\n\n// ── Types ─────────────────────────────────────────────────────────────────────\n\n/**\n * A resolved mixin with its content loaded from disk.\n *\n * @docLink packages/runner/dev-guide#key-conventions\n */\nexport interface ResolvedMixin {\n /** Text content ready for system prompt injection. */\n content: string;\n /** Absolute path to the source file, for debugging. */\n source: string;\n}\n\n/**\n * Pre-built repo catalog map: repoName → CatalogEntry[].\n * Built by the caller (session-builder) from wsConfig.repositories using\n * ensureRepo() + scanRepo() from @skaile/workspaces/core/repo-manager.\n * Local repos are scanned directly; remote repos use the global cache.\n * @docLink packages/runner/dev-guide#key-conventions\n */\nexport type RepoMap = Record<string, CatalogEntry[]>;\n\n// ── Public API ────────────────────────────────────────────────────────────────\n\n/**\n * Resolve a single mixin ref to its text content.\n * Returns null if the ref cannot be resolved (missing file or unknown catalog name).\n * Never throws — callers filter nulls.\n * @docLink packages/runner/dev-guide#key-conventions\n */\nexport async function resolveMixin(\n ref: string,\n defaultKind: string,\n agentDir: string,\n repos: RepoMap,\n): Promise<ResolvedMixin | null> {\n // ── Local path ────────────────────────────────────────────────────────────\n if (ref.startsWith(\".\") || ref.startsWith(\"/\")) {\n const absPath = ref.startsWith(\"/\") ? ref : path.join(agentDir, ref);\n if (defaultKind === \"knowledge\") {\n return loadKnowledgeDir(absPath);\n }\n const content = await readFileSafe(absPath);\n if (!content) return null;\n return { content: stripFrontmatter(content).trim(), source: absPath };\n }\n\n // ── Catalog ref ───────────────────────────────────────────────────────────\n const { kind, name, repoQualifier } = parseRef(ref, defaultKind);\n const entry = findInRepos(repos, kind, name, repoQualifier);\n if (!entry) return null;\n\n if (entry.kind === \"knowledge\") {\n // knowledge.yaml source — load the sibling directory\n return loadKnowledgeDir(path.dirname(entry.source));\n }\n\n // persona, ruleset, skill, contract — read manifest file, strip frontmatter\n const raw = await readFileSafe(entry.source);\n if (!raw) return null;\n return { content: stripFrontmatter(raw).trim(), source: entry.source };\n}\n\n// ── Internal helpers ──────────────────────────────────────────────────────────\n\n/** Read a file, return empty string on any error. */\nasync function readFileSafe(filePath: string): Promise<string> {\n try {\n return await fs.readFile(filePath, \"utf-8\");\n } catch {\n return \"\";\n }\n}\n\n/** Strip YAML frontmatter (--- delimited) from markdown content. */\nexport function stripFrontmatter(text: string): string {\n return text.replace(/^---\\s*\\n[\\s\\S]*?\\n---\\s*\\n?/, \"\");\n}\n\n/**\n * Parse a mixin ref string into kind, name, and optional repo qualifier.\n * Handles: \"skaile-base\", \"persona:skaile-base\", \"ruleset:safety@skaile-ai#v2\"\n */\nfunction parseRef(\n ref: string,\n defaultKind: string,\n): { kind: string; name: string; repoQualifier: string | undefined } {\n let rest = ref.trim();\n let kind = defaultKind;\n\n // Extract kind: prefix\n const colonIdx = rest.indexOf(\":\");\n if (colonIdx !== -1) {\n kind = rest.slice(0, colonIdx).trim();\n rest = rest.slice(colonIdx + 1).trim();\n }\n\n // Extract #pin suffix (drop it — we use whatever's installed)\n const hashIdx = rest.indexOf(\"#\");\n if (hashIdx !== -1) rest = rest.slice(0, hashIdx).trim();\n\n // Extract @repo qualifier\n let repoQualifier: string | undefined;\n const atIdx = rest.indexOf(\"@\");\n if (atIdx !== -1) {\n repoQualifier = rest.slice(atIdx + 1).trim() || undefined;\n rest = rest.slice(0, atIdx).trim();\n }\n\n return { kind, name: rest, repoQualifier };\n}\n\n/** Find a CatalogEntry by kind + name across all repos (or a specific repo). */\nfunction findInRepos(\n repos: RepoMap,\n kind: string,\n name: string,\n repoQualifier: string | undefined,\n): CatalogEntry | undefined {\n const searchRepos = repoQualifier\n ? repos[repoQualifier]\n ? [repos[repoQualifier]]\n : []\n : Object.values(repos);\n\n for (const entries of searchRepos) {\n const found = entries.find((e) => e.kind === kind && e.name === name);\n if (found) return found;\n }\n return undefined;\n}\n\n/**\n * True when `text` is a knowledge `index.yaml` that declares `documents: []` —\n * a valid, empty knowledge base. A missing, unparsable or `documents`-less\n * index is not.\n */\nexport function isEmptyKnowledgeIndex(text: string): boolean {\n if (!text) return false;\n let parsed: unknown;\n try {\n parsed = parseYaml(text);\n } catch {\n return false;\n }\n if (typeof parsed !== \"object\" || parsed === null || Array.isArray(parsed)) return false;\n const documents = (parsed as { documents?: unknown }).documents;\n return Array.isArray(documents) && documents.length === 0;\n}\n\n/**\n * Load all *.md files from a knowledge directory, in priority order.\n * Reads index.yaml (same priority-based loadKnowledge format used by the asset-manager) when present.\n * Returns combined content joined with \\n\\n---\\n\\n; an empty-documents index yields the index\n * bytes (see {@link isEmptyKnowledgeIndex}); null when the dir is missing or holds neither.\n */\nexport async function loadKnowledgeDir(dir: string): Promise<ResolvedMixin | null> {\n let entries: string[];\n try {\n entries = (await fs.readdir(dir)).filter((e) => e.endsWith(\".md\"));\n } catch {\n return null;\n }\n\n // Parse index.yaml for priority ordering\n const priorityMap: Record<string, number> = {};\n const indexContent = await readFileSafe(path.join(dir, \"index.yaml\"));\n if (indexContent) {\n const pathMatches = [...indexContent.matchAll(/path:\\s*(\\S+)/g)];\n const priorityMatches = [...indexContent.matchAll(/priority:\\s*(\\d+)/g)];\n pathMatches.forEach((m, i) => {\n const filename = m[1];\n if (!filename) return;\n const priority = priorityMatches[i] ? parseInt(priorityMatches[i][1] ?? \"99\", 10) : 99;\n priorityMap[filename] = priority;\n });\n }\n\n const docs = await Promise.all(\n entries.map(async (filename) => ({\n filename,\n priority: priorityMap[filename] ?? 99,\n content: (await readFileSafe(path.join(dir, filename))).trim(),\n })),\n );\n\n const sorted = docs\n .filter((d) => d.content)\n .sort((a, b) => a.priority - b.priority || a.filename.localeCompare(b.filename));\n\n if (sorted.length === 0) {\n // A dir whose valid index declares no documents is an empty knowledge base,\n // captured as its index bytes. Anything else without content is unresolved.\n return isEmptyKnowledgeIndex(indexContent) ? { content: indexContent, source: dir } : null;\n }\n\n return {\n content: sorted.map((d) => d.content).join(\"\\n\\n---\\n\\n\"),\n source: dir,\n };\n}\n","/**\n * composition/content-source.ts\n *\n * The one place composition bytes come from. A `composes:` ref resolves, in\n * order, through\n *\n * 1. a local path (`./rules.md`, `/abs/RULES.md`, a directory holding the\n * kind's manifest) read straight from disk;\n * 2. the project lock (`skaile.lock.yaml`): a locked asset is served exactly\n * as pinned, from the store cache or the catalog checkout, and its bytes\n * are verified against the per-file hashes the lock recorded — the pin\n * wins over whatever the catalog holds now;\n * 3. the catalog: a discovery scan of the local catalog roots (the\n * `ai-assets/` tree, source clones). Several distinct matches are an\n * error, never a pick.\n *\n * Nothing here touches the network. A ref that cannot be served throws a\n * {@link CompositionError}; an item is never dropped silently.\n */\n\nimport { spawnSync } from \"node:child_process\";\nimport { createHash } from \"node:crypto\";\nimport { existsSync, mkdirSync, readdirSync, realpathSync, statSync, writeFileSync } from \"node:fs\";\nimport fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport {\n getGlobalCacheDir,\n type LockEntry,\n matchPin,\n readLock,\n resolveSkWorkspaceConfig,\n sameRepo,\n sourceCacheKey,\n} from \"@skaile/workspaces/core\";\nimport { createDefaultKindRegistry, type DiscoveredAsset } from \"@skaile/workspaces/discovery\";\nimport { knowledgeKindProvider, LocalIndex, scanLibraryRoot } from \"@skaile/workspaces/library\";\nimport type { IAssetKindRegistry } from \"@skaile/workspaces/plugins\";\nimport { CompositionError, type LockedAssetMoved } from \"./errors.js\";\nimport { loadKnowledgeDir, resolveMixin, stripFrontmatter } from \"../mixin-resolver.js\";\n\n// ---------------------------------------------------------------------------\n// Public types\n// ---------------------------------------------------------------------------\n\n/**\n * One composition asset as the content source served it.\n *\n * @docLink packages/runner/capabilities#composition-asset\n */\nexport interface CompositionAsset {\n /**\n * Where the bytes came from, in a stable spelling: `kind:@publisher/name#version`\n * for a locked or catalog asset, `local:<path>` for a file on disk.\n */\n canonicalRef: string;\n /** Asset kind the item was loaded as. */\n kind: string;\n /** Resolved version; `null` for a local file (identified by its content hash only). */\n version: string | null;\n /** SHA-256 (hex) of `content`. */\n sha256: string;\n /** Prompt-injectable text (frontmatter stripped). */\n content: string;\n /**\n * Absolute path of the primary file (or knowledge directory) the content\n * was read from. Diagnostic and traversal aid; never part of the compile\n * manifest.\n */\n location?: string;\n}\n\n/**\n * Loads composition assets. One instance serves one agent directory (relative\n * refs resolve against it).\n *\n * @docLink packages/runner/capabilities#composition-content-source\n */\nexport interface CompositionContentSource {\n /**\n * Load the asset a `composes:` ref names.\n * @throws {CompositionError} `composition_asset_missing` when nothing serves the ref;\n * `composition_conflict` when several candidates match or locked bytes drifted.\n */\n load(ref: string, kind: string): Promise<CompositionAsset>;\n /** A source for another agent directory (sub-agent traversal), sharing catalog scans. */\n scoped(agentDir: string): CompositionContentSource;\n}\n\n/**\n * Options for {@link createCompositionContentSource}.\n *\n * @docLink packages/runner/capabilities#composition-content-source\n */\nexport interface CompositionContentSourceOpts {\n /** Agent definition directory — base of relative refs. */\n agentDir: string;\n /** Project root — holds `skaile.lock.yaml` and `.skaile/cache/store`. */\n projectDir: string;\n /** Kind registry used to recognise a kind's manifest file. Defaults to the built-in providers plus `knowledge`. */\n registry?: IAssetKindRegistry;\n /**\n * Catalog roots to scan. Defaults to the `ai-assets/` tree above the project,\n * the declared `sources:` clones and the project's source cache.\n */\n catalogRoots?: readonly string[];\n /**\n * The lock entries to resolve pins against, instead of reading `skaile.lock.yaml`. A command\n * that renders before it writes its new lock (`skaile update`) hands over the entries it is\n * about to write.\n */\n lockAssets?: Record<string, LockEntry>;\n}\n\n// ---------------------------------------------------------------------------\n// Ref parsing\n// ---------------------------------------------------------------------------\n\ninterface ParsedRef {\n publisher?: string;\n name: string;\n /** Version pin (`#1.2.3`, `#^1`, legacy `@^1`). */\n pin?: string;\n}\n\n/**\n * Split a catalog ref into publisher, name and pin. Accepts the canonical\n * `kind:@publisher/name#pin`, a bare `@publisher/name` / `name`, and the legacy\n * `@publisher/name@pin` spelling. The `kind:` prefix is dropped: the item's\n * own `kind` is authoritative.\n */\nfunction parseCatalogRef(ref: string): ParsedRef {\n let rest = ref.trim();\n const kindPrefix = /^([a-z][a-z0-9-]*):(?!\\/\\/)/.exec(rest);\n if (kindPrefix) rest = rest.slice(kindPrefix[0].length);\n\n let pin: string | undefined;\n const hash = rest.indexOf(\"#\");\n if (hash !== -1) {\n pin = rest.slice(hash + 1).trim() || undefined;\n rest = rest.slice(0, hash);\n }\n\n const scoped = /^@([^/@]+)\\/([^@]+)(?:@(.+))?$/.exec(rest);\n if (scoped) {\n return { publisher: scoped[1], name: scoped[2], pin: pin ?? scoped[3]?.trim() };\n }\n const at = rest.indexOf(\"@\");\n if (at !== -1) {\n // `name@publisher` (the older mixin spelling).\n return { publisher: rest.slice(at + 1) || undefined, name: rest.slice(0, at), pin };\n }\n return { name: rest, pin };\n}\n\nconst LOCK_KEY_RE = /^([a-z][a-z0-9-]*):@([^/]+)\\/([^#]+)#(.+)$/;\n\nconst barePublisher = (p: string): string => (p.startsWith(\"@\") ? p.slice(1) : p);\n\nconst sha256Of = (text: string | Uint8Array): string =>\n createHash(\"sha256\").update(text).digest(\"hex\");\n\n// ---------------------------------------------------------------------------\n// Catalog scan (shared, lazy, per root)\n// ---------------------------------------------------------------------------\n\ninterface ScannedAsset {\n asset: DiscoveredAsset;\n root: string;\n}\n\nclass CatalogScanner {\n private readonly scans = new Map<string, ScannedAsset[]>();\n private roots: readonly string[] | undefined;\n\n constructor(\n private readonly projectDir: string,\n private readonly registry: IAssetKindRegistry,\n explicitRoots: readonly string[] | undefined,\n ) {\n this.roots = explicitRoots;\n }\n\n /** Every discovered asset of `kind` named `name` under one root (any root, declared or not). */\n findIn(root: string, kind: string, name: string): ScannedAsset[] {\n return this.scan(root).filter((hit) => hit.asset.kind === kind && hit.asset.name === name);\n }\n\n /** Every discovered asset of `kind` named `name`, across all roots. */\n find(kind: string, name: string): ScannedAsset[] {\n const out: ScannedAsset[] = [];\n for (const root of this.resolveRoots()) {\n for (const hit of this.scan(root)) {\n if (hit.asset.kind === kind && hit.asset.name === name) out.push(hit);\n }\n }\n return out;\n }\n\n private scan(root: string): ScannedAsset[] {\n let cached = this.scans.get(root);\n if (!cached) {\n try {\n cached = scanLibraryRoot(root, this.registry).assets.map((asset) => ({ asset, root }));\n } catch {\n cached = [];\n }\n this.scans.set(root, cached);\n }\n return cached;\n }\n\n private resolveRoots(): readonly string[] {\n if (!this.roots) this.roots = defaultCatalogRoots(this.projectDir);\n return this.roots;\n }\n}\n\nfunction defaultCatalogRoots(projectDir: string): string[] {\n const roots = new Set<string>();\n const add = (dir: string | undefined): void => {\n if (!dir || !existsSync(dir)) return;\n try {\n if (statSync(dir).isDirectory()) roots.add(realpathSync(dir));\n } catch {\n // unreadable root — skip\n }\n };\n\n // ai-assets/ above the project (same upward walk agent:<name> resolution uses).\n let dir = path.resolve(projectDir);\n for (let i = 0; i < 8; i++) {\n const candidate = path.join(dir, \"ai-assets\");\n if (existsSync(candidate)) {\n add(candidate);\n break;\n }\n const parent = path.resolve(dir, \"..\");\n if (parent === dir) break;\n dir = parent;\n }\n\n // Declared `sources:` clones in the global cache.\n try {\n for (const source of resolveSkWorkspaceConfig(projectDir).sources ?? []) {\n add(path.join(getGlobalCacheDir(), sourceCacheKey(source.url)));\n }\n } catch {\n // an unreadable skaile.yaml must not break composition of local refs\n }\n\n // The project's own source cache (clones / symlinks).\n const projectSources = path.join(projectDir, \".skaile\", \"cache\", \"sources\");\n try {\n for (const entry of readdirSync(projectSources)) add(path.join(projectSources, entry));\n } catch {\n // no project source cache\n }\n return [...roots];\n}\n\n/**\n * Local roots of the registered libraries a library-origin lock entry can come from: the\n * library registered under the recorded name, else (the name is machine-local) one with the\n * recorded remote URL. Empty when none is registered or its folder is gone.\n */\nasync function registeredLibraryRoots(origin: { name: string; url?: string }): Promise<string[]> {\n let index: LocalIndex | undefined;\n try {\n index = new LocalIndex();\n const libraries = await index.listSources();\n const byName = libraries.filter((l) => l.name === origin.name);\n const byUrl =\n byName.length === 0 && origin.url\n ? libraries.filter((l) => {\n const url = (l.backendConfig as { url?: unknown }).url;\n return typeof url === \"string\" && sameRepo(url, origin.url ?? \"\");\n })\n : [];\n return [...byName, ...byUrl].map((l) => l.path).filter((dir) => existsSync(dir));\n } catch {\n return [];\n } finally {\n index?.close();\n }\n}\n\n// ---------------------------------------------------------------------------\n// Content source\n// ---------------------------------------------------------------------------\n\n/**\n * Create the content source for one agent directory.\n *\n * @param opts - Agent dir, project dir and optional registry / catalog roots.\n * @returns A {@link CompositionContentSource} that resolves local, lock-pinned and catalog refs.\n * @docLink packages/runner/capabilities#composition-content-source\n */\nexport function createCompositionContentSource(\n opts: CompositionContentSourceOpts,\n): CompositionContentSource {\n const registry = opts.registry ?? createDefaultKindRegistry([knowledgeKindProvider]);\n const scanner = new CatalogScanner(opts.projectDir, registry, opts.catalogRoots);\n return new DefaultCompositionContentSource(\n path.resolve(opts.agentDir),\n path.resolve(opts.projectDir),\n registry,\n scanner,\n opts.lockAssets,\n );\n}\n\nclass DefaultCompositionContentSource implements CompositionContentSource {\n private lockLoaded: boolean;\n private lockAssets: Record<string, LockEntry>;\n\n constructor(\n private readonly agentDir: string,\n private readonly projectDir: string,\n private readonly registry: IAssetKindRegistry,\n private readonly scanner: CatalogScanner,\n private readonly givenLock?: Record<string, LockEntry>,\n ) {\n this.lockLoaded = givenLock !== undefined;\n this.lockAssets = givenLock ?? {};\n }\n\n scoped(agentDir: string): CompositionContentSource {\n return new DefaultCompositionContentSource(\n path.resolve(agentDir),\n this.projectDir,\n this.registry,\n this.scanner,\n this.givenLock,\n );\n }\n\n async load(ref: string, kind: string): Promise<CompositionAsset> {\n if (ref.startsWith(\".\") || ref.startsWith(\"/\")) return this.loadLocal(ref, kind);\n const parsed = parseCatalogRef(ref);\n if (!parsed.name) {\n throw new CompositionError(\n \"composition_asset_missing\",\n \"missing\",\n `\"${ref}\" (${kind}): not a resolvable ref`,\n ref,\n );\n }\n const locked = this.lockCandidate(ref, kind, parsed);\n if (locked) return this.loadLocked(ref, kind, locked);\n return this.loadFromCatalog(ref, kind, parsed);\n }\n\n // ── local ────────────────────────────────────────────────────────────────\n\n private async loadLocal(ref: string, kind: string): Promise<CompositionAsset> {\n const absPath = ref.startsWith(\"/\") ? ref : path.join(this.agentDir, ref);\n let target = absPath;\n let resolved = await resolveMixin(ref, kind, this.agentDir, {});\n if (!resolved && kind !== \"knowledge\" && isDirectory(absPath)) {\n const manifest = this.manifestInDir(kind, absPath);\n if (manifest) {\n target = manifest;\n resolved = await resolveMixin(manifest, kind, this.agentDir, {});\n }\n }\n if (!resolved) {\n throw new CompositionError(\n \"composition_asset_missing\",\n \"missing\",\n `\"${ref}\" (${kind}): no content at ${absPath}`,\n ref,\n );\n }\n return {\n canonicalRef: `local:${this.relativeToProject(target)}`,\n kind,\n version: null,\n sha256: sha256Of(resolved.content),\n content: resolved.content,\n location: resolved.source,\n };\n }\n\n private manifestInDir(kind: string, dir: string): string | undefined {\n const provider = this.registry.getProvider(kind);\n for (const name of readdirSync(dir).sort()) {\n const matches = provider ? provider.matchesPath(name) : name === `${kind.toUpperCase()}.md`;\n if (matches && statSync(path.join(dir, name)).isFile()) return path.join(dir, name);\n }\n return undefined;\n }\n\n private relativeToProject(abs: string): string {\n const rel = path.relative(this.projectDir, abs).split(path.sep).join(\"/\");\n return rel.startsWith(\"..\") ? abs : rel;\n }\n\n // ── lock pin ─────────────────────────────────────────────────────────────\n\n private lockCandidate(\n ref: string,\n kind: string,\n parsed: ParsedRef,\n ): { key: string; publisher: string; name: string; version: string; entry: LockEntry } | null {\n if (!this.lockLoaded) {\n this.lockLoaded = true;\n try {\n this.lockAssets = readLock(path.join(this.projectDir, \"skaile.lock.yaml\"))?.assets ?? {};\n } catch (err) {\n throw new CompositionError(\n \"composition_conflict\",\n \"stale_manifest\",\n `skaile.lock.yaml is unreadable: ${err instanceof Error ? err.message : String(err)}`,\n ref,\n );\n }\n }\n const matches: Array<{\n key: string;\n publisher: string;\n name: string;\n version: string;\n entry: LockEntry;\n }> = [];\n for (const [key, entry] of Object.entries(this.lockAssets)) {\n const m = LOCK_KEY_RE.exec(key);\n if (!m || m[1] !== kind || m[3] !== parsed.name) continue;\n if (parsed.publisher && barePublisher(parsed.publisher) !== m[2]) continue;\n if (parsed.pin && !matchPin(parsed.pin, m[4])) continue;\n matches.push({ key, publisher: m[2], name: m[3], version: m[4], entry });\n }\n if (matches.length > 1) {\n throw new CompositionError(\n \"composition_conflict\",\n \"ambiguous\",\n `\"${ref}\" (${kind}): skaile.lock.yaml pins ${matches.length} matching assets (${matches\n .map((x) => x.key)\n .join(\", \")}) — qualify the ref with a publisher and version`,\n ref,\n );\n }\n return matches[0] ?? null;\n }\n\n private async loadLocked(\n ref: string,\n kind: string,\n pin: { key: string; publisher: string; name: string; version: string; entry: LockEntry },\n ): Promise<CompositionAsset> {\n const { entry } = pin;\n const storeDir = path.join(\n this.projectDir,\n \".skaile\",\n \"cache\",\n \"store\",\n pin.publisher,\n kind,\n pin.name,\n pin.version,\n );\n\n // Lock paths are repo-relative; the asset dir (store cache or checkout) holds them minus\n // the directory prefix they all share.\n const prefix = commonDirPrefix(entry.files.map((f) => f.path));\n const strip = (p: string): string =>\n prefix && p.startsWith(`${prefix}/`) ? p.slice(prefix.length + 1) : p;\n\n // 1. Store cache: the exact pinned bytes, flat under <store>/<pub>/<kind>/<name>/<version>.\n if (isDirectory(storeDir) && entry.files.length > 0) {\n await this.verifyFiles(ref, pin.key, entry, (p) => path.join(storeDir, strip(p)));\n const primary = this.primaryOf(\n kind,\n entry.files.map((f) => f.path),\n );\n return this.readAsset(\n kind,\n pin.key,\n pin.version,\n path.join(storeDir, strip(primary)),\n storeDir,\n );\n }\n\n // 2. A catalog checkout holding the pinned version; a library-origin asset also\n // reads from the registered library its lock entry records (it has no source clone).\n const holdsPin = (h: ScannedAsset): boolean =>\n h.asset.version === pin.version && barePublisher(h.asset.publisher) === pin.publisher;\n let hit = this.scanner.find(kind, pin.name).find(holdsPin);\n if (!hit && entry.library) {\n for (const root of await registeredLibraryRoots(entry.library)) {\n hit = this.scanner.findIn(root, kind, pin.name).find(holdsPin);\n if (hit) break;\n }\n }\n if (!hit) {\n // A source entry keeps its own commit: the shared clone may sit on another one.\n const atCommit = await this.loadAtLockedCommit(ref, kind, pin, strip);\n if (atCommit) return atCommit;\n // The registered library holds the asset at another version: the pinned bytes are gone\n // and only `skaile update` moves the lock to the library's copy (p1510), as for a skill.\n let moved: LockedAssetMoved | undefined;\n if (entry.library) {\n for (const root of await registeredLibraryRoots(entry.library)) {\n const other = this.scanner\n .findIn(root, kind, pin.name)\n .find((h) => barePublisher(h.asset.publisher) === pin.publisher);\n if (other?.asset.version) {\n moved = {\n key: pin.key,\n library: entry.library.name,\n libraryVersion: other.asset.version,\n lockedVersion: pin.version,\n };\n break;\n }\n }\n }\n throw new CompositionError(\n \"composition_asset_missing\",\n \"missing\",\n moved\n ? `\"${ref}\" (${kind}): skaile.lock.yaml pins ${pin.key} but library \"${moved.library}\" is at ${moved.libraryVersion} — run \\`skaile update\\` to move the lock to it`\n : `\"${ref}\" (${kind}): skaile.lock.yaml pins ${pin.key} but no bytes for it are on disk — run \\`skaile install\\``,\n ref,\n moved,\n );\n }\n const assetRoot = hit.asset.fileFilter.assetRoot;\n if (entry.files.length > 0) {\n try {\n await this.verifyFiles(ref, pin.key, entry, (p) => path.join(assetRoot, strip(p)));\n } catch (err) {\n // Same version, other bytes: the clone is on another commit than the entry's own.\n const atCommit = await this.loadAtLockedCommit(ref, kind, pin, strip);\n if (atCommit) return atCommit;\n throw err;\n }\n } else if (entry.library?.sha256 && entry.library.sha256 !== hit.asset.sha256) {\n throw new CompositionError(\n \"composition_conflict\",\n \"hash_mismatch\",\n `\"${ref}\" (${kind}): ${pin.key} was locked from a library at ${entry.library.sha256.slice(0, 12)}… but the catalog now holds ${hit.asset.sha256.slice(0, 12)}…`,\n ref,\n );\n }\n return this.readAsset(kind, pin.key, pin.version, hit.asset.manifestPath, assetRoot);\n }\n\n /**\n * A source-origin entry's bytes at ITS locked commit, read from the git objects of a source\n * clone that holds the commit (the clone's checkout never moves) and staged under the\n * project cache. `null` when the entry is not a source entry or no clone holds the commit; the\n * staged bytes are verified against the lock like any other.\n */\n private async loadAtLockedCommit(\n ref: string,\n kind: string,\n pin: { key: string; publisher: string; name: string; version: string; entry: LockEntry },\n strip: (p: string) => string,\n ): Promise<CompositionAsset | null> {\n const { entry } = pin;\n const source = entry.source;\n if (!source || entry.library || entry.origin === \"store\" || entry.files.length === 0) {\n return null;\n }\n // The value goes to git as an argument: only a full sha, never a ref name, `-` option or zeros.\n if (!/^[0-9a-f]{40}$/.test(source.commit) || /^0+$/.test(source.commit)) return null;\n const clones = [path.join(getGlobalCacheDir(), sourceCacheKey(source.url))];\n const projectSources = path.join(this.projectDir, \".skaile\", \"cache\", \"sources\");\n try {\n for (const e of readdirSync(projectSources)) clones.push(path.join(projectSources, e));\n } catch {\n // no project source cache\n }\n const git = (dir: string, args: string[]) =>\n spawnSync(\"git\", [\"-C\", dir, ...args], {\n stdio: \"pipe\",\n maxBuffer: 256 * 1024 * 1024,\n env: { ...process.env, GIT_TERMINAL_PROMPT: \"0\" },\n });\n const clone = clones.find(\n (dir) =>\n existsSync(dir) && git(dir, [\"cat-file\", \"-e\", `${source.commit}^{commit}`]).status === 0,\n );\n if (!clone) return null;\n const stageDir = path.join(\n this.projectDir,\n \".skaile\",\n \"cache\",\n \"source-commits\",\n source.commit,\n pin.publisher,\n kind,\n pin.name,\n pin.version,\n );\n for (const file of entry.files) {\n const shown = git(clone, [\"show\", `${source.commit}:${file.path}`]);\n if (shown.status !== 0) return null;\n const dest = path.join(stageDir, strip(file.path));\n mkdirSync(path.dirname(dest), { recursive: true });\n writeFileSync(dest, shown.stdout);\n }\n await this.verifyFiles(ref, pin.key, entry, (p) => path.join(stageDir, strip(p)));\n const primary = this.primaryOf(\n kind,\n entry.files.map((f) => f.path),\n );\n return this.readAsset(\n kind,\n pin.key,\n pin.version,\n path.join(stageDir, strip(primary)),\n stageDir,\n );\n }\n\n private async verifyFiles(\n ref: string,\n key: string,\n entry: LockEntry,\n locate: (lockPath: string) => string,\n ): Promise<void> {\n for (const file of entry.files) {\n const abs = locate(file.path);\n let bytes: Uint8Array;\n try {\n bytes = await fs.readFile(abs);\n } catch {\n throw new CompositionError(\n \"composition_asset_missing\",\n \"missing\",\n `\"${ref}\": ${key} lists ${file.path} but ${abs} is missing — run \\`skaile install\\``,\n ref,\n );\n }\n const actual = sha256Of(bytes);\n if (actual !== file.sha256) {\n throw new CompositionError(\n \"composition_conflict\",\n \"hash_mismatch\",\n `\"${ref}\": ${file.path} of ${key} is ${actual.slice(0, 12)}… on disk but skaile.lock.yaml pins ${file.sha256.slice(0, 12)}… — run \\`skaile install\\` to restore it`,\n ref,\n );\n }\n }\n }\n\n private primaryOf(kind: string, paths: readonly string[]): string {\n const provider = this.registry.getProvider(kind);\n const hit = provider ? paths.find((p) => provider.matchesPath(p)) : undefined;\n return hit ?? paths[0] ?? \"\";\n }\n\n // ── catalog ──────────────────────────────────────────────────────────────\n\n private async loadFromCatalog(\n ref: string,\n kind: string,\n parsed: ParsedRef,\n ): Promise<CompositionAsset> {\n const wantPublisher = parsed.publisher ? barePublisher(parsed.publisher) : undefined;\n const candidates = this.scanner\n .find(kind, parsed.name)\n .filter((h) => !wantPublisher || barePublisher(h.asset.publisher) === wantPublisher)\n .filter((h) => matchPin(parsed.pin, h.asset.version));\n\n // The same asset reached through two roots (symlinked clone) is one candidate.\n const distinct = new Map<string, ScannedAsset>();\n for (const c of candidates) {\n distinct.set(`${c.asset.publisher}/${c.asset.name}#${c.asset.version}:${c.asset.sha256}`, c);\n }\n if (distinct.size === 0) {\n throw new CompositionError(\n \"composition_asset_missing\",\n \"missing\",\n `\"${ref}\" (${kind}): not in skaile.lock.yaml and not found in the local catalog`,\n ref,\n );\n }\n if (distinct.size > 1) {\n throw new CompositionError(\n \"composition_conflict\",\n \"ambiguous\",\n `\"${ref}\" (${kind}): ${distinct.size} catalog assets match (${[...distinct.values()]\n .map((c) => `@${barePublisher(c.asset.publisher)}/${c.asset.name}#${c.asset.version}`)\n .join(\", \")}) — qualify the ref with a publisher and version`,\n ref,\n );\n }\n const { asset } = [...distinct.values()][0]!;\n const canonical = `${kind}:@${barePublisher(asset.publisher)}/${asset.name}#${asset.version}`;\n return this.readAsset(\n kind,\n canonical,\n asset.version,\n asset.manifestPath,\n asset.fileFilter.assetRoot,\n );\n }\n\n // ── shared read ──────────────────────────────────────────────────────────\n\n private async readAsset(\n kind: string,\n canonicalRef: string,\n version: string,\n primaryPath: string,\n assetRoot: string,\n ): Promise<CompositionAsset> {\n let content: string;\n let location = primaryPath;\n if (kind === \"knowledge\") {\n const dir =\n path.basename(primaryPath) === \"knowledge.yaml\" ? path.dirname(primaryPath) : assetRoot;\n const loaded = await loadKnowledgeDir(dir);\n if (!loaded) {\n throw new CompositionError(\n \"composition_asset_missing\",\n \"missing\",\n `\"${canonicalRef}\": knowledge directory ${dir} holds no documents`,\n canonicalRef,\n );\n }\n content = loaded.content;\n location = dir;\n } else {\n let raw: string;\n try {\n raw = await fs.readFile(primaryPath, \"utf-8\");\n } catch {\n throw new CompositionError(\n \"composition_asset_missing\",\n \"missing\",\n `\"${canonicalRef}\": ${primaryPath} is not readable`,\n canonicalRef,\n );\n }\n content = stripFrontmatter(raw).trim();\n }\n return { canonicalRef, kind, version, sha256: sha256Of(content), content, location };\n }\n}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nfunction isDirectory(p: string): boolean {\n try {\n return statSync(p).isDirectory();\n } catch {\n return false;\n }\n}\n\n/** Longest directory prefix shared by every path (`\"\"` when there is none). */\nfunction commonDirPrefix(paths: readonly string[]): string {\n if (paths.length === 0) return \"\";\n const split = paths.map((p) => p.split(\"/\").slice(0, -1));\n const first = split[0]!;\n let n = first.length;\n for (const parts of split) {\n let i = 0;\n while (i < n && i < parts.length && parts[i] === first[i]) i++;\n n = i;\n }\n return first.slice(0, n).join(\"/\");\n}\n\n/**\n * Hash helper shared by the compile writer and the resolver: the hash a\n * {@link CompositionAsset} / compile entry records for `content`.\n */\nexport function hashContent(content: string): string {\n return sha256Of(content);\n}\n","/**\n * composition/types.ts\n *\n * Shared types for the agent composition module (Task 1.7).\n *\n * Defines the binding system, compile manifest schema, and the\n * resolved composition result that the runner consumes at session start.\n */\n\nimport type { AgentComposeItem, Binding } from \"@skaile/workspaces/types/manifests\";\n\n// ---------------------------------------------------------------------------\n// Re-export from types\n// ---------------------------------------------------------------------------\n\nexport type { AgentComposeItem, Binding };\n\n// ---------------------------------------------------------------------------\n// Kind-to-binding defaults\n// ---------------------------------------------------------------------------\n\n/**\n * Default binding by asset kind.\n *\n * Per the spec: soul -> inline-snapshot, ruleset -> inline-live,\n * everything else (skill, knowledge, connector, etc.) -> discoverable,\n * agent -> delegate (a sub-agent the harness spawns natively; `run` is opt-in).\n * A kind with no entry here has no default: {@link resolveBinding} throws\n * {@link UnknownCompositionKindError} rather than guessing.\n */\nconst KIND_BINDING_DEFAULTS: Record<string, Binding> = {\n soul: \"inline-snapshot\",\n persona: \"inline-snapshot\",\n ruleset: \"inline-live\",\n skill: \"discoverable\",\n knowledge: \"discoverable\",\n connector: \"discoverable\",\n prompt: \"inline-live\",\n flow: \"discoverable\",\n \"mcp-server\": \"discoverable\",\n contract: \"inline-live\",\n agent: \"delegate\",\n};\n\n/**\n * Thrown by {@link resolveBinding} when a composition item has no explicit\n * `binding` and its `kind` has no default. `skaile validate` reports the same\n * condition earlier as `unknown_asset_kind`.\n */\nexport class UnknownCompositionKindError extends Error {\n readonly code = \"unknown_asset_kind\";\n constructor(\n readonly kind: string,\n readonly ref: string,\n ) {\n super(`composes item \"${ref}\" has unknown asset kind \"${kind}\" and no explicit binding`);\n this.name = \"UnknownCompositionKindError\";\n }\n}\n\n/**\n * Resolve the effective binding for a composition item.\n * Uses explicit `binding` if set, otherwise falls back to kind default.\n *\n * @param item - A single entry from an agent manifest's `composes:` list.\n * @returns The effective {@link Binding} — explicit value when set, otherwise\n * the kind-specific default (e.g. `soul` → `inline-snapshot`, `skill` → `discoverable`).\n * @throws {UnknownCompositionKindError} when no `binding` is set and the kind has no default.\n * @docLink packages/runner/capabilities#resolve-binding\n */\nexport function resolveBinding(item: AgentComposeItem): Binding {\n if (item.binding) return item.binding;\n if (!Object.hasOwn(KIND_BINDING_DEFAULTS, item.kind)) {\n throw new UnknownCompositionKindError(item.kind, item.ref);\n }\n return KIND_BINDING_DEFAULTS[item.kind]!;\n}\n\n// ---------------------------------------------------------------------------\n// Compile manifest (written to <agent>/compile_manifest.json)\n// ---------------------------------------------------------------------------\n\n/**\n * Single entry in the agent's `compile_manifest.json`. Records the resolved\n * ref, version, content hash, effective binding and the captured bytes of one\n * composition item at the time of the last `skaile rebuild` run.\n *\n * @docLink packages/runner/capabilities#compile-manifest-entry\n */\nexport interface CompileManifestEntry {\n /** The `composes[].ref` exactly as written in agent.yaml. */\n asset_ref: string;\n /** The item's asset kind. */\n kind: string;\n /** Where the bytes actually came from (`kind:@publisher/name#version` or `local:<path>`). */\n resolved_ref: string;\n /** Resolved version; `null` for a local file. */\n version: string | null;\n /** SHA256 of `content` (recomputed on every read). */\n hash: string;\n /** Effective binding. */\n binding: Binding;\n /** ISO timestamp when this entry was resolved. */\n resolved_at: string;\n /** The captured bytes: what `inline-snapshot` serves and `discoverable` hands out on invocation. */\n content: string;\n}\n\n/**\n * Root structure of `compile_manifest.json` written by `skaile rebuild`.\n * Tracks the prompt version counter and all resolved composition entries.\n * The runner serves `inline-snapshot` and `discoverable` content from these\n * entries and never from the live sources.\n *\n * @docLink packages/runner/capabilities#compile-manifest\n */\nexport interface CompileManifest {\n /** Compile manifest schema version (1 was the hash-only format; it must be rebuilt). */\n schema_version: 2;\n /** Prompt version — bumped on every rebuild */\n prompt_version: number;\n /** Entries for each composition item */\n entries: CompileManifestEntry[];\n /** ISO timestamp of the last rebuild */\n compiled_at: string;\n}\n\n/**\n * The bytes one run of an agent uses for every non-snapshot composition item,\n * captured when the run starts and reused when the run resumes. Stored beside\n * the session's persisted state (`<project>/.skaile/composition-runs/<id>.json`).\n *\n * @docLink packages/runner/capabilities#composition-run-snapshot\n */\nexport interface CompositionRunSnapshot {\n schema_version: 1;\n /** Session id (or run id) the snapshot belongs to. */\n session_id: string;\n /** ISO timestamp of capture. */\n captured_at: string;\n /** Compile `prompt_version` the run started under (`null` when never compiled). */\n prompt_version: number | null;\n /** One entry per resolved item (content items and sub-agent items). */\n items: CompileManifestEntry[];\n}\n\n// ---------------------------------------------------------------------------\n// Resolved composition result (consumed by runner at session start)\n// ---------------------------------------------------------------------------\n\n/**\n * A resolved inline content block for system prompt injection.\n *\n * @docLink packages/runner/capabilities#inline-block\n */\nexport interface InlineBlock {\n /** Source ref for debugging */\n ref: string;\n /** Asset kind */\n kind: string;\n /** The text content to inject */\n content: string;\n /** Binding mode that produced this block */\n binding: \"inline-live\" | \"inline-snapshot\";\n /**\n * True for the agent's own convention files (SOUL.md, RULES.md, DUTIES.md).\n * Harnesses carry those natively (rendered at install), so the runner does\n * not repeat them in the live system prompt.\n */\n implicit?: boolean;\n}\n\n/**\n * A resolved discoverable item (becomes a tool-list entry).\n *\n * @docLink packages/runner/capabilities#discoverable-entry\n */\nexport interface DiscoverableEntry {\n /** Source ref */\n ref: string;\n /** Asset kind */\n kind: string;\n /** Tool name for capability registry */\n name: string;\n /** One-line description */\n description: string;\n /** Full content (loaded on demand when the tool is invoked) */\n content: string;\n}\n\n/**\n * One composition item as resolved for a run — what `skaile run --dry-run`\n * prints and what the run snapshot is built from.\n *\n * @docLink packages/runner/capabilities#resolved-composition-item\n */\nexport interface ResolvedCompositionItem {\n /** `composes[].ref` as written. */\n ref: string;\n kind: string;\n binding: Binding;\n /** Where the bytes came from (`kind:@publisher/name#version` or `local:<path>`). */\n resolvedRef: string;\n version: string | null;\n /** SHA256 of `content`. */\n hash: string;\n content: string;\n /**\n * `compiled` — served from the compile manifest; `run-snapshot` — reused from\n * the run's own capture (resume); `source` — read from the content source now.\n */\n origin: \"compiled\" | \"run-snapshot\" | \"source\";\n}\n\n/**\n * The full result of resolving an agent's composes: field.\n *\n * @docLink packages/runner/capabilities#resolved-composition\n */\nexport interface ResolvedComposition {\n /** Blocks to inline into the system prompt (inline-live + inline-snapshot) */\n inlineBlocks: InlineBlock[];\n /** Items to register as discoverable capabilities */\n discoverableEntries: DiscoverableEntry[];\n /** Every resolved content item, in `composes:` order (sub-agent items carry no content and are absent). */\n items: ResolvedCompositionItem[];\n /** Non-fatal notes */\n warnings: string[];\n}\n","/**\n * composition/compile.ts\n *\n * Implements `skaile rebuild <agent>` — resolves every `composes:` item through\n * the content source, captures kind, resolved ref and bytes, bumps the prompt\n * version and writes `<agent>/compile_manifest.json` (schema 2).\n *\n * The compile manifest is what an agent runs from: `inline-snapshot` serves its\n * bytes and `discoverable` items hand out its bytes on invocation. A later\n * change to a local file or to the catalog changes nothing until the next\n * `skaile rebuild`.\n */\n\nimport { existsSync, realpathSync } from \"node:fs\";\nimport fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport type { AgentComposeItem } from \"@skaile/workspaces/types/manifests\";\nimport { BindingSchema } from \"@skaile/workspaces/types/manifests\";\nimport { parse as parseYaml } from \"yaml\";\nimport * as z from \"zod\";\nimport {\n type CompositionAsset,\n type CompositionContentSource,\n hashContent,\n} from \"./content-source.js\";\nimport { CompositionError } from \"./errors.js\";\nimport { type CompileManifest, type CompileManifestEntry, resolveBinding } from \"./types.js\";\n\n// ---------------------------------------------------------------------------\n// Constants\n// ---------------------------------------------------------------------------\n\n/**\n * Filename for the agent compile manifest written by `skaile rebuild`.\n *\n * @docLink packages/runner/capabilities#compile-composition\n */\nexport const COMPILE_MANIFEST_FILENAME = \"compile_manifest.json\";\n\n/** One captured composition item, as stored in `compile_manifest.json` and in run snapshots. */\nexport const CompileManifestEntrySchema = z.object({\n asset_ref: z.string().min(1),\n kind: z.string().min(1),\n resolved_ref: z.string().min(1),\n version: z.string().nullable(),\n hash: z.string().regex(/^[0-9a-f]{64}$/),\n binding: BindingSchema,\n resolved_at: z.string(),\n content: z.string(),\n});\n\nconst CompileManifestSchema = z.object({\n schema_version: z.literal(2),\n prompt_version: z.number().int().nonnegative(),\n compiled_at: z.string(),\n entries: z.array(CompileManifestEntrySchema),\n});\n\n/** Marks the pre-content (hash-only) manifest format. */\nconst StaleSchemaMarker = z.object({ schema_version: z.literal(1) });\n\n/** The slice of a sub-agent's agent.yaml the cycle walk reads. */\nconst NestedAgentComposes = z.object({ composes: z.array(z.unknown()) });\nconst NestedAgentItem = z.object({ kind: z.literal(\"agent\"), ref: z.string() });\n\n// ---------------------------------------------------------------------------\n// Options\n// ---------------------------------------------------------------------------\n\n/**\n * Options for {@link compileComposition}.\n *\n * @docLink packages/runner/capabilities#compile-composition\n */\nexport interface CompileOpts {\n /** Path to the agent directory (where agent.yaml and compile_manifest.json live) */\n agentDir: string;\n /** The agent's composes: items (may be empty — an empty composition is valid). */\n items: AgentComposeItem[];\n /** Where composition bytes come from. */\n source: CompositionContentSource;\n}\n\n/**\n * Result returned by {@link compileComposition}.\n *\n * @docLink packages/runner/capabilities#compile-composition\n */\nexport interface CompileResult {\n /** The written compile manifest */\n manifest: CompileManifest;\n /** Path to the written file */\n manifestPath: string;\n /** Number of entries written (every item resolves or the compile throws) */\n resolvedCount: number;\n}\n\n// ---------------------------------------------------------------------------\n// Public API\n// ---------------------------------------------------------------------------\n\n/**\n * Compile (rebuild) the agent's composition.\n *\n * 1. Resolves ALL items through the content source (any unresolvable item throws)\n * 2. Rejects sub-agent loops (`agent` items that compose their own ancestor)\n * 3. Bumps prompt_version (continuing a schema-1 file's counter)\n * 4. Writes compile_manifest.json atomically\n *\n * @param opts - Compile options including agentDir, items and the content source.\n * @returns A {@link CompileResult} with the written manifest.\n * @throws {CompositionError} `composition_asset_missing` / `composition_conflict` for an item that cannot be served.\n * @docLink packages/runner/capabilities#compile-composition\n */\nexport async function compileComposition(opts: CompileOpts): Promise<CompileResult> {\n const { agentDir, items, source } = opts;\n const manifestPath = path.join(agentDir, COMPILE_MANIFEST_FILENAME);\n\n const nextVersion = (await readPromptVersion(manifestPath)) + 1;\n\n const loaded = new Map<string, CompositionAsset>();\n const entries: CompileManifestEntry[] = [];\n const resolvedAt = new Date().toISOString();\n for (const item of items) {\n const binding = resolveBinding(item);\n const cacheKey = `${item.kind}\\u0000${item.ref}`;\n let asset = loaded.get(cacheKey);\n if (!asset) {\n asset = await source.load(item.ref, item.kind);\n loaded.set(cacheKey, asset);\n }\n entries.push({\n asset_ref: item.ref,\n kind: item.kind,\n resolved_ref: asset.canonicalRef,\n version: asset.version,\n hash: asset.sha256,\n binding,\n resolved_at: resolvedAt,\n content: asset.content,\n });\n }\n\n await assertAcyclicSubagents(agentDir, items, source);\n\n const manifest: CompileManifest = {\n schema_version: 2,\n prompt_version: nextVersion,\n entries,\n compiled_at: new Date().toISOString(),\n };\n\n // Write atomically: temp file + rename to avoid corruption on interrupt\n const tmpPath = `${manifestPath}.tmp`;\n await fs.writeFile(tmpPath, `${JSON.stringify(manifest, null, 2)}\\n`, \"utf-8\");\n await fs.rename(tmpPath, manifestPath);\n\n return { manifest, manifestPath, resolvedCount: entries.length };\n}\n\n/**\n * Whether `<agentDir>/compile_manifest.json` already pins exactly what {@link compileComposition}\n * would write now: one entry per item, in order, with the ref, kind and binding of the item and\n * the hash of the bytes the content source serves today. `skaile add`/`install`/`update` compile\n * an agent only when this is `false`, so a pin that `skaile rebuild` wrote survives an install\n * and a changed lock revision gets a fresh pin (p413, p1310).\n *\n * @returns `false` when there is no pin, it is stale-schema or malformed, or any item differs.\n * @throws {CompositionError} `composition_asset_missing` / `composition_conflict` for an item the content source cannot serve.\n */\nexport async function isCompilePinCurrent(opts: CompileOpts): Promise<boolean> {\n let pinned: CompileManifest | undefined;\n try {\n pinned = await loadCompileManifestFromDir(opts.agentDir);\n } catch {\n return false;\n }\n if (!pinned || pinned.entries.length !== opts.items.length) return false;\n for (const [i, item] of opts.items.entries()) {\n const entry = pinned.entries[i]!;\n if (entry.asset_ref !== item.ref || entry.kind !== item.kind) return false;\n if (entry.binding !== resolveBinding(item)) return false;\n const asset = await opts.source.load(item.ref, item.kind);\n if (asset.sha256 !== entry.hash) return false;\n }\n return true;\n}\n\n// ---------------------------------------------------------------------------\n// Reading\n// ---------------------------------------------------------------------------\n\n/**\n * Load an existing compile_manifest.json.\n *\n * @param manifestPath - Absolute path to the manifest file.\n * @returns The parsed {@link CompileManifest}, or `undefined` when the file does not exist.\n * @throws {CompositionError} `composition_rebuild_required` for a schema-1 artifact or a malformed\n * file; `composition_conflict` when an entry's `hash` no longer matches its `content`.\n * @docLink packages/runner/capabilities#load-compile-manifest\n */\nexport async function loadCompileManifest(\n manifestPath: string,\n): Promise<CompileManifest | undefined> {\n let raw: string;\n try {\n raw = await fs.readFile(manifestPath, \"utf-8\");\n } catch {\n return undefined;\n }\n\n let json: unknown;\n try {\n json = JSON.parse(raw);\n } catch {\n throw new CompositionError(\n \"composition_rebuild_required\",\n \"stale_manifest\",\n `${manifestPath} is not valid JSON — run \\`skaile rebuild\\``,\n );\n }\n if (StaleSchemaMarker.safeParse(json).success) {\n throw new CompositionError(\n \"composition_rebuild_required\",\n \"stale_manifest\",\n `${manifestPath} is a schema-1 compile manifest (hashes only, no captured content) — run \\`skaile rebuild\\``,\n );\n }\n const parsed = CompileManifestSchema.safeParse(json);\n if (!parsed.success) {\n throw new CompositionError(\n \"composition_rebuild_required\",\n \"stale_manifest\",\n `${manifestPath} is malformed (${parsed.error.issues[0]?.path.join(\".\") || \"root\"}: ${parsed.error.issues[0]?.message}) — run \\`skaile rebuild\\``,\n );\n }\n for (const entry of parsed.data.entries) {\n const actual = hashContent(entry.content);\n if (actual !== entry.hash) {\n throw new CompositionError(\n \"composition_conflict\",\n \"hash_mismatch\",\n `${manifestPath}: captured content of \"${entry.asset_ref}\" (${entry.kind}) hashes to ${actual.slice(0, 12)}… but the manifest records ${entry.hash.slice(0, 12)}… — the file was edited; run \\`skaile rebuild\\``,\n entry.asset_ref,\n );\n }\n }\n return parsed.data as CompileManifest;\n}\n\n/**\n * Load compile manifest from an agent directory, reading the file from\n * `<agentDir>/compile_manifest.json`.\n *\n * @param agentDir - Absolute path to the agent definition directory.\n * @returns The parsed {@link CompileManifest} or `undefined` when the file does not exist.\n * @throws {CompositionError} see {@link loadCompileManifest}.\n * @docLink packages/runner/capabilities#load-compile-manifest-from-dir\n */\nexport async function loadCompileManifestFromDir(\n agentDir: string,\n): Promise<CompileManifest | undefined> {\n return loadCompileManifest(path.join(agentDir, COMPILE_MANIFEST_FILENAME));\n}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\n/** The `prompt_version` of whatever schema the existing file is in (0 when absent/unreadable). */\nasync function readPromptVersion(manifestPath: string): Promise<number> {\n try {\n const parsed = JSON.parse(await fs.readFile(manifestPath, \"utf-8\"));\n return typeof parsed?.prompt_version === \"number\" ? parsed.prompt_version : 0;\n } catch {\n return 0;\n }\n}\n\nconst identityOf = (file: string): string => {\n try {\n return realpathSync(file);\n } catch {\n return file;\n }\n};\n\n/**\n * Walk `kind: agent` items depth-first; an agent that (transitively) composes\n * itself would spawn forever, so it is a `composition_conflict`.\n */\nasync function assertAcyclicSubagents(\n agentDir: string,\n items: readonly AgentComposeItem[],\n source: CompositionContentSource,\n): Promise<void> {\n const manifestFile = path.join(agentDir, \"agent.yaml\");\n const root = existsSync(manifestFile) ? identityOf(manifestFile) : identityOf(agentDir);\n\n const visit = async (\n children: readonly { kind: string; ref: string }[],\n src: CompositionContentSource,\n chain: readonly string[],\n ): Promise<void> => {\n for (const item of children) {\n if (item.kind !== \"agent\") continue;\n const asset = await src.load(item.ref, \"agent\");\n const identity = asset.location ? identityOf(asset.location) : asset.canonicalRef;\n if (chain.includes(identity)) {\n throw new CompositionError(\n \"composition_conflict\",\n \"cycle\",\n `\"${item.ref}\" (agent): sub-agent composition loops (${[...chain, identity]\n .map((p) => path.basename(path.dirname(p)) || p)\n .join(\" → \")})`,\n item.ref,\n );\n }\n const nested = NestedAgentComposes.safeParse(parseYamlSafe(asset.content));\n if (!nested.success || !asset.location) continue;\n const subagents = nested.data.composes.flatMap((c) => {\n const parsedItem = NestedAgentItem.safeParse(c);\n return parsedItem.success ? [parsedItem.data] : [];\n });\n if (subagents.length === 0) continue;\n await visit(subagents, src.scoped(path.dirname(asset.location)), [...chain, identity]);\n }\n };\n\n await visit(items, source, [root]);\n}\n\nfunction parseYamlSafe(text: string): unknown {\n try {\n return parseYaml(text);\n } catch {\n return null;\n }\n}\n","/**\n * composition/prompt-sections.ts\n *\n * The agent part of the runner's live system prompt. It comes from the same\n * `assembleAgent` the install renderers bake the native agent file with, so\n * the two cannot disagree on order or text:\n * soul → `<MEMORY>` → fragments → constraints → duties → abilities → contracts\n * → composed → extensions.\n *\n * The runner adds only what the harness's native file does not carry\n * (`AGENT_PROMPT_CARRIERS` in core). Under claude-code and codex the file holds the\n * soul, constraints, composed blocks, memory seeds, duties and extensions, so the runner\n * adds a section only when the file lacks its exact text (a host-backed memory block, a file\n * rendered before the section was baked, no file). omp reads only `RULES.md` from its agent dir\n * and no `SOUL.md`, so for omp the runner adds the soul, memory, duties, composed blocks and\n * extensions itself.\n */\n\nimport { readFileSync } from \"node:fs\";\nimport { dirname, join } from \"node:path\";\nimport {\n type AgentPromptSection,\n type AgentPromptSectionsInput,\n type AssembledAgent,\n assembleAgent,\n HARNESS_TARGETS,\n harnessNameForHarnessId,\n} from \"@skaile/workspaces/core\";\nimport type { ResolvedAgentInstance } from \"./resolve-instance.js\";\n\n/** A loaded `agent.prompt-extensions` entry. */\nexport interface PromptExtensionPart {\n value: string;\n /** Path the extension was loaded from. */\n source: string;\n}\n\n/** Options of {@link buildRunnerAgentSections}. */\nexport interface BuildRunnerAgentSectionsOptions {\n /** Harness id of the session; decides what its native file carries. Default: a harness that reads the native file. */\n harness?: string;\n /** Text of the native agent file the harness reads (`.claude/agents/<id>.md`), when there is one. */\n nativeFile?: string;\n}\n\n/**\n * The one input set of the agent prompt, from what {@link resolveAgentInstance} resolved: the\n * install path bakes it into the native file, `skaile run` sends it, `--print-prompt` prints it.\n *\n * @param resolved - The resolved instance, or `null` when the session has no agent definition.\n * @param promptExtensions - Loaded `agent.prompt-extensions`, in declared order.\n */\nexport function agentPromptInput(\n resolved: ResolvedAgentInstance | null,\n promptExtensions: readonly PromptExtensionPart[],\n): AgentPromptSectionsInput {\n const blocks = resolved?.inlineBlocks ?? [];\n const joined = (kind: string): string =>\n blocks\n .filter((block) => block.implicit && block.kind === kind)\n .map((block) => block.content.trim())\n .filter(Boolean)\n .join(\"\\n\\n\");\n return {\n soul: joined(\"soul\"),\n memory: resolved?.memoryBlocks ?? [],\n duties: joined(\"prompt\"),\n composed: blocks\n .filter((block) => !block.implicit)\n .map((block) => ({ text: block.content, source: block.ref })),\n promptExtensions: promptExtensions.map((e) => ({ text: e.value, source: e.source })),\n };\n}\n\n/**\n * Assemble the agent prompt of a run.\n *\n * @param resolved - The resolved instance, or `null` when the session has no agent definition.\n * @param promptExtensions - Loaded `agent.prompt-extensions`, in declared order.\n * @param options - Harness and native file text.\n */\nexport function assembleRunnerAgent(\n resolved: ResolvedAgentInstance | null,\n promptExtensions: readonly PromptExtensionPart[],\n options: BuildRunnerAgentSectionsOptions = {},\n): AssembledAgent {\n return assembleAgent(agentPromptInput(resolved, promptExtensions), options);\n}\n\n/**\n * Build the agent sections of the live system prompt.\n *\n * @param resolved - The resolved instance, or `null` when the session has no agent definition.\n * @param promptExtensions - Loaded `agent.prompt-extensions`, in declared order.\n * @param options - Harness and native file text.\n * @returns Non-empty sections in the shared order; join `text` with the runner's section separator.\n */\nexport function buildRunnerAgentSections(\n resolved: ResolvedAgentInstance | null,\n promptExtensions: readonly PromptExtensionPart[],\n options: BuildRunnerAgentSectionsOptions = {},\n): AgentPromptSection[] {\n return assembleRunnerAgent(resolved, promptExtensions, options).runnerSections;\n}\n\n/**\n * The path of the native agent file the harness reads for the instance `agentName`, or `undefined`\n * when the harness has none: `.claude/agents/<id>.md` for claude-code and\n * `.codex/skaile-agents/<id>.md` (the identity the codex harness reads) for codex.\n *\n * @param cwd - The harness working directory the native files were rendered into.\n * @param harness - Harness id of the session.\n * @param agentName - The instance id the file is named after.\n */\nexport function nativeAgentFilePath(\n cwd: string,\n harness: string | undefined,\n agentName: string,\n): string | undefined {\n const target = harnessNameForHarnessId(harness);\n if (target === \"claude-code\") {\n return join(cwd, HARNESS_TARGETS[\"claude-code\"].local.agent, `${agentName}.md`);\n }\n if (target === \"codex\") {\n // The codex harness reads `skaile-agents/<id>.md` beside `agents/`.\n return join(\n cwd,\n dirname(HARNESS_TARGETS.codex.local.agent),\n \"skaile-agents\",\n `${agentName}.md`,\n );\n }\n return undefined;\n}\n\n/**\n * The text of the native agent file ({@link nativeAgentFilePath}), or `undefined` when the harness\n * has none or the file is not there.\n */\nexport function readNativeAgentFile(\n cwd: string,\n harness: string | undefined,\n agentName: string,\n): string | undefined {\n const file = nativeAgentFilePath(cwd, harness, agentName);\n if (!file) return undefined;\n try {\n return readFileSync(file, \"utf-8\");\n } catch {\n return undefined;\n }\n}\n"]}
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
import { createSpinner } from './chunk-NESV47MF.js';
|
|
2
|
-
import { getKindRegistry } from './chunk-
|
|
3
|
-
import { logInfo, logWarn, S, logErr, TARGET_DEFAULT_HINT, logOk, colorRef, parseHarnessFilter, requireProjectConfig, agentInstanceErrorLines, reportUnknownHarnesses, deferredWarnings, warnPlaceholderBodies, warnFilesOnlyDelegates, warnStaleHarnessCopies, formatSoftDepHint, reportLegacyOmpCopies, reportProjectConfig } from './chunk-
|
|
4
|
-
import { loadAgentManifest,
|
|
5
|
-
import { AssetManager } from './chunk-
|
|
6
|
-
import {
|
|
7
|
-
import { readLock } from './chunk-
|
|
8
|
-
import { agentSourceCacheDir, SourceEntryError, effectiveAgentInstances, resolveSkWorkspaceConfig, resolveAgentDefinitionDir, AgentRefResolutionError } from './chunk-
|
|
2
|
+
import { getKindRegistry } from './chunk-U2WPJHRA.js';
|
|
3
|
+
import { logInfo, logWarn, S, logErr, TARGET_DEFAULT_HINT, logOk, colorRef, parseHarnessFilter, requireProjectConfig, agentInstanceErrorLines, reportUnknownHarnesses, deferredWarnings, warnPlaceholderBodies, warnFilesOnlyDelegates, warnStaleHarnessCopies, formatSoftDepHint, reportLegacyOmpCopies, reportProjectConfig } from './chunk-WW22FS74.js';
|
|
4
|
+
import { loadAgentManifest, hashAgentFiles, verifyConventionItems, resolveAgentInstance } from './chunk-ZII54C3E.js';
|
|
5
|
+
import { AssetManager } from './chunk-2JUCWMIS.js';
|
|
6
|
+
import { createCompositionContentSource, isCompilePinCurrent, compileComposition, CompositionError, loadCompileManifestFromDir, isCompositionError, resolveBinding } from './chunk-4ZNKEDYH.js';
|
|
7
|
+
import { readLock } from './chunk-U7P22GEB.js';
|
|
8
|
+
import { agentSourceCacheDir, SourceEntryError, effectiveAgentInstances, resolveSkWorkspaceConfig, resolveAgentDefinitionDir, AgentRefResolutionError } from './chunk-BRAOB37W.js';
|
|
9
9
|
import { userConfigPath, globalSkaileDir } from './chunk-L5VSIPQD.js';
|
|
10
|
-
import { parseAssetRef } from './chunk-
|
|
10
|
+
import { parseAssetRef } from './chunk-HW4BDJPC.js';
|
|
11
|
+
import { effectiveComposes } from './chunk-LCXQ4LVP.js';
|
|
11
12
|
import { homedir } from 'os';
|
|
12
13
|
import path2 from 'path';
|
|
13
14
|
import * as p from '@clack/prompts';
|
|
@@ -266,7 +267,7 @@ async function runRefInstall(ref, opts) {
|
|
|
266
267
|
const spinner = createSpinner();
|
|
267
268
|
spinner.start(`Installing ${ref}`);
|
|
268
269
|
try {
|
|
269
|
-
const { openCatalogSource, openLibrary } = await import('./open-library-
|
|
270
|
+
const { openCatalogSource, openLibrary } = await import('./open-library-FVV6GG4I.js');
|
|
270
271
|
const catalog = await openCatalogSource({ projectDir: path2.resolve(opts.projectDir) });
|
|
271
272
|
if (!supportsInstallManifest(catalog)) {
|
|
272
273
|
throw new Error(
|
|
@@ -319,7 +320,7 @@ async function runYamlInstall(opts) {
|
|
|
319
320
|
}
|
|
320
321
|
if (await reportUnknownHarnesses(projectDir) > 0) process.exit(1);
|
|
321
322
|
try {
|
|
322
|
-
const { ensureSourcesCloned } = await import('./ensure-sources-
|
|
323
|
+
const { ensureSourcesCloned } = await import('./ensure-sources-CI3JQJST.js');
|
|
323
324
|
const hydrate = ensureSourcesCloned(projectDir, { quiet: true });
|
|
324
325
|
if (hydrate.cloned.length > 0) {
|
|
325
326
|
logOk(`Cloned source(s): ${hydrate.cloned.join(", ")}`);
|
|
@@ -503,7 +504,10 @@ function makeCheckCommand() {
|
|
|
503
504
|
projectDir: path2.resolve(opts.projectDir)
|
|
504
505
|
});
|
|
505
506
|
const { gaps } = await am.projectState();
|
|
506
|
-
const edited =
|
|
507
|
+
const edited = [
|
|
508
|
+
...await editedConventionFiles(path2.resolve(opts.projectDir)),
|
|
509
|
+
...await am.staleAgentFileLines()
|
|
510
|
+
];
|
|
507
511
|
const notices = [
|
|
508
512
|
...(await am.mcpNotices()).map((n) => n.text),
|
|
509
513
|
// A library that went back past the lock is no drift either (p1257).
|
|
@@ -511,7 +515,9 @@ function makeCheckCommand() {
|
|
|
511
515
|
// A lock written before it listed the instance files: the next write replaces them.
|
|
512
516
|
...am.legacyLockNotices(),
|
|
513
517
|
// An asset-named agent file an instance's file replaced: the next install removes it.
|
|
514
|
-
...am.leftoverAgentFileNotices()
|
|
518
|
+
...am.leftoverAgentFileNotices(),
|
|
519
|
+
// An agent whose `extends` parent is not there: said once at `add`, then here (v16-D11).
|
|
520
|
+
...am.missingParentNotices()
|
|
515
521
|
];
|
|
516
522
|
await am.probeStoreOrigins();
|
|
517
523
|
const notChecked = am.takeStoreNotChecked();
|
|
@@ -654,5 +660,5 @@ function makeCleanCommand() {
|
|
|
654
660
|
}
|
|
655
661
|
|
|
656
662
|
export { REF_HINT, editedConventionFiles, globalProblems, makeCheckCommand, makeCleanCommand, makeInstallCommand, pinComposedAgents, reportAgentInstances, reportContentHeld, reportInferredHarnesses, reportInstalledSoftDeps, reportMoved, reportPresetExpansions, reportRelocked, reportReplaced, reportRewritten, reportStoreNotChecked, reportStoreNotCheckedForUpdates, runPointerOnlyInstall, runYamlInstall, supportsInstallManifest };
|
|
657
|
-
//# sourceMappingURL=chunk-
|
|
658
|
-
//# sourceMappingURL=chunk-
|
|
663
|
+
//# sourceMappingURL=chunk-65SOXO7I.js.map
|
|
664
|
+
//# sourceMappingURL=chunk-65SOXO7I.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../cli/src/agent-pins.ts","../cli/src/commands/project.ts"],"names":["path","confirm"],"mappings":"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","file":"chunk-65SOXO7I.js","sourcesContent":["/**\n * The compile pin of the agents `skaile add` keeps under `.skaile/cache/agents/<name>/`.\n *\n * An agent that composes an `inline-snapshot` item (a persona, a ruleset, …) runs from\n * `compile_manifest.json`, so it cannot run without one. `add`, `install` and `update` pin\n * such an agent themselves, once per lock revision: a pin that still matches the bytes the\n * lock serves (one `skaile rebuild` wrote, or an earlier add/install) is left alone, and\n * `skaile rebuild` only refreshes it. `update` also re-runs the rebuild for any\n * agent that holds a pin, a convention-only agent (SOUL.md) included, because the update\n * moved the bytes the pin hashes.\n */\n\nimport { existsSync, readdirSync } from \"node:fs\";\nimport path from \"node:path\";\nimport { agentSourceCacheDir } from \"@skaile/workspaces/core\";\nimport {\n CompositionError,\n type CompositionContentSource,\n compileComposition,\n createCompositionContentSource,\n hashAgentFiles,\n isCompilePinCurrent,\n loadAgentManifest,\n loadCompileManifestFromDir,\n resolveBinding,\n} from \"@skaile/workspaces/runner\";\nimport { type AgentComposeItem, effectiveComposes } from \"@skaile/workspaces/types/manifests\";\nimport { logInfo, logWarn } from \"./helpers.ts\";\nimport { getKindRegistry } from \"./open-registry.ts\";\n\n/**\n * Whether `run` cannot start the agent without a compile pin: it declares an `inline-snapshot`\n * item (a persona, a ruleset bound so, ...). The convention files and the other bindings read\n * their source when no pin exists, so such an agent is left unpinned until `skaile rebuild`.\n */\nfunction needsPin(composes: readonly AgentComposeItem[]): boolean {\n try {\n return composes.some((item) => resolveBinding(item) === \"inline-snapshot\");\n } catch {\n // An item of a kind that has no binding: `run` and `rebuild` name it; nothing to pin here.\n return false;\n }\n}\n\n/**\n * Compile every cached agent of the project that declares an `inline-snapshot` composition item\n * and has no current pin. A compile that fails (an item no library or lock serves) is a warning\n * here: `skaile check` and `skaile run` raise the same error for the agent.\n *\n * @returns The names of the agents that were compiled.\n */\nexport async function pinComposedAgents(\n projectDir: string,\n opts: { repin?: boolean } = {},\n): Promise<string[]> {\n return (await pinComposedAgentsReport(projectDir, opts)).pinned;\n}\n\n/**\n * The `Missing:` line `install` prints for a composed asset the lock pins but no copy serves:\n * the same words as for a locked skill the library moved past (p1510).\n */\nfunction missingLine(err: CompositionError, agentName: string): string {\n if (err.moved) {\n const m = err.moved;\n return `${m.key} (library \"${m.library}\" is at ${m.libraryVersion}, locked ${m.lockedVersion}; \\`skaile update\\` moves the lock to it)`;\n }\n return `${err.ref ?? agentName} (agent ${agentName}: ${err.message})`;\n}\n\n/**\n * {@link pinComposedAgents}, plus the agents `run` could not start. An agent with no usable pin\n * whose locked persona or ruleset no library copy serves any more (the library moved on, or the\n * project is a fresh clone) is a `missing` line, not a warning: `install` exits 1 for it and\n * names `skaile update`, the only command that moves the lock (p1510). An agent that still has\n * its pin keeps running from it, so a library bump alone is silent.\n */\nexport async function pinComposedAgentsReport(\n projectDir: string,\n opts: { repin?: boolean } = {},\n): Promise<{ pinned: string[]; missing: string[] }> {\n const cacheDir = agentSourceCacheDir(projectDir);\n const pinned: string[] = [];\n const missing: string[] = [];\n if (!existsSync(cacheDir)) return { pinned, missing };\n for (const entry of readdirSync(cacheDir, { withFileTypes: true })) {\n if (!entry.isDirectory()) continue;\n const agentDir = path.join(cacheDir, entry.name);\n const manifest = await loadAgentManifest(agentDir);\n if (!manifest) continue;\n const wanted = !!manifest.composes?.length && needsPin(manifest.composes);\n // `update` re-runs the rebuild for an agent that was pinned: the pin hashes bytes it moved.\n if (!wanted && !(opts.repin && (await hasCompilePin(agentDir)))) continue;\n const composes = manifest.composes ?? [];\n let items: AgentComposeItem[] = [];\n const source = createCompositionContentSource({\n agentDir,\n projectDir,\n registry: getKindRegistry(),\n });\n try {\n const files = await hashAgentFiles(agentDir);\n items = effectiveComposes(\n composes,\n files.map((f) => f.path),\n );\n if (await isCompilePinCurrent({ agentDir, items, source })) continue;\n const result = await compileComposition({ agentDir, items, source });\n pinned.push(entry.name);\n logInfo(\n `Compiled agent ${manifest.name ?? entry.name} (${result.resolvedCount} composition items) → prompt v${result.manifest.prompt_version}`,\n );\n } catch (err) {\n if (err instanceof CompositionError && err.code === \"composition_asset_missing\") {\n // The bytes the lock pins are gone, but the pin that was compiled from them still\n // serves `run`: nothing for install to report.\n if (await hasCompilePin(agentDir)) continue;\n for (const line of await missingLines(items, source, err, entry.name)) {\n if (!missing.includes(line)) missing.push(line);\n }\n continue;\n }\n const reason = err instanceof Error ? err.message : String(err);\n const code = err && typeof err === \"object\" && \"code\" in err ? `${String(err.code)}: ` : \"\";\n logWarn(`Could not compile agent ${entry.name}: ${code}${reason}`);\n }\n }\n return { pinned, missing };\n}\n\n/** Whether the agent folder holds a readable compile pin. */\nasync function hasCompilePin(agentDir: string): Promise<boolean> {\n try {\n return (await loadCompileManifestFromDir(agentDir)) !== undefined;\n } catch {\n return false;\n }\n}\n\n/** One line per item the source cannot serve (the compile names only the first). */\nasync function missingLines(\n items: readonly AgentComposeItem[],\n source: CompositionContentSource,\n first: CompositionError,\n agentName: string,\n): Promise<string[]> {\n const lines = [missingLine(first, agentName)];\n for (const item of items) {\n try {\n await source.load(item.ref, item.kind);\n } catch (err) {\n if (err instanceof CompositionError && err.code === \"composition_asset_missing\") {\n lines.push(missingLine(err, agentName));\n }\n }\n }\n return [...new Set(lines)];\n}\n\n/**\n * The items of the agent that a rebuild could not serve because a registered library moved past\n * the version the lock pins: each error names `skaile update`, the command that moves the lock.\n * `check` prints these instead of sending the user to a `skaile rebuild` that would fail with\n * the same lines. Empty when a rebuild can read every item.\n */\nexport async function lockBehindLibraryErrors(\n agentDir: string,\n projectDir: string,\n): Promise<CompositionError[]> {\n const manifest = await loadAgentManifest(agentDir);\n if (!manifest) return [];\n const files = await hashAgentFiles(agentDir);\n const items = effectiveComposes(\n manifest.composes,\n files.map((f) => f.path),\n );\n const source = createCompositionContentSource({\n agentDir,\n projectDir,\n registry: getKindRegistry(),\n });\n const out: CompositionError[] = [];\n for (const item of items) {\n try {\n await source.load(item.ref, item.kind);\n } catch (err) {\n if (\n err instanceof CompositionError &&\n err.code === \"composition_asset_missing\" &&\n err.moved\n ) {\n out.push(err);\n }\n }\n }\n return out;\n}\n","import { homedir } from \"node:os\";\nimport path from \"node:path\";\nimport * as p from \"@clack/prompts\";\nimport {\n AssetManager,\n type ContentHeld,\n type InstalledAgentInstance,\n type LibraryMove,\n type ReplacedAsset,\n type RewrittenAgent,\n} from \"@skaile/workspaces/asset-manager\";\nimport {\n type AgentInstanceConfig,\n AgentRefResolutionError,\n type HarnessName,\n effectiveAgentInstances,\n globalSkaileDir,\n type PresetExpansion,\n parseAssetRef,\n readLock,\n resolveAgentDefinitionDir,\n resolveSkWorkspaceConfig,\n SourceEntryError,\n userConfigPath,\n} from \"@skaile/workspaces/core\";\nimport {\n isCompositionError,\n loadAgentManifest,\n resolveAgentInstance,\n verifyConventionItems,\n} from \"@skaile/workspaces/runner\";\nimport type { InstallManifest } from \"@skaile/workspaces/types\";\nimport { Command } from \"commander\";\nimport {\n colorRef,\n requireProjectConfig,\n formatSoftDepHint,\n deferredWarnings,\n logErr,\n logInfo,\n logOk,\n logWarn,\n parseHarnessFilter,\n reportLegacyOmpCopies,\n S,\n TARGET_DEFAULT_HINT,\n warnFilesOnlyDelegates,\n warnStaleHarnessCopies,\n warnPlaceholderBodies,\n} from \"../helpers.ts\";\nimport {\n agentInstanceErrorLines,\n reportProjectConfig,\n reportUnknownHarnesses,\n} from \"../config-checks.ts\";\nimport { createSpinner } from \"../spinner.ts\";\nimport { getKindRegistry } from \"../open-registry.ts\";\nimport { lockBehindLibraryErrors, pinComposedAgentsReport } from \"../agent-pins.ts\";\n\n/**\n * Canonical asset-ref shape accepted by `skaile install <ref>`:\n * `kind:@<publisher>/<name>#<version>` (the `#` version sigil). Validated via\n * `parseAssetRef` so the CLI shares the single canonical grammar; the legacy\n * trailing-`@version` shape is rejected.\n */\nexport const REF_HINT = \"kind:@<publisher>/<name>#<version> (e.g. skill:@skaile-ai/use-exa#1.0.0)\";\n\n/** True when `ref` parses as a canonical asset ref. */\nfunction isValidAssetRef(ref: string): boolean {\n try {\n parseAssetRef(ref);\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Minimal catalog-source surface the pointer-only install path needs.\n * `RemoteCatalogSource` satisfies this — narrowing keeps {@link runPointerOnlyInstall}\n * testable with a hand-rolled stub.\n */\nexport interface InstallManifestSource {\n getInstallManifest(ref: string): Promise<InstallManifest>;\n}\n\n/**\n * Capability check: is this catalog source able to serve install manifests?\n *\n * `openCatalogSource` returns a `RemoteCatalogSource | RestCatalogSource`.\n * Only the tRPC-framed `RemoteCatalogSource` implements `getInstallManifest`;\n * the REST-framed `RestCatalogSource` (the default for any catalog URL other\n * than `https://skaile.store`) does not. Calling it unconditionally would be a\n * runtime `TypeError`, so the pointer-only install path must capability-detect\n * first and fail with a clear, actionable message.\n */\nexport function supportsInstallManifest(source: unknown): source is InstallManifestSource {\n return (\n typeof (source as { getInstallManifest?: unknown } | null | undefined)?.getInstallManifest ===\n \"function\"\n );\n}\n\n/**\n * Minimal library surface the pointer-only install path needs.\n * `LocalIndex` satisfies this.\n */\nexport interface InstallLibrary {\n install(manifest: InstallManifest): Promise<{ installPath: string }>;\n}\n\n/**\n * Result of a pointer-only catalog install.\n */\nexport interface PointerOnlyInstallResult {\n /** Absolute path the verified asset bytes were written to. */\n installPath: string;\n /** The pinned upstream commit SHA the asset was fetched at. */\n commitSha: string;\n /** Number of files in the install manifest. */\n fileCount: number;\n}\n\n/**\n * Pointer-only catalog install — the `skaile install <ref>` code path.\n *\n * 1. Resolves the pointer-only {@link InstallManifest} from the Catalog.\n * 2. Hands it to the library, which fetches each file's bytes directly from\n * the upstream repo at the pinned commit, verifies every per-file SHA256\n * plus the composite SHA256, and only then writes the verified files.\n *\n * Both dependencies are injected so the function is unit-testable without a\n * network round-trip. In production the CLI passes a `RemoteCatalogSource`\n * and a `LocalIndex`.\n *\n * @param ref - Canonical asset ref (`kind:@<publisher>/<name>#<version>`).\n * @param deps - Injected catalog source + library.\n * @returns The install path, pinned commit SHA, and file count.\n * @throws When the ref is malformed, the manifest cannot be resolved, or any\n * hash verification fails. The underlying error message is surfaced as-is.\n */\nexport async function runPointerOnlyInstall(\n ref: string,\n deps: { catalog: InstallManifestSource; library: InstallLibrary },\n): Promise<PointerOnlyInstallResult> {\n let requested: ReturnType<typeof parseAssetRef>;\n try {\n requested = parseAssetRef(ref);\n } catch (e) {\n throw new Error(\n `malformed asset ref '${ref}' — expected ${REF_HINT}: ${e instanceof Error ? e.message : String(e)}`,\n );\n }\n const manifest = await deps.catalog.getInstallManifest(ref);\n // [M1] Identity check: the catalog must not install a different asset than\n // requested. Compare the PARSED refs (kind/publisher/name/pin) so equivalent\n // spellings (optional `kind:`, default `skill`) are treated as the same ref.\n const got = parseAssetRef(manifest.ref);\n if (\n got.kind !== requested.kind ||\n got.publisher !== requested.publisher ||\n got.name !== requested.name ||\n got.pin !== requested.pin\n ) {\n throw new Error(\n `catalog identity mismatch: requested '${ref}' but the catalog returned a manifest for '${manifest.ref}'`,\n );\n }\n const { installPath } = await deps.library.install(manifest);\n return {\n installPath,\n commitSha: manifest.source.commitSha,\n fileCount: manifest.files.length,\n };\n}\n\n/**\n * Print one summary line per `preset:` dependency `skaile install` expanded: how many\n * asset items joined the install set and how many instance items (`library://`,\n * placeholders) were skipped, which only `skaile preset apply` materialises.\n */\nexport function reportPresetExpansions(\n presets: readonly PresetExpansion[] | undefined,\n onLine: (line: string) => void = logInfo,\n): void {\n for (const preset of presets ?? []) {\n onLine(\n `preset ${preset.ref}: ${preset.assets} assets, ${preset.skipped} instance items skipped (apply with skaile preset apply)`,\n );\n }\n}\n\n/**\n * Print one line per agent instance `skaile install` rendered (with the files\n * written) and one per native agent file removed because its instance left `skaile.yaml`.\n */\nexport function reportAgentInstances(\n instances: readonly InstalledAgentInstance[] | undefined,\n removedFiles: readonly string[] | undefined,\n onLine: (line: string) => void = logInfo,\n onRemoved: (line: string) => void = logWarn,\n): void {\n for (const instance of instances ?? []) {\n onLine(`agent ${instance.id}: ${instance.files.join(\", \")}`);\n }\n for (const file of removedFiles ?? []) onRemoved(`Removed: ${file}`);\n}\n\n/** One `Re-locked` line per lock entry `install`/`update` rewrote for an already-locked asset. */\nexport function reportRelocked(\n relocked: string[] | undefined,\n onLine: (line: string) => void = logInfo,\n): void {\n for (const ref of relocked ?? []) onLine(`Re-locked ${ref}`);\n}\n\n/**\n * One line per locked library asset whose library holds the locked version with other bytes.\n * `install` keeps the lock and the deployed copy; only `update` takes the edit (OQ13, p1911).\n * The project does not match its library, as `check` says, so the run exits 1.\n */\nexport function reportContentHeld(\n held: ContentHeld[] | undefined,\n onLine: (line: string) => void = logWarn,\n): void {\n for (const h of held ?? []) {\n onLine(\n `${h.ref.split(\"#\")[0]}: library \"${h.library}\" changed since lock (same version ${h.version}). Run ${S.cmd(\"skaile update\")} to take the change.`,\n );\n process.exitCode = 1;\n }\n}\n\n/** One line per global entry `install --global` limited to the one harness that holds its copy (p1442). */\nexport function reportInferredHarnesses(\n inferred: readonly { ref: string; harnesses: readonly string[] }[] | undefined,\n onLine: (line: string) => void = logInfo,\n): void {\n for (const i of inferred ?? []) {\n onLine(\n `${i.ref} stays on ${i.harnesses.join(\", \")} (its only copy); add it to another harness with \\`skaile add ${i.ref} --global --harness <id>\\``,\n );\n }\n}\n\n/** One `! <ref> moved from <a> to <b>` line per locked asset that now resolves from another library. */\nexport function reportMoved(\n moved: readonly LibraryMove[] | undefined,\n onLine: (line: string) => void = logWarn,\n): void {\n for (const m of moved ?? []) onLine(`${m.ref} moved from ${m.from} to ${m.to}`);\n}\n\n/** One `replaced <old> → <new>` line per asset `install`/`update` moved to another locked version. */\nexport function reportReplaced(\n replaced: readonly ReplacedAsset[] | undefined,\n onLine: (line: string) => void = logInfo,\n): void {\n for (const r of replaced ?? []) onLine(`${r.ref} replaced ${r.from} → ${r.to}`);\n}\n\n/** One `Rewrote <file> (agent render changed)` line per rendered agent file whose bytes the CLI's render changed. */\nexport function reportRewritten(\n rewritten: readonly RewrittenAgent[] | undefined,\n onLine: (line: string) => void = logInfo,\n): void {\n for (const r of rewritten ?? []) {\n for (const f of r.files) onLine(`Rewrote ${f} (agent render changed)`);\n }\n}\n\n/**\n * Say which locked store assets `install`/`update` did not check against the store (p792,\n * p799). A chosen mode (air-gapped, `--no-catalog`) is one info line per asset; a store that\n * did not answer is an error line `store unreachable: could not check <ref> for updates`.\n *\n * @returns Whether any asset could not be checked because the store was unreachable: the\n * command then ends `Failed` with exit 1.\n */\nexport function reportStoreNotChecked(\n notChecked: readonly { ref: string; reason: string; detail: string }[] | undefined,\n): boolean {\n let unreachable = false;\n for (const n of notChecked ?? []) {\n if (n.reason === \"unreachable\") {\n unreachable = true;\n logErr(`store unreachable: could not check ${n.ref} for updates (${n.detail})`);\n } else if (n.reason === \"air-gapped\") {\n logInfo(`${n.ref} kept as locked (air-gapped: not checked against the store)`);\n } else {\n logInfo(`${n.ref} kept as locked (${n.detail})`);\n }\n }\n return unreachable;\n}\n\n/**\n * Say which refs `outdated`, `check` or `doctor` could not check against the store\n * (`AssetManager.takeStoreNotChecked`). A store that did not answer is one error\n * line per ref (`store unreachable: <ref> not checked (<why>)`); an air-gapped client\n * (`catalog.cache_ttl: 0`) chose not to ask, so its refs are one info line each.\n *\n * @returns Whether any ref was not checked because the store was unreachable: the command then\n * exits 1, as `install` and `update` do.\n */\nexport function reportStoreNotCheckedForUpdates(\n notChecked: readonly { ref: string; reason: string; detail: string }[],\n): boolean {\n let unreachable = false;\n for (const n of notChecked) {\n if (n.reason === \"air-gapped\") {\n logInfo(`${n.ref} not checked (air-gapped: the store was not asked)`);\n } else {\n unreachable = true;\n logErr(`store unreachable: ${n.ref} not checked (${n.detail})`);\n }\n }\n return unreachable;\n}\n\n/**\n * Creates the `skaile install` command.\n *\n * Two modes, selected by argument shape:\n *\n * - `skaile install` (no positional arg) — reads `skaile.yaml` and deploys all\n * declared assets (and their transitive dependencies) to the configured\n * harness target directory. Supports `--locked` for CI-mode install from a\n * lock file.\n * - `skaile install kind:@<publisher>/<name>#<version>` — pointer-only catalog\n * install: resolves the pointer-only install manifest from the configured\n * Catalog, fetches each file's bytes directly from the upstream repo at the\n * pinned commit, verifies every per-file + the composite SHA256, then writes\n * the verified files into the local Library.\n *\n * @returns Configured {@link Command} ready for `program.addCommand()`.\n * @docLink cli/commands/project#make-install-command\n */\nexport function makeInstallCommand(): Command {\n return new Command(\"install\")\n .description(`Install dependencies from skaile.yaml, or a single asset by ref (${REF_HINT})`)\n .argument(\"[ref]\", `Asset ref to install from the Catalog (${REF_HINT})`)\n .option(\"--locked\", \"Install from lock file (CI mode — fails on drift)\")\n .option(\"--project-dir <path>\", \"Project directory\", process.cwd())\n .option(\"--target <agent>\", `Agent framework (${TARGET_DEFAULT_HINT})`)\n .option(\n \"--global\",\n \"Install the global SSOT (~/.skaile/skaile.yaml), fanning out to every global harness\",\n )\n .option(\n \"--harness <ids>\",\n \"Comma-separated global harnesses to install into (default: all resolved); implies --global\",\n )\n .option(\n \"--link\",\n \"symlink local-path assets instead of copying (dev loop; machine-local, not for committing)\",\n )\n .option(\n \"--force\",\n \"Deploy over a folder no lock entry owns (a hand-made skill of the same name), and prune an undeclared asset whose folder holds your edits, instead of refusing\",\n )\n .option(\n \"--verbose\",\n \"also print the resolver's searched directories for an agent it cannot find\",\n )\n .action(runInstallCommand);\n}\n\n/** Options shape accepted by the `skaile install` command action. */\nexport interface InstallCommandOptions {\n locked?: boolean;\n projectDir: string;\n target?: string;\n global?: boolean;\n harness?: string;\n link?: boolean;\n force?: boolean;\n verbose?: boolean;\n}\n\n/**\n * `skaile install` action body. Dispatches by argument shape:\n * a positional `ref` selects pointer-only catalog install, otherwise the\n * legacy `skaile.yaml` install path runs.\n */\nasync function runInstallCommand(\n ref: string | undefined,\n opts: InstallCommandOptions,\n): Promise<void> {\n // ── Pointer-only catalog install: `skaile install <ref>` ──────────────\n if (ref !== undefined) {\n await runRefInstall(ref, opts);\n return;\n }\n\n // ── Legacy install: `skaile install` reads skaile.yaml ────────────────\n await runYamlInstall(opts);\n}\n\n/** Pointer-only catalog install path for `skaile install <ref>`. */\nasync function runRefInstall(ref: string, opts: InstallCommandOptions): Promise<void> {\n if (!isValidAssetRef(ref)) {\n logErr(`malformed asset ref '${ref}' — expected ${REF_HINT}`);\n process.exit(1);\n }\n // The store installs one exact version; without `#<version>` it answers a bare 400, so say\n // what is missing before the call.\n if (!parseAssetRef(ref).pin) {\n logErr(\n `${ref} needs a version: use ${ref}#<version>. A library asset is deployed with \\`skaile add ${ref}\\`, not \\`skaile install\\`.`,\n );\n process.exit(1);\n }\n const spinner = createSpinner();\n spinner.start(`Installing ${ref}`);\n try {\n const { openCatalogSource, openLibrary } = await import(\"../open-library.ts\");\n const catalog = await openCatalogSource({ projectDir: path.resolve(opts.projectDir) });\n // [H2] REST-framed catalogs (the default for any catalog URL other\n // than https://skaile.store) cannot serve install manifests. Detect\n // and fail clearly rather than throwing a runtime TypeError.\n if (!supportsInstallManifest(catalog)) {\n throw new Error(\n \"pointer-only install (skaile install <ref>) requires a tRPC-framed Catalog. \" +\n \"The configured catalog uses REST framing, which does not serve install \" +\n \"manifests. Set catalog.url to https://skaile.store, or catalog.framing: trpc, \" +\n `in ${userConfigPath()}.`,\n );\n }\n const library = await openLibrary();\n try {\n const result = await runPointerOnlyInstall(ref, { catalog, library });\n spinner.stop(\"Done\");\n logOk(`Installed ${colorRef(ref)}`);\n logInfo(`Path: ${S.dim(result.installPath)}`);\n logInfo(`Commit: ${S.dim(result.commitSha)}`);\n logInfo(`Files: ${S.dim(String(result.fileCount))}`);\n logInfo(\n S.dim(\n `Installed globally (see Path above) — use \\`skaile add ${ref}\\` to deploy into this project.`,\n ),\n );\n } finally {\n library.close();\n }\n } catch (err) {\n spinner.stop(\"Failed\");\n const msg = err instanceof Error ? err.message : String(err);\n if (/failed: 404\\b/.test(msg)) {\n logErr(\n `${ref} is not in the store. For a library asset use \\`skaile add ${ref.replace(/#.*$/, \"\")}\\`.`,\n );\n } else if (/unreachable/i.test(msg)) {\n logErr(`asset uninstallable — source commit no longer available (${msg})`);\n } else {\n logErr(msg);\n }\n process.exit(1);\n }\n}\n\n/** Legacy install path for bare `skaile install` (reads skaile.yaml). Also runs `skaile harness set`. */\nexport async function runYamlInstall(opts: InstallCommandOptions): Promise<void> {\n const projectDir = path.resolve(opts.projectDir);\n\n const harnesses = parseHarnessFilter(opts.harness);\n // `--harness` implies `--global`.\n if (opts.global || harnesses) {\n await runGlobalInstall(opts, harnesses);\n return;\n }\n\n // A project without a readable skaile.yaml stops here, before sources are cloned, assets\n // are deployed or undeployed, or the lock is written.\n requireProjectConfig(projectDir);\n\n // Refuse what `validate` rejects for the `agents:` map, before anything is written (p1512).\n const instanceErrors = agentInstanceErrorLines(projectDir);\n if (instanceErrors.length > 0) {\n for (const line of instanceErrors) logErr(line);\n process.exit(1);\n }\n // A `harness:` nothing registers fails as in `validate` and `check` (p1754).\n if ((await reportUnknownHarnesses(projectDir)) > 0) process.exit(1);\n\n // Hydrate sources declared in skaile.yaml before resolving assets, so\n // freshly checked-out projects pull their source clones automatically.\n try {\n const { ensureSourcesCloned } = await import(\"../ensure-sources.ts\");\n const hydrate = ensureSourcesCloned(projectDir, { quiet: true });\n if (hydrate.cloned.length > 0) {\n logOk(`Cloned source(s): ${hydrate.cloned.join(\", \")}`);\n }\n if (hydrate.failed.length > 0) {\n logErr(`Failed to clone source(s): ${hydrate.failed.join(\", \")}`);\n }\n } catch (err) {\n logWarn(`source hydration skipped: ${err instanceof Error ? err.message : String(err)}`);\n }\n\n const warnings = deferredWarnings();\n const am = new AssetManager({\n registry: getKindRegistry(),\n projectDir,\n harness: opts.target as HarnessName,\n onLibraryCollision: warnings.push,\n });\n const spinner = createSpinner();\n spinner.start(opts.locked ? \"Installing from lock file\" : \"Installing dependencies\");\n try {\n const result = await am.install({ locked: opts.locked, link: opts.link, force: opts.force });\n const storeUnreachable = result.storeNotChecked?.some((n) => n.reason === \"unreachable\");\n spinner.stop(\n result.agentInstanceErrors?.length ||\n result.missing.length > 0 ||\n storeUnreachable ||\n result.contentHeld?.length\n ? \"Failed\"\n : \"Done\",\n );\n warnings.flush();\n if (result.deployed.length > 0) {\n for (const d of result.deployed) logOk(d);\n }\n warnPlaceholderBodies(result.placeholderBodies, result.placeholderDescriptions);\n for (const r of result.restored ?? []) {\n for (const f of r.restored) logInfo(`Restored ${f}`);\n for (const f of r.removed) logInfo(`Removed ${f} (not part of ${r.ref})`);\n }\n reportRewritten(result.rewritten);\n for (const line of result.libraryNotices ?? []) logInfo(line);\n reportPresetExpansions(result.presets);\n reportAgentInstances(result.agentInstances, result.agentFilesRemoved);\n // Said when this install wrote an agent file (a fresh clone, a changed agent), not when it only\n // restored a skill or did nothing (p1673).\n if (\n result.deployed.some((d) => d.startsWith(\"agent:\")) ||\n result.replaced?.some((r) => r.ref.startsWith(\"agent:\")) ||\n result.agentInstancesChanged?.length\n ) {\n warnFilesOnlyDelegates(am.projectDir, am.harness);\n }\n if (result.removed.length > 0) {\n for (const r of result.removed) logWarn(`Removed: ${r}`);\n }\n reportReplaced(result.replaced);\n reportRelocked(result.relocked);\n reportMoved(result.moved);\n reportContentHeld(result.contentHeld);\n const pins = await pinComposedAgentsReport(projectDir);\n const missing = [...result.missing, ...pins.missing];\n if (\n result.deployed.length === 0 &&\n result.removed.length === 0 &&\n !result.replaced?.length &&\n missing.length === 0 &&\n !result.storeNotChecked?.length &&\n !result.restored?.length &&\n !result.relocked?.length &&\n !result.contentHeld?.length &&\n !result.moved?.length &&\n !result.agentInstanceErrors?.length\n ) {\n logInfo(\"Nothing to install (already up to date).\");\n }\n if (result.agentInstanceErrors?.length) {\n if (opts.verbose) for (const d of result.agentInstanceDetails ?? []) logInfo(S.dim(d));\n logErr(\n `${result.agentInstanceErrors.length} agent instance(s) could not be rendered (see above)`,\n );\n process.exitCode = 1;\n }\n if (missing.length > 0) {\n for (const m of missing) logErr(`Missing: ${m}${result.missingHints?.[m] ?? \"\"}`);\n // Partial-miss must fail the process — CI can't otherwise distinguish a\n // clean install from \"half the assets never resolved\".\n process.exitCode = 1;\n }\n if (reportStoreNotChecked(result.storeNotChecked)) process.exitCode = 1;\n // A ref that only resolved once the assets were installed (a catalog agent) is checked now.\n const lateInstanceErrors = agentInstanceErrorLines(projectDir);\n for (const line of lateInstanceErrors) logErr(line);\n if (lateInstanceErrors.length > 0) process.exitCode = 1;\n if (result.lockWritten) {\n logInfo(`Lock file written: ${S.dim(\"skaile.lock.yaml\")}`);\n }\n warnStaleHarnessCopies(am);\n // Report-only: surface soft deps the declared assets reference but aren't\n // present. Never a prompt — install is a batch/CI path. Skipped under\n // --locked: that mode is \"restore exactly\", so an `add` nudge would jar.\n if (!opts.locked) await reportInstalledSoftDeps(am);\n } catch (err) {\n spinner.stop(\"Failed\");\n logErr(err instanceof SourceEntryError ? err.message : String(err));\n process.exit(1);\n }\n}\n\n/**\n * Report (never prompt) the body-link soft deps that the declared assets\n * reference but that aren't in the project — the `install` counterpart to the\n * `add`-time soft-dep surface. `install` is a batch/CI path (often non-TTY), so\n * it only ever prints a hint: pulling stays an explicit `skaile add`. Best-effort\n * — `reportSoftDeps` swallows any index failure and returns `[]`.\n */\nexport async function reportInstalledSoftDeps(\n am: Pick<AssetManager, \"listDeclared\" | \"reportSoftDeps\">,\n onHint: (line: string) => void = (l) => logInfo(S.dim(l)),\n): Promise<void> {\n try {\n const declared = (await am.listDeclared()).map((d) => d.ref);\n if (declared.length === 0) return;\n const edges = await am.reportSoftDeps(declared);\n for (const edge of edges) onHint(formatSoftDepHint(edge));\n } catch {\n // Best-effort: a soft-dep report must never fail an install that succeeded.\n }\n}\n\n/**\n * Global cross-harness install: deploy every dep declared in the global SSOT\n * (`~/.skaile/skaile.yaml`) into each resolved global harness's dir under `~`,\n * write the global lock (`~/.skaile/skaile.lock.yaml`), then print per-harness\n * state. `harnesses` is the `--harness` filter (omit for the full resolved set).\n */\nasync function runGlobalInstall(\n opts: InstallCommandOptions,\n harnesses: HarnessName[] | undefined,\n): Promise<void> {\n const am = new AssetManager({\n registry: getKindRegistry(),\n projectDir: path.resolve(opts.projectDir),\n global: true,\n harnesses,\n });\n const spinner = createSpinner();\n spinner.start(\"Installing global dependencies\");\n try {\n const result = await am.install({ locked: opts.locked, link: opts.link, force: opts.force });\n const storeUnreachable = result.storeNotChecked?.some((n) => n.reason === \"unreachable\");\n spinner.stop(\n result.missing.length > 0 || storeUnreachable || result.contentHeld?.length\n ? \"Failed\"\n : \"Done\",\n );\n if (result.deployed.length > 0) for (const d of result.deployed) logOk(d);\n warnPlaceholderBodies(result.placeholderBodies, result.placeholderDescriptions);\n reportPresetExpansions(result.presets);\n if (result.removed.length > 0) for (const r of result.removed) logWarn(`Removed: ${r}`);\n reportReplaced(result.replaced);\n reportRelocked(result.relocked);\n reportInferredHarnesses(result.inferredHarnesses);\n reportMoved(result.moved);\n reportContentHeld(result.contentHeld);\n if (\n result.deployed.length === 0 &&\n result.removed.length === 0 &&\n !result.replaced?.length &&\n result.missing.length === 0 &&\n !result.storeNotChecked?.length &&\n !result.relocked?.length &&\n !result.contentHeld?.length &&\n !result.moved?.length\n )\n logInfo(\"Nothing to install (already up to date).\");\n if (reportStoreNotChecked(result.storeNotChecked)) process.exitCode = 1;\n if (result.missing.length > 0) {\n for (const m of result.missing) logErr(`Missing: ${m}${result.missingHints?.[m] ?? \"\"}`);\n process.exitCode = 1;\n }\n if (result.lockWritten) logInfo(`Global lock written: ${S.dim(\"~/.skaile/skaile.lock.yaml\")}`);\n reportLegacyOmpCopies(am.takeLegacyCopiesRemoved(), am.takeLegacyCopiesKept());\n\n // Per-harness reconciliation summary so a partial fan-out is visible.\n const state = am.globalState({});\n const byHarness = new Map<string, number>();\n for (const s of state)\n if (s.state === \"installed\") byHarness.set(s.harness, (byHarness.get(s.harness) ?? 0) + 1);\n for (const [harness, n] of byHarness) logInfo(`${harness}: ${n} installed`);\n } catch (err) {\n spinner.stop(\"Failed\");\n logErr(String(err));\n process.exit(1);\n }\n}\n\n/** The `--global` options of `check`, `doctor` and `clean`. */\ninterface GlobalScopeOptions {\n global?: boolean;\n harness?: string;\n projectDir: string;\n}\n\n/** A manager over the user-scope SSOT (`~/.skaile`), limited to `--harness` when given. */\nfunction globalManager(opts: GlobalScopeOptions): AssetManager {\n return new AssetManager({\n registry: getKindRegistry(),\n projectDir: path.resolve(opts.projectDir),\n global: true,\n harnesses: parseHarnessFilter(opts.harness),\n });\n}\n\n/**\n * What is wrong with the global install: one line per declared asset a harness does not hold\n * (`list --global` calls these `declared` and `drift`), per invalid entry, and per old\n * `~/.omp/<dir>` copy a 5.12.0 install left behind. Empty when the global state is clean (p911).\n */\nexport function globalProblems(am: AssetManager): string[] {\n const lines = new Set<string>();\n for (const row of am.globalState({})) {\n if (row.state === \"declared\") {\n lines.add(\n `${row.ref} is declared in ~/.skaile/skaile.yaml but not installed: run skaile install --global`,\n );\n } else if (row.state === \"drift\") {\n lines.add(\n `${row.ref} is missing from ${row.harness}: run skaile install --global --harness ${row.harness}`,\n );\n } else if (row.state === \"invalid\") {\n lines.add(`${row.ref} in ~/.skaile/skaile.yaml is not a valid asset ref`);\n }\n }\n for (const stale of am.staleLegacyOmpCopies()) {\n lines.add(\n `${stale.path.replace(homedir(), \"~\")} is an old omp copy of ${stale.ref} (omp reads ~/.omp/agent): run skaile install --global --harness omp, or delete it`,\n );\n }\n return [...lines];\n}\n\n/**\n * Creates the `skaile check` command.\n *\n * Fails (exit 1) on every problem {@link AssetManager.projectState} reports: unmet\n * requirements of deployed assets, a declared dep that never resolved into the lock (its\n * library or source is gone, like `skaile list` showing it as `declared`) or never\n * materialized (e.g. a store-sourced `mcp-server`, #462), a locked asset whose library is\n * gone or whose deployed copy or files are missing, a locked library asset whose files\n * changed since the lock (or whose lock hash predates the shared asset hash), and an\n * `agents.<id>.ref` that binds to no agent. `doctor`, `outdated`, `diff` and\n * `install --locked` take their verdict from the same state.\n *\n * @returns Configured {@link Command} ready for `program.addCommand()`.\n * @docLink cli/commands/project#make-check-command\n */\nexport function makeCheckCommand(): Command {\n return new Command(\"check\")\n .description(\"Check for unmet requirements\")\n .option(\"--project-dir <path>\", \"Project directory\", process.cwd())\n .option(\"--global\", \"Check the global install (~/.skaile) instead of the project\")\n .option(\"--harness <ids>\", \"With --global: only these harnesses (comma-separated)\")\n .action(async (opts) => {\n if (opts.global || opts.harness) {\n const problems = globalProblems(globalManager({ ...opts, global: true }));\n if (problems.length === 0) {\n logOk(\"All global dependencies satisfied.\");\n return;\n }\n for (const line of problems) logErr(line);\n process.exit(1);\n }\n requireProjectConfig(opts.projectDir);\n // A mistyped key warns; a `harness:` nothing registers fails like a gap (p1474, p1022).\n const configErrors = await reportProjectConfig(path.resolve(opts.projectDir), {\n harness: true,\n instances: true,\n });\n const am = new AssetManager({\n registry: getKindRegistry(),\n projectDir: path.resolve(opts.projectDir),\n });\n const { gaps } = await am.projectState();\n // A native agent file rendered from inputs that changed since (an edited `DUTIES.md`, a\n // local ruleset) is drift too: `install` renders it again, and so does the next run.\n const edited = [\n ...(await editedConventionFiles(path.resolve(opts.projectDir))),\n ...(await am.staleAgentFileLines()),\n ];\n // A skipped `mcp-server` or an unset required field fails nothing: a `!` line each.\n const notices = [\n ...(await am.mcpNotices()).map((n) => n.text),\n // A library that went back past the lock is no drift either (p1257).\n ...(await am.libraryOlderNotices()),\n // A lock written before it listed the instance files: the next write replaces them.\n ...am.legacyLockNotices(),\n // An asset-named agent file an instance's file replaced: the next install removes it.\n ...am.leftoverAgentFileNotices(),\n // An agent whose `extends` parent is not there: said once at `add`, then here (v16-D11).\n ...am.missingParentNotices(),\n ];\n // A store-origin ref the store could not be asked about is not \"satisfied\".\n await am.probeStoreOrigins();\n const notChecked = am.takeStoreNotChecked();\n const storeUnreachable = notChecked.some((n) => n.reason === \"unreachable\");\n if (gaps.length === 0 && edited.length === 0 && configErrors === 0 && !storeUnreachable) {\n logOk(\"All dependencies satisfied.\");\n for (const n of notices) logWarn(n);\n reportStoreNotCheckedForUpdates(notChecked);\n } else {\n for (const g of gaps) logErr(g.message);\n for (const e of edited) logErr(e);\n for (const n of notices) logWarn(n);\n reportStoreNotCheckedForUpdates(notChecked);\n process.exit(1);\n }\n });\n}\n\n/**\n * One message per convention file (SOUL.md, knowledge/, …) of a bound agent that was edited\n * after `skaile rebuild` pinned it: the compile manifest, not the file, is what the agent\n * runs from, so the edit never reaches it. Also one message per bound agent that `skaile run`\n * would refuse with `composition_rebuild_required` (an `inline-snapshot` item with no compile\n * pin, or a pin that is stale or malformed), in the words `run` prints (p1310). Instances bound\n * to the same agent directory share the files, so one message names every instance that runs\n * from them. A binding that resolves to no agent is a `projectState` gap, not reported here.\n * Shared by `check` and `doctor`.\n */\nexport async function editedConventionFiles(projectDir: string): Promise<string[]> {\n const instances = effectiveAgentInstances(resolveSkWorkspaceConfig(projectDir));\n const byDir = new Map<string, { ref: string; ids: string[]; instance: AgentInstanceConfig }>();\n for (const [id, instance] of Object.entries(instances)) {\n let agentDir: string | undefined;\n try {\n agentDir = resolveAgentDefinitionDir(projectDir, instance.ref);\n } catch (err) {\n if (err instanceof AgentRefResolutionError) continue;\n throw err;\n }\n if (!agentDir) continue;\n if (path.basename(agentDir) === \"agent.yaml\") agentDir = path.dirname(agentDir);\n const bound = byDir.get(agentDir);\n if (bound) bound.ids.push(id);\n else byDir.set(agentDir, { ref: instance.ref, ids: [id], instance });\n }\n const messages: string[] = [];\n for (const [agentDir, { ref, ids, instance }] of byDir) {\n const label = `${ids.length === 1 ? \"instance\" : \"instances\"} ${ids.join(\", \")}`;\n try {\n const drifted = await verifyConventionItems({\n agentDir,\n projectDir,\n registry: getKindRegistry(),\n });\n for (const err of drifted) messages.push(`${ref} (${label}): ${err.message}`);\n const manifest = await loadAgentManifest(agentDir);\n if (manifest) {\n await resolveAgentInstance({\n instanceId: ids[0]!,\n instance,\n asset: { manifest, dir: agentDir },\n projectDir,\n registry: getKindRegistry(),\n host: { nativeSubagents: true },\n dryRun: true,\n });\n }\n } catch (err) {\n if (!isCompositionError(err)) throw err;\n // Only the error `run` raises for a missing pin; other composition errors are not `check`'s.\n if (err.code === \"composition_rebuild_required\") {\n // A lock behind the library (a fresh clone after a persona bump): `rebuild` would fail\n // on it, so name `update` here, the same line `rebuild` and `install` give.\n const behind = await lockBehindLibraryErrors(agentDir, projectDir);\n if (behind.length > 0) {\n for (const e of behind) {\n messages.push(`${ref} (${label}): ${e.code}: ${e.message}`);\n }\n } else {\n messages.push(`${ref} (${label}): ${err.code}: ${err.message}`);\n }\n }\n }\n }\n return messages;\n}\n\n/**\n * Creates the `skaile clean` command.\n *\n * Removes all skaile-managed assets tracked in `skaile.lock.yaml` from the\n * workspace. With `--all` also removes history, patches, repos, and the lock\n * file itself. Preserves unmanaged (manually placed) assets.\n *\n * @returns Configured {@link Command} ready for `program.addCommand()`.\n * @docLink cli/commands/project#make-clean-command\n */\nexport function makeCleanCommand(): Command {\n return new Command(\"clean\")\n .description(\"Remove all skaile-managed assets from the workspace\")\n .option(\"--all\", \"Full reset: also remove history, patches, repos, and lock file\")\n .option(\"--dry-run\", \"Show what would be removed without doing it\")\n .option(\"-y, --yes\", \"Skip confirmation prompt\")\n .option(\"--project-dir <path>\", \"Project directory\", process.cwd())\n .option(\"--target <agent>\", `Agent framework (${TARGET_DEFAULT_HINT})`)\n .option(\"--global\", \"Clean the global install (~/.skaile and every global harness)\")\n .option(\"--harness <ids>\", \"With --global: only these harnesses (comma-separated)\")\n .action(async (opts) => {\n const isGlobal = Boolean(opts.global || opts.harness);\n // A skaile.yaml that does not parse stops `clean` with one `✗` line (p910).\n if (!isGlobal) requireProjectConfig(opts.projectDir, { allowMissing: true });\n const am = isGlobal\n ? globalManager({ ...opts, global: true })\n : new AssetManager({\n registry: getKindRegistry(),\n projectDir: path.resolve(opts.projectDir),\n harness: opts.target as HarnessName,\n });\n\n // Preview: load lock file to show what will be cleaned\n const lock = readLock(\n isGlobal\n ? path.join(globalSkaileDir(), \"skaile.lock.yaml\")\n : path.resolve(opts.projectDir, \"skaile.lock.yaml\"),\n );\n\n if (!lock || Object.keys(lock.assets).length === 0) {\n logInfo(\"Nothing to clean (no skaile-managed assets found).\");\n return;\n }\n\n const assetRefs = Object.keys(lock.assets);\n console.log();\n console.log(` ${S.heading(\"Assets to remove:\")} ${S.dim(`(${assetRefs.length})`)}`);\n for (const ref of assetRefs) {\n console.log(` ${colorRef(ref)}`);\n }\n\n if (opts.all) {\n console.log();\n console.log(` ${S.heading(\"Also removing:\")}`);\n if (!isGlobal) {\n console.log(` ${S.dim(\".skaile/history.yaml\")}`);\n console.log(` ${S.dim(\".skaile/patches/\")}`);\n }\n console.log(` ${S.dim(isGlobal ? \"~/.skaile/skaile.lock.yaml\" : \"skaile.lock.yaml\")}`);\n }\n\n if (opts.dryRun) {\n console.log();\n logInfo(\"Dry run — no changes made.\");\n return;\n }\n\n if (!opts.yes) {\n // A prompt without a terminal never resolves: refuse and name the flag.\n if (!process.stdin.isTTY) {\n logErr(\"Not a terminal: pass --yes to confirm. Nothing was removed.\");\n process.exit(1);\n }\n const confirm = await p.confirm({ message: \"Proceed?\" });\n if (p.isCancel(confirm) || !confirm) {\n logInfo(\"Cancelled.\");\n return;\n }\n }\n\n const result = am.clean({ all: opts.all });\n\n console.log();\n for (const r of result.removed) {\n logOk(`Removed ${r}`);\n }\n for (const s of result.skipped) {\n logWarn(`Skipped ${s.ref}: ${s.reason}`);\n }\n if (result.unmanaged.length > 0) {\n console.log();\n logInfo(`Kept ${result.unmanaged.length} unmanaged asset(s):`);\n for (const u of result.unmanaged) {\n console.log(` ${S.dim(u)}`);\n }\n }\n if (opts.all) {\n console.log();\n logOk(\"Full reset complete.\");\n }\n });\n}\n"]}
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import { initTelemetry } from './chunk-4R6DROGN.js';
|
|
2
|
-
import { parseSkillFrontmatter, validateFlowVersions } from './chunk-
|
|
3
|
-
import { FlowAdapter, SessionNodeExecutor, SessionSubpromptRunner, SessionInlineSubFlowRunner, driveOrchestratorTurn } from './chunk-
|
|
4
|
-
import { loadFlow, flowLookupRoots, findFlowFileInRoots, FLOW_FILE_EXTENSIONS } from './chunk-
|
|
2
|
+
import { parseSkillFrontmatter, validateFlowVersions } from './chunk-M7XIYHWB.js';
|
|
3
|
+
import { FlowAdapter, SessionNodeExecutor, SessionSubpromptRunner, SessionInlineSubFlowRunner, driveOrchestratorTurn } from './chunk-QUIK7L3Z.js';
|
|
4
|
+
import { loadFlow, flowLookupRoots, findFlowFileInRoots, FLOW_FILE_EXTENSIONS } from './chunk-2ZDZJ7XQ.js';
|
|
5
5
|
import { renderStimulusPrompt } from './chunk-WD3L5QSU.js';
|
|
6
6
|
import { flowSkillVersionPins } from './chunk-7RGTAEG6.js';
|
|
7
|
-
import { resolveSettings } from './chunk-
|
|
7
|
+
import { resolveSettings } from './chunk-U7P22GEB.js';
|
|
8
8
|
import { DEFAULT_HARNESS_ID } from './chunk-C5HFK34M.js';
|
|
9
9
|
import { findKindDirs } from './chunk-MWXYN6NY.js';
|
|
10
|
-
import { resolveAgentDir, resolveSkWorkspaceConfig } from './chunk-
|
|
11
|
-
import { isValidAssetName } from './chunk-
|
|
10
|
+
import { resolveAgentDir, resolveSkWorkspaceConfig } from './chunk-BRAOB37W.js';
|
|
11
|
+
import { isValidAssetName } from './chunk-HW4BDJPC.js';
|
|
12
12
|
import { createLogger } from './chunk-BOFL7GIF.js';
|
|
13
13
|
import fs from 'fs';
|
|
14
14
|
import path from 'path';
|
|
@@ -537,5 +537,5 @@ function walkForSkill(dir, skillId) {
|
|
|
537
537
|
}
|
|
538
538
|
|
|
539
539
|
export { awaitAgentEnd, resolveFlowPath, resumeFlow, runFlow };
|
|
540
|
-
//# sourceMappingURL=chunk-
|
|
541
|
-
//# sourceMappingURL=chunk-
|
|
540
|
+
//# sourceMappingURL=chunk-6KV34G6A.js.map
|
|
541
|
+
//# sourceMappingURL=chunk-6KV34G6A.js.map
|