@agentxm/client-core 0.8.0 → 0.10.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 (196) hide show
  1. package/README.md +5 -0
  2. package/dist/src/unstable/cli-renderer/ansi-chrome.d.ts +7 -0
  3. package/dist/src/unstable/cli-renderer/ansi-chrome.d.ts.map +1 -1
  4. package/dist/src/unstable/cli-renderer/ansi-chrome.js +7 -7
  5. package/dist/src/unstable/cli-renderer/ansi-chrome.js.map +1 -1
  6. package/dist/src/unstable/cli-renderer/cli-renderer-interactive.d.ts.map +1 -1
  7. package/dist/src/unstable/cli-renderer/cli-renderer-interactive.js +16 -93
  8. package/dist/src/unstable/cli-renderer/cli-renderer-interactive.js.map +1 -1
  9. package/dist/src/unstable/cli-renderer/cli-renderer-machine.d.ts.map +1 -1
  10. package/dist/src/unstable/cli-renderer/cli-renderer-machine.js +2 -0
  11. package/dist/src/unstable/cli-renderer/cli-renderer-machine.js.map +1 -1
  12. package/dist/src/unstable/cli-renderer/cli-renderer-test.d.ts +1 -0
  13. package/dist/src/unstable/cli-renderer/cli-renderer-test.d.ts.map +1 -1
  14. package/dist/src/unstable/cli-renderer/cli-renderer-test.js +4 -0
  15. package/dist/src/unstable/cli-renderer/cli-renderer-test.js.map +1 -1
  16. package/dist/src/unstable/cli-renderer/cli-renderer.d.ts +1 -0
  17. package/dist/src/unstable/cli-renderer/cli-renderer.d.ts.map +1 -1
  18. package/dist/src/unstable/cli-renderer/cli-renderer.js.map +1 -1
  19. package/dist/src/unstable/cli-renderer/index.d.ts +1 -0
  20. package/dist/src/unstable/cli-renderer/index.d.ts.map +1 -1
  21. package/dist/src/unstable/cli-renderer/index.js +1 -0
  22. package/dist/src/unstable/cli-renderer/index.js.map +1 -1
  23. package/dist/src/unstable/cli-renderer/markdown-formatter.d.ts +2 -0
  24. package/dist/src/unstable/cli-renderer/markdown-formatter.d.ts.map +1 -0
  25. package/dist/src/unstable/cli-renderer/markdown-formatter.js +255 -0
  26. package/dist/src/unstable/cli-renderer/markdown-formatter.js.map +1 -0
  27. package/dist/src/unstable/cli-renderer/table-formatter.d.ts +5 -0
  28. package/dist/src/unstable/cli-renderer/table-formatter.d.ts.map +1 -0
  29. package/dist/src/unstable/cli-renderer/table-formatter.js +85 -0
  30. package/dist/src/unstable/cli-renderer/table-formatter.js.map +1 -0
  31. package/dist/src/unstable/cli-runtime/breadcrumb.d.ts +1 -0
  32. package/dist/src/unstable/cli-runtime/breadcrumb.d.ts.map +1 -1
  33. package/dist/src/unstable/cli-runtime/breadcrumb.js +2 -1
  34. package/dist/src/unstable/cli-runtime/breadcrumb.js.map +1 -1
  35. package/dist/src/unstable/cli-runtime/json-envelope.d.ts +4 -0
  36. package/dist/src/unstable/cli-runtime/json-envelope.d.ts.map +1 -1
  37. package/dist/src/unstable/cli-runtime/output-mode.d.ts +1 -0
  38. package/dist/src/unstable/cli-runtime/output-mode.d.ts.map +1 -1
  39. package/dist/src/unstable/cli-runtime/output-mode.js +1 -0
  40. package/dist/src/unstable/cli-runtime/output-mode.js.map +1 -1
  41. package/dist/src/unstable/cli-runtime/runtime-envelope.d.ts.map +1 -1
  42. package/dist/src/unstable/cli-runtime/runtime-envelope.js +4 -0
  43. package/dist/src/unstable/cli-runtime/runtime-envelope.js.map +1 -1
  44. package/dist/src/unstable/commands/manifest-schema.d.ts +21 -11
  45. package/dist/src/unstable/commands/manifest-schema.d.ts.map +1 -1
  46. package/dist/src/unstable/commands/operations/publish.d.ts.map +1 -1
  47. package/dist/src/unstable/commands/operations/publish.js +2 -1
  48. package/dist/src/unstable/commands/operations/publish.js.map +1 -1
  49. package/dist/src/unstable/commands/operations/shared-command-helpers.d.ts +20 -12
  50. package/dist/src/unstable/commands/operations/shared-command-helpers.d.ts.map +1 -1
  51. package/dist/src/unstable/extensions/common.d.ts +66 -11
  52. package/dist/src/unstable/extensions/common.d.ts.map +1 -1
  53. package/dist/src/unstable/extensions/common.js +86 -14
  54. package/dist/src/unstable/extensions/common.js.map +1 -1
  55. package/dist/src/unstable/extensions/index.d.ts +2 -1
  56. package/dist/src/unstable/extensions/index.d.ts.map +1 -1
  57. package/dist/src/unstable/extensions/index.js +2 -1
  58. package/dist/src/unstable/extensions/index.js.map +1 -1
  59. package/dist/src/unstable/extensions/license.d.ts +16 -0
  60. package/dist/src/unstable/extensions/license.d.ts.map +1 -0
  61. package/dist/src/unstable/extensions/license.js +29 -0
  62. package/dist/src/unstable/extensions/license.js.map +1 -0
  63. package/dist/src/unstable/lint/catalog/workspace/skills-universal-artifact-present.d.ts +11 -0
  64. package/dist/src/unstable/lint/catalog/workspace/skills-universal-artifact-present.d.ts.map +1 -0
  65. package/dist/src/unstable/lint/catalog/workspace/skills-universal-artifact-present.js +68 -0
  66. package/dist/src/unstable/lint/catalog/workspace/skills-universal-artifact-present.js.map +1 -0
  67. package/dist/src/unstable/lint/catalog/workspace-fixtures/interpret-ops.d.ts.map +1 -1
  68. package/dist/src/unstable/lint/catalog/workspace-fixtures/interpret-ops.js +47 -0
  69. package/dist/src/unstable/lint/catalog/workspace-fixtures/interpret-ops.js.map +1 -1
  70. package/dist/src/unstable/lint/catalog/workspace.d.ts +1 -0
  71. package/dist/src/unstable/lint/catalog/workspace.d.ts.map +1 -1
  72. package/dist/src/unstable/lint/catalog/workspace.js +4 -0
  73. package/dist/src/unstable/lint/catalog/workspace.js.map +1 -1
  74. package/dist/src/unstable/lint/cli.d.ts.map +1 -1
  75. package/dist/src/unstable/lint/cli.js +22 -0
  76. package/dist/src/unstable/lint/cli.js.map +1 -1
  77. package/dist/src/unstable/lockfile/schema.d.ts +85 -0
  78. package/dist/src/unstable/lockfile/schema.d.ts.map +1 -1
  79. package/dist/src/unstable/lockfile/schema.js +7 -1
  80. package/dist/src/unstable/lockfile/schema.js.map +1 -1
  81. package/dist/src/unstable/mcp-servers/manifest-schema.d.ts +21 -11
  82. package/dist/src/unstable/mcp-servers/manifest-schema.d.ts.map +1 -1
  83. package/dist/src/unstable/mcp-servers/operations/publish.d.ts.map +1 -1
  84. package/dist/src/unstable/mcp-servers/operations/publish.js +2 -1
  85. package/dist/src/unstable/mcp-servers/operations/publish.js.map +1 -1
  86. package/dist/src/unstable/package-urls/companion-package.d.ts +14 -0
  87. package/dist/src/unstable/package-urls/companion-package.d.ts.map +1 -0
  88. package/dist/src/unstable/package-urls/companion-package.js +41 -0
  89. package/dist/src/unstable/package-urls/companion-package.js.map +1 -0
  90. package/dist/src/unstable/package-urls/companion-package.spec.d.ts +2 -0
  91. package/dist/src/unstable/package-urls/companion-package.spec.d.ts.map +1 -0
  92. package/dist/src/unstable/package-urls/companion-package.spec.js +37 -0
  93. package/dist/src/unstable/package-urls/companion-package.spec.js.map +1 -0
  94. package/dist/src/unstable/package-urls/index.d.ts +4 -0
  95. package/dist/src/unstable/package-urls/index.d.ts.map +1 -0
  96. package/dist/src/unstable/package-urls/index.js +4 -0
  97. package/dist/src/unstable/package-urls/index.js.map +1 -0
  98. package/dist/src/unstable/package-urls/internal.d.ts +6 -0
  99. package/dist/src/unstable/package-urls/internal.d.ts.map +1 -0
  100. package/dist/src/unstable/package-urls/internal.js +14 -0
  101. package/dist/src/unstable/package-urls/internal.js.map +1 -0
  102. package/dist/src/unstable/package-urls/package-identity-purl.d.ts +5 -0
  103. package/dist/src/unstable/package-urls/package-identity-purl.d.ts.map +1 -0
  104. package/dist/src/unstable/package-urls/package-identity-purl.js +26 -0
  105. package/dist/src/unstable/package-urls/package-identity-purl.js.map +1 -0
  106. package/dist/src/unstable/package-urls/package-identity-purl.spec.d.ts +2 -0
  107. package/dist/src/unstable/package-urls/package-identity-purl.spec.d.ts.map +1 -0
  108. package/dist/src/unstable/package-urls/package-identity-purl.spec.js +33 -0
  109. package/dist/src/unstable/package-urls/package-identity-purl.spec.js.map +1 -0
  110. package/dist/src/unstable/package-urls/vers-range.d.ts +32 -0
  111. package/dist/src/unstable/package-urls/vers-range.d.ts.map +1 -0
  112. package/dist/src/unstable/package-urls/vers-range.js +164 -0
  113. package/dist/src/unstable/package-urls/vers-range.js.map +1 -0
  114. package/dist/src/unstable/package-urls/vers-range.spec.d.ts +2 -0
  115. package/dist/src/unstable/package-urls/vers-range.spec.d.ts.map +1 -0
  116. package/dist/src/unstable/package-urls/vers-range.spec.js +60 -0
  117. package/dist/src/unstable/package-urls/vers-range.spec.js.map +1 -0
  118. package/dist/src/unstable/packaging/cargo.d.ts +5 -2
  119. package/dist/src/unstable/packaging/cargo.d.ts.map +1 -1
  120. package/dist/src/unstable/packaging/cargo.js +96 -55
  121. package/dist/src/unstable/packaging/cargo.js.map +1 -1
  122. package/dist/src/unstable/packaging/gem.d.ts.map +1 -1
  123. package/dist/src/unstable/packaging/gem.js +30 -15
  124. package/dist/src/unstable/packaging/gem.js.map +1 -1
  125. package/dist/src/unstable/packs/manifest-schema.d.ts +21 -11
  126. package/dist/src/unstable/packs/manifest-schema.d.ts.map +1 -1
  127. package/dist/src/unstable/packs/operations/publish.d.ts.map +1 -1
  128. package/dist/src/unstable/packs/operations/publish.js +2 -1
  129. package/dist/src/unstable/packs/operations/publish.js.map +1 -1
  130. package/dist/src/unstable/plan/plan.d.ts +3 -0
  131. package/dist/src/unstable/plan/plan.d.ts.map +1 -1
  132. package/dist/src/unstable/publish/manifest-policy.d.ts +106 -56
  133. package/dist/src/unstable/publish/manifest-policy.d.ts.map +1 -1
  134. package/dist/src/unstable/publish/manifest-policy.js +75 -5
  135. package/dist/src/unstable/publish/manifest-policy.js.map +1 -1
  136. package/dist/src/unstable/registry/__generated__/registry-client.d.ts +121 -21
  137. package/dist/src/unstable/registry/__generated__/registry-client.d.ts.map +1 -1
  138. package/dist/src/unstable/registry/__generated__/registry-client.js +78 -12
  139. package/dist/src/unstable/registry/__generated__/registry-client.js.map +1 -1
  140. package/dist/src/unstable/registry/client.d.ts +7 -1
  141. package/dist/src/unstable/registry/client.d.ts.map +1 -1
  142. package/dist/src/unstable/registry/client.js.map +1 -1
  143. package/dist/src/unstable/registry/index.d.ts +1 -1
  144. package/dist/src/unstable/registry/index.d.ts.map +1 -1
  145. package/dist/src/unstable/registry/index.js +1 -1
  146. package/dist/src/unstable/registry/index.js.map +1 -1
  147. package/dist/src/unstable/registry/local-client.d.ts.map +1 -1
  148. package/dist/src/unstable/registry/local-client.js +11 -5
  149. package/dist/src/unstable/registry/local-client.js.map +1 -1
  150. package/dist/src/unstable/registry/remote-client.d.ts.map +1 -1
  151. package/dist/src/unstable/registry/remote-client.js +5 -4
  152. package/dist/src/unstable/registry/remote-client.js.map +1 -1
  153. package/dist/src/unstable/registry/schema.d.ts +37 -18
  154. package/dist/src/unstable/registry/schema.d.ts.map +1 -1
  155. package/dist/src/unstable/registry/schema.js +19 -4
  156. package/dist/src/unstable/registry/schema.js.map +1 -1
  157. package/dist/src/unstable/skills/manifest-schema.d.ts +21 -11
  158. package/dist/src/unstable/skills/manifest-schema.d.ts.map +1 -1
  159. package/dist/src/unstable/skills/operations/disable.d.ts.map +1 -1
  160. package/dist/src/unstable/skills/operations/disable.js +14 -1
  161. package/dist/src/unstable/skills/operations/disable.js.map +1 -1
  162. package/dist/src/unstable/skills/operations/enable.d.ts.map +1 -1
  163. package/dist/src/unstable/skills/operations/enable.js +17 -1
  164. package/dist/src/unstable/skills/operations/enable.js.map +1 -1
  165. package/dist/src/unstable/skills/operations/install.d.ts +1 -8
  166. package/dist/src/unstable/skills/operations/install.d.ts.map +1 -1
  167. package/dist/src/unstable/skills/operations/install.js +47 -22
  168. package/dist/src/unstable/skills/operations/install.js.map +1 -1
  169. package/dist/src/unstable/skills/operations/publish.d.ts.map +1 -1
  170. package/dist/src/unstable/skills/operations/publish.js +2 -1
  171. package/dist/src/unstable/skills/operations/publish.js.map +1 -1
  172. package/dist/src/unstable/skills/operations/uninstall.d.ts.map +1 -1
  173. package/dist/src/unstable/skills/operations/uninstall.js +5 -0
  174. package/dist/src/unstable/skills/operations/uninstall.js.map +1 -1
  175. package/dist/src/unstable/skills/operations/universal-artifact.d.ts +43 -0
  176. package/dist/src/unstable/skills/operations/universal-artifact.d.ts.map +1 -0
  177. package/dist/src/unstable/skills/operations/universal-artifact.js +77 -0
  178. package/dist/src/unstable/skills/operations/universal-artifact.js.map +1 -0
  179. package/dist/src/unstable/source-resolution/providers/registry/host-provider.d.ts.map +1 -1
  180. package/dist/src/unstable/source-resolution/providers/registry/host-provider.js +3 -2
  181. package/dist/src/unstable/source-resolution/providers/registry/host-provider.js.map +1 -1
  182. package/dist/src/unstable/subagents/manifest-schema.d.ts +21 -11
  183. package/dist/src/unstable/subagents/manifest-schema.d.ts.map +1 -1
  184. package/dist/src/unstable/subagents/operations/publish.d.ts.map +1 -1
  185. package/dist/src/unstable/subagents/operations/publish.js +2 -1
  186. package/dist/src/unstable/subagents/operations/publish.js.map +1 -1
  187. package/dist/src/unstable/workspace/initialization.d.ts +16 -16
  188. package/dist/src/unstable/workspace/service.d.ts +78 -22
  189. package/dist/src/unstable/workspace/service.d.ts.map +1 -1
  190. package/package.json +11 -4
  191. package/site-content/__generated__/schemas/axm-lock.schema.json +98 -0
  192. package/site-content/__generated__/schemas/command.schema.json +141 -24
  193. package/site-content/__generated__/schemas/mcp-server.schema.json +141 -24
  194. package/site-content/__generated__/schemas/pack.schema.json +141 -24
  195. package/site-content/__generated__/schemas/skill.schema.json +141 -24
  196. package/site-content/__generated__/schemas/subagent.schema.json +141 -24
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agentxm/client-core",
3
- "version": "0.8.0",
3
+ "version": "0.10.0",
4
4
  "description": "Core library for the axm agent extension manager. Unstable and unsupported — use the axm.sh CLI.",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -27,6 +27,10 @@
