@agentxm/client-core 0.9.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 (192) 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 +12 -9
  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 +12 -11
  50. package/dist/src/unstable/commands/operations/shared-command-helpers.d.ts.map +1 -1
  51. package/dist/src/unstable/extensions/common.d.ts +21 -9
  52. package/dist/src/unstable/extensions/common.d.ts.map +1 -1
  53. package/dist/src/unstable/extensions/common.js +22 -6
  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 +12 -9
  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/gem.d.ts.map +1 -1
  119. package/dist/src/unstable/packaging/gem.js +30 -15
  120. package/dist/src/unstable/packaging/gem.js.map +1 -1
  121. package/dist/src/unstable/packs/manifest-schema.d.ts +12 -9
  122. package/dist/src/unstable/packs/manifest-schema.d.ts.map +1 -1
  123. package/dist/src/unstable/packs/operations/publish.d.ts.map +1 -1
  124. package/dist/src/unstable/packs/operations/publish.js +2 -1
  125. package/dist/src/unstable/packs/operations/publish.js.map +1 -1
  126. package/dist/src/unstable/plan/plan.d.ts +3 -0
  127. package/dist/src/unstable/plan/plan.d.ts.map +1 -1
  128. package/dist/src/unstable/publish/manifest-policy.d.ts +61 -46
  129. package/dist/src/unstable/publish/manifest-policy.d.ts.map +1 -1
  130. package/dist/src/unstable/publish/manifest-policy.js +75 -5
  131. package/dist/src/unstable/publish/manifest-policy.js.map +1 -1
  132. package/dist/src/unstable/registry/__generated__/registry-client.d.ts +121 -21
  133. package/dist/src/unstable/registry/__generated__/registry-client.d.ts.map +1 -1
  134. package/dist/src/unstable/registry/__generated__/registry-client.js +78 -12
  135. package/dist/src/unstable/registry/__generated__/registry-client.js.map +1 -1
  136. package/dist/src/unstable/registry/client.d.ts +4 -0
  137. package/dist/src/unstable/registry/client.d.ts.map +1 -1
  138. package/dist/src/unstable/registry/client.js.map +1 -1
  139. package/dist/src/unstable/registry/index.d.ts +1 -1
  140. package/dist/src/unstable/registry/index.d.ts.map +1 -1
  141. package/dist/src/unstable/registry/index.js +1 -1
  142. package/dist/src/unstable/registry/index.js.map +1 -1
  143. package/dist/src/unstable/registry/local-client.d.ts.map +1 -1
  144. package/dist/src/unstable/registry/local-client.js +10 -5
  145. package/dist/src/unstable/registry/local-client.js.map +1 -1
  146. package/dist/src/unstable/registry/remote-client.d.ts.map +1 -1
  147. package/dist/src/unstable/registry/remote-client.js +4 -4
  148. package/dist/src/unstable/registry/remote-client.js.map +1 -1
  149. package/dist/src/unstable/registry/schema.d.ts +26 -16
  150. package/dist/src/unstable/registry/schema.d.ts.map +1 -1
  151. package/dist/src/unstable/registry/schema.js +14 -1
  152. package/dist/src/unstable/registry/schema.js.map +1 -1
  153. package/dist/src/unstable/skills/manifest-schema.d.ts +12 -9
  154. package/dist/src/unstable/skills/manifest-schema.d.ts.map +1 -1
  155. package/dist/src/unstable/skills/operations/disable.d.ts.map +1 -1
  156. package/dist/src/unstable/skills/operations/disable.js +14 -1
  157. package/dist/src/unstable/skills/operations/disable.js.map +1 -1
  158. package/dist/src/unstable/skills/operations/enable.d.ts.map +1 -1
  159. package/dist/src/unstable/skills/operations/enable.js +17 -1
  160. package/dist/src/unstable/skills/operations/enable.js.map +1 -1
  161. package/dist/src/unstable/skills/operations/install.d.ts +1 -8
  162. package/dist/src/unstable/skills/operations/install.d.ts.map +1 -1
  163. package/dist/src/unstable/skills/operations/install.js +47 -22
  164. package/dist/src/unstable/skills/operations/install.js.map +1 -1
  165. package/dist/src/unstable/skills/operations/publish.d.ts.map +1 -1
  166. package/dist/src/unstable/skills/operations/publish.js +2 -1
  167. package/dist/src/unstable/skills/operations/publish.js.map +1 -1
  168. package/dist/src/unstable/skills/operations/uninstall.d.ts.map +1 -1
  169. package/dist/src/unstable/skills/operations/uninstall.js +5 -0
  170. package/dist/src/unstable/skills/operations/uninstall.js.map +1 -1
  171. package/dist/src/unstable/skills/operations/universal-artifact.d.ts +43 -0
  172. package/dist/src/unstable/skills/operations/universal-artifact.d.ts.map +1 -0
  173. package/dist/src/unstable/skills/operations/universal-artifact.js +77 -0
  174. package/dist/src/unstable/skills/operations/universal-artifact.js.map +1 -0
  175. package/dist/src/unstable/source-resolution/providers/registry/host-provider.d.ts.map +1 -1
  176. package/dist/src/unstable/source-resolution/providers/registry/host-provider.js +2 -2
  177. package/dist/src/unstable/source-resolution/providers/registry/host-provider.js.map +1 -1
  178. package/dist/src/unstable/subagents/manifest-schema.d.ts +12 -9
  179. package/dist/src/unstable/subagents/manifest-schema.d.ts.map +1 -1
  180. package/dist/src/unstable/subagents/operations/publish.d.ts.map +1 -1
  181. package/dist/src/unstable/subagents/operations/publish.js +2 -1
  182. package/dist/src/unstable/subagents/operations/publish.js.map +1 -1
  183. package/dist/src/unstable/workspace/initialization.d.ts +16 -16
  184. package/dist/src/unstable/workspace/service.d.ts +78 -22
  185. package/dist/src/unstable/workspace/service.d.ts.map +1 -1
  186. package/package.json +11 -4
  187. package/site-content/__generated__/schemas/axm-lock.schema.json +98 -0
  188. package/site-content/__generated__/schemas/command.schema.json +34 -7
  189. package/site-content/__generated__/schemas/mcp-server.schema.json +34 -7
  190. package/site-content/__generated__/schemas/pack.schema.json +34 -7
  191. package/site-content/__generated__/schemas/skill.schema.json +34 -7
  192. package/site-content/__generated__/schemas/subagent.schema.json +34 -7
