@skaile/workspaces 5.3.0 → 5.4.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.
Files changed (190) hide show
  1. package/CHANGELOG.md +36 -0
  2. package/README.md +8 -1
  3. package/dist/{asset-feeds-VIZXYDAO.js → asset-feeds-3MVRNS5U.js} +7 -7
  4. package/dist/{asset-feeds-VIZXYDAO.js.map → asset-feeds-3MVRNS5U.js.map} +1 -1
  5. package/dist/asset-manager/catalog-deployer.js +3 -3
  6. package/dist/asset-manager/index.js +6 -6
  7. package/dist/asset-manager/installer.js +4 -4
  8. package/dist/asset-manager/src/index.d.ts +10 -0
  9. package/dist/asset-manager/src/index.d.ts.map +1 -1
  10. package/dist/asset-manager/src/installer.d.ts +7 -0
  11. package/dist/asset-manager/src/installer.d.ts.map +1 -1
  12. package/dist/bridge/drivers/claude-sdk.js +5 -5
  13. package/dist/bridge/drivers/codex.js +5 -5
  14. package/dist/bridge/drivers/continue.js +6 -6
  15. package/dist/bridge/drivers/echo.js +1 -1
  16. package/dist/bridge/drivers/gemini.js +5 -5
  17. package/dist/bridge/drivers/goose.js +6 -6
  18. package/dist/bridge/drivers/omp.js +2 -2
  19. package/dist/bridge/drivers/opencode.js +6 -6
  20. package/dist/bridge/drivers/qwen.js +5 -5
  21. package/dist/bridge/index.js +6 -6
  22. package/dist/{chunk-OMD4TAJX.js → chunk-2XXAVTTO.js} +3 -3
  23. package/dist/{chunk-OMD4TAJX.js.map → chunk-2XXAVTTO.js.map} +1 -1
  24. package/dist/{chunk-K2JVODQD.js → chunk-37DN45RR.js} +5 -5
  25. package/dist/{chunk-K2JVODQD.js.map → chunk-37DN45RR.js.map} +1 -1
  26. package/dist/{chunk-ZCSFGGLG.js → chunk-5NH3U6N5.js} +4 -4
  27. package/dist/{chunk-ZCSFGGLG.js.map → chunk-5NH3U6N5.js.map} +1 -1
  28. package/dist/{chunk-KBAE7PU7.js → chunk-6IGFSUTE.js} +7 -5
  29. package/dist/chunk-6IGFSUTE.js.map +1 -0
  30. package/dist/{chunk-ZDMGMWK6.js → chunk-7KITVWXK.js} +20 -19
  31. package/dist/chunk-7KITVWXK.js.map +1 -0
  32. package/dist/{chunk-YXNYBUQY.js → chunk-A67BHJCH.js} +4 -4
  33. package/dist/{chunk-YXNYBUQY.js.map → chunk-A67BHJCH.js.map} +1 -1
  34. package/dist/{chunk-FTYM4VRZ.js → chunk-AE42DHSH.js} +2 -2
  35. package/dist/{chunk-FTYM4VRZ.js.map → chunk-AE42DHSH.js.map} +1 -1
  36. package/dist/{chunk-WGNFDLHT.js → chunk-BATL2CWI.js} +63 -19
  37. package/dist/chunk-BATL2CWI.js.map +1 -0
  38. package/dist/{chunk-QHIMMBJO.js → chunk-BHUHGLNS.js} +4 -4
  39. package/dist/{chunk-QHIMMBJO.js.map → chunk-BHUHGLNS.js.map} +1 -1
  40. package/dist/{chunk-FZGL7Z52.js → chunk-DTV7HL5R.js} +2 -2
  41. package/dist/{chunk-FZGL7Z52.js.map → chunk-DTV7HL5R.js.map} +1 -1
  42. package/dist/{chunk-7L4WFH3Y.js → chunk-IDUGP4V7.js} +3 -3
  43. package/dist/{chunk-7L4WFH3Y.js.map → chunk-IDUGP4V7.js.map} +1 -1
  44. package/dist/{chunk-4SSKKFDF.js → chunk-JCATNLY3.js} +3 -3
  45. package/dist/{chunk-4SSKKFDF.js.map → chunk-JCATNLY3.js.map} +1 -1
  46. package/dist/{chunk-WGN7Z36G.js → chunk-JEA32KB6.js} +3 -3
  47. package/dist/{chunk-WGN7Z36G.js.map → chunk-JEA32KB6.js.map} +1 -1
  48. package/dist/{chunk-TR7KFBIO.js → chunk-JF26V3BC.js} +5 -5
  49. package/dist/{chunk-TR7KFBIO.js.map → chunk-JF26V3BC.js.map} +1 -1
  50. package/dist/{chunk-ERCSHLTF.js → chunk-LUBS5DXY.js} +3 -3
  51. package/dist/{chunk-ERCSHLTF.js.map → chunk-LUBS5DXY.js.map} +1 -1
  52. package/dist/chunk-NESV47MF.js +20 -0
  53. package/dist/chunk-NESV47MF.js.map +1 -0
  54. package/dist/{chunk-DECPI7DN.js → chunk-OANSNVCP.js} +5 -5
  55. package/dist/{chunk-DECPI7DN.js.map → chunk-OANSNVCP.js.map} +1 -1
  56. package/dist/{chunk-OOKFZW6H.js → chunk-ONWTPXVU.js} +7 -7
  57. package/dist/{chunk-OOKFZW6H.js.map → chunk-ONWTPXVU.js.map} +1 -1
  58. package/dist/{chunk-YTJZQ4HY.js → chunk-OXE5A6H6.js} +3 -3
  59. package/dist/{chunk-YTJZQ4HY.js.map → chunk-OXE5A6H6.js.map} +1 -1
  60. package/dist/{chunk-6GBQND2F.js → chunk-QEXEHXX5.js} +4 -4
  61. package/dist/{chunk-6GBQND2F.js.map → chunk-QEXEHXX5.js.map} +1 -1
  62. package/dist/{chunk-VLEWVR44.js → chunk-QK756IRJ.js} +10 -10
  63. package/dist/{chunk-VLEWVR44.js.map → chunk-QK756IRJ.js.map} +1 -1
  64. package/dist/{chunk-CZ35I4RK.js → chunk-RD6GE4HU.js} +3 -3
  65. package/dist/{chunk-CZ35I4RK.js.map → chunk-RD6GE4HU.js.map} +1 -1
  66. package/dist/{chunk-4257Q2LH.js → chunk-SQBPE66C.js} +6 -6
  67. package/dist/{chunk-4257Q2LH.js.map → chunk-SQBPE66C.js.map} +1 -1
  68. package/dist/{chunk-AWGQVAC5.js → chunk-U6ORGQHZ.js} +3 -3
  69. package/dist/{chunk-AWGQVAC5.js.map → chunk-U6ORGQHZ.js.map} +1 -1
  70. package/dist/{chunk-LM5XEFNS.js → chunk-UAAAERXI.js} +3 -3
  71. package/dist/{chunk-LM5XEFNS.js.map → chunk-UAAAERXI.js.map} +1 -1
  72. package/dist/chunk-UKDFOOEG.js +22 -0
  73. package/dist/chunk-UKDFOOEG.js.map +1 -0
  74. package/dist/{chunk-A223FDDC.js → chunk-UNRZCQD4.js} +6 -6
  75. package/dist/{chunk-A223FDDC.js.map → chunk-UNRZCQD4.js.map} +1 -1
  76. package/dist/{chunk-D63AJVBW.js → chunk-VETH6MDG.js} +13 -13
  77. package/dist/{chunk-D63AJVBW.js.map → chunk-VETH6MDG.js.map} +1 -1
  78. package/dist/{chunk-BUZ3K2PT.js → chunk-XMQAV6T3.js} +2 -2
  79. package/dist/{chunk-BUZ3K2PT.js.map → chunk-XMQAV6T3.js.map} +1 -1
  80. package/dist/{chunk-3ZVSINEV.js → chunk-Y5OCUOXF.js} +10 -7
  81. package/dist/chunk-Y5OCUOXF.js.map +1 -0
  82. package/dist/{chunk-FXN4PLRO.js → chunk-ZIYYMR6Y.js} +3 -3
  83. package/dist/{chunk-FXN4PLRO.js.map → chunk-ZIYYMR6Y.js.map} +1 -1
  84. package/dist/{chunk-TVFSA5IQ.js → chunk-ZUZ5LLZ2.js} +4 -4
  85. package/dist/{chunk-TVFSA5IQ.js.map → chunk-ZUZ5LLZ2.js.map} +1 -1
  86. package/dist/cli/index.js +307 -166
  87. package/dist/cli/index.js.map +1 -1
  88. package/dist/cli/src/commands/asset-cmd.d.ts.map +1 -1
  89. package/dist/cli/src/commands/catalog.d.ts +33 -3
  90. package/dist/cli/src/commands/catalog.d.ts.map +1 -1
  91. package/dist/cli/src/commands/library-cmd.d.ts.map +1 -1
  92. package/dist/cli/src/commands/library-index.d.ts +14 -0
  93. package/dist/cli/src/commands/library-index.d.ts.map +1 -1
  94. package/dist/cli/src/commands/library-publish.d.ts.map +1 -1
  95. package/dist/cli/src/commands/npx.d.ts.map +1 -1
  96. package/dist/cli/src/commands/project.d.ts.map +1 -1
  97. package/dist/cli/src/commands/update.d.ts.map +1 -1
  98. package/dist/cli/src/commands/validate.d.ts.map +1 -1
  99. package/dist/cli/src/setup.d.ts.map +1 -1
  100. package/dist/cli/src/skill-checks.d.ts +21 -0
  101. package/dist/cli/src/skill-checks.d.ts.map +1 -0
  102. package/dist/cli/src/spinner.d.ts +24 -0
  103. package/dist/cli/src/spinner.d.ts.map +1 -0
  104. package/dist/connectors/config.js +2 -2
  105. package/dist/connectors/index.js +9 -9
  106. package/dist/{connectors-Z2FUGAJU.js → connectors-OB3OAZTK.js} +12 -12
  107. package/dist/{connectors-Z2FUGAJU.js.map → connectors-OB3OAZTK.js.map} +1 -1
  108. package/dist/core/index.js +3 -3
  109. package/dist/core/runtime-assets.js +2 -2
  110. package/dist/core/src/repo-manager.d.ts.map +1 -1
  111. package/dist/core/workspace-config.js +1 -1
  112. package/dist/deploy/index.js +3 -3
  113. package/dist/{ensure-sources-3IH5XHAP.js → ensure-sources-Z3KKLEM6.js} +9 -9
  114. package/dist/{ensure-sources-3IH5XHAP.js.map → ensure-sources-Z3KKLEM6.js.map} +1 -1
  115. package/dist/factory-assets/README.md +2 -2
  116. package/dist/factory-assets/connectors/box.js +9 -9
  117. package/dist/factory-assets/connectors/deploy.js +9 -9
  118. package/dist/factory-assets/connectors/devserver.js +9 -9
  119. package/dist/factory-assets/connectors/flow/adapter.js +9 -9
  120. package/dist/factory-assets/connectors/flow/engine.js +4 -4
  121. package/dist/factory-assets/connectors/flow/run-flow.js +10 -10
  122. package/dist/factory-assets/connectors/flow.js +9 -9
  123. package/dist/factory-assets/connectors/git.js +9 -9
  124. package/dist/factory-assets/connectors/gmail.js +9 -9
  125. package/dist/factory-assets/connectors/googledrive.js +9 -9
  126. package/dist/factory-assets/connectors/local.js +9 -9
  127. package/dist/factory-assets/connectors/mattermost.js +9 -9
  128. package/dist/factory-assets/connectors/memory.js +9 -9
  129. package/dist/factory-assets/connectors/minio.js +9 -9
  130. package/dist/factory-assets/connectors/postgres.js +9 -9
  131. package/dist/factory-assets/connectors/s3.js +9 -9
  132. package/dist/factory-assets/connectors/sharepoint.js +9 -9
  133. package/dist/factory-assets/connectors/sqlite.js +9 -9
  134. package/dist/factory-assets/connectors/static-server.js +9 -9
  135. package/dist/factory-assets/connectors/tunnel.js +9 -9
  136. package/dist/factory-assets/connectors/webdav.js +9 -9
  137. package/dist/factory-assets/connectors/xstate-store.js +9 -9
  138. package/dist/factory-assets/connectors/xstate.js +9 -9
  139. package/dist/factory-assets/skills/authoring-skaile-assets/SKILL.md +17 -15
  140. package/dist/factory-assets/skills/authoring-skaile-manifests/SKILL.md +20 -17
  141. package/dist/factory-assets/skills/skaile-author-asset/SKILL.md +82 -71
  142. package/dist/factory-assets/skills/skaile-manage-workspace/SKILL.md +17 -11
  143. package/dist/factory-assets/skills/skailify/SKILL.md +8 -4
  144. package/dist/{flows-64OAOYLP.js → flows-DTADYIXH.js} +6 -6
  145. package/dist/{flows-64OAOYLP.js.map → flows-DTADYIXH.js.map} +1 -1
  146. package/dist/{helpers-HV5Y57CY.js → helpers-F2RFRT5D.js} +9 -9
  147. package/dist/{helpers-HV5Y57CY.js.map → helpers-F2RFRT5D.js.map} +1 -1
  148. package/dist/library/index.js +4 -4
  149. package/dist/library/src/local/install-library-asset.d.ts +3 -2
  150. package/dist/library/src/local/install-library-asset.d.ts.map +1 -1
  151. package/dist/{library-publish-TVS3WQ4C.js → library-publish-62RFU74A.js} +36 -18
  152. package/dist/library-publish-62RFU74A.js.map +1 -0
  153. package/dist/{open-library-AT6RYQ5M.js → open-library-NVG3CZUO.js} +12 -12
  154. package/dist/{open-library-AT6RYQ5M.js.map → open-library-NVG3CZUO.js.map} +1 -1
  155. package/dist/{open-registry-F2Z4OLXJ.js → open-registry-IYH6W6CN.js} +8 -8
  156. package/dist/{open-registry-F2Z4OLXJ.js.map → open-registry-IYH6W6CN.js.map} +1 -1
  157. package/dist/{paths-P7ZXMDCX.js → paths-STQO4FYF.js} +6 -6
  158. package/dist/{paths-P7ZXMDCX.js.map → paths-STQO4FYF.js.map} +1 -1
  159. package/dist/{plugin-store-27KGLW4S.js → plugin-store-2DTEIJTG.js} +5 -5
  160. package/dist/{plugin-store-27KGLW4S.js.map → plugin-store-2DTEIJTG.js.map} +1 -1
  161. package/dist/{project-J2EROMBW.js → project-44LM6SRV.js} +11 -10
  162. package/dist/{project-J2EROMBW.js.map → project-44LM6SRV.js.map} +1 -1
  163. package/dist/resolver/index.js +3 -3
  164. package/dist/runner/index.js +15 -15
  165. package/dist/sdk/asset-manager.js +6 -6
  166. package/dist/sdk/bridge.js +6 -6
  167. package/dist/sdk/core.js +3 -3
  168. package/dist/sdk/flow.js +4 -4
  169. package/dist/sdk/index.js +15 -15
  170. package/dist/sdk/resolver.js +3 -3
  171. package/dist/sdk/runner.js +15 -15
  172. package/dist/{setup-IFGA4NQA.js → setup-4BV5ZWOZ.js} +16 -15
  173. package/dist/setup-4BV5ZWOZ.js.map +1 -0
  174. package/dist/{skills-3T55L4YT.js → skills-M7OU3WMP.js} +5 -5
  175. package/dist/{skills-3T55L4YT.js.map → skills-M7OU3WMP.js.map} +1 -1
  176. package/dist/{source-HEAE43IL.js → source-HTT6CXUP.js} +13 -13
  177. package/dist/{source-HEAE43IL.js.map → source-HTT6CXUP.js.map} +1 -1
  178. package/dist/{source-manifest-publish-SCAHAYSQ.js → source-manifest-publish-CPXUX3CL.js} +15 -15
  179. package/dist/{source-manifest-publish-SCAHAYSQ.js.map → source-manifest-publish-CPXUX3CL.js.map} +1 -1
  180. package/dist/tui/index.js +15 -15
  181. package/dist/workspace-plugin/adapters/mcp.js +12 -12
  182. package/dist/workspace-plugin/adapters/omp.js +14 -14
  183. package/dist/workspace-plugin/index.js +1 -1
  184. package/package.json +1 -1
  185. package/dist/chunk-3ZVSINEV.js.map +0 -1
  186. package/dist/chunk-KBAE7PU7.js.map +0 -1
  187. package/dist/chunk-WGNFDLHT.js.map +0 -1
  188. package/dist/chunk-ZDMGMWK6.js.map +0 -1
  189. package/dist/library-publish-TVS3WQ4C.js.map +0 -1
  190. package/dist/setup-IFGA4NQA.js.map +0 -1