27
27
  "types": "./dist/src/unstable/version-constraints/version-constraints.d.ts",
28
28
  "default": "./dist/src/unstable/version-constraints/version-constraints.js"
29
29
  },
30
+ "./unstable/package-urls": {
31
+ "types": "./dist/src/unstable/package-urls/index.d.ts",
32
+ "default": "./dist/src/unstable/package-urls/index.js"
33
+ },
30
34
  "./unstable/branding": {
31
35
  "types": "./dist/src/unstable/branding.d.ts",
32
36
  "default": "./dist/src/unstable/branding.js"
@@ -207,10 +211,12 @@
207
211
  "fflate": "^0.8.2",
208
212
  "gray-matter": "^4.0.3",
209
213
  "jsonc-parser": "^3.3.1",
214
+ "marked": "^18.0.3",
210
215
  "packageurl-js": "^2.0.1",
211
- "semver": "^7.8.0",
212
216
  "proper-lockfile": "^4.1.2",
213
- "simple-git": "^3.36.0"
217
+ "semver": "^7.8.0",
218
+ "simple-git": "^3.36.0",
219
+ "spdx-expression-parse": "3.0.1"
214
220
  },
215
221
  "devDependencies": {
216
222
  "@effect/openapi-generator": "4.0.0-beta.64",
@@ -218,10 +224,11 @@
218
224
  "@types/bun": "^1.3.13",
219
225
  "@types/proper-lockfile": "^4.1.4",
220
226
  "@types/semver": "^7.5.8",
227
+ "@types/spdx-expression-parse": "4.0.0",
221
228
  "swagger2openapi": "^7.0.8",
222
229
  "typescript": "^5.9.3",
223
230
  "vitest": "^4.1.5",
224
231
  "yaml": "^2.8.4",
225
- "@agentxm/client-utils": "^0.8.0"
232
+ "@agentxm/client-utils": "^0.10.0"
226
233
  }
