@contractspec/bundle.library 2.9.1 → 3.0.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 (86) hide show
  1. package/.turbo/turbo-build.log +129 -115
  2. package/CHANGELOG.md +38 -0
  3. package/dist/components/docs/DocsIndexPage.js +1 -1
  4. package/dist/components/docs/architecture/ArchitectureControlPlanePage.d.ts +1 -0
  5. package/dist/components/docs/architecture/ArchitectureControlPlanePage.js +204 -0
  6. package/dist/components/docs/architecture/ArchitectureOverviewPage.js +17 -1
  7. package/dist/components/docs/architecture/index.d.ts +1 -0
  8. package/dist/components/docs/architecture/index.js +507 -289
  9. package/dist/components/docs/ecosystem/IntegrationsPage.js +6 -3
  10. package/dist/components/docs/ecosystem/PluginsPage.js +98 -98
  11. package/dist/components/docs/ecosystem/RegistryPage.js +39 -42
  12. package/dist/components/docs/ecosystem/TemplatesPage.js +26 -21
  13. package/dist/components/docs/ecosystem/ecosystem.docblocks.js +10 -10
  14. package/dist/components/docs/ecosystem/index.js +179 -174
  15. package/dist/components/docs/index.js +6795 -5376
  16. package/dist/components/docs/integrations/IntegrationsElevenLabsPage.js +2 -2
  17. package/dist/components/docs/integrations/IntegrationsGithubPage.d.ts +1 -0
  18. package/dist/components/docs/integrations/IntegrationsGithubPage.js +155 -0
  19. package/dist/components/docs/integrations/IntegrationsHealthRoutingPage.d.ts +1 -0
  20. package/dist/components/docs/integrations/IntegrationsHealthRoutingPage.js +168 -0
  21. package/dist/components/docs/integrations/IntegrationsMistralPage.d.ts +1 -0
  22. package/dist/components/docs/integrations/IntegrationsMistralPage.js +203 -0
  23. package/dist/components/docs/integrations/IntegrationsOpenAIPage.js +2 -2
  24. package/dist/components/docs/integrations/IntegrationsOverviewPage.js +136 -9
  25. package/dist/components/docs/integrations/IntegrationsSlackPage.d.ts +1 -0
  26. package/dist/components/docs/integrations/IntegrationsSlackPage.js +161 -0
  27. package/dist/components/docs/integrations/IntegrationsSpecModelPage.js +72 -0
  28. package/dist/components/docs/integrations/IntegrationsTwilioPage.js +2 -2
  29. package/dist/components/docs/integrations/IntegrationsWhatsappMetaPage.d.ts +1 -0
  30. package/dist/components/docs/integrations/IntegrationsWhatsappMetaPage.js +157 -0
  31. package/dist/components/docs/integrations/IntegrationsWhatsappTwilioPage.d.ts +1 -0
  32. package/dist/components/docs/integrations/IntegrationsWhatsappTwilioPage.js +165 -0
  33. package/dist/components/docs/integrations/index.d.ts +6 -0
  34. package/dist/components/docs/integrations/index.js +1688 -492
  35. package/dist/index.js +8016 -6597
  36. package/dist/node/components/docs/DocsIndexPage.js +1 -1
  37. package/dist/node/components/docs/architecture/ArchitectureControlPlanePage.js +203 -0
  38. package/dist/node/components/docs/architecture/ArchitectureOverviewPage.js +17 -1
  39. package/dist/node/components/docs/architecture/index.js +507 -289
  40. package/dist/node/components/docs/ecosystem/IntegrationsPage.js +6 -3
  41. package/dist/node/components/docs/ecosystem/PluginsPage.js +98 -98
  42. package/dist/node/components/docs/ecosystem/RegistryPage.js +39 -42
  43. package/dist/node/components/docs/ecosystem/TemplatesPage.js +26 -21
  44. package/dist/node/components/docs/ecosystem/ecosystem.docblocks.js +10 -10
  45. package/dist/node/components/docs/ecosystem/index.js +179 -174
  46. package/dist/node/components/docs/index.js +6795 -5376
  47. package/dist/node/components/docs/integrations/IntegrationsElevenLabsPage.js +2 -2
  48. package/dist/node/components/docs/integrations/IntegrationsGithubPage.js +154 -0
  49. package/dist/node/components/docs/integrations/IntegrationsHealthRoutingPage.js +167 -0
  50. package/dist/node/components/docs/integrations/IntegrationsMistralPage.js +202 -0
  51. package/dist/node/components/docs/integrations/IntegrationsOpenAIPage.js +2 -2
  52. package/dist/node/components/docs/integrations/IntegrationsOverviewPage.js +136 -9
  53. package/dist/node/components/docs/integrations/IntegrationsSlackPage.js +160 -0
  54. package/dist/node/components/docs/integrations/IntegrationsSpecModelPage.js +72 -0
  55. package/dist/node/components/docs/integrations/IntegrationsTwilioPage.js +2 -2
  56. package/dist/node/components/docs/integrations/IntegrationsWhatsappMetaPage.js +156 -0
  57. package/dist/node/components/docs/integrations/IntegrationsWhatsappTwilioPage.js +164 -0
  58. package/dist/node/components/docs/integrations/index.js +1688 -492
  59. package/dist/node/index.js +8016 -6597
  60. package/package.json +104 -20
  61. package/src/components/docs/DocsIndexPage.tsx +2 -1
  62. package/src/components/docs/architecture/ArchitectureControlPlanePage.tsx +136 -0
  63. package/src/components/docs/architecture/ArchitectureOverviewPage.tsx +13 -1
  64. package/src/components/docs/architecture/index.ts +1 -0
  65. package/src/components/docs/ecosystem/IntegrationsPage.tsx +4 -3
  66. package/src/components/docs/ecosystem/PluginsPage.tsx +68 -87
  67. package/src/components/docs/ecosystem/RegistryPage.tsx +35 -43
  68. package/src/components/docs/ecosystem/TemplatesPage.tsx +28 -21
  69. package/src/components/docs/ecosystem/ecosystem.docblocks.ts +12 -10
  70. package/src/components/docs/generated/docs-index._common.json +240 -0
  71. package/src/components/docs/generated/docs-index.health.json +98 -0
  72. package/src/components/docs/generated/docs-index.manifest.json +14 -4
  73. package/src/components/docs/generated/docs-index.platform-integrations.json +81 -1
  74. package/src/components/docs/generated/docs-index.video-api-showcase.json +26 -0
  75. package/src/components/docs/integrations/IntegrationsElevenLabsPage.tsx +2 -2
  76. package/src/components/docs/integrations/IntegrationsGithubPage.tsx +90 -0
  77. package/src/components/docs/integrations/IntegrationsHealthRoutingPage.tsx +112 -0
  78. package/src/components/docs/integrations/IntegrationsMistralPage.tsx +133 -0
  79. package/src/components/docs/integrations/IntegrationsOpenAIPage.tsx +2 -2
  80. package/src/components/docs/integrations/IntegrationsOverviewPage.tsx +108 -9
  81. package/src/components/docs/integrations/IntegrationsSlackPage.tsx +98 -0
  82. package/src/components/docs/integrations/IntegrationsSpecModelPage.tsx +59 -0
  83. package/src/components/docs/integrations/IntegrationsTwilioPage.tsx +2 -2
  84. package/src/components/docs/integrations/IntegrationsWhatsappMetaPage.tsx +90 -0
  85. package/src/components/docs/integrations/IntegrationsWhatsappTwilioPage.tsx +92 -0
  86. package/src/components/docs/integrations/index.ts +6 -0
