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