@@ -1,8 +1,8 @@
1
1
  ---
2
2
  name: "skaile-author-asset"
3
- description: "Use when an asset author needs to build a skill in a local library and publish it. Covers the source/library/store model, laying out a repo (any depth, optional plugin grouping), the SKILL.md format, and the .skaile-source.yaml manifest (v1 glob vs v2 author-shipped inventory) and publish flow via the skaile CLI."
3
+ description: "Use when an asset author needs to build a skill in a local library and publish it. Covers the source/library/store model, laying out a repo (any depth, optional plugin grouping), the SKILL.md format, and the skaile.manifest.yaml publication manifest and publish flow (library publish/register/yank) via the skaile CLI."
4
4
  metadata:
5
- version: "0.1.1"
5
+ version: "0.1.2"
6
6
  tags:
7
7
  - "authoring"
8
8
  - "skill"
@@ -19,7 +19,7 @@ metadata:
19
19
  # Author an AI-Asset
20
20
 
21
21
  How to author a **skill** (or any asset kind) in a local library, lay out the
22
- repository, write the `.skaile-source.yaml` **manifest**, and
22
+ repository, keep its `skaile.manifest.yaml` **manifest** current, and
23
23
  **publish** it through the store.
24
24
 
25
25
  For the canonical skill folder layout and frontmatter spec, read the companion