@@ -59,7 +59,10 @@ bun add -D @contractspec/lib.plugin.example-generator`
59
59
  children: "Email: Postmark, Gmail"
60
60
  }, undefined, false, undefined, this),
61
61
  /* @__PURE__ */ jsxDEV("li", {
62
- children: "Voice: ElevenLabs"
62
+ children: "AI: OpenAI, Mistral"
63
+ }, undefined, false, undefined, this),
64
+ /* @__PURE__ */ jsxDEV("li", {
65
+ children: "Voice: ElevenLabs, Mistral"
63
66
  }, undefined, false, undefined, this),
64
67
  /* @__PURE__ */ jsxDEV("li", {
65
68
  children: "Vector DB: Qdrant"
@@ -82,7 +85,7 @@ bun add -D @contractspec/lib.plugin.example-generator`
82
85
  href: "/docs/ecosystem/registry",
83
86
  className: "btn-primary",
84
87
  children: [
85
- "Registry resolution ",
88
+ "Marketplace manifest ",
86
89
  /* @__PURE__ */ jsxDEV(ChevronRight, {
87
90
  size: 16
88
91
  }, undefined, false, undefined, this)
@@ -91,7 +94,7 @@ bun add -D @contractspec/lib.plugin.example-generator`
91
94
  /* @__PURE__ */ jsxDEV(Link, {
92
95
  href: "/docs/ecosystem/templates",
93
96
  className: "btn-ghost",
94
- children: "Plugin templates"
97
+ children: "Authoring templates"
95
98
  }, undefined, false, undefined, this)
96
99
  ]
97
100
  }, undefined, true, undefined, this)
@@ -113,11 +116,11 @@ function EcosystemPluginsPage() {
113
116
  children: [
114
117
  /* @__PURE__ */ jsxDEV2("h1", {
115
118
  className: "text-4xl font-bold",
116
- children: "Plugin API"
119
+ children: "Cursor marketplace plugins"
117
120
  }, undefined, false, undefined, this),
118
121
  /* @__PURE__ */ jsxDEV2("p", {
119
122
  className: "text-muted-foreground text-lg",
120
- children: "Extend ContractSpec with generators, validators, adapters, formatters, and registry resolvers."
123
+ children: "ContractSpec ships a focused Cursor marketplace catalog for the product and key libraries."
121
124
  }, undefined, false, undefined, this)
122
125
  ]
123
126
  }, undefined, true, undefined, this),
@@ -126,26 +129,55 @@ function EcosystemPluginsPage() {
126
129
  children: [
127
130
  /* @__PURE__ */ jsxDEV2("h2", {
128
131
  className: "text-2xl font-bold",
129
- children: "Core capabilities"
132
+ children: "Catalog at a glance"
130
133
  }, undefined, false, undefined, this),
131
134
  /* @__PURE__ */ jsxDEV2("ul", {
132
135
  className: "text-muted-foreground space-y-2 text-sm",
133
136
  children: [
134
137
  /* @__PURE__ */ jsxDEV2("li", {
135
- children: "Generators for code, docs, and schemas."
136
- }, undefined, false, undefined, this),
137
- /* @__PURE__ */ jsxDEV2("li", {
138
- children: "Validators for policy checks and compliance gates."
139
- }, undefined, false, undefined, this),
138
+ children: [
139
+ /* @__PURE__ */ jsxDEV2("code", {
140
+ children: "contractspec"
141
+ }, undefined, false, undefined, this),
142
+ " - Product-level workflow and release guardrails."
143
+ ]
144
+ }, undefined, true, undefined, this),
140
145
  /* @__PURE__ */ jsxDEV2("li", {
141
- children: "Adapters for framework and runtime integration."
142
- }, undefined, false, undefined, this),
146
+ children: [
147
+ /* @__PURE__ */ jsxDEV2("code", {
148
+ children: "contractspec-contracts-spec"
149
+ }, undefined, false, undefined, this),
150
+ " -",
151
+ /* @__PURE__ */ jsxDEV2("code", {
152
+ children: "@contractspec/lib.contracts-spec"
153
+ }, undefined, false, undefined, this),
154
+ " governance."
155
+ ]
156
+ }, undefined, true, undefined, this),
143
157
  /* @__PURE__ */ jsxDEV2("li", {
144
- children: "Formatters and diff renderers for deterministic output."
145
- }, undefined, false, undefined, this),
158
+ children: [
159
+ /* @__PURE__ */ jsxDEV2("code", {
160
+ children: "contractspec-contracts-integrations"
161
+ }, undefined, false, undefined, this),
162
+ " -",
163
+ /* @__PURE__ */ jsxDEV2("code", {
164
+ children: "@contractspec/lib.contracts-integrations"
165
+ }, undefined, false, undefined, this),
166
+ " governance."
167
+ ]
168
+ }, undefined, true, undefined, this),
146
169
  /* @__PURE__ */ jsxDEV2("li", {
147
- children: "Registry resolvers for local and remote plugin discovery."
148
- }, undefined, false, undefined, this)
170
+ children: [
171
+ /* @__PURE__ */ jsxDEV2("code", {
172
+ children: "contractspec-ai-agent"
173
+ }, undefined, false, undefined, this),
174
+ " -",
175
+ /* @__PURE__ */ jsxDEV2("code", {
176
+ children: "@contractspec/lib.ai-agent"
177
+ }, undefined, false, undefined, this),
178
+ " orchestration guardrails."
179
+ ]
180
+ }, undefined, true, undefined, this)
149
181
  ]
150
182
  }, undefined, true, undefined, this)
151
183
  ]
@@ -158,80 +190,21 @@ function EcosystemPluginsPage() {
158
190
  children: [
159
191
  /* @__PURE__ */ jsxDEV2("h2", {
160
192
  className: "text-2xl font-bold",
161
- children: "Plugin interface"
162
- }, undefined, false, undefined, this),
163
- /* @__PURE__ */ jsxDEV2("p", {
164
- className: "text-muted-foreground text-sm",
165
- children: "Define capabilities and lifecycle hooks in a single plugin entrypoint."
166
- }, undefined, false, undefined, this),
167
- /* @__PURE__ */ jsxDEV2(CodeBlock2, {
168
- language: "typescript",
169
- filename: "plugin.ts",
170
- code: `import type {
171
- ContractSpecPlugin,
172
- PluginContext,
173
- GeneratorCapability,
174
- } from "@contractspec/lib.plugins";
175
-
176
- export const MarkdownGeneratorPlugin: ContractSpecPlugin = {
177
- meta: {
178
- id: "markdown-generator",
179
- version: "1.0.0",
180
- type: "generator",
181
- provides: ["docs"],
182
- },
183
- register(context: PluginContext) {
184
- const generator: GeneratorCapability = {
185
- id: "markdown",
186
- description: "Generate Markdown docs",
187
- generate: async (specs) => {
188
- // Implementation...
189
- },
190
- };
191
-
192
- context.generators.register(generator);
193
- },
194
- };`
195
- }, undefined, false, undefined, this)
196
- ]
197
- }, undefined, true, undefined, this),
198
- /* @__PURE__ */ jsxDEV2("div", {
199
- className: "space-y-3",
200
- children: [
201
- /* @__PURE__ */ jsxDEV2("h2", {
202
- className: "text-2xl font-bold",
203
- children: "Lifecycle hooks"
193
+ children: "Where plugin sources live"
204
194
  }, undefined, false, undefined, this),
205
195
  /* @__PURE__ */ jsxDEV2("p", {
206
196
  className: "text-muted-foreground text-sm",
207
- children: "Use lifecycle hooks to configure, validate, and dispose resources."
197
+ children: "Marketplace plugin sources are kept in a dedicated package so they can evolve with the monorepo safely."
208
198
  }, undefined, false, undefined, this),
209
199
  /* @__PURE__ */ jsxDEV2(CodeBlock2, {
210
- language: "typescript",
211
- filename: "lifecycle.ts",
212
- code: `export const MarkdownGeneratorPlugin: ContractSpecPlugin = {
213
- meta: {
214
- id: "markdown-generator",
215
- version: "1.0.0",
216
- type: "generator",
217
- provides: ["docs"],
218
- },
219
- register(context) {
220
- // Register capabilities
221
- },
222
- configure(options, context) {
223
- // Optional: apply workspace configuration
224
- },
225
- validate(specs, context) {
226
- // Optional: add validation checks
227
- },
228
- generate(specs, context) {
229
- // Required: emit outputs
230
- },
231
- dispose() {
232
- // Optional: cleanup
233
- },
234
- };`
200
+ language: "text",
201
+ filename: "catalog-layout",
202
+ code: `packages/apps-registry/cursor-marketplace/
203
+ plugins/
204
+ contractspec/
205
+ contractspec-contracts-spec/
206
+ contractspec-contracts-integrations/
207
+ contractspec-ai-agent/`
235
208
  }, undefined, false, undefined, this)
236
209
  ]
237
210
  }, undefined, true, undefined, this),
@@ -240,36 +213,66 @@ export const MarkdownGeneratorPlugin: ContractSpecPlugin = {
240
213
  children: [
241
214
  /* @__PURE__ */ jsxDEV2("h2", {
242
215
  className: "text-2xl font-bold",
243
- children: "Register a plugin"
216
+ children: "Root marketplace manifest"
244
217
  }, undefined, false, undefined, this),
245
218
  /* @__PURE__ */ jsxDEV2("p", {
246
219
  className: "text-muted-foreground text-sm",
247
220
  children: [
248
- "Configure plugins in ",
221
+ "Cursor submission reads ",
249
222
  /* @__PURE__ */ jsxDEV2("code", {
250
- children: ".contractsrc.json"
223
+ children: ".cursor-plugin/marketplace.json"
251
224
  }, undefined, false, undefined, this),
252
- " to load them in the CLI and runtime."
225
+ " ",
226
+ "at repository root and resolves each plugin source path."
253
227
  ]
254
228
  }, undefined, true, undefined, this),
255
229
  /* @__PURE__ */ jsxDEV2(CodeBlock2, {
256
230
  language: "json",
257
- filename: ".contractsrc.json",
231
+ filename: ".cursor-plugin/marketplace.json",
258
232
  code: `{
233
+ "name": "contractspec-marketplace",
259
234
  "plugins": [
260
235
  {
261
- "id": "markdown-generator",
262
- "package": "@contractspec/plugin.markdown",
263
- "capabilities": ["generator"],
264
- "options": {
265
- "outputDir": "./docs/generated",
266
- "format": "table"
267
- }
236
+ "name": "contractspec",
237
+ "source": "packages/apps-registry/cursor-marketplace/plugins/contractspec"
238
+ },
239
+ {
240
+ "name": "contractspec-contracts-spec",
241
+ "source": "packages/apps-registry/cursor-marketplace/plugins/contractspec-contracts-spec"
242
+ },
243
+ {
244
+ "name": "contractspec-contracts-integrations",
245
+ "source": "packages/apps-registry/cursor-marketplace/plugins/contractspec-contracts-integrations"
246
+ },
247
+ {
248
+ "name": "contractspec-ai-agent",
249
+ "source": "packages/apps-registry/cursor-marketplace/plugins/contractspec-ai-agent"
268
250
  }
269
251
  ]
270
252
  }`
271
253
  }, undefined, false, undefined, this)
272
254
  ]
255
+ }, undefined, true, undefined, this),
256
+ /* @__PURE__ */ jsxDEV2("div", {
257
+ className: "space-y-3",
258
+ children: [
259
+ /* @__PURE__ */ jsxDEV2("h2", {
260
+ className: "text-2xl font-bold",
261
+ children: "Validation gate"
262
+ }, undefined, false, undefined, this),
263
+ /* @__PURE__ */ jsxDEV2("p", {
264
+ className: "text-muted-foreground text-sm",
265
+ children: "Validate all marketplace plugins before publishing."
266
+ }, undefined, false, undefined, this),
267
+ /* @__PURE__ */ jsxDEV2(CodeBlock2, {
268
+ language: "bash",
269
+ filename: "validate-marketplace",
270
+ code: `bun run plugin:contractspec:validate
271
+
272
+ # Optional when offline
273
+ SKIP_PLUGIN_NETWORK_CHECK=1 bun run plugin:contractspec:validate`
274
+ }, undefined, false, undefined, this)
275
+ ]
273
276
  }, undefined, true, undefined, this)
274
277
  ]
275
278
  }, undefined, true, undefined, this),
@@ -280,16 +283,16 @@ export const MarkdownGeneratorPlugin: ContractSpecPlugin = {
280
283
  href: "/docs/ecosystem/templates",
281
284
  className: "btn-primary",
282
285
  children: [
283
- "Plugin templates ",
286
+ "Author a plugin ",
284
287
  /* @__PURE__ */ jsxDEV2(ChevronRight2, {
285
288
  size: 16
286
289
  }, undefined, false, undefined, this)
287
290
  ]
288
291
  }, undefined, true, undefined, this),
289
292
  /* @__PURE__ */ jsxDEV2(Link2, {
290
- href: "/docs/ecosystem/integrations",
293
+ href: "/docs/ecosystem/registry",
291
294
  className: "btn-ghost",
292
- children: "Integrations"
295
+ children: "Manifest details"
293
296
  }, undefined, false, undefined, this)
294
297
  ]
295
298
  }, undefined, true, undefined, this)
@@ -311,11 +314,11 @@ function EcosystemRegistryPage() {
311
314
  children: [
312
315
  /* @__PURE__ */ jsxDEV3("h1", {
313
316
  className: "text-4xl font-bold",
314
- children: "Registry resolution"
317
+ children: "Marketplace manifest"
315
318
  }, undefined, false, undefined, this),
316
319
  /* @__PURE__ */ jsxDEV3("p", {
317
320
  className: "text-muted-foreground text-lg",
318
- children: "Resolve plugins from local workspaces, npm packages, or remote registries."
321
+ children: "ContractSpec publishes a multi-plugin Cursor marketplace catalog from a single root manifest."
319
322
  }, undefined, false, undefined, this)
320
323
  ]
321
324
  }, undefined, true, undefined, this),
@@ -324,34 +327,33 @@ function EcosystemRegistryPage() {
324
327
  children: [
325
328
  /* @__PURE__ */ jsxDEV3("h2", {
326
329
  className: "text-2xl font-bold",
327
- children: "Resolution order"
330
+ children: "Root manifest shape"
328
331
  }, undefined, false, undefined, this),
329
332
  /* @__PURE__ */ jsxDEV3("p", {
330
333
  className: "text-muted-foreground text-sm",
331
- children: "Control where ContractSpec loads plugins and how versions are resolved."
332
- }, undefined, false, undefined, this),
334
+ children: [
335
+ "Cursor reads ",
336
+ /* @__PURE__ */ jsxDEV3("code", {
337
+ children: ".cursor-plugin/marketplace.json"
338
+ }, undefined, false, undefined, this),
339
+ " at repository root and resolves each plugin source path."
340
+ ]
341
+ }, undefined, true, undefined, this),
333
342
  /* @__PURE__ */ jsxDEV3(CodeBlock3, {
334
343
  language: "json",
335
- filename: ".contractsrc.json",
344
+ filename: ".cursor-plugin/marketplace.json",
336
345
  code: `{
346
+ "name": "contractspec-marketplace",
337
347
  "plugins": [
338
348
  {
339
- "id": "markdown-generator",
340
- "package": "@contractspec/plugin.markdown-generator",
341
- "capabilities": ["generator"],
342
- "options": {
343
- "outputDir": "./docs/generated",
344
- "format": "table"
345
- }
346
- }
347
- ],
348
- "pluginRegistry": {
349
- "resolutionOrder": ["workspace", "npm", "remote"],
350
- "allowPrerelease": false,
351
- "sources": {
352
- "remote": "https://registry.contractspec.io"
349
+ "name": "contractspec",
350
+ "source": "packages/apps-registry/cursor-marketplace/plugins/contractspec"
351
+ },
352
+ {
353
+ "name": "contractspec-contracts-spec",
354
+ "source": "packages/apps-registry/cursor-marketplace/plugins/contractspec-contracts-spec"
353
355
  }
354
- }
356
+ ]
355
357
  }`
356
358
  }, undefined, false, undefined, this)
357
359
  ]
@@ -361,32 +363,30 @@ function EcosystemRegistryPage() {
361
363
  children: [
362
364
  /* @__PURE__ */ jsxDEV3("h2", {
363
365
  className: "text-2xl font-bold",
364
- children: "Custom registry resolvers"
366
+ children: "Per-plugin contract"
365
367
  }, undefined, false, undefined, this),
366
368
  /* @__PURE__ */ jsxDEV3("p", {
367
369
  className: "text-muted-foreground text-sm",
368
- children: "Register resolver plugins to load plugins from private registries."
370
+ children: "Each plugin source must include a Cursor plugin manifest and composable assets."
369
371
  }, undefined, false, undefined, this),
370
372
  /* @__PURE__ */ jsxDEV3(CodeBlock3, {
371
- language: "typescript",
372
- filename: "registry-resolver.ts",
373
- code: `import type { RegistryResolverPlugin } from "@contractspec/lib.plugins";
373
+ language: "text",
374
+ filename: "plugin-layout",
375
+ code: `plugins/<plugin-name>/
376
+ .cursor-plugin/plugin.json
377
+ rules/
378
+ commands/
379
+ agents/
380
+ skills/
381
+ .mcp.json`
382
+ }, undefined, false, undefined, this),
383
+ /* @__PURE__ */ jsxDEV3(CodeBlock3, {
384
+ language: "bash",
385
+ filename: "validate-catalog",
386
+ code: `bun run plugin:contractspec:validate
374
387
 
375
- export const PrivateRegistryResolver: RegistryResolverPlugin = {
376
- meta: {
377
- id: "private-registry",
378
- version: "1.0.0",
379
- type: "registryResolver",
380
- provides: ["private-registry"],
381
- },
382
- resolve: async (request) => {
383
- // Fetch plugin package metadata from private registry
384
- const result = await fetch(
385
- "https://registry.acme.io/" + request.package
386
- );
387
- return result.json();
388
- },
389
- };`
388
+ # Optional in offline environments
389
+ SKIP_PLUGIN_NETWORK_CHECK=1 bun run plugin:contractspec:validate`
390
390
  }, undefined, false, undefined, this)
391
391
  ]
392
392
  }, undefined, true, undefined, this),
@@ -406,7 +406,7 @@ export const PrivateRegistryResolver: RegistryResolverPlugin = {
406
406
  /* @__PURE__ */ jsxDEV3(Link3, {
407
407
  href: "/docs/ecosystem/templates",
408
408
  className: "btn-ghost",
409
- children: "Plugin templates"
409
+ children: "Plugin authoring templates"
410
410
  }, undefined, false, undefined, this)
411
411
  ]
412
412
  }, undefined, true, undefined, this)
@@ -457,11 +457,11 @@ function EcosystemTemplatesPage() {
457
457
  children: [
458
458
  /* @__PURE__ */ jsxDEV5("h1", {
459
459
  className: "text-4xl font-bold",
460
- children: "Plugin templates"
460
+ children: "Plugin authoring templates"
461
461
  }, undefined, false, undefined, this),
462
462
  /* @__PURE__ */ jsxDEV5("p", {
463
463
  className: "text-muted-foreground text-lg",
464
- children: "Scaffold new plugins with create-contractspec-plugin."
464
+ children: "Scaffold focused Cursor plugins for ContractSpec product and core libraries."
465
465
  }, undefined, false, undefined, this)
466
466
  ]
467
467
  }, undefined, true, undefined, this),
@@ -470,19 +470,24 @@ function EcosystemTemplatesPage() {
470
470
  children: [
471
471
  /* @__PURE__ */ jsxDEV5("h2", {
472
472
  className: "text-2xl font-bold",
473
- children: "Create a new plugin"
473
+ children: "Create a focused plugin"
474
474
  }, undefined, false, undefined, this),
475
475
  /* @__PURE__ */ jsxDEV5("p", {
476
476
  className: "text-muted-foreground text-sm",
477
- children: "Generate a plugin scaffold with tests, documentation, and CI wiring."
477
+ children: "Start from a scoped domain and keep each plugin aligned to one product or library surface."
478
478
  }, undefined, false, undefined, this),
479
479
  /* @__PURE__ */ jsxDEV5(CodeBlock4, {
480
480
  language: "bash",
481
- filename: "create-plugin",
482
- code: `bunx create-contractspec-plugin create \\
483
- --name markdown-generator \\
484
- --description "Markdown docs generator" \\
485
- --author "Your name"`
481
+ filename: "catalog-authoring-layout",
482
+ code: `packages/apps-registry/cursor-marketplace/
483
+ plugins/
484
+ <plugin-name>/
485
+ .cursor-plugin/plugin.json
486
+ rules/
487
+ commands/
488
+ agents/
489
+ skills/
490
+ .mcp.json`
486
491
  }, undefined, false, undefined, this)
487
492
  ]
488
493
  }, undefined, true, undefined, this),
@@ -497,16 +502,16 @@ function EcosystemTemplatesPage() {
497
502
  className: "text-muted-foreground space-y-2 text-sm",
498
503
  children: [
499
504
  /* @__PURE__ */ jsxDEV5("li", {
500
- children: "src/generator.ts, src/types.ts, src/config.ts"
505
+ children: ".cursor-plugin/plugin.json with plugin metadata and paths"
501
506
  }, undefined, false, undefined, this),
502
507
  /* @__PURE__ */ jsxDEV5("li", {
503
- children: "tests/ with sample fixtures"
508
+ children: "rules/, commands/, agents/, and skills/ content directories"
504
509
  }, undefined, false, undefined, this),
505
510
  /* @__PURE__ */ jsxDEV5("li", {
506
- children: ".github/workflows/ci.yml"
511
+ children: ".mcp.json with all MCP server declarations used by the plugin"
507
512
  }, undefined, false, undefined, this),
508
513
  /* @__PURE__ */ jsxDEV5("li", {
509
- children: "README.md with usage instructions"
514
+ children: "README.md describing scope and governance boundaries"
510
515
  }, undefined, false, undefined, this)
511
516
  ]
512
517
  }, undefined, true, undefined, this)
@@ -517,16 +522,16 @@ function EcosystemTemplatesPage() {
517
522
  children: [
518
523
  /* @__PURE__ */ jsxDEV5("h2", {
519
524
  className: "text-2xl font-bold",
520
- children: "Publish and install"
525
+ children: "Validate before submission"
521
526
  }, undefined, false, undefined, this),
522
527
  /* @__PURE__ */ jsxDEV5(CodeBlock4, {
523
528
  language: "bash",
524
- filename: "publish-plugin",
525
- code: `bun run build
526
- bun publish
529
+ filename: "validate-marketplace-catalog",
530
+ code: `# Validate all plugins referenced by root marketplace manifest
531
+ bun run plugin:contractspec:validate
527
532
 
528
- # install in a ContractSpec workspace
529
- bun add @contractspec/integration.markdown-generator`
533
+ # Optional in offline environments
534
+ SKIP_PLUGIN_NETWORK_CHECK=1 bun run plugin:contractspec:validate`
530
535
  }, undefined, false, undefined, this)
531
536
  ]
532
537
  }, undefined, true, undefined, this),
@@ -541,7 +546,7 @@ bun add @contractspec/integration.markdown-generator`
541
546
  href: "/docs/ecosystem/plugins",
542
547
  className: "btn-primary",
543
548
  children: [
544
- "Plugin API ",
549
+ "Marketplace plugins ",
545
550
  /* @__PURE__ */ jsxDEV5(ChevronRight4, {
546
551
  size: 16
547
552
  }, undefined, false, undefined, this)
@@ -550,7 +555,7 @@ bun add @contractspec/integration.markdown-generator`
550
555
  /* @__PURE__ */ jsxDEV5(Link5, {
551
556
  href: "/docs/ecosystem/registry",
552
557
  className: "btn-ghost",
553
- children: "Registry resolution"
558
+ children: "Marketplace manifest"
554
559
  }, undefined, false, undefined, this)
555
560
  ]
556
561
  }, undefined, true, undefined, this)
@@ -563,15 +568,15 @@ import { registerDocBlocks } from "@contractspec/lib.contracts-spec/docs";
563
568
  var ecosystemDocBlocks = [
564
569
  {
565
570
  id: "docs.ecosystem.plugins",
566
- title: "Plugin API",
567
- summary: "Build generators, validators, adapters, and registry resolvers.",
571
+ title: "Marketplace plugins",
572
+ summary: "Focused Cursor marketplace plugins for product and core libraries.",
568
573
  kind: "usage",
569
574
  visibility: "public",
570
575
  route: "/docs/ecosystem/plugins",
571
576
  tags: ["ecosystem", "plugins", "extensions"],
572
- body: `# Plugin API
577
+ body: `# Marketplace plugins
573
578
 
574
- ContractSpec plugins extend the platform with generators, validators, adapters, formatters, and registry resolvers. Define capabilities in code, register them through configuration, and ship reusable packages.`
579
+ ContractSpec ships a focused Cursor marketplace catalog with plugins for the product and key libraries. Plugin sources live in \`packages/apps-registry/cursor-marketplace/plugins/*\`, while the root manifest at \`.cursor-plugin/marketplace.json\` drives submission.`
575
580
  },
576
581
  {
577
582
  id: "docs.ecosystem.integrations",
@@ -587,23 +592,23 @@ Reference integrations demonstrate how to extend ContractSpec with real-world pl
587
592
  },
588
593
  {
589
594
  id: "docs.ecosystem.templates",
590
- title: "Plugin templates",
591
- summary: "Scaffold new plugins with create-contractspec-plugin.",
595
+ title: "Plugin authoring templates",
596
+ summary: "Author focused plugins with a consistent marketplace-ready layout.",
592
597
  kind: "usage",
593
598
  visibility: "public",
594
599
  route: "/docs/ecosystem/templates",
595
600
  tags: ["ecosystem", "templates"],
596
- body: "# Plugin templates\n\nUse `create-contractspec-plugin` to scaffold a new plugin package with tests, documentation, and CI wiring."
601
+ body: "# Plugin authoring templates\n\nCreate each plugin under `packages/apps-registry/cursor-marketplace/plugins/<plugin-name>/` and include `.cursor-plugin/plugin.json`, `rules/`, `commands/`, `agents/`, `skills/`, and `.mcp.json`."
597
602
  },
598
603
  {
599
604
  id: "docs.ecosystem.registry",
600
- title: "Registry resolution",
601
- summary: "Discover plugins locally or from remote registries.",
605
+ title: "Marketplace manifest",
606
+ summary: "Manage and validate root marketplace entries for all plugins.",
602
607
  kind: "usage",
603
608
  visibility: "public",
604
609
  route: "/docs/ecosystem/registry",
605
610
  tags: ["ecosystem", "registry"],
606
- body: "# Registry resolution\n\nPlugins can be resolved from local workspaces, npm packages, or remote registries. Configure resolution order in `.contractsrc.json` and use registry resolver plugins for custom sources."
611
+ body: "# Marketplace manifest\n\nKeep all plugin entries in `.cursor-plugin/marketplace.json` and validate them with `bun run plugin:contractspec:validate` before submission."
607
612
  }
608
613
  ];
609
614
  registerDocBlocks(ecosystemDocBlocks);