@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)
@@ -13,11 +13,11 @@ function EcosystemPluginsPage() {
13
13
  children: [
14
14
  /* @__PURE__ */ jsxDEV("h1", {
15
15
  className: "text-4xl font-bold",
16
- children: "Plugin API"
16
+ children: "Cursor marketplace plugins"
17
17
  }, undefined, false, undefined, this),
18
18
  /* @__PURE__ */ jsxDEV("p", {
19
19
  className: "text-muted-foreground text-lg",
20
- children: "Extend ContractSpec with generators, validators, adapters, formatters, and registry resolvers."
20
+ children: "ContractSpec ships a focused Cursor marketplace catalog for the product and key libraries."
21
21
  }, undefined, false, undefined, this)
22
22
  ]
23
23
  }, undefined, true, undefined, this),
@@ -26,26 +26,55 @@ function EcosystemPluginsPage() {
26
26
  children: [
27
27
  /* @__PURE__ */ jsxDEV("h2", {
28
28
  className: "text-2xl font-bold",
29
- children: "Core capabilities"
29
+ children: "Catalog at a glance"
30
30
  }, undefined, false, undefined, this),
31
31
  /* @__PURE__ */ jsxDEV("ul", {
32
32
  className: "text-muted-foreground space-y-2 text-sm",
33
33
  children: [
34
34
  /* @__PURE__ */ jsxDEV("li", {
35
- children: "Generators for code, docs, and schemas."
36
- }, undefined, false, undefined, this),
37
- /* @__PURE__ */ jsxDEV("li", {
38
- children: "Validators for policy checks and compliance gates."
39
- }, undefined, false, undefined, this),
35
+ children: [
36
+ /* @__PURE__ */ jsxDEV("code", {
37
+ children: "contractspec"
38
+ }, undefined, false, undefined, this),
39
+ " - Product-level workflow and release guardrails."
40
+ ]
41
+ }, undefined, true, undefined, this),
40
42
  /* @__PURE__ */ jsxDEV("li", {
41
- children: "Adapters for framework and runtime integration."
42
- }, undefined, false, undefined, this),
43
+ children: [
44
+ /* @__PURE__ */ jsxDEV("code", {
45
+ children: "contractspec-contracts-spec"
46
+ }, undefined, false, undefined, this),
47
+ " -",
48
+ /* @__PURE__ */ jsxDEV("code", {
49
+ children: "@contractspec/lib.contracts-spec"
50
+ }, undefined, false, undefined, this),
51
+ " governance."
52
+ ]
53
+ }, undefined, true, undefined, this),
43
54
  /* @__PURE__ */ jsxDEV("li", {
44
- children: "Formatters and diff renderers for deterministic output."
45
- }, undefined, false, undefined, this),
55
+ children: [
56
+ /* @__PURE__ */ jsxDEV("code", {
57
+ children: "contractspec-contracts-integrations"
58
+ }, undefined, false, undefined, this),
59
+ " -",
60
+ /* @__PURE__ */ jsxDEV("code", {
61
+ children: "@contractspec/lib.contracts-integrations"
62
+ }, undefined, false, undefined, this),
63
+ " governance."
64
+ ]
65
+ }, undefined, true, undefined, this),
46
66
  /* @__PURE__ */ jsxDEV("li", {
47
- children: "Registry resolvers for local and remote plugin discovery."
48
- }, undefined, false, undefined, this)
67
+ children: [
68
+ /* @__PURE__ */ jsxDEV("code", {
69
+ children: "contractspec-ai-agent"
70
+ }, undefined, false, undefined, this),
71
+ " -",
72
+ /* @__PURE__ */ jsxDEV("code", {
73
+ children: "@contractspec/lib.ai-agent"
74
+ }, undefined, false, undefined, this),
75
+ " orchestration guardrails."
76
+ ]
77
+ }, undefined, true, undefined, this)
49
78
  ]
50
79
  }, undefined, true, undefined, this)
51
80
  ]
