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