227
234
  }
@@ -152,6 +152,20 @@
152
152
  },
153
153
  { "type": "null" }
154
154
  ]
155
+ },
156
+ "universalArtifact": {
157
+ "anyOf": [
158
+ {
159
+ "type": "object",
160
+ "properties": {
161
+ "path": { "type": "string" },
162
+ "integrity": { "type": "string" }
163
+ },
164
+ "required": ["path", "integrity"],
165
+ "additionalProperties": false
166
+ },
167
+ { "type": "null" }
168
+ ]
155
169
  }
156
170
  },
157
171
  "required": ["type", "owner", "repo", "agents", "installedAt", "updatedAt"],
@@ -197,6 +211,20 @@
197
211
  },
198
212
  { "type": "null" }
199
213
  ]
214
+ },
215
+ "universalArtifact": {
216
+ "anyOf": [
217
+ {
218
+ "type": "object",
219
+ "properties": {
220
+ "path": { "type": "string" },
221
+ "integrity": { "type": "string" }
222
+ },
223
+ "required": ["path", "integrity"],
224
+ "additionalProperties": false
225
+ },
226
+ { "type": "null" }
227
+ ]
200
228
  }
201
229
  },
202
230
  "required": ["type", "owner", "repo", "agents", "installedAt", "updatedAt"],