@@ -78,7 +78,7 @@ names carry no meaning, so lay the repo out however suits you:
78
78
 
79
79
  ```
80
80
  my-assets/ # repo root (a "source")
81
- ├── .skaile-source.yaml # manifest (see §4)
81
+ ├── skaile.manifest.yaml # publication manifest (see §4)
82
82
  ├── .claude-plugin/
83
83
  │ └── plugin.json # optional grouping (see below)
84
84
  ├── skills/
@@ -92,13 +92,13 @@ my-assets/ # repo root (a "source")
92
92
 
93
93
  **Publisher** is never read from a path segment. Resolution order:
94
94
 
95
- 1. A per-asset `publisher` in a v2 inventory (§4).
96
- 2. `publisher_overrides` — a per-path entry in the manifest.
97
- 3. `publisher_default` — a literal such as `'@acme'`.
98
- 4. Otherwise the repo name.
95
+ 1. A per-asset `publisher` on the `assets[]` entry (§4).
96
+ 2. The manifest's top-level `publisher`.
97
+ 3. Otherwise your store identity or the library name (`library create` warns when it falls back).
99
98
 
100
- With `publisher_default: '@acme'`, every asset is published as `@acme/<name>`;
101
- use `publisher_overrides` for the exceptions.
99
+ With `publisher: acme` at the top of `skaile.manifest.yaml`, every asset is
100
+ published as `@acme/<name>`; set `publisher` on an entry for the exceptions.
101
+ Change the default later with `skaile library set <library> publisher=<slug>`.
102
102
 
103
103
  **Grouping in `skaile manage`** is optional and comes from Claude plugin
104
104
  manifests, not from folders: list the asset directories in
@@ -126,7 +126,7 @@ metadata:
126
126
  tags: [research, brief]
127
127
  stage: alpha # alpha | beta | stable | deprecated
128
128
  requires: # cross-asset dependencies (optional)
129
- - "@research/brief-format@^2"
129
+ - "skill:brief-format"
130
130
  ---
131
131
 
132
132
  # Brief
@@ -140,86 +140,98 @@ metadata:
140
140
 
141
141
  Keep the body tight — it ships as a prompt.
142
142
 
143
- ## 4. The manifest — `.skaile-source.yaml`
143
+ ## 4. The manifest — `skaile.manifest.yaml`
144
144
 
145
- One file at the **repo root** declares how the repo maps to publisher
146
- namespaces. Two modes:
145
+ One file at the **library/repo root** declares what the repo **publishes**:
146
+ the default `publisher`, a default `version`, and the `assets[]` inventory.
147
+ `skaile library init` / `library create` write and maintain it; the publish
148
+ commands read it as the **allowlist** — only assets listed in `assets[]` are
149
+ published.
147
150
 
148
- ### v1 — glob mode (default)
151
+ ```yaml
152
+ # skaile.manifest.yaml
153
+ publisher: acme # GitHub-shaped, no "@"; inherited by every asset
154
+ version: 1.0.0 # repo-level default version
155
+ dev_paths: # optional: dev-only prefixes, excluded unless --dev
156
+ - ai-assets-dev
157
+ assets:
158
+ - kind: skill
159
+ name: brief
160
+ root: research/skills/brief # a directory, walked recursively
161
+ description: Generates a project brief
162
+ keywords: [research, brief]
163
+ dependencies: # canonical refs only: kind:@<publisher>/<name>[#version]
164
+ - skill:@acme/brief-format#^2
165
+ - kind: agent
166
+ name: analyst
167
+ files: # or an explicit file list (repo-relative)
168
+ - agents/analyst/agent.yaml
169
+ publisher: research # per-asset publisher override
170
+ version: 2.0.0 # per-asset version override
171
+ ```
149
172
 
150
- Discovery walks the tree, matches kind globs, and resolves each asset's
151
- publisher from the manifest. Use this while a repo is evolving fast.
173
+ Keep it in sync with the tree instead of hand-editing the inventory:
152
174
 
153
- ```yaml
154
- version: 1
155
- publisher_default: '@acme' # literal publisher; never derived from a folder name
156
- default_ref: main
157
- publisher_overrides:
158
- - path: research-contracts/
159
- publisher: '@research-contracts'
175
+ ```bash
176
+ skaile library create skill my-skill --library personal # scaffolds the asset AND adds its assets[] entry
177
+ skaile library index personal # after hand edits: add new assets, drop deleted ones
178
+ skaile validate <library-path> # schema + canonical names, run before publishing
160
179
  ```
