@skaile/workspaces 6.0.0 → 6.1.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 +50 -0
- package/dist/{asset-feeds-PXUWCXVI.js → asset-feeds-HJFV7UPW.js} +26 -18
- package/dist/asset-feeds-HJFV7UPW.js.map +1 -0
- package/dist/asset-manager/catalog-deployer.js +7 -7
- package/dist/asset-manager/index.js +13 -13
- package/dist/asset-manager/installer.js +8 -8
- package/dist/asset-manager/renderers.js +7 -7
- package/dist/asset-manager/src/index.d.ts +192 -5
- package/dist/asset-manager/src/index.d.ts.map +1 -1
- package/dist/asset-manager/src/installer.d.ts +31 -0
- package/dist/asset-manager/src/installer.d.ts.map +1 -1
- package/dist/asset-manager/src/mcp-config.d.ts +21 -0
- package/dist/asset-manager/src/mcp-config.d.ts.map +1 -1
- package/dist/bridge/harnesses/claude-sdk.js +13 -17
- package/dist/bridge/harnesses/claude-sdk.js.map +1 -1
- package/dist/bridge/harnesses/codex.js +10 -10
- package/dist/bridge/harnesses/continue.js +10 -10
- package/dist/bridge/harnesses/echo.js +2 -2
- package/dist/bridge/harnesses/gemini.js +6 -6
- package/dist/bridge/harnesses/goose.js +10 -10
- package/dist/bridge/harnesses/omp.js +4 -4
- package/dist/bridge/harnesses/opencode.js +10 -10
- package/dist/bridge/harnesses/qwen.js +6 -6
- package/dist/bridge/index.js +14 -14
- package/dist/bridge/src/claude-sdk-surface.d.ts +17 -0
- package/dist/bridge/src/claude-sdk-surface.d.ts.map +1 -0
- package/dist/bridge/src/harness-model-check.d.ts +15 -0
- 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/index.d.ts +2 -1
- package/dist/bridge/src/index.d.ts.map +1 -1
- package/dist/bridge/src/normalizer.d.ts +3 -1
- package/dist/bridge/src/normalizer.d.ts.map +1 -1
- package/dist/{chunk-VJRTDKXS.js → chunk-2LAPHLDH.js} +144 -94
- package/dist/chunk-2LAPHLDH.js.map +1 -0
- package/dist/{chunk-VXEYX73S.js → chunk-3GMOPFWH.js} +4 -4
- package/dist/{chunk-VXEYX73S.js.map → chunk-3GMOPFWH.js.map} +1 -1
- package/dist/{chunk-MCUJTNY5.js → chunk-4FVIT5DI.js} +3 -3
- package/dist/{chunk-MCUJTNY5.js.map → chunk-4FVIT5DI.js.map} +1 -1
- package/dist/{chunk-SZXGRHQQ.js → chunk-4MUDQCBP.js} +4 -4
- package/dist/{chunk-SZXGRHQQ.js.map → chunk-4MUDQCBP.js.map} +1 -1
- package/dist/{chunk-7CV3HFWJ.js → chunk-5J4NPGFM.js} +3 -3
- package/dist/{chunk-7CV3HFWJ.js.map → chunk-5J4NPGFM.js.map} +1 -1
- package/dist/{chunk-4XWLB7JB.js → chunk-5Y2KGB4H.js} +69 -34
- package/dist/chunk-5Y2KGB4H.js.map +1 -0
- package/dist/{chunk-OULSJRXV.js → chunk-6YR4ALVX.js} +6 -6
- package/dist/{chunk-OULSJRXV.js.map → chunk-6YR4ALVX.js.map} +1 -1
- package/dist/chunk-7HX6FNKL.js +317 -0
- package/dist/chunk-7HX6FNKL.js.map +1 -0
- package/dist/{chunk-WDAIWDLK.js → chunk-7LP7RCZI.js} +4 -4
- package/dist/{chunk-WDAIWDLK.js.map → chunk-7LP7RCZI.js.map} +1 -1
- package/dist/{chunk-2UUKCROR.js → chunk-AATHJRKL.js} +4 -4
- package/dist/{chunk-2UUKCROR.js.map → chunk-AATHJRKL.js.map} +1 -1
- package/dist/{chunk-DUMTLYSO.js → chunk-ABFPSVIS.js} +3 -3
- package/dist/{chunk-DUMTLYSO.js.map → chunk-ABFPSVIS.js.map} +1 -1
- package/dist/{chunk-TKHJXPSB.js → chunk-AITJ7ELM.js} +140 -26
- package/dist/chunk-AITJ7ELM.js.map +1 -0
- package/dist/{chunk-Y2TO2U7W.js → chunk-ASWTQQ7E.js} +3 -3
- package/dist/{chunk-Y2TO2U7W.js.map → chunk-ASWTQQ7E.js.map} +1 -1
- package/dist/{chunk-WYHQUCHR.js → chunk-AZ2H6R5I.js} +51 -25
- package/dist/chunk-AZ2H6R5I.js.map +1 -0
- package/dist/{chunk-LN6QB7XI.js → chunk-BBBCJSSU.js} +4 -4
- package/dist/{chunk-LN6QB7XI.js.map → chunk-BBBCJSSU.js.map} +1 -1
- package/dist/{chunk-WEH33JSG.js → chunk-CEKW3KXP.js} +87 -26
- package/dist/chunk-CEKW3KXP.js.map +1 -0
- package/dist/{chunk-ARWKK325.js → chunk-COYF6IG2.js} +5 -5
- package/dist/{chunk-ARWKK325.js.map → chunk-COYF6IG2.js.map} +1 -1
- package/dist/{chunk-SNEE6UGY.js → chunk-DGTI65OC.js} +11 -11
- package/dist/{chunk-SNEE6UGY.js.map → chunk-DGTI65OC.js.map} +1 -1
- package/dist/{chunk-HK7HMEPT.js → chunk-DIGFA7Z5.js} +3 -3
- package/dist/{chunk-HK7HMEPT.js.map → chunk-DIGFA7Z5.js.map} +1 -1
- package/dist/{chunk-AF432MS3.js → chunk-EJPMNDTP.js} +3 -3
- package/dist/{chunk-AF432MS3.js.map → chunk-EJPMNDTP.js.map} +1 -1
- package/dist/chunk-EX3GLAL6.js +31 -0
- package/dist/chunk-EX3GLAL6.js.map +1 -0
- package/dist/{chunk-UVVVR4XO.js → chunk-FKQNBCDW.js} +3 -3
- package/dist/{chunk-UVVVR4XO.js.map → chunk-FKQNBCDW.js.map} +1 -1
- package/dist/{chunk-GEQSUC6U.js → chunk-GNZBFSRB.js} +3 -3
- package/dist/{chunk-GEQSUC6U.js.map → chunk-GNZBFSRB.js.map} +1 -1
- package/dist/{chunk-U56GGCC2.js → chunk-HMISULVD.js} +4 -4
- package/dist/{chunk-U56GGCC2.js.map → chunk-HMISULVD.js.map} +1 -1
- package/dist/{chunk-GN4VVSAA.js → chunk-HPMQRAIF.js} +7 -7
- package/dist/{chunk-GN4VVSAA.js.map → chunk-HPMQRAIF.js.map} +1 -1
- package/dist/{chunk-OAHVKSQJ.js → chunk-HWNK3F3X.js} +913 -80
- package/dist/chunk-HWNK3F3X.js.map +1 -0
- package/dist/{chunk-NMI2TWMH.js → chunk-IHFGPHCT.js} +131 -341
- package/dist/chunk-IHFGPHCT.js.map +1 -0
- package/dist/{chunk-F2GOZMRA.js → chunk-ILLTBKDJ.js} +47 -47
- package/dist/chunk-ILLTBKDJ.js.map +1 -0
- package/dist/{chunk-FKU57Q5Q.js → chunk-IRYKRKVQ.js} +3 -3
- package/dist/{chunk-FKU57Q5Q.js.map → chunk-IRYKRKVQ.js.map} +1 -1
- package/dist/{chunk-T2BDID2J.js → chunk-J72MO2WA.js} +8 -8
- package/dist/{chunk-T2BDID2J.js.map → chunk-J72MO2WA.js.map} +1 -1
- package/dist/{chunk-X3RMRJNR.js → chunk-JRN5QF4C.js} +8 -3
- package/dist/chunk-JRN5QF4C.js.map +1 -0
- package/dist/{chunk-E3GPGTW3.js → chunk-KUQAJVYT.js} +5 -5
- package/dist/{chunk-E3GPGTW3.js.map → chunk-KUQAJVYT.js.map} +1 -1
- package/dist/{chunk-WDXZA7QW.js → chunk-LSSYC5IC.js} +2 -2
- package/dist/{chunk-WDXZA7QW.js.map → chunk-LSSYC5IC.js.map} +1 -1
- package/dist/{chunk-3IXIEHUB.js → chunk-NB7SYQYP.js} +5 -5
- package/dist/{chunk-3IXIEHUB.js.map → chunk-NB7SYQYP.js.map} +1 -1
- package/dist/{chunk-3JKGY2YC.js → chunk-NUA33BYO.js} +149 -27
- package/dist/chunk-NUA33BYO.js.map +1 -0
- package/dist/{chunk-VBI7HGHB.js → chunk-QAKUD6QN.js} +2 -2
- package/dist/{chunk-VBI7HGHB.js.map → chunk-QAKUD6QN.js.map} +1 -1
- package/dist/{chunk-KX2PT5Q4.js → chunk-QEULL4Q3.js} +4 -4
- package/dist/{chunk-KX2PT5Q4.js.map → chunk-QEULL4Q3.js.map} +1 -1
- package/dist/{chunk-YGRZNFRO.js → chunk-QSYQOTWN.js} +3 -3
- package/dist/{chunk-YGRZNFRO.js.map → chunk-QSYQOTWN.js.map} +1 -1
- package/dist/{chunk-DHYSUJ3H.js → chunk-RDTLPOPD.js} +4 -4
- package/dist/{chunk-DHYSUJ3H.js.map → chunk-RDTLPOPD.js.map} +1 -1
- package/dist/{chunk-GOCWM7FN.js → chunk-RHN5MRQO.js} +21 -4
- package/dist/chunk-RHN5MRQO.js.map +1 -0
- package/dist/{chunk-UL22SDGR.js → chunk-S2XHGWQC.js} +161 -123
- package/dist/chunk-S2XHGWQC.js.map +1 -0
- package/dist/{chunk-4DWBSTYA.js → chunk-SVTMNSPI.js} +22 -5
- package/dist/chunk-SVTMNSPI.js.map +1 -0
- package/dist/{chunk-QOM5Z62G.js → chunk-UI745XC3.js} +9 -22
- package/dist/chunk-UI745XC3.js.map +1 -0
- package/dist/{chunk-L4YKW5AY.js → chunk-VMVDAZLA.js} +20 -8
- package/dist/chunk-VMVDAZLA.js.map +1 -0
- package/dist/{chunk-H6UVIKQ2.js → chunk-VYVTEMAW.js} +3 -3
- package/dist/{chunk-H6UVIKQ2.js.map → chunk-VYVTEMAW.js.map} +1 -1
- package/dist/{chunk-SRODW6M2.js → chunk-X3YGUKCG.js} +3 -3
- package/dist/{chunk-SRODW6M2.js.map → chunk-X3YGUKCG.js.map} +1 -1
- package/dist/{chunk-JDR6ILCW.js → chunk-XGULGQA3.js} +3 -3
- package/dist/{chunk-JDR6ILCW.js.map → chunk-XGULGQA3.js.map} +1 -1
- package/dist/{chunk-7XSAW5OC.js → chunk-YLLVSR2U.js} +4 -4
- package/dist/{chunk-7XSAW5OC.js.map → chunk-YLLVSR2U.js.map} +1 -1
- package/dist/{chunk-6Z5KTFJT.js → chunk-Z3VKUWAX.js} +3 -3
- package/dist/{chunk-6Z5KTFJT.js.map → chunk-Z3VKUWAX.js.map} +1 -1
- package/dist/{chunk-7TPYPVAH.js → chunk-ZAELRYKS.js} +3 -3
- package/dist/{chunk-7TPYPVAH.js.map → chunk-ZAELRYKS.js.map} +1 -1
- package/dist/{chunk-UQ33Y4DM.js → chunk-ZBHZLWV3.js} +4 -4
- package/dist/{chunk-UQ33Y4DM.js.map → chunk-ZBHZLWV3.js.map} +1 -1
- package/dist/{chunk-OTIB4D2K.js → chunk-ZDLUQLI6.js} +4 -4
- package/dist/{chunk-OTIB4D2K.js.map → chunk-ZDLUQLI6.js.map} +1 -1
- package/dist/{chunk-OHNKYHRR.js → chunk-ZHGKAZJ7.js} +214 -16
- package/dist/chunk-ZHGKAZJ7.js.map +1 -0
- package/dist/{claude-code-VJGYBXQR.js → claude-code-RE46FJXI.js} +4 -4
- package/dist/{claude-code-VJGYBXQR.js.map → claude-code-RE46FJXI.js.map} +1 -1
- package/dist/cli/index.js +704 -448
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/src/agent-pins.d.ts +11 -0
- package/dist/cli/src/agent-pins.d.ts.map +1 -1
- package/dist/cli/src/commands/catalog.d.ts +1 -1
- package/dist/cli/src/commands/catalog.d.ts.map +1 -1
- package/dist/cli/src/commands/config.d.ts.map +1 -1
- package/dist/cli/src/commands/diff.d.ts.map +1 -1
- package/dist/cli/src/commands/harness.d.ts +24 -0
- package/dist/cli/src/commands/harness.d.ts.map +1 -0
- package/dist/cli/src/commands/integration.d.ts.map +1 -1
- package/dist/cli/src/commands/library-cmd.d.ts.map +1 -1
- package/dist/cli/src/commands/library-index.d.ts +20 -2
- package/dist/cli/src/commands/library-index.d.ts.map +1 -1
- package/dist/cli/src/commands/library-publish.d.ts.map +1 -1
- package/dist/cli/src/commands/migrate-assets.d.ts.map +1 -1
- package/dist/cli/src/commands/project.d.ts +19 -1
- package/dist/cli/src/commands/project.d.ts.map +1 -1
- package/dist/cli/src/commands/run.d.ts.map +1 -1
- package/dist/cli/src/commands/serve-preflight.d.ts.map +1 -1
- package/dist/cli/src/commands/session-logs/local-query.d.ts +2 -0
- package/dist/cli/src/commands/session-logs/local-query.d.ts.map +1 -1
- package/dist/cli/src/commands/source.d.ts +9 -2
- package/dist/cli/src/commands/source.d.ts.map +1 -1
- package/dist/cli/src/commands/store.d.ts.map +1 -1
- package/dist/cli/src/commands/update.d.ts.map +1 -1
- package/dist/cli/src/commands/validate.d.ts.map +1 -1
- package/dist/cli/src/config-checks.d.ts +37 -0
- package/dist/cli/src/config-checks.d.ts.map +1 -0
- package/dist/cli/src/skill-checks.d.ts +27 -0
- package/dist/cli/src/skill-checks.d.ts.map +1 -1
- package/dist/cli/src/store-addable.d.ts +11 -0
- package/dist/cli/src/store-addable.d.ts.map +1 -1
- package/dist/connectors/config.js +5 -5
- package/dist/connectors/index.js +18 -18
- package/dist/{connectors-CXZLXAFZ.js → connectors-7THEF7YA.js} +21 -21
- package/dist/{connectors-CXZLXAFZ.js.map → connectors-7THEF7YA.js.map} +1 -1
- package/dist/core/index.js +6 -6
- package/dist/core/manifest.js +2 -2
- package/dist/core/models.js +1 -1
- package/dist/core/publish-manifest.js +3 -3
- package/dist/core/ref.js +1 -1
- package/dist/core/runtime-assets.js +5 -5
- package/dist/core/src/agent-instances.d.ts.map +1 -1
- package/dist/core/src/config-key-diagnostics.d.ts +9 -0
- package/dist/core/src/config-key-diagnostics.d.ts.map +1 -0
- package/dist/core/src/index.d.ts +1 -1
- package/dist/core/src/index.d.ts.map +1 -1
- package/dist/core/src/manifest.d.ts +10 -0
- package/dist/core/src/manifest.d.ts.map +1 -1
- package/dist/core/src/models.d.ts +8 -0
- package/dist/core/src/models.d.ts.map +1 -1
- package/dist/core/src/workspace-config.d.ts +8 -0
- package/dist/core/src/workspace-config.d.ts.map +1 -1
- package/dist/core/src/workspace-yaml-editor.d.ts +9 -2
- package/dist/core/src/workspace-yaml-editor.d.ts.map +1 -1
- package/dist/core/workspace-config.js +4 -4
- package/dist/deploy/index.js +6 -6
- package/dist/discovery/index.js +4 -4
- package/dist/discovery/src/builtin-providers.d.ts.map +1 -1
- package/dist/discovery/src/parse-manifest.d.ts.map +1 -1
- package/dist/{ensure-sources-UPTHZKGF.js → ensure-sources-IH7CHSJF.js} +16 -16
- package/dist/{ensure-sources-UPTHZKGF.js.map → ensure-sources-IH7CHSJF.js.map} +1 -1
- package/dist/factory-assets/connectors/box.js +18 -18
- package/dist/factory-assets/connectors/deploy.js +18 -18
- package/dist/factory-assets/connectors/devserver.js +18 -18
- package/dist/factory-assets/connectors/flow/adapter.js +18 -18
- package/dist/factory-assets/connectors/flow/contract/normalize.d.ts.map +1 -1
- package/dist/factory-assets/connectors/flow/contract.js +1 -1
- package/dist/factory-assets/connectors/flow/engine.js +8 -8
- package/dist/factory-assets/connectors/flow/run-flow.js +20 -20
- package/dist/factory-assets/connectors/flow.js +18 -18
- package/dist/factory-assets/connectors/git.js +18 -18
- package/dist/factory-assets/connectors/gmail.js +18 -18
- package/dist/factory-assets/connectors/googledrive.js +18 -18
- package/dist/factory-assets/connectors/local.js +18 -18
- package/dist/factory-assets/connectors/mattermost.js +18 -18
- package/dist/factory-assets/connectors/memory.js +18 -18
- package/dist/factory-assets/connectors/minio.js +18 -18
- package/dist/factory-assets/connectors/postgres.js +18 -18
- package/dist/factory-assets/connectors/s3.js +18 -18
- package/dist/factory-assets/connectors/sharepoint.js +18 -18
- package/dist/factory-assets/connectors/sqlite.js +18 -18
- package/dist/factory-assets/connectors/static-server.js +18 -18
- package/dist/factory-assets/connectors/tunnel.js +18 -18
- package/dist/factory-assets/connectors/webdav.js +18 -18
- package/dist/factory-assets/connectors/xstate-store.js +18 -18
- package/dist/factory-assets/connectors/xstate.js +18 -18
- package/dist/factory-assets/skills/authoring-skaile-assets/SKILL.md +1 -1
- package/dist/factory-assets/skills/authoring-skaile-manifests/SKILL.md +2 -2
- package/dist/factory-assets/skills/authoring-skaile-manifests/references/dependency-standard.md +3 -3
- package/dist/{flows-TJQIMGUX.js → flows-4JZQ3XFK.js} +11 -11
- package/dist/{flows-TJQIMGUX.js.map → flows-4JZQ3XFK.js.map} +1 -1
- package/dist/{helpers-DE53KG3E.js → helpers-JNMK3FC2.js} +16 -16
- package/dist/{helpers-DE53KG3E.js.map → helpers-JNMK3FC2.js.map} +1 -1
- package/dist/library/index.js +9 -9
- package/dist/library/install.js +4 -4
- package/dist/library/src/index.d.ts +1 -1
- package/dist/library/src/index.d.ts.map +1 -1
- package/dist/library/src/local/library-dir.d.ts +22 -5
- package/dist/library/src/local/library-dir.d.ts.map +1 -1
- package/dist/library/src/local/local-catalog-source.d.ts.map +1 -1
- package/dist/library/src/remote/remote-catalog-source.d.ts +6 -0
- package/dist/library/src/remote/remote-catalog-source.d.ts.map +1 -1
- package/dist/{library-publish-KKQ2ULLX.js → library-publish-I3UWXAHI.js} +52 -50
- package/dist/library-publish-I3UWXAHI.js.map +1 -0
- package/dist/model-endpoint/index.js +9 -9
- package/dist/{open-library-RJGJIW5H.js → open-library-NKKUJLWA.js} +19 -19
- package/dist/{open-library-RJGJIW5H.js.map → open-library-NKKUJLWA.js.map} +1 -1
- package/dist/{open-registry-3QS3J7KO.js → open-registry-BYAXSHUI.js} +14 -14
- package/dist/{open-registry-3QS3J7KO.js.map → open-registry-BYAXSHUI.js.map} +1 -1
- package/dist/{paths-QAV4C3KX.js → paths-UKWE35XS.js} +9 -9
- package/dist/{paths-QAV4C3KX.js.map → paths-UKWE35XS.js.map} +1 -1
- package/dist/{plugin-store-MSH6GK6T.js → plugin-store-ABE35NRX.js} +9 -9
- package/dist/{plugin-store-MSH6GK6T.js.map → plugin-store-ABE35NRX.js.map} +1 -1
- package/dist/project-BIPK47JK.js +86 -0
- package/dist/{project-HZW2MZPA.js.map → project-BIPK47JK.js.map} +1 -1
- package/dist/resolver/index.js +7 -7
- package/dist/runner/index.js +33 -33
- package/dist/runner/src/composition/content-source.d.ts.map +1 -1
- package/dist/runner/src/composition/errors.d.ts +16 -1
- package/dist/runner/src/composition/errors.d.ts.map +1 -1
- package/dist/runner/src/credential-notice.d.ts +3 -3
- package/dist/runner/src/credential-notice.d.ts.map +1 -1
- package/dist/runner/src/serve.d.ts +14 -2
- package/dist/runner/src/serve.d.ts.map +1 -1
- package/dist/sdk/asset-manager.js +13 -13
- package/dist/sdk/bridge.js +14 -14
- package/dist/sdk/core.js +6 -6
- package/dist/sdk/flow.js +8 -8
- package/dist/sdk/index.js +33 -33
- package/dist/sdk/resolver.js +7 -7
- package/dist/sdk/runner.js +33 -33
- package/dist/sdk/transport/ws/server.js +7 -7
- package/dist/sdk/transport/ws.js +7 -7
- package/dist/sdk/transport.js +7 -7
- package/dist/{serve-preflight-L4POEHNQ.js → serve-preflight-FLTIBTEX.js} +28 -29
- package/dist/serve-preflight-FLTIBTEX.js.map +1 -0
- package/dist/{setup-AGYB4PKR.js → setup-AG6NFHSN.js} +25 -25
- package/dist/{setup-AGYB4PKR.js.map → setup-AG6NFHSN.js.map} +1 -1
- package/dist/{skills-2LMQ2IAD.js → skills-UQYUHVKO.js} +12 -12
- package/dist/{skills-2LMQ2IAD.js.map → skills-UQYUHVKO.js.map} +1 -1
- package/dist/source-ASEHI2XS.js +85 -0
- package/dist/{source-GBMYD3RO.js.map → source-ASEHI2XS.js.map} +1 -1
- package/dist/{source-manifest-publish-FK22TVQT.js → source-manifest-publish-IEVV3W6J.js} +45 -45
- package/dist/{source-manifest-publish-FK22TVQT.js.map → source-manifest-publish-IEVV3W6J.js.map} +1 -1
- package/dist/transport/index.js +7 -7
- package/dist/transport/ws/server.js +7 -7
- package/dist/transport/ws.js +7 -7
- package/dist/tui/index.js +33 -33
- package/dist/types/src/install-manifest.d.ts +1 -1
- package/dist/types/src/install-manifest.d.ts.map +1 -1
- package/dist/workspace-plugin/adapters/mcp.js +25 -25
- package/dist/workspace-plugin/adapters/omp.js +14 -14
- package/dist/workspace-plugin/index.js +1 -1
- package/package.json +1 -1
- package/dist/asset-feeds-PXUWCXVI.js.map +0 -1
- package/dist/chunk-3JKGY2YC.js.map +0 -1
- package/dist/chunk-4DWBSTYA.js.map +0 -1
- package/dist/chunk-4XWLB7JB.js.map +0 -1
- package/dist/chunk-F2GOZMRA.js.map +0 -1
- package/dist/chunk-GOCWM7FN.js.map +0 -1
- package/dist/chunk-L4YKW5AY.js.map +0 -1
- package/dist/chunk-NMI2TWMH.js.map +0 -1
- package/dist/chunk-OAHVKSQJ.js.map +0 -1
- package/dist/chunk-OHNKYHRR.js.map +0 -1
- package/dist/chunk-PUK7TQT4.js +0 -13
- package/dist/chunk-PUK7TQT4.js.map +0 -1
- package/dist/chunk-QOM5Z62G.js.map +0 -1
- package/dist/chunk-TKHJXPSB.js.map +0 -1
- package/dist/chunk-UL22SDGR.js.map +0 -1
- package/dist/chunk-VJRTDKXS.js.map +0 -1
- package/dist/chunk-WEH33JSG.js.map +0 -1
- package/dist/chunk-WYHQUCHR.js.map +0 -1
- package/dist/chunk-X3RMRJNR.js.map +0 -1
- package/dist/library-publish-KKQ2ULLX.js.map +0 -1
- package/dist/project-HZW2MZPA.js +0 -84
- package/dist/serve-preflight-L4POEHNQ.js.map +0 -1
- package/dist/source-GBMYD3RO.js +0 -85
|
@@ -1,256 +1,24 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
1
|
+
import { checkAgentInstances, unknownKeyWarnings, unknownHarnessErrors } from './chunk-7HX6FNKL.js';
|
|
2
|
+
import { registeredAssetKeys, unresolvedManifestDependencies, warnIgnoredDomainFiles, warnLegacyBundleFiles, removedDomainOption, rejectRemovedDomainOption, reportLibrarySymlinks, composeRefContext, assetEntryRef, manifestPublisherProblems, manifestRootProblems, manifestFilesProblems, manifestEntryNameProblems, manifestRequiresProblems, checkAssetFile, findEntryManifestFile, declaredVersion, manifestVersionMismatchMessage, MANIFEST_GLOBS, manifestParseErrorText, checkAsset, invalidPublisherMessage, invalidSemverText } from './chunk-AITJ7ELM.js';
|
|
3
|
+
import { AI_RESOURCES } from './chunk-AATHJRKL.js';
|
|
4
|
+
import { logErr, logInfo, logWarn, logOk } from './chunk-QEULL4Q3.js';
|
|
5
|
+
import { getKindRegistry } from './chunk-COYF6IG2.js';
|
|
6
|
+
import { validateFlowVersions } from './chunk-IRYKRKVQ.js';
|
|
7
|
+
import { loadFlow } from './chunk-4MUDQCBP.js';
|
|
7
8
|
import { flowSkillVersionPins } from './chunk-7RGTAEG6.js';
|
|
8
|
-
import { missingRootAssets, assertManifestEditable, scanUnlistedAssets, UNLISTED_SCAN_SKIP_DIRS } from './chunk-
|
|
9
|
-
import { parseManifestFile } from './chunk-
|
|
10
|
-
import { resolveRuntimeAssets } from './chunk-
|
|
11
|
-
import { decodeSkaileYaml,
|
|
12
|
-
import { SKAILE_MANIFEST_FILENAME, loadSkPublishManifest,
|
|
13
|
-
import { readAssetBody } from './chunk-
|
|
14
|
-
import { parseAssetRef, isValidPublisher, isValidAssetName, ASSET_NAME_HINT } from './chunk-
|
|
9
|
+
import { missingRootAssets, assertManifestEditable, scanUnlistedAssets, UNLISTED_SCAN_SKIP_DIRS } from './chunk-S2XHGWQC.js';
|
|
10
|
+
import { parseManifestFile } from './chunk-UI745XC3.js';
|
|
11
|
+
import { resolveRuntimeAssets } from './chunk-ZDLUQLI6.js';
|
|
12
|
+
import { decodeSkaileYaml, localConnectorMountDir, symlinkEscapeOfProject, isInsideProject } from './chunk-ZHGKAZJ7.js';
|
|
13
|
+
import { SKAILE_MANIFEST_FILENAME, loadSkPublishManifest, isNonAssetPath } from './chunk-ZBHZLWV3.js';
|
|
14
|
+
import { readAssetBody } from './chunk-RHN5MRQO.js';
|
|
15
|
+
import { parseAssetRef, isValidPublisher, isValidAssetName, ASSET_NAME_HINT } from './chunk-LSSYC5IC.js';
|
|
15
16
|
import { execFileSync } from 'child_process';
|
|
16
|
-
import
|
|
17
|
-
import
|
|
17
|
+
import fs from 'fs';
|
|
18
|
+
import path from 'path';
|
|
18
19
|
import { Command } from 'commander';
|
|
19
20
|
import { parse } from 'yaml';
|
|
20
21
|
|
|
21
|
-
// cli/src/type-guards.ts
|
|
22
|
-
function isRecord(value) {
|
|
23
|
-
return value !== null && typeof value === "object" && !Array.isArray(value);
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
// cli/src/commands/validate-instances.ts
|
|
27
|
-
var AGENT_MANIFEST_FILE = "agent.yaml";
|
|
28
|
-
var TRIGGER_REQUIRED_FIELDS = {
|
|
29
|
-
schedule: ["cron", "prompt"],
|
|
30
|
-
webhook: ["prompt"],
|
|
31
|
-
channel: ["when"],
|
|
32
|
-
event: ["event"]
|
|
33
|
-
};
|
|
34
|
-
var err = (code, message, at) => ({
|
|
35
|
-
code,
|
|
36
|
-
severity: "error",
|
|
37
|
-
message,
|
|
38
|
-
path: at
|
|
39
|
-
});
|
|
40
|
-
function readAssetFacts(manifest) {
|
|
41
|
-
const facts = {
|
|
42
|
-
lifecycle: manifest.lifecycle,
|
|
43
|
-
hasIo: manifest.io !== void 0 && manifest.io !== null,
|
|
44
|
-
connectorSlots: [],
|
|
45
|
-
otherSlots: [],
|
|
46
|
-
triggerIds: []
|
|
47
|
-
};
|
|
48
|
-
for (const item of Array.isArray(manifest.composes) ? manifest.composes : []) {
|
|
49
|
-
if (!isRecord(item) || typeof item.id !== "string") continue;
|
|
50
|
-
(item.kind === "connector" ? facts.connectorSlots : facts.otherSlots).push(item.id);
|
|
51
|
-
}
|
|
52
|
-
for (const t of Array.isArray(manifest.triggers) ? manifest.triggers : []) {
|
|
53
|
-
if (isRecord(t) && typeof t.id === "string") facts.triggerIds.push(t.id);
|
|
54
|
-
}
|
|
55
|
-
return facts;
|
|
56
|
-
}
|
|
57
|
-
function loadAsset(projectDir, id, ref) {
|
|
58
|
-
const at = `agents.${id}.ref`;
|
|
59
|
-
let dir;
|
|
60
|
-
try {
|
|
61
|
-
dir = resolveAgentDefinitionDir(projectDir, ref);
|
|
62
|
-
} catch (e) {
|
|
63
|
-
if (!(e instanceof AgentRefResolutionError)) throw e;
|
|
64
|
-
return { diagnostic: err("agent_ref_unresolved", `agents.${id}: ${e.message}`, at) };
|
|
65
|
-
}
|
|
66
|
-
if (dir === void 0) {
|
|
67
|
-
return {
|
|
68
|
-
diagnostic: err(
|
|
69
|
-
"agent_ref_unresolved",
|
|
70
|
-
`agents.${id}: ref "${ref}" cannot be resolved \u2014 no ai-assets/ directory above the project`,
|
|
71
|
-
at
|
|
72
|
-
)
|
|
73
|
-
};
|
|
74
|
-
}
|
|
75
|
-
const manifestPath = path2.join(dir, AGENT_MANIFEST_FILE);
|
|
76
|
-
let text;
|
|
77
|
-
try {
|
|
78
|
-
text = fs2.readFileSync(manifestPath, "utf-8");
|
|
79
|
-
} catch {
|
|
80
|
-
return {
|
|
81
|
-
diagnostic: err(
|
|
82
|
-
"agent_ref_unresolved",
|
|
83
|
-
`agents.${id}: ref "${ref}" resolves to ${dir}, which has no ${AGENT_MANIFEST_FILE}`,
|
|
84
|
-
at
|
|
85
|
-
)
|
|
86
|
-
};
|
|
87
|
-
}
|
|
88
|
-
let manifest;
|
|
89
|
-
try {
|
|
90
|
-
manifest = parse(text);
|
|
91
|
-
} catch (e) {
|
|
92
|
-
return {
|
|
93
|
-
diagnostic: err(
|
|
94
|
-
"agent_manifest_invalid",
|
|
95
|
-
`agents.${id}: ${manifestPath} is not valid YAML: ${e instanceof Error ? e.message : String(e)}`,
|
|
96
|
-
at
|
|
97
|
-
)
|
|
98
|
-
};
|
|
99
|
-
}
|
|
100
|
-
if (!isRecord(manifest)) {
|
|
101
|
-
return {
|
|
102
|
-
diagnostic: err(
|
|
103
|
-
"agent_manifest_invalid",
|
|
104
|
-
`agents.${id}: ${manifestPath} is not a mapping`,
|
|
105
|
-
at
|
|
106
|
-
)
|
|
107
|
-
};
|
|
108
|
-
}
|
|
109
|
-
return { facts: readAssetFacts(manifest) };
|
|
110
|
-
}
|
|
111
|
-
function checkTriggers(id, triggers, assetTriggerIds) {
|
|
112
|
-
const out = [];
|
|
113
|
-
const seen = /* @__PURE__ */ new Set();
|
|
114
|
-
triggers.forEach((trigger, i) => {
|
|
115
|
-
const at = `agents.${id}.triggers[${i}]`;
|
|
116
|
-
if (seen.has(trigger.id)) {
|
|
117
|
-
out.push(
|
|
118
|
-
err(
|
|
119
|
-
"agent_trigger_duplicate",
|
|
120
|
-
`agents.${id}: trigger id "${trigger.id}" is declared twice`,
|
|
121
|
-
`${at}.id`
|
|
122
|
-
)
|
|
123
|
-
);
|
|
124
|
-
return;
|
|
125
|
-
}
|
|
126
|
-
seen.add(trigger.id);
|
|
127
|
-
if (!assetTriggerIds || assetTriggerIds.includes(trigger.id)) return;
|
|
128
|
-
if (!trigger.kind) {
|
|
129
|
-
out.push(
|
|
130
|
-
err(
|
|
131
|
-
"agent_trigger_unknown",
|
|
132
|
-
`agents.${id}: trigger "${trigger.id}" is not declared by the agent asset (${assetTriggerIds.length > 0 ? `has: ${assetTriggerIds.join(", ")}` : "it declares no triggers"}) \u2014 add \`kind\` and the trigger's fields to declare a new one`,
|
|
133
|
-
`${at}.id`
|
|
134
|
-
)
|
|
135
|
-
);
|
|
136
|
-
return;
|
|
137
|
-
}
|
|
138
|
-
const missing = TRIGGER_REQUIRED_FIELDS[trigger.kind].filter(
|
|
139
|
-
(field) => trigger[field] === void 0
|
|
140
|
-
);
|
|
141
|
-
if (missing.length > 0) {
|
|
142
|
-
out.push(
|
|
143
|
-
err(
|
|
144
|
-
"agent_trigger_incomplete",
|
|
145
|
-
`agents.${id}: trigger "${trigger.id}" (kind ${trigger.kind}) is not in the asset, so it must declare ${missing.join(", ")}`,
|
|
146
|
-
at
|
|
147
|
-
)
|
|
148
|
-
);
|
|
149
|
-
}
|
|
150
|
-
});
|
|
151
|
-
return out;
|
|
152
|
-
}
|
|
153
|
-
function checkConnectors(id, instance, facts, connectorIds) {
|
|
154
|
-
const out = [];
|
|
155
|
-
for (const [slot, connectorId] of Object.entries(instance.connectors ?? {})) {
|
|
156
|
-
const at = `agents.${id}.connectors.${slot}`;
|
|
157
|
-
if (!facts.connectorSlots.includes(slot)) {
|
|
158
|
-
const hint = facts.otherSlots.includes(slot) ? `"${slot}" is a slot of a non-connector item` : facts.connectorSlots.length > 0 ? `the asset's connector slots are: ${facts.connectorSlots.join(", ")}` : "the asset declares no connector slots";
|
|
159
|
-
out.push(
|
|
160
|
-
err(
|
|
161
|
-
"agent_connector_slot_unknown",
|
|
162
|
-
`agents.${id}: connectors.${slot} is not a connector slot id of the agent asset (${hint})`,
|
|
163
|
-
at
|
|
164
|
-
)
|
|
165
|
-
);
|
|
166
|
-
}
|
|
167
|
-
if (!connectorIds.includes(connectorId)) {
|
|
168
|
-
out.push(
|
|
169
|
-
err(
|
|
170
|
-
"agent_connector_unknown",
|
|
171
|
-
`agents.${id}: connectors.${slot} points at "${connectorId}", which is not in skaile.yaml connectors[]${connectorIds.length > 0 ? ` (has: ${connectorIds.join(", ")})` : ""}`,
|
|
172
|
-
at
|
|
173
|
-
)
|
|
174
|
-
);
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
return out;
|
|
178
|
-
}
|
|
179
|
-
function checkAgentInstances(projectDir, parsed) {
|
|
180
|
-
const diagnostics = [];
|
|
181
|
-
const instances = normalizeAgentInstances(parsed.agents, diagnostics);
|
|
182
|
-
const agent = isRecord(parsed.agent) ? parsed.agent : void 0;
|
|
183
|
-
diagnostics.push(...agentBlockKeyDiagnostics(parsed.agent));
|
|
184
|
-
if (agent?.subagents !== void 0) {
|
|
185
|
-
diagnostics.push(
|
|
186
|
-
err(
|
|
187
|
-
"agent_subagents_removed",
|
|
188
|
-
"`agent.subagents` was removed \u2014 declare each subagent as an agent asset and bind it under `agents:` with `lifecycle: role`",
|
|
189
|
-
"agent.subagents"
|
|
190
|
-
)
|
|
191
|
-
);
|
|
192
|
-
}
|
|
193
|
-
if (agent?.instances !== void 0) {
|
|
194
|
-
diagnostics.push(
|
|
195
|
-
err(
|
|
196
|
-
"misplaced_agent_instances",
|
|
197
|
-
"`agent.instances` is not a skaile.yaml key \u2014 declare instances under root `agents:`",
|
|
198
|
-
"agent.instances"
|
|
199
|
-
)
|
|
200
|
-
);
|
|
201
|
-
}
|
|
202
|
-
diagnostics.push(
|
|
203
|
-
...agentInstanceDiagnostics({
|
|
204
|
-
agent: {
|
|
205
|
-
definition: typeof agent?.definition === "string" ? agent.definition : void 0,
|
|
206
|
-
instances
|
|
207
|
-
}
|
|
208
|
-
})
|
|
209
|
-
);
|
|
210
|
-
if (!instances) return diagnostics;
|
|
211
|
-
const connectorIds = (Array.isArray(parsed.connectors) ? parsed.connectors : []).flatMap(
|
|
212
|
-
(c) => isRecord(c) && typeof c.id === "string" ? [c.id] : []
|
|
213
|
-
);
|
|
214
|
-
for (const [id, instance] of Object.entries(instances)) {
|
|
215
|
-
const loaded = loadAsset(projectDir, id, instance.ref);
|
|
216
|
-
if ("diagnostic" in loaded) {
|
|
217
|
-
diagnostics.push(loaded.diagnostic, ...checkTriggers(id, instance.triggers ?? [], void 0));
|
|
218
|
-
continue;
|
|
219
|
-
}
|
|
220
|
-
const { facts } = loaded;
|
|
221
|
-
const lifecycle = instance.lifecycle ?? facts.lifecycle ?? "standing";
|
|
222
|
-
if (lifecycle === "role" && !facts.hasIo) {
|
|
223
|
-
diagnostics.push(
|
|
224
|
-
err(
|
|
225
|
-
"agent_role_missing_io",
|
|
226
|
-
`agents.${id}: lifecycle "role" needs the agent asset to declare \`io\` ({ input, output } JSON Schemas)`,
|
|
227
|
-
`agents.${id}.lifecycle`
|
|
228
|
-
)
|
|
229
|
-
);
|
|
230
|
-
}
|
|
231
|
-
diagnostics.push(...checkConnectors(id, instance, facts, connectorIds));
|
|
232
|
-
diagnostics.push(...checkTriggers(id, instance.triggers ?? [], facts.triggerIds));
|
|
233
|
-
}
|
|
234
|
-
return diagnostics;
|
|
235
|
-
}
|
|
236
|
-
|
|
237
|
-
// cli/src/commands/validate.ts
|
|
238
|
-
var MANIFEST_GLOBS = [
|
|
239
|
-
{ pattern: /\/SKILL\.md$/, kind: "skill" },
|
|
240
|
-
{ pattern: /\/agent\.yaml$/, kind: "agent" },
|
|
241
|
-
{ pattern: /\/AGENT\.md$/, kind: "agent" },
|
|
242
|
-
{ pattern: /\/CONTRACT\.md$/, kind: "contract" },
|
|
243
|
-
{ pattern: /\/PERSONA\.md$/, kind: "persona" },
|
|
244
|
-
{ pattern: /\/RULESET\.md$/, kind: "ruleset" },
|
|
245
|
-
{ pattern: /\.flow\.yaml$/, kind: "flow" },
|
|
246
|
-
{ pattern: /\.flow\.json$/, kind: "flow" },
|
|
247
|
-
{ pattern: /\/CONNECTOR\.md$/, kind: "connector" },
|
|
248
|
-
{ pattern: /\.prompt\.md$/, kind: "prompt" },
|
|
249
|
-
{ pattern: /\/MCP\.md$/, kind: "mcp-server" },
|
|
250
|
-
{ pattern: /\/knowledge\.yaml$/, kind: "knowledge" },
|
|
251
|
-
{ pattern: /\/knowledge\/index\.yaml$/, kind: "knowledge" },
|
|
252
|
-
{ pattern: /\.preset\.yaml$/, kind: "preset" }
|
|
253
|
-
];
|
|
254
22
|
var HARNESS_DIRS = /* @__PURE__ */ new Set([".claude", ".codex", ".omp"]);
|
|
255
23
|
var SKIP_DIRS = /* @__PURE__ */ new Set([
|
|
256
24
|
"node_modules",
|
|
@@ -265,12 +33,12 @@ function findManifestCandidates(rootPath) {
|
|
|
265
33
|
function walk(dir) {
|
|
266
34
|
let entries;
|
|
267
35
|
try {
|
|
268
|
-
entries =
|
|
36
|
+
entries = fs.readdirSync(dir, { withFileTypes: true });
|
|
269
37
|
} catch {
|
|
270
38
|
return;
|
|
271
39
|
}
|
|
272
40
|
for (const entry of entries) {
|
|
273
|
-
const fullPath =
|
|
41
|
+
const fullPath = path.join(dir, entry.name);
|
|
274
42
|
if (entry.isDirectory()) {
|
|
275
43
|
if (!SKIP_DIRS.has(entry.name)) walk(fullPath);
|
|
276
44
|
} else if (entry.isFile()) {
|
|
@@ -287,10 +55,12 @@ function findManifestCandidates(rootPath) {
|
|
|
287
55
|
return candidates;
|
|
288
56
|
}
|
|
289
57
|
function parseManifestCandidate(c, absRoot) {
|
|
290
|
-
const content =
|
|
58
|
+
const content = fs.readFileSync(c.filePath, "utf-8");
|
|
291
59
|
const res = parseManifestFile(c.filePath, content);
|
|
292
60
|
if (!res.ok) {
|
|
293
|
-
logErr(
|
|
61
|
+
logErr(
|
|
62
|
+
`${path.relative(absRoot, c.filePath)} [${c.kind}] \u2014 ${manifestParseErrorText(res.reason)}`
|
|
63
|
+
);
|
|
294
64
|
return { kind: "error" };
|
|
295
65
|
}
|
|
296
66
|
return {
|
|
@@ -300,25 +70,25 @@ function parseManifestCandidate(c, absRoot) {
|
|
|
300
70
|
};
|
|
301
71
|
}
|
|
302
72
|
function libraryRootOf(absRoot) {
|
|
303
|
-
for (let dir = absRoot; ; dir =
|
|
304
|
-
if (
|
|
305
|
-
if (
|
|
73
|
+
for (let dir = absRoot; ; dir = path.dirname(dir)) {
|
|
74
|
+
if (fs.existsSync(path.join(dir, SKAILE_MANIFEST_FILENAME))) return dir;
|
|
75
|
+
if (path.dirname(dir) === dir) return absRoot;
|
|
306
76
|
}
|
|
307
77
|
}
|
|
308
78
|
function validateManifestCandidate(c, parsed, body, absRoot, registry, strictConformance, composeRefs) {
|
|
309
|
-
const relPath =
|
|
79
|
+
const relPath = path.relative(absRoot, c.filePath);
|
|
310
80
|
let errors = 0;
|
|
311
81
|
let warnings = 0;
|
|
312
|
-
const dirName =
|
|
82
|
+
const dirName = path.basename(path.dirname(c.filePath));
|
|
313
83
|
const checked = checkAsset(
|
|
314
84
|
c.kind,
|
|
315
85
|
parsed ?? {},
|
|
316
86
|
body,
|
|
317
87
|
dirName,
|
|
318
88
|
registry,
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
{ dir:
|
|
89
|
+
fs.readFileSync(c.filePath, "utf-8"),
|
|
90
|
+
path.basename(c.filePath),
|
|
91
|
+
{ dir: path.dirname(c.filePath), libraryRoot: libraryRootOf(absRoot), composeRefs }
|
|
322
92
|
);
|
|
323
93
|
for (const f of checked.errors) {
|
|
324
94
|
logErr(`${relPath} [${f.tag}] \u2014 ${f.text}`);
|
|
@@ -341,7 +111,7 @@ function scanIdentities(root) {
|
|
|
341
111
|
for (const c of findManifestCandidates(root)) {
|
|
342
112
|
let parsed;
|
|
343
113
|
try {
|
|
344
|
-
const res = parseManifestFile(c.filePath,
|
|
114
|
+
const res = parseManifestFile(c.filePath, fs.readFileSync(c.filePath, "utf-8"));
|
|
345
115
|
if (!res.ok) continue;
|
|
346
116
|
parsed = res.data;
|
|
347
117
|
} catch {
|
|
@@ -355,14 +125,14 @@ function scanIdentities(root) {
|
|
|
355
125
|
return identities;
|
|
356
126
|
}
|
|
357
127
|
function validateManifests(rootPath, strictConformance, registeredAssets = /* @__PURE__ */ new Set()) {
|
|
358
|
-
const absRoot =
|
|
359
|
-
if (!
|
|
128
|
+
const absRoot = path.resolve(rootPath);
|
|
129
|
+
if (!fs.existsSync(absRoot)) {
|
|
360
130
|
logErr(`Path does not exist: ${absRoot}`);
|
|
361
131
|
return { total: 0, errors: 1, warnings: 0 };
|
|
362
132
|
}
|
|
363
133
|
const registry = getKindRegistry();
|
|
364
134
|
const candidates = findManifestCandidates(absRoot);
|
|
365
|
-
const isLibrary =
|
|
135
|
+
const isLibrary = fs.existsSync(path.join(absRoot, SKAILE_MANIFEST_FILENAME));
|
|
366
136
|
let errors = reportLibrarySymlinks(absRoot, {
|
|
367
137
|
wholeTree: isLibrary,
|
|
368
138
|
skipDirs: isLibrary ? void 0 : HARNESS_DIRS
|
|
@@ -395,14 +165,14 @@ function validateManifests(rootPath, strictConformance, registeredAssets = /* @_
|
|
|
395
165
|
const obj = parseResult.parsed;
|
|
396
166
|
const identity = obj && typeof obj === "object" ? obj[c.kind === "flow" ? "id" : "name"] : null;
|
|
397
167
|
if (typeof identity === "string" && identity.length > 0) {
|
|
398
|
-
const dir =
|
|
168
|
+
const dir = path.dirname(c.filePath);
|
|
399
169
|
const key = `${c.kind}:${identity}`;
|
|
400
170
|
const first = seenIdentity.get(key);
|
|
401
171
|
if (first === void 0) {
|
|
402
172
|
seenIdentity.set(key, dir);
|
|
403
173
|
} else if (first !== dir) {
|
|
404
174
|
logErr(
|
|
405
|
-
`${
|
|
175
|
+
`${path.relative(absRoot, c.filePath)} [${c.kind}] \u2014 ${key} is also defined in ${path.relative(absRoot, first) || "."}; two directories cannot share a kind and name (\`skaile library index\` keeps only the first).`
|
|
406
176
|
);
|
|
407
177
|
errors++;
|
|
408
178
|
}
|
|
@@ -415,12 +185,12 @@ function findWorkspaceManifests(rootPath) {
|
|
|
415
185
|
function walk(dir) {
|
|
416
186
|
let entries;
|
|
417
187
|
try {
|
|
418
|
-
entries =
|
|
188
|
+
entries = fs.readdirSync(dir, { withFileTypes: true });
|
|
419
189
|
} catch {
|
|
420
190
|
return;
|
|
421
191
|
}
|
|
422
192
|
for (const entry of entries) {
|
|
423
|
-
const full =
|
|
193
|
+
const full = path.join(dir, entry.name);
|
|
424
194
|
if (entry.isDirectory()) {
|
|
425
195
|
if (!SKIP_DIRS.has(entry.name)) walk(full);
|
|
426
196
|
} else if (entry.isFile() && /(^|\.)skaile\.yaml$/.test(entry.name)) {
|
|
@@ -500,7 +270,7 @@ function validateLocalConnectorMountPaths(projectDir, relPath, connectors) {
|
|
|
500
270
|
const dir = localConnectorMountDir(c, projectDir);
|
|
501
271
|
if (!dir) continue;
|
|
502
272
|
const escapesTo = symlinkEscapeOfProject(dir, projectDir);
|
|
503
|
-
if (!
|
|
273
|
+
if (!fs.existsSync(dir)) {
|
|
504
274
|
logErr(
|
|
505
275
|
`${relPath} [connectors] \u2014 connector_mount_path_missing: connectors.${c.id}.mountPath: ${dir} does not exist; create the directory or fix the path`
|
|
506
276
|
);
|
|
@@ -519,14 +289,14 @@ function validateLocalConnectorMountPaths(projectDir, relPath, connectors) {
|
|
|
519
289
|
return errors;
|
|
520
290
|
}
|
|
521
291
|
async function validateWorkspaceManifests(rootPath) {
|
|
522
|
-
const absRoot =
|
|
292
|
+
const absRoot = path.resolve(rootPath);
|
|
523
293
|
const files = findWorkspaceManifests(absRoot);
|
|
524
294
|
let errors = 0;
|
|
525
295
|
for (const file of files) {
|
|
526
|
-
const relPath =
|
|
296
|
+
const relPath = path.relative(absRoot, file);
|
|
527
297
|
let parsed;
|
|
528
298
|
try {
|
|
529
|
-
parsed = parse(
|
|
299
|
+
parsed = parse(fs.readFileSync(file, "utf-8")) ?? {};
|
|
530
300
|
} catch (e) {
|
|
531
301
|
logErr(`${relPath} \u2014 parse error: ${e instanceof Error ? e.message : String(e)}`);
|
|
532
302
|
errors++;
|
|
@@ -534,7 +304,7 @@ async function validateWorkspaceManifests(rootPath) {
|
|
|
534
304
|
}
|
|
535
305
|
errors += validateWorkspaceRefs(collectWorkspaceRefFields(parsed), relPath);
|
|
536
306
|
errors += validateWorkspaceAssets(parsed, relPath);
|
|
537
|
-
for (const d of checkAgentInstances(
|
|
307
|
+
for (const d of checkAgentInstances(path.dirname(file), parsed)) {
|
|
538
308
|
const line = `${relPath} [agents] \u2014 ${d.code}: ${d.path ? `${d.path}: ` : ""}${d.message}`;
|
|
539
309
|
if (d.severity === "error") {
|
|
540
310
|
logErr(line);
|
|
@@ -543,7 +313,7 @@ async function validateWorkspaceManifests(rootPath) {
|
|
|
543
313
|
logWarn(line);
|
|
544
314
|
}
|
|
545
315
|
}
|
|
546
|
-
const decoded = decodeSkaileYaml(
|
|
316
|
+
const decoded = decodeSkaileYaml(fs.readFileSync(file, "utf-8"));
|
|
547
317
|
for (const d of decoded.diagnostics) {
|
|
548
318
|
if (!CONNECTOR_ERROR_CODES.includes(d.code)) continue;
|
|
549
319
|
logErr(`${relPath} [connectors] \u2014 ${d.code}: ${d.path ? `${d.path}: ` : ""}${d.message}`);
|
|
@@ -564,13 +334,18 @@ async function validateWorkspaceManifests(rootPath) {
|
|
|
564
334
|
logWarn(line);
|
|
565
335
|
}
|
|
566
336
|
}
|
|
337
|
+
for (const line of unknownKeyWarnings(decoded.diagnostics, relPath)) logWarn(line);
|
|
338
|
+
for (const line of await unknownHarnessErrors(path.dirname(file), decoded.config, relPath)) {
|
|
339
|
+
logErr(line);
|
|
340
|
+
errors++;
|
|
341
|
+
}
|
|
567
342
|
errors += validateLocalConnectorMountPaths(
|
|
568
|
-
|
|
343
|
+
path.dirname(file),
|
|
569
344
|
relPath,
|
|
570
345
|
decoded.config?.connectors ?? []
|
|
571
346
|
);
|
|
572
347
|
if ((decoded.config?.connectors ?? []).length > 0) {
|
|
573
|
-
const assets = await resolveRuntimeAssets(
|
|
348
|
+
const assets = await resolveRuntimeAssets(path.dirname(file));
|
|
574
349
|
if (!assets.warnings.some((w) => w.code === "repo_unavailable")) {
|
|
575
350
|
for (const w of assets.warnings) {
|
|
576
351
|
if (w.code !== "missing_driver" || !w.name) continue;
|
|
@@ -583,7 +358,7 @@ async function validateWorkspaceManifests(rootPath) {
|
|
|
583
358
|
return { total: files.length, errors };
|
|
584
359
|
}
|
|
585
360
|
function validatePublishManifestRoots(rootPath) {
|
|
586
|
-
const absRoot =
|
|
361
|
+
const absRoot = path.resolve(rootPath);
|
|
587
362
|
const manifest = loadSkPublishManifest(absRoot);
|
|
588
363
|
if (!manifest) return 0;
|
|
589
364
|
const missing = missingRootAssets(absRoot, manifest);
|
|
@@ -592,40 +367,37 @@ function validatePublishManifestRoots(rootPath) {
|
|
|
592
367
|
`${SKAILE_MANIFEST_FILENAME} [assets] \u2014 ${assetEntryRef(a, manifest)}: root "${a.root}" does not exist. Run \`skaile library index <library>\` to drop the entry, or restore the directory.`
|
|
593
368
|
);
|
|
594
369
|
}
|
|
595
|
-
|
|
596
|
-
if (!manifest.source) {
|
|
597
|
-
for (const a of manifest.assets ?? []) {
|
|
598
|
-
if (a.root || a.source || !Array.isArray(a.files) || a.files.length === 0) continue;
|
|
599
|
-
const patterns = a.files.map((f) => typeof f === "string" ? f : f.path).filter(Boolean);
|
|
600
|
-
const { unmatched } = expandManifestFiles(absRoot, patterns);
|
|
601
|
-
if (unmatched.length === 0) continue;
|
|
602
|
-
unmatchedEntries++;
|
|
603
|
-
logErr(
|
|
604
|
-
`${SKAILE_MANIFEST_FILENAME} [assets] \u2014 ${assetEntryRef(a, manifest)}: files: ${unmatched.join(", ")} not found. Fix the \`files:\` list or drop the entry.`
|
|
605
|
-
);
|
|
606
|
-
}
|
|
607
|
-
}
|
|
608
|
-
return missing.length + unmatchedEntries;
|
|
370
|
+
return missing.length;
|
|
609
371
|
}
|
|
610
372
|
async function validatePublishManifestUnlisted(rootPath) {
|
|
611
|
-
const absRoot =
|
|
373
|
+
const absRoot = path.resolve(rootPath);
|
|
612
374
|
const manifest = loadSkPublishManifest(absRoot);
|
|
613
375
|
if (!manifest) return 0;
|
|
376
|
+
const registry = getKindRegistry();
|
|
377
|
+
const libraryRoot = libraryRootOf(absRoot);
|
|
378
|
+
const composeRefs = composeRefContext(
|
|
379
|
+
scanIdentities(libraryRoot),
|
|
380
|
+
await registeredAssetKeys(libraryRoot),
|
|
381
|
+
manifest.publisher
|
|
382
|
+
);
|
|
614
383
|
const unlisted = (await scanUnlistedAssets(
|
|
615
384
|
absRoot,
|
|
616
|
-
manifest.publisher ??
|
|
617
|
-
|
|
385
|
+
manifest.publisher ?? path.basename(absRoot),
|
|
386
|
+
registry,
|
|
618
387
|
UNLISTED_SCAN_SKIP_DIRS
|
|
619
|
-
)).filter(
|
|
388
|
+
)).filter(
|
|
389
|
+
(u) => !u.registeredAt && !u.parseFailure && // a file that does not parse has its own parse error
|
|
390
|
+
checkAssetFile(u.entry.source, u.entry.kind, registry, absRoot, composeRefs).length === 0
|
|
391
|
+
);
|
|
620
392
|
for (const u of unlisted) {
|
|
621
393
|
logErr(
|
|
622
|
-
`${
|
|
394
|
+
`${path.relative(absRoot, u.entry.source)} [${u.entry.kind}] \u2014 ${u.entry.kind}:${u.entry.name} is on disk but not in ${SKAILE_MANIFEST_FILENAME}, so it is not published. Run \`skaile library index <library>\` to list it, or delete the directory.`
|
|
623
395
|
);
|
|
624
396
|
}
|
|
625
397
|
return unlisted.length;
|
|
626
398
|
}
|
|
627
399
|
function validatePublishManifestRequires(rootPath) {
|
|
628
|
-
const problems = manifestRequiresProblems(
|
|
400
|
+
const problems = manifestRequiresProblems(path.resolve(rootPath));
|
|
629
401
|
for (const p of problems) {
|
|
630
402
|
logErr(
|
|
631
403
|
`${SKAILE_MANIFEST_FILENAME} [assets] \u2014 ${p.asset}: ${p.message}. Use the \`kind:@<publisher>/name[#version]\` form.`
|
|
@@ -634,29 +406,30 @@ function validatePublishManifestRequires(rootPath) {
|
|
|
634
406
|
return problems.length;
|
|
635
407
|
}
|
|
636
408
|
function validatePublishManifestPublisherSlugs(rootPath) {
|
|
637
|
-
const problems = manifestPublisherProblems(
|
|
409
|
+
const problems = manifestPublisherProblems(path.resolve(rootPath));
|
|
638
410
|
for (const message of problems) logErr(message);
|
|
639
411
|
return problems.length;
|
|
640
412
|
}
|
|
641
413
|
function validatePublishManifestRootPaths(rootPath) {
|
|
642
414
|
const problems = [
|
|
643
|
-
...manifestRootProblems(
|
|
644
|
-
...
|
|
415
|
+
...manifestRootProblems(path.resolve(rootPath)),
|
|
416
|
+
...manifestFilesProblems(path.resolve(rootPath)),
|
|
417
|
+
...manifestEntryNameProblems(path.resolve(rootPath))
|
|
645
418
|
];
|
|
646
419
|
for (const message of problems) logErr(message);
|
|
647
420
|
return problems.length;
|
|
648
421
|
}
|
|
649
422
|
function validatePublishManifestParses(rootPath) {
|
|
650
423
|
try {
|
|
651
|
-
assertManifestEditable(
|
|
424
|
+
assertManifestEditable(path.resolve(rootPath));
|
|
652
425
|
return 0;
|
|
653
|
-
} catch (
|
|
654
|
-
logErr(
|
|
426
|
+
} catch (err) {
|
|
427
|
+
logErr(err instanceof Error ? err.message : String(err));
|
|
655
428
|
return 1;
|
|
656
429
|
}
|
|
657
430
|
}
|
|
658
431
|
function validatePublishManifestVersions(rootPath) {
|
|
659
|
-
const absRoot =
|
|
432
|
+
const absRoot = path.resolve(rootPath);
|
|
660
433
|
const manifest = loadSkPublishManifest(absRoot);
|
|
661
434
|
if (!manifest || manifest.source) return 0;
|
|
662
435
|
let warnings = 0;
|
|
@@ -664,7 +437,7 @@ function validatePublishManifestVersions(rootPath) {
|
|
|
664
437
|
if (a.source || !a.version) continue;
|
|
665
438
|
const file = findEntryManifestFile(absRoot, a);
|
|
666
439
|
if (!file) continue;
|
|
667
|
-
const res = parseManifestFile(file,
|
|
440
|
+
const res = parseManifestFile(file, fs.readFileSync(file, "utf-8"));
|
|
668
441
|
if (!res.ok) continue;
|
|
669
442
|
const fileVersion = declaredVersion(res.data);
|
|
670
443
|
if (fileVersion === void 0 || fileVersion === a.version) continue;
|
|
@@ -672,7 +445,7 @@ function validatePublishManifestVersions(rootPath) {
|
|
|
672
445
|
manifestVersionMismatchMessage(
|
|
673
446
|
assetEntryRef(a, manifest),
|
|
674
447
|
a.version,
|
|
675
|
-
toPosix(
|
|
448
|
+
toPosix(path.relative(absRoot, file)),
|
|
676
449
|
fileVersion
|
|
677
450
|
)
|
|
678
451
|
);
|
|
@@ -681,7 +454,7 @@ function validatePublishManifestVersions(rootPath) {
|
|
|
681
454
|
return warnings;
|
|
682
455
|
}
|
|
683
456
|
function validatePublishManifestPublishers(rootPath) {
|
|
684
|
-
const absRoot =
|
|
457
|
+
const absRoot = path.resolve(rootPath);
|
|
685
458
|
const manifest = loadSkPublishManifest(absRoot);
|
|
686
459
|
if (!manifest || manifest.source) return 0;
|
|
687
460
|
const bare = (p) => p.trim().replace(/^@/, "");
|
|
@@ -691,13 +464,13 @@ function validatePublishManifestPublishers(rootPath) {
|
|
|
691
464
|
if (a.source || !resolved) continue;
|
|
692
465
|
const file = findEntryManifestFile(absRoot, a);
|
|
693
466
|
if (!file) continue;
|
|
694
|
-
const res = parseManifestFile(file,
|
|
467
|
+
const res = parseManifestFile(file, fs.readFileSync(file, "utf-8"));
|
|
695
468
|
if (!res.ok) continue;
|
|
696
469
|
const meta = res.data.metadata;
|
|
697
470
|
const declared = meta !== null && typeof meta === "object" ? meta.publisher : null;
|
|
698
471
|
if (typeof declared !== "string" || bare(declared) === bare(resolved)) continue;
|
|
699
472
|
logWarn(
|
|
700
|
-
`${toPosix(
|
|
473
|
+
`${toPosix(path.relative(absRoot, file))} [publisher] \u2014 metadata.publisher "${bare(declared)}" differs from the manifest publisher "${bare(resolved)}" for ${assetEntryRef(a, manifest)}. The manifest wins and the file value is ignored: delete \`metadata.publisher\` from the file, or set the publisher in ${SKAILE_MANIFEST_FILENAME}.`
|
|
701
474
|
);
|
|
702
475
|
warnings++;
|
|
703
476
|
}
|
|
@@ -705,7 +478,7 @@ function validatePublishManifestPublishers(rootPath) {
|
|
|
705
478
|
}
|
|
706
479
|
var EXCLUDED_PATHS = ["skaileup-shared/", "external/", "docs/"];
|
|
707
480
|
function toPosix(p) {
|
|
708
|
-
return p.split(
|
|
481
|
+
return p.split(path.sep).join("/");
|
|
709
482
|
}
|
|
710
483
|
function isExcludedPath(relPath) {
|
|
711
484
|
const rel = toPosix(relPath);
|
|
@@ -721,9 +494,9 @@ var VERSIONED_KINDS = {
|
|
|
721
494
|
};
|
|
722
495
|
function readAssetVersion(c) {
|
|
723
496
|
const kind = c.kind;
|
|
724
|
-
const fileName =
|
|
725
|
-
const dirName =
|
|
726
|
-
const content =
|
|
497
|
+
const fileName = path.basename(c.filePath);
|
|
498
|
+
const dirName = path.basename(path.dirname(c.filePath));
|
|
499
|
+
const content = fs.readFileSync(c.filePath, "utf-8");
|
|
727
500
|
if (c.filePath.endsWith(".md")) {
|
|
728
501
|
const res = parseManifestFile(c.filePath, content);
|
|
729
502
|
const data = res.ok ? res.data : {};
|
|
@@ -756,26 +529,26 @@ function readAssetVersion(c) {
|
|
|
756
529
|
};
|
|
757
530
|
}
|
|
758
531
|
function collectAssetVersions(root) {
|
|
759
|
-
if (!
|
|
532
|
+
if (!fs.existsSync(root)) return [];
|
|
760
533
|
const assets = [];
|
|
761
534
|
for (const c of findManifestCandidates(root)) {
|
|
762
535
|
if (!VERSIONED_KINDS[c.kind]) continue;
|
|
763
536
|
if (c.filePath.endsWith(".flow.json")) continue;
|
|
764
|
-
if (isExcludedPath(
|
|
537
|
+
if (isExcludedPath(path.relative(root, c.filePath))) continue;
|
|
765
538
|
assets.push(readAssetVersion(c));
|
|
766
539
|
}
|
|
767
540
|
return assets;
|
|
768
541
|
}
|
|
769
542
|
function assetLocation(a, root) {
|
|
770
|
-
return toPosix(
|
|
543
|
+
return toPosix(path.relative(root, a.filePath));
|
|
771
544
|
}
|
|
772
545
|
function findChangelogUnit(assetRelPath, root) {
|
|
773
|
-
let dir =
|
|
546
|
+
let dir = path.posix.dirname(toPosix(assetRelPath));
|
|
774
547
|
for (; ; ) {
|
|
775
548
|
const candidate = dir === "." ? "CHANGELOG.md" : `${dir}/CHANGELOG.md`;
|
|
776
|
-
if (
|
|
549
|
+
if (fs.existsSync(path.join(root, candidate))) return candidate;
|
|
777
550
|
if (dir === ".") return null;
|
|
778
|
-
dir =
|
|
551
|
+
dir = path.posix.dirname(dir);
|
|
779
552
|
}
|
|
780
553
|
}
|
|
781
554
|
function checkChangelogUnits(modifiedFiles, root) {
|
|
@@ -825,7 +598,7 @@ function checkVersionBumps(assets, root) {
|
|
|
825
598
|
let warnings = 0;
|
|
826
599
|
for (const a of assets) {
|
|
827
600
|
if (!a.version) continue;
|
|
828
|
-
const relPath = toPosix(
|
|
601
|
+
const relPath = toPosix(path.relative(root, a.filePath));
|
|
829
602
|
try {
|
|
830
603
|
const headContent = execFileSync("git", ["show", `HEAD:./${relPath}`], {
|
|
831
604
|
cwd: root,
|
|
@@ -856,9 +629,9 @@ function checkFlowVersionPins(assets, root) {
|
|
|
856
629
|
let pins;
|
|
857
630
|
try {
|
|
858
631
|
pins = flowSkillVersionPins(loadFlow(f.filePath));
|
|
859
|
-
} catch (
|
|
632
|
+
} catch (err) {
|
|
860
633
|
logWarn(
|
|
861
|
-
`flow:${f.name} (${
|
|
634
|
+
`flow:${f.name} (${path.relative(root, f.filePath)}) \u2014 could not be read: ${err instanceof Error ? err.message : err}`
|
|
862
635
|
);
|
|
863
636
|
warnings++;
|
|
864
637
|
continue;
|
|
@@ -876,16 +649,16 @@ function checkFlowVersionPins(assets, root) {
|
|
|
876
649
|
}
|
|
877
650
|
function resolveCheckRoot(pathArg) {
|
|
878
651
|
if (pathArg) {
|
|
879
|
-
const abs =
|
|
880
|
-
if (!
|
|
652
|
+
const abs = path.resolve(pathArg);
|
|
653
|
+
if (!fs.existsSync(abs)) {
|
|
881
654
|
logErr(`Path does not exist: ${abs}`);
|
|
882
655
|
return null;
|
|
883
656
|
}
|
|
884
657
|
return abs;
|
|
885
658
|
}
|
|
886
|
-
for (let dir = process.cwd(); ; dir =
|
|
887
|
-
if (
|
|
888
|
-
if (
|
|
659
|
+
for (let dir = process.cwd(); ; dir = path.dirname(dir)) {
|
|
660
|
+
if (fs.existsSync(path.join(dir, SKAILE_MANIFEST_FILENAME))) return dir;
|
|
661
|
+
if (path.dirname(dir) === dir) return AI_RESOURCES;
|
|
889
662
|
}
|
|
890
663
|
}
|
|
891
664
|
function isInGitWorkTree(root) {
|
|
@@ -899,11 +672,28 @@ function isInGitWorkTree(root) {
|
|
|
899
672
|
return false;
|
|
900
673
|
}
|
|
901
674
|
}
|
|
675
|
+
function hasCommit(root) {
|
|
676
|
+
try {
|
|
677
|
+
execFileSync("git", ["rev-parse", "--verify", "--quiet", "HEAD"], {
|
|
678
|
+
cwd: root,
|
|
679
|
+
stdio: ["ignore", "ignore", "ignore"]
|
|
680
|
+
});
|
|
681
|
+
return true;
|
|
682
|
+
} catch {
|
|
683
|
+
return false;
|
|
684
|
+
}
|
|
685
|
+
}
|
|
902
686
|
function changedFiles(root, ref, what, opts = {}) {
|
|
903
687
|
if (!isInGitWorkTree(root)) {
|
|
904
688
|
logErr(`${what} needs a git repository: ${root} is not inside a git work tree.`);
|
|
905
689
|
return null;
|
|
906
690
|
}
|
|
691
|
+
if (ref === "HEAD" && !hasCommit(root)) {
|
|
692
|
+
logErr(
|
|
693
|
+
`${what} compares with the last commit, and ${root} has no commit yet. Commit the library first (\`skaile library commit <name>\`), then run it again.`
|
|
694
|
+
);
|
|
695
|
+
return null;
|
|
696
|
+
}
|
|
907
697
|
try {
|
|
908
698
|
const out = execFileSync(
|
|
909
699
|
"git",
|
|
@@ -924,16 +714,16 @@ function changedFiles(root, ref, what, opts = {}) {
|
|
|
924
714
|
changed.push(...fresh.trim().split("\n").filter(Boolean));
|
|
925
715
|
}
|
|
926
716
|
return changed;
|
|
927
|
-
} catch (
|
|
928
|
-
const stderr =
|
|
929
|
-
const reason = (stderr || (
|
|
717
|
+
} catch (err) {
|
|
718
|
+
const stderr = err instanceof Error && "stderr" in err ? String(err.stderr).trim() : "";
|
|
719
|
+
const reason = (stderr || (err instanceof Error ? err.message : String(err))).split("\n")[0];
|
|
930
720
|
logErr(`git diff failed in ${root}: ${reason}`);
|
|
931
721
|
return null;
|
|
932
722
|
}
|
|
933
723
|
}
|
|
934
724
|
function assetOwnDir(a) {
|
|
935
|
-
const dir =
|
|
936
|
-
if (["skill", "agent", "contract"].includes(a.kind) ||
|
|
725
|
+
const dir = path.dirname(a.filePath);
|
|
726
|
+
if (["skill", "agent", "contract"].includes(a.kind) || path.basename(dir) === a.name) return dir;
|
|
937
727
|
return null;
|
|
938
728
|
}
|
|
939
729
|
function assetChanged(a, changedAbs) {
|
|
@@ -941,8 +731,8 @@ function assetChanged(a, changedAbs) {
|
|
|
941
731
|
const dir = assetOwnDir(a);
|
|
942
732
|
if (dir === null) return false;
|
|
943
733
|
for (const f of changedAbs) {
|
|
944
|
-
const rel =
|
|
945
|
-
if (rel.startsWith("..") ||
|
|
734
|
+
const rel = path.relative(dir, f);
|
|
735
|
+
if (rel.startsWith("..") || path.isAbsolute(rel)) continue;
|
|
946
736
|
if (!isNonAssetPath(toPosix(rel))) return true;
|
|
947
737
|
}
|
|
948
738
|
return false;
|
|
@@ -967,7 +757,7 @@ function runVersionsCheck(pathArg, opts) {
|
|
|
967
757
|
process.exit(1);
|
|
968
758
|
return;
|
|
969
759
|
}
|
|
970
|
-
const changedAbs = new Set(changed.map((f) =>
|
|
760
|
+
const changedAbs = new Set(changed.map((f) => path.resolve(root, f)));
|
|
971
761
|
assets = assets.filter((a) => assetChanged(a, changedAbs));
|
|
972
762
|
}
|
|
973
763
|
logInfo(`Checking versions in ${root}`);
|
|
@@ -1000,8 +790,8 @@ function makeValidateCommand() {
|
|
|
1000
790
|
"--strict-conformance",
|
|
1001
791
|
"Treat Agent Skills (agentskills.io) standard findings as errors"
|
|
1002
792
|
).action(async (targetPath, opts) => {
|
|
1003
|
-
const absPath =
|
|
1004
|
-
if (
|
|
793
|
+
const absPath = path.resolve(targetPath);
|
|
794
|
+
if (fs.existsSync(absPath) && !fs.statSync(absPath).isDirectory()) {
|
|
1005
795
|
logErr(`${absPath} is not a directory: nothing to validate. Pass the library directory.`);
|
|
1006
796
|
process.exit(1);
|
|
1007
797
|
return;
|
|
@@ -1029,7 +819,7 @@ function makeValidateCommand() {
|
|
|
1029
819
|
warnIgnoredDomainFiles(absPath);
|
|
1030
820
|
warnLegacyBundleFiles(absPath);
|
|
1031
821
|
logInfo(`Scanned ${total} asset manifest(s) and ${ws.total} skaile.yaml file(s)`);
|
|
1032
|
-
if (total === 0 && ws.total === 0 && totalErrors === 0 && !
|
|
822
|
+
if (total === 0 && ws.total === 0 && totalErrors === 0 && !fs.existsSync(path.join(absPath, SKAILE_MANIFEST_FILENAME))) {
|
|
1033
823
|
logErr(
|
|
1034
824
|
`Nothing to validate in ${absPath}: no asset manifest, skaile.yaml or ${SKAILE_MANIFEST_FILENAME} found.`
|
|
1035
825
|
);
|
|
@@ -1077,6 +867,6 @@ function makeValidateCommand() {
|
|
|
1077
867
|
return cmd;
|
|
1078
868
|
}
|
|
1079
869
|
|
|
1080
|
-
export {
|
|
1081
|
-
//# sourceMappingURL=chunk-
|
|
1082
|
-
//# sourceMappingURL=chunk-
|
|
870
|
+
export { makeValidateCommand, scanIdentities };
|
|
871
|
+
//# sourceMappingURL=chunk-IHFGPHCT.js.map
|
|
872
|
+
//# sourceMappingURL=chunk-IHFGPHCT.js.map
|