@@ -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": [
@@ -144,17 +144,38 @@
144
144
  "title": "Author",
145
145
  "description": "A person credited as a creator or maintainer of this extension."
146
146
  },
147
- "PackageUrl": {
147
+ "PackageIdentityPurl": {
148
148
  "type": "string",
149
149
  "allOf": [
150
+ { "minLength": 1 },
150
151
  {
151
152
  "pattern": "^[Pp][Kk][Gg]:[a-zA-Z][a-zA-Z0-9.+-]*\\/.+$",
152
- "title": "Package URL",
153
- "description": "A Package URL (purl) string identifying a package across ecosystems (e.g. pkg:npm/react@18.2.0).",
154
- "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"]
156
+ }
157
+ ]
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"]
155
165
  }
156
166
  ]
157
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
+ },
158
179
  "PackSpec": {
159
180
  "type": "string",
160
181
  "allOf": [
@@ -213,7 +234,13 @@
213
234
  },
214
235
  "license": {
215
236
  "anyOf": [
216
- { "type": "string", "allOf": [{ "minLength": 1, "examples": ["MIT", "Apache-2.0"] }] },
237
+ {
238
+ "type": "string",
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"
243
+ },
217
244
  { "type": "null" }
218
245
  ]
219
246
  },
@@ -228,8 +255,8 @@
228
255
  "anyOf": [
229
256
  {
230
257
  "type": "array",
231
- "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).",
232
- "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" }
233
260
  },
234
261
  { "type": "null" }
235
262
  ]
@@ -144,17 +144,38 @@
144
144
  "title": "Author",
145
145
  "description": "A person credited as a creator or maintainer of this extension."
146
146
  },
147
- "PackageUrl": {
147
+ "PackageIdentityPurl": {
148
148
  "type": "string",
149
149
  "allOf": [
150
+ { "minLength": 1 },
150
151
  {
151
152
  "pattern": "^[Pp][Kk][Gg]:[a-zA-Z][a-zA-Z0-9.+-]*\\/.+$",
152
- "title": "Package URL",
153
- "description": "A Package URL (purl) string identifying a package across ecosystems (e.g. pkg:npm/react@18.2.0).",
154
- "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"]
156
+ }
157
+ ]
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"]
155
165
  }
156
166
  ]
157
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
+ },
158
179
  "PackSpec": {
159
180
  "type": "string",
160
181
  "allOf": [
@@ -213,7 +234,13 @@
213
234
  },
214
235
  "license": {
215
236
  "anyOf": [
216
- { "type": "string", "allOf": [{ "minLength": 1, "examples": ["MIT", "Apache-2.0"] }] },
237
+ {
238
+ "type": "string",
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"
243
+ },
217
244
  { "type": "null" }
218
245
  ]
219
246
  },
@@ -228,8 +255,8 @@
228
255
  "anyOf": [
229
256
  {
230
257
  "type": "array",
231
- "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).",
232
- "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" }
233
260
  },
234
261
  { "type": "null" }
235
262
  ]
@@ -144,17 +144,38 @@
144
144
  "title": "Author",
145
145
  "description": "A person credited as a creator or maintainer of this extension."
146
146
  },