161
180
 
162
- ### v2 — author-shipped inventory (pinned)
181
+ An asset on disk but missing from `assets[]` is **not published**; an entry
182
+ whose `root:` directory is gone makes `library publish` fail until
183
+ `library index` drops it. `sha256` per entry is optional — if you pin one, a
184
+ mismatch is a hard error.
163
185
 
164
- Add an `assets:` block and bump to `version: 2`. Discovery then treats the
165
- block as authoritative: it **skips the glob walk**, uses your curated `files[]`
166
- filter, your per-entry publisher, your `requires[]` graph, and verifies your
167
- `sha256`. Use this for reproducible, signed, audit-friendly releases.
186
+ > `.skaile-source.yaml` is the **legacy** source config of third-party repos
187
+ > (`publisher_default`, `publisher_overrides`, `dev_paths`). It is not what a
188
+ > library writes and no longer sets a publisher; `skaile.manifest.yaml`
189
+ > replaces it.
168
190
 
169
- ```yaml
170
- version: 2
171
- publisher_default: '@acme'
172
- default_ref: main
173
- assets:
174
- - path: research/skills/brief # relative to repo root
175
- kind: skill
176
- publisher: '@research' # required per entry
177
- name: brief
178
- version: 1.0.0
179
- sha256: "<64-hex>" # optional locally, REQUIRED to publish
180
- files: # explicit; no wildcards; ≥1
181
- - SKILL.md
182
- - validator.py
183
- - references/template.md
184
- requires:
185
- - "@research/brief-format@^2"
186
- metadata:
187
- description: Generates a project brief
188
- keywords: [research, brief]
189
- ```
191
+ ### Curating a repo you don't own
190
192
 
191
- **Never hand-edit the `assets:` block.** Generate it from the asset files (this
192
- is what `source-manifest-builder` automates):
193
+ For a third-party source added with `skaile source add`, the manifest is a
194
+ **curator** manifest (it carries `source:` and `provenance:`) kept under
195
+ `~/.skaile/store/manifests/`:
193
196
 
194
197
  ```bash
195
- skaile source build-manifest --path ./my-assets # preview
196
- skaile source build-manifest --path ./my-assets --diff # show drift (CI-friendly, non-zero on drift)
197
- skaile source build-manifest --path ./my-assets --write # write the manifest
198
- skaile source verify-manifest --path ./my-assets --strict # verify before commit/publish
198
+ skaile source manifest init <src> # create it from a discovery walk
199
+ skaile source manifest rebuild <src> # re-derive after upstream changes (keeps your curation; --overwrite discards it)
200
+ skaile source manifest verify <src> --strict # verify hashes + manifest parse before publishing
201
+ skaile source manifest publish <src> # register it in the store
199
202
  ```
200
203
 
201
- Hash = sort `files[]` lexicographically, then SHA256 over
202
- `<relpath>\0<content>\0` per file. Author-computed hashes are wire-compatible
203
- with server-computed ones. Missing files are a hard error in manifest mode.
204
-
205
204
  ## 5. Publish
206
205
 
206
+ `<library>` below is the **library name** (as shown by `skaile library list`),
207
+ never an asset ref.
208
+
207
209
  ```bash
208
210
  # Attach a GitHub remote so the library is store-publishable
209
211
  skaile library link personal https://github.com/you/my-assets
210
212
 
211
- # Push bytes to GitHub + register the manifest in the store, atomically
212
- skaile library publish @research/brief@1.0.0
213
+ skaile store login
213
214
 
214
- # Or register a manifest for bytes already on GitHub (no push)
215
- skaile library register @research/brief@1.0.0
215
+ # Preview the plan: remote, publisher namespace(s), ref, refs to publish
216
+ skaile library publish personal --dry-run
216
217
 
217
- # Retract a catalog entry
218
- skaile library yank @research/brief@1.0.0
218
+ # Commit + push to the PUBLIC remote, register it as a store source, publish its assets
219
+ skaile library publish personal
220
+ # → skill:@acme/brief#1.0.0
221
+
222
+ # Or register bytes that are already on GitHub (no commit/push)
223
+ skaile library register personal
224
+
225
+ # Retract published assets (all, or one with --asset)
226
+ skaile library yank personal --asset skill:@acme/brief#1.0.0
219
227
  ```
220
228
 
221
- Consumers then install pointer-only: `skaile install @research/brief@1.0.0`
222
- fetches from your repo at the pinned commit and verifies SHA256 per file.
229
+ `--asset <ref>` limits `publish` / `register` / `yank` to one asset. A local
230
+ library with no remote needs `--create-repo` (or `library link`) first.
231
+
232
+ Consumers then install pointer-only with the canonical ref:
233
+ `skaile install skill:@acme/brief#1.0.0` fetches from your repo at the pinned
234
+ commit and verifies SHA256 per file.
223
235
 
224
236
  ## Dev-only assets — `dev_paths` + `--dev`
225
237
 
@@ -232,11 +244,10 @@ pulled in only when a contributor opts in.
232
244
  - **Folder name:** keep dev assets under one top-level folder named
233
245
  **`ai-assets-dev/`** (intention-revealing; treat the `-dev` suffix as
234
246
  reserved).
235
- - **Mechanism:** declare it in `.skaile-source.yaml` under `dev_paths`:
247
+ - **Mechanism:** declare it in `skaile.manifest.yaml` under `dev_paths`:
236
248
 