@@ -58,80 +87,21 @@ function EcosystemPluginsPage() {
58
87
  children: [
59
88
  /* @__PURE__ */ jsxDEV("h2", {
60
89
  className: "text-2xl font-bold",
61
- children: "Plugin interface"
90
+ children: "Where plugin sources live"
62
91
  }, undefined, false, undefined, this),
63
92
  /* @__PURE__ */ jsxDEV("p", {
64
93
  className: "text-muted-foreground text-sm",
65
- children: "Define capabilities and lifecycle hooks in a single plugin entrypoint."
94
+ children: "Marketplace plugin sources are kept in a dedicated package so they can evolve with the monorepo safely."
66
95
  }, undefined, false, undefined, this),
67
96
  /* @__PURE__ */ jsxDEV(CodeBlock, {
68
- language: "typescript",
69
- filename: "plugin.ts",
70
- code: `import type {
71
- ContractSpecPlugin,
72
- PluginContext,
73
- GeneratorCapability,
74
- } from "@contractspec/lib.plugins";
75
-
76
- export const MarkdownGeneratorPlugin: ContractSpecPlugin = {
77
- meta: {
78
- id: "markdown-generator",
79
- version: "1.0.0",
80
- type: "generator",
81
- provides: ["docs"],
82
- },
83
- register(context: PluginContext) {
84
- const generator: GeneratorCapability = {
85
- id: "markdown",
86
- description: "Generate Markdown docs",
87
- generate: async (specs) => {
88
- // Implementation...
89
- },
90
- };
91
-
92
- context.generators.register(generator);
93
- },
94
- };`
95
- }, undefined, false, undefined, this)
96
- ]
97
- }, undefined, true, undefined, this),
98
- /* @__PURE__ */ jsxDEV("div", {
99
- className: "space-y-3",
100
- children: [
101
- /* @__PURE__ */ jsxDEV("h2", {
102
- className: "text-2xl font-bold",
103
- children: "Lifecycle hooks"
104
- }, undefined, false, undefined, this),
105
- /* @__PURE__ */ jsxDEV("p", {
106
- className: "text-muted-foreground text-sm",
107
- children: "Use lifecycle hooks to configure, validate, and dispose resources."
108
- }, undefined, false, undefined, this),
109
- /* @__PURE__ */ jsxDEV(CodeBlock, {
110
- language: "typescript",
111
- filename: "lifecycle.ts",
112
- code: `export const MarkdownGeneratorPlugin: ContractSpecPlugin = {
113
- meta: {
114
- id: "markdown-generator",
115
- version: "1.0.0",
116
- type: "generator",
117
- provides: ["docs"],
118
- },
119
- register(context) {
120
- // Register capabilities
121
- },
122
- configure(options, context) {
123
- // Optional: apply workspace configuration
124
- },
125
- validate(specs, context) {
126
- // Optional: add validation checks
127
- },
128
- generate(specs, context) {
129
- // Required: emit outputs
130
- },
131
- dispose() {
132
- // Optional: cleanup
133
- },
134
- };`
97
+ language: "text",
98
+ filename: "catalog-layout",
99
+ code: `packages/apps-registry/cursor-marketplace/
100
+ plugins/
101
+ contractspec/
102
+ contractspec-contracts-spec/
103
+ contractspec-contracts-integrations/
104
+ contractspec-ai-agent/`
135
105
  }, undefined, false, undefined, this)
136
106
  ]
137
107
  }, undefined, true, undefined, this),
