@skaile/workspaces 6.6.0 → 6.7.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 +28 -0
- package/dist/ai-sdk.js +10 -17
- package/dist/ai-sdk.js.map +1 -1
- package/dist/app-sdk/index.js +1 -1
- package/dist/{asset-feeds-WQ6YQPHV.js → asset-feeds-4A7PJ4OB.js} +18 -18
- package/dist/{asset-feeds-WQ6YQPHV.js.map → asset-feeds-4A7PJ4OB.js.map} +1 -1
- package/dist/asset-manager/catalog-deployer.js +4 -4
- package/dist/asset-manager/index.js +10 -10
- package/dist/asset-manager/installer.js +6 -6
- package/dist/asset-manager/renderers.js +5 -5
- package/dist/asset-manager/src/index.d.ts +89 -15
- package/dist/asset-manager/src/index.d.ts.map +1 -1
- package/dist/asset-manager/src/install-agent.d.ts +22 -1
- package/dist/asset-manager/src/install-agent.d.ts.map +1 -1
- package/dist/asset-manager/src/install-instances.d.ts +30 -1
- package/dist/asset-manager/src/install-instances.d.ts.map +1 -1
- package/dist/asset-manager/src/installer.d.ts +12 -0
- package/dist/asset-manager/src/installer.d.ts.map +1 -1
- package/dist/asset-manager/src/renderers.d.ts.map +1 -1
- package/dist/bridge/harnesses/claude-sdk.js +21 -15
- package/dist/bridge/harnesses/claude-sdk.js.map +1 -1
- package/dist/bridge/harnesses/codex.js +9 -8
- package/dist/bridge/harnesses/codex.js.map +1 -1
- package/dist/bridge/harnesses/continue.js +11 -9
- package/dist/bridge/harnesses/continue.js.map +1 -1
- package/dist/bridge/harnesses/echo.js +5 -4
- package/dist/bridge/harnesses/echo.js.map +1 -1
- package/dist/bridge/harnesses/gemini.js +8 -6
- package/dist/bridge/harnesses/goose.js +11 -9
- package/dist/bridge/harnesses/goose.js.map +1 -1
- package/dist/bridge/harnesses/omp.js +9 -7
- package/dist/bridge/harnesses/omp.js.map +1 -1
- package/dist/bridge/harnesses/opencode.js +11 -9
- package/dist/bridge/harnesses/opencode.js.map +1 -1
- package/dist/bridge/harnesses/qwen.js +9 -7
- package/dist/bridge/harnesses/qwen.js.map +1 -1
- package/dist/bridge/index.js +17 -15
- package/dist/bridge/src/ai-sdk.d.ts.map +1 -1
- package/dist/bridge/src/claude-sdk-surface.d.ts +2 -1
- package/dist/bridge/src/claude-sdk-surface.d.ts.map +1 -1
- package/dist/bridge/src/harness-binaries.d.ts +21 -0
- package/dist/bridge/src/harness-binaries.d.ts.map +1 -0
- package/dist/bridge/src/harness-model-check.d.ts +22 -6
- package/dist/bridge/src/harness-model-check.d.ts.map +1 -1
- package/dist/bridge/src/harnesses/claude-sdk.d.ts.map +1 -1
- package/dist/bridge/src/harnesses/continue.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-models-yml.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 -1
- package/dist/bridge/src/index.d.ts.map +1 -1
- package/dist/{chunk-LBJ4M5J2.js → chunk-237BMOZW.js} +4 -4
- package/dist/{chunk-LBJ4M5J2.js.map → chunk-237BMOZW.js.map} +1 -1
- package/dist/{chunk-2TLPC6TQ.js → chunk-37AYPPOO.js} +41 -19
- package/dist/chunk-37AYPPOO.js.map +1 -0
- package/dist/{chunk-GTGWRKMJ.js → chunk-37X4A6VZ.js} +6 -6
- package/dist/{chunk-GTGWRKMJ.js.map → chunk-37X4A6VZ.js.map} +1 -1
- package/dist/{chunk-MXI3XWV6.js → chunk-3HSLJAMJ.js} +4 -4
- package/dist/{chunk-MXI3XWV6.js.map → chunk-3HSLJAMJ.js.map} +1 -1
- package/dist/{chunk-RHCEX2EV.js → chunk-3W6XZQ2Y.js} +3 -3
- package/dist/{chunk-RHCEX2EV.js.map → chunk-3W6XZQ2Y.js.map} +1 -1
- package/dist/{chunk-F4CZQD3T.js → chunk-4C2E5QUP.js} +4 -3
- package/dist/chunk-4C2E5QUP.js.map +1 -0
- package/dist/{chunk-DS6UUCFG.js → chunk-4CD2R4MJ.js} +5 -4
- package/dist/chunk-4CD2R4MJ.js.map +1 -0
- package/dist/{chunk-AQNW2FET.js → chunk-6RPS7JEH.js} +92 -39
- package/dist/chunk-6RPS7JEH.js.map +1 -0
- package/dist/{chunk-BSMW3PX2.js → chunk-6UP2EDFN.js} +4 -313
- package/dist/chunk-6UP2EDFN.js.map +1 -0
- package/dist/{chunk-4J7JQX4G.js → chunk-72TLO2AG.js} +4 -4
- package/dist/{chunk-4J7JQX4G.js.map → chunk-72TLO2AG.js.map} +1 -1
- package/dist/{chunk-I5IF3JCG.js → chunk-AO57IFME.js} +3 -3
- package/dist/{chunk-I5IF3JCG.js.map → chunk-AO57IFME.js.map} +1 -1
- package/dist/{chunk-G5SYFFMD.js → chunk-ASBZOTEO.js} +2 -2
- package/dist/{chunk-G5SYFFMD.js.map → chunk-ASBZOTEO.js.map} +1 -1
- package/dist/{chunk-O7QZI6MQ.js → chunk-BB5EJLKZ.js} +2 -2
- package/dist/{chunk-O7QZI6MQ.js.map → chunk-BB5EJLKZ.js.map} +1 -1
- package/dist/{chunk-N2PBAXAA.js → chunk-BKLDBUQA.js} +3 -3
- package/dist/{chunk-N2PBAXAA.js.map → chunk-BKLDBUQA.js.map} +1 -1
- package/dist/{chunk-XD3RYAMR.js → chunk-CTRTFMCX.js} +6 -6
- package/dist/{chunk-XD3RYAMR.js.map → chunk-CTRTFMCX.js.map} +1 -1
- package/dist/{chunk-EPXZQIC6.js → chunk-DFP476EU.js} +8 -4
- package/dist/chunk-DFP476EU.js.map +1 -0
- package/dist/{chunk-MMOWIRHP.js → chunk-G44FFUMA.js} +12 -10
- package/dist/chunk-G44FFUMA.js.map +1 -0
- package/dist/{chunk-JIQUF3X2.js → chunk-G7NMF5WQ.js} +3 -3
- package/dist/{chunk-JIQUF3X2.js.map → chunk-G7NMF5WQ.js.map} +1 -1
- package/dist/{chunk-SHTXMERQ.js → chunk-GAIMSCZ7.js} +10 -8
- package/dist/chunk-GAIMSCZ7.js.map +1 -0
- package/dist/{chunk-6A6HE5LW.js → chunk-HLAEYFUN.js} +3 -3
- package/dist/{chunk-6A6HE5LW.js.map → chunk-HLAEYFUN.js.map} +1 -1
- package/dist/{chunk-YN6N3RBM.js → chunk-HMVAGPYR.js} +47 -11
- package/dist/chunk-HMVAGPYR.js.map +1 -0
- package/dist/{chunk-U3UDOX6I.js → chunk-HPXONAI2.js} +6 -4
- package/dist/chunk-HPXONAI2.js.map +1 -0
- package/dist/{chunk-5ETYBC2X.js → chunk-IRK3LNG3.js} +6 -6
- package/dist/{chunk-5ETYBC2X.js.map → chunk-IRK3LNG3.js.map} +1 -1
- package/dist/{chunk-J262X4JU.js → chunk-J7VEQORJ.js} +69 -16
- package/dist/chunk-J7VEQORJ.js.map +1 -0
- package/dist/{chunk-DI6J2PJB.js → chunk-KO3VSZQP.js} +47 -18
- package/dist/chunk-KO3VSZQP.js.map +1 -0
- package/dist/{chunk-KSH5CFQS.js → chunk-KORDNXKA.js} +3 -3
- package/dist/{chunk-KSH5CFQS.js.map → chunk-KORDNXKA.js.map} +1 -1
- package/dist/{chunk-SCRYXAHH.js → chunk-L3JQJ6D5.js} +6 -6
- package/dist/{chunk-SCRYXAHH.js.map → chunk-L3JQJ6D5.js.map} +1 -1
- package/dist/{chunk-7I5PNB2G.js → chunk-L7QOZG5V.js} +3 -3
- package/dist/{chunk-7I5PNB2G.js.map → chunk-L7QOZG5V.js.map} +1 -1
- package/dist/{chunk-VXYZ5M7Z.js → chunk-LX4TTTRR.js} +64 -27
- package/dist/chunk-LX4TTTRR.js.map +1 -0
- package/dist/{chunk-KSUT5KAE.js → chunk-LZPJOF7Y.js} +3 -3
- package/dist/{chunk-KSUT5KAE.js.map → chunk-LZPJOF7Y.js.map} +1 -1
- package/dist/{chunk-65UAC3ZR.js → chunk-N6ZGB5ES.js} +4 -3
- package/dist/chunk-N6ZGB5ES.js.map +1 -0
- package/dist/{chunk-2M3VLKT2.js → chunk-NURTGAWM.js} +3 -3
- package/dist/{chunk-2M3VLKT2.js.map → chunk-NURTGAWM.js.map} +1 -1
- package/dist/{chunk-J4WKNJHO.js → chunk-O5Y7VMVQ.js} +15 -14
- package/dist/chunk-O5Y7VMVQ.js.map +1 -0
- package/dist/{chunk-6SXSVKQY.js → chunk-O7ADRMCR.js} +63 -14
- package/dist/chunk-O7ADRMCR.js.map +1 -0
- package/dist/{chunk-7PVGND4J.js → chunk-OGTQUEAO.js} +21 -14
- package/dist/chunk-OGTQUEAO.js.map +1 -0
- package/dist/{chunk-VJRL6ZK6.js → chunk-OSABUEWA.js} +3 -3
- package/dist/{chunk-VJRL6ZK6.js.map → chunk-OSABUEWA.js.map} +1 -1
- package/dist/{chunk-WW5NAU6N.js → chunk-PLLZSKOO.js} +3 -3
- package/dist/{chunk-WW5NAU6N.js.map → chunk-PLLZSKOO.js.map} +1 -1
- package/dist/{chunk-7SJHSGUV.js → chunk-Q2NYTMT6.js} +16 -15
- package/dist/chunk-Q2NYTMT6.js.map +1 -0
- package/dist/{chunk-E2EC6SAX.js → chunk-QC5BYUED.js} +51 -15
- package/dist/chunk-QC5BYUED.js.map +1 -0
- package/dist/{chunk-RAU5QPI6.js → chunk-QCR5AE5E.js} +5 -5
- package/dist/{chunk-RAU5QPI6.js.map → chunk-QCR5AE5E.js.map} +1 -1
- package/dist/{chunk-TUFNY6OD.js → chunk-QW5B3TEO.js} +10 -4
- package/dist/chunk-QW5B3TEO.js.map +1 -0
- package/dist/{chunk-Z4FERR4U.js → chunk-RAHAZ7LP.js} +2 -2
- package/dist/{chunk-Z4FERR4U.js.map → chunk-RAHAZ7LP.js.map} +1 -1
- package/dist/{chunk-OY22B7E2.js → chunk-SBNUXJ6E.js} +3 -3
- package/dist/{chunk-OY22B7E2.js.map → chunk-SBNUXJ6E.js.map} +1 -1
- package/dist/{chunk-6ARPZHOV.js → chunk-TMJBEGS4.js} +35 -6
- package/dist/chunk-TMJBEGS4.js.map +1 -0
- package/dist/{chunk-6RHWTZPT.js → chunk-TXX3OUYI.js} +3 -3
- package/dist/{chunk-6RHWTZPT.js.map → chunk-TXX3OUYI.js.map} +1 -1
- package/dist/{chunk-SZKCE7EC.js → chunk-U52FYGK5.js} +5 -5
- package/dist/{chunk-SZKCE7EC.js.map → chunk-U52FYGK5.js.map} +1 -1
- package/dist/{chunk-TCH5UDKT.js → chunk-UCB7FK25.js} +10 -8
- package/dist/chunk-UCB7FK25.js.map +1 -0
- package/dist/{chunk-5XHQBCB5.js → chunk-WFK4MUBL.js} +21 -7
- package/dist/chunk-WFK4MUBL.js.map +1 -0
- package/dist/{chunk-HGZN6JLP.js → chunk-WIYVR24B.js} +4 -4
- package/dist/{chunk-HGZN6JLP.js.map → chunk-WIYVR24B.js.map} +1 -1
- package/dist/{chunk-B6N653ZG.js → chunk-WKENHNDM.js} +6 -6
- package/dist/{chunk-B6N653ZG.js.map → chunk-WKENHNDM.js.map} +1 -1
- package/dist/chunk-WWSRIT3J.js +59 -0
- package/dist/chunk-WWSRIT3J.js.map +1 -0
- package/dist/chunk-XON6ODIC.js +315 -0
- package/dist/chunk-XON6ODIC.js.map +1 -0
- package/dist/{chunk-4BFEPZ6J.js → chunk-ZBA4P5TD.js} +3 -3
- package/dist/{chunk-4BFEPZ6J.js.map → chunk-ZBA4P5TD.js.map} +1 -1
- package/dist/{chunk-JRVQV7WC.js → chunk-ZDTDS62B.js} +595 -126
- package/dist/chunk-ZDTDS62B.js.map +1 -0
- package/dist/{chunk-XYCYGN3Q.js → chunk-ZM4SDVUV.js} +79 -20
- package/dist/chunk-ZM4SDVUV.js.map +1 -0
- package/dist/{claude-code-LZH7Y4Y5.js → claude-code-BLFRZU2X.js} +4 -4
- package/dist/{claude-code-LZH7Y4Y5.js.map → claude-code-BLFRZU2X.js.map} +1 -1
- package/dist/cli/index.js +474 -198
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/src/agent-pins.d.ts +9 -3
- package/dist/cli/src/agent-pins.d.ts.map +1 -1
- package/dist/cli/src/commands/asset-cmd.d.ts +1 -1
- package/dist/cli/src/commands/asset-cmd.d.ts.map +1 -1
- package/dist/cli/src/commands/cache.d.ts.map +1 -1
- package/dist/cli/src/commands/catalog.d.ts +2 -0
- package/dist/cli/src/commands/catalog.d.ts.map +1 -1
- package/dist/cli/src/commands/config.d.ts.map +1 -1
- package/dist/cli/src/commands/harness-preflight.d.ts +38 -0
- package/dist/cli/src/commands/harness-preflight.d.ts.map +1 -0
- package/dist/cli/src/commands/library-cmd.d.ts.map +1 -1
- package/dist/cli/src/commands/library-index.d.ts +16 -0
- package/dist/cli/src/commands/library-index.d.ts.map +1 -1
- package/dist/cli/src/commands/migrate-assets.d.ts +5 -0
- package/dist/cli/src/commands/migrate-assets.d.ts.map +1 -1
- package/dist/cli/src/commands/migrate-harness.d.ts +15 -7
- package/dist/cli/src/commands/migrate-harness.d.ts.map +1 -1
- package/dist/cli/src/commands/migrate.d.ts.map +1 -1
- package/dist/cli/src/commands/outdated.d.ts.map +1 -1
- package/dist/cli/src/commands/plugin-registry-cmd.d.ts.map +1 -1
- package/dist/cli/src/commands/project.d.ts +14 -0
- 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 +6 -5
- 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/session.d.ts.map +1 -1
- package/dist/cli/src/commands/source.d.ts +11 -0
- package/dist/cli/src/commands/source.d.ts.map +1 -1
- package/dist/cli/src/commands/update.d.ts.map +1 -1
- package/dist/cli/src/commands/validate-instances.d.ts +6 -0
- package/dist/cli/src/commands/validate-instances.d.ts.map +1 -1
- package/dist/cli/src/commands/validate.d.ts.map +1 -1
- package/dist/cli/src/commands/why.d.ts.map +1 -1
- package/dist/cli/src/plugin-store/reconcile.d.ts.map +1 -1
- package/dist/cli/src/session-hint.d.ts +7 -0
- package/dist/cli/src/session-hint.d.ts.map +1 -0
- package/dist/connectors/config.js +3 -3
- package/dist/connectors/index.js +21 -19
- package/dist/connectors/src/managed-gitconfig.d.ts +6 -4
- package/dist/connectors/src/managed-gitconfig.d.ts.map +1 -1
- package/dist/{connectors-HU5MHSUJ.js → connectors-OJJU4LSN.js} +24 -22
- package/dist/{connectors-HU5MHSUJ.js.map → connectors-OJJU4LSN.js.map} +1 -1
- package/dist/connectors-shared/index.js +2 -2
- package/dist/core/index.js +4 -4
- package/dist/core/publish-manifest.js +1 -1
- package/dist/core/runtime-assets.js +3 -3
- package/dist/core/src/agent-instances.d.ts +11 -0
- package/dist/core/src/agent-instances.d.ts.map +1 -1
- package/dist/core/src/index.d.ts +3 -2
- package/dist/core/src/index.d.ts.map +1 -1
- package/dist/core/src/publish-manifest.d.ts +20 -6
- package/dist/core/src/publish-manifest.d.ts.map +1 -1
- package/dist/core/src/repo-manager.d.ts +9 -0
- package/dist/core/src/repo-manager.d.ts.map +1 -1
- package/dist/core/src/run-state-ignore.d.ts +17 -0
- package/dist/core/src/run-state-ignore.d.ts.map +1 -0
- package/dist/core/src/workspace-config.d.ts.map +1 -1
- package/dist/core/workspace-config.js +2 -2
- package/dist/deploy/index.js +4 -4
- package/dist/discovery/index.js +2 -2
- package/dist/discovery/src/builtin-providers.d.ts.map +1 -1
- package/dist/discovery/src/discover-manifest.d.ts.map +1 -1
- package/dist/discovery/src/tree-entries.d.ts.map +1 -1
- package/dist/{ensure-sources-CAMWJTMR.js → ensure-sources-F6VQDCWY.js} +26 -24
- package/dist/ensure-sources-F6VQDCWY.js.map +1 -0
- package/dist/factory-assets/connectors/box.js +21 -19
- package/dist/factory-assets/connectors/deploy.js +21 -19
- package/dist/factory-assets/connectors/devserver.js +21 -19
- package/dist/factory-assets/connectors/flow/adapter.js +21 -19
- package/dist/factory-assets/connectors/flow/engine/router-settlement.d.ts +2 -0
- package/dist/factory-assets/connectors/flow/engine/router-settlement.d.ts.map +1 -1
- package/dist/factory-assets/connectors/flow/engine.js +5 -5
- package/dist/factory-assets/connectors/flow/run-flow.js +22 -20
- package/dist/factory-assets/connectors/flow.js +21 -19
- package/dist/factory-assets/connectors/git/CONNECTOR.md +4 -1
- package/dist/factory-assets/connectors/git/exec.d.ts.map +1 -1
- package/dist/factory-assets/connectors/git.js +21 -19
- package/dist/factory-assets/connectors/gmail.js +21 -19
- package/dist/factory-assets/connectors/googledrive.js +21 -19
- package/dist/factory-assets/connectors/local.js +21 -19
- package/dist/factory-assets/connectors/mattermost.js +21 -19
- package/dist/factory-assets/connectors/memory.js +21 -19
- package/dist/factory-assets/connectors/minio.js +21 -19
- package/dist/factory-assets/connectors/postgres.js +21 -19
- package/dist/factory-assets/connectors/s3.js +21 -19
- package/dist/factory-assets/connectors/sharepoint.js +21 -19
- package/dist/factory-assets/connectors/sqlite.js +21 -19
- package/dist/factory-assets/connectors/static-server.js +21 -19
- package/dist/factory-assets/connectors/tunnel.js +21 -19
- package/dist/factory-assets/connectors/webdav.js +21 -19
- package/dist/factory-assets/connectors/xstate-store.js +21 -19
- package/dist/factory-assets/connectors/xstate.js +21 -19
- package/dist/factory-assets/skills/authoring-skaile-assets/SKILL.md +14 -1
- package/dist/{flows-GVOVQGQW.js → flows-I6ODIPZZ.js} +7 -7
- package/dist/{flows-GVOVQGQW.js.map → flows-I6ODIPZZ.js.map} +1 -1
- package/dist/{helpers-WMCCODAV.js → helpers-PJNUTZXZ.js} +26 -24
- package/dist/{helpers-WMCCODAV.js.map → helpers-PJNUTZXZ.js.map} +1 -1
- package/dist/library/index.js +7 -7
- package/dist/library/install.js +2 -2
- package/dist/library/src/manifest-writer.d.ts +5 -0
- package/dist/library/src/manifest-writer.d.ts.map +1 -1
- package/dist/{library-publish-UQQMHTND.js → library-publish-FNNDWVBO.js} +47 -45
- package/dist/library-publish-FNNDWVBO.js.map +1 -0
- package/dist/model-endpoint/index.js +8 -7
- package/dist/{open-library-OJ4HT2X4.js → open-library-R5EZROFN.js} +29 -27
- package/dist/{open-library-OJ4HT2X4.js.map → open-library-R5EZROFN.js.map} +1 -1
- package/dist/{open-registry-LWGIOJDK.js → open-registry-RZW2AFD6.js} +11 -11
- package/dist/{open-registry-LWGIOJDK.js.map → open-registry-RZW2AFD6.js.map} +1 -1
- package/dist/{paths-FR2752HV.js → paths-RPK5PNZQ.js} +7 -7
- package/dist/{paths-FR2752HV.js.map → paths-RPK5PNZQ.js.map} +1 -1
- package/dist/{plugin-store-IALJUBN2.js → plugin-store-OJTERUEZ.js} +7 -7
- package/dist/{plugin-store-IALJUBN2.js.map → plugin-store-OJTERUEZ.js.map} +1 -1
- package/dist/{project-UQFCYHYS.js → project-S2FT3LLR.js} +43 -41
- package/dist/{project-UQFCYHYS.js.map → project-S2FT3LLR.js.map} +1 -1
- package/dist/resolver/index.js +4 -4
- package/dist/runner/index.js +32 -30
- package/dist/runner/src/capability-roundtrip.d.ts +6 -6
- package/dist/runner/src/capability-roundtrip.d.ts.map +1 -1
- package/dist/runner/src/composition/run-snapshot.d.ts +7 -1
- package/dist/runner/src/composition/run-snapshot.d.ts.map +1 -1
- package/dist/runner/src/serve.d.ts.map +1 -1
- package/dist/sdk/asset-manager.js +10 -10
- package/dist/sdk/bridge.js +17 -15
- package/dist/sdk/core.js +4 -4
- package/dist/sdk/flow.js +5 -5
- package/dist/sdk/index.js +32 -30
- package/dist/sdk/index.js.map +1 -1
- package/dist/sdk/resolver.js +4 -4
- package/dist/sdk/runner.js +32 -30
- package/dist/sdk/session.js +2 -2
- package/dist/sdk/transport/ws/server.js +5 -5
- package/dist/sdk/transport/ws.js +5 -5
- package/dist/sdk/transport.js +5 -5
- package/dist/sdk/types.js +1 -1
- package/dist/serve-preflight-AADSOUO2.js +58 -0
- package/dist/{serve-preflight-TYEKHC32.js.map → serve-preflight-AADSOUO2.js.map} +1 -1
- package/dist/session/index.js +2 -2
- package/dist/{setup-4JV2IMCB.js → setup-HOAJHUFQ.js} +27 -25
- package/dist/setup-HOAJHUFQ.js.map +1 -0
- package/dist/{skills-6QTKFMLW.js → skills-KHHW3RZ3.js} +6 -6
- package/dist/{skills-6QTKFMLW.js.map → skills-KHHW3RZ3.js.map} +1 -1
- package/dist/source-FOELFCY6.js +88 -0
- package/dist/{source-XYMMJVKR.js.map → source-FOELFCY6.js.map} +1 -1
- package/dist/{source-manifest-publish-SZFGGKB4.js → source-manifest-publish-Q7P5AEVU.js} +44 -42
- package/dist/source-manifest-publish-Q7P5AEVU.js.map +1 -0
- package/dist/transport/index.js +5 -5
- package/dist/transport/ws/server.js +5 -5
- package/dist/transport/ws.js +5 -5
- package/dist/tui/index.js +56 -37
- package/dist/tui/index.js.map +1 -1
- package/dist/tui/src/repl.d.ts +10 -0
- package/dist/tui/src/repl.d.ts.map +1 -1
- package/dist/types/index.js +1 -1
- package/dist/types/src/version.d.ts +4 -4
- package/dist/workspace-plugin/adapters/mcp.js +24 -22
- package/dist/workspace-plugin/adapters/omp.js +14 -14
- package/dist/workspace-plugin/index.js +1 -1
- package/package.json +1 -1
- package/dist/chunk-2TLPC6TQ.js.map +0 -1
- package/dist/chunk-5XHQBCB5.js.map +0 -1
- package/dist/chunk-65UAC3ZR.js.map +0 -1
- package/dist/chunk-6ARPZHOV.js.map +0 -1
- package/dist/chunk-6SXSVKQY.js.map +0 -1
- package/dist/chunk-7PVGND4J.js.map +0 -1
- package/dist/chunk-7SJHSGUV.js.map +0 -1
- package/dist/chunk-AQNW2FET.js.map +0 -1
- package/dist/chunk-BSMW3PX2.js.map +0 -1
- package/dist/chunk-DI6J2PJB.js.map +0 -1
- package/dist/chunk-DS6UUCFG.js.map +0 -1
- package/dist/chunk-E2EC6SAX.js.map +0 -1
- package/dist/chunk-EPXZQIC6.js.map +0 -1
- package/dist/chunk-F4CZQD3T.js.map +0 -1
- package/dist/chunk-J262X4JU.js.map +0 -1
- package/dist/chunk-J4WKNJHO.js.map +0 -1
- package/dist/chunk-JRVQV7WC.js.map +0 -1
- package/dist/chunk-MMOWIRHP.js.map +0 -1
- package/dist/chunk-SHTXMERQ.js.map +0 -1
- package/dist/chunk-TCH5UDKT.js.map +0 -1
- package/dist/chunk-TUFNY6OD.js.map +0 -1
- package/dist/chunk-U3UDOX6I.js.map +0 -1
- package/dist/chunk-VXYZ5M7Z.js.map +0 -1
- package/dist/chunk-XYCYGN3Q.js.map +0 -1
- package/dist/chunk-YN6N3RBM.js.map +0 -1
- package/dist/ensure-sources-CAMWJTMR.js.map +0 -1
- package/dist/library-publish-UQQMHTND.js.map +0 -1
- package/dist/serve-preflight-TYEKHC32.js +0 -56
- package/dist/setup-4JV2IMCB.js.map +0 -1
- package/dist/source-XYMMJVKR.js +0 -86
- package/dist/source-manifest-publish-SZFGGKB4.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../cli/src/commands/validate.ts"],"names":["parseYaml","parsed","a","c"],"mappings":"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","file":"chunk-Q2NYTMT6.js","sourcesContent":["/**\n * Validate asset versions, changelogs, and manifest schemas across asset repos.\n */\n\nimport { execFileSync } from \"node:child_process\";\nimport fs from \"node:fs\";\nimport path from \"node:path\";\nimport {\n ASSET_NAME_HINT,\n type ConnectorDeclaration,\n decodeSkaileYaml,\n isInsideProject,\n symlinkEscapeOfProject,\n isValidAssetName,\n isValidPublisher,\n loadSkPublishManifest,\n localConnectorMountDir,\n parseAssetRef,\n resolveRuntimeAssets,\n SKAILE_MANIFEST_FILENAME,\n readAssetBody,\n} from \"@skaile/workspaces/core\";\nimport {\n flowSkillVersionPins,\n loadFlow,\n} from \"@skaile/workspaces/factory-assets/connectors/flow/engine\";\nimport { parseManifestFile } from \"@skaile/workspaces/discovery\";\nimport { withYamlQuotingHint } from \"@skaile/workspaces/core/manifest\";\nimport { isNonAssetPath } from \"@skaile/workspaces/core/publish-manifest\";\nimport {\n assertManifestEditable,\n missingRootAssets,\n scanUnlistedAssets,\n UNLISTED_SCAN_SKIP_DIRS,\n} from \"@skaile/workspaces/library\";\nimport type { IAssetKindRegistry } from \"@skaile/workspaces/plugins\";\nimport type { FlowVersionNode } from \"@skaile/workspaces/resolver\";\nimport { validateFlowVersions } from \"@skaile/workspaces/resolver\";\nimport { Command } from \"commander\";\nimport { parse as parseYaml } from \"yaml\";\nimport { type ComposeRefContext, composeRefContext } from \"../agent-checks.ts\";\nimport { unknownHarnessErrors, unknownKeyWarnings } from \"../config-checks.ts\";\nimport { logErr, logInfo, logOk, logWarn } from \"../helpers.ts\";\nimport { getKindRegistry } from \"../open-registry.ts\";\nimport { loadDeclaredPlugins } from \"../plugin-store/index.ts\";\nimport {\n checkAsset,\n checkAssetFile,\n DEFAULT_VERSION,\n declaredVersion,\n findEntryManifestFile,\n invalidSemverText,\n MANIFEST_GLOBS,\n manifestParseErrorText,\n} from \"../skill-checks.ts\";\nimport {\n manifestEntryNameProblems,\n invalidPublisherMessage,\n manifestFilesProblems,\n manifestPublisherProblems,\n manifestRootProblems,\n manifestRequiresProblems,\n registeredAssetKeys,\n rejectRemovedDomainOption,\n removedDomainOption,\n reportLibrarySymlinks,\n unresolvedManifestDependencies,\n warnIgnoredDomainFiles,\n warnLegacyBundleFiles,\n} from \"./library-index.ts\";\nimport { assetEntryRef, manifestVersionMismatchMessage } from \"./publish-core.ts\";\nimport { checkAgentInstances } from \"./validate-instances.ts\";\n\n// ---------------------------------------------------------------------------\n// Manifest schema validation (skaile validate [path])\n// ---------------------------------------------------------------------------\n\n// The manifest file patterns live in skill-checks.ts (`MANIFEST_GLOBS`): `library index` names\n// the kind of a file it cannot parse with the same table.\n\n/**\n * `.claude`, `.codex` and `.omp` hold the copies `skaile add` deploys for the harnesses (and\n * the harness's own state): a project `validate .` checks what the author owns, not the\n * deployed bytes of an asset published elsewhere (p853).\n */\nconst HARNESS_DIRS: ReadonlySet<string> = new Set([\".claude\", \".codex\", \".omp\"]);\n/** Directories to skip during tree walk. */\nconst SKIP_DIRS = new Set([\n \"node_modules\",\n \"dist\",\n \".git\",\n \".skaile\",\n \"__pycache__\",\n ...HARNESS_DIRS,\n]);\n\ninterface ManifestCandidate {\n filePath: string;\n kind: string;\n}\n\n/** Recursively walk a directory tree and find manifest candidates. */\nfunction findManifestCandidates(rootPath: string): ManifestCandidate[] {\n const candidates: ManifestCandidate[] = [];\n\n function walk(dir: string): void {\n let entries: fs.Dirent[];\n try {\n entries = fs.readdirSync(dir, { withFileTypes: true });\n } catch {\n return;\n }\n for (const entry of entries) {\n const fullPath = path.join(dir, entry.name);\n if (entry.isDirectory()) {\n if (!SKIP_DIRS.has(entry.name)) walk(fullPath);\n } else if (entry.isFile()) {\n for (const glob of MANIFEST_GLOBS) {\n if (glob.pattern.test(fullPath)) {\n candidates.push({ filePath: fullPath, kind: glob.kind });\n break;\n }\n }\n }\n }\n }\n\n walk(rootPath);\n return candidates;\n}\n\n/**\n * Parse a single manifest candidate's bytes with the indexer's own parser\n * (`parseManifestFile`), so a manifest `library index` cannot parse — an empty\n * `SKILL.md`, no frontmatter, invalid YAML — is an error here too. On failure\n * the error is already logged; count it.\n */\nfunction parseManifestCandidate(\n c: ManifestCandidate,\n absRoot: string,\n): { kind: \"value\"; parsed: unknown; body?: string } | { kind: \"error\" } {\n const content = fs.readFileSync(c.filePath, \"utf-8\");\n const res = parseManifestFile(c.filePath, content);\n if (!res.ok) {\n logErr(\n `${path.relative(absRoot, c.filePath)} [${c.kind}] — ${manifestParseErrorText(res.reason)}`,\n );\n return { kind: \"error\" };\n }\n return {\n kind: \"value\",\n parsed: res.data,\n body: readAssetBody(c.filePath, content),\n };\n}\n\n/**\n * The library root a validated path belongs to: the nearest directory at or above `absRoot`\n * that holds a `skaile.yaml`, else `absRoot` itself.\n */\nfunction libraryRootOf(absRoot: string): string {\n for (let dir = absRoot; ; dir = path.dirname(dir)) {\n if (fs.existsSync(path.join(dir, SKAILE_MANIFEST_FILENAME))) return dir;\n if (path.dirname(dir) === dir) return absRoot;\n }\n}\n\n/**\n * Validate a single parsed manifest candidate against identity rules + the kind\n * registry. Returns the error/warning deltas this candidate contributes.\n */\nfunction validateManifestCandidate(\n c: ManifestCandidate,\n parsed: unknown,\n body: string | undefined,\n absRoot: string,\n registry: IAssetKindRegistry,\n strictConformance: boolean,\n composeRefs: ComposeRefContext,\n): { errors: number; warnings: number } {\n const relPath = path.relative(absRoot, c.filePath);\n let errors = 0;\n let warnings = 0;\n\n // The shared per-asset checks (also run by `library index` and the publish plan):\n // errors fail validate; advisories are warnings (exit code unchanged) unless\n // --strict-conformance escalates the agentskills.io conformance ones to errors.\n const dirName = path.basename(path.dirname(c.filePath)); // the manifest's folder\n const checked = checkAsset(\n c.kind,\n (parsed ?? {}) as Record<string, unknown>,\n body,\n dirName,\n registry,\n fs.readFileSync(c.filePath, \"utf-8\"),\n path.basename(c.filePath),\n { dir: path.dirname(c.filePath), libraryRoot: libraryRootOf(absRoot), composeRefs },\n );\n for (const f of checked.errors) {\n logErr(`${relPath} [${f.tag}] — ${f.text}`);\n errors++;\n }\n for (const f of checked.advisories) {\n const line = `${relPath} [${f.tag}] — ${f.text}`;\n // An untouched scaffold body is an error: a passing `validate` means the asset can be published.\n if ((f.conformance && strictConformance) || f.scaffoldBody) {\n logErr(line);\n errors++;\n } else {\n logWarn(line);\n warnings++;\n }\n }\n\n return { errors, warnings };\n}\n\n/**\n * The `kind:name` identity of every asset manifest under `root`, read quietly: a manifest\n * that does not parse holds no identity (its own validation reports the error).\n */\nexport function scanIdentities(root: string): Set<string> {\n const identities = new Set<string>();\n for (const c of findManifestCandidates(root)) {\n let parsed: unknown;\n try {\n const res = parseManifestFile(c.filePath, fs.readFileSync(c.filePath, \"utf-8\"));\n if (!res.ok) continue;\n parsed = res.data;\n } catch {\n continue;\n }\n if (parsed === null || typeof parsed !== \"object\") continue;\n const identity = (parsed as Record<string, unknown>)[c.kind === \"flow\" ? \"id\" : \"name\"];\n if (typeof identity === \"string\" && identity.length > 0)\n identities.add(`${c.kind}:${identity}`);\n }\n return identities;\n}\n\n/** Validate all manifest files in a directory tree using the kind registry. */\nexport function validateManifests(\n rootPath: string,\n strictConformance: boolean,\n registeredAssets: ReadonlySet<string> = new Set(),\n): { total: number; errors: number; warnings: number } {\n const absRoot = path.resolve(rootPath);\n if (!fs.existsSync(absRoot)) {\n logErr(`Path does not exist: ${absRoot}`);\n return { total: 0, errors: 1, warnings: 0 };\n }\n\n const registry: IAssetKindRegistry = getKindRegistry();\n const candidates = findManifestCandidates(absRoot);\n // Symlinks are refused with the text `library index` and the publish plan print (p520). In a\n // library (a `skaile.manifest.yaml` at the root) any symlink is refused, as `git add -A`\n // would publish it; elsewhere (a project) only those inside an asset folder or aliasing one.\n // A link elsewhere in a project is not refused: the connector real-path check judges a\n // `mountPath` link (p1332).\n const isLibrary = fs.existsSync(path.join(absRoot, SKAILE_MANIFEST_FILENAME));\n // A project's deployed harness folders (`add --link` makes `.claude/skills/x` a link to the\n // project's own `skills/x`) are not sources: they are skipped here as in the manifest walk.\n let errors = reportLibrarySymlinks(absRoot, {\n wholeTree: isLibrary,\n skipDirs: isLibrary ? undefined : HARNESS_DIRS,\n });\n let warnings = 0;\n\n // kind:name → directory of the first manifest seen; a second directory with the same\n // identity cannot be told apart by `add`/`publish` (and `library index` skips it).\n const seenIdentity = new Map<string, string>();\n // `composes:` refs resolve against the assets of the whole library (the scanned tree plus,\n // when `validate` got a sub-directory, its siblings under the enclosing library root) and the\n // registered libraries of its publisher: a ref no library holds fails `skaile add` (p415).\n const libraryRoot = libraryRootOf(absRoot);\n const composeRefs = composeRefContext(\n scanIdentities(libraryRoot),\n registeredAssets,\n loadSkPublishManifest(libraryRoot)?.publisher,\n );\n for (const c of candidates) {\n const parseResult = parseManifestCandidate(c, absRoot);\n if (parseResult.kind === \"error\") {\n errors++;\n continue;\n }\n\n const delta = validateManifestCandidate(\n c,\n parseResult.parsed,\n parseResult.body,\n absRoot,\n registry,\n strictConformance,\n composeRefs,\n );\n errors += delta.errors;\n warnings += delta.warnings;\n const obj = parseResult.parsed as Record<string, unknown> | null;\n const identity = obj && typeof obj === \"object\" ? obj[c.kind === \"flow\" ? \"id\" : \"name\"] : null;\n if (typeof identity === \"string\" && identity.length > 0) {\n const dir = path.dirname(c.filePath);\n const key = `${c.kind}:${identity}`;\n const first = seenIdentity.get(key);\n if (first === undefined) {\n seenIdentity.set(key, dir);\n } else if (first !== dir) {\n logErr(\n `${path.relative(absRoot, c.filePath)} [${c.kind}] — ${key} is also defined in ${path.relative(absRoot, first) || \".\"}; ` +\n \"two directories cannot share a kind and name (`skaile library index` keeps only the first).\",\n );\n errors++;\n }\n }\n }\n\n return { total: candidates.length, errors, warnings };\n}\n\n/** Recursively find every `skaile.yaml` / `*.skaile.yaml` workspace manifest. */\nfunction findWorkspaceManifests(rootPath: string): string[] {\n const out: string[] = [];\n function walk(dir: string): void {\n let entries: fs.Dirent[];\n try {\n entries = fs.readdirSync(dir, { withFileTypes: true });\n } catch {\n return;\n }\n for (const entry of entries) {\n const full = path.join(dir, entry.name);\n if (entry.isDirectory()) {\n if (!SKIP_DIRS.has(entry.name)) walk(full);\n } else if (entry.isFile() && /(^|\\.)skaile\\.yaml$/.test(entry.name)) {\n out.push(full);\n }\n }\n }\n walk(rootPath);\n return out;\n}\n\n/**\n * Validate the dependency refs and asset identities declared in every\n * `skaile.yaml` under a tree. This is the manifest-level mirror of the\n * per-file identity check: it parses each `dependencies[]` /\n * `overrides[].ref` through `parseAssetRef` (the exact code path that produced\n * the original \"publisher required …\" / \"invalid asset name …\" hard error) and\n * checks each `assets[].name` against the canonical name grammar.\n */\n/**\n * Collect every `[field, ref]` pair to validate from a workspace manifest:\n * each string in `dependencies[]` and each `overrides[].ref`.\n */\nfunction collectWorkspaceRefFields(parsed: Record<string, unknown>): Array<[string, string]> {\n const refFields: Array<[string, string]> = [];\n if (Array.isArray(parsed.dependencies)) {\n for (const d of parsed.dependencies) {\n if (typeof d === \"string\") refFields.push([\"dependencies\", d]);\n }\n }\n if (Array.isArray(parsed.overrides)) {\n for (const o of parsed.overrides) {\n const ref = (o as Record<string, unknown>)?.ref;\n if (typeof ref === \"string\") refFields.push([\"overrides.ref\", ref]);\n }\n }\n return refFields;\n}\n\n/** Parse each declared ref through `parseAssetRef`; returns the error count. */\nfunction validateWorkspaceRefs(refFields: Array<[string, string]>, relPath: string): number {\n let errors = 0;\n for (const [field, ref] of refFields) {\n try {\n const parsedRef = parseAssetRef(ref);\n // The library-side slug rule (`library index`, the publish plan) holds for a project's\n // `dependencies:` too: `add` cannot resolve such a ref, so `check` fails on it (p1080).\n const publisher = parsedRef.publisher?.replace(/^@/, \"\");\n if (publisher !== undefined && !isValidPublisher(publisher)) {\n logErr(`${relPath} [${field}] — ${ref}: ${invalidPublisherMessage(publisher)}`);\n errors++;\n }\n } catch (e) {\n logErr(`${relPath} [${field}] — ${e instanceof Error ? e.message : String(e)}`);\n errors++;\n }\n }\n return errors;\n}\n\n/** Validate `assets[].name` against the canonical name/ref grammar. */\nfunction validateWorkspaceAssets(parsed: Record<string, unknown>, relPath: string): number {\n if (!Array.isArray(parsed.assets)) return 0;\n let errors = 0;\n const topPublisher = typeof parsed.publisher === \"string\" ? parsed.publisher : undefined;\n for (const a of parsed.assets) {\n const asset = a as Record<string, unknown>;\n const name = asset?.name;\n const kind = typeof asset?.kind === \"string\" ? asset.kind : \"skill\";\n if (typeof name !== \"string\" || name.length === 0) continue;\n const publisher = typeof asset?.publisher === \"string\" ? asset.publisher : topPublisher;\n if (publisher !== undefined) {\n try {\n parseAssetRef(`${kind}:@${publisher}/${name}`);\n } catch (e) {\n logErr(`${relPath} [assets] — ${e instanceof Error ? e.message : String(e)}`);\n errors++;\n }\n } else if (!isValidAssetName(name)) {\n logErr(`${relPath} [assets] — invalid asset name \"${name}\" — ${ASSET_NAME_HINT}`);\n errors++;\n }\n }\n return errors;\n}\n\n/** `skaile.yaml` connector diagnostics that fail `validate` (the runner cannot mount it right). */\nconst CONNECTOR_ERROR_CODES: readonly string[] = [\n \"connector_missing_driver\",\n \"connector_missing_id\",\n \"connector_duplicate_id\",\n \"connector_invalid_access\",\n];\n\n/**\n * A `local` connector's `mountPath` is mounted read-write as given: one that does not exist\n * fails (`serve` refuses it too), one outside the project is a warning, one that reaches outside\n * through a symlink fails (p833).\n */\nfunction validateLocalConnectorMountPaths(\n projectDir: string,\n relPath: string,\n connectors: ReadonlyArray<ConnectorDeclaration>,\n): number {\n let errors = 0;\n for (const c of connectors) {\n // A connector without an id is reported once, as `connector_missing_id`; it has no\n // `connectors.<id>` to name in a second error.\n if (typeof c.id !== \"string\" || c.id === \"\") continue;\n if (c.driver !== \"local\" || c.mount) continue;\n const dir = localConnectorMountDir(c, projectDir);\n if (!dir) continue;\n const escapesTo = symlinkEscapeOfProject(dir, projectDir);\n if (!fs.existsSync(dir)) {\n logErr(\n `${relPath} [connectors] — connector_mount_path_missing: connectors.${c.id}.mountPath: ${dir} does not exist; create the directory or fix the path`,\n );\n errors++;\n } else if (escapesTo !== null) {\n logErr(\n `${relPath} [connectors] — connector_mount_path_symlink: connectors.${c.id}.mountPath: ${dir} is a symlink to ${escapesTo}, outside the project ${projectDir}; point mountPath at the real directory`,\n );\n errors++;\n } else if (!isInsideProject(dir, projectDir)) {\n logWarn(\n `${relPath} [connectors] — connectors.${c.id}.mountPath: ${dir} is outside the project ${projectDir}; the agent reads${c.access === \"read-write\" ? \" and writes\" : \"\"} there`,\n );\n }\n }\n return errors;\n}\n\nasync function validateWorkspaceManifests(rootPath: string): Promise<{\n total: number;\n errors: number;\n}> {\n const absRoot = path.resolve(rootPath);\n const files = findWorkspaceManifests(absRoot);\n let errors = 0;\n\n for (const file of files) {\n const relPath = path.relative(absRoot, file);\n let parsed: Record<string, unknown>;\n let text = \"\";\n try {\n text = fs.readFileSync(file, \"utf-8\");\n parsed = (parseYaml(text) ?? {}) as Record<string, unknown>;\n } catch (e) {\n const message = e instanceof Error ? e.message : String(e);\n logErr(`${relPath} — parse error: ${withYamlQuotingHint(message, text)}`);\n errors++;\n continue;\n }\n // A root that is no mapping, or a `dependencies:`/`sources:` of the wrong shape, is one\n // parse-error line, as `check` prints it (p1421, p1620).\n const unreadable = decodeSkaileYaml(text).diagnostics.find(\n (d) => d.code === \"non_object_root\" || d.code === \"invalid_value_shape\",\n );\n if (unreadable) {\n logErr(`${relPath} — parse error: ${unreadable.message}`);\n errors++;\n continue;\n }\n\n errors += validateWorkspaceRefs(collectWorkspaceRefFields(parsed), relPath);\n errors += validateWorkspaceAssets(parsed, relPath);\n for (const d of checkAgentInstances(path.dirname(file), parsed)) {\n const line = `${relPath} [agents] — ${d.code}: ${d.path ? `${d.path}: ` : \"\"}${d.message}`;\n if (d.severity === \"error\") {\n logErr(line);\n errors++;\n } else {\n logWarn(line);\n }\n }\n // A connector the runner cannot mount or mounts wrongly: no `driver` (or the old `adapter`\n // spelling), no `id`, a duplicate `id`, an `access` that is neither read-only nor read-write.\n const decoded = decodeSkaileYaml(fs.readFileSync(file, \"utf-8\"));\n for (const d of decoded.diagnostics) {\n if (!CONNECTOR_ERROR_CODES.includes(d.code)) continue;\n logErr(`${relPath} [connectors] — ${d.code}: ${d.path ? `${d.path}: ` : \"\"}${d.message}`);\n errors++;\n }\n // A `sources:` item with no url or a non-string publisher: `check`, `doctor` and `add` stop\n // on it, so `validate` must not call the file valid (p1620).\n for (const d of decoded.diagnostics) {\n if (d.code !== \"invalid_source_entry\") continue;\n logErr(`${relPath} — parse error: ${d.message}`);\n errors++;\n }\n // A key skaile.yaml no longer accepts (a legacy `provider:`): every command that reads the\n // file stops on it, so `validate` must not call the file valid (p1352).\n for (const d of decoded.diagnostics) {\n if (d.code !== \"legacy_key_rejected\") continue;\n logErr(relPath === \"skaile.yaml\" ? d.message : `${relPath} — ${d.message}`);\n errors++;\n }\n // The 5.x `driver` key of an agent-config profile: still read as `harness` until 7.0\n // (warning); setting both keys is an error. The retired `agent` key is ignored (warning).\n for (const d of decoded.diagnostics) {\n if (\n ![\"deprecated_harness_key\", \"retired_agent_key\", \"harness_key_conflict\"].includes(d.code)\n ) {\n continue;\n }\n const line = `${relPath} [agent-config] — ${d.code}: ${d.message}`;\n if (d.severity === \"error\") {\n logErr(line);\n errors++;\n } else {\n logWarn(line);\n }\n }\n // A mistyped key warns (p1474); a `harness:` no harness registers, plugins included, fails (p1022).\n for (const line of unknownKeyWarnings(decoded.diagnostics, relPath)) logWarn(line);\n for (const line of await unknownHarnessErrors(path.dirname(file), decoded.config, relPath)) {\n logErr(line);\n errors++;\n }\n errors += validateLocalConnectorMountPaths(\n path.dirname(file),\n relPath,\n decoded.config?.connectors ?? [],\n );\n // A `driver` no catalog entry provides: `serve` cannot mount it either. The text is the one\n // `serve` logs as `validation_warning`. An unreachable source (not cloned yet) may hold the\n // driver, so nothing is reported while one is missing.\n if ((decoded.config?.connectors ?? []).length > 0) {\n // A plugin's connector driver is known once the plugins are loaded, as `serve` loads them.\n await loadDeclaredPlugins(path.dirname(file));\n const { listConnectors } = await import(\"@skaile/workspaces/connectors\");\n const assets = await resolveRuntimeAssets(path.dirname(file), {\n isDriverRegistered: (driver) => listConnectors().includes(driver),\n });\n if (!assets.warnings.some((w) => w.code === \"repo_unavailable\")) {\n for (const w of assets.warnings) {\n if (w.code !== \"missing_driver\" || !w.name) continue;\n logErr(`${relPath} [connectors] — ${w.code}: ${w.message}`);\n errors++;\n }\n }\n }\n }\n\n return { total: files.length, errors };\n}\n\n/**\n * Check the library's publication manifest (`skaile.manifest.yaml` at the\n * validated root): every first-party `root:` must still exist. An entry whose\n * directory was deleted would otherwise stay publishable; the fix is\n * `skaile library index <lib>`, which drops it.\n */\nfunction validatePublishManifestRoots(rootPath: string): number {\n const absRoot = path.resolve(rootPath);\n const manifest = loadSkPublishManifest(absRoot);\n if (!manifest) return 0;\n const missing = missingRootAssets(absRoot, manifest);\n for (const a of missing) {\n logErr(\n `${SKAILE_MANIFEST_FILENAME} [assets] — ${assetEntryRef(a, manifest)}: root \"${a.root}\" does not exist. ` +\n \"Run `skaile library index <library>` to drop the entry, or restore the directory.\",\n );\n }\n return missing.length;\n}\n\n/**\n * An asset directory the library's manifest does not list is an error: `add` refuses it (`not\n * listed in its skaile.manifest.yaml`), the publish plan does not ship it, yet `git add -A`\n * commits its files. The fix is `skaile library index <lib>`, which lists it (p1193). A directory\n * that holds a kind + name the manifest already names elsewhere is the duplicate check's finding.\n * An asset that already fails its own check is not listed here: `library index` refuses it, so\n * \"run `library index`\" would send the author round in a circle; the check line names the real\n * fix (p871).\n */\nasync function validatePublishManifestUnlisted(rootPath: string): Promise<number> {\n const absRoot = path.resolve(rootPath);\n const manifest = loadSkPublishManifest(absRoot);\n if (!manifest) return 0;\n const registry = getKindRegistry();\n const libraryRoot = libraryRootOf(absRoot);\n const composeRefs = composeRefContext(\n scanIdentities(libraryRoot),\n await registeredAssetKeys(libraryRoot),\n manifest.publisher,\n );\n const unlisted = (\n await scanUnlistedAssets(\n absRoot,\n manifest.publisher ?? path.basename(absRoot),\n registry,\n UNLISTED_SCAN_SKIP_DIRS,\n )\n ).filter(\n (u) =>\n !u.registeredAt &&\n !u.parseFailure && // a file that does not parse has its own parse error\n checkAssetFile(u.entry.source, u.entry.kind, registry, absRoot, composeRefs).length === 0,\n );\n for (const u of unlisted) {\n logErr(\n `${path.relative(absRoot, u.entry.source)} [${u.entry.kind}] — ${u.entry.kind}:${u.entry.name} is on disk but not in ${SKAILE_MANIFEST_FILENAME}, so it is not published. ` +\n \"Run `skaile library index <library>` to list it, or delete the directory.\",\n );\n }\n return unlisted.length;\n}\n\n/**\n * Check every `assets[].dependencies` entry of the publication manifest with the\n * same syntax rule (and message) `library index` applies, so a malformed ref\n * fails `validate` instead of being silently dropped by the manifest decoder.\n */\nfunction validatePublishManifestRequires(rootPath: string): number {\n const problems = manifestRequiresProblems(path.resolve(rootPath));\n for (const p of problems) {\n logErr(\n `${SKAILE_MANIFEST_FILENAME} [assets] — ${p.asset}: ${p.message}. ` +\n \"Use the `kind:@<publisher>/name[#version]` form.\",\n );\n }\n return problems.length;\n}\n\n/**\n * Check the publisher of the publication manifest (top-level and every\n * `assets[].publisher`) against the one publisher slug rule `library create`, `library\n * index` and the publish plan apply, with the same message.\n */\nfunction validatePublishManifestPublisherSlugs(rootPath: string): number {\n const problems = manifestPublisherProblems(path.resolve(rootPath));\n for (const message of problems) logErr(message);\n return problems.length;\n}\n\n/**\n * Check every first-party `assets[].root` and `files:` entry of the publication manifest stays\n * inside the library and crosses no symlink ({@link manifestRootProblems},\n * {@link manifestFilesProblems}), the refusal `library index` and the publish plan print too: a\n * path outside the library is never found by `add` (p701, p1403), a missing file is no asset (p1404).\n */\nfunction validatePublishManifestRootPaths(rootPath: string): number {\n const problems = [\n ...manifestRootProblems(path.resolve(rootPath)),\n ...manifestFilesProblems(path.resolve(rootPath)),\n ...manifestEntryNameProblems(path.resolve(rootPath)),\n ];\n for (const message of problems) logErr(message);\n return problems.length;\n}\n\n/**\n * Parse the publication manifest the way `library index` and `library publish` open it, so a\n * `skaile.manifest.yaml` that does not parse fails `validate` too, with the file and line.\n * Without the file there is nothing to check.\n */\nfunction validatePublishManifestParses(rootPath: string): number {\n try {\n assertManifestEditable(path.resolve(rootPath));\n return 0;\n } catch (err) {\n logErr(err instanceof Error ? err.message : String(err));\n return 1;\n }\n}\n\n/**\n * Warn when a first-party `assets[].version` of the publication manifest differs\n * from the version in the asset's own manifest file. The file is the source of\n * truth — `skaile library index` rewrites the entry from it — so a hand-edited\n * manifest version is silently overwritten by the next index. Returns the warning count.\n */\nfunction validatePublishManifestVersions(rootPath: string): number {\n const absRoot = path.resolve(rootPath);\n const manifest = loadSkPublishManifest(absRoot);\n if (!manifest || manifest.source) return 0;\n let warnings = 0;\n for (const a of manifest.assets ?? []) {\n if (a.source || !a.version) continue;\n const file = findEntryManifestFile(absRoot, a);\n if (!file) continue;\n const res = parseManifestFile(file, fs.readFileSync(file, \"utf-8\"));\n if (!res.ok) continue; // reported by the per-file parse check\n const fileVersion = declaredVersion(res.data);\n if (fileVersion === undefined || fileVersion === a.version) continue;\n logWarn(\n manifestVersionMismatchMessage(\n assetEntryRef(a, manifest),\n a.version,\n toPosix(path.relative(absRoot, file)),\n fileVersion,\n ),\n );\n warnings++;\n }\n return warnings;\n}\n\n/**\n * Warn when a first-party asset file still carries a `metadata.publisher` that\n * differs from the publisher the manifest resolves for it (`assets[].publisher`,\n * else the top-level `publisher`). The manifest is the only source of an\n * asset's publisher; the file value is ignored by every resolver, so a stale\n * one only misleads the reader. Returns the warning count.\n */\nfunction validatePublishManifestPublishers(rootPath: string): number {\n const absRoot = path.resolve(rootPath);\n const manifest = loadSkPublishManifest(absRoot);\n if (!manifest || manifest.source) return 0;\n const bare = (p: string) => p.trim().replace(/^@/, \"\");\n let warnings = 0;\n for (const a of manifest.assets ?? []) {\n const resolved = a.publisher ?? manifest.publisher;\n if (a.source || !resolved) continue;\n const file = findEntryManifestFile(absRoot, a);\n if (!file) continue;\n const res = parseManifestFile(file, fs.readFileSync(file, \"utf-8\"));\n if (!res.ok) continue; // reported by the per-file parse check\n const meta = (res.data as Record<string, unknown>).metadata;\n const declared =\n meta !== null && typeof meta === \"object\"\n ? (meta as Record<string, unknown>).publisher\n : null;\n if (typeof declared !== \"string\" || bare(declared) === bare(resolved)) continue;\n logWarn(\n `${toPosix(path.relative(absRoot, file))} [publisher] — metadata.publisher \"${bare(declared)}\" differs from ` +\n `the manifest publisher \"${bare(resolved)}\" for ${assetEntryRef(a, manifest)}. The manifest wins and the ` +\n \"file value is ignored: delete `metadata.publisher` from the file, or set the publisher in \" +\n `${SKAILE_MANIFEST_FILENAME}.`,\n );\n warnings++;\n }\n return warnings;\n}\n\n/** Root-relative path prefixes excluded from version/changelog checks. */\nconst EXCLUDED_PATHS = [\"skaileup-shared/\", \"external/\", \"docs/\"];\n\n/** Normalise to forward slashes so prefix and set comparisons work on any OS. */\nfunction toPosix(p: string): string {\n return p.split(path.sep).join(\"/\");\n}\n\n/** True when a root-relative path sits under one of {@link EXCLUDED_PATHS}. */\nfunction isExcludedPath(relPath: string): boolean {\n const rel = toPosix(relPath);\n return EXCLUDED_PATHS.some((prefix) => rel.startsWith(prefix));\n}\n\ninterface AssetVersion {\n kind: \"skill\" | \"agent\" | \"flow\" | \"prompt\" | \"preset\" | \"contract\";\n name: string;\n version: string;\n filePath: string;\n}\n\n/** Manifest candidates whose kind carries a version `validate versions` checks. */\nconst VERSIONED_KINDS: Record<string, true> = {\n skill: true,\n agent: true,\n flow: true,\n prompt: true,\n preset: true,\n contract: true,\n};\n\n/**\n * Read one manifest candidate's identity and version. A manifest without a `version` reads as\n * {@link DEFAULT_VERSION}, as `validate`, `library index` and `add` read it (p1858); an unreadable\n * file has no version.\n */\nfunction readAssetVersion(c: ManifestCandidate): AssetVersion {\n const kind = c.kind as AssetVersion[\"kind\"];\n const fileName = path.basename(c.filePath);\n const dirName = path.basename(path.dirname(c.filePath));\n const content = fs.readFileSync(c.filePath, \"utf-8\");\n if (c.filePath.endsWith(\".md\")) {\n // The version `library index` records (top-level `version`, else `metadata.version`).\n const res = parseManifestFile(c.filePath, content);\n const data = res.ok ? (res.data as Record<string, unknown>) : {};\n const stem = fileName.replace(/\\.prompt\\.md$/, \"\");\n return {\n kind,\n name: typeof data.name === \"string\" ? data.name : kind === \"prompt\" ? stem : dirName,\n version: res.ok ? (declaredVersion(data) ?? DEFAULT_VERSION) : \"\",\n filePath: c.filePath,\n };\n }\n let parsed: Record<string, unknown> | null = null;\n try {\n parsed = parseYaml(content);\n } catch {\n // Reported by the default `skaile validate`; here the asset just has no readable version.\n }\n const version = parsed ? String(parsed.version ?? DEFAULT_VERSION) : \"\";\n if (kind === \"flow\") {\n return {\n kind,\n name: String(parsed?.id ?? fileName.replace(\".flow.yaml\", \"\")),\n version,\n filePath: c.filePath,\n };\n }\n return {\n kind,\n name: String(parsed?.name ?? dirName),\n version,\n filePath: c.filePath,\n };\n}\n\n/**\n * Walk `root` at any depth and collect the version of every skill, agent, flow, prompt,\n * preset and contract — the same tree walk the default `validate` uses, so a library laid out\n * as `<root>/<asset>/SKILL.md` is covered as well as `skills/<asset>/SKILL.md`.\n */\nfunction collectAssetVersions(root: string): AssetVersion[] {\n if (!fs.existsSync(root)) return [];\n const assets: AssetVersion[] = [];\n for (const c of findManifestCandidates(root)) {\n if (!VERSIONED_KINDS[c.kind]) continue;\n // Only the YAML flow form and `agent.yaml` / `AGENT.md` carry a readable version here.\n if (c.filePath.endsWith(\".flow.json\")) continue;\n if (isExcludedPath(path.relative(root, c.filePath))) continue;\n assets.push(readAssetVersion(c));\n }\n return assets;\n}\n\n/** Root-relative posix location of an asset file, for messages. */\nfunction assetLocation(a: AssetVersion, root: string): string {\n return toPosix(path.relative(root, a.filePath));\n}\n\n/**\n * Nearest ancestor directory of `assetRelPath` (root-relative, posix) that\n * holds a `CHANGELOG.md`, walking up from the asset's own directory to and\n * including `root`, never above it. Returns the changelog's root-relative\n * path, or `null` when no ancestor has one.\n */\nfunction findChangelogUnit(assetRelPath: string, root: string): string | null {\n let dir = path.posix.dirname(toPosix(assetRelPath));\n for (;;) {\n const candidate = dir === \".\" ? \"CHANGELOG.md\" : `${dir}/CHANGELOG.md`;\n if (fs.existsSync(path.join(root, candidate))) return candidate;\n if (dir === \".\") return null;\n dir = path.posix.dirname(dir);\n }\n}\n\n/** Outcome of {@link checkChangelogUnits}. All paths are root-relative posix. */\nexport interface ChangelogCheck {\n /** Changelog units whose `CHANGELOG.md` is among the modified files. */\n updated: string[];\n /** Changelog units covering a modified asset whose `CHANGELOG.md` is not modified. */\n stale: string[];\n /** Modified assets with no `CHANGELOG.md` in any ancestor up to the root. */\n orphans: string[];\n}\n\n/**\n * Group the modified asset files by their nearest-ancestor `CHANGELOG.md` and\n * report which units were updated alongside them. Assets under\n * {@link EXCLUDED_PATHS} are ignored.\n *\n * @param modifiedFiles - Changed paths relative to `root`.\n * @param root - The asset root (`ai-assets/`); the walk up never leaves it.\n */\nexport function checkChangelogUnits(modifiedFiles: string[], root: string): ChangelogCheck {\n const modified = new Set(modifiedFiles.map(toPosix));\n const assetPattern = /(SKILL\\.md|agent\\.yaml|\\.flow\\.yaml|\\.prompt\\.md)$/;\n const units = new Set<string>();\n const orphans: string[] = [];\n for (const f of modified) {\n if (!assetPattern.test(f) || isExcludedPath(f)) continue;\n const unit = findChangelogUnit(f, root);\n if (unit) units.add(unit);\n else orphans.push(f);\n }\n const updated = [...units].filter((u) => modified.has(u));\n const stale = [...units].filter((u) => !modified.has(u));\n return { updated, stale, orphans };\n}\n\n/** Extract version from file content using proper YAML parsing */\nfunction extractVersionFromContent(filePath: string, content: string): string | null {\n if (filePath.endsWith(\".yaml\")) {\n const parsed = parseYaml(content);\n return parsed?.version ?? null;\n }\n // SKILL.md / .prompt.md — YAML frontmatter\n const fmMatch = content.match(/^---\\n([\\s\\S]*?)\\n---/);\n if (!fmMatch) return null;\n const parsed = parseYaml(fmMatch[1]);\n return parsed?.metadata?.version ?? parsed?.version ?? null;\n}\n\n/** Check every asset has a present + semver-valid version. */\nfunction checkAssetVersions(\n assets: AssetVersion[],\n root: string,\n): { errors: number; warnings: number } {\n let errors = 0;\n const warnings = 0;\n for (const a of assets) {\n const location = assetLocation(a, root);\n if (!a.version) {\n logErr(`${a.kind}:${a.name} (${location}) — missing version`);\n errors++;\n continue;\n }\n const invalid = invalidSemverText(a.version);\n if (invalid) {\n logErr(`${a.kind}:${a.name} (${location}) — ${invalid}`);\n errors++;\n }\n }\n return { errors, warnings };\n}\n\n/** In --changed-only mode, warn when a changed asset's version was not bumped. */\nfunction checkVersionBumps(assets: AssetVersion[], root: string): number {\n let warnings = 0;\n for (const a of assets) {\n if (!a.version) continue; // already flagged above\n // `HEAD:./<path>` is relative to `root` (the cwd), not the repository top level.\n const relPath = toPosix(path.relative(root, a.filePath));\n try {\n const headContent = execFileSync(\"git\", [\"show\", `HEAD:./${relPath}`], {\n cwd: root,\n encoding: \"utf-8\",\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n });\n const headVersion = extractVersionFromContent(a.filePath, headContent);\n if (headVersion && headVersion === a.version) {\n logWarn(\n `${a.kind}:${a.name} (${assetLocation(a, root)}) — file changed but version not bumped (${a.version})`,\n );\n warnings++;\n }\n } catch {\n // New file (no HEAD version) — that's fine\n }\n }\n return warnings;\n}\n\n/**\n * Validate flow node skill-version pins against the discovered skill versions.\n *\n * Flows are read through `loadFlow`, which normalizes legacy v1 documents into\n * the strict v2 shape — reading the authored YAML directly would miss every v2\n * pin, since those ride in `run.assets` rather than `node.data.version`.\n */\nfunction checkFlowVersionPins(\n assets: AssetVersion[],\n root: string,\n): { errors: number; warnings: number } {\n const flows = assets.filter((a) => a.kind === \"flow\");\n const skillVersionMap = new Map<string, string>();\n for (const a of assets.filter((a) => a.kind === \"skill\")) {\n skillVersionMap.set(a.name, a.version);\n }\n\n let errors = 0;\n let warnings = 0;\n for (const f of flows) {\n let pins: FlowVersionNode[];\n try {\n pins = flowSkillVersionPins(loadFlow(f.filePath));\n } catch (err) {\n // An unreadable flow is a gap in the check, not an absence of findings.\n // Report the path, not `f.name`: that id comes from a raw-YAML read that\n // falls back to the filename stem exactly when the file is unusable.\n logWarn(\n `flow:${f.name} (${path.relative(root, f.filePath)}) — could not be read: ` +\n `${err instanceof Error ? err.message : err}`,\n );\n warnings++;\n continue;\n }\n\n if (pins.length === 0) continue;\n const checks = validateFlowVersions(pins, skillVersionMap);\n for (const c of checks.filter((c) => !c.satisfied)) {\n logErr(\n `flow:${f.name} node ${c.nodeId} — wants ${c.requested}, found ${c.actual || \"(none)\"}`,\n );\n errors++;\n }\n }\n return { errors, warnings };\n}\n\n/**\n * Root of a `validate versions` / `validate changelog` run: the explicit `[path]`, else the\n * library the shell is in (the nearest directory at or above the cwd that holds\n * `skaile.manifest.yaml`), else the cwd itself, as plain `validate` reads it. The bundled\n * factory assets are never a default (p1194). Returns `null` after printing an error when\n * the path does not exist, or when the root holds no library (see {@link isCheckableRoot}).\n */\nfunction resolveCheckRoot(pathArg: string | undefined): string | null {\n let root = process.cwd();\n if (pathArg) {\n root = path.resolve(pathArg);\n if (!fs.existsSync(root)) {\n logErr(`Path does not exist: ${root}`);\n return null;\n }\n } else {\n for (let dir = root; ; dir = path.dirname(dir)) {\n if (fs.existsSync(path.join(dir, SKAILE_MANIFEST_FILENAME))) {\n root = dir;\n break;\n }\n if (path.dirname(dir) === dir) break;\n }\n }\n if (!isCheckableRoot(root)) {\n logErr(\n `Nothing to check in ${root}: no ${SKAILE_MANIFEST_FILENAME} and no versioned asset (skill, agent, flow, prompt, contract or preset) found. Run it in a library or pass the library directory.`,\n );\n return null;\n }\n return root;\n}\n\n/** Whether `root` is a library: it holds a library manifest or at least one versioned asset. */\nfunction isCheckableRoot(root: string): boolean {\n return (\n fs.existsSync(path.join(root, SKAILE_MANIFEST_FILENAME)) ||\n collectAssetVersions(root).length > 0\n );\n}\n\n/** `true` when `root` lies inside a git work tree. */\nfunction isInGitWorkTree(root: string): boolean {\n try {\n return (\n execFileSync(\"git\", [\"rev-parse\", \"--is-inside-work-tree\"], {\n cwd: root,\n encoding: \"utf-8\",\n stdio: [\"ignore\", \"pipe\", \"ignore\"],\n }).trim() === \"true\"\n );\n } catch {\n return false;\n }\n}\n\n/** `true` when the git work tree at `root` has at least one commit (`HEAD` resolves). */\nfunction hasCommit(root: string): boolean {\n try {\n execFileSync(\"git\", [\"rev-parse\", \"--verify\", \"--quiet\", \"HEAD\"], {\n cwd: root,\n stdio: [\"ignore\", \"ignore\", \"ignore\"],\n });\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Run `git diff --name-only --relative <ref>` in `root` and return the changed paths\n * (relative to `root`), plus — with `untracked` — the new files git does not track yet.\n * No git work tree prints `<what> needs a git repository`; any other git failure — a bad\n * ref, no `git` — prints one `git diff failed in <root>: <first stderr line>` line. Both\n * return `null`; git's own usage text never reaches the terminal.\n *\n * @param what The command that needs git, for the message (`--changed-only`, `changelog`).\n */\nfunction changedFiles(\n root: string,\n ref: string,\n what: string,\n opts: { untracked?: boolean } = {},\n): string[] | null {\n if (!isInGitWorkTree(root)) {\n logErr(`${what} needs a git repository: ${root} is not inside a git work tree.`);\n return null;\n }\n if (ref === \"HEAD\" && !hasCommit(root)) {\n logErr(\n `${what} compares with the last commit, and ${root} has no commit yet. Commit the library first (\\`skaile library commit <name>\\`), then run it again.`,\n );\n return null;\n }\n try {\n const out = execFileSync(\n \"git\",\n [\"diff\", \"--name-only\", \"--relative\", \"--end-of-options\", ref],\n {\n cwd: root,\n encoding: \"utf-8\",\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n },\n );\n const changed = out.trim().split(\"\\n\").filter(Boolean);\n if (opts.untracked) {\n // New files git does not track yet (`--others` paths are relative to `root`).\n const fresh = execFileSync(\"git\", [\"ls-files\", \"--others\", \"--exclude-standard\"], {\n cwd: root,\n encoding: \"utf-8\",\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n });\n changed.push(...fresh.trim().split(\"\\n\").filter(Boolean));\n }\n return changed;\n } catch (err) {\n const stderr = err instanceof Error && \"stderr\" in err ? String(err.stderr).trim() : \"\";\n const reason = (stderr || (err instanceof Error ? err.message : String(err))).split(\"\\n\")[0];\n logErr(`git diff failed in ${root}: ${reason}`);\n return null;\n }\n}\n\n/**\n * The directory whose files belong to `a`: the asset's own folder for a skill, agent, contract,\n * or a prompt/flow/preset that sits in a folder named after it — the folder `library create`\n * scaffolds. A single prompt/flow/preset file next to others is its own asset (`null`).\n */\nfunction assetOwnDir(a: AssetVersion): string | null {\n const dir = path.dirname(a.filePath);\n if ([\"skill\", \"agent\", \"contract\"].includes(a.kind) || path.basename(dir) === a.name) return dir;\n return null;\n}\n\n/**\n * `true` when `a` changed: its asset file, or any file under its folder that a deploy ships\n * (the lock hash covers them, minus the deploy ignore list), is among `changedAbs`.\n */\nfunction assetChanged(a: AssetVersion, changedAbs: ReadonlySet<string>): boolean {\n if (changedAbs.has(a.filePath)) return true;\n const dir = assetOwnDir(a);\n if (dir === null) return false;\n for (const f of changedAbs) {\n const rel = path.relative(dir, f);\n if (rel.startsWith(\"..\") || path.isAbsolute(rel)) continue;\n if (!isNonAssetPath(toPosix(rel), \"asset-root\")) return true;\n }\n return false;\n}\n\n/** Body of `skaile validate versions` — semver + bump + flow-pin checks. */\nfunction runVersionsCheck(\n pathArg: string | undefined,\n opts: { changedOnly?: boolean; strict?: boolean },\n): void {\n const root = resolveCheckRoot(pathArg);\n if (root === null) {\n process.exit(1);\n return;\n }\n let assets = collectAssetVersions(root);\n // A directory with no asset has nothing to check: `Checked 0 assets / All versions valid` would\n // read as a pass, so it fails as `validate` does for a path with no manifests (p1194).\n if (assets.length === 0) {\n logErr(\n `Nothing to check in ${root}: no versioned asset (skill, agent, flow, prompt, contract or preset) found. Pass the library directory.`,\n );\n process.exit(1);\n return;\n }\n\n // Filter to changed files only if requested\n if (opts.changedOnly) {\n const changed = changedFiles(root, \"HEAD\", \"--changed-only\", { untracked: true });\n if (changed === null) {\n process.exit(1);\n return;\n }\n const changedAbs = new Set(changed.map((f) => path.resolve(root, f)));\n assets = assets.filter((a) => assetChanged(a, changedAbs));\n }\n\n logInfo(`Checking versions in ${root}`);\n const versionCheck = checkAssetVersions(assets, root);\n let errors = versionCheck.errors;\n let warnings = versionCheck.warnings;\n\n // In --changed-only mode, check if version was actually bumped\n if (opts.changedOnly) {\n warnings += checkVersionBumps(assets, root);\n }\n\n const pinCheck = checkFlowVersionPins(assets, root);\n errors += pinCheck.errors;\n warnings += pinCheck.warnings;\n\n // Summary\n console.log();\n logInfo(`Checked ${assets.length} assets`);\n if (errors === 0 && warnings === 0) {\n logOk(\"All versions valid\");\n } else {\n if (errors > 0) logErr(`${errors} error(s)`);\n if (warnings > 0) logWarn(`${warnings} warning(s)`);\n }\n\n if (errors > 0 || (opts.strict && warnings > 0)) {\n process.exit(1);\n }\n}\n\n/**\n * Creates the `skaile validate` command group.\n *\n * Validates asset manifests, version fields, and changelogs in an asset\n * repository tree. Subcommands: default `validate [path]` (schema check),\n * `versions` (semver + flow pin validation), `changelog` (modified assets\n * must have an updated nearest-ancestor CHANGELOG.md).\n *\n * @returns Configured {@link Command} ready for `program.addCommand()`.\n * @docLink cli/commands/validate#make-validate-command\n */\nexport function makeValidateCommand(): Command {\n const cmd = new Command(\"validate\").description(\n \"Validate asset manifests, versions, and changelogs\",\n );\n\n // Default action: skaile validate [path]\n cmd\n .argument(\"[path]\", \"Path to asset repo or directory to validate\", \".\")\n .option(\n \"--strict-conformance\",\n \"Treat Agent Skills (agentskills.io) standard findings as errors\",\n )\n .action(async (targetPath: string, opts: { strictConformance?: boolean }) => {\n const absPath = path.resolve(targetPath);\n if (fs.existsSync(absPath) && !fs.statSync(absPath).isDirectory()) {\n logErr(`${absPath} is not a directory: nothing to validate. Pass the library directory.`);\n process.exit(1);\n return;\n }\n logInfo(`Validating manifests in ${absPath}`);\n const { total, errors, warnings } = validateManifests(\n absPath,\n opts.strictConformance ?? false,\n await registeredAssetKeys(libraryRootOf(absPath)),\n );\n const ws = await validateWorkspaceManifests(absPath);\n const rootErrors = validatePublishManifestRoots(absPath);\n const slugErrors = validatePublishManifestPublisherSlugs(absPath);\n const rootPathErrors = validatePublishManifestRootPaths(absPath);\n const parseErrors = validatePublishManifestParses(absPath);\n const requiresErrors = validatePublishManifestRequires(absPath);\n const unlistedErrors = await validatePublishManifestUnlisted(absPath);\n const versionWarnings = validatePublishManifestVersions(absPath);\n const publisherWarnings = validatePublishManifestPublishers(absPath);\n // Advisory and offline: a dependency no registered library holds may live in a\n // library that is not registered on this machine.\n const dependencyProblems = await unresolvedManifestDependencies(absPath);\n for (const w of dependencyProblems) logWarn(w);\n const dependencyWarnings = dependencyProblems.length;\n const totalErrors =\n errors +\n ws.errors +\n rootErrors +\n slugErrors +\n rootPathErrors +\n parseErrors +\n requiresErrors +\n unlistedErrors;\n console.log();\n warnIgnoredDomainFiles(absPath);\n warnLegacyBundleFiles(absPath);\n logInfo(`Scanned ${total} asset manifest(s) and ${ws.total} skaile.yaml file(s)`);\n // Nothing scanned and no library manifest: a directory with nothing in it is not valid,\n // it is not validated (p745).\n if (\n total === 0 &&\n ws.total === 0 &&\n totalErrors === 0 &&\n !fs.existsSync(path.join(absPath, SKAILE_MANIFEST_FILENAME))\n ) {\n logErr(\n `Nothing to validate in ${absPath}: no asset manifest, skaile.yaml or ${SKAILE_MANIFEST_FILENAME} found.`,\n );\n process.exit(1);\n return;\n }\n const totalWarnings = warnings + versionWarnings + publisherWarnings + dependencyWarnings;\n if (totalWarnings > 0) logWarn(`${totalWarnings} warning(s)`);\n if (totalErrors === 0) {\n logOk(\"All manifests valid\");\n } else {\n logErr(`${totalErrors} validation error(s)`);\n process.exit(1);\n }\n });\n\n cmd\n .command(\"versions\")\n .description(\"Check version fields and flow version pins\")\n .argument(\"[path]\", \"Library or asset directory (default: the current library)\")\n .option(\"--changed-only\", \"Only check assets modified since last commit\")\n .option(\"--strict\", \"Exit 1 on warnings (for CI)\")\n .addOption(removedDomainOption())\n .action(\n (\n pathArg: string | undefined,\n opts: { changedOnly?: boolean; strict?: boolean; domain?: string },\n ) => {\n rejectRemovedDomainOption(opts);\n runVersionsCheck(pathArg, opts);\n },\n );\n\n cmd\n .command(\"changelog\")\n .description(\"Check that modified assets have an updated nearest CHANGELOG.md\")\n .argument(\"[path]\", \"Library or asset directory (default: the current library)\")\n .option(\"--base <ref>\", \"Git base ref for diff\", \"HEAD\")\n .action((pathArg: string | undefined, opts: { base: string }) => {\n const root = resolveCheckRoot(pathArg);\n if (root === null) {\n process.exit(1);\n return;\n }\n const modifiedFiles = changedFiles(root, opts.base, \"changelog\");\n if (modifiedFiles === null) {\n process.exit(1);\n return;\n }\n const { updated, stale, orphans } = checkChangelogUnits(modifiedFiles, root);\n\n if (updated.length + stale.length + orphans.length === 0) {\n logOk(\"No modified assets found\");\n return;\n }\n\n for (const unit of updated) logOk(`${unit} updated`);\n for (const unit of stale) logErr(`${unit} not updated (assets were modified)`);\n for (const asset of orphans) {\n logErr(`${asset} — no CHANGELOG.md in any ancestor directory up to the asset root`);\n }\n\n if (stale.length + orphans.length > 0) process.exit(1);\n });\n\n return cmd;\n}\n"]}
|
|
@@ -256,14 +256,19 @@ var NON_ASSET_DIRS = /* @__PURE__ */ new Set([
|
|
|
256
256
|
".mypy_cache",
|
|
257
257
|
".ruff_cache",
|
|
258
258
|
".idea",
|
|
259
|
-
".vscode"
|
|
259
|
+
".vscode",
|
|
260
|
+
".tox",
|
|
261
|
+
".nox",
|
|
262
|
+
".nyc_output",
|
|
263
|
+
"htmlcov"
|
|
260
264
|
]);
|
|
261
|
-
var
|
|
262
|
-
|
|
263
|
-
|
|
265
|
+
var ROOT_ONLY_NON_ASSET_DIRS = /* @__PURE__ */ new Set(["coverage", "dist", "build"]);
|
|
266
|
+
var NON_ASSET_FILES = /* @__PURE__ */ new Set([".DS_Store", "Thumbs.db", ".coverage"]);
|
|
267
|
+
function isNonAssetDir(name, atAssetRoot) {
|
|
268
|
+
return NON_ASSET_DIRS.has(name) || name.endsWith(".egg-info") || atAssetRoot && ROOT_ONLY_NON_ASSET_DIRS.has(name);
|
|
264
269
|
}
|
|
265
270
|
function isNonAssetFile(name) {
|
|
266
|
-
return NON_ASSET_FILES.has(name) || name.endsWith(".pyc") || name.endsWith(".pyo") || name.endsWith(".swp") || name.endsWith(".swo") || name.endsWith("~") || name.endsWith(".bak") || name.endsWith(".log") || isSecretFileName(name);
|
|
271
|
+
return NON_ASSET_FILES.has(name) || name.endsWith(".pyc") || name.endsWith(".pyo") || name.endsWith(".swp") || name.endsWith(".swo") || name.endsWith("~") || name.endsWith(".bak") || name.endsWith(".log") || name.startsWith("._") || name.startsWith(".coverage.") || isSecretFileName(name);
|
|
267
272
|
}
|
|
268
273
|
var ENV_TEMPLATE_SUFFIXES = /* @__PURE__ */ new Set([".example", ".sample", ".template", ".dist"]);
|
|
269
274
|
function isEnvFileName(name) {
|
|
@@ -307,6 +312,7 @@ function isSecretFileName(name) {
|
|
|
307
312
|
}
|
|
308
313
|
var LIBRARY_GITIGNORE = [
|
|
309
314
|
".DS_Store",
|
|
315
|
+
"._*",
|
|
310
316
|
"Thumbs.db",
|
|
311
317
|
"node_modules/",
|
|
312
318
|
"__pycache__/",
|
|
@@ -317,6 +323,29 @@ var LIBRARY_GITIGNORE = [
|
|
|
317
323
|
"*.swo",
|
|
318
324
|
"*~",
|
|
319
325
|
"*.bak",
|
|
326
|
+
".venv/",
|
|
327
|
+
"venv/",
|
|
328
|
+
".pytest_cache/",
|
|
329
|
+
".mypy_cache/",
|
|
330
|
+
".ruff_cache/",
|
|
331
|
+
".idea/",
|
|
332
|
+
".vscode/",
|
|
333
|
+
".tox/",
|
|
334
|
+
".nox/",
|
|
335
|
+
".nyc_output/",
|
|
336
|
+
"htmlcov/",
|
|
337
|
+
// Generic build names ship deeper in an asset (`references/build/`): git matches an unanchored
|
|
338
|
+
// `build/` at any depth, so these match only the asset root of the default layout (`<name>/`
|
|
339
|
+
// in the library, or the library root for a root-level skill).
|
|
340
|
+
"/coverage/",
|
|
341
|
+
"/*/coverage/",
|
|
342
|
+
"/dist/",
|
|
343
|
+
"/*/dist/",
|
|
344
|
+
"/build/",
|
|
345
|
+
"/*/build/",
|
|
346
|
+
"*.egg-info/",
|
|
347
|
+
".coverage",
|
|
348
|
+
".coverage.*",
|
|
320
349
|
".env",
|
|
321
350
|
".env.*",
|
|
322
351
|
...SECRET_FILE_NAMES,
|
|
@@ -325,10 +354,13 @@ var LIBRARY_GITIGNORE = [
|
|
|
325
354
|
...[...ENV_TEMPLATE_SUFFIXES].map((suffix) => `!.env${suffix}`),
|
|
326
355
|
""
|
|
327
356
|
].join("\n");
|
|
328
|
-
function isNonAssetPath(posixPath) {
|
|
357
|
+
function isNonAssetPath(posixPath, relativeTo) {
|
|
329
358
|
const parts = posixPath.split("/");
|
|
330
359
|
const last = parts.pop() ?? "";
|
|
331
|
-
return isNonAssetFile(last) || parts.some(isNonAssetDir);
|
|
360
|
+
return isNonAssetFile(last) || parts.some((part, i) => isNonAssetDir(part, relativeTo === "tree" || i === 0));
|
|
361
|
+
}
|
|
362
|
+
function isLibraryManifestAtAssetRoot(relPosix) {
|
|
363
|
+
return relPosix === SKAILE_MANIFEST_FILENAME;
|
|
332
364
|
}
|
|
333
365
|
function listAssetFiles(absDir) {
|
|
334
366
|
const out = [];
|
|
@@ -342,8 +374,8 @@ function listAssetFiles(absDir) {
|
|
|
342
374
|
for (const e of entries) {
|
|
343
375
|
const childRel = rel ? `${rel}/${e.name}` : e.name;
|
|
344
376
|
if (e.isDirectory()) {
|
|
345
|
-
if (!isNonAssetDir(e.name)) walk(join(dir, e.name), childRel);
|
|
346
|
-
} else if (e.isFile() && !isNonAssetFile(e.name)) {
|
|
377
|
+
if (!isNonAssetDir(e.name, rel === "")) walk(join(dir, e.name), childRel);
|
|
378
|
+
} else if (e.isFile() && !isNonAssetFile(e.name) && !isLibraryManifestAtAssetRoot(childRel)) {
|
|
347
379
|
out.push(childRel);
|
|
348
380
|
}
|
|
349
381
|
}
|
|
@@ -479,7 +511,7 @@ function listSkippedSymlinks(absDir) {
|
|
|
479
511
|
const childRel = rel ? `${rel}/${e.name}` : e.name;
|
|
480
512
|
if (e.isSymbolicLink()) {
|
|
481
513
|
if (!isNonAssetFile(e.name)) out.push(childRel);
|
|
482
|
-
} else if (e.isDirectory() && !isNonAssetDir(e.name)) {
|
|
514
|
+
} else if (e.isDirectory() && !isNonAssetDir(e.name, rel === "")) {
|
|
483
515
|
walk(join(dir, e.name), childRel);
|
|
484
516
|
}
|
|
485
517
|
}
|
|
@@ -493,7 +525,10 @@ function listLibrarySymlinks(absDir, opts = {}) {
|
|
|
493
525
|
} catch {
|
|
494
526
|
return [];
|
|
495
527
|
}
|
|
496
|
-
const skipped = (name) =>
|
|
528
|
+
const skipped = (name) => (
|
|
529
|
+
// A whole-tree walk does not know the asset roots: generic build names are skipped anywhere.
|
|
530
|
+
isNonAssetDir(name, true) || opts.skipDirs?.has(name) === true
|
|
531
|
+
);
|
|
497
532
|
const out = [];
|
|
498
533
|
const walk = (dir, rel, inAsset) => {
|
|
499
534
|
let entries;
|
|
@@ -547,13 +582,14 @@ function listSecretFiles(absDir) {
|
|
|
547
582
|
for (const e of entries) {
|
|
548
583
|
const childRel = rel ? `${rel}/${e.name}` : e.name;
|
|
549
584
|
if (e.isFile() && isSecretFileName(e.name)) out.push(childRel);
|
|
550
|
-
else if (e.isDirectory() && !isNonAssetDir(e.name
|
|
585
|
+
else if (e.isDirectory() && !isNonAssetDir(e.name, rel === ""))
|
|
586
|
+
walk(join(dir, e.name), childRel);
|
|
551
587
|
}
|
|
552
588
|
};
|
|
553
589
|
walk(absDir, "");
|
|
554
590
|
return out.sort();
|
|
555
591
|
}
|
|
556
592
|
|
|
557
|
-
export { ASSET_KEY_ORDER, LIBRARY_GITIGNORE, SKAILE_MANIFEST_FILENAME, compositeSha256, decodeSkaileManifest, encodeSkaileManifest, expandManifestFiles, expandManifestFilesFromPaths, gitPublishedFiles, isEnvFileName, isNonAssetDir, isNonAssetFile, isNonAssetPath, isSecretFileName, librarySymlinkMessage, listAssetFiles, listLibrarySymlinks, listSecretFiles, listSkippedSymlinks, loadSkPublishManifest, onlyPublished, orderedAsset, sha256Hex };
|
|
558
|
-
//# sourceMappingURL=chunk-
|
|
559
|
-
//# sourceMappingURL=chunk-
|
|
593
|
+
export { ASSET_KEY_ORDER, LIBRARY_GITIGNORE, SKAILE_MANIFEST_FILENAME, compositeSha256, decodeSkaileManifest, encodeSkaileManifest, expandManifestFiles, expandManifestFilesFromPaths, gitPublishedFiles, isEnvFileName, isLibraryManifestAtAssetRoot, isNonAssetDir, isNonAssetFile, isNonAssetPath, isSecretFileName, librarySymlinkMessage, listAssetFiles, listLibrarySymlinks, listSecretFiles, listSkippedSymlinks, loadSkPublishManifest, onlyPublished, orderedAsset, sha256Hex };
|
|
594
|
+
//# sourceMappingURL=chunk-QC5BYUED.js.map
|
|
595
|
+
//# sourceMappingURL=chunk-QC5BYUED.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../core/src/publish-manifest.ts"],"names":[],"mappings":"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","file":"chunk-QC5BYUED.js","sourcesContent":["/**\n * Publish manifest — `skaile.manifest.yaml`\n *\n * What a repo PUBLISHES: the `publisher` / `version` / `assets[]` that used to\n * live in the publication half of `skaile.yaml`, plus a per-asset dependency\n * graph, store-listing metadata, and an optional curator `source:` pointer.\n *\n * ── Two files, two codecs ──────────────────────────────────────────────────\n *\n * skaile.yaml → SkWorkspaceConfig (workspace + consumption)\n * skaile.manifest.yaml → SkPublishManifest (publication) ← this module\n *\n * A repo can have either file, both, or neither: a pure workspace has only\n * `skaile.yaml`; a pure asset repo (e.g. `ai-assets`) has only\n * `skaile.manifest.yaml`; a repo that is both has both.\n *\n * ── One format, three roles ────────────────────────────────────────────────\n *\n * First-party `source:` absent → bytes live in this repo (`root`/`files`).\n * Curator/sidecar `source:` present → bytes come from the referenced upstream,\n * verified by `sha256`.\n *\n * `decodeSkaileManifest` mirrors `decodeSkaileYaml`: total (never throws),\n * returns {@link Diagnostic}s. Dep-ref strings are validated with `parseAssetRef`.\n */\n\nimport { spawnSync } from \"node:child_process\";\nimport { createHash } from \"node:crypto\";\nimport {\n type Dirent,\n existsSync,\n readdirSync,\n readFileSync,\n readlinkSync,\n realpathSync,\n statSync,\n} from \"node:fs\";\nimport fg from \"fast-glob\";\nimport { join, relative, resolve, sep } from \"node:path\";\nimport { parse, stringify } from \"yaml\";\nimport { isManifestName } from \"./manifest.js\";\nimport { isValidPublisher, parseAssetRef, PUBLISHER_HINT } from \"./models.js\";\nimport type { Diagnostic } from \"./workspace-config.js\";\n\n// ── Types ───────────────────────────────────────────────────────────────────\n\n/** One file inside a curated asset, pinned to an exact upstream blob hash. */\nexport interface ManifestFileEntry {\n path: string;\n /** 64-hex sha256 of the upstream blob. */\n sha256: string;\n}\n\n/**\n * One entry in a manifest's `assets:` list. Either `root:` (recursive walk) or\n * `files:` (explicit list, supports globs for first-party; the granular\n * `{path, sha256}` form for curated upstream verification) declares which paths\n * constitute the asset. `version:` overrides the manifest-level version.\n *\n * @docLink packages/core/publish-manifest#asset-entry\n */\nexport interface AssetEntry {\n kind: string;\n name: string;\n root?: string;\n /**\n * Explicit file listing. First-party manifests use bare `string[]` (globs,\n * fast-glob). Curated entries may use the granular `{path, sha256}` form so\n * the resolver fetches + verifies exact upstream blobs without a full clone.\n */\n files?: string[] | ManifestFileEntry[];\n version?: string;\n /** Per-asset publisher override (e.g. for curator/mirror repos). */\n publisher?: string;\n\n /**\n * Canonical dep refs (`kind:@<publisher>/name[#version]`) — same grammar as\n * `SkWorkspaceConfig.dependencies`. Authoritative for this asset's resolved\n * deps. (Was `requires` in `.skaile-source.yaml`.)\n */\n dependencies?: string[];\n\n /**\n * Author-pinned composite sha256 over the asset's `files`/`root` (the\n * {@link compositeSha256} the walker, discovery and the lock all use). Optional locally;\n * REQUIRED on store publish. (Was `.skaile-source.yaml` `assets[].sha256`.)\n */\n sha256?: string;\n\n /**\n * Curator override: this single asset's bytes come from a different upstream\n * than the manifest-level `source`. Absent → inherit manifest `source` (or\n * first-party when that is also absent).\n */\n source?: ManifestSource;\n\n // ── Store-listing metadata (all optional; fall back to content frontmatter) ──\n description?: string;\n keywords?: string[];\n category?: string;\n license?: string;\n homepage?: string;\n}\n\n/**\n * Upstream the bytes come from when a manifest curates a repo it does not own.\n * Absent → first-party (bytes live in the manifest's own repo).\n *\n * @docLink packages/core/publish-manifest#manifest-source\n */\nexport interface ManifestSource {\n url: string;\n /** 40-char commit the curated bytes are pinned to. */\n commit?: string;\n}\n\n/**\n * Signing/attribution recorded when a manifest is published on behalf of others.\n *\n * @docLink packages/core/publish-manifest#manifest-provenance\n */\nexport interface ManifestProvenance {\n curator: string;\n signed_by?: string;\n}\n\n/**\n * Parsed `skaile.manifest.yaml` — what a repo publishes.\n *\n * @docLink packages/core/publish-manifest#sk-publish-manifest\n */\nexport interface SkPublishManifest {\n publisher?: string;\n version?: string;\n /** Repo-level store defaults inherited by assets unless overridden per-entry. */\n license?: string;\n homepage?: string;\n /**\n * Repo-relative path prefixes holding dev-only assets — excluded from\n * discovery/publish unless `--dev`. (Was `.skaile-source.yaml` `dev_paths`.)\n */\n dev_paths?: string[];\n /**\n * Curator mode: the single upstream all assets in this file come from. A\n * per-asset `source` overrides it. Absent → first-party (own repo).\n */\n source?: ManifestSource;\n /** Present when this manifest is curated/published on behalf of another author. */\n provenance?: ManifestProvenance;\n assets?: AssetEntry[];\n}\n\n/** Result of {@link decodeSkaileManifest}: the manifest plus any notes. */\nexport interface ManifestDecodeResult {\n manifest: SkPublishManifest;\n diagnostics: Diagnostic[];\n}\n\n/** The single fixed filename for a publish manifest. */\nexport const SKAILE_MANIFEST_FILENAME = \"skaile.manifest.yaml\";\n\n// ── Decode ──────────────────────────────────────────────────────────────────\n\nfunction parseSource(raw: unknown): ManifestSource | undefined {\n if (!raw || typeof raw !== \"object\" || Array.isArray(raw)) return undefined;\n const s = raw as Record<string, unknown>;\n if (typeof s.url !== \"string\" || s.url.length === 0) return undefined;\n const out: ManifestSource = { url: s.url };\n if (typeof s.commit === \"string\" && s.commit.length > 0) out.commit = s.commit;\n return out;\n}\n\nfunction parseProvenance(raw: unknown): ManifestProvenance | undefined {\n if (!raw || typeof raw !== \"object\" || Array.isArray(raw)) return undefined;\n const p = raw as Record<string, unknown>;\n if (typeof p.curator !== \"string\" || p.curator.length === 0) return undefined;\n const out: ManifestProvenance = { curator: p.curator };\n if (typeof p.signed_by === \"string\" && p.signed_by.length > 0) out.signed_by = p.signed_by;\n return out;\n}\n\n/** Parse `files:` as either `string[]` (globs) or `{path, sha256}[]` (granular). */\nfunction parseFiles(raw: unknown): string[] | ManifestFileEntry[] | undefined {\n if (!Array.isArray(raw)) return undefined;\n const strings: string[] = [];\n const granular: ManifestFileEntry[] = [];\n for (const item of raw) {\n if (typeof item === \"string\") {\n strings.push(item);\n } else if (item && typeof item === \"object\" && !Array.isArray(item)) {\n const f = item as Record<string, unknown>;\n if (typeof f.path === \"string\" && typeof f.sha256 === \"string\") {\n granular.push({ path: f.path, sha256: f.sha256 });\n }\n }\n }\n // A manifest uses one form per entry; if both somehow appear, granular wins\n // (it is the verifiable form). Empty → undefined.\n if (granular.length > 0) return granular;\n if (strings.length > 0) return strings;\n return undefined;\n}\n\n/** Parse the YAML root, returning either the mapping or an error diagnostic. */\nfunction parseManifestRoot(\n text: string,\n): { ok: true; raw: Record<string, unknown> } | { ok: false; diagnostic: Diagnostic } {\n let parsed: unknown;\n try {\n parsed = parse(text) ?? {};\n } catch (err) {\n return {\n ok: false,\n diagnostic: {\n code: \"yaml_syntax\",\n severity: \"error\",\n message: `Invalid YAML: ${err instanceof Error ? err.message : String(err)}`,\n },\n };\n }\n if (typeof parsed !== \"object\" || parsed === null || Array.isArray(parsed)) {\n return {\n ok: false,\n diagnostic: {\n code: \"non_object_root\",\n severity: \"error\",\n message: \"skaile.manifest.yaml must be a mapping at the top level.\",\n },\n };\n }\n return { ok: true, raw: parsed as Record<string, unknown> };\n}\n\n/**\n * Strip a SINGLE leading `@` from a publisher and, when one was removed, push a\n * `warning` diagnostic. The `@` is the scope sigil the ref formatter adds — an\n * authored `@acme` would otherwise index as `@@acme` and be un-addable. Bare\n * names are returned untouched.\n */\nfunction normalizePublisher(value: string, path: string, diagnostics: Diagnostic[]): string {\n if (!value.startsWith(\"@\")) return value;\n const stripped = value.slice(1);\n diagnostics.push({\n code: \"publisher_leading_sigil\",\n severity: \"warning\",\n message: `publisher \"${value}\": leading \"@\" is the scope sigil and is added automatically — use bare \"${stripped}\"`,\n path,\n });\n return stripped;\n}\n\n/** Decode the manifest-level scalar/array/object fields onto `manifest`. */\nfunction decodeManifestFields(\n raw: Record<string, unknown>,\n manifest: SkPublishManifest,\n diagnostics: Diagnostic[],\n): void {\n if (typeof raw.publisher === \"string\" && raw.publisher.length > 0) {\n manifest.publisher = normalizePublisher(raw.publisher, \"publisher\", diagnostics);\n }\n if (typeof raw.version === \"string\" && raw.version.length > 0) {\n manifest.version = raw.version;\n }\n if (typeof raw.license === \"string\" && raw.license.length > 0) {\n manifest.license = raw.license;\n }\n if (typeof raw.homepage === \"string\" && raw.homepage.length > 0) {\n manifest.homepage = raw.homepage;\n }\n if (Array.isArray(raw.dev_paths)) {\n const paths = raw.dev_paths.filter((p): p is string => typeof p === \"string\" && p.length > 0);\n if (paths.length > 0) manifest.dev_paths = paths;\n }\n const source = parseSource(raw.source);\n if (source) manifest.source = source;\n const provenance = parseProvenance(raw.provenance);\n if (provenance) manifest.provenance = provenance;\n}\n\n/**\n * Validate an asset's `dependencies` via `parseAssetRef`, pushing a `warning`\n * for each malformed ref. Returns the kept (valid) refs.\n */\nfunction decodeAssetDependencies(\n raw: unknown,\n kind: string,\n name: string,\n diagnostics: Diagnostic[],\n): string[] {\n const deps: string[] = [];\n if (!Array.isArray(raw)) return deps;\n for (const dep of raw) {\n if (typeof dep !== \"string\") continue;\n try {\n const ref = parseAssetRef(dep);\n // The publisher follows the one slug rule, so an entry `library index` refuses is\n // dropped here like every other malformed one (not left to fail discovery of the asset).\n if (ref.publisher !== undefined && !isValidPublisher(ref.publisher)) {\n throw new Error(`publisher \"${ref.publisher}\" — ${PUBLISHER_HINT}`);\n }\n deps.push(dep);\n } catch (err) {\n diagnostics.push({\n code: \"malformed_dependency\",\n severity: \"warning\",\n message: `assets[${kind}:${name}].dependencies: ${\n err instanceof Error ? err.message : String(err)\n }`,\n path: `assets.${kind}:${name}.dependencies`,\n });\n }\n }\n return deps;\n}\n\n/**\n * Decode one `assets[]` item into an {@link AssetEntry}, or `undefined` when the\n * item is not a mapping or lacks both `kind` and `name`. Pushes dependency\n * warnings to `diagnostics`.\n */\nfunction decodeAssetEntry(item: unknown, diagnostics: Diagnostic[]): AssetEntry | undefined {\n if (!item || typeof item !== \"object\" || Array.isArray(item)) return undefined;\n const a = item as Record<string, unknown>;\n const kind = typeof a.kind === \"string\" ? a.kind : \"\";\n const name = typeof a.name === \"string\" ? a.name : \"\";\n if (!kind || !name) return undefined;\n const entry: AssetEntry = { kind, name };\n if (typeof a.root === \"string\") entry.root = a.root;\n const files = parseFiles(a.files);\n if (files) entry.files = files;\n if (typeof a.version === \"string\") entry.version = a.version;\n if (typeof a.publisher === \"string\")\n entry.publisher = normalizePublisher(\n a.publisher,\n `assets.${kind}:${name}.publisher`,\n diagnostics,\n );\n if (typeof a.sha256 === \"string\") entry.sha256 = a.sha256;\n const assetSource = parseSource(a.source);\n if (assetSource) entry.source = assetSource;\n\n const deps = decodeAssetDependencies(a.dependencies, kind, name, diagnostics);\n if (deps.length > 0) entry.dependencies = deps;\n\n if (typeof a.description === \"string\") entry.description = a.description;\n if (Array.isArray(a.keywords)) {\n const kw = a.keywords.filter((k): k is string => typeof k === \"string\");\n if (kw.length > 0) entry.keywords = kw;\n }\n if (typeof a.category === \"string\") entry.category = a.category;\n if (typeof a.license === \"string\") entry.license = a.license;\n if (typeof a.homepage === \"string\") entry.homepage = a.homepage;\n\n return entry;\n}\n\n/** Decode the `assets[]` list onto `manifest`, collecting dependency warnings. */\nfunction decodeManifestAssets(\n raw: Record<string, unknown>,\n manifest: SkPublishManifest,\n diagnostics: Diagnostic[],\n): void {\n if (!Array.isArray(raw.assets)) return;\n const entries: AssetEntry[] = [];\n for (const item of raw.assets) {\n const entry = decodeAssetEntry(item, diagnostics);\n if (entry) entries.push(entry);\n }\n if (entries.length > 0) manifest.assets = entries;\n}\n\n/**\n * Decode `skaile.manifest.yaml` text into a {@link SkPublishManifest} plus\n * {@link Diagnostic}s. Total — never throws: a YAML syntax error or non-object\n * root is reported as an `error`-severity diagnostic with an empty manifest.\n * Malformed `assets[].dependencies` refs are reported as `warning`s (validated\n * via `parseAssetRef`) rather than silently dropped.\n *\n * Pair with {@link encodeSkaileManifest} for round-tripping.\n * @docLink packages/core/publish-manifest#decode-skaile-manifest\n */\nexport function decodeSkaileManifest(text: string): ManifestDecodeResult {\n const root = parseManifestRoot(text);\n if (!root.ok) {\n return { manifest: {}, diagnostics: [root.diagnostic] };\n }\n\n const manifest: SkPublishManifest = {};\n const diagnostics: Diagnostic[] = [];\n decodeManifestFields(root.raw, manifest, diagnostics);\n decodeManifestAssets(root.raw, manifest, diagnostics);\n\n return { manifest, diagnostics };\n}\n\n// ── Encode ──────────────────────────────────────────────────────────────────\n\n/** Fixed top-level key order for {@link encodeSkaileManifest}. */\nconst MANIFEST_KEY_ORDER: (keyof SkPublishManifest)[] = [\n \"publisher\",\n \"version\",\n \"license\",\n \"homepage\",\n \"dev_paths\",\n \"source\",\n \"provenance\",\n \"assets\",\n];\n\n/** Fixed per-asset key order for {@link encodeSkaileManifest}. */\nexport const ASSET_KEY_ORDER: readonly (keyof AssetEntry)[] = [\n \"kind\",\n \"name\",\n \"source\",\n \"root\",\n \"files\",\n \"version\",\n \"publisher\",\n \"sha256\",\n \"dependencies\",\n \"description\",\n \"keywords\",\n \"category\",\n \"license\",\n \"homepage\",\n];\n\n/** An entry with its keys in canonical order, undefined fields dropped. */\nexport function orderedAsset(a: AssetEntry): Record<string, unknown> {\n const out: Record<string, unknown> = {};\n for (const key of ASSET_KEY_ORDER) {\n const value = a[key];\n if (value !== undefined) out[key] = value;\n }\n return out;\n}\n\n/**\n * Encode a {@link SkPublishManifest} to canonical `skaile.manifest.yaml` text:\n * deterministic key order, only defined fields, `lineWidth: 120` (mirrors\n * `encodeSkaileYaml`).\n * @docLink packages/core/publish-manifest#encode-skaile-manifest\n */\nexport function encodeSkaileManifest(manifest: SkPublishManifest): string {\n const out: Record<string, unknown> = {};\n for (const key of MANIFEST_KEY_ORDER) {\n const value = manifest[key];\n if (value === undefined) continue;\n if (key === \"assets\" && Array.isArray(value)) {\n out.assets = (value as AssetEntry[]).map(orderedAsset);\n } else {\n out[key] = value;\n }\n }\n return stringify(out, { lineWidth: 120 });\n}\n\n// ── File I/O ──────────────────────────────────────────────────────────────────\n\n/**\n * Load and decode `<dir>/skaile.manifest.yaml`. Returns `null` when the file is\n * absent or unparseable (mirrors `loadSkWorkspaceConfig`'s tolerant contract).\n * @docLink packages/core/publish-manifest#load-sk-publish-manifest\n */\nexport function loadSkPublishManifest(dir: string): SkPublishManifest | null {\n const filePath = join(resolve(dir), SKAILE_MANIFEST_FILENAME);\n if (!existsSync(filePath)) return null;\n let raw: string;\n try {\n raw = readFileSync(filePath, \"utf-8\");\n } catch {\n return null;\n }\n const { manifest, diagnostics } = decodeSkaileManifest(raw);\n if (diagnostics.some((d) => d.code === \"yaml_syntax\" || d.code === \"non_object_root\")) {\n return null;\n }\n return manifest;\n}\n\n// ── Asset content hash ──────────────────────────────────────────────────────\n\n/** Hex SHA-256 of one file's bytes (the per-file `files[].sha256`). */\nexport function sha256Hex(bytes: Uint8Array): string {\n return createHash(\"sha256\").update(bytes).digest(\"hex\");\n}\n\n/**\n * The one asset content hash, shared by every origin (library index, library\n * lock, git-source lock + provenance walker, store install manifest, author-pinned\n * `sha256`): SHA-256 (bare 64-hex) over `localeCompare`-sorted `<path>:<sha256>\\n`\n * rows, where each `sha256` is the file's own {@link sha256Hex}.\n *\n * `path` MUST be POSIX and relative to the root of the repository/library that\n * holds the asset (so `skills/foo/SKILL.md`, never `SKILL.md` relative to the\n * asset folder) — the path is folded into the digest, so a different base gives a\n * different hash for the same bytes.\n */\nexport function compositeSha256(files: ReadonlyArray<{ path: string; sha256: string }>): string {\n const lines = files\n .slice()\n .sort((a, b) => a.path.localeCompare(b.path))\n .map((f) => `${f.path}:${f.sha256}\\n`)\n .join(\"\");\n return createHash(\"sha256\").update(lines).digest(\"hex\");\n}\n\n/**\n * Directories never part of an asset's bytes: VCS, dependencies, per-project state, interpreter\n * and tool caches, virtual environments, editor folders and the usual Python and JavaScript\n * build and coverage output (`dist/`, `build/`, `htmlcov/`, `.tox/`, `*.egg-info/`, ...). One\n * list for the deploy file set and the content hash, so a helper script or a test run inside a\n * library (`__pycache__/`, `.pytest_cache/`, `.coverage`) never makes the lock drift.\n */\nconst NON_ASSET_DIRS = new Set([\n \".git\",\n \"node_modules\",\n \".skaile\",\n \"__pycache__\",\n \".venv\",\n \"venv\",\n \".pytest_cache\",\n \".mypy_cache\",\n \".ruff_cache\",\n \".idea\",\n \".vscode\",\n \".tox\",\n \".nox\",\n \".nyc_output\",\n \"htmlcov\",\n]);\n\n/**\n * Generic build-output names: left out of an asset only when they sit directly in the asset root\n * (`<asset>/dist/`). Deeper they are ordinary content (`references/build/notes.md`, `docs/dist/`)\n * and ship.\n */\nconst ROOT_ONLY_NON_ASSET_DIRS = new Set([\"coverage\", \"dist\", \"build\"]);\n\n/** File names never part of an asset's bytes (OS, interpreter and coverage leftovers). */\nconst NON_ASSET_FILES = new Set([\".DS_Store\", \"Thumbs.db\", \".coverage\"]);\n\n/**\n * `true` for a directory name no asset ships (see {@link NON_ASSET_DIRS}, and `*.egg-info`).\n * The generic build-output names `dist`, `build` and `coverage` count only when `atAssetRoot`\n * is `true`: the directory sits directly in the asset's folder, or the walk covers a whole tree\n * where asset roots are not known yet. Deeper inside an asset they are content.\n */\nexport function isNonAssetDir(name: string, atAssetRoot: boolean): boolean {\n return (\n NON_ASSET_DIRS.has(name) ||\n name.endsWith(\".egg-info\") ||\n (atAssetRoot && ROOT_ONLY_NON_ASSET_DIRS.has(name))\n );\n}\n\n/**\n * `true` for a file name no asset ships: `.DS_Store`, `Thumbs.db`, `*.pyc`, `*.pyo`, a secret\n * ({@link isSecretFileName}: `.env*`, private keys, credential files), editor leftovers\n * (`*.swp`, `*.swo`, `*~`, `*.bak`) and `*.log`. The scaffolded library `.gitignore` ignores the\n * same names, so what import, deploy and the hash leave out is what the published repo lacks.\n */\nexport function isNonAssetFile(name: string): boolean {\n return (\n NON_ASSET_FILES.has(name) ||\n name.endsWith(\".pyc\") ||\n name.endsWith(\".pyo\") ||\n name.endsWith(\".swp\") ||\n name.endsWith(\".swo\") ||\n name.endsWith(\"~\") ||\n name.endsWith(\".bak\") ||\n name.endsWith(\".log\") ||\n name.startsWith(\"._\") ||\n name.startsWith(\".coverage.\") ||\n isSecretFileName(name)\n );\n}\n\n/** Committed `.env` templates: no secrets, so they stay part of the asset. */\nconst ENV_TEMPLATE_SUFFIXES = new Set([\".example\", \".sample\", \".template\", \".dist\"]);\n\n/**\n * `true` for a `.env` or `.env.*` file name that holds local secrets and is never shipped with\n * an asset. A template (`.env.example`, `.env.sample`, `.env.template`, `.env.dist`) is not one.\n */\nexport function isEnvFileName(name: string): boolean {\n if (name === \".env\") return true;\n if (!name.startsWith(\".env.\")) return false;\n return !ENV_TEMPLATE_SUFFIXES.has(name.slice(\".env\".length));\n}\n\n/** Private key, certificate bundle and state-file extensions that never belong in a published library. */\nconst SECRET_FILE_SUFFIXES = [\".pem\", \".key\", \".p12\", \".pfx\", \".tfstate\", \".jks\", \".keystore\"];\n\n/** Patterns of secret file names that are not one fixed name, as `.gitignore` globs. */\nconst SECRET_FILE_GLOBS = [\"client_secret*.json\"];\n\n/** File names that hold a private key or a credential, whatever sits next to them. */\nconst SECRET_FILE_NAMES = new Set([\n \"id_rsa\",\n \"id_dsa\",\n \"id_ecdsa\",\n \"id_ed25519\",\n \".npmrc\",\n \".netrc\",\n \".envrc\",\n \".pypirc\",\n \".htpasswd\",\n \".pgpass\",\n \".my.cnf\",\n \".dockercfg\",\n \".boto\",\n \".vault_pass\",\n \".git-credentials\",\n \"kubeconfig\",\n \"wallet.dat\",\n \"credentials\",\n \"credentials.json\",\n \"token.json\",\n \"secret.txt\",\n \"secrets.txt\",\n \"api_key.txt\",\n \"secrets.yaml\",\n \"secrets.yml\",\n \"secrets.json\",\n \"service-account.json\",\n]);\n\n/**\n * `true` for a file name that holds a secret: a local `.env` ({@link isEnvFileName}), a private\n * key, a certificate bundle, a keystore, a Terraform state file, or a credential file (`.npmrc`,\n * `.netrc`, `.envrc`, `.pypirc`, `.htpasswd`, `.pgpass`, `.dockercfg`, `.git-credentials`,\n * `kubeconfig`, `credentials`, `credentials.json`, `client_secret*.json`, `token.json`,\n * `secrets.yaml`, `service-account.json`, ...: the list is in this file). One list for the\n * publish plan, the scaffolded `.gitignore`, the deploy file set and the content hash: `add` and\n * `install` never copy these (p1040, p1202).\n */\nexport function isSecretFileName(name: string): boolean {\n return (\n isEnvFileName(name) ||\n SECRET_FILE_NAMES.has(name) ||\n SECRET_FILE_SUFFIXES.some((suffix) => name.endsWith(suffix)) ||\n (name.startsWith(\"client_secret\") && name.endsWith(\".json\"))\n );\n}\n\n/**\n * The `.gitignore` `library create` scaffolds: the names {@link isNonAssetFile} and\n * {@link NON_ASSET_DIRS} leave out of an asset (OS files, caches, editor leftovers, secrets), so\n * what the library publishes is what a deploy ships: `.env*` and every name of\n * {@link isSecretFileName}. `.env` templates stay.\n */\nexport const LIBRARY_GITIGNORE = [\n \".DS_Store\",\n \"._*\",\n \"Thumbs.db\",\n \"node_modules/\",\n \"__pycache__/\",\n \"*.pyc\",\n \"*.pyo\",\n \"*.log\",\n \"*.swp\",\n \"*.swo\",\n \"*~\",\n \"*.bak\",\n \".venv/\",\n \"venv/\",\n \".pytest_cache/\",\n \".mypy_cache/\",\n \".ruff_cache/\",\n \".idea/\",\n \".vscode/\",\n \".tox/\",\n \".nox/\",\n \".nyc_output/\",\n \"htmlcov/\",\n // Generic build names ship deeper in an asset (`references/build/`): git matches an unanchored\n // `build/` at any depth, so these match only the asset root of the default layout (`<name>/`\n // in the library, or the library root for a root-level skill).\n \"/coverage/\",\n \"/*/coverage/\",\n \"/dist/\",\n \"/*/dist/\",\n \"/build/\",\n \"/*/build/\",\n \"*.egg-info/\",\n \".coverage\",\n \".coverage.*\",\n \".env\",\n \".env.*\",\n ...SECRET_FILE_NAMES,\n ...SECRET_FILE_SUFFIXES.map((suffix) => `*${suffix}`),\n ...SECRET_FILE_GLOBS,\n ...[...ENV_TEMPLATE_SUFFIXES].map((suffix) => `!.env${suffix}`),\n \"\",\n].join(\"\\n\");\n\n/**\n * `true` when a POSIX path lies in a {@link isNonAssetDir} directory or names a\n * {@link isNonAssetFile} file. `relativeTo` says what the path starts at: `\"asset-root\"` (the\n * asset's folder, so `dist/` counts only as the first segment) or `\"tree\"` (a repo or library,\n * asset roots unknown, so `dist/` counts at any depth). Symlinks are not part of an asset\n * either, but a path string cannot tell: walkers skip them through `Dirent.isFile()`.\n */\nexport function isNonAssetPath(posixPath: string, relativeTo: \"asset-root\" | \"tree\"): boolean {\n const parts = posixPath.split(\"/\");\n const last = parts.pop() ?? \"\";\n return (\n isNonAssetFile(last) ||\n parts.some((part, i) => isNonAssetDir(part, relativeTo === \"tree\" || i === 0))\n );\n}\n\n/**\n * `true` for the library's own `skaile.manifest.yaml` seen at the top of an asset root. A library\n * that is itself one skill lists it with root `.`, so its asset root holds the library manifest:\n * it is never part of the skill (it would ship, and change the hash on every `library index`).\n * `relPosix` is relative to the asset root.\n */\nexport function isLibraryManifestAtAssetRoot(relPosix: string): boolean {\n return relPosix === SKAILE_MANIFEST_FILENAME;\n}\n\n/**\n * Every file under `absDir`, as sorted POSIX paths relative to `absDir`,\n * skipping {@link NON_ASSET_DIRS}, {@link NON_ASSET_FILES} and `*.pyc`. The single enumeration\n * behind a `root:` manifest entry — used by the provenance walker and by discovery, so both\n * hash the same file list. Symlinks are skipped.\n */\nexport function listAssetFiles(absDir: string): string[] {\n const out: string[] = [];\n const walk = (dir: string, rel: string): void => {\n let entries: Dirent[];\n try {\n entries = readdirSync(dir, { withFileTypes: true });\n } catch {\n return;\n }\n for (const e of entries) {\n const childRel = rel ? `${rel}/${e.name}` : e.name;\n if (e.isDirectory()) {\n if (!isNonAssetDir(e.name, rel === \"\")) walk(join(dir, e.name), childRel);\n } else if (e.isFile() && !isNonAssetFile(e.name) && !isLibraryManifestAtAssetRoot(childRel)) {\n out.push(childRel);\n }\n }\n };\n walk(absDir, \"\");\n return out.sort();\n}\n\n/**\n * The one rule that turns a manifest entry's `files:` list into files (p1201), shared by the\n * disk walk ({@link expandManifestFiles}) and the tree-entries walk the store's catalog backend\n * uses ({@link expandManifestFilesFromPaths}). A plain path stays as written when it is a file;\n * a glob (`comp/*`, dot files included) becomes the files it matches. `unmatched` names every\n * plain path that is not a file (missing or a directory) and every glob that matches no file, so\n * a caller refuses the entry instead of listing nothing.\n */\nfunction expandWith(\n patterns: readonly string[],\n isFile: (rel: string) => boolean,\n glob: (pattern: string) => string[],\n): { files: string[]; unmatched: string[] } {\n const files = new Set<string>();\n const unmatched: string[] = [];\n for (const raw of patterns) {\n const pattern = raw.replace(/\\\\/g, \"/\");\n if (!fg.isDynamicPattern(pattern)) {\n if (isFile(pattern)) files.add(pattern);\n else unmatched.push(raw);\n continue;\n }\n const hits = glob(pattern);\n if (hits.length === 0) unmatched.push(`${raw} (matches no file)`);\n for (const hit of hits) files.add(hit);\n }\n return { files: [...files].sort(), unmatched };\n}\n\n/**\n * Expand a manifest entry's `files:` list against `baseDir` on disk (POSIX paths relative to it):\n * what `validate`, the publish plan, `library index`, `add` and the lock hash share (p1201).\n */\nexport function expandManifestFiles(\n baseDir: string,\n patterns: readonly string[],\n): { files: string[]; unmatched: string[] } {\n return expandWith(\n patterns,\n (rel) => {\n try {\n return statSync(join(baseDir, rel)).isFile();\n } catch {\n return false;\n }\n },\n (pattern) => fg.sync(pattern, { cwd: baseDir, onlyFiles: true, dot: true }),\n );\n}\n\n/**\n * {@link expandManifestFiles} over a flat list of file paths (POSIX, relative to the entry's\n * directory) instead of the disk: the tree-entries discovery of the store's catalog backend has\n * no files to walk. fast-glob matches against a virtual file system built from `paths`, so the\n * result is the one the disk walk gives for the same layout.\n */\nexport function expandManifestFilesFromPaths(\n paths: Iterable<string>,\n patterns: readonly string[],\n): { files: string[]; unmatched: string[] } {\n const fileSet = new Set(paths);\n const dirs = new Map<string, Set<string>>();\n const link = (dir: string, child: string): void => {\n const set = dirs.get(dir) ?? new Set<string>();\n set.add(child);\n dirs.set(dir, set);\n };\n for (const file of fileSet) {\n const parts = file.split(\"/\");\n for (let i = 0; i < parts.length; i++) {\n link(i === 0 ? \"\" : parts.slice(0, i).join(\"/\"), parts[i]!);\n }\n }\n const rel = (abs: string): string => abs.replace(/^\\/+/, \"\").replace(/\\/+$/, \"\");\n const stats = (abs: string) => {\n const r = rel(abs);\n const isFile = fileSet.has(r);\n const isDir = r === \"\" || dirs.has(r);\n if (!isFile && !isDir) {\n const err = new Error(`ENOENT: ${abs}`) as NodeJS.ErrnoException;\n err.code = \"ENOENT\";\n throw err;\n }\n return {\n isFile: () => isFile,\n isDirectory: () => isDir,\n isSymbolicLink: () => false,\n isBlockDevice: () => false,\n isCharacterDevice: () => false,\n isFIFO: () => false,\n isSocket: () => false,\n mode: isDir ? 0o040000 : 0o100000,\n };\n };\n const list = (abs: string) => {\n const r = rel(abs);\n return [...(dirs.get(r) ?? [])].sort().map((name) => {\n const full = r === \"\" ? name : `${r}/${name}`;\n return { name, ...stats(`/${full}`) };\n });\n };\n const cb =\n <A extends unknown[], T>(fn: (...a: A) => T) =>\n (...args: unknown[]): void => {\n const done = args.pop() as (e: Error | null, v?: T) => void;\n try {\n done(null, fn(...(args as A)));\n } catch (err) {\n done(err as Error);\n }\n };\n const vfs = {\n lstatSync: stats,\n statSync: stats,\n readdirSync: (abs: string, opts?: { withFileTypes?: boolean }) =>\n opts?.withFileTypes ? list(abs) : list(abs).map((d) => d.name),\n lstat: cb(stats),\n stat: cb(stats),\n readdir: cb((abs: string, opts?: { withFileTypes?: boolean }) =>\n opts?.withFileTypes ? list(abs) : list(abs).map((d) => d.name),\n ),\n };\n return expandWith(\n patterns,\n (r) => fileSet.has(r),\n (pattern) =>\n fg.sync(pattern, {\n cwd: \"/\",\n onlyFiles: true,\n dot: true,\n fs: vfs as unknown as NonNullable<Parameters<typeof fg.sync>[1]>[\"fs\"],\n }),\n );\n}\n\n/**\n * The files `git` would publish from the working tree at `root` (POSIX paths relative to `root`):\n * every tracked file plus every untracked file the ignore rules do not exclude, the set\n * `skaile library publish` ships. `null` when `root` is not itself a git working tree (no `.git`\n * entry in it) or git cannot list it: the caller then keeps every file on disk. A library that\n * lives in a subfolder of a bigger repository is not a git library: the ignore rules of the outer\n * repository say nothing about it. A tracked file that a `.gitignore` rule matches still counts.\n */\nexport function gitPublishedFiles(root: string): ReadonlySet<string> | null {\n if (!existsSync(join(root, \".git\"))) return null;\n const listed = spawnSync(\n \"git\",\n [\"-C\", root, \"ls-files\", \"-z\", \"--cached\", \"--others\", \"--exclude-standard\"],\n { encoding: \"utf8\", stdio: [\"ignore\", \"pipe\", \"ignore\"], maxBuffer: 1 << 28 },\n );\n if (listed.error || listed.status !== 0) return null;\n return new Set(listed.stdout.split(\"\\0\").filter((p) => p !== \"\"));\n}\n\n/**\n * `files` (relative to `assetRoot`) without those `git` would not publish ({@link gitPublishedFiles}\n * of `root`, `assetRoot` lies under it). `files` itself when `published` is `null`.\n */\nexport function onlyPublished(\n published: ReadonlySet<string> | null,\n root: string,\n assetRoot: string,\n files: readonly string[],\n): string[] {\n if (published === null) return [...files];\n const prefix = relative(root, assetRoot).split(sep).join(\"/\");\n return files.filter((f) => published.has(prefix === \"\" ? f : `${prefix}/${f}`));\n}\n\n/**\n * Every symlink under `absDir` (sorted POSIX paths relative to `absDir`) that\n * {@link listAssetFiles} leaves out: the links a deploy drops. Walks the same\n * directories, never follows a link and skips {@link NON_ASSET_DIRS}.\n */\nexport function listSkippedSymlinks(absDir: string): string[] {\n const out: string[] = [];\n const walk = (dir: string, rel: string): void => {\n let entries: Dirent[];\n try {\n entries = readdirSync(dir, { withFileTypes: true });\n } catch {\n return;\n }\n for (const e of entries) {\n const childRel = rel ? `${rel}/${e.name}` : e.name;\n if (e.isSymbolicLink()) {\n if (!isNonAssetFile(e.name)) out.push(childRel);\n } else if (e.isDirectory() && !isNonAssetDir(e.name, rel === \"\")) {\n walk(join(dir, e.name), childRel);\n }\n }\n };\n walk(absDir, \"\");\n return out.sort();\n}\n\n/** A symlink a library refuses: where it is and what it points at. */\nexport interface LibrarySymlink {\n /** POSIX path relative to the scanned directory. */\n path: string;\n /** The link's own text (`readlink`), shown as written. */\n target: string;\n}\n\n/**\n * The symlinks a library refuses. A library is plain files: `validate`, `library index`, the\n * publish plan, `library init --path` and `asset import` refuse a symlink that\n *\n * - sits inside an asset directory (one holding a `SKILL.md`, `agent.yaml`, … — a link to a\n * file, to `/etc/hosts` or to `.` ships nothing a consumer can use, and a deploy drops it), or\n * - points at a directory that holds an asset manifest (`s1alias -> s1`): the scan would see\n * one asset twice.\n *\n * With `opts.wholeTree` (a library: `git add -A` publishes every file in it) every symlink\n * anywhere in the tree is refused, also a root-level `README-link -> README.md`, a link to a\n * file or directory outside the library and a symlinked asset directory.\n *\n * Links are never followed; {@link NON_ASSET_DIRS} are not entered. Without `wholeTree` (a\n * project) a directory link outside every asset is not listed (a project's `mountPath` link or\n * deployed `.claude/skills/x -> …`; only the connector real-path check judges it, p1332), and the\n * scanned root itself does not count as an asset directory, so a `CLAUDE.md -> AGENTS.md` next to\n * a single-file asset at the root is fine.\n *\n * @param absDir Absolute directory to scan; a missing directory yields no links.\n * @param opts.rootIsAsset Treat `absDir` itself as an asset directory (the source of an\n * `asset import`), so a link at its top level is listed too.\n * @param opts.wholeTree Refuse every symlink in the tree (a library).\n * @param opts.skipDirs Extra directory names not entered (a project's deployed harness folders).\n * @returns Links sorted by path.\n */\nexport function listLibrarySymlinks(\n absDir: string,\n opts: { rootIsAsset?: boolean; wholeTree?: boolean; skipDirs?: ReadonlySet<string> } = {},\n): LibrarySymlink[] {\n try {\n realpathSync(absDir);\n } catch {\n return [];\n }\n const skipped = (name: string): boolean =>\n // A whole-tree walk does not know the asset roots: generic build names are skipped anywhere.\n isNonAssetDir(name, true) || opts.skipDirs?.has(name) === true;\n const out: LibrarySymlink[] = [];\n const walk = (dir: string, rel: string, inAsset: boolean): void => {\n let entries: Dirent[];\n try {\n entries = readdirSync(dir, { withFileTypes: true });\n } catch {\n return;\n }\n const here =\n inAsset ||\n (dir !== absDir &&\n entries.some((e) => (e.isFile() || e.isSymbolicLink()) && isManifestName(e.name)));\n for (const e of entries) {\n const full = join(dir, e.name);\n const childRel = rel ? `${rel}/${e.name}` : e.name;\n if (e.isSymbolicLink()) {\n if (isNonAssetFile(e.name) || skipped(e.name)) continue;\n let refused = here || opts.wholeTree === true;\n if (!refused) {\n try {\n // A link to a directory that holds an asset manifest is an asset directory that is\n // not part of the tree (p520). Outside a library and an asset, any other directory\n // link is the project's own business (a `mountPath` link, a data folder): only the\n // connector real-path check judges it (p1332).\n refused = statSync(full).isDirectory() && readdirSync(full).some(isManifestName);\n } catch {\n // Dangling outside an asset: nothing to alias.\n }\n }\n if (refused) {\n let target: string;\n try {\n target = readlinkSync(full);\n } catch {\n target = \"?\";\n }\n out.push({ path: childRel, target });\n }\n } else if (e.isDirectory() && !skipped(e.name)) {\n walk(full, childRel, here);\n }\n }\n };\n walk(absDir, \"\", opts.rootIsAsset === true);\n return out.sort((a, b) => a.path.localeCompare(b.path));\n}\n\n/**\n * The one refusal text for a {@link LibrarySymlink}, printed by `validate`, `library index`,\n * `library publish` and `asset import`.\n */\nexport function librarySymlinkMessage(link: LibrarySymlink): string {\n return `${link.path} is a symlink to ${link.target}: a library holds plain files and never follows symlinks. Remove the link, or replace it with a copy of what it points at.`;\n}\n\n/**\n * Every secret file ({@link isSecretFileName}) under `absDir` (sorted POSIX paths relative to\n * `absDir`), in the directories {@link listAssetFiles} walks. A deploy leaves them out; the list\n * lets `add` say so.\n */\nexport function listSecretFiles(absDir: string): string[] {\n const out: string[] = [];\n const walk = (dir: string, rel: string): void => {\n let entries: Dirent[];\n try {\n entries = readdirSync(dir, { withFileTypes: true });\n } catch {\n return;\n }\n for (const e of entries) {\n const childRel = rel ? `${rel}/${e.name}` : e.name;\n if (e.isFile() && isSecretFileName(e.name)) out.push(childRel);\n else if (e.isDirectory() && !isNonAssetDir(e.name, rel === \"\"))\n walk(join(dir, e.name), childRel);\n }\n };\n walk(absDir, \"\");\n return out.sort();\n}\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { flowKindProvider } from './chunk-
|
|
2
|
-
import { knowledgeKindProvider } from './chunk-
|
|
3
|
-
import { createDefaultKindRegistry } from './chunk-
|
|
1
|
+
import { flowKindProvider } from './chunk-WFK4MUBL.js';
|
|
2
|
+
import { knowledgeKindProvider } from './chunk-G44FFUMA.js';
|
|
3
|
+
import { createDefaultKindRegistry } from './chunk-O5Y7VMVQ.js';
|
|
4
4
|
|
|
5
5
|
// cli/src/open-registry.ts
|
|
6
6
|
var registry;
|
|
@@ -13,5 +13,5 @@ function getKnownKinds() {
|
|
|
13
13
|
}
|
|
14
14
|
|
|
15
15
|
export { getKindRegistry, getKnownKinds };
|
|
16
|
-
//# sourceMappingURL=chunk-
|
|
17
|
-
//# sourceMappingURL=chunk-
|
|
16
|
+
//# sourceMappingURL=chunk-QCR5AE5E.js.map
|
|
17
|
+
//# sourceMappingURL=chunk-QCR5AE5E.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../cli/src/open-registry.ts"],"names":[],"mappings":";;;;;AAgBA,IAAI,QAAA;AAQG,SAAS,eAAA,GAAqC;AACnD,EAAA,QAAA,KAAa,yBAAA,CAA0B,CAAC,gBAAA,EAAkB,qBAAqB,CAAC,CAAA;AAChF,EAAA,OAAO,QAAA;AACT;AAGO,SAAS,aAAA,GAAqC;AACnD,EAAA,OAAO,IAAI,GAAA,CAAI,eAAA,EAAgB,CAAE,aAAa,CAAA;AAChD","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../cli/src/open-registry.ts"],"names":[],"mappings":";;;;;AAgBA,IAAI,QAAA;AAQG,SAAS,eAAA,GAAqC;AACnD,EAAA,QAAA,KAAa,yBAAA,CAA0B,CAAC,gBAAA,EAAkB,qBAAqB,CAAC,CAAA;AAChF,EAAA,OAAO,QAAA;AACT;AAGO,SAAS,aAAA,GAAqC;AACnD,EAAA,OAAO,IAAI,GAAA,CAAI,eAAA,EAAgB,CAAE,aAAa,CAAA;AAChD","file":"chunk-QCR5AE5E.js","sourcesContent":["/**\n * open-registry.ts — the CLI's one AssetKindRegistry.\n *\n * The provider registry is the only authority on asset kinds. The CLI builds it\n * once per process with all built-in providers (from @skaile/workspaces/discovery)\n * plus the extension kinds (flow from\n * @skaile/workspaces/factory-assets/connectors/flow/engine, knowledge from\n * @skaile/workspaces/library) and hands the same instance to every consumer\n * (catalog sources, the installer, validation, composition).\n */\n\nimport type { AssetKindRegistry } from \"@skaile/workspaces/discovery\";\nimport { createDefaultKindRegistry } from \"@skaile/workspaces/discovery\";\nimport { flowKindProvider } from \"@skaile/workspaces/factory-assets/connectors/flow/engine\";\nimport { knowledgeKindProvider } from \"@skaile/workspaces/library\";\n\nlet registry: AssetKindRegistry | undefined;\n\n/**\n * The process-wide, fully-configured AssetKindRegistry.\n *\n * Registers every built-in kind plus flow and knowledge. Built lazily on first\n * call; every later call returns the same instance.\n */\nexport function getKindRegistry(): AssetKindRegistry {\n registry ??= createDefaultKindRegistry([flowKindProvider, knowledgeKindProvider]);\n return registry;\n}\n\n/** Registered kind names as a set — the `knownKinds` argument of the manifest scanners. */\nexport function getKnownKinds(): ReadonlySet<string> {\n return new Set(getKindRegistry().getAllKinds());\n}\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { pluginRegistry } from './chunk-G5SUWZEU.js';
|
|
2
|
-
import { readPluginsLockSlice } from './chunk-
|
|
2
|
+
import { readPluginsLockSlice } from './chunk-TMJBEGS4.js';
|
|
3
3
|
import path, { join, resolve } from 'path';
|
|
4
4
|
import pc from 'picocolors';
|
|
5
5
|
import { pathToFileURL } from 'url';
|
|
@@ -193,6 +193,12 @@ function writePackageJson(projectDir, plugins) {
|
|
|
193
193
|
`);
|
|
194
194
|
return { previous, depsChanged, removedDep };
|
|
195
195
|
}
|
|
196
|
+
function allPluginsInstalled(projectDir, plugins) {
|
|
197
|
+
return plugins.every((spec) => {
|
|
198
|
+
const { name } = parseSpec(resolveFileSpec(spec, projectDir));
|
|
199
|
+
return existsSync(join(nodeModulesDir(projectDir), name, "package.json"));
|
|
200
|
+
});
|
|
201
|
+
}
|
|
196
202
|
async function reconcilePlugins(projectDir, plugins, opts = {}) {
|
|
197
203
|
if (plugins.length === 0) {
|
|
198
204
|
return { changed: false, reason: "no-plugins" };
|
|
@@ -207,7 +213,7 @@ async function reconcilePlugins(projectDir, plugins, opts = {}) {
|
|
|
207
213
|
const hashFile = reconcileHashFile(projectDir);
|
|
208
214
|
if (existsSync(hashFile)) {
|
|
209
215
|
const have = readFileSync(hashFile, "utf8").trim();
|
|
210
|
-
if (have === wantHash) {
|
|
216
|
+
if (have === wantHash && allPluginsInstalled(projectDir, plugins)) {
|
|
211
217
|
return { changed: false, reason: "up-to-date" };
|
|
212
218
|
}
|
|
213
219
|
}
|
|
@@ -356,5 +362,5 @@ async function loadDeclaredPluginsOnce(projectDir) {
|
|
|
356
362
|
}
|
|
357
363
|
|
|
358
364
|
export { condensePluginFailure, ensurePluginsLoaded, loadDeclaredPlugins, loadPlugins, npmSpecError, pluginFailureReasons, projectRelativeFileSpec, reconcilePlugins, resolveFileSpec, rollbackPluginStore, specName };
|
|
359
|
-
//# sourceMappingURL=chunk-
|
|
360
|
-
//# sourceMappingURL=chunk-
|
|
365
|
+
//# sourceMappingURL=chunk-QW5B3TEO.js.map
|
|
366
|
+
//# sourceMappingURL=chunk-QW5B3TEO.js.map
|