@@ -242,6 +270,20 @@
242
270
  },
243
271
  { "type": "null" }
244
272
  ]
273
+ },
274
+ "universalArtifact": {
275
+ "anyOf": [
276
+ {
277
+ "type": "object",
278
+ "properties": {
279
+ "path": { "type": "string" },
280
+ "integrity": { "type": "string" }
281
+ },
282
+ "required": ["path", "integrity"],
283
+ "additionalProperties": false
284
+ },
285
+ { "type": "null" }
286
+ ]
245
287
  }
246
288
  },
247
289
  "required": ["type", "owner", "repo", "agents", "installedAt", "updatedAt"],
@@ -288,6 +330,20 @@
288
330
  },
289
331
  { "type": "null" }
290
332
  ]
333
+ },
334
+ "universalArtifact": {
335
+ "anyOf": [
336
+ {
337
+ "type": "object",
338
+ "properties": {
339
+ "path": { "type": "string" },
340
+ "integrity": { "type": "string" }
341
+ },
342
+ "required": ["path", "integrity"],
343
+ "additionalProperties": false
344
+ },
345
+ { "type": "null" }
346
+ ]
291
347
  }
292
348
  },
293
349
  "required": [
@@ -340,6 +396,20 @@
340
396
  },
341
397
  { "type": "null" }