@@ -140,36 +110,66 @@ export const MarkdownGeneratorPlugin: ContractSpecPlugin = {
140
110
  children: [
141
111
  /* @__PURE__ */ jsxDEV("h2", {
142
112
  className: "text-2xl font-bold",
143
- children: "Register a plugin"
113
+ children: "Root marketplace manifest"
144
114
  }, undefined, false, undefined, this),
145
115
  /* @__PURE__ */ jsxDEV("p", {
146
116
  className: "text-muted-foreground text-sm",
147
117
  children: [
148
- "Configure plugins in ",
118
+ "Cursor submission reads ",
149
119
  /* @__PURE__ */ jsxDEV("code", {
150
- children: ".contractsrc.json"
120
+ children: ".cursor-plugin/marketplace.json"
151
121
  }, undefined, false, undefined, this),
152
- " to load them in the CLI and runtime."
122
+ " ",
123
+ "at repository root and resolves each plugin source path."
153
124
  ]
154
125
  }, undefined, true, undefined, this),
155
126
  /* @__PURE__ */ jsxDEV(CodeBlock, {
156
127
  language: "json",
157
- filename: ".contractsrc.json",
128
+ filename: ".cursor-plugin/marketplace.json",
158
129
  code: `{
130
+ "name": "contractspec-marketplace",
159
131
  "plugins": [
160
132
  {
161
- "id": "markdown-generator",
162
- "package": "@contractspec/plugin.markdown",
163
- "capabilities": ["generator"],
164
- "options": {
165
- "outputDir": "./docs/generated",
166
- "format": "table"
167
- }
133
+ "name": "contractspec",
134
+ "source": "packages/apps-registry/cursor-marketplace/plugins/contractspec"
135
+ },
136
+ {
137
+ "name": "contractspec-contracts-spec",
138
+ "source": "packages/apps-registry/cursor-marketplace/plugins/contractspec-contracts-spec"
139
+ },
140
+ {
141
+ "name": "contractspec-contracts-integrations",
142
+ "source": "packages/apps-registry/cursor-marketplace/plugins/contractspec-contracts-integrations"
143
+ },
144
+ {
145
+ "name": "contractspec-ai-agent",
146
+ "source": "packages/apps-registry/cursor-marketplace/plugins/contractspec-ai-agent"
168
147
  }
169
148
  ]
170
149
  }`
171
150
  }, undefined, false, undefined, this)
172
151
  ]
152
+ }, undefined, true, undefined, this),
153
+ /* @__PURE__ */ jsxDEV("div", {
154
+ className: "space-y-3",
155
+ children: [
156
+ /* @__PURE__ */ jsxDEV("h2", {
157
+ className: "text-2xl font-bold",
158
+ children: "Validation gate"
159
+ }, undefined, false, undefined, this),
160
+ /* @__PURE__ */ jsxDEV("p", {
161
+ className: "text-muted-foreground text-sm",
162
+ children: "Validate all marketplace plugins before publishing."
163
+ }, undefined, false, undefined, this),
164
+ /* @__PURE__ */ jsxDEV(CodeBlock, {
165
+ language: "bash",
166
+ filename: "validate-marketplace",
167
+ code: `bun run plugin:contractspec:validate
168
+
169
+ # Optional when offline
170
+ SKIP_PLUGIN_NETWORK_CHECK=1 bun run plugin:contractspec:validate`
171
+ }, undefined, false, undefined, this)
172
+ ]
173
173
  }, undefined, true, undefined, this)
174
174
  ]
175
175
  }, undefined, true, undefined, this),
@@ -180,16 +180,16 @@ export const MarkdownGeneratorPlugin: ContractSpecPlugin = {
180
180
  href: "/docs/ecosystem/templates",
181
181
  className: "btn-primary",
182
182
  children: [
183
- "Plugin templates ",
183
+ "Author a plugin ",
184
184
  /* @__PURE__ */ jsxDEV(ChevronRight, {
185
185
  size: 16
186
186
  }, undefined, false, undefined, this)
187
187
  ]
188
188
  }, undefined, true, undefined, this),
189
189
  /* @__PURE__ */ jsxDEV(Link, {
190
- href: "/docs/ecosystem/integrations",
190
+ href: "/docs/ecosystem/registry",
191
191
  className: "btn-ghost",
192
- children: "Integrations"
192
+ children: "Manifest details"
193
193
  }, undefined, false, undefined, this)
194
194
  ]
195
195
  }, undefined, true, undefined, this)
@@ -13,11 +13,11 @@ function EcosystemRegistryPage() {
13
13
  children: [
14
14
  /* @__PURE__ */ jsxDEV("h1", {
15
15
  className: "text-4xl font-bold",
16
- children: "Registry resolution"
16
+ children: "Marketplace manifest"
17
17
  }, undefined, false, undefined, this),
18
18
  /* @__PURE__ */ jsxDEV("p", {
19
19
  className: "text-muted-foreground text-lg",
20
- children: "Resolve plugins from local workspaces, npm packages, or remote registries."
20
+ children: "ContractSpec publishes a multi-plugin Cursor marketplace catalog from a single root manifest."
21
21
  }, undefined, false, undefined, this)
22
22
  ]
23
23
  }, undefined, true, undefined, this),