237
249
  ```yaml
238
- version: 1
239
- publisher_default: '@acme'
250
+ publisher: acme
240
251
  dev_paths: # excluded from a normal discovery run
241
252
  - ai-assets-dev
242
253
  ```
@@ -2,7 +2,7 @@
2
2
  name: "skaile-manage-workspace"
3
3
  description: "Use when managing a skaile workspace from the command line: init/install a project, add/remove/list/search assets, work with sources and libraries, the interactive manage TUI, patches, sessions, and catalog config. Wraps the `skaile` CLI workspace surface."
4
4
  metadata:
5
- version: "0.1.1"
5
+ version: "0.1.2"
6
6
  tags:
7
7
  - "cli"
8
8
  - "workspace"
@@ -45,8 +45,8 @@ paths, resources) live in `skaile.yaml` and are hand-edited.
45
45
 
46
46
  ## Assets in a workspace
47
47
 
48
- `skaile <noun>` works across kinds (`skill`, `agent`, `prompt`, `flow`,
49
- `bundle`, `contract`); the unified verbs:
48
+ The asset verbs work across kinds (`skill`, `agent`, `prompt`, `flow`,
49
+ `bundle`, `contract`):
50
50
 
51
51
  ```bash
52
52
  skaile add <ref> [--global] # add to skaile.yaml + deploy
@@ -57,7 +57,7 @@ skaile search [kind] [query] # search across all sources
57
57
  skaile info <ref> # metadata, deps, deploy status
58
58
  skaile why <ref> # why is this installed (dep chain)
59
59
  skaile tree # dependency tree
60
- skaile outdated [name] # assets behind their source
60
+ skaile outdated [ref] # assets behind their source
61
61
  skaile update [name] # refresh catalog cache + re-deploy outdated
62
62
  skaile diff <ref> # deployed vs source diff
63
63
  skaile doctor [name] # scan for broken deps
@@ -65,12 +65,14 @@ skaile create <name> [--kind k] # scaffold a new asset
65
65
  skaile history [limit] # recent actions
66
66
  ```
67
67
 
68
- `<ref>` is `@publisher/name` optionally pinned with `@version`.
68
+ `<ref>` is the canonical `kind:@<publisher>/<name>`, optionally pinned with
69
+ `#<version>` — e.g. `skill:@research/brief#1.0.0`. The `kind:` prefix is
70
+ required and the version follows `#`, never `@`.
69
71
 
70
72
  ### Pointer-only install from the catalog
71
73
 
72
74
  ```bash
73
- skaile install @research/brief@1.0.0
75
+ skaile install skill:@research/brief#1.0.0
74
76
  ```
75
77
 
76
78
  Resolves the install manifest from the configured catalog, fetches file bytes
@@ -92,15 +94,19 @@ grouped by publisher/source and Claude plugin, unlisted assets under `Other`), *
92
94
  ## Sources (third-party / team repos)
93
95
 
94
96
  ```bash
95
- skaile source add <git-url> # clone + register a github source (~/.skaile/sources/<name>)
97
+ skaile source add <git-url> # clone + register a github source (~/.skaile/cache/sources/<host>/<owner>/<repo>/)
96
98
  skaile source list # registered sources
97
99
  skaile source show <name>
98
100
  skaile source remove <name>
99
101
  skaile source sync [name] # re-fetch upstream changes
100
- skaile source build-manifest --path <p> [--diff|--write] # author-shipped inventory
101
- skaile source verify-manifest --path <p> --strict
102
+ skaile source manifest init <src> # curate a manifest over a source you don't own
103
+ skaile source manifest verify <src> --strict # verify hashes + manifest parse
102
104
  ```
103
105
 
106
+ `source manifest *` curates a catalog entry over a source you **don't** own. For
107
+ a library you author yourself, the manifest is its `skaile.manifest.yaml` (kept
108
+ current by `skaile library index <library>`) — see `skaile-author-asset`.
109
+
104
110
  ## Libraries (your authoring places)
105
111
 
106
112
  ```bash
@@ -110,7 +116,7 @@ skaile library create <kind> <name> # scaffold a new asset
110
116
  skaile library list|status|show <name>
111
117
  skaile library default <name> # set default
112
118
  skaile library commit|pull|push|sync <name> # git ops
113
- skaile library publish <ref> # push + register manifest atomically
119
+ skaile library publish <library> # push + register in the store (<library> is a NAME, not a ref)
114
120
  ```
115
121
 
116
122
  See the `skaile-author-asset` skill for the full authoring + publish flow.
@@ -154,7 +160,7 @@ catalog settings per-workspace.
154
160
  ## Dev-only assets
155
161
 
156
162
  A source can mark assets meant only for developing the project itself (those
157
- under `ai-assets-dev/`) as dev-only via `dev_paths` in its `.skaile-source.yaml`.
163
+ under `ai-assets-dev/`) as dev-only via `dev_paths` in its `skaile.manifest.yaml`.
158
164
  A normal sync excludes them; `--dev` on the sync re-includes them:
159
165
 
160
166
  ```bash
@@ -2,7 +2,7 @@
2
2
  name: skailify
3
3
  description: "Use when a user wants to move an existing coding-agent skill (a Claude Code skill under ~/.claude/skills/, or any SKILL.md directory) into a skaile library so it can be versioned and published. Trigger phrases: 'skailify my skill', 'import this Claude skill into my library', 'move my ~/.claude skill into skaile', 'turn my CC skill into a skaile asset', 'add my local skill to the library'. Drives `skaile asset import` and verifies with `skaile validate`."
4
4
  metadata:
5
- version: "0.1.0"
5
+ version: "0.1.1"
6
6
  source: AUTHORED
7
7
  stage: alpha
8
8
  tags:
@@ -52,7 +52,7 @@ wires the entry into `skaile.manifest.yaml`. The low-level `skaile asset migrate
52
52
 
53
53
  | Flag | Use |
54
54
  |---|---|
55
- | `--to <library>` | Target a non-default library. |
55
+ | `--library <library>` | Target a non-default library. |
56
56
  | `--version <semver>` | Stamp when the skill ships none (default `0.1.0`). |
57
57
  | `--stage <stage>` | `alpha` (default) \| `beta` \| `stable`. |
58
58
  | `--no-normalize` | Copy frontmatter verbatim (rare — only if already skaile-shaped). |
@@ -61,8 +61,12 @@ wires the entry into `skaile.manifest.yaml`. The low-level `skaile asset migrate
61
61
  ## After import
62
62
 
63
63
  - Edit the stamped `metadata.tags` if `import` left them empty.
64
- - To publish: `skaile library publish <kind>:@<publisher>/<name>@<version>`
65
- (needs a git-linked library — see [skaile-author-asset]).
64
+ - To publish: link the library to a GitHub remote once
65
+ (`skaile library link <library> <git-url>`), sign in (`skaile store login`),
66
+ then `skaile library publish <library>` — `<library>` is the library **name**,
67
+ not an asset ref; add `--asset <ref>` for one asset and `--dry-run` to preview
68
+ (see [skaile-author-asset]). The imported skill publishes as
69
+ `skill:@<publisher>/<name>#<version>`.
66
70
  - Re-running `import` for the same `(kind, name)` updates its manifest entry in