342
398
  ]
399
+ },
400
+ "universalArtifact": {
401
+ "anyOf": [
402
+ {
403
+ "type": "object",
404
+ "properties": {
405
+ "path": { "type": "string" },
406
+ "integrity": { "type": "string" }
407
+ },
408
+ "required": ["path", "integrity"],
409
+ "additionalProperties": false
410
+ },
411
+ { "type": "null" }
412
+ ]
343
413
  }
344
414
  },
345
415
  "required": ["type", "url", "agents", "installedAt", "updatedAt"],
@@ -372,6 +442,20 @@
372
442
  },
373
443
  { "type": "null" }
374
444
  ]
445
+ },
446
+ "universalArtifact": {
447
+ "anyOf": [
448
+ {
449
+ "type": "object",
450
+ "properties": {
451
+ "path": { "type": "string" },
452
+ "integrity": { "type": "string" }
453
+ },
454
+ "required": ["path", "integrity"],
455
+ "additionalProperties": false
456
+ },
457
+ { "type": "null" }
458
+ ]
375
459
  }
376
460
  },
377
461
  "required": ["type", "path", "agents", "installedAt", "updatedAt"],
@@ -408,6 +492,20 @@
408
492
  },
409
493
  { "type": "null" }
410
494
  ]
495
+ },
496
+ "universalArtifact": {
497
+ "anyOf": [
498
+ {
499
+ "type": "object",
500
+ "properties": {
501
+ "path": { "type": "string" },
502
+ "integrity": { "type": "string" }
503
+ },
504
+ "required": ["path", "integrity"],
505
+ "additionalProperties": false
506
+ },
507
+ { "type": "null" }
508
+ ]
411
509
  }
412
510
  },
413
511
  "required": [
@@ -24,6 +24,114 @@
24
24
  }
25
25
  ]
26
26
  },
