@skaile/workspaces 5.6.1 → 5.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 +62 -0
- package/README.md +4 -2
- package/dist/{asset-feeds-LU7NHOAP.js → asset-feeds-K36CR52Q.js} +17 -17
- package/dist/{asset-feeds-LU7NHOAP.js.map → asset-feeds-K36CR52Q.js.map} +1 -1
- package/dist/asset-manager/catalog-deployer.js +9 -9
- package/dist/asset-manager/index.js +14 -14
- package/dist/asset-manager/installer.js +10 -10
- package/dist/asset-manager/renderers.js +9 -9
- package/dist/asset-manager/src/index.d.ts +106 -16
- package/dist/asset-manager/src/index.d.ts.map +1 -1
- package/dist/asset-manager/src/installer.d.ts +4 -1
- package/dist/asset-manager/src/installer.d.ts.map +1 -1
- package/dist/bridge/drivers/claude-sdk.js +11 -11
- package/dist/bridge/drivers/codex.js +10 -10
- package/dist/bridge/drivers/continue.js +12 -12
- package/dist/bridge/drivers/echo.js +1 -1
- package/dist/bridge/drivers/gemini.js +5 -5
- package/dist/bridge/drivers/goose.js +12 -12
- package/dist/bridge/drivers/omp.js +2 -2
- package/dist/bridge/drivers/opencode.js +12 -12
- package/dist/bridge/drivers/qwen.js +5 -5
- package/dist/bridge/index.js +12 -12
- package/dist/{chunk-VX3INFBA.js → chunk-34C42MJX.js} +3 -3
- package/dist/{chunk-VX3INFBA.js.map → chunk-34C42MJX.js.map} +1 -1
- package/dist/{chunk-QD772CGQ.js → chunk-53MSCGR2.js} +5 -5
- package/dist/{chunk-QD772CGQ.js.map → chunk-53MSCGR2.js.map} +1 -1
- package/dist/chunk-6C654TFI.js +84 -0
- package/dist/chunk-6C654TFI.js.map +1 -0
- package/dist/{chunk-6NPINANG.js → chunk-6UFFKMVC.js} +5 -5
- package/dist/{chunk-6NPINANG.js.map → chunk-6UFFKMVC.js.map} +1 -1
- package/dist/{chunk-XOGG7VDZ.js → chunk-6VRJH4MR.js} +16 -24
- package/dist/chunk-6VRJH4MR.js.map +1 -0
- package/dist/{chunk-2KOKBTR4.js → chunk-74EEFB52.js} +15 -8
- package/dist/chunk-74EEFB52.js.map +1 -0
- package/dist/{chunk-OGLDAJFL.js → chunk-7FJQT3GT.js} +4 -4
- package/dist/{chunk-OGLDAJFL.js.map → chunk-7FJQT3GT.js.map} +1 -1
- package/dist/{chunk-VKSXST23.js → chunk-AVCUPPG6.js} +3 -3
- package/dist/{chunk-VKSXST23.js.map → chunk-AVCUPPG6.js.map} +1 -1
- package/dist/{chunk-5B5IZVEP.js → chunk-BTK7ECLH.js} +2 -2
- package/dist/{chunk-5B5IZVEP.js.map → chunk-BTK7ECLH.js.map} +1 -1
- package/dist/{chunk-GP6ZL7PE.js → chunk-BWZF2ZIF.js} +3 -3
- package/dist/{chunk-GP6ZL7PE.js.map → chunk-BWZF2ZIF.js.map} +1 -1
- package/dist/{chunk-PJS2YWGG.js → chunk-CWM3MYGX.js} +6 -6
- package/dist/{chunk-PJS2YWGG.js.map → chunk-CWM3MYGX.js.map} +1 -1
- package/dist/{chunk-PTO2YDDG.js → chunk-D5HOETOB.js} +410 -96
- package/dist/chunk-D5HOETOB.js.map +1 -0
- package/dist/{chunk-MX3UQXLU.js → chunk-DFFD4BFG.js} +96 -20
- package/dist/chunk-DFFD4BFG.js.map +1 -0
- package/dist/{chunk-KXTO7HON.js → chunk-EAZECHPM.js} +3 -3
- package/dist/{chunk-KXTO7HON.js.map → chunk-EAZECHPM.js.map} +1 -1
- package/dist/{chunk-ZBBM6O6P.js → chunk-EB4XN3KE.js} +3 -3
- package/dist/{chunk-ZBBM6O6P.js.map → chunk-EB4XN3KE.js.map} +1 -1
- package/dist/{chunk-WIHQWVWL.js → chunk-EU3Q5AQ4.js} +26 -18
- package/dist/chunk-EU3Q5AQ4.js.map +1 -0
- package/dist/{chunk-BTISGSK4.js → chunk-FAP63KV7.js} +4 -4
- package/dist/{chunk-BTISGSK4.js.map → chunk-FAP63KV7.js.map} +1 -1
- package/dist/{chunk-46OVMT76.js → chunk-G67BOI2J.js} +3 -3
- package/dist/{chunk-46OVMT76.js.map → chunk-G67BOI2J.js.map} +1 -1
- package/dist/{chunk-I4QBZLOR.js → chunk-GIC3G5YG.js} +6 -6
- package/dist/{chunk-I4QBZLOR.js.map → chunk-GIC3G5YG.js.map} +1 -1
- package/dist/{chunk-27HS2DHB.js → chunk-GWXFSLBK.js} +3 -3
- package/dist/{chunk-27HS2DHB.js.map → chunk-GWXFSLBK.js.map} +1 -1
- package/dist/{chunk-VSQFGU5D.js → chunk-ILFGVSTJ.js} +3 -3
- package/dist/{chunk-VSQFGU5D.js.map → chunk-ILFGVSTJ.js.map} +1 -1
- package/dist/{chunk-KYXOGHY6.js → chunk-IUUYRXT6.js} +4 -4
- package/dist/{chunk-KYXOGHY6.js.map → chunk-IUUYRXT6.js.map} +1 -1
- package/dist/{chunk-D2V42LUE.js → chunk-IZLQ4GDO.js} +63 -44
- package/dist/chunk-IZLQ4GDO.js.map +1 -0
- package/dist/{chunk-LLKKLKZJ.js → chunk-JLSCA5T5.js} +3 -3
- package/dist/{chunk-LLKKLKZJ.js.map → chunk-JLSCA5T5.js.map} +1 -1
- package/dist/{chunk-SX4UIDKT.js → chunk-KM7XWC4Y.js} +3 -3
- package/dist/{chunk-SX4UIDKT.js.map → chunk-KM7XWC4Y.js.map} +1 -1
- package/dist/{chunk-KUFNKVBM.js → chunk-KNWCFEWU.js} +3 -3
- package/dist/{chunk-KUFNKVBM.js.map → chunk-KNWCFEWU.js.map} +1 -1
- package/dist/{chunk-MFHKHXDE.js → chunk-L5VSIPQD.js} +5 -5
- package/dist/chunk-L5VSIPQD.js.map +1 -0
- package/dist/{chunk-AOAZCSDI.js → chunk-LBQ4BBX4.js} +3 -3
- package/dist/{chunk-AOAZCSDI.js.map → chunk-LBQ4BBX4.js.map} +1 -1
- package/dist/{chunk-2W4LBLIN.js → chunk-LCU5U5IW.js} +6 -6
- package/dist/{chunk-2W4LBLIN.js.map → chunk-LCU5U5IW.js.map} +1 -1
- package/dist/{chunk-65EYRFZJ.js → chunk-LXY4BUA3.js} +5 -5
- package/dist/{chunk-65EYRFZJ.js.map → chunk-LXY4BUA3.js.map} +1 -1
- package/dist/{chunk-7KLC4LZO.js → chunk-MKLBK7HI.js} +8 -8
- package/dist/{chunk-7KLC4LZO.js.map → chunk-MKLBK7HI.js.map} +1 -1
- package/dist/{chunk-4GNJELPH.js → chunk-N6FBTXQ5.js} +2 -2
- package/dist/{chunk-4GNJELPH.js.map → chunk-N6FBTXQ5.js.map} +1 -1
- package/dist/{chunk-2XFUXGV6.js → chunk-NWQB7UTY.js} +3 -3
- package/dist/{chunk-2XFUXGV6.js.map → chunk-NWQB7UTY.js.map} +1 -1
- package/dist/{chunk-SDFROXSA.js → chunk-O4Z7MAW7.js} +3 -3
- package/dist/{chunk-SDFROXSA.js.map → chunk-O4Z7MAW7.js.map} +1 -1
- package/dist/{chunk-AO7VJ6G6.js → chunk-O7VPNKYN.js} +8 -3
- package/dist/chunk-O7VPNKYN.js.map +1 -0
- package/dist/{chunk-TZCQ7ZWQ.js → chunk-OOLT6HGP.js} +10 -11
- package/dist/chunk-OOLT6HGP.js.map +1 -0
- package/dist/{chunk-2GRB5ITE.js → chunk-PSA6ONFB.js} +4 -4
- package/dist/{chunk-2GRB5ITE.js.map → chunk-PSA6ONFB.js.map} +1 -1
- package/dist/{chunk-45VFGT7A.js → chunk-RNPHRRLG.js} +3 -3
- package/dist/{chunk-45VFGT7A.js.map → chunk-RNPHRRLG.js.map} +1 -1
- package/dist/{chunk-7ZHLYXTI.js → chunk-RVIZQ5XD.js} +3 -3
- package/dist/{chunk-7ZHLYXTI.js.map → chunk-RVIZQ5XD.js.map} +1 -1
- package/dist/{chunk-BF33SCLY.js → chunk-SWO25LTO.js} +4 -4
- package/dist/{chunk-BF33SCLY.js.map → chunk-SWO25LTO.js.map} +1 -1
- package/dist/{chunk-UAP2XHRF.js → chunk-SZWRPEF7.js} +8 -8
- package/dist/{chunk-UAP2XHRF.js.map → chunk-SZWRPEF7.js.map} +1 -1
- package/dist/{chunk-VJENKWXF.js → chunk-THEJJBOU.js} +3 -3
- package/dist/{chunk-VJENKWXF.js.map → chunk-THEJJBOU.js.map} +1 -1
- package/dist/{chunk-PA7WLID3.js → chunk-TTPSDC2G.js} +33 -3
- package/dist/chunk-TTPSDC2G.js.map +1 -0
- package/dist/{chunk-VBBBZDI7.js → chunk-UX3K4RKE.js} +3 -3
- package/dist/{chunk-VBBBZDI7.js.map → chunk-UX3K4RKE.js.map} +1 -1
- package/dist/{chunk-RGXVQZOV.js → chunk-VOOI7B2L.js} +23 -21
- package/dist/chunk-VOOI7B2L.js.map +1 -0
- package/dist/{chunk-OLLAQLFJ.js → chunk-WIEC3ZE4.js} +5 -5
- package/dist/{chunk-OLLAQLFJ.js.map → chunk-WIEC3ZE4.js.map} +1 -1
- package/dist/cli/index.js +901 -589
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/src/commands/asset-cmd.d.ts.map +1 -1
- package/dist/cli/src/commands/catalog.d.ts +12 -3
- package/dist/cli/src/commands/catalog.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 +41 -4
- package/dist/cli/src/commands/library-index.d.ts.map +1 -1
- package/dist/cli/src/commands/library-publish.d.ts +9 -0
- package/dist/cli/src/commands/library-publish.d.ts.map +1 -1
- package/dist/cli/src/commands/manage.d.ts +8 -2
- package/dist/cli/src/commands/manage.d.ts.map +1 -1
- package/dist/cli/src/commands/outdated.d.ts +3 -2
- package/dist/cli/src/commands/outdated.d.ts.map +1 -1
- package/dist/cli/src/commands/project.d.ts +13 -4
- package/dist/cli/src/commands/project.d.ts.map +1 -1
- package/dist/cli/src/commands/source.d.ts +4 -3
- package/dist/cli/src/commands/source.d.ts.map +1 -1
- package/dist/cli/src/commands/update.d.ts +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/skill-checks.d.ts +21 -10
- package/dist/cli/src/skill-checks.d.ts.map +1 -1
- package/dist/connectors/config.js +6 -6
- package/dist/connectors/index.js +15 -15
- package/dist/{connectors-HWENZFKW.js → connectors-SSOTIDHT.js} +18 -18
- package/dist/{connectors-HWENZFKW.js.map → connectors-SSOTIDHT.js.map} +1 -1
- package/dist/core/index.js +8 -8
- package/dist/core/manifest.js +2 -2
- package/dist/core/models.js +1 -1
- package/dist/core/publish-manifest.js +2 -2
- package/dist/core/ref.js +1 -1
- package/dist/core/runtime-assets.js +6 -6
- package/dist/core/src/cache-paths.d.ts.map +1 -1
- package/dist/core/src/index.d.ts +1 -1
- package/dist/core/src/index.d.ts.map +1 -1
- package/dist/core/src/lock.d.ts +3 -3
- package/dist/core/src/lock.d.ts.map +1 -1
- package/dist/core/src/manifest.d.ts +6 -1
- 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/store.js +2 -2
- package/dist/core/workspace-config.js +5 -5
- package/dist/deploy/index.js +8 -8
- package/dist/discovery/index.js +4 -4
- package/dist/discovery/src/index.d.ts +1 -1
- package/dist/discovery/src/index.d.ts.map +1 -1
- package/dist/discovery/src/source-config.d.ts +12 -0
- package/dist/discovery/src/source-config.d.ts.map +1 -1
- package/dist/discovery/src/tree-entries.d.ts.map +1 -1
- package/dist/{ensure-sources-DSTSXJWK.js → ensure-sources-277VI7R3.js} +17 -17
- package/dist/{ensure-sources-DSTSXJWK.js.map → ensure-sources-277VI7R3.js.map} +1 -1
- package/dist/factory-assets/connectors/box.js +15 -15
- package/dist/factory-assets/connectors/deploy.js +15 -15
- package/dist/factory-assets/connectors/devserver.js +15 -15
- package/dist/factory-assets/connectors/flow/adapter.js +15 -15
- package/dist/factory-assets/connectors/flow/engine.js +9 -9
- package/dist/factory-assets/connectors/flow/run-flow.js +17 -17
- package/dist/factory-assets/connectors/flow.js +15 -15
- package/dist/factory-assets/connectors/git.js +15 -15
- package/dist/factory-assets/connectors/gmail.js +15 -15
- package/dist/factory-assets/connectors/googledrive.js +15 -15
- package/dist/factory-assets/connectors/local.js +15 -15
- package/dist/factory-assets/connectors/mattermost.js +15 -15
- package/dist/factory-assets/connectors/memory.js +15 -15
- package/dist/factory-assets/connectors/minio.js +15 -15
- package/dist/factory-assets/connectors/postgres.js +15 -15
- package/dist/factory-assets/connectors/s3.js +15 -15
- package/dist/factory-assets/connectors/sharepoint.js +15 -15
- package/dist/factory-assets/connectors/sqlite.js +15 -15
- package/dist/factory-assets/connectors/static-server.js +15 -15
- package/dist/factory-assets/connectors/tunnel.js +15 -15
- package/dist/factory-assets/connectors/webdav.js +15 -15
- package/dist/factory-assets/connectors/xstate-store.js +15 -15
- package/dist/factory-assets/connectors/xstate.js +15 -15
- package/dist/{flows-ENQY2DV7.js → flows-J2UEU2QM.js} +13 -13
- package/dist/{flows-ENQY2DV7.js.map → flows-J2UEU2QM.js.map} +1 -1
- package/dist/{helpers-R44RUTDY.js → helpers-KC5O7CML.js} +17 -17
- package/dist/{helpers-R44RUTDY.js.map → helpers-KC5O7CML.js.map} +1 -1
- package/dist/library/index.js +11 -11
- package/dist/library/install.js +3 -3
- package/dist/library/src/index.d.ts +3 -3
- package/dist/library/src/index.d.ts.map +1 -1
- package/dist/library/src/local/library-manager.d.ts +6 -0
- package/dist/library/src/local/library-manager.d.ts.map +1 -1
- package/dist/library/src/local/local-catalog-source.d.ts +5 -2
- package/dist/library/src/local/local-catalog-source.d.ts.map +1 -1
- package/dist/library/src/manifest-writer.d.ts +23 -1
- package/dist/library/src/manifest-writer.d.ts.map +1 -1
- package/dist/library/src/sync/git-driver.d.ts +12 -0
- package/dist/library/src/sync/git-driver.d.ts.map +1 -1
- package/dist/{library-publish-LFOJJVMK.js → library-publish-FGXF5TJO.js} +85 -41
- package/dist/library-publish-FGXF5TJO.js.map +1 -0
- package/dist/{open-library-4WUMQHES.js → open-library-P3D337NH.js} +20 -20
- package/dist/{open-library-4WUMQHES.js.map → open-library-P3D337NH.js.map} +1 -1
- package/dist/open-registry-Z3P2X2AB.js +32 -0
- package/dist/{open-registry-NVPCQPND.js.map → open-registry-Z3P2X2AB.js.map} +1 -1
- package/dist/paths-JKEKXM52.js +22 -0
- package/dist/{paths-YUCP7K6U.js.map → paths-JKEKXM52.js.map} +1 -1
- package/dist/{plugin-store-66QFBNEO.js → plugin-store-WI4MZJLP.js} +10 -10
- package/dist/{plugin-store-66QFBNEO.js.map → plugin-store-WI4MZJLP.js.map} +1 -1
- package/dist/project-WFUDVYNN.js +41 -0
- package/dist/{project-VMOHUXBD.js.map → project-WFUDVYNN.js.map} +1 -1
- package/dist/resolver/index.js +9 -9
- package/dist/runner/index.js +28 -28
- package/dist/runner/src/serve.d.ts.map +1 -1
- package/dist/sdk/asset-manager.js +14 -14
- package/dist/sdk/bridge.js +12 -12
- package/dist/sdk/core.js +8 -8
- package/dist/sdk/flow.js +9 -9
- package/dist/sdk/index.js +28 -28
- package/dist/sdk/resolver.js +9 -9
- package/dist/sdk/runner.js +28 -28
- package/dist/secrets/index.js +2 -2
- package/dist/{setup-PYY23HGZ.js → setup-RAMLTORM.js} +22 -22
- package/dist/{setup-PYY23HGZ.js.map → setup-RAMLTORM.js.map} +1 -1
- package/dist/skills-EOHZ2DZ4.js +26 -0
- package/dist/{skills-CS7NE5TT.js.map → skills-EOHZ2DZ4.js.map} +1 -1
- package/dist/{source-JCF6KSQN.js → source-FYVSFYEI.js} +21 -21
- package/dist/{source-JCF6KSQN.js.map → source-FYVSFYEI.js.map} +1 -1
- package/dist/{source-manifest-publish-O6P7G2M7.js → source-manifest-publish-4FPIPPLV.js} +23 -23
- package/dist/{source-manifest-publish-O6P7G2M7.js.map → source-manifest-publish-4FPIPPLV.js.map} +1 -1
- package/dist/tui/index.js +28 -28
- package/dist/workspace-plugin/adapters/mcp.js +22 -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-2KOKBTR4.js.map +0 -1
- package/dist/chunk-2NYXQYHN.js +0 -22
- package/dist/chunk-2NYXQYHN.js.map +0 -1
- package/dist/chunk-AO7VJ6G6.js.map +0 -1
- package/dist/chunk-D2V42LUE.js.map +0 -1
- package/dist/chunk-MFHKHXDE.js.map +0 -1
- package/dist/chunk-MX3UQXLU.js.map +0 -1
- package/dist/chunk-PA7WLID3.js.map +0 -1
- package/dist/chunk-PTO2YDDG.js.map +0 -1
- package/dist/chunk-RGXVQZOV.js.map +0 -1
- package/dist/chunk-TZCQ7ZWQ.js.map +0 -1
- package/dist/chunk-WIHQWVWL.js.map +0 -1
- package/dist/chunk-XOGG7VDZ.js.map +0 -1
- package/dist/library-publish-LFOJJVMK.js.map +0 -1
- package/dist/open-registry-NVPCQPND.js +0 -32
- package/dist/paths-YUCP7K6U.js +0 -22
- package/dist/project-VMOHUXBD.js +0 -41
- package/dist/skills-CS7NE5TT.js +0 -26
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,67 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 5.7.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- [#1027](https://github.com/skaile-ai/workspaces/pull/1027) [`13a54f1`](https://github.com/skaile-ai/workspaces/commit/13a54f15275a9410af554a3eadf05c58e0d1b932) Thanks [@mortegro](https://github.com/mortegro)! - Library authoring fixes from the 5.4.0 review:
|
|
8
|
+
|
|
9
|
+
- `skaile library index` and `skaile validate` now accept dependency refs in the documented `kind:@publisher/name#version` form. A malformed `dependencies` entry fails both commands with the same message; before, `index` dropped it and exited 0 while `validate` passed.
|
|
10
|
+
- `skaile library index` no longer writes a broken asset into the manifest. An asset whose file does not parse (e.g. an empty `SKILL.md`) is reported and skipped with exit 1, an asset with a version that is not semver is skipped with a warning, and `library publish` refuses both. Re-indexing removes the index row of an asset it now skips, so `add` and `search --local` stop finding the old version.
|
|
11
|
+
- `skaile validate` fails on a `metadata.version` that is not semver, warns when the manifest version differs from the asset file (the file is the source of truth; run `skaile library index`), and flags unedited scaffolds of every kind (prompt, agent, contract and flow, not only skill).
|
|
12
|
+
- `skaile validate versions [path]` and `skaile validate changelog [path]` take a path like plain `skaile validate` and default to the library you are in. `--changed-only` outside a git repo prints one line, `git diff failed in <root>: …`. `skaile validate versions` now fails on a non-semver version, like plain `validate`.
|
|
13
|
+
- `skaile library create` now scaffolds only skill, agent, prompt, flow, preset and contract. Other kinds (persona, ruleset, knowledge, mcp-server, connector) are refused with exit 1 instead of silently creating a skill. Hand-written files of those kinds still validate.
|
|
14
|
+
- `skaile library create --dir` is refused when it points outside the library.
|
|
15
|
+
- `skaile library create` rejects asset names that are not lowercase kebab-case and invalid `--publisher` values (also checked by `library set publisher=`), with a hint and exit 1, creating nothing.
|
|
16
|
+
- `skaile library create` and `skaile library index` no longer write `metadata.publisher` into asset files; the manifest (`assets[].publisher`, else the library's `publisher:`) is the only publisher source. `skaile validate` warns about a file whose `metadata.publisher` differs from it. Existing files keep the key until you remove it.
|
|
17
|
+
- `skaile library index` and adopting an existing directory with `skaile library init` now warn when the publisher falls back to the library name.
|
|
18
|
+
- `skaile library link` and `skaile library init --git` warn when the remote is not a GitHub URL, since `library publish` only supports GitHub. The exit code is unchanged.
|
|
19
|
+
- API: `createScaffold` / `AssetManager.create` return `{ ok: false }` for a kind without a scaffold instead of creating a skill, and `syncManifestWithDisk` returns `{ removed, skipped }` (see MIGRATION.md).
|
|
20
|
+
|
|
21
|
+
- [#1028](https://github.com/skaile-ai/workspaces/pull/1028) [`baa938a`](https://github.com/skaile-ai/workspaces/commit/baa938a4ea1e888afbb5af6441082cb8e765406a) Thanks [@mortegro](https://github.com/mortegro)! - Library git flow, `library set` guards and path fixes from the 5.4.0 review:
|
|
22
|
+
|
|
23
|
+
- `skaile library pull` and `skaile library sync` stay fast-forward-only. When local and remote both changed, they now fail with one line that names `skaile library git <lib> pull --rebase origin <branch>`, instead of a long git dump (`pull` used to exit 0 here). `library init --git` and `library link` now set the branch upstream.
|
|
24
|
+
- `skaile library commit` now refuses (exit 1, no commit) while a rebase, merge, cherry-pick or revert is unfinished or unmerged files exist.
|
|
25
|
+
- `skaile library set <lib> isDefault=true` now makes that library the only default instead of failing with a SQL error. `isDefault=false` on the current default is refused.
|
|
26
|
+
- `skaile library set` now rejects an unknown `ownership`, `contributor`/`reader` on a local library, and `backendConfig.url` on a local library, with the same wording `init` uses.
|
|
27
|
+
- Library names must be letters, digits, `_` or `-`, starting with a letter or digit (`init`, `rename`, `set name=`). Names like `a/b` or `../y` no longer create nested folders or crash. `set name=` now renames like `library rename`. `library remove --purge` also removes the empty parent folders it leaves behind under the libraries root.
|
|
28
|
+
- `skaile library remove` without a TTY and without `-y` now exits 1 with `library remove needs confirmation: pass -y` and keeps the library.
|
|
29
|
+
- Git-only commands on a local library (`push`, `pull`, `sync`, …) now tell you to run `skaile library link <name> <url>` first.
|
|
30
|
+
- A relative `SKAILE_HOME`, `SKAILE_INDEX_PATH`, `SKAILE_LIBRARIES_DIR` or `SKAILE_CACHE_DIR` is now made absolute at startup, so commands run from a subdirectory, and programs `skaile` starts, use the same libraries, index and cache.
|
|
31
|
+
- `skaile source remove` and its `--purge` help now name the real cache directory instead of a hard-coded `~/.skaile/cache/sources/`.
|
|
32
|
+
- `skaile update` with `catalog.url: local` now prints `Catalog refresh skipped (catalog.url: local)` instead of reporting a failed refresh.
|
|
33
|
+
- Piping output into a reader that closes early (`skaile search … | head -1`) now exits 0 without an EPIPE stack trace.
|
|
34
|
+
- `skaile --help` lists the real session subcommands (`session list|show|switch|delete`), and the README quick start no longer uses the non-existent `skaile run mvp`.
|
|
35
|
+
- Registering or renaming a library through `@skaile/workspaces/library` now rejects names that are not letters, digits, `_` or `-`, and `source add` turns repo names such as `my.repo` into valid library names.
|
|
36
|
+
|
|
37
|
+
- [#1026](https://github.com/skaile-ai/workspaces/pull/1026) [`014b422`](https://github.com/skaile-ai/workspaces/commit/014b422606c879517419ad467fbc8426671a729f) Thanks [@mortegro](https://github.com/mortegro)! - Resolver and lock fixes from the 5.4.0 review:
|
|
38
|
+
|
|
39
|
+
- `skaile add` and `skaile install` now resolve a ref from your registered library before asking any store, so a library asset adds even when the store is unreachable, and the success line names the library. A `#version` pin the library does not hold still falls through to the store. See MIGRATION.md.
|
|
40
|
+
- `skaile install` no longer asks the store about refs your library already provides, and an unreachable store is reported once per store URL instead of once per ref.
|
|
41
|
+
- The dependencies of a library asset (`requires` and `dependencies`) are now deployed and locked together with it. Dependency cycles are handled.
|
|
42
|
+
- `skaile add skill:@acme/x` now finds an asset created with `library create --publisher acme`, even when the library's own publisher is different.
|
|
43
|
+
- Short refs like `skill:name` now find library assets in `info`, `why` and `diff`. `diff` on an unknown ref says "not found" instead of crashing.
|
|
44
|
+
- `skaile doctor` and `skaile check` now report unmet requirements of library assets and locked assets whose library is gone, instead of saying everything is fine. `skaile check` fails for every declared dependency that does not resolve and names `skaile install`.
|
|
45
|
+
- Re-adding an asset with a new version pin (`skaile add x#0.2.0` after `skaile add x`) now replaces its line in `skaile.yaml` instead of adding a second one.
|
|
46
|
+
- Upgrading a source or store pinned asset now leaves one entry for it in `skaile.lock.yaml`, not one per version.
|
|
47
|
+
- The lock now records the library asset version that was actually deployed, so bumping a skill and running `skaile update` writes the new version and `skaile install --locked` passes.
|
|
48
|
+
- `skaile remove` now removes a declared asset from `skaile.yaml` and the lock even when its files are already gone, including every duplicate line an older `add` left behind. It exits 1 only when there was nothing to remove.
|
|
49
|
+
- `skaile outdated` now reads library assets from disk, so a version bump shows up once without `skaile library index` first. It lists a library asset whose content changed without a version bump as `content changed since lock`, and a source asset after `skaile source sync` moved the clone past the locked commit, with the number of commits behind. A lock that is ahead of your local clone is not reported as behind.
|
|
50
|
+
- Adding two sources with the same repo name from different orgs now gives each its own library row, and `source remove` only removes the row of the source you name.
|
|
51
|
+
- `skaile manage` now ticks an asset only in the library its lock entry names, and `skaile search` shows which library each result comes from.
|
|
52
|
+
- `asset show` and `asset install` now reject `@publisher/name@version` like `install` does, and `asset show` prints only the canonical `ref`.
|
|
53
|
+
|
|
54
|
+
- [#1029](https://github.com/skaile-ai/workspaces/pull/1029) [`8b5e19f`](https://github.com/skaile-ai/workspaces/commit/8b5e19fb14f89a475937ceddeb9613dedf871eae) Thanks [@mortegro](https://github.com/mortegro)! - Upgrade hints and docs from the 5.4.0 review:
|
|
55
|
+
|
|
56
|
+
- `--domain` on `asset import`, `asset migrate`, `library create` and `validate versions`, and `skaile library set <lib> structure=…`, now print the "domains were removed in 5.0" hint and exit 1 instead of a generic unknown-option error. `--domain` no longer appears in `--help`.
|
|
57
|
+
- When `skaile add` or `skaile install` cannot find a ref after a publisher change, the error now names the asset under its new publisher (`did you mean skill:@acme/…?`) and the lock entry still pinned to the old one, only when that lock entry came from the library that now holds the asset under the new publisher (an unrelated asset that just shares the name is no longer offered). The hint is printed by the CLI; programmatically, `InstallResult.missing` still holds bare refs and the text is in the new `InstallResult.missingHints` (ref → hint).
|
|
58
|
+
- The "Upgrading a 4.x library" steps and the 5.3.0 migration entry now say to run `skaile install` once and commit `skaile.lock.yaml` (`install --locked` fails until then), and to run `skaile library link <name> <url>` before `library commit`, `push` or `publish` on a library still registered as local.
|
|
59
|
+
- The 5.4.0 migration entry carries its real heading, and the release script refuses to publish a new version while `MIGRATION.md` still has an `## Unreleased` heading (`node scripts/release.mjs --check-migration` runs the check alone).
|
|
60
|
+
|
|
61
|
+
### Patch Changes
|
|
62
|
+
|
|
63
|
+
- [#1036](https://github.com/skaile-ai/workspaces/pull/1036) [`5ebf7dd`](https://github.com/skaile-ai/workspaces/commit/5ebf7dd75c15f253ee573a0f049cb523e90d853f) Thanks [@peteralbert](https://github.com/peteralbert)! - The runner now re-announces `protocol_info` on every reconnect once a session is initialized, not only on managed hosts. A platform that re-adopted a running container after its own restart had lost the announcement, so it refused every version-gated command for the rest of the container's life: answering a flow's open question failed with "connector_mutate requires Protocol 3.7 acknowledgement support".
|
|
64
|
+
|
|
3
65
|
## 5.6.1
|
|
4
66
|
|
|
5
67
|
### Patch Changes
|
package/README.md
CHANGED
|
@@ -80,7 +80,8 @@ cli (top-level CLI — orchestrates everything below)
|
|
|
80
80
|
# Installed from npm (npm i -D skaile-cli)
|
|
81
81
|
npx skaile --help # run the skaile CLI
|
|
82
82
|
npx skaile search skill # list available skills
|
|
83
|
-
npx skaile
|
|
83
|
+
npx skaile flow list # list available flows
|
|
84
|
+
npx skaile run "Summarise this repository" # send a single prompt (run also takes a flow name)
|
|
84
85
|
```
|
|
85
86
|
|
|
86
87
|
```bash
|
|
@@ -88,7 +89,8 @@ npx skaile run mvp # run a flow
|
|
|
88
89
|
bun run build
|
|
89
90
|
bun packages/workspaces/cli/src/index.ts --help # run the skaile CLI
|
|
90
91
|
bun packages/workspaces/cli/src/index.ts search skill # list available skills
|
|
91
|
-
bun packages/workspaces/cli/src/index.ts
|
|
92
|
+
bun packages/workspaces/cli/src/index.ts flow list # list available flows
|
|
93
|
+
bun packages/workspaces/cli/src/index.ts run "Summarise this repository" # send a single prompt
|
|
92
94
|
```
|
|
93
95
|
|
|
94
96
|
Flow authors and editor integrations can import the v2 contract independently:
|
|
@@ -1,27 +1,27 @@
|
|
|
1
|
-
import { getKnownKinds } from './chunk-
|
|
2
|
-
import './chunk-
|
|
1
|
+
import { getKnownKinds } from './chunk-WIEC3ZE4.js';
|
|
2
|
+
import './chunk-LBQ4BBX4.js';
|
|
3
3
|
import './chunk-QZLWJETK.js';
|
|
4
4
|
import './chunk-NFGRW3L7.js';
|
|
5
5
|
import './chunk-QCI6D7E4.js';
|
|
6
|
-
import './chunk-
|
|
7
|
-
import './chunk-
|
|
8
|
-
import './chunk-
|
|
6
|
+
import './chunk-DFFD4BFG.js';
|
|
7
|
+
import './chunk-6VRJH4MR.js';
|
|
8
|
+
import './chunk-FAP63KV7.js';
|
|
9
9
|
import './chunk-R7FOF242.js';
|
|
10
10
|
import './chunk-3TXEJN4W.js';
|
|
11
11
|
import './chunk-FRHE7FFB.js';
|
|
12
|
-
import './chunk-
|
|
12
|
+
import './chunk-OOLT6HGP.js';
|
|
13
13
|
import './chunk-4GY63JU6.js';
|
|
14
|
-
import { factoryAssetRoots } from './chunk-
|
|
15
|
-
import './chunk-
|
|
14
|
+
import { factoryAssetRoots } from './chunk-SWO25LTO.js';
|
|
15
|
+
import './chunk-G67BOI2J.js';
|
|
16
16
|
import './chunk-5BEFNLOR.js';
|
|
17
17
|
import './chunk-A2ULN3KX.js';
|
|
18
|
-
import { scanRepo } from './chunk-
|
|
19
|
-
import './chunk-
|
|
18
|
+
import { scanRepo } from './chunk-LCU5U5IW.js';
|
|
19
|
+
import './chunk-L5VSIPQD.js';
|
|
20
20
|
import './chunk-CPSIPIX7.js';
|
|
21
|
-
import './chunk-
|
|
21
|
+
import './chunk-RVIZQ5XD.js';
|
|
22
22
|
import './chunk-RVRB27AN.js';
|
|
23
|
-
import './chunk-
|
|
24
|
-
import './chunk-
|
|
23
|
+
import './chunk-TTPSDC2G.js';
|
|
24
|
+
import './chunk-O7VPNKYN.js';
|
|
25
25
|
import './chunk-ICSCSM5D.js';
|
|
26
26
|
import './chunk-JMKB7IB4.js';
|
|
27
27
|
import './chunk-MJHSLODD.js';
|
|
@@ -34,7 +34,7 @@ import * as path from 'path';
|
|
|
34
34
|
async function libraryAssets() {
|
|
35
35
|
const notes = [];
|
|
36
36
|
try {
|
|
37
|
-
const { openLibraryManager, authoringLibraries } = await import('./open-library-
|
|
37
|
+
const { openLibraryManager, authoringLibraries } = await import('./open-library-P3D337NH.js');
|
|
38
38
|
const { manager, close } = await openLibraryManager();
|
|
39
39
|
try {
|
|
40
40
|
const libs = authoringLibraries(await manager.listLibraries());
|
|
@@ -61,7 +61,7 @@ async function libraryAssets() {
|
|
|
61
61
|
async function storeAssets(projectDir) {
|
|
62
62
|
const notes = [];
|
|
63
63
|
try {
|
|
64
|
-
const { resolveCatalogSource } = await import('./open-library-
|
|
64
|
+
const { resolveCatalogSource } = await import('./open-library-P3D337NH.js');
|
|
65
65
|
const { source, close } = await resolveCatalogSource({ projectDir });
|
|
66
66
|
try {
|
|
67
67
|
const assets = await source.listAssets();
|
|
@@ -140,5 +140,5 @@ async function gatherAssetFeeds(am, projectDir) {
|
|
|
140
140
|
}
|
|
141
141
|
|
|
142
142
|
export { gatherAssetFeeds };
|
|
143
|
-
//# sourceMappingURL=asset-feeds-
|
|
144
|
-
//# sourceMappingURL=asset-feeds-
|
|
143
|
+
//# sourceMappingURL=asset-feeds-K36CR52Q.js.map
|
|
144
|
+
//# sourceMappingURL=asset-feeds-K36CR52Q.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../cli/src/asset-feeds.ts"],"names":[],"mappings":"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","file":"asset-feeds-LU7NHOAP.js","sourcesContent":["/**\n * asset-feeds.ts — gather installable assets from every feed the manage TUI\n * surfaces.\n *\n * Four feeds, normalized into `CatalogEntry`:\n * - **Project sources** — `skaile.yaml` `sources:` entries (scanned via\n * `AssetManager.search()`; the new `sources:` field is merged into the\n * legacy repositories map in `AssetManager.loadConfig`).\n * - **Local libraries** — user authoring places from `LocalIndex` (filesystem\n * scan of each library's `path`).\n * - **Factory assets** — the bundled first-party `factory-assets` tree\n * (`factoryAssetRoots()`), scanned from disk. Always present; no network.\n * - **Remote store** — the configured catalog source when `catalog.url` is\n * not `local`. Failures are non-fatal — they surface as notes.\n */\n\nimport { existsSync } from \"node:fs\";\nimport * as path from \"node:path\";\nimport {\n type AssetKind,\n type CatalogEntry,\n factoryAssetRoots,\n scanRepo,\n} from \"@skaile/workspaces/core\";\nimport { getKnownKinds } from \"./open-registry.ts\";\n\n/** One non-fatal note returned to the caller for surfacing in the UI. */\nexport interface FeedNote {\n feed: \"sources\" | \"libraries\" | \"store\" | \"factory\";\n message: string;\n}\n\n/**\n * Which feed an asset came from. This is the top-level grouping axis in the\n * manage TUI (\"where is this skill coming from?\") and is intentionally distinct\n * from `publisher` (asset-intrinsic identity): the same publisher can legitimately\n * appear under more than one origin (e.g. a github repo you added as a `source`\n * that is also listed in the remote `store`).\n */\nexport type AssetOrigin = \"source\" | \"library\" | \"factory\" | \"store\";\n\n/** A catalog entry tagged with the feed it was gathered from. */\nexport interface OriginEntry {\n origin: AssetOrigin;\n entry: CatalogEntry;\n /**\n * Second-level grouping label for the manage tree. Defaults (when unset) to the\n * entry's `publisher`; the source feed sets it to the source's short repo name\n * so the Sources band groups by source — \"which repo did this come from\" — not\n * by the asset-intrinsic publisher.\n */\n group?: string;\n}\n\nexport interface AssetFeedResult {\n entries: OriginEntry[];\n notes: FeedNote[];\n}\n\n/**\n * Pull assets from local libraries (the authoring places under\n * `~/.skaile/libraries/<name>/`, not the `~/.skaile/cache/sources/` cache). Each\n * library's `path` is scanned with `scanRepo` and grouped under the bare library\n * name (`group: <name>`) so the manage TUI shows a clean `<name>` band — no\n * `library:` prefix (mirrors the source feed). Plugin grouping (`entry.plugin`)\n * is stamped by `scanRepo`.\n */\nasync function libraryAssets(): Promise<{\n entries: OriginEntry[];\n notes: FeedNote[];\n}> {\n const notes: FeedNote[] = [];\n try {\n const { openLibraryManager, authoringLibraries } = await import(\"./open-library.ts\");\n const { manager, close } = await openLibraryManager();\n try {\n // Authoring libraries are the rows that are NOT source clones.\n const libs = authoringLibraries(await manager.listLibraries());\n const entries: OriginEntry[] = [];\n for (const lib of libs) {\n if (!existsSync(lib.path)) continue;\n const libEntries = [\n ...(await scanRepo(lib.path, lib.name, { knownKinds: getKnownKinds() })),\n ];\n for (const entry of libEntries) entries.push({ origin: \"library\", entry, group: lib.name });\n }\n return { entries, notes };\n } finally {\n close();\n }\n } catch (err) {\n notes.push({\n feed: \"libraries\",\n message: err instanceof Error ? err.message : String(err),\n });\n return { entries: [], notes };\n }\n}\n\n/**\n * Pull a (best-effort) snapshot of the connected remote store catalog.\n *\n * - Returns no entries when the resolved catalog is local-only or the host\n * is unreachable (the failure becomes a note, not an exception).\n * - Maps `CatalogAsset` → `CatalogEntry`, carrying `publisher`, `repo`, and\n * `category` straight through and using `source = \"store://<id>\"`; per-file\n * `source` paths are not available for remote assets so the canonical ref is\n * a stable placeholder.\n */\nasync function storeAssets(projectDir: string): Promise<{\n entries: CatalogEntry[];\n notes: FeedNote[];\n}> {\n const notes: FeedNote[] = [];\n try {\n const { resolveCatalogSource } = await import(\"./open-library.ts\");\n const { source, close } = await resolveCatalogSource({ projectDir });\n try {\n const assets = await source.listAssets();\n const entries: CatalogEntry[] = assets.map((a) => ({\n name: a.name,\n kind: (a.kind as AssetKind) ?? \"skill\",\n description: a.description ?? \"\",\n source: `store://${a.id}`,\n publisher: a.publisher,\n repo: a.repo,\n plugin: a.plugin,\n category: a.category,\n version: a.version,\n requires: [],\n dependencies: [],\n }));\n return { entries, notes };\n } finally {\n close();\n }\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n // Local-only catalog throws a recognizable message — silence it; absence\n // is the user's choice, not an error.\n if (!/local/i.test(msg)) {\n notes.push({ feed: \"store\", message: msg });\n }\n return { entries: [], notes };\n }\n}\n\n/** The slice of `AssetManager` the source feed needs (kept narrow for tests). */\ninterface AssetManagerLike {\n search: () => Promise<CatalogEntry[]>;\n searchRepoRoots: () => { repoName: string; root: string }[];\n}\n\n/**\n * Project-source feed: leans on `AssetManager.search()`, which merges\n * `skaile.yaml`'s `sources:` field into the repositories map. Plugin grouping\n * (`entry.plugin`) is stamped by the scanner, so entries pass through as-is.\n */\nasync function sourceAssets(am: AssetManagerLike): Promise<OriginEntry[]> {\n // The bundled factory tree is injected into the repositories map as an implicit\n // source, so `am.search()` returns it too. It has its own `factory` origin band,\n // so drop it here — otherwise the same first-party skills list twice under Sources.\n const factoryPrefixes = factoryAssetRoots().map((r) => (r.endsWith(path.sep) ? r : r + path.sep));\n const isFactoryPath = (p: string) =>\n factoryPrefixes.some((fp) => p === fp.slice(0, -1) || p.startsWith(fp));\n\n const all = (await am.search()).filter((e) => !isFactoryPath(e.source));\n const entries: OriginEntry[] = [];\n // Group each source's entries under the source node (its short repo name), not\n // the publisher: under Sources the navigational question is \"which repo did\n // this come from\". Each entry's `source` (absolute manifest path) lives under\n // exactly one declared root, so group by prefix. The cache slug is\n // URL-keyed `github.com/<org>/<repo>` — take the trailing segment.\n for (const { repoName, root } of am.searchRepoRoots()) {\n if (isFactoryPath(root)) continue;\n const prefix = root.endsWith(path.sep) ? root : root + path.sep;\n const owned = all.filter((e) => e.source === root || e.source.startsWith(prefix));\n if (owned.length === 0) continue;\n const sourceName = repoName.split(\"/\").pop() || repoName;\n for (const entry of owned) entries.push({ origin: \"source\", entry, group: sourceName });\n }\n return entries;\n}\n\n/**\n * Factory-asset feed: scan the bundled first-party `factory-assets` tree(s)\n * resolved by `factoryAssetRoots()` (the `SKAILE_FACTORY_ASSETS_DIR` override\n * layer ahead of the bundled tree). Local disk only, no network — the entries are\n * the built-in skills / connectors / bundles that ship with `@skaile/workspaces`.\n * `factoryAssetRoots()` already dedupes, so the env override pointing at the\n * bundled dir collapses to one root.\n */\nasync function factoryAssets(): Promise<{\n entries: CatalogEntry[];\n notes: FeedNote[];\n}> {\n const notes: FeedNote[] = [];\n try {\n const entries: CatalogEntry[] = [];\n for (const root of factoryAssetRoots()) {\n entries.push(...(await scanRepo(root, \"skaile-factory\", { knownKinds: getKnownKinds() })));\n }\n return { entries, notes };\n } catch (err) {\n notes.push({\n feed: \"factory\",\n message: err instanceof Error ? err.message : String(err),\n });\n return { entries: [], notes };\n }\n}\n\n/** Tag a flat entry list with a single origin. */\nfunction tag(origin: AssetOrigin, entries: CatalogEntry[]): OriginEntry[] {\n return entries.map((entry) => ({ origin, entry }));\n}\n\n/**\n * Run all feeds and return a single normalized result.\n *\n * Feeds run in parallel where possible — the store fetch is the slow one\n * (one HTTP call) and is fired alongside the local library walk. The factory\n * scan is local disk only, so it runs inline.\n */\nexport async function gatherAssetFeeds(\n am: AssetManagerLike,\n projectDir: string,\n): Promise<AssetFeedResult> {\n const [libs, store] = await Promise.all([libraryAssets(), storeAssets(projectDir)]);\n const factory = await factoryAssets();\n const src = await sourceAssets(am);\n return {\n entries: [\n ...src,\n ...libs.entries,\n ...tag(\"factory\", factory.entries),\n ...tag(\"store\", store.entries),\n ],\n notes: [...libs.notes, ...store.notes, ...factory.notes],\n };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../cli/src/asset-feeds.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmEA,eAAe,aAAA,GAGZ;AACD,EAAA,MAAM,QAAoB,EAAC;AAC3B,EAAA,IAAI;AACF,IAAA,MAAM,EAAE,kBAAA,EAAoB,kBAAA,EAAmB,GAAI,MAAM,OAAO,4BAAmB,CAAA;AACnF,IAAA,MAAM,EAAE,OAAA,EAAS,KAAA,EAAM,GAAI,MAAM,kBAAA,EAAmB;AACpD,IAAA,IAAI;AAEF,MAAA,MAAM,IAAA,GAAO,kBAAA,CAAmB,MAAM,OAAA,CAAQ,eAAe,CAAA;AAC7D,MAAA,MAAM,UAAyB,EAAC;AAChC,MAAA,KAAA,MAAW,OAAO,IAAA,EAAM;AACtB,QAAA,IAAI,CAAC,UAAA,CAAW,GAAA,CAAI,IAAI,CAAA,EAAG;AAC3B,QAAA,MAAM,UAAA,GAAa;AAAA,UACjB,GAAI,MAAM,QAAA,CAAS,GAAA,CAAI,IAAA,EAAM,GAAA,CAAI,IAAA,EAAM,EAAE,UAAA,EAAY,aAAA,EAAc,EAAG;AAAA,SACxE;AACA,QAAA,KAAA,MAAW,KAAA,IAAS,UAAA,EAAY,OAAA,CAAQ,IAAA,CAAK,EAAE,MAAA,EAAQ,SAAA,EAAW,KAAA,EAAO,KAAA,EAAO,GAAA,CAAI,IAAA,EAAM,CAAA;AAAA,MAC5F;AACA,MAAA,OAAO,EAAE,SAAS,KAAA,EAAM;AAAA,IAC1B,CAAA,SAAE;AACA,MAAA,KAAA,EAAM;AAAA,IACR;AAAA,EACF,SAAS,GAAA,EAAK;AACZ,IAAA,KAAA,CAAM,IAAA,CAAK;AAAA,MACT,IAAA,EAAM,WAAA;AAAA,MACN,SAAS,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,OAAO,GAAG;AAAA,KACzD,CAAA;AACD,IAAA,OAAO,EAAE,OAAA,EAAS,EAAC,EAAG,KAAA,EAAM;AAAA,EAC9B;AACF;AAYA,eAAe,YAAY,UAAA,EAGxB;AACD,EAAA,MAAM,QAAoB,EAAC;AAC3B,EAAA,IAAI;AACF,IAAA,MAAM,EAAE,oBAAA,EAAqB,GAAI,MAAM,OAAO,4BAAmB,CAAA;AACjE,IAAA,MAAM,EAAE,QAAQ,KAAA,EAAM,GAAI,MAAM,oBAAA,CAAqB,EAAE,YAAY,CAAA;AACnE,IAAA,IAAI;AACF,MAAA,MAAM,MAAA,GAAS,MAAM,MAAA,CAAO,UAAA,EAAW;AACvC,MAAA,MAAM,OAAA,GAA0B,MAAA,CAAO,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,QACjD,MAAM,CAAA,CAAE,IAAA;AAAA,QACR,IAAA,EAAO,EAAE,IAAA,IAAsB,OAAA;AAAA,QAC/B,WAAA,EAAa,EAAE,WAAA,IAAe,EAAA;AAAA,QAC9B,MAAA,EAAQ,CAAA,QAAA,EAAW,CAAA,CAAE,EAAE,CAAA,CAAA;AAAA,QACvB,WAAW,CAAA,CAAE,SAAA;AAAA,QACb,MAAM,CAAA,CAAE,IAAA;AAAA,QACR,QAAQ,CAAA,CAAE,MAAA;AAAA,QACV,UAAU,CAAA,CAAE,QAAA;AAAA,QACZ,SAAS,CAAA,CAAE,OAAA;AAAA,QACX,UAAU,EAAC;AAAA,QACX,cAAc;AAAC,OACjB,CAAE,CAAA;AACF,MAAA,OAAO,EAAE,SAAS,KAAA,EAAM;AAAA,IAC1B,CAAA,SAAE;AACA,MAAA,KAAA,EAAM;AAAA,IACR;AAAA,EACF,SAAS,GAAA,EAAK;AACZ,IAAA,MAAM,MAAM,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,OAAO,GAAG,CAAA;AAG3D,IAAA,IAAI,CAAC,QAAA,CAAS,IAAA,CAAK,GAAG,CAAA,EAAG;AACvB,MAAA,KAAA,CAAM,KAAK,EAAE,IAAA,EAAM,OAAA,EAAS,OAAA,EAAS,KAAK,CAAA;AAAA,IAC5C;AACA,IAAA,OAAO,EAAE,OAAA,EAAS,EAAC,EAAG,KAAA,EAAM;AAAA,EAC9B;AACF;AAaA,eAAe,aAAa,EAAA,EAA8C;AAIxE,EAAA,MAAM,eAAA,GAAkB,iBAAA,EAAkB,CAAE,GAAA,CAAI,CAAC,CAAA,KAAO,CAAA,CAAE,QAAA,CAAc,IAAA,CAAA,GAAG,CAAA,GAAI,CAAA,GAAI,CAAA,GAAS,IAAA,CAAA,GAAI,CAAA;AAChG,EAAA,MAAM,gBAAgB,CAAC,CAAA,KACrB,eAAA,CAAgB,IAAA,CAAK,CAAC,EAAA,KAAO,CAAA,KAAM,EAAA,CAAG,KAAA,CAAM,GAAG,EAAE,CAAA,IAAK,CAAA,CAAE,UAAA,CAAW,EAAE,CAAC,CAAA;AAExE,EAAA,MAAM,GAAA,GAAA,CAAO,MAAM,EAAA,CAAG,MAAA,EAAO,EAAG,MAAA,CAAO,CAAC,CAAA,KAAM,CAAC,aAAA,CAAc,CAAA,CAAE,MAAM,CAAC,CAAA;AACtE,EAAA,MAAM,UAAyB,EAAC;AAMhC,EAAA,KAAA,MAAW,EAAE,QAAA,EAAU,IAAA,EAAK,IAAK,EAAA,CAAG,iBAAgB,EAAG;AACrD,IAAA,IAAI,aAAA,CAAc,IAAI,CAAA,EAAG;AACzB,IAAA,MAAM,SAAS,IAAA,CAAK,QAAA,CAAc,IAAA,CAAA,GAAG,CAAA,GAAI,OAAO,IAAA,GAAY,IAAA,CAAA,GAAA;AAC5D,IAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,MAAA,KAAW,IAAA,IAAQ,CAAA,CAAE,MAAA,CAAO,UAAA,CAAW,MAAM,CAAC,CAAA;AAChF,IAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACxB,IAAA,MAAM,aAAa,QAAA,CAAS,KAAA,CAAM,GAAG,CAAA,CAAE,KAAI,IAAK,QAAA;AAChD,IAAA,KAAA,MAAW,KAAA,IAAS,KAAA,EAAO,OAAA,CAAQ,IAAA,CAAK,EAAE,QAAQ,QAAA,EAAU,KAAA,EAAO,KAAA,EAAO,UAAA,EAAY,CAAA;AAAA,EACxF;AACA,EAAA,OAAO,OAAA;AACT;AAUA,eAAe,aAAA,GAGZ;AACD,EAAA,MAAM,QAAoB,EAAC;AAC3B,EAAA,IAAI;AACF,IAAA,MAAM,UAA0B,EAAC;AACjC,IAAA,KAAA,MAAW,IAAA,IAAQ,mBAAkB,EAAG;AACtC,MAAA,OAAA,CAAQ,IAAA,CAAK,GAAI,MAAM,QAAA,CAAS,IAAA,EAAM,gBAAA,EAAkB,EAAE,UAAA,EAAY,aAAA,EAAc,EAAG,CAAE,CAAA;AAAA,IAC3F;AACA,IAAA,OAAO,EAAE,SAAS,KAAA,EAAM;AAAA,EAC1B,SAAS,GAAA,EAAK;AACZ,IAAA,KAAA,CAAM,IAAA,CAAK;AAAA,MACT,IAAA,EAAM,SAAA;AAAA,MACN,SAAS,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,OAAO,GAAG;AAAA,KACzD,CAAA;AACD,IAAA,OAAO,EAAE,OAAA,EAAS,EAAC,EAAG,KAAA,EAAM;AAAA,EAC9B;AACF;AAGA,SAAS,GAAA,CAAI,QAAqB,OAAA,EAAwC;AACxE,EAAA,OAAO,QAAQ,GAAA,CAAI,CAAC,WAAW,EAAE,MAAA,EAAQ,OAAM,CAAE,CAAA;AACnD;AASA,eAAsB,gBAAA,CACpB,IACA,UAAA,EAC0B;AAC1B,EAAA,MAAM,CAAC,IAAA,EAAM,KAAK,CAAA,GAAI,MAAM,OAAA,CAAQ,GAAA,CAAI,CAAC,aAAA,EAAc,EAAG,WAAA,CAAY,UAAU,CAAC,CAAC,CAAA;AAClF,EAAA,MAAM,OAAA,GAAU,MAAM,aAAA,EAAc;AACpC,EAAA,MAAM,GAAA,GAAM,MAAM,YAAA,CAAa,EAAE,CAAA;AACjC,EAAA,OAAO;AAAA,IACL,OAAA,EAAS;AAAA,MACP,GAAG,GAAA;AAAA,MACH,GAAG,IAAA,CAAK,OAAA;AAAA,MACR,GAAG,GAAA,CAAI,SAAA,EAAW,OAAA,CAAQ,OAAO,CAAA;AAAA,MACjC,GAAG,GAAA,CAAI,OAAA,EAAS,KAAA,CAAM,OAAO;AAAA,KAC/B;AAAA,IACA,KAAA,EAAO,CAAC,GAAG,IAAA,CAAK,KAAA,EAAO,GAAG,KAAA,CAAM,KAAA,EAAO,GAAG,OAAA,CAAQ,KAAK;AAAA,GACzD;AACF","file":"asset-feeds-K36CR52Q.js","sourcesContent":["/**\n * asset-feeds.ts — gather installable assets from every feed the manage TUI\n * surfaces.\n *\n * Four feeds, normalized into `CatalogEntry`:\n * - **Project sources** — `skaile.yaml` `sources:` entries (scanned via\n * `AssetManager.search()`; the new `sources:` field is merged into the\n * legacy repositories map in `AssetManager.loadConfig`).\n * - **Local libraries** — user authoring places from `LocalIndex` (filesystem\n * scan of each library's `path`).\n * - **Factory assets** — the bundled first-party `factory-assets` tree\n * (`factoryAssetRoots()`), scanned from disk. Always present; no network.\n * - **Remote store** — the configured catalog source when `catalog.url` is\n * not `local`. Failures are non-fatal — they surface as notes.\n */\n\nimport { existsSync } from \"node:fs\";\nimport * as path from \"node:path\";\nimport {\n type AssetKind,\n type CatalogEntry,\n factoryAssetRoots,\n scanRepo,\n} from \"@skaile/workspaces/core\";\nimport { getKnownKinds } from \"./open-registry.ts\";\n\n/** One non-fatal note returned to the caller for surfacing in the UI. */\nexport interface FeedNote {\n feed: \"sources\" | \"libraries\" | \"store\" | \"factory\";\n message: string;\n}\n\n/**\n * Which feed an asset came from. This is the top-level grouping axis in the\n * manage TUI (\"where is this skill coming from?\") and is intentionally distinct\n * from `publisher` (asset-intrinsic identity): the same publisher can legitimately\n * appear under more than one origin (e.g. a github repo you added as a `source`\n * that is also listed in the remote `store`).\n */\nexport type AssetOrigin = \"source\" | \"library\" | \"factory\" | \"store\";\n\n/** A catalog entry tagged with the feed it was gathered from. */\nexport interface OriginEntry {\n origin: AssetOrigin;\n entry: CatalogEntry;\n /**\n * Second-level grouping label for the manage tree. Defaults (when unset) to the\n * entry's `publisher`; the source feed sets it to the source's short repo name\n * so the Sources band groups by source — \"which repo did this come from\" — not\n * by the asset-intrinsic publisher.\n */\n group?: string;\n}\n\nexport interface AssetFeedResult {\n entries: OriginEntry[];\n notes: FeedNote[];\n}\n\n/**\n * Pull assets from local libraries (the authoring places under\n * `~/.skaile/libraries/<name>/`, not the `~/.skaile/cache/sources/` cache). Each\n * library's `path` is scanned with `scanRepo` and grouped under the bare library\n * name (`group: <name>`) so the manage TUI shows a clean `<name>` band — no\n * `library:` prefix (mirrors the source feed). Plugin grouping (`entry.plugin`)\n * is stamped by `scanRepo`.\n */\nasync function libraryAssets(): Promise<{\n entries: OriginEntry[];\n notes: FeedNote[];\n}> {\n const notes: FeedNote[] = [];\n try {\n const { openLibraryManager, authoringLibraries } = await import(\"./open-library.ts\");\n const { manager, close } = await openLibraryManager();\n try {\n // Authoring libraries are the rows that are NOT source clones.\n const libs = authoringLibraries(await manager.listLibraries());\n const entries: OriginEntry[] = [];\n for (const lib of libs) {\n if (!existsSync(lib.path)) continue;\n const libEntries = [\n ...(await scanRepo(lib.path, lib.name, { knownKinds: getKnownKinds() })),\n ];\n for (const entry of libEntries) entries.push({ origin: \"library\", entry, group: lib.name });\n }\n return { entries, notes };\n } finally {\n close();\n }\n } catch (err) {\n notes.push({\n feed: \"libraries\",\n message: err instanceof Error ? err.message : String(err),\n });\n return { entries: [], notes };\n }\n}\n\n/**\n * Pull a (best-effort) snapshot of the connected remote store catalog.\n *\n * - Returns no entries when the resolved catalog is local-only or the host\n * is unreachable (the failure becomes a note, not an exception).\n * - Maps `CatalogAsset` → `CatalogEntry`, carrying `publisher`, `repo`, and\n * `category` straight through and using `source = \"store://<id>\"`; per-file\n * `source` paths are not available for remote assets so the canonical ref is\n * a stable placeholder.\n */\nasync function storeAssets(projectDir: string): Promise<{\n entries: CatalogEntry[];\n notes: FeedNote[];\n}> {\n const notes: FeedNote[] = [];\n try {\n const { resolveCatalogSource } = await import(\"./open-library.ts\");\n const { source, close } = await resolveCatalogSource({ projectDir });\n try {\n const assets = await source.listAssets();\n const entries: CatalogEntry[] = assets.map((a) => ({\n name: a.name,\n kind: (a.kind as AssetKind) ?? \"skill\",\n description: a.description ?? \"\",\n source: `store://${a.id}`,\n publisher: a.publisher,\n repo: a.repo,\n plugin: a.plugin,\n category: a.category,\n version: a.version,\n requires: [],\n dependencies: [],\n }));\n return { entries, notes };\n } finally {\n close();\n }\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n // Local-only catalog throws a recognizable message — silence it; absence\n // is the user's choice, not an error.\n if (!/local/i.test(msg)) {\n notes.push({ feed: \"store\", message: msg });\n }\n return { entries: [], notes };\n }\n}\n\n/** The slice of `AssetManager` the source feed needs (kept narrow for tests). */\ninterface AssetManagerLike {\n search: () => Promise<CatalogEntry[]>;\n searchRepoRoots: () => { repoName: string; root: string }[];\n}\n\n/**\n * Project-source feed: leans on `AssetManager.search()`, which merges\n * `skaile.yaml`'s `sources:` field into the repositories map. Plugin grouping\n * (`entry.plugin`) is stamped by the scanner, so entries pass through as-is.\n */\nasync function sourceAssets(am: AssetManagerLike): Promise<OriginEntry[]> {\n // The bundled factory tree is injected into the repositories map as an implicit\n // source, so `am.search()` returns it too. It has its own `factory` origin band,\n // so drop it here — otherwise the same first-party skills list twice under Sources.\n const factoryPrefixes = factoryAssetRoots().map((r) => (r.endsWith(path.sep) ? r : r + path.sep));\n const isFactoryPath = (p: string) =>\n factoryPrefixes.some((fp) => p === fp.slice(0, -1) || p.startsWith(fp));\n\n const all = (await am.search()).filter((e) => !isFactoryPath(e.source));\n const entries: OriginEntry[] = [];\n // Group each source's entries under the source node (its short repo name), not\n // the publisher: under Sources the navigational question is \"which repo did\n // this come from\". Each entry's `source` (absolute manifest path) lives under\n // exactly one declared root, so group by prefix. The cache slug is\n // URL-keyed `github.com/<org>/<repo>` — take the trailing segment.\n for (const { repoName, root } of am.searchRepoRoots()) {\n if (isFactoryPath(root)) continue;\n const prefix = root.endsWith(path.sep) ? root : root + path.sep;\n const owned = all.filter((e) => e.source === root || e.source.startsWith(prefix));\n if (owned.length === 0) continue;\n const sourceName = repoName.split(\"/\").pop() || repoName;\n for (const entry of owned) entries.push({ origin: \"source\", entry, group: sourceName });\n }\n return entries;\n}\n\n/**\n * Factory-asset feed: scan the bundled first-party `factory-assets` tree(s)\n * resolved by `factoryAssetRoots()` (the `SKAILE_FACTORY_ASSETS_DIR` override\n * layer ahead of the bundled tree). Local disk only, no network — the entries are\n * the built-in skills / connectors / bundles that ship with `@skaile/workspaces`.\n * `factoryAssetRoots()` already dedupes, so the env override pointing at the\n * bundled dir collapses to one root.\n */\nasync function factoryAssets(): Promise<{\n entries: CatalogEntry[];\n notes: FeedNote[];\n}> {\n const notes: FeedNote[] = [];\n try {\n const entries: CatalogEntry[] = [];\n for (const root of factoryAssetRoots()) {\n entries.push(...(await scanRepo(root, \"skaile-factory\", { knownKinds: getKnownKinds() })));\n }\n return { entries, notes };\n } catch (err) {\n notes.push({\n feed: \"factory\",\n message: err instanceof Error ? err.message : String(err),\n });\n return { entries: [], notes };\n }\n}\n\n/** Tag a flat entry list with a single origin. */\nfunction tag(origin: AssetOrigin, entries: CatalogEntry[]): OriginEntry[] {\n return entries.map((entry) => ({ origin, entry }));\n}\n\n/**\n * Run all feeds and return a single normalized result.\n *\n * Feeds run in parallel where possible — the store fetch is the slow one\n * (one HTTP call) and is fired alongside the local library walk. The factory\n * scan is local disk only, so it runs inline.\n */\nexport async function gatherAssetFeeds(\n am: AssetManagerLike,\n projectDir: string,\n): Promise<AssetFeedResult> {\n const [libs, store] = await Promise.all([libraryAssets(), storeAssets(projectDir)]);\n const factory = await factoryAssets();\n const src = await sourceAssets(am);\n return {\n entries: [\n ...src,\n ...libs.entries,\n ...tag(\"factory\", factory.entries),\n ...tag(\"store\", store.entries),\n ],\n notes: [...libs.notes, ...store.notes, ...factory.notes],\n };\n}\n"]}
|
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
export { WORKSPACE_MOUNT_ENV_VAR, deployAll, deployCatalogEntry, findAiAssetsRoot, isUnderWorkspaceMount, resolveFlowSkills, undeployCatalogEntry, workspaceMountDirs } from '../chunk-
|
|
2
|
-
import '../chunk-
|
|
1
|
+
export { WORKSPACE_MOUNT_ENV_VAR, deployAll, deployCatalogEntry, findAiAssetsRoot, isUnderWorkspaceMount, resolveFlowSkills, undeployCatalogEntry, workspaceMountDirs } from '../chunk-O4Z7MAW7.js';
|
|
2
|
+
import '../chunk-OOLT6HGP.js';
|
|
3
3
|
import '../chunk-4GY63JU6.js';
|
|
4
|
-
import '../chunk-
|
|
5
|
-
import '../chunk-
|
|
4
|
+
import '../chunk-SWO25LTO.js';
|
|
5
|
+
import '../chunk-G67BOI2J.js';
|
|
6
6
|
import '../chunk-5BEFNLOR.js';
|
|
7
7
|
import '../chunk-A2ULN3KX.js';
|
|
8
|
-
import '../chunk-
|
|
9
|
-
import '../chunk-
|
|
8
|
+
import '../chunk-LCU5U5IW.js';
|
|
9
|
+
import '../chunk-L5VSIPQD.js';
|
|
10
10
|
import '../chunk-CPSIPIX7.js';
|
|
11
|
-
import '../chunk-
|
|
11
|
+
import '../chunk-RVIZQ5XD.js';
|
|
12
12
|
import '../chunk-RVRB27AN.js';
|
|
13
|
-
import '../chunk-
|
|
14
|
-
import '../chunk-
|
|
13
|
+
import '../chunk-TTPSDC2G.js';
|
|
14
|
+
import '../chunk-O7VPNKYN.js';
|
|
15
15
|
import '../chunk-ICSCSM5D.js';
|
|
16
16
|
import '../chunk-JMKB7IB4.js';
|
|
17
17
|
import '../chunk-MJHSLODD.js';
|
|
@@ -1,28 +1,28 @@
|
|
|
1
|
-
export { AssetManager, FACTORY_SOURCE_URL, MissingManifestError, installAgentInstances, normalizeRepoUrl, parseCanonicalLockKey, parseRefTolerant, renderMcpServerConfig, softDepName } from '../chunk-
|
|
2
|
-
import '../chunk-
|
|
3
|
-
import '../chunk-
|
|
4
|
-
import '../chunk-
|
|
1
|
+
export { AssetManager, FACTORY_SOURCE_URL, MissingManifestError, installAgentInstances, normalizeRepoUrl, parseCanonicalLockKey, parseRefTolerant, renderMcpServerConfig, softDepName } from '../chunk-D5HOETOB.js';
|
|
2
|
+
import '../chunk-DFFD4BFG.js';
|
|
3
|
+
import '../chunk-6VRJH4MR.js';
|
|
4
|
+
import '../chunk-FAP63KV7.js';
|
|
5
5
|
import '../chunk-R7FOF242.js';
|
|
6
6
|
import '../chunk-3TXEJN4W.js';
|
|
7
|
-
export { createScaffold, deployAll, installAgent, installTargetOf, removeAsset } from '../chunk-
|
|
7
|
+
export { SCAFFOLD_KINDS, createScaffold, deployAll, installAgent, installTargetOf, removeAsset } from '../chunk-74EEFB52.js';
|
|
8
8
|
export { BUILT_IN_FRAGMENTS, loadPromptExtensions, resolveFragments } from '../chunk-CGYEHQOX.js';
|
|
9
9
|
export { appendHistory, clearHistory, getRecentHistory, loadHistory } from '../chunk-KTBKW2FI.js';
|
|
10
10
|
import '../chunk-UQ6LFBPZ.js';
|
|
11
|
-
export { AGENT_RENDERERS, claudeCodeRenderer, codexRenderer, driverTargetSupportsAgents, ompRenderer, renderAgentToFramework } from '../chunk-
|
|
11
|
+
export { AGENT_RENDERERS, claudeCodeRenderer, codexRenderer, driverTargetSupportsAgents, ompRenderer, renderAgentToFramework } from '../chunk-AVCUPPG6.js';
|
|
12
12
|
import '../chunk-FRHE7FFB.js';
|
|
13
|
-
import '../chunk-
|
|
13
|
+
import '../chunk-OOLT6HGP.js';
|
|
14
14
|
import '../chunk-4GY63JU6.js';
|
|
15
|
-
import '../chunk-
|
|
16
|
-
import '../chunk-
|
|
15
|
+
import '../chunk-SWO25LTO.js';
|
|
16
|
+
import '../chunk-G67BOI2J.js';
|
|
17
17
|
import '../chunk-5BEFNLOR.js';
|
|
18
18
|
import '../chunk-A2ULN3KX.js';
|
|
19
|
-
import '../chunk-
|
|
20
|
-
import '../chunk-
|
|
19
|
+
import '../chunk-LCU5U5IW.js';
|
|
20
|
+
import '../chunk-L5VSIPQD.js';
|
|
21
21
|
import '../chunk-CPSIPIX7.js';
|
|
22
|
-
import '../chunk-
|
|
22
|
+
import '../chunk-RVIZQ5XD.js';
|
|
23
23
|
import '../chunk-RVRB27AN.js';
|
|
24
|
-
import '../chunk-
|
|
25
|
-
import '../chunk-
|
|
24
|
+
import '../chunk-TTPSDC2G.js';
|
|
25
|
+
import '../chunk-O7VPNKYN.js';
|
|
26
26
|
import '../chunk-ICSCSM5D.js';
|
|
27
27
|
import '../chunk-JMKB7IB4.js';
|
|
28
28
|
import '../chunk-MJHSLODD.js';
|
|
@@ -1,20 +1,20 @@
|
|
|
1
|
-
export { canonicalEntryRef, createScaffold, deployAll, deployAsset, installTargetOf, removeAsset } from '../chunk-
|
|
1
|
+
export { SCAFFOLD_KINDS, canonicalEntryRef, createScaffold, deployAll, deployAsset, installTargetOf, removeAsset } from '../chunk-74EEFB52.js';
|
|
2
2
|
import '../chunk-CGYEHQOX.js';
|
|
3
|
-
import '../chunk-
|
|
3
|
+
import '../chunk-AVCUPPG6.js';
|
|
4
4
|
import '../chunk-FRHE7FFB.js';
|
|
5
|
-
import '../chunk-
|
|
5
|
+
import '../chunk-OOLT6HGP.js';
|
|
6
6
|
import '../chunk-4GY63JU6.js';
|
|
7
|
-
import '../chunk-
|
|
8
|
-
import '../chunk-
|
|
7
|
+
import '../chunk-SWO25LTO.js';
|
|
8
|
+
import '../chunk-G67BOI2J.js';
|
|
9
9
|
import '../chunk-5BEFNLOR.js';
|
|
10
10
|
import '../chunk-A2ULN3KX.js';
|
|
11
|
-
import '../chunk-
|
|
12
|
-
import '../chunk-
|
|
11
|
+
import '../chunk-LCU5U5IW.js';
|
|
12
|
+
import '../chunk-L5VSIPQD.js';
|
|
13
13
|
import '../chunk-CPSIPIX7.js';
|
|
14
|
-
import '../chunk-
|
|
14
|
+
import '../chunk-RVIZQ5XD.js';
|
|
15
15
|
import '../chunk-RVRB27AN.js';
|
|
16
|
-
import '../chunk-
|
|
17
|
-
import '../chunk-
|
|
16
|
+
import '../chunk-TTPSDC2G.js';
|
|
17
|
+
import '../chunk-O7VPNKYN.js';
|
|
18
18
|
import '../chunk-ICSCSM5D.js';
|
|
19
19
|
import '../chunk-JMKB7IB4.js';
|
|
20
20
|
import '../chunk-MJHSLODD.js';
|
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
export { AGENT_RENDERERS, CODEX_IDENTITY_DIR, claudeCodeRenderer, codexRenderer, driverTargetSupportsAgents, ompRenderer, renderAgentToFramework } from '../chunk-
|
|
1
|
+
export { AGENT_RENDERERS, CODEX_IDENTITY_DIR, claudeCodeRenderer, codexRenderer, driverTargetSupportsAgents, ompRenderer, renderAgentToFramework } from '../chunk-AVCUPPG6.js';
|
|
2
2
|
import '../chunk-FRHE7FFB.js';
|
|
3
|
-
import '../chunk-
|
|
3
|
+
import '../chunk-OOLT6HGP.js';
|
|
4
4
|
import '../chunk-4GY63JU6.js';
|
|
5
|
-
import '../chunk-
|
|
6
|
-
import '../chunk-
|
|
5
|
+
import '../chunk-SWO25LTO.js';
|
|
6
|
+
import '../chunk-G67BOI2J.js';
|
|
7
7
|
import '../chunk-5BEFNLOR.js';
|
|
8
8
|
import '../chunk-A2ULN3KX.js';
|
|
9
|
-
import '../chunk-
|
|
10
|
-
import '../chunk-
|
|
9
|
+
import '../chunk-LCU5U5IW.js';
|
|
10
|
+
import '../chunk-L5VSIPQD.js';
|
|
11
11
|
import '../chunk-CPSIPIX7.js';
|
|
12
|
-
import '../chunk-
|
|
12
|
+
import '../chunk-RVIZQ5XD.js';
|
|
13
13
|
import '../chunk-RVRB27AN.js';
|
|
14
|
-
import '../chunk-
|
|
15
|
-
import '../chunk-
|
|
14
|
+
import '../chunk-TTPSDC2G.js';
|
|
15
|
+
import '../chunk-O7VPNKYN.js';
|
|
16
16
|
import '../chunk-ICSCSM5D.js';
|
|
17
17
|
import '../chunk-JMKB7IB4.js';
|
|
18
18
|
import '../chunk-MJHSLODD.js';
|
|
@@ -136,7 +136,7 @@ export type { HistoryEntry } from "./history.js";
|
|
|
136
136
|
export { appendHistory, clearHistory, getRecentHistory, loadHistory, } from "./history.js";
|
|
137
137
|
export type { DeployOptions, ScaffoldOptions } from "./installer.js";
|
|
138
138
|
export type { DeployableEntry } from "./installer.js";
|
|
139
|
-
export { createScaffold, deployAll, installTargetOf, removeAsset } from "./installer.js";
|
|
139
|
+
export { createScaffold, deployAll, installTargetOf, removeAsset, SCAFFOLD_KINDS, } from "./installer.js";
|
|
140
140
|
export type { RenderMcpConfigOptions, RenderMcpConfigResult, SkippedMcpServer, } from "./mcp-config.js";
|
|
141
141
|
export { renderMcpServerConfig } from "./mcp-config.js";
|
|
142
142
|
export type { Log } from "./renderers.js";
|
|
@@ -187,8 +187,22 @@ export interface InstallResult {
|
|
|
187
187
|
deployed: string[];
|
|
188
188
|
/** Asset refs (`kind:name`) removed because they are no longer in the resolved set. */
|
|
189
189
|
removed: string[];
|
|
190
|
-
/**
|
|
190
|
+
/**
|
|
191
|
+
* Asset refs that could not be resolved in any configured repository. On the
|
|
192
|
+
* non-locked path every entry is a bare ref; the reason a miss happened lives in
|
|
193
|
+
* {@link InstallResult.missingHints}. The `--locked` path still appends its prose
|
|
194
|
+
* (`ref (not found in library "x")`) to the entry.
|
|
195
|
+
*/
|
|
191
196
|
missing: string[];
|
|
197
|
+
/**
|
|
198
|
+
* Why a ref in {@link InstallResult.missing} may have missed, keyed by that ref:
|
|
199
|
+
* the asset's publisher changed (`library set publisher=`), so the lock still holds
|
|
200
|
+
* it under the old one and/or a library now holds it under another. Parenthesised
|
|
201
|
+
* parts such as `did you mean skill:@acme/x?` and
|
|
202
|
+
* `locked as skill:@plain/x; run skaile install to re-resolve`. Only refs with a
|
|
203
|
+
* hint appear; absent when none has.
|
|
204
|
+
*/
|
|
205
|
+
missingHints?: Record<string, string>;
|
|
192
206
|
/** Whether `skaile.lock.yaml` was written or updated. */
|
|
193
207
|
lockWritten: boolean;
|
|
194
208
|
/**
|
|
@@ -247,6 +261,12 @@ export interface OutdatedEntry {
|
|
|
247
261
|
* has no `latestVersion`.
|
|
248
262
|
*/
|
|
249
263
|
problem?: string;
|
|
264
|
+
/**
|
|
265
|
+
* Library-origin asset only: the library's files on disk differ from the content
|
|
266
|
+
* hash recorded in the lock at the same version (edited in place, no version bump).
|
|
267
|
+
* `skaile update` re-deploys them.
|
|
268
|
+
*/
|
|
269
|
+
contentChanged?: boolean;
|
|
250
270
|
}
|
|
251
271
|
/**
|
|
252
272
|
* Outcome of `AssetManager.diff()` — distinguishes an unknown ref from a real
|
|
@@ -296,6 +316,11 @@ export interface DepIssue {
|
|
|
296
316
|
depName: string;
|
|
297
317
|
/** `true` when the missing dependency exists in a configured repository but has not been installed. */
|
|
298
318
|
inRepos: boolean;
|
|
319
|
+
/**
|
|
320
|
+
* `true` when the asset itself is lock-managed but no source or library holds it
|
|
321
|
+
* any more, so its `requires` cannot be checked. `depKind`/`depName` repeat the asset.
|
|
322
|
+
*/
|
|
323
|
+
unresolved?: boolean;
|
|
299
324
|
}
|
|
300
325
|
/**
|
|
301
326
|
* A single deployed asset shown in the workspace overview.
|
|
@@ -456,6 +481,8 @@ export declare class AssetManager {
|
|
|
456
481
|
private readonly indexPathOverride?;
|
|
457
482
|
/** Sink for cross-library collision warnings; else `console.warn`. */
|
|
458
483
|
private readonly onLibraryCollision?;
|
|
484
|
+
/** Store URLs whose failed version lookup was already reported (one warning per URL). */
|
|
485
|
+
private readonly warnedStoreVersionLookups;
|
|
459
486
|
constructor(opts: AssetManagerOptions);
|
|
460
487
|
/** Registered kind names — the `knownKinds` argument of the manifest scanners. */
|
|
461
488
|
private get knownKinds();
|
|
@@ -536,10 +563,26 @@ export declare class AssetManager {
|
|
|
536
563
|
* content. The returned `libraryOf` map names the library each entry came from
|
|
537
564
|
* so callers can lock it as library-origin (see {@link libraryLockEntries}).
|
|
538
565
|
*
|
|
566
|
+
* @param opts.quiet - Skip the cross-library collision warning (a lookup that only
|
|
567
|
+
* builds an error hint must not warn).
|
|
539
568
|
* @returns the matched deploy entries, the set of `missing` refs covered, and
|
|
540
569
|
* each entry's originating library name.
|
|
541
570
|
*/
|
|
542
571
|
private resolveLibraryEntries;
|
|
572
|
+
/**
|
|
573
|
+
* Explain misses caused by a publisher change, for every missed publisher-qualified
|
|
574
|
+
* ref at once (one library scan, one lock read). Per ref:
|
|
575
|
+
* - `did you mean <ref>?` when a registered library holds the same kind + name
|
|
576
|
+
* under another publisher;
|
|
577
|
+
* - `locked as <lockRef>; run skaile install to re-resolve` when the lock holds the
|
|
578
|
+
* same kind + name under another publisher, records the library it came from, and
|
|
579
|
+
* that library now holds the asset under yet another publisher than the locked
|
|
580
|
+
* one. An unrelated asset that merely shares kind + name does not qualify.
|
|
581
|
+
*
|
|
582
|
+
* @param refs - Missed refs; a trailing `(reason)` after the first space is ignored.
|
|
583
|
+
* @returns hint text per ref, only for refs that have one. Never warns.
|
|
584
|
+
*/
|
|
585
|
+
private publisherChangeHints;
|
|
543
586
|
/** Collision messages already printed by this instance (one warning per ref + library set). */
|
|
544
587
|
private readonly warnedLibraryCollisions;
|
|
545
588
|
/**
|
|
@@ -555,10 +598,12 @@ export declare class AssetManager {
|
|
|
555
598
|
private loadLibraryIndex;
|
|
556
599
|
/**
|
|
557
600
|
* Library-origin lock entries for the assets {@link resolveLibraryEntries}
|
|
558
|
-
* matched. The locked version
|
|
559
|
-
*
|
|
560
|
-
*
|
|
561
|
-
*
|
|
601
|
+
* matched. The locked version is the one actually deployed: the on-disk
|
|
602
|
+
* entry's version, falling back to the library index only when the disk entry
|
|
603
|
+
* carries none — the index lags until the next `skaile library index`, so
|
|
604
|
+
* preferring it would lock a stale version after an in-place bump. The hash is
|
|
605
|
+
* computed from the files on disk, so it matches what `install --locked`
|
|
606
|
+
* re-hashes.
|
|
562
607
|
*/
|
|
563
608
|
private libraryLockEntries;
|
|
564
609
|
/**
|
|
@@ -584,6 +629,26 @@ export declare class AssetManager {
|
|
|
584
629
|
* (offline, store down) keeps the first pass's result rather than regressing.
|
|
585
630
|
*/
|
|
586
631
|
private resolveWithStores;
|
|
632
|
+
/**
|
|
633
|
+
* Resolve `deps` library-first, then walk the dependencies of every library
|
|
634
|
+
* asset it picks.
|
|
635
|
+
*
|
|
636
|
+
* A publisher-qualified ref that no project source declares is looked up in the
|
|
637
|
+
* registered **libraries** before any store is asked, so a locally authored
|
|
638
|
+
* asset resolves (and deploys) with the store unreachable and without a
|
|
639
|
+
* version-discovery round trip. Only refs the libraries did not satisfy go to
|
|
640
|
+
* {@link resolveWithStores}; its misses get one more library try (a ref a source
|
|
641
|
+
* knows only under another version). A `#version` pin still selects through
|
|
642
|
+
* `matchPin` inside {@link resolveLibraryEntries}.
|
|
643
|
+
*
|
|
644
|
+
* Library assets declare `dependencies` / `requires`. Those are fed back through
|
|
645
|
+
* the same resolution with a `seen` identity set (mirrors `resolveAll`), so deps
|
|
646
|
+
* deploy, get lock entries, and a dependency cycle terminates.
|
|
647
|
+
*
|
|
648
|
+
* @returns source/store candidates, still-unresolved refs, applied overrides,
|
|
649
|
+
* expanded presets, and the library leg (entries + originating library per entry).
|
|
650
|
+
*/
|
|
651
|
+
private resolveLibraryFirst;
|
|
587
652
|
/** The catalog fetcher to use: an injected one, else built from `stores`. */
|
|
588
653
|
private storeFetcherFor;
|
|
589
654
|
/**
|
|
@@ -816,7 +881,11 @@ export declare class AssetManager {
|
|
|
816
881
|
*/
|
|
817
882
|
private presentRefs;
|
|
818
883
|
/**
|
|
819
|
-
* Remove a deployed asset and unregister it from `skaile.yaml
|
|
884
|
+
* Remove a deployed asset and unregister it from `skaile.yaml` and the lock.
|
|
885
|
+
*
|
|
886
|
+
* A declared asset is always unregistered, even when nothing is deployed any
|
|
887
|
+
* more (e.g. its library file was deleted): the declaration and lock entry
|
|
888
|
+
* would otherwise be stuck behind a "not deployed" refusal.
|
|
820
889
|
*
|
|
821
890
|
* Deliberately does NOT re-render the driver target's MCP config: the render
|
|
822
891
|
* step is async (the declaration resolver is), and making this synchronous
|
|
@@ -825,15 +894,18 @@ export declare class AssetManager {
|
|
|
825
894
|
* {@link renderMcpServerConfig}.
|
|
826
895
|
*
|
|
827
896
|
* @param ref - Asset ref in `kind:name` form (e.g. `skill:my-skill`).
|
|
828
|
-
* @returns `true` if
|
|
829
|
-
*
|
|
830
|
-
*
|
|
897
|
+
* @returns `true` if anything changed (files undeployed, declaration or lock
|
|
898
|
+
* entry removed), `false` if the asset was neither deployed nor declared.
|
|
899
|
+
* A `preset:` ref has no deployed files: only its declaration goes — its
|
|
900
|
+
* expanded items leave with the next `skaile install`.
|
|
831
901
|
*/
|
|
832
902
|
remove(ref: string): boolean;
|
|
833
903
|
/**
|
|
834
904
|
* Drop every lock entry matching a removed asset's identity, version-agnostic so
|
|
835
905
|
* a content-sha pseudo-version key is pruned too. Symmetric with {@link add}'s
|
|
836
906
|
* lock-merge — stops a stale entry reporting a phantom "removed" on next install.
|
|
907
|
+
*
|
|
908
|
+
* @returns `true` when at least one lock entry was dropped.
|
|
837
909
|
*/
|
|
838
910
|
private pruneLockEntry;
|
|
839
911
|
/**
|
|
@@ -971,10 +1043,13 @@ export declare class AssetManager {
|
|
|
971
1043
|
*
|
|
972
1044
|
* Two kinds of staleness are reported:
|
|
973
1045
|
* - **Source assets** — only remote repositories (not local paths) are checked;
|
|
974
|
-
* `behind`
|
|
975
|
-
*
|
|
976
|
-
*
|
|
977
|
-
*
|
|
1046
|
+
* `behind` counts the commits the clone is missing from the remote plus the
|
|
1047
|
+
* commits the clone moved past the locked commit (`source sync` after `add`).
|
|
1048
|
+
* - **Library assets** — a library-origin lock entry whose library files on disk
|
|
1049
|
+
* (not the index, which lags until `skaile library index`) hold a newer version
|
|
1050
|
+
* than the locked one (`latestVersion`, `library` set), or the same version with
|
|
1051
|
+
* different bytes (`contentChanged`). `behind` is 0. An unregistered library is a
|
|
1052
|
+
* `problem` row.
|
|
978
1053
|
*
|
|
979
1054
|
* @returns Array of {@link OutdatedEntry} objects.
|
|
980
1055
|
*/
|
|
@@ -1046,7 +1121,13 @@ export declare class AssetManager {
|
|
|
1046
1121
|
*
|
|
1047
1122
|
* For each deployed asset, checks that all entries in its `requires` list are
|
|
1048
1123
|
* also deployed. Returns a list of issues with a flag indicating whether the
|
|
1049
|
-
* missing dependency can be resolved from a configured repository.
|
|
1124
|
+
* missing dependency can be resolved from a configured repository or library.
|
|
1125
|
+
*
|
|
1126
|
+
* A deployed asset is looked up by its publisher-qualified identity taken from
|
|
1127
|
+
* the lock key (`kind:@pub/name`), so library and source assets resolve alike.
|
|
1128
|
+
* A lock-managed asset that no source or library can be found for is reported
|
|
1129
|
+
* as an issue with `unresolved: true` (its `requires` cannot be verified);
|
|
1130
|
+
* unmanaged deployed files carry no declared origin and are skipped.
|
|
1050
1131
|
*
|
|
1051
1132
|
* @returns Array of {@link DepIssue} objects. An empty array means the workspace is healthy.
|
|
1052
1133
|
*/
|
|
@@ -1059,7 +1140,7 @@ export declare class AssetManager {
|
|
|
1059
1140
|
* @param destDir - Parent directory to create the asset in.
|
|
1060
1141
|
* @param opts - Optional scaffold content (`description`).
|
|
1061
1142
|
* @returns `{ ok: true, path }` on success, `{ ok: false, path: errorMessage }` if the
|
|
1062
|
-
* directory already exists.
|
|
1143
|
+
* directory already exists or `kind` has no scaffold template.
|
|
1063
1144
|
*/
|
|
1064
1145
|
create(name: string, kind: string, destDir: string, opts?: ScaffoldOptions): {
|
|
1065
1146
|
ok: boolean;
|
|
@@ -1117,9 +1198,18 @@ export declare class AssetManager {
|
|
|
1117
1198
|
* parent dir) when absent so `skaile add --global` works on a fresh machine.
|
|
1118
1199
|
*/
|
|
1119
1200
|
private addDependencyToConfig;
|
|
1201
|
+
/**
|
|
1202
|
+
* Whether the declared `dep` names the same asset (kind, publisher, name) as
|
|
1203
|
+
* `ref`, ignoring the version pin. A publisher must agree on both sides —
|
|
1204
|
+
* unlike {@link removeDependencyFromConfig}, a bare `kind:name` never replaces a
|
|
1205
|
+
* publisher-qualified line. Unparseable entries only match on string equality.
|
|
1206
|
+
*/
|
|
1207
|
+
private sameDeclaredAsset;
|
|
1120
1208
|
/**
|
|
1121
1209
|
* Remove a dependency ref from the manifest `dependencies:`. Targets the same
|
|
1122
1210
|
* file as {@link addDependencyToConfig} (`~/.skaile/skaile.yaml` in global mode).
|
|
1211
|
+
*
|
|
1212
|
+
* @returns `true` when a declaration was removed.
|
|
1123
1213
|
*/
|
|
1124
1214
|
private removeDependencyFromConfig;
|
|
1125
1215
|
private resolveRepoDir;
|