67
71
  place rather than duplicating it.
68
72
 
@@ -1,15 +1,15 @@
1
- export { flowFindFlowForSession, flowGetSession, flowList, flowListSessions, flowShow } from './chunk-BUZ3K2PT.js';
1
+ export { flowFindFlowForSession, flowGetSession, flowList, flowListSessions, flowShow } from './chunk-XMQAV6T3.js';
2
2
  import './chunk-R6O6YWU7.js';
3
3
  import './chunk-JELTQ4H7.js';
4
4
  import './chunk-X5YPJV4N.js';
5
5
  import './chunk-JKWU6ULI.js';
6
- import './chunk-6GBQND2F.js';
6
+ import './chunk-QEXEHXX5.js';
7
7
  import './chunk-4GY63JU6.js';
8
- import './chunk-4SSKKFDF.js';
8
+ import './chunk-JCATNLY3.js';
9
9
  import './chunk-XGIS325V.js';
10
10
  import './chunk-5BEFNLOR.js';
11
11
  import './chunk-A2ULN3KX.js';
12
- import './chunk-KBAE7PU7.js';
12
+ import './chunk-6IGFSUTE.js';
13
13
  import './chunk-MFHKHXDE.js';
14
14
  import './chunk-TOSHZX4C.js';
15
15
  import './chunk-SR4RFKHM.js';
@@ -22,5 +22,5 @@ import './chunk-MJHSLODD.js';
22
22
  import './chunk-C3CAXQMA.js';
23
23
  import './chunk-BOFL7GIF.js';
24
24
  import './chunk-NSBPE2FW.js';
25
- //# sourceMappingURL=flows-64OAOYLP.js.map
26
- //# sourceMappingURL=flows-64OAOYLP.js.map
25
+ //# sourceMappingURL=flows-DTADYIXH.js.map
26
+ //# sourceMappingURL=flows-DTADYIXH.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"flows-64OAOYLP.js"}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"flows-DTADYIXH.js"}
@@ -1,19 +1,19 @@
1
- export { KIND_COL_WIDTH, S, TARGET_DEFAULT_HINT, bareSoftDepName, colorRef, fitWidth, formatRelativeTime, formatSoftDepAddPreview, formatSoftDepHint, formatSoftDepRemovePreview, formatSoftDepSection, kindColor, kindColorPad, logErr, logInfo, logOk, logWarn, warnLegacyClaudeCopies } from './chunk-WGN7Z36G.js';
2
- import './chunk-WGNFDLHT.js';
3
- import './chunk-3ZVSINEV.js';
1
+ export { KIND_COL_WIDTH, S, TARGET_DEFAULT_HINT, bareSoftDepName, colorRef, fitWidth, formatRelativeTime, formatSoftDepAddPreview, formatSoftDepHint, formatSoftDepRemovePreview, formatSoftDepSection, kindColor, kindColorPad, logErr, logInfo, logOk, logWarn, warnLegacyClaudeCopies } from './chunk-JEA32KB6.js';
2
+ import './chunk-BATL2CWI.js';
3
+ import './chunk-Y5OCUOXF.js';
4
4
  import './chunk-Y7UBRRKG.js';
5
5
  import './chunk-VKSA2CDJ.js';
6
6
  import './chunk-R7FOF242.js';
7
7
  import './chunk-ZDKJHQY2.js';
8
- import './chunk-K2JVODQD.js';
8
+ import './chunk-37DN45RR.js';
9
9
  import './chunk-CGYEHQOX.js';
10
- import './chunk-6GBQND2F.js';
10
+ import './chunk-QEXEHXX5.js';
11
11
  import './chunk-4GY63JU6.js';
12
- import './chunk-4SSKKFDF.js';
12
+ import './chunk-JCATNLY3.js';
13
13
  import './chunk-XGIS325V.js';
14
14
  import './chunk-5BEFNLOR.js';
15
15
  import './chunk-A2ULN3KX.js';
16
- import './chunk-KBAE7PU7.js';
16
+ import './chunk-6IGFSUTE.js';
17
17
  import './chunk-MFHKHXDE.js';
18
18
  import './chunk-TOSHZX4C.js';
19
19
  import './chunk-SR4RFKHM.js';
@@ -30,5 +30,5 @@ import './chunk-UQ6LFBPZ.js';
30
30
  import './chunk-TNWXGHLD.js';
31
31
  import './chunk-5CYEWBPB.js';
32
32
  import './chunk-NSBPE2FW.js';