147
- "PackageUrl": {
147
+ "PackageIdentityPurl": {
148
148
  "type": "string",
149
149
  "allOf": [
150
+ { "minLength": 1 },
150
151
  {
151
152
  "pattern": "^[Pp][Kk][Gg]:[a-zA-Z][a-zA-Z0-9.+-]*\\/.+$",
152
- "title": "Package URL",
153
- "description": "A Package URL (purl) string identifying a package across ecosystems (e.g. pkg:npm/react@18.2.0).",
154
- "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"]
156
+ }
157
+ ]
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"]
155
165
  }
156
166
  ]
157
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
+ },
158
179
  "ExtensionName": {
159
180
  "type": "string",
160
181
  "allOf": [
@@ -224,7 +245,13 @@
224
245
  },
225
246
  "license": {
226
247
  "anyOf": [
227
- { "type": "string", "allOf": [{ "minLength": 1, "examples": ["MIT", "Apache-2.0"] }] },
248
+ {
249
+ "type": "string",
250
+ "title": "License",
251
+ "description": "SPDX license expression, or `UNLICENSED` for proprietary code.",
252
+ "examples": ["MIT", "Apache-2.0", "MIT OR Apache-2.0", "UNLICENSED"],
253
+ "format": "spdx-expression"
254
+ },
228
255
  { "type": "null" }
229
256
  ]
230
257
  },
@@ -239,8 +266,8 @@
239
266
  "anyOf": [
240
267
  {
241
268
  "type": "array",
242
- "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).",
243
- "items": { "$ref": "#/definitions/PackageUrl" }
269
+ "description": "External ecosystem packages this extension is designed to work with, declared as identity Package URLs with optional VERS compatibility ranges.",
270
+ "items": { "$ref": "#/definitions/CompanionPackage" }
244
271
  },
245
272
  { "type": "null" }
246
273
  ]
@@ -144,17 +144,38 @@
144
144
  "title": "Author",
145
145
  "description": "A person credited as a creator or maintainer of this extension."
146
146
  },
147
- "PackageUrl": {
147
+ "PackageIdentityPurl": {
148
148
  "type": "string",
149
149
  "allOf": [
150
+ { "minLength": 1 },
150
151
  {
151
152
  "pattern": "^[Pp][Kk][Gg]:[a-zA-Z][a-zA-Z0-9.+-]*\\/.+$",
152
- "title": "Package URL",
153
- "description": "A Package URL (purl) string identifying a package across ecosystems (e.g. pkg:npm/react@18.2.0).",
154
- "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"]
156
+ }
157
+ ]
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"]
155
165
  }
156
166
  ]
157
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
+ },
158
179
  "PackSpec": {
159
180
  "type": "string",
160
181
  "allOf": [
@@ -213,7 +234,13 @@
213
234
  },
214
235
  "license": {
215
236
  "anyOf": [
216
- { "type": "string", "allOf": [{ "minLength": 1, "examples": ["MIT", "Apache-2.0"] }] },
237
+ {
238
+ "type": "string",
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"
243
+ },
217
244
  { "type": "null" }
218
245
  ]
219
246
  },
@@ -228,8 +255,8 @@
228
255
  "anyOf": [
229
256
  {
230
257
  "type": "array",
231
- "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).",
232
- "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" }
233
260
  },
234
261
  { "type": "null" }
235
262
  ]
@@ -144,17 +144,38 @@
144
144
  "title": "Author",
145
145
  "description": "A person credited as a creator or maintainer of this extension."
146
146
  },
147
- "PackageUrl": {
147
+ "PackageIdentityPurl": {
148
148
  "type": "string",
149
149
  "allOf": [
150
+ { "minLength": 1 },
150
151
  {
151
152
  "pattern": "^[Pp][Kk][Gg]:[a-zA-Z][a-zA-Z0-9.+-]*\\/.+$",
152
- "title": "Package URL",
153
- "description": "A Package URL (purl) string identifying a package across ecosystems (e.g. pkg:npm/react@18.2.0).",
154
- "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"]
156
+ }
157
+ ]
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"]
155
165
  }
156
166
  ]
157
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
+ },
158
179
  "PackSpec": {
159
180
  "type": "string",
160
181
  "allOf": [
@@ -213,7 +234,13 @@
213
234
  },
214
235
  "license": {
215
236
  "anyOf": [
216
- { "type": "string", "allOf": [{ "minLength": 1, "examples": ["MIT", "Apache-2.0"] }] },
237
+ {
238
+ "type": "string",
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"
243
+ },
217
244
  { "type": "null" }
218
245
  ]
219
246
  },
@@ -228,8 +255,8 @@
228
255
  "anyOf": [
229
256
  {
230
257
  "type": "array",
231
- "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).",
232
- "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" }
233
260
  },
234
261
  { "type": "null" }
235
262
  ]