@@ -26,34 +26,33 @@ function EcosystemRegistryPage() {
26
26
  children: [
27
27
  /* @__PURE__ */ jsxDEV("h2", {
28
28
  className: "text-2xl font-bold",
29
- children: "Resolution order"
29
+ children: "Root manifest shape"
30
30
  }, undefined, false, undefined, this),
31
31
  /* @__PURE__ */ jsxDEV("p", {
32
32
  className: "text-muted-foreground text-sm",
33
- children: "Control where ContractSpec loads plugins and how versions are resolved."
34
- }, undefined, false, undefined, this),
33
+ children: [
34
+ "Cursor reads ",
35
+ /* @__PURE__ */ jsxDEV("code", {
36
+ children: ".cursor-plugin/marketplace.json"
37
+ }, undefined, false, undefined, this),
38
+ " at repository root and resolves each plugin source path."
39
+ ]
40
+ }, undefined, true, undefined, this),
35
41
  /* @__PURE__ */ jsxDEV(CodeBlock, {
36
42
  language: "json",
37
- filename: ".contractsrc.json",
43
+ filename: ".cursor-plugin/marketplace.json",
38
44
  code: `{
45
+ "name": "contractspec-marketplace",
39
46
  "plugins": [
40
47
  {
41
- "id": "markdown-generator",
42
- "package": "@contractspec/plugin.markdown-generator",
43
- "capabilities": ["generator"],
44
- "options": {
45
- "outputDir": "./docs/generated",
46
- "format": "table"
47
- }
48
- }
49
- ],
50
- "pluginRegistry": {
51
- "resolutionOrder": ["workspace", "npm", "remote"],
52
- "allowPrerelease": false,
53
- "sources": {
54
- "remote": "https://registry.contractspec.io"
48
+ "name": "contractspec",
49
+ "source": "packages/apps-registry/cursor-marketplace/plugins/contractspec"
50
+ },
51
+ {
52
+ "name": "contractspec-contracts-spec",
53
+ "source": "packages/apps-registry/cursor-marketplace/plugins/contractspec-contracts-spec"
55
54
  }
56
- }
55
+ ]
57
56
  }`
58
57
  }, undefined, false, undefined, this)
59
58
  ]
@@ -63,32 +62,30 @@ function EcosystemRegistryPage() {
63
62
  children: [
64
63
  /* @__PURE__ */ jsxDEV("h2", {
65
64
  className: "text-2xl font-bold",
66
- children: "Custom registry resolvers"
65
+ children: "Per-plugin contract"
67
66
  }, undefined, false, undefined, this),
68
67
  /* @__PURE__ */ jsxDEV("p", {
69
68
  className: "text-muted-foreground text-sm",
70
- children: "Register resolver plugins to load plugins from private registries."
69
+ children: "Each plugin source must include a Cursor plugin manifest and composable assets."
70
+ }, undefined, false, undefined, this),
71
+ /* @__PURE__ */ jsxDEV(CodeBlock, {
72
+ language: "text",
73
+ filename: "plugin-layout",
74
+ code: `plugins/<plugin-name>/
75
+ .cursor-plugin/plugin.json
76
+ rules/
77
+ commands/
78
+ agents/
79
+ skills/
80
+ .mcp.json`
71
81
  }, undefined, false, undefined, this),
72
82
  /* @__PURE__ */ jsxDEV(CodeBlock, {
73
- language: "typescript",
74
- filename: "registry-resolver.ts",
75
- code: `import type { RegistryResolverPlugin } from "@contractspec/lib.plugins";
83
+ language: "bash",
84
+ filename: "validate-catalog",
85
+ code: `bun run plugin:contractspec:validate
76
86
 
77
- export const PrivateRegistryResolver: RegistryResolverPlugin = {
78
- meta: {
79
- id: "private-registry",
80
- version: "1.0.0",
81
- type: "registryResolver",
82
- provides: ["private-registry"],
83
- },
84
- resolve: async (request) => {
85
- // Fetch plugin package metadata from private registry
86
- const result = await fetch(
87
- "https://registry.acme.io/" + request.package
88
- );
89
- return result.json();
90
- },
91
- };`
87
+ # Optional in offline environments
88
+ SKIP_PLUGIN_NETWORK_CHECK=1 bun run plugin:contractspec:validate`
92
89
  }, undefined, false, undefined, this)
93
90
  ]
94
91
  }, undefined, true, undefined, this),