33
- //# sourceMappingURL=helpers-HV5Y57CY.js.map
34
- //# sourceMappingURL=helpers-HV5Y57CY.js.map
33
+ //# sourceMappingURL=helpers-F2RFRT5D.js.map
34
+ //# sourceMappingURL=helpers-F2RFRT5D.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"helpers-HV5Y57CY.js"}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"helpers-F2RFRT5D.js"}
@@ -1,15 +1,15 @@
1
- export { AssignmentNotFoundError, CatalogCache, CatalogConfigSchema, CatalogHttpError, DuplicateAssignmentError, DuplicateLibraryNameError, GitSyncDriver, InstanceHasConsumersError, InstanceNotFoundError, InterpolationError, KNOWN_ASSET_KINDS, KnowledgeManifestSchema, LIBRARY_BACKENDS, LIBRARY_OWNERSHIPS, LOCAL_CATALOG_URL, LibraryConfigSchema, LibraryError, LibraryInstanceRefSchema, LibraryManager, LibrarySectionSchema, LibrarySyncError, LocalCatalogSource, LocalIndex, LocalSyncDriver, LockAssignmentSchema, LockFileSchema, OfflineError, OperationNotPermittedError, PIN_POLICIES, PinPolicySchema, PresetAppliedSchema, PresetExpandedSchema, RemoteCatalogSource, RequiresEdgeSchema, RestCatalogSource, SidecarGit, SkaileConfigSchema, SourceNotFoundError, TarballHashMismatchError, UserLibraryNotFoundError, WorkspaceConfigV2Schema, applyNonStructuralUpgrade, applyPreset, applyPresetFromData, assertManifestEditable, classifyRef, cloneOrInitGitRepo, createEmptyLockFile, curatedManifestOverlay, deriveSlug, detectChanges, detectNestedPresetRefs, detectWorkspaceVersion, ensureGitRepo, evaluateUpgrade, extractLibraryInstanceId, extractReferencedKeys, filterKey, getConfigDefaults, getDefaultValue, getSidecarRoot, getStoreManifestsDir, getStoreRoot, hasInterpolationTokens, installLibraryAsset, interpolate, isGitRepo, isLocalCatalogUrl, isSecretPlaceholder, knowledgeKindProvider, listSidecarSlugsOnDisk, loadLockFile, loadWorkspaceV2, migrateSidecarsToStoreIfNeeded, migrateWorkspaceConfig, missingRootAssets, parsePreset, parsePresetYaml, parseWorkspaceV2, projectConfigPath, pruneMissingRootAssets, queryInstancePickerChoices, resolveAllItems, resolveConfig, resolveIndexPath, resolveItem, resolvePin, resolveSidecarPaths, saveConfig, saveLockFile, saveWorkspaceV2, setManifestPublisher, setOriginUrl, sha256Hex, stampManifestPublisher, storeSecrets, syncManifestWithDisk, trpcGetUrl, upsertManifestAsset, validateAllPlaceholders, validateKnowledge, validateNestingDepth, validatePlaceholder, writeCuratedManifest } from '../chunk-3ZVSINEV.js';
1
+ export { AssignmentNotFoundError, CatalogCache, CatalogConfigSchema, CatalogHttpError, DuplicateAssignmentError, DuplicateLibraryNameError, GitSyncDriver, InstanceHasConsumersError, InstanceNotFoundError, InterpolationError, KNOWN_ASSET_KINDS, KnowledgeManifestSchema, LIBRARY_BACKENDS, LIBRARY_OWNERSHIPS, LOCAL_CATALOG_URL, LibraryConfigSchema, LibraryError, LibraryInstanceRefSchema, LibraryManager, LibrarySectionSchema, LibrarySyncError, LocalCatalogSource, LocalIndex, LocalSyncDriver, LockAssignmentSchema, LockFileSchema, OfflineError, OperationNotPermittedError, PIN_POLICIES, PinPolicySchema, PresetAppliedSchema, PresetExpandedSchema, RemoteCatalogSource, RequiresEdgeSchema, RestCatalogSource, SidecarGit, SkaileConfigSchema, SourceNotFoundError, TarballHashMismatchError, UserLibraryNotFoundError, WorkspaceConfigV2Schema, applyNonStructuralUpgrade, applyPreset, applyPresetFromData, assertManifestEditable, classifyRef, cloneOrInitGitRepo, createEmptyLockFile, curatedManifestOverlay, deriveSlug, detectChanges, detectNestedPresetRefs, detectWorkspaceVersion, ensureGitRepo, evaluateUpgrade, extractLibraryInstanceId, extractReferencedKeys, filterKey, getConfigDefaults, getDefaultValue, getSidecarRoot, getStoreManifestsDir, getStoreRoot, hasInterpolationTokens, installLibraryAsset, interpolate, isGitRepo, isLocalCatalogUrl, isSecretPlaceholder, knowledgeKindProvider, listSidecarSlugsOnDisk, loadLockFile, loadWorkspaceV2, migrateSidecarsToStoreIfNeeded, migrateWorkspaceConfig, missingRootAssets, parsePreset, parsePresetYaml, parseWorkspaceV2, projectConfigPath, pruneMissingRootAssets, queryInstancePickerChoices, resolveAllItems, resolveConfig, resolveIndexPath, resolveItem, resolvePin, resolveSidecarPaths, saveConfig, saveLockFile, saveWorkspaceV2, setManifestPublisher, setOriginUrl, sha256Hex, stampManifestPublisher, storeSecrets, syncManifestWithDisk, trpcGetUrl, upsertManifestAsset, validateAllPlaceholders, validateKnowledge, validateNestingDepth, validatePlaceholder, writeCuratedManifest } from '../chunk-Y5OCUOXF.js';
2
2
  import '../chunk-Y7UBRRKG.js';
3
3
  export { installFromManifest } from '../chunk-VKSA2CDJ.js';
4
4
  export { GITHUB_PAT_ENV, fetchAssetFilesFromGitHub } from '../chunk-R7FOF242.js';
5
5
  import '../chunk-ZDKJHQY2.js';
6
- export { resolveLibraryDir } from '../chunk-6GBQND2F.js';
6
+ export { resolveLibraryDir } from '../chunk-QEXEHXX5.js';
7
7
  import '../chunk-4GY63JU6.js';
8
- import '../chunk-4SSKKFDF.js';
8
+ import '../chunk-JCATNLY3.js';
9
9
  import '../chunk-XGIS325V.js';
10
10
  import '../chunk-5BEFNLOR.js';
11
11
  import '../chunk-A2ULN3KX.js';
12
- import '../chunk-KBAE7PU7.js';
12
+ import '../chunk-6IGFSUTE.js';
13
13
  export { userConfigPath } from '../chunk-MFHKHXDE.js';
14
14
  import '../chunk-TOSHZX4C.js';
15
15
  import '../chunk-SR4RFKHM.js';