27
+ "Repository": {
28
+ "anyOf": [
29
+ {
30
+ "type": "string",
31
+ "examples": ["https://github.com/acme/code-review", "github:acme/code-review"],
32
+ "format": "uri-reference"
33
+ },
34
+ {
35
+ "type": "object",
36
+ "properties": {
37
+ "type": {
38
+ "anyOf": [
39
+ {
40
+ "type": "string",
41
+ "allOf": [
42
+ {
43
+ "minLength": 1,
44
+ "description": "Version control system (e.g., `git`).",
45
+ "examples": ["git"]
46
+ }
47
+ ]
48
+ },
49
+ { "type": "null" }
50
+ ]
51
+ },
52
+ "url": {
53
+ "type": "string",
54
+ "allOf": [
55
+ {
56
+ "minLength": 1,
57
+ "description": "Repository URL.",
58
+ "examples": ["https://github.com/acme/code-review"],
59
+ "format": "uri"
60
+ }
61
+ ]
62
+ },
63
+ "directory": {
64
+ "anyOf": [
65
+ {
66
+ "type": "string",
67
+ "allOf": [
68
+ {
69
+ "minLength": 1,
70
+ "description": "Subdirectory within the repository, for monorepo publishers.",
71
+ "examples": ["packages/code-review"]
72
+ }
73
+ ]
74
+ },
75
+ { "type": "null" }
76
+ ]
77
+ }
78
+ },
79
+ "required": ["url"],
80
+ "additionalProperties": false
81
+ }
82
+ ],
83
+ "title": "Repository",
84
+ "description": "Source repository for this extension. Accepts a URL string (or `host:owner/repo` shorthand) or an object with `type`, `url`, and optional `directory`."
85
+ },
86
+ "Bugs": {
87
+ "anyOf": [
88
+ {
89
+ "type": "string",
90
+ "examples": ["https://github.com/acme/code-review/issues"],
91
+ "format": "uri"
92
+ },
93
+ {
94
+ "type": "object",
95
+ "properties": {
96
+ "url": {
97
+ "anyOf": [
98
+ {
99
+ "type": "string",
100
+ "allOf": [
101
+ {
102
+ "minLength": 1,
103
+ "description": "Issue tracker URL.",
104
+ "examples": ["https://github.com/acme/code-review/issues"],
105
+ "format": "uri"
106
+ }
107
+ ]
108
+ },
109
+ { "type": "null" }
110
+ ]
111
+ },
112
+ "email": {
113
+ "anyOf": [
114
+ {
115
+ "type": "string",
116
+ "allOf": [
117
+ {
118
+ "minLength": 1,
119
+ "description": "Contact email for bug reports.",
120
+ "examples": ["bugs@acme.dev"],
121
+ "format": "email"
122
+ }
123
+ ]
124
+ },
125
+ { "type": "null" }
126
+ ]
127
+ }
128
+ },
129
+ "additionalProperties": false
130
+ }
131
+ ],
132
+ "title": "Bugs",
133
+ "description": "Where to report bugs against this extension. Accepts a URL string or an object with optional `url` and `email`."
134
+ },
27
135
  "Author": {
28
136
  "type": "object",
29
137
  "properties": {
@@ -36,17 +144,38 @@
36
144
  "title": "Author",
37
145
  "description": "A person credited as a creator or maintainer of this extension."
38
146
  },
39
- "PackageUrl": {
147
+ "PackageIdentityPurl": {
40
148
  "type": "string",
41
149
  "allOf": [
150
+ { "minLength": 1 },
42
151
  {
43
152
  "pattern": "^[Pp][Kk][Gg]:[a-zA-Z][a-zA-Z0-9.+-]*\\/.+$",
44
- "title": "Package URL",
45
- "description": "A Package URL (purl) string identifying a package across ecosystems (e.g. pkg:npm/react@18.2.0).",
46
- "examples": ["pkg:npm/react@18.2.0", "pkg:pypi/requests@2.31.0", "pkg:cargo/serde@1.0"]
153
+ "title": "Package Identity Purl",
154
+ "description": "A Package URL (purl) identity for a companion package. Companion package purls are identities, not pins: omit the purl @version segment and put compatibility constraints in versionRange.",
155
+ "examples": ["pkg:npm/react", "pkg:pypi/requests", "pkg:cargo/serde"]
47
156
  }
48
157
  ]
49
158
  },
159
+ "VersRange": {
160
+ "type": "string",
161
+ "allOf": [
162
+ {
163
+ "minLength": 1,
164
+ "examples": ["vers:npm/>=18.0.0|<19.0.0", "vers:pypi/>=2.31.0", "vers:cargo/>=1.0.0"]
165
+ }
166
+ ]
167
+ },
168
+ "CompanionPackage": {
169
+ "type": "object",
170
+ "properties": {
171
+ "purl": { "$ref": "#/definitions/PackageIdentityPurl" },
172
+ "versionRange": { "anyOf": [{ "$ref": "#/definitions/VersRange" }, { "type": "null" }] }
173
+ },
174
+ "required": ["purl"],
175
+ "additionalProperties": false,
176
+ "title": "Companion Package",
177
+ "description": "A companion package purl identity with an optional VERS compatibility range."
178
+ },
50
179
  "PackSpec": {
51
180
  "type": "string",
52
181
  "allOf": [
@@ -96,16 +225,7 @@
96
225
  { "type": "null" }
97
226
  ]
98
227
  },
99
- "repository": {
100
- "anyOf": [
101
- {
102
- "type": "string",
103
- "examples": ["https://github.com/acme/code-review"],
104
- "format": "uri"
105
- },
106
- { "type": "null" }
107
- ]
108
- },
228
+ "repository": { "anyOf": [{ "$ref": "#/definitions/Repository" }, { "type": "null" }] },
109
229
  "homepage": {
110
230
  "anyOf": [
111
231
  { "type": "string", "examples": ["https://acme.dev/code-review"], "format": "uri" },
@@ -113,21 +233,18 @@
113
233
  ]
114
234
  },
115
235
  "license": {
116
- "anyOf": [
117
- { "type": "string", "allOf": [{ "minLength": 1, "examples": ["MIT", "Apache-2.0"] }] },
118
- { "type": "null" }
119
- ]
120
- },
121
- "bugs": {
122
236
  "anyOf": [
123
237
  {
124
238
  "type": "string",
125
- "examples": ["https://github.com/acme/code-review/issues"],
126
- "format": "uri"
239
+ "title": "License",
240
+ "description": "SPDX license expression, or `UNLICENSED` for proprietary code.",
241
+ "examples": ["MIT", "Apache-2.0", "MIT OR Apache-2.0", "UNLICENSED"],
242
+ "format": "spdx-expression"
127
243
  },
128
244
  { "type": "null" }
129
245
  ]
130
246
  },
247
+ "bugs": { "anyOf": [{ "$ref": "#/definitions/Bugs" }, { "type": "null" }] },
131
248
  "authors": {
132
249
  "anyOf": [
133
250
  { "type": "array", "items": { "$ref": "#/definitions/Author" } },
@@ -138,8 +255,8 @@
138
255
  "anyOf": [
139
256
  {
140
257
  "type": "array",
141
- "description": "External ecosystem packages this extension is designed to work with (e.g. the npm or PyPI package an MCP server wraps), identified by Package URL (purl).",
142
- "items": { "$ref": "#/definitions/PackageUrl" }
258
+ "description": "External ecosystem packages this extension is designed to work with, declared as identity Package URLs with optional VERS compatibility ranges.",
259
+ "items": { "$ref": "#/definitions/CompanionPackage" }
143
260
  },
144
261
  { "type": "null" }
145
262
  ]
@@ -24,6 +24,114 @@
24
24
  }
25
25
  ]
26
26
  },
27
+ "Repository": {
28
+ "anyOf": [
29
+ {
30
+ "type": "string",
31
+ "examples": ["https://github.com/acme/code-review", "github:acme/code-review"],
32
+ "format": "uri-reference"
33
+ },
34
+ {
35
+ "type": "object",
36
+ "properties": {
37
+ "type": {
38
+ "anyOf": [
39
+ {
40
+ "type": "string",
41
+ "allOf": [
42
+ {
43
+ "minLength": 1,
44
+ "description": "Version control system (e.g., `git`).",
45
+ "examples": ["git"]
46
+ }
47
+ ]
48
+ },
49
+ { "type": "null" }
50
+ ]
51
+ },
52
+ "url": {
53
+ "type": "string",
54
+ "allOf": [
55
+ {
56
+ "minLength": 1,
57
+ "description": "Repository URL.",
58
+ "examples": ["https://github.com/acme/code-review"],
59
+ "format": "uri"
60
+ }
61
+ ]
62
+ },
63
+ "directory": {
64
+ "anyOf": [
65
+ {
66
+ "type": "string",
67
+ "allOf": [
68
+ {
69
+ "minLength": 1,
70
+ "description": "Subdirectory within the repository, for monorepo publishers.",
71
+ "examples": ["packages/code-review"]
72
+ }
73
+ ]
74
+ },
75
+ { "type": "null" }
76
+ ]
77
+ }
78
+ },
79
+ "required": ["url"],
80
+ "additionalProperties": false
81
+ }
82
+ ],
83
+ "title": "Repository",
84
+ "description": "Source repository for this extension. Accepts a URL string (or `host:owner/repo` shorthand) or an object with `type`, `url`, and optional `directory`."
85
+ },
86
+ "Bugs": {
87
+ "anyOf": [
88
+ {
89
+ "type": "string",
90
+ "examples": ["https://github.com/acme/code-review/issues"],
91
+ "format": "uri"
92
+ },
93
+ {
94
+ "type": "object",
95
+ "properties": {
96
+ "url": {
97
+ "anyOf": [
98
+ {
99
+ "type": "string",
100
+ "allOf": [
101
+ {
102
+ "minLength": 1,
103
+ "description": "Issue tracker URL.",
104
+ "examples": ["https://github.com/acme/code-review/issues"],
105
+ "format": "uri"
106
+ }
107
+ ]
108
+ },
109
+ { "type": "null" }
110
+ ]
111
+ },
112
+ "email": {
113
+ "anyOf": [
114
+ {
115
+ "type": "string",
116
+ "allOf": [
117
+ {
118
+ "minLength": 1,
119
+ "description": "Contact email for bug reports.",
120
+ "examples": ["bugs@acme.dev"],
121
+ "format": "email"
122
+ }
123
+ ]
124
+ },
125
+ { "type": "null" }
126
+ ]
127
+ }
128
+ },
129
+ "additionalProperties": false
130
+ }
131
+ ],
132
+ "title": "Bugs",
133
+ "description": "Where to report bugs against this extension. Accepts a URL string or an object with optional `url` and `email`."
134
+ },
27
135
  "Author": {
28
136
  "type": "object",
29
137
  "properties": {
@@ -36,17 +144,38 @@
36
144
  "title": "Author",
37
145
  "description": "A person credited as a creator or maintainer of this extension."
38
146
  },
39
- "PackageUrl": {
147
+ "PackageIdentityPurl": {
40
148
  "type": "string",
41
149
  "allOf": [
150
+ { "minLength": 1 },
42
151
  {
43
152
  "pattern": "^[Pp][Kk][Gg]:[a-zA-Z][a-zA-Z0-9.+-]*\\/.+$",
44
- "title": "Package URL",
45
- "description": "A Package URL (purl) string identifying a package across ecosystems (e.g. pkg:npm/react@18.2.0).",
46
- "examples": ["pkg:npm/react@18.2.0", "pkg:pypi/requests@2.31.0", "pkg:cargo/serde@1.0"]
153
+ "title": "Package Identity Purl",
154
+ "description": "A Package URL (purl) identity for a companion package. Companion package purls are identities, not pins: omit the purl @version segment and put compatibility constraints in versionRange.",
155
+ "examples": ["pkg:npm/react", "pkg:pypi/requests", "pkg:cargo/serde"]
47
156
  }
48
157
  ]
49
158
  },
159
+ "VersRange": {
160
+ "type": "string",
161
+ "allOf": [
162
+ {
163
+ "minLength": 1,
164
+ "examples": ["vers:npm/>=18.0.0|<19.0.0", "vers:pypi/>=2.31.0", "vers:cargo/>=1.0.0"]
165
+ }
166
+ ]
167
+ },
168
+ "CompanionPackage": {
169
+ "type": "object",
170
+ "properties": {
171
+ "purl": { "$ref": "#/definitions/PackageIdentityPurl" },
172
+ "versionRange": { "anyOf": [{ "$ref": "#/definitions/VersRange" }, { "type": "null" }] }
173
+ },
174
+ "required": ["purl"],
175
+ "additionalProperties": false,
176
+ "title": "Companion Package",
177
+ "description": "A companion package purl identity with an optional VERS compatibility range."
178
+ },
50
179
  "PackSpec": {
51
180
  "type": "string",
52
181
  "allOf": [
@@ -96,16 +225,7 @@
96
225
  { "type": "null" }
97
226
  ]
98
227
  },
99
- "repository": {
100
- "anyOf": [
101
- {
102
- "type": "string",
103
- "examples": ["https://github.com/acme/code-review"],
104
- "format": "uri"
105
- },
106
- { "type": "null" }
107
- ]
108
- },
228
+ "repository": { "anyOf": [{ "$ref": "#/definitions/Repository" }, { "type": "null" }] },
109
229
  "homepage": {
110
230
  "anyOf": [
111
231
  { "type": "string", "examples": ["https://acme.dev/code-review"], "format": "uri" },
@@ -113,21 +233,18 @@
113
233
  ]
114
234
  },
115
235
  "license": {
116
- "anyOf": [
117
- { "type": "string", "allOf": [{ "minLength": 1, "examples": ["MIT", "Apache-2.0"] }] },
118
- { "type": "null" }
119
- ]
120
- },
121
- "bugs": {
122
236
  "anyOf": [
123
237
  {
124
238
  "type": "string",
125
- "examples": ["https://github.com/acme/code-review/issues"],
126
- "format": "uri"
239
+ "title": "License",
240
+ "description": "SPDX license expression, or `UNLICENSED` for proprietary code.",
241
+ "examples": ["MIT", "Apache-2.0", "MIT OR Apache-2.0", "UNLICENSED"],
242
+ "format": "spdx-expression"
127
243
  },
128
244
  { "type": "null" }
129
245
  ]
130
246
  },
247
+ "bugs": { "anyOf": [{ "$ref": "#/definitions/Bugs" }, { "type": "null" }] },
131
248
  "authors": {
132
249
  "anyOf": [
133
250
  { "type": "array", "items": { "$ref": "#/definitions/Author" } },
@@ -138,8 +255,8 @@
138
255
  "anyOf": [
139
256
  {
140
257
  "type": "array",
141
- "description": "External ecosystem packages this extension is designed to work with (e.g. the npm or PyPI package an MCP server wraps), identified by Package URL (purl).",
142
- "items": { "$ref": "#/definitions/PackageUrl" }
258
+ "description": "External ecosystem packages this extension is designed to work with, declared as identity Package URLs with optional VERS compatibility ranges.",
259
+ "items": { "$ref": "#/definitions/CompanionPackage" }
143
260
  },
144
261
  { "type": "null" }
145
262
  ]