@@ -108,7 +105,7 @@ export const PrivateRegistryResolver: RegistryResolverPlugin = {
108
105
  /* @__PURE__ */ jsxDEV(Link, {
109
106
  href: "/docs/ecosystem/templates",
110
107
  className: "btn-ghost",
111
- children: "Plugin templates"
108
+ children: "Plugin authoring templates"
112
109
  }, undefined, false, undefined, this)
113
110
  ]
114
111
  }, undefined, true, undefined, this)
@@ -42,11 +42,11 @@ function EcosystemTemplatesPage() {
42
42
  children: [
43
43
  /* @__PURE__ */ jsxDEV2("h1", {
44
44
  className: "text-4xl font-bold",
45
- children: "Plugin templates"
45
+ children: "Plugin authoring templates"
46
46
  }, undefined, false, undefined, this),
47
47
  /* @__PURE__ */ jsxDEV2("p", {
48
48
  className: "text-muted-foreground text-lg",
49
- children: "Scaffold new plugins with create-contractspec-plugin."
49
+ children: "Scaffold focused Cursor plugins for ContractSpec product and core libraries."
50
50
  }, undefined, false, undefined, this)
51
51
  ]
52
52
  }, undefined, true, undefined, this),
@@ -55,19 +55,24 @@ function EcosystemTemplatesPage() {
55
55
  children: [
56
56
  /* @__PURE__ */ jsxDEV2("h2", {
57
57
  className: "text-2xl font-bold",
58
- children: "Create a new plugin"
58
+ children: "Create a focused plugin"
59
59
  }, undefined, false, undefined, this),
60
60
  /* @__PURE__ */ jsxDEV2("p", {
61
61
  className: "text-muted-foreground text-sm",
62
- children: "Generate a plugin scaffold with tests, documentation, and CI wiring."
62
+ children: "Start from a scoped domain and keep each plugin aligned to one product or library surface."
63
63
  }, undefined, false, undefined, this),
64
64
  /* @__PURE__ */ jsxDEV2(CodeBlock, {
65
65
  language: "bash",
66
- filename: "create-plugin",
67
- code: `bunx create-contractspec-plugin create \\
68
- --name markdown-generator \\
69
- --description "Markdown docs generator" \\
70
- --author "Your name"`
66
+ filename: "catalog-authoring-layout",
67
+ code: `packages/apps-registry/cursor-marketplace/
68
+ plugins/
69
+ <plugin-name>/
70
+ .cursor-plugin/plugin.json
71
+ rules/
72
+ commands/
73
+ agents/
74
+ skills/
75
+ .mcp.json`
71
76
  }, undefined, false, undefined, this)
72
77
  ]
73
78
  }, undefined, true, undefined, this),
@@ -82,16 +87,16 @@ function EcosystemTemplatesPage() {
82
87
  className: "text-muted-foreground space-y-2 text-sm",
83
88
  children: [
84
89
  /* @__PURE__ */ jsxDEV2("li", {
85
- children: "src/generator.ts, src/types.ts, src/config.ts"
90
+ children: ".cursor-plugin/plugin.json with plugin metadata and paths"
86
91
  }, undefined, false, undefined, this),
87
92
  /* @__PURE__ */ jsxDEV2("li", {
88
- children: "tests/ with sample fixtures"
93
+ children: "rules/, commands/, agents/, and skills/ content directories"
89
94
  }, undefined, false, undefined, this),
90
95
  /* @__PURE__ */ jsxDEV2("li", {
91
- children: ".github/workflows/ci.yml"
96
+ children: ".mcp.json with all MCP server declarations used by the plugin"
92
97
  }, undefined, false, undefined, this),
93
98
  /* @__PURE__ */ jsxDEV2("li", {
94
- children: "README.md with usage instructions"
99
+ children: "README.md describing scope and governance boundaries"
95
100
  }, undefined, false, undefined, this)
96
101
  ]
97
102
  }, undefined, true, undefined, this)