@@ -54,8 +54,9 @@ export interface InstalledLibraryAsset {
54
54
  * The hash check covers the files discovery hashed, siblings included when the
55
55
  * manifest declares the folder as the asset's `root`.
56
56
  *
57
- * @throws When the asset is no longer in the library at the indexed version, when its
58
- * on-disk hash differs from the indexed one (`hash mismatch`), when a directory-kind
57
+ * @throws When the asset is no longer in the library at the indexed version, when the
58
+ * index holds no hash for it, when its on-disk hash differs from the indexed one
59
+ * (`hash mismatch`), when a directory-kind
59
60
  * asset sits at the library root or its path would escape the target, or when the
60
61
  * existing lock cannot be read. A link install over an existing path fails with the
61
62
  * filesystem's `EEXIST`.
@@ -1 +1 @@
1
- {"version":3,"file":"install-library-asset.d.ts","sourceRoot":"","sources":["../../../../library/src/local/install-library-asset.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAiBH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAErE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAGlD,+CAA+C;AAC/C,MAAM,WAAW,uBAAuB;IACtC,2FAA2F;IAC3F,GAAG,EAAE,eAAe,CAAC;IACrB;;;;OAIG;IACH,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,eAAe,CAAC,CAAC,CAAC;IAChG,wEAAwE;IACxE,SAAS,EAAE,MAAM,CAAC;IAClB,yEAAyE;IACzE,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IACtB,mFAAmF;IACnF,QAAQ,CAAC,EAAE,kBAAkB,CAAC;CAC/B;AAED,0DAA0D;AAC1D,MAAM,WAAW,qBAAqB;IACpC;;;OAGG;IACH,WAAW,EAAE,MAAM,CAAC;IACpB,wFAAwF;IACxF,OAAO,EAAE,MAAM,CAAC;IAChB,0DAA0D;IAC1D,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,uBAAuB,GAAG,qBAAqB,CAsExF"}
1
+ {"version":3,"file":"install-library-asset.d.ts","sourceRoot":"","sources":["../../../../library/src/local/install-library-asset.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAiBH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAErE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAGlD,+CAA+C;AAC/C,MAAM,WAAW,uBAAuB;IACtC,2FAA2F;IAC3F,GAAG,EAAE,eAAe,CAAC;IACrB;;;;OAIG;IACH,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,eAAe,CAAC,CAAC,CAAC;IAChG,wEAAwE;IACxE,SAAS,EAAE,MAAM,CAAC;IAClB,yEAAyE;IACzE,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IACtB,mFAAmF;IACnF,QAAQ,CAAC,EAAE,kBAAkB,CAAC;CAC/B;AAED,0DAA0D;AAC1D,MAAM,WAAW,qBAAqB;IACpC;;;OAGG;IACH,WAAW,EAAE,MAAM,CAAC;IACpB,wFAAwF;IACxF,OAAO,EAAE,MAAM,CAAC;IAChB,0DAA0D;IAC1D,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,uBAAuB,GAAG,qBAAqB,CAyExF"}
@@ -1,32 +1,33 @@
1
- import { makeHttpPublisherClient } from './chunk-AWGQVAC5.js';
2
- import { isStoreAuthenticated, bareName, assetNamespace, refFor, assetEntryRef, manifestNamespaces, plannedRefs, formatNamespaceAvailability, preflightNamespace, publishToStore } from './chunk-YXNYBUQY.js';
3
- import { openLibraryManager } from './chunk-TR7KFBIO.js';
4
- import { logErr, logInfo, logOk, logWarn, S } from './chunk-WGN7Z36G.js';
5
- import './chunk-ZCSFGGLG.js';
6
- import './chunk-LM5XEFNS.js';
1
+ import { makeHttpPublisherClient } from './chunk-U6ORGQHZ.js';
2
+ import { checkSkillManifest } from './chunk-UKDFOOEG.js';
3
+ import { isStoreAuthenticated, bareName, assetNamespace, refFor, assetEntryRef, manifestNamespaces, plannedRefs, formatNamespaceAvailability, preflightNamespace, publishToStore } from './chunk-A67BHJCH.js';
4
+ import { openLibraryManager } from './chunk-JF26V3BC.js';
5
+ import { logErr, logInfo, logOk, logWarn, S } from './chunk-JEA32KB6.js';
6
+ import './chunk-5NH3U6N5.js';
7
+ import './chunk-UAAAERXI.js';
7
8
  import './chunk-QZLWJETK.js';
8
9
  import './chunk-NFGRW3L7.js';
9
10
  import './chunk-QCI6D7E4.js';
10
- import './chunk-WGNFDLHT.js';
11
- import { missingRootAssets } from './chunk-3ZVSINEV.js';
11
+ import './chunk-BATL2CWI.js';
12
+ import { missingRootAssets } from './chunk-Y5OCUOXF.js';
12
13
  import './chunk-Y7UBRRKG.js';
13
14
  import './chunk-VKSA2CDJ.js';
14
15
  import './chunk-R7FOF242.js';
15
16
  import './chunk-ZDKJHQY2.js';
16
- import './chunk-K2JVODQD.js';
17
+ import './chunk-37DN45RR.js';
17
18
  import './chunk-CGYEHQOX.js';
18
- import './chunk-6GBQND2F.js';
19
+ import './chunk-QEXEHXX5.js';
19
20
  import './chunk-4GY63JU6.js';
20
- import './chunk-4SSKKFDF.js';
21
+ import './chunk-JCATNLY3.js';
21
22
  import './chunk-XGIS325V.js';
22
23
  import './chunk-5BEFNLOR.js';
23
24
  import './chunk-A2ULN3KX.js';
24
- import './chunk-KBAE7PU7.js';
25
+ import './chunk-6IGFSUTE.js';
25
26
  import './chunk-MFHKHXDE.js';
26
27
  import './chunk-TOSHZX4C.js';
27
28
  import { loadSkPublishManifest, decodeSkaileManifest } from './chunk-SR4RFKHM.js';
28
29
  import './chunk-RVRB27AN.js';
29
- import './chunk-LFMX2UEF.js';
30
+ import { parseFrontmatter } from './chunk-LFMX2UEF.js';
30
31
  import './chunk-WX74MVNA.js';
31
32
  import './chunk-ICSCSM5D.js';
32
33
  import './chunk-JMKB7IB4.js';
@@ -40,7 +41,7 @@ import './chunk-5CYEWBPB.js';
40
41
  import './chunk-NSBPE2FW.js';
41
42
  import { spawnSync } from 'child_process';
42
43
  import { readFileSync, existsSync } from 'fs';
43
- import { join } from 'path';
44
+ import { join, relative, basename } from 'path';
44
45
 
45
46
  var MANIFEST_FILENAME = "skaile.manifest.yaml";
46
47
  function remoteUrlOf(lib) {
@@ -132,13 +133,30 @@ function isGithubRemote(url) {
132
133
  );
133
134
  }
134
135
  var MAX_LISTED_UNTRACKED = 10;
135
- function publishWarnings(libPath, spawn, skipPush) {
136
+ function assetWarnings(libPath, manifest, targetName) {
137
+ const warnings = [];
138
+ for (const a of manifest.assets ?? []) {
139
+ if (targetName && a.name !== targetName) continue;
140
+ if (a.kind !== "skill" || !a.root || a.source || manifest.source) continue;
141
+ const file = join(libPath, a.root, "SKILL.md");
142
+ if (!existsSync(file)) continue;
143
+ const { data, body } = parseFrontmatter(readFileSync(file, "utf-8"));
144
+ if (!data || Object.keys(data).length === 0) continue;
145
+ const rel = relative(libPath, file);
146
+ for (const f of checkSkillManifest(data, body, basename(join(libPath, a.root)))) {
147
+ warnings.push(`${assetEntryRef(a, manifest)} (${rel}) [${f.tag}] \u2014 ${f.text}`);
148
+ }
149
+ }
150
+ return warnings;
151
+ }
152
+ function publishWarnings(libPath, spawn, skipPush, manifest, targetName) {
136
153
  const warnings = [];
137
154
  if (!existsSync(join(libPath, "LICENSE")) && !existsSync(join(libPath, "LICENSE.md"))) {
138
155
  warnings.push(
139
156
  "No LICENSE or LICENSE.md in the library root \u2014 a public repo without a license grants consumers no rights to use it."
140
157
  );
141
158
  }
159
+ warnings.push(...assetWarnings(libPath, manifest, targetName));
142
160
  if (!skipPush) {
143
161
  const status = runGit(spawn, libPath, ["status", "--porcelain", "--untracked-files=all"]);
144
162
  if (status.status === 0) {
@@ -227,7 +245,7 @@ async function publishLibrary(name, opts, client, spawn = spawnSync) {
227
245
  const namespaces = manifestNamespaces(manifest, targetName);
228
246
  const wouldBeRefs = plannedRefs(manifest, targetName);
229
247
  const sourceRef = opts.ref ?? branchOf(lib);
230
- const warnings = publishWarnings(lib.path, spawn, opts.skipPush);
248
+ const warnings = publishWarnings(lib.path, spawn, opts.skipPush, manifest, targetName);
231
249
  if (opts.dryRun) {
232
250
  logInfo(`Publish plan for ${S.bold(name)}:`);
233
251
  logInfo(
@@ -346,5 +364,5 @@ async function runLibraryYank(name, opts, client) {
346
364
  }
347
365
 
348
366
  export { runLibraryPublish, runLibraryRegister, runLibraryYank };
349
- //# sourceMappingURL=library-publish-TVS3WQ4C.js.map
350
- //# sourceMappingURL=library-publish-TVS3WQ4C.js.map
367
+ //# sourceMappingURL=library-publish-62RFU74A.js.map
368
+ //# sourceMappingURL=library-publish-62RFU74A.js.map