@@ -102,16 +107,16 @@ function EcosystemTemplatesPage() {
102
107
  children: [
103
108
  /* @__PURE__ */ jsxDEV2("h2", {
104
109
  className: "text-2xl font-bold",
105
- children: "Publish and install"
110
+ children: "Validate before submission"
106
111
  }, undefined, false, undefined, this),
107
112
  /* @__PURE__ */ jsxDEV2(CodeBlock, {
108
113
  language: "bash",
109
- filename: "publish-plugin",
110
- code: `bun run build
111
- bun publish
114
+ filename: "validate-marketplace-catalog",
115
+ code: `# Validate all plugins referenced by root marketplace manifest
116
+ bun run plugin:contractspec:validate
112
117
 
113
- # install in a ContractSpec workspace
114
- bun add @contractspec/integration.markdown-generator`
118
+ # Optional in offline environments
119
+ SKIP_PLUGIN_NETWORK_CHECK=1 bun run plugin:contractspec:validate`
115
120
  }, undefined, false, undefined, this)
116
121
  ]
117
122
  }, undefined, true, undefined, this),
@@ -126,7 +131,7 @@ bun add @contractspec/integration.markdown-generator`
126
131
  href: "/docs/ecosystem/plugins",
127
132
  className: "btn-primary",
128
133
  children: [
129
- "Plugin API ",
134
+ "Marketplace plugins ",
130
135
  /* @__PURE__ */ jsxDEV2(ChevronRight, {
131
136
  size: 16
132
137
  }, undefined, false, undefined, this)
@@ -135,7 +140,7 @@ bun add @contractspec/integration.markdown-generator`
135
140
  /* @__PURE__ */ jsxDEV2(Link2, {
136
141
  href: "/docs/ecosystem/registry",
137
142
  className: "btn-ghost",
138
- children: "Registry resolution"
143
+ children: "Marketplace manifest"
139
144
  }, undefined, false, undefined, this)
140
145
  ]
141
146
  }, undefined, true, undefined, this)
@@ -4,15 +4,15 @@ import { registerDocBlocks } from "@contractspec/lib.contracts-spec/docs";
4
4
  var ecosystemDocBlocks = [
5
5
  {
6
6
  id: "docs.ecosystem.plugins",
7
- title: "Plugin API",
8
- summary: "Build generators, validators, adapters, and registry resolvers.",
7
+ title: "Marketplace plugins",
8
+ summary: "Focused Cursor marketplace plugins for product and core libraries.",
9
9
  kind: "usage",
10
10
  visibility: "public",
11
11
  route: "/docs/ecosystem/plugins",
12
12
  tags: ["ecosystem", "plugins", "extensions"],
13
- body: `# Plugin API
13
+ body: `# Marketplace plugins
14
14
 
15
- 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.`
15
+ 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.`
16
16
  },
17
17
  {
18
18
  id: "docs.ecosystem.integrations",
@@ -28,23 +28,23 @@ Reference integrations demonstrate how to extend ContractSpec with real-world pl
28
28
  },
29
29
  {
30
30
  id: "docs.ecosystem.templates",
31
- title: "Plugin templates",
32
- summary: "Scaffold new plugins with create-contractspec-plugin.",
31
+ title: "Plugin authoring templates",
32
+ summary: "Author focused plugins with a consistent marketplace-ready layout.",
33
33
  kind: "usage",
34
34
  visibility: "public",
35
35
  route: "/docs/ecosystem/templates",
36
36
  tags: ["ecosystem", "templates"],
37
- body: "# Plugin templates\n\nUse `create-contractspec-plugin` to scaffold a new plugin package with tests, documentation, and CI wiring."
37
+ 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`."
38
38
  },
39
39
  {
40
40
  id: "docs.ecosystem.registry",
41
- title: "Registry resolution",
42
- summary: "Discover plugins locally or from remote registries.",
41
+ title: "Marketplace manifest",
42
+ summary: "Manage and validate root marketplace entries for all plugins.",
43
43
  kind: "usage",
44
44
  visibility: "public",
45
45
  route: "/docs/ecosystem/registry",
46
46
  tags: ["ecosystem", "registry"],
47
- 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."
47
+ body: "# Marketplace manifest\n\nKeep all plugin entries in `.cursor-plugin/marketplace.json` and validate them with `bun run plugin:contractspec:validate` before submission."
48
48
  }
49
49
  ];
50
50
  registerDocBlocks(ecosystemDocBlocks);