@contractspec/bundle.library 3.9.2 → 3.9.3
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.
- package/.turbo/turbo-build.log +13 -13
- package/CHANGELOG.md +38 -0
- package/README.md +2 -1
- package/dist/__tests__/mocks/prisma.d.ts +5 -5
- package/dist/application/index.js +1 -1
- package/dist/application/mcp/index.js +1 -1
- package/dist/application/mcp/internalMcp.js +1 -1
- package/dist/components/docs/examples/DocsExamplesPage.js +1 -1
- package/dist/components/docs/examples/ExampleShowcasePage.js +2 -2
- package/dist/components/docs/examples/exampleShowcaseData.js +2 -2
- package/dist/components/docs/examples/index.js +2 -2
- package/dist/components/docs/index.js +135 -135
- package/dist/index.js +138 -138
- package/dist/node/application/index.js +1 -1
- package/dist/node/application/mcp/index.js +1 -1
- package/dist/node/application/mcp/internalMcp.js +1 -1
- package/dist/node/components/docs/examples/DocsExamplesPage.js +1 -1
- package/dist/node/components/docs/examples/ExampleShowcasePage.js +2 -2
- package/dist/node/components/docs/examples/exampleShowcaseData.js +2 -2
- package/dist/node/components/docs/examples/index.js +2 -2
- package/dist/node/components/docs/index.js +135 -135
- package/dist/node/index.js +138 -138
- package/package.json +10 -9
- package/src/application/mcp/internalMcp.ts +1 -1
- package/src/components/docs/examples/DocsExamplesPage.tsx +1 -1
- package/src/components/docs/examples/ExampleShowcasePage.tsx +1 -1
- package/src/components/docs/examples/exampleShowcaseData.test.ts +3 -1
- package/src/components/docs/examples/exampleShowcaseData.ts +1 -1
package/.turbo/turbo-build.log
CHANGED
|
@@ -2,7 +2,7 @@ $ contractspec-bun-build prebuild
|
|
|
2
2
|
$ bun run build:bundle && bun run build:types
|
|
3
3
|
$ contractspec-bun-build transpile
|
|
4
4
|
[contractspec-bun-build] transpile target=bun root=src entries=319 noBundle=false
|
|
5
|
-
Bundled 319 modules in
|
|
5
|
+
Bundled 319 modules in 107ms
|
|
6
6
|
|
|
7
7
|
application/context-storage/index.js 0.85 KB (entry point)
|
|
8
8
|
presentation/features/templates/types.js 8 bytes (entry point)
|
|
@@ -270,9 +270,9 @@ Bundled 319 modules in 92ms
|
|
|
270
270
|
components/docs/ecosystem/TemplatesPage.js 3.37 KB (entry point)
|
|
271
271
|
components/docs/shared/StudioPrompt.js 0.93 KB (entry point)
|
|
272
272
|
components/docs/ecosystem/ecosystem.docblocks.js 1.91 KB (entry point)
|
|
273
|
-
components/docs/examples/index.js 7.
|
|
274
|
-
components/docs/examples/DocsExamplesPage.js 1.
|
|
275
|
-
components/docs/examples/ExampleShowcasePage.js 5.
|
|
273
|
+
components/docs/examples/index.js 7.20 KB (entry point)
|
|
274
|
+
components/docs/examples/DocsExamplesPage.js 1.67 KB (entry point)
|
|
275
|
+
components/docs/examples/ExampleShowcasePage.js 5.76 KB (entry point)
|
|
276
276
|
components/docs/examples/exampleShowcaseData.js 2.12 KB (entry point)
|
|
277
277
|
components/docs/comparison/index.js 30.18 KB (entry point)
|
|
278
278
|
components/docs/comparison/ComparisonInternalToolBuildersPage.js 5.28 KB (entry point)
|
|
@@ -303,10 +303,10 @@ Bundled 319 modules in 92ms
|
|
|
303
303
|
components/docs/docsManifest.js 17.91 KB (entry point)
|
|
304
304
|
application/mcp/contractsMcpTypes.js 8 bytes (entry point)
|
|
305
305
|
application/mcp/docsMcp.catalog.js 6.20 KB (entry point)
|
|
306
|
-
application/index.js 49.
|
|
307
|
-
application/mcp/index.js 49.
|
|
306
|
+
application/index.js 49.74 KB (entry point)
|
|
307
|
+
application/mcp/index.js 49.10 KB (entry point)
|
|
308
308
|
application/mcp/docsMcp.js 18.87 KB (entry point)
|
|
309
|
-
application/mcp/internalMcp.js 7.
|
|
309
|
+
application/mcp/internalMcp.js 7.70 KB (entry point)
|
|
310
310
|
application/mcp/providerRankingMcp.js 9.61 KB (entry point)
|
|
311
311
|
application/mcp/docsMcp.prompts.js 8.94 KB (entry point)
|
|
312
312
|
application/mcp/docsMcp.resources.js 9.18 KB (entry point)
|
|
@@ -325,7 +325,7 @@ Bundled 319 modules in 92ms
|
|
|
325
325
|
application/mcp/contractsMcpResources.js 3.47 KB (entry point)
|
|
326
326
|
|
|
327
327
|
[contractspec-bun-build] transpile target=node root=src entries=319 noBundle=false
|
|
328
|
-
Bundled 319 modules in
|
|
328
|
+
Bundled 319 modules in 108ms
|
|
329
329
|
|
|
330
330
|
application/context-storage/index.js 0.85 KB (entry point)
|
|
331
331
|
presentation/features/templates/types.js 0 KB (entry point)
|
|
@@ -593,10 +593,10 @@ Bundled 319 modules in 79ms
|
|
|
593
593
|
components/docs/ecosystem/TemplatesPage.js 3.36 KB (entry point)
|
|
594
594
|
components/docs/shared/StudioPrompt.js 0.92 KB (entry point)
|
|
595
595
|
components/docs/ecosystem/ecosystem.docblocks.js 1.90 KB (entry point)
|
|
596
|
-
components/docs/examples/index.js 7.
|
|
597
|
-
components/docs/examples/DocsExamplesPage.js 1.
|
|
598
|
-
components/docs/examples/ExampleShowcasePage.js 5.
|
|
599
|
-
components/docs/examples/exampleShowcaseData.js 2.
|
|
596
|
+
components/docs/examples/index.js 7.19 KB (entry point)
|
|
597
|
+
components/docs/examples/DocsExamplesPage.js 1.66 KB (entry point)
|
|
598
|
+
components/docs/examples/ExampleShowcasePage.js 5.75 KB (entry point)
|
|
599
|
+
components/docs/examples/exampleShowcaseData.js 2.12 KB (entry point)
|
|
600
600
|
components/docs/comparison/index.js 30.12 KB (entry point)
|
|
601
601
|
components/docs/comparison/ComparisonInternalToolBuildersPage.js 5.26 KB (entry point)
|
|
602
602
|
components/docs/comparison/ComparisonOverviewPage.js 4.14 KB (entry point)
|
|
@@ -626,7 +626,7 @@ Bundled 319 modules in 79ms
|
|
|
626
626
|
components/docs/docsManifest.js 17.90 KB (entry point)
|
|
627
627
|
application/mcp/contractsMcpTypes.js 0 KB (entry point)
|
|
628
628
|
application/mcp/docsMcp.catalog.js 6.19 KB (entry point)
|
|
629
|
-
application/index.js 49.
|
|
629
|
+
application/index.js 49.74 KB (entry point)
|
|
630
630
|
application/mcp/index.js 49.1 KB (entry point)
|
|
631
631
|
application/mcp/docsMcp.js 18.86 KB (entry point)
|
|
632
632
|
application/mcp/internalMcp.js 7.69 KB (entry point)
|
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,43 @@
|
|
|
1
1
|
# @contractspec/bundle.library
|
|
2
2
|
|
|
3
|
+
## 3.9.3
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- Promote the Expo demo Examples surface to first-class navigation and reuse shared preview components so mobile and web example previews stay aligned.
|
|
8
|
+
- Packages: @contractspec/app.expo-demo (patch), @contractspec/app.web-landing (patch), @contractspec/bundle.library (patch), @contractspec/bundle.marketing (patch), @contractspec/example.agent-console (patch), @contractspec/module.examples (minor)
|
|
9
|
+
- Migration: Rich example previews should reuse cross-platform components through the UI kit alias layer before falling back to app-local native summaries.
|
|
10
|
+
- Split example discovery from rich runtime packages so lightweight consumers no longer install every ContractSpec example.
|
|
11
|
+
- Packages: @contractspec/module.examples (major), @contractspec/app.cli-contractspec (minor), @contractspec/bundle.marketing (patch), @contractspec/bundle.library (patch)
|
|
12
|
+
- Migration: Replace runtime imports such as `TemplateRuntimeProvider`, `listTemplates`, and inline preview loaders from `@contractspec/module.examples` with `@contractspec/module.examples/runtime`.; Import `listExamples`, `getExample`, `searchExamples`, route helpers, and source metadata from `@contractspec/module.examples/catalog` when runnable example code is not needed.
|
|
13
|
+
- Updated dependencies because of chore: auto-bump internal dependents
|
|
14
|
+
- Updated dependencies because of Reduce published install and bundle size by optionalizing heavy runtime families and adding a repo dependency audit.
|
|
15
|
+
- Updated dependencies because of Promote the Expo demo Examples surface to first-class navigation and reuse shared preview components so mobile and web example previews stay aligned.
|
|
16
|
+
- Updated dependencies because of Split example discovery from rich runtime packages so lightweight consumers no longer install every ContractSpec example.
|
|
17
|
+
- @contractspec/example.data-grid-showcase@3.8.15
|
|
18
|
+
- @contractspec/lib.contracts-runtime-client-react@3.10.1
|
|
19
|
+
- @contractspec/lib.contracts-runtime-server-mcp@3.8.1
|
|
20
|
+
- @contractspec/lib.design-system@3.11.1
|
|
21
|
+
- @contractspec/lib.runtime-sandbox@3.0.0
|
|
22
|
+
- @contractspec/lib.example-shared-ui@7.0.0
|
|
23
|
+
- @contractspec/lib.ui-kit-web@3.11.0
|
|
24
|
+
- @contractspec/module.examples@4.0.0
|
|
25
|
+
- @contractspec/bundle.workspace@4.5.1
|
|
26
|
+
- @contractspec/lib.ai-providers@3.7.14
|
|
27
|
+
- @contractspec/lib.content-gen@3.7.21
|
|
28
|
+
- @contractspec/lib.contracts-integrations@3.8.13
|
|
29
|
+
- @contractspec/lib.contracts-library@3.7.21
|
|
30
|
+
- @contractspec/lib.contracts-runtime-server-graphql@3.8.0
|
|
31
|
+
- @contractspec/lib.contracts-runtime-server-rest@3.8.0
|
|
32
|
+
- @contractspec/lib.contracts-spec@5.5.0
|
|
33
|
+
- @contractspec/lib.knowledge@3.7.21
|
|
34
|
+
- @contractspec/lib.logger@3.7.14
|
|
35
|
+
- @contractspec/lib.provider-ranking@0.7.14
|
|
36
|
+
- @contractspec/lib.schema@3.7.14
|
|
37
|
+
- @contractspec/lib.surface-runtime@0.5.21
|
|
38
|
+
- @contractspec/lib.ui-link@3.7.16
|
|
39
|
+
- @contractspec/module.context-storage@0.7.20
|
|
40
|
+
|
|
3
41
|
## 3.9.2
|
|
4
42
|
|
|
5
43
|
### Patch Changes
|
package/README.md
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
## What It Provides
|
|
6
6
|
|
|
7
7
|
- Provides the reusable product-facing bundle consumed by API, web, and documentation surfaces.
|
|
8
|
-
- Aggregates docs pages, integration marketplace UI, templates, and library-side MCP implementations.
|
|
8
|
+
- Aggregates docs pages, integration marketplace UI, templates, example showcase pages, and library-side MCP implementations.
|
|
9
9
|
- Acts as the main composition layer between lower-level libraries and app-specific delivery shells.
|
|
10
10
|
- `src/presentation/` contains presentation-layer components and renderers.
|
|
11
11
|
|
|
@@ -25,6 +25,7 @@ Import the root entrypoint from `@contractspec/bundle.library`, or choose a docu
|
|
|
25
25
|
|
|
26
26
|
- `src/application/` contains application services including MCP implementations and cross-surface orchestration.
|
|
27
27
|
- `src/components/` contains reusable docs, integrations, legal, shell, and template presentation code.
|
|
28
|
+
- `src/components/docs/examples/` derives showcase links from the discoverable example catalog and leaves preview rendering to the shared `@contractspec/module.examples/runtime` host.
|
|
28
29
|
- `src/features/`, `src.config/`, `src.infrastructure/`, and `src.libs/` hold bundle-local composition helpers.
|
|
29
30
|
- `src/presentation/` contains feature-specific UI composition exported to consuming apps.
|
|
30
31
|
- `src/index.ts` is the root public barrel and package entrypoint.
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
export declare const prismaMock: {
|
|
2
|
-
organizationLifecycleProfile: Record<"create" | "
|
|
2
|
+
organizationLifecycleProfile: Record<"create" | "upsert" | "findUnique" | "findUniqueOrThrow" | "update", import("bun:test").jest.Mock<(...args: any[]) => any>>;
|
|
3
3
|
lifecycleAssessment: Record<"create" | "findMany", import("bun:test").jest.Mock<(...args: any[]) => any>>;
|
|
4
4
|
lifecycleMilestoneProgress: Record<"create" | "update" | "findMany" | "findFirst", import("bun:test").jest.Mock<(...args: any[]) => any>>;
|
|
5
5
|
studioProject: Record<"create" | "update" | "findMany" | "findFirst", import("bun:test").jest.Mock<(...args: any[]) => any>>;
|
|
6
|
-
studioSpec: Record<"count" | "create" | "
|
|
7
|
-
studioOverlay: Record<"count" | "create" | "
|
|
8
|
-
studioIntegration: Record<"count" | "create" | "
|
|
6
|
+
studioSpec: Record<"count" | "create" | "findUnique" | "update" | "findMany" | "findFirst", import("bun:test").jest.Mock<(...args: any[]) => any>>;
|
|
7
|
+
studioOverlay: Record<"count" | "create" | "findUnique" | "update" | "findFirst", import("bun:test").jest.Mock<(...args: any[]) => any>>;
|
|
8
|
+
studioIntegration: Record<"count" | "create" | "findUnique" | "findUniqueOrThrow" | "update" | "findMany" | "findFirst" | "updateMany", import("bun:test").jest.Mock<(...args: any[]) => any>>;
|
|
9
9
|
knowledgeSource: Record<"count" | "create" | "findMany", import("bun:test").jest.Mock<(...args: any[]) => any>>;
|
|
10
|
-
studioDeployment: Record<"create" | "
|
|
10
|
+
studioDeployment: Record<"create" | "findUnique" | "update" | "findMany" | "findFirst" | "aggregate", import("bun:test").jest.Mock<(...args: any[]) => any>>;
|
|
11
11
|
evolutionSession: Record<"create" | "update", import("bun:test").jest.Mock<(...args: any[]) => any>>;
|
|
12
12
|
organization: Record<"findFirst", import("bun:test").jest.Mock<(...args: any[]) => any>>;
|
|
13
13
|
$transaction: import("bun:test").jest.Mock<(actions: Promise<unknown>[]) => Promise<unknown[]>>;
|
|
@@ -13,5 +13,5 @@ ${X}`:""].filter(Boolean).join(`
|
|
|
13
13
|
`),...Z?{route:Z}:{},...J?{schema:J}:{},...Q?{policy:Q}:{},tags:j.meta.tags??[],owners:j.meta.owners??[],stability:j.meta.stability}}function p(j){let Y=j.includeSchema??!1,J=o0(j.type),Q=Sj(j.key,j.version);if(Q&&(!J||J==="operation"||J===Q.meta.kind))return{reference:UY(Q,Q.meta.kind,Y?JY(j.key,j.version):void 0,Q.policy)};let $=[{type:"data-view",spec:gj(j.key,j.version),schema:Y?$Y(j.key,j.version):void 0},{type:"form",spec:uj(j.key,j.version),schema:Y?XY(j.key,j.version):void 0},{type:"presentation",spec:mj(j.key,j.version),schema:Y?ZY(j.key,j.version):void 0},{type:"event",spec:yj(j.key,j.version),schema:Y?QY(j.key,j.version):void 0}];for(let Z of $)if(Z.spec&&(!J||J===Z.type))return{reference:UY(Z.spec,Z.type,Z.schema)};throw Error(`Contract reference not found: ${j.key}`)}import{definePrompt as VY,PromptRegistry as t0}from"@contractspec/lib.contracts-spec";import L from"zod";var HY=["@contractspec"],KY=["docs","mcp"];function wY(j){let Y=new t0;return Y.register(VY({meta:{key:"docs.navigator",version:"1.0.0",title:"Find relevant ContractSpec docs",description:"Guide agents to search, filter, and open the right ContractSpec docs.",tags:KY,stability:"beta",owners:HY},args:[{name:"topic",description:"Goal or subject to search for.",required:!1,schema:L.string().optional()},{name:"kind",description:"Optional doc kind filter.",required:!1,schema:L.string().optional()},{name:"tag",description:"Optional tag filter.",required:!1,schema:L.string().optional()}],input:L.object({topic:L.string().optional(),kind:L.string().optional(),tag:L.string().optional()}),render:async({topic:J,kind:Q,tag:$})=>{let Z=d(j,{query:J,kind:Q,tag:$,limit:3}),X=Z.docs.length?Z.docs.map((U)=>`- ${U.title} (${U.id}) -> ${U.route}`).join(`
|
|
14
14
|
`):"- No direct pre-match. Use docs_list_facets-v1_0_0 to browse tags and kinds.";return[{type:"text",text:["Use docs_search-v1_0_0 first, then read docs://doc/{id} for the strongest matches.","Use docs_resolve_route-v1_0_0 when the user already gives you a docs URL or route.","Use docs_list_facets-v1_0_0 or docs://facets to browse the docs taxonomy before guessing.",J?`Topic: ${J}`:"",Q?`Kind: ${Q}`:"",$?`Tag: ${$}`:"","Suggested starting docs:",X].filter(Boolean).join(`
|
|
15
15
|
`)},{type:"resource",uri:"docs://index",title:"DocBlocks index"},{type:"resource",uri:"docs://facets",title:"Docs facets"}]}})),Y.register(VY({meta:{key:"docs.reference.guide",version:"1.0.0",title:"Resolve a ContractSpec reference",description:"Guide agents to fetch the canonical reference payload for a ContractSpec surface.",tags:KY,stability:"beta",owners:HY},args:[{name:"key",description:"ContractSpec key to resolve.",required:!0,schema:L.string()},{name:"version",description:"Optional version override.",required:!1,schema:L.string().optional()},{name:"type",description:"Optional surface type: command, query, form, data-view, presentation, event.",required:!1,schema:L.string().optional()}],input:L.object({key:L.string(),version:L.string().optional(),type:L.string().optional()}),render:async({key:J,version:Q,type:$})=>{let Z=p({key:J,version:Q,type:$,includeSchema:!0}).reference;return[{type:"text",text:["Use docs_contract_reference-v1_0_0 when you need the canonical docs payload for a ContractSpec surface.","Use docs_get-v1_0_0 only when you already know the exact DocBlock id and need raw markdown.",`Resolved key: ${Z.key}`,`Resolved type: ${Z.type}`,Z.route?`Docs route: ${Z.route}`:"",`Resource URI: docs://contract-reference/${encodeURIComponent(J)}`].filter(Boolean).join(`
|
|
16
|
-
`)},{type:"resource",uri:`docs://contract-reference/${encodeURIComponent(J)}`,title:"Contract reference"}]}})),Y}import{defineResourceTemplate as k,ResourceRegistry as s0}from"@contractspec/lib.contracts-spec";import F from"zod";var v=["docs","mcp"];function FY(j){let Y=new s0,J=(Q)=>d(j,Q);return Y.register(k({meta:{uriTemplate:"docs://index",title:"DocBlocks index",description:"Default ContractSpec docs index resource.",mimeType:"application/json",tags:v},input:F.object({}),resolve:async()=>({uri:"docs://index",mimeType:"application/json",data:JSON.stringify(J({}),null,2)})})),Y.register(k({meta:{uriTemplate:"docs://index{?query,tag,kind,visibility,limit,offset}",title:"DocBlocks index",description:"Search and paginate ContractSpec docs by query, tag, kind, or visibility.",mimeType:"application/json",tags:v},input:F.object({query:F.string().optional(),tag:F.string().optional(),kind:F.string().optional(),visibility:F.string().optional(),limit:F.coerce.number().optional(),offset:F.coerce.number().optional()}),resolve:async(Q)=>({uri:"docs://index",mimeType:"application/json",data:JSON.stringify(J(Q),null,2)})})),Y.register(k({meta:{uriTemplate:"docs://list",title:"DocBlocks index (legacy alias)",description:"Compatibility alias for the docs index resource.",mimeType:"application/json",tags:v},input:F.object({}),resolve:async()=>({uri:"docs://list",mimeType:"application/json",data:JSON.stringify(J({}),null,2)})})),Y.register(k({meta:{uriTemplate:"docs://doc/{id}",title:"Doc markdown",description:"Fetch a single DocBlock body by id as markdown.",mimeType:"text/markdown",tags:v},input:F.object({id:F.string()}),resolve:async({id:Q})=>{let $=Hj(Q);if(!$)return{uri:`docs://doc/${encodeURIComponent(Q)}`,mimeType:"text/plain",data:`DocBlock not found: ${Q}`};return{uri:`docs://doc/${encodeURIComponent(Q)}`,mimeType:"text/markdown",data:$.content}}})),Y.register(k({meta:{uriTemplate:"docs://route/{routePath}",title:"Doc by route",description:"Resolve a docs route to the matching DocBlock summary and body.",mimeType:"application/json",tags:v},input:F.object({routePath:F.string()}),resolve:async({routePath:Q})=>({uri:`docs://route/${encodeURIComponent(Q)}`,mimeType:"application/json",data:JSON.stringify(Kj(j,Q)??{error:"not_found",route:Q},null,2)})})),Y.register(k({meta:{uriTemplate:"docs://facets",title:"Docs facets",description:"Counts of available tags, kinds, and visibilities across docs.",mimeType:"application/json",tags:v},input:F.object({}),resolve:async()=>({uri:"docs://facets",mimeType:"application/json",data:JSON.stringify(wj(j),null,2)})})),Y.register(k({meta:{uriTemplate:"docs://contract-reference/{key}{?version,type,includeSchema}",title:"Contract reference",description:"Resolve a ContractSpec surface into a docs-ready reference payload.",mimeType:"application/json",tags:v},input:F.object({key:F.string(),version:F.string().optional(),type:F.string().optional(),includeSchema:F.coerce.boolean().optional()}),resolve:async({key:Q,version:$,type:Z,includeSchema:X})=>({uri:`docs://contract-reference/${encodeURIComponent(Q)}`,mimeType:"application/json",data:JSON.stringify(p({key:Q,version:$,type:Z,includeSchema:X}),null,2)})})),Y}import{defineCommand as r,defineSchemaModel as l,installOp as e,OperationSpecRegistry as r0}from"@contractspec/lib.contracts-spec";import{ContractReferenceInput as e0,ContractReferenceOutput as jJ,DocsIndexInput as YJ,DocsIndexOutput as JJ}from"@contractspec/lib.contracts-spec/docs";import{ScalarTypeEnum as O}from"@contractspec/lib.schema";var jj=["@contractspec"],Yj=["docs","mcp"],QJ=l({name:"DocsGetInput",fields:{id:{type:O.String_unsecure(),isOptional:!1}}}),ZJ=l({name:"DocsGetOutput",fields:{doc:{type:O.JSON(),isOptional:!1},content:{type:O.String_unsecure(),isOptional:!1}}}),$J=l({name:"DocsResolveRouteInput",fields:{route:{type:O.String_unsecure(),isOptional:!1}}}),XJ=l({name:"DocsResolveRouteOutput",fields:{doc:{type:O.JSON(),isOptional:!1},content:{type:O.String_unsecure(),isOptional:!1}}}),UJ=l({name:"DocsFacetsInput",fields:{}}),VJ=l({name:"DocsFacetsOutput",fields:{facets:{type:O.JSON(),isOptional:!1}}});function BY(j){let Y=new r0;return e(Y,r({meta:{key:"docs.search",version:"1.0.0",stability:"beta",owners:jj,tags:Yj,description:"Search ContractSpec docs by query, tag, kind, or visibility.",goal:"Find the most relevant DocBlocks without browsing the full corpus.",context:"Read-only docs MCP search surface."},io:{input:YJ,output:JJ},policy:{auth:"anonymous"},transport:{mcp:{toolName:"docs_search-v1_0_0"}}}),async(J)=>d(j,J)),e(Y,r({meta:{key:"docs.get",version:"1.0.0",stability:"beta",owners:jj,tags:Yj,description:"Read a single DocBlock by id.",goal:"Fetch the exact markdown content and metadata for a known doc id.",context:"Read-only docs MCP surface."},io:{input:QJ,output:ZJ},policy:{auth:"anonymous"},transport:{mcp:{toolName:"docs_get-v1_0_0"}}}),async({id:J})=>{let Q=Hj(J);if(!Q)throw Error(`DocBlock not found: ${J}`);return Q}),e(Y,r({meta:{key:"docs.resolveRoute",version:"1.0.0",stability:"beta",owners:jj,tags:Yj,description:"Resolve a docs route to the matching DocBlock.",goal:"Turn a route or URL path into a canonical doc id and markdown body.",context:"Read-only docs MCP surface."},io:{input:$J,output:XJ},policy:{auth:"anonymous"},transport:{mcp:{toolName:"docs_resolve_route-v1_0_0"}}}),async({route:J})=>{let Q=Kj(j,J);if(!Q)throw Error(`Doc route not found: ${J}`);return Q}),e(Y,r({meta:{key:"docs.contract.lookup",version:"1.0.0",stability:"beta",owners:jj,tags:Yj,description:"Resolve a ContractSpec surface into a docs-ready reference payload.",goal:"Get canonical docs metadata, route, and optional schema for a spec key.",context:"Read-only docs MCP surface."},io:{input:e0,output:jJ},policy:{auth:"anonymous"},transport:{mcp:{toolName:"docs_contract_reference-v1_0_0"}}}),async(J)=>p(J)),e(Y,r({meta:{key:"docs.list.facets",version:"1.0.0",stability:"beta",owners:jj,tags:Yj,description:"List docs taxonomy facets such as tags, kinds, and visibilities.",goal:"Help agents browse the docs corpus before making targeted reads.",context:"Read-only docs MCP surface."},io:{input:UJ,output:VJ},policy:{auth:"anonymous"},transport:{mcp:{toolName:"docs_list_facets-v1_0_0"}}}),async()=>({facets:wj(j)})),Y}import{defaultDocRegistry as HJ}from"@contractspec/lib.contracts-spec/docs";function LZ(j="/api/mcp/docs",Y={}){let J=HJ.list();return A({logger:D,path:j,serverName:"contractspec-docs-mcp",ops:BY(J),resources:FY(J),prompts:wY(J),presentations:Y.includePresentations?J.map(({descriptor:Q})=>Q):void 0})}import{defineCommand as KJ,definePrompt as wJ,defineResourceTemplate as Lj,installOp as FJ,OperationSpecRegistry as BJ,PromptRegistry as WJ,ResourceRegistry as xJ}from"@contractspec/lib.contracts-spec";import{defineSchemaModel as WY,ScalarTypeEnum as xY}from"@contractspec/lib.schema";import{getExample as PJ,listExamples as LJ,searchExamples as qJ}from"@contractspec/module.examples";import R from"zod";var n=["internal","mcp"],PY=["@contractspec"],Jj={docs:"/api/mcp/docs",cli:"/api/mcp/cli",internal:"/api/mcp/internal",graphql:"/graphql",health:"/health"};function _J(){let j=new xJ;return j.register(Lj({meta:{uriTemplate:"examples://list{?q}",title:"ContractSpec examples registry",description:"List available examples (templates, integrations, knowledge, scripts). Optional query `q` filters results.",mimeType:"application/json",tags:["examples",...n]},input:R.object({q:R.string().optional()}),resolve:async({q:Y})=>{let J=Y?qJ(Y):[...LJ()];return{uri:Y?`examples://list?q=${encodeURIComponent(Y)}`:"examples://list",mimeType:"application/json",data:JSON.stringify(J,null,2)}}})),j.register(Lj({meta:{uriTemplate:"examples://example/{id}",title:"ContractSpec example (by id)",description:"Fetch a single example manifest by id.",mimeType:"application/json",tags:["examples",...n]},input:R.object({id:R.string().min(1)}),resolve:async({id:Y})=>{let J=PJ(Y);if(!J)return{uri:`examples://example/${encodeURIComponent(Y)}`,mimeType:"application/json",data:JSON.stringify({error:"not_found",id:Y,message:`Unknown example id: ${Y}`},null,2)};return{uri:`examples://example/${encodeURIComponent(Y)}`,mimeType:"application/json",data:JSON.stringify(J,null,2)}}})),j.register(Lj({meta:{uriTemplate:"internal://endpoints",title:"ContractSpec MCP endpoints",description:"Endpoints for docs, CLI, internal MCP servers.",mimeType:"application/json",tags:n},input:R.object({}),resolve:async()=>({uri:"internal://endpoints",mimeType:"application/json",data:JSON.stringify(Jj,null,2)})})),j.register(Lj({meta:{uriTemplate:"internal://playbook",title:"Internal MCP usage playbook",description:"How internal agents should discover docs, CLI usage, and endpoints.",mimeType:"text/markdown",tags:n},input:R.object({}),resolve:async()=>({uri:"internal://playbook",mimeType:"text/markdown",data:["# Internal MCP playbook","- Connect to docs MCP first for canonical specs.","- Use CLI MCP to surface quickstart/reference before running commands.","- Keep calls read-only unless explicitly approved.",`- Endpoints: ${Jj.docs}, ${Jj.cli}, ${Jj.internal}.`,"- For API work, GraphQL at /graphql; health at /health."].join(`
|
|
16
|
+
`)},{type:"resource",uri:`docs://contract-reference/${encodeURIComponent(J)}`,title:"Contract reference"}]}})),Y}import{defineResourceTemplate as k,ResourceRegistry as s0}from"@contractspec/lib.contracts-spec";import F from"zod";var v=["docs","mcp"];function FY(j){let Y=new s0,J=(Q)=>d(j,Q);return Y.register(k({meta:{uriTemplate:"docs://index",title:"DocBlocks index",description:"Default ContractSpec docs index resource.",mimeType:"application/json",tags:v},input:F.object({}),resolve:async()=>({uri:"docs://index",mimeType:"application/json",data:JSON.stringify(J({}),null,2)})})),Y.register(k({meta:{uriTemplate:"docs://index{?query,tag,kind,visibility,limit,offset}",title:"DocBlocks index",description:"Search and paginate ContractSpec docs by query, tag, kind, or visibility.",mimeType:"application/json",tags:v},input:F.object({query:F.string().optional(),tag:F.string().optional(),kind:F.string().optional(),visibility:F.string().optional(),limit:F.coerce.number().optional(),offset:F.coerce.number().optional()}),resolve:async(Q)=>({uri:"docs://index",mimeType:"application/json",data:JSON.stringify(J(Q),null,2)})})),Y.register(k({meta:{uriTemplate:"docs://list",title:"DocBlocks index (legacy alias)",description:"Compatibility alias for the docs index resource.",mimeType:"application/json",tags:v},input:F.object({}),resolve:async()=>({uri:"docs://list",mimeType:"application/json",data:JSON.stringify(J({}),null,2)})})),Y.register(k({meta:{uriTemplate:"docs://doc/{id}",title:"Doc markdown",description:"Fetch a single DocBlock body by id as markdown.",mimeType:"text/markdown",tags:v},input:F.object({id:F.string()}),resolve:async({id:Q})=>{let $=Hj(Q);if(!$)return{uri:`docs://doc/${encodeURIComponent(Q)}`,mimeType:"text/plain",data:`DocBlock not found: ${Q}`};return{uri:`docs://doc/${encodeURIComponent(Q)}`,mimeType:"text/markdown",data:$.content}}})),Y.register(k({meta:{uriTemplate:"docs://route/{routePath}",title:"Doc by route",description:"Resolve a docs route to the matching DocBlock summary and body.",mimeType:"application/json",tags:v},input:F.object({routePath:F.string()}),resolve:async({routePath:Q})=>({uri:`docs://route/${encodeURIComponent(Q)}`,mimeType:"application/json",data:JSON.stringify(Kj(j,Q)??{error:"not_found",route:Q},null,2)})})),Y.register(k({meta:{uriTemplate:"docs://facets",title:"Docs facets",description:"Counts of available tags, kinds, and visibilities across docs.",mimeType:"application/json",tags:v},input:F.object({}),resolve:async()=>({uri:"docs://facets",mimeType:"application/json",data:JSON.stringify(wj(j),null,2)})})),Y.register(k({meta:{uriTemplate:"docs://contract-reference/{key}{?version,type,includeSchema}",title:"Contract reference",description:"Resolve a ContractSpec surface into a docs-ready reference payload.",mimeType:"application/json",tags:v},input:F.object({key:F.string(),version:F.string().optional(),type:F.string().optional(),includeSchema:F.coerce.boolean().optional()}),resolve:async({key:Q,version:$,type:Z,includeSchema:X})=>({uri:`docs://contract-reference/${encodeURIComponent(Q)}`,mimeType:"application/json",data:JSON.stringify(p({key:Q,version:$,type:Z,includeSchema:X}),null,2)})})),Y}import{defineCommand as r,defineSchemaModel as l,installOp as e,OperationSpecRegistry as r0}from"@contractspec/lib.contracts-spec";import{ContractReferenceInput as e0,ContractReferenceOutput as jJ,DocsIndexInput as YJ,DocsIndexOutput as JJ}from"@contractspec/lib.contracts-spec/docs";import{ScalarTypeEnum as O}from"@contractspec/lib.schema";var jj=["@contractspec"],Yj=["docs","mcp"],QJ=l({name:"DocsGetInput",fields:{id:{type:O.String_unsecure(),isOptional:!1}}}),ZJ=l({name:"DocsGetOutput",fields:{doc:{type:O.JSON(),isOptional:!1},content:{type:O.String_unsecure(),isOptional:!1}}}),$J=l({name:"DocsResolveRouteInput",fields:{route:{type:O.String_unsecure(),isOptional:!1}}}),XJ=l({name:"DocsResolveRouteOutput",fields:{doc:{type:O.JSON(),isOptional:!1},content:{type:O.String_unsecure(),isOptional:!1}}}),UJ=l({name:"DocsFacetsInput",fields:{}}),VJ=l({name:"DocsFacetsOutput",fields:{facets:{type:O.JSON(),isOptional:!1}}});function BY(j){let Y=new r0;return e(Y,r({meta:{key:"docs.search",version:"1.0.0",stability:"beta",owners:jj,tags:Yj,description:"Search ContractSpec docs by query, tag, kind, or visibility.",goal:"Find the most relevant DocBlocks without browsing the full corpus.",context:"Read-only docs MCP search surface."},io:{input:YJ,output:JJ},policy:{auth:"anonymous"},transport:{mcp:{toolName:"docs_search-v1_0_0"}}}),async(J)=>d(j,J)),e(Y,r({meta:{key:"docs.get",version:"1.0.0",stability:"beta",owners:jj,tags:Yj,description:"Read a single DocBlock by id.",goal:"Fetch the exact markdown content and metadata for a known doc id.",context:"Read-only docs MCP surface."},io:{input:QJ,output:ZJ},policy:{auth:"anonymous"},transport:{mcp:{toolName:"docs_get-v1_0_0"}}}),async({id:J})=>{let Q=Hj(J);if(!Q)throw Error(`DocBlock not found: ${J}`);return Q}),e(Y,r({meta:{key:"docs.resolveRoute",version:"1.0.0",stability:"beta",owners:jj,tags:Yj,description:"Resolve a docs route to the matching DocBlock.",goal:"Turn a route or URL path into a canonical doc id and markdown body.",context:"Read-only docs MCP surface."},io:{input:$J,output:XJ},policy:{auth:"anonymous"},transport:{mcp:{toolName:"docs_resolve_route-v1_0_0"}}}),async({route:J})=>{let Q=Kj(j,J);if(!Q)throw Error(`Doc route not found: ${J}`);return Q}),e(Y,r({meta:{key:"docs.contract.lookup",version:"1.0.0",stability:"beta",owners:jj,tags:Yj,description:"Resolve a ContractSpec surface into a docs-ready reference payload.",goal:"Get canonical docs metadata, route, and optional schema for a spec key.",context:"Read-only docs MCP surface."},io:{input:e0,output:jJ},policy:{auth:"anonymous"},transport:{mcp:{toolName:"docs_contract_reference-v1_0_0"}}}),async(J)=>p(J)),e(Y,r({meta:{key:"docs.list.facets",version:"1.0.0",stability:"beta",owners:jj,tags:Yj,description:"List docs taxonomy facets such as tags, kinds, and visibilities.",goal:"Help agents browse the docs corpus before making targeted reads.",context:"Read-only docs MCP surface."},io:{input:UJ,output:VJ},policy:{auth:"anonymous"},transport:{mcp:{toolName:"docs_list_facets-v1_0_0"}}}),async()=>({facets:wj(j)})),Y}import{defaultDocRegistry as HJ}from"@contractspec/lib.contracts-spec/docs";function LZ(j="/api/mcp/docs",Y={}){let J=HJ.list();return A({logger:D,path:j,serverName:"contractspec-docs-mcp",ops:BY(J),resources:FY(J),prompts:wY(J),presentations:Y.includePresentations?J.map(({descriptor:Q})=>Q):void 0})}import{defineCommand as KJ,definePrompt as wJ,defineResourceTemplate as Lj,installOp as FJ,OperationSpecRegistry as BJ,PromptRegistry as WJ,ResourceRegistry as xJ}from"@contractspec/lib.contracts-spec";import{defineSchemaModel as WY,ScalarTypeEnum as xY}from"@contractspec/lib.schema";import{getExample as PJ,listExamples as LJ,searchExamples as qJ}from"@contractspec/module.examples/catalog";import R from"zod";var n=["internal","mcp"],PY=["@contractspec"],Jj={docs:"/api/mcp/docs",cli:"/api/mcp/cli",internal:"/api/mcp/internal",graphql:"/graphql",health:"/health"};function _J(){let j=new xJ;return j.register(Lj({meta:{uriTemplate:"examples://list{?q}",title:"ContractSpec examples registry",description:"List available examples (templates, integrations, knowledge, scripts). Optional query `q` filters results.",mimeType:"application/json",tags:["examples",...n]},input:R.object({q:R.string().optional()}),resolve:async({q:Y})=>{let J=Y?qJ(Y):[...LJ()];return{uri:Y?`examples://list?q=${encodeURIComponent(Y)}`:"examples://list",mimeType:"application/json",data:JSON.stringify(J,null,2)}}})),j.register(Lj({meta:{uriTemplate:"examples://example/{id}",title:"ContractSpec example (by id)",description:"Fetch a single example manifest by id.",mimeType:"application/json",tags:["examples",...n]},input:R.object({id:R.string().min(1)}),resolve:async({id:Y})=>{let J=PJ(Y);if(!J)return{uri:`examples://example/${encodeURIComponent(Y)}`,mimeType:"application/json",data:JSON.stringify({error:"not_found",id:Y,message:`Unknown example id: ${Y}`},null,2)};return{uri:`examples://example/${encodeURIComponent(Y)}`,mimeType:"application/json",data:JSON.stringify(J,null,2)}}})),j.register(Lj({meta:{uriTemplate:"internal://endpoints",title:"ContractSpec MCP endpoints",description:"Endpoints for docs, CLI, internal MCP servers.",mimeType:"application/json",tags:n},input:R.object({}),resolve:async()=>({uri:"internal://endpoints",mimeType:"application/json",data:JSON.stringify(Jj,null,2)})})),j.register(Lj({meta:{uriTemplate:"internal://playbook",title:"Internal MCP usage playbook",description:"How internal agents should discover docs, CLI usage, and endpoints.",mimeType:"text/markdown",tags:n},input:R.object({}),resolve:async()=>({uri:"internal://playbook",mimeType:"text/markdown",data:["# Internal MCP playbook","- Connect to docs MCP first for canonical specs.","- Use CLI MCP to surface quickstart/reference before running commands.","- Keep calls read-only unless explicitly approved.",`- Endpoints: ${Jj.docs}, ${Jj.cli}, ${Jj.internal}.`,"- For API work, GraphQL at /graphql; health at /health."].join(`
|
|
17
17
|
`)})})),j}function MJ(){let j=new WJ;return j.register(wJ({meta:{key:"internal_bootstrap",version:"1.0.0",title:"Bootstrap internal ContractSpec agent",description:"Points agents to the correct MCP endpoints and guardrails.",tags:n,owners:PY,stability:"beta"},args:[],input:R.object({}),render:async()=>[{type:"text",text:"Start with internal://endpoints to pick the right MCP. Use docs MCP for specifications and CLI MCP for commands. Keep actions read-only unless explicitly approved."},{type:"resource",uri:"internal://endpoints",title:"Endpoints"}]})),j}function bJ(){let j=new BJ,Y=WY({name:"InternalDescribeOutput",fields:{endpoints:{type:xY.JSONObject(),isOptional:!1},notes:{type:xY.String_unsecure(),isOptional:!1}}}),J=KJ({meta:{key:"internal_describe",version:"1.0.0",stability:"stable",owners:PY,tags:n,description:"Return MCP endpoints and guidance for internal ContractSpec agents.",goal:"Speed up internal development with the correct MCP entrypoints.",context:"Used by internal MCP surface; read-only."},io:{input:WY({name:"InternalDescribeInput",fields:{}}),output:Y},policy:{auth:"anonymous"}});return FJ(j,J,async()=>({endpoints:Jj,notes:"Use docs MCP for canonical specs, CLI MCP for contractspec commands, and keep side-effecting actions gated behind human review."})),j}function AZ(j="/api/mcp/internal"){return A({logger:D,path:j,serverName:"contractspec-internal-mcp",ops:bJ(),resources:_J(),prompts:MJ()})}import{getModelInfo as GJ}from"@contractspec/lib.ai-providers/models";import{definePrompt as DJ,defineResourceTemplate as qj,installOp as dj,OperationSpecRegistry as CJ,PromptRegistry as AJ,ResourceRegistry as NJ}from"@contractspec/lib.contracts-spec";import{BenchmarkIngestCommand as IJ,BenchmarkRunCustomCommand as zJ,RankingRefreshCommand as EJ}from"@contractspec/lib.contracts-spec/provider-ranking";import{InMemoryProviderRankingStore as kJ}from"@contractspec/lib.provider-ranking/in-memory-store";import{createDefaultIngesterRegistry as vJ}from"@contractspec/lib.provider-ranking/ingesters";import{computeModelRankings as OJ,normalizeBenchmarkResults as RJ}from"@contractspec/lib.provider-ranking/scoring";import M from"zod";var Mj=M.enum(["rest","mcp","webhook","sdk"]).optional(),bj=M.enum(["api-key","oauth2","bearer","header","basic","webhook-signing","service-account"]).optional(),Qj=["ranking","mcp","ai"],hJ=["platform.ai"],_j=null;function c(){if(!_j)_j=new kJ;return _j}function TJ(){let j=new NJ;return j.register(qj({meta:{uriTemplate:"ranking://leaderboard",title:"AI Model Leaderboard",description:"Current ranked list of AI models by composite score. Supports optional transport and authMethod query filters.",mimeType:"application/json",tags:Qj},input:M.object({transport:Mj,authMethod:bj}),resolve:async({transport:Y,authMethod:J})=>{let $=await c().listModelRankings({limit:100,requiredTransport:Y,requiredAuthMethod:J});return{uri:"ranking://leaderboard",mimeType:"application/json",data:JSON.stringify($,null,2)}}})),j.register(qj({meta:{uriTemplate:"ranking://leaderboard/{dimension}",title:"AI Model Leaderboard by Dimension",description:"Ranked list of AI models filtered by a specific dimension. Supports optional transport and authMethod query filters.",mimeType:"application/json",tags:Qj},input:M.object({dimension:M.string(),transport:Mj,authMethod:bj}),resolve:async({dimension:Y,transport:J,authMethod:Q})=>{let Z=await c().listModelRankings({dimension:Y,limit:100,requiredTransport:J,requiredAuthMethod:Q});return{uri:`ranking://leaderboard/${encodeURIComponent(Y)}`,mimeType:"application/json",data:JSON.stringify(Z,null,2)}}})),j.register(qj({meta:{uriTemplate:"ranking://model/{modelId}",title:"AI Model Profile",description:"Detailed profile for a specific AI model including scores and benchmarks.",mimeType:"application/json",tags:Qj},input:M.object({modelId:M.string()}),resolve:async({modelId:Y})=>{let Q=await c().getModelProfile(Y);if(!Q)return{uri:`ranking://model/${encodeURIComponent(Y)}`,mimeType:"application/json",data:JSON.stringify({error:"not_found",modelId:Y})};let $=Q.costPerMillion==null?(()=>{let Z=GJ(Q.modelId);return Z?.costPerMillion?{...Q,costPerMillion:Z.costPerMillion,displayName:Z.name,contextWindow:Z.contextWindow,capabilities:[...Z.capabilities.vision?["vision"]:[],...Z.capabilities.tools?["tools"]:[],...Z.capabilities.reasoning?["reasoning"]:[],...Z.capabilities.streaming?["streaming"]:[]]}:Q})():Q;return{uri:`ranking://model/${encodeURIComponent(Y)}`,mimeType:"application/json",data:JSON.stringify($,null,2)}}})),j.register(qj({meta:{uriTemplate:"ranking://results",title:"Benchmark Results",description:"List of raw benchmark results from all ingested sources.",mimeType:"application/json",tags:Qj},input:M.object({}),resolve:async()=>{let J=await c().listBenchmarkResults({limit:200});return{uri:"ranking://results",mimeType:"application/json",data:JSON.stringify(J,null,2)}}})),j}function fJ(){let j=new AJ;return j.register(DJ({meta:{key:"ranking.advisor",version:"1.0.0",title:"AI Model Advisor",description:"Which AI model is best for a given task? Uses the leaderboard to recommend.",tags:Qj,stability:"beta",owners:hJ},args:[{name:"task",description:"The task or use case to recommend a model for.",required:!0,schema:M.string()},{name:"priority",description:"Priority dimension (coding, reasoning, cost, latency, etc.).",required:!1,schema:M.string().optional()},{name:"transport",description:"Required transport type (rest, mcp, webhook, sdk).",required:!1,schema:Mj},{name:"authMethod",description:"Required auth method (api-key, oauth2, bearer, etc.).",required:!1,schema:bj}],input:M.object({task:M.string(),priority:M.string().optional(),transport:Mj,authMethod:bj}),render:async({task:Y,priority:J,transport:Q,authMethod:$})=>{let Z=[];if(J)Z.push(`Prioritize: ${J}.`);if(Q)Z.push(`Required transport: ${Q}.`);if($)Z.push(`Required auth: ${$}.`);return[{type:"text",text:`Recommend the best AI model for: "${Y}".${Z.length?` ${Z.join(" ")}`:""} Use the leaderboard data to justify your recommendation.`},{type:"resource",uri:J?`ranking://leaderboard/${J}`:"ranking://leaderboard",title:"Leaderboard"}]}})),j}function SJ(){let j=new CJ,Y=vJ();return dj(j,IJ,async(J)=>{let Q=c(),$=J.source,Z=Y.get($);if(!Z)throw Error(`No ingester registered for source: ${$}`);let X=await Z.ingest({sourceUrl:J.sourceUrl,dimensions:J.dimensions}),U=RJ(X);for(let V of U)await Q.upsertBenchmarkResult(V);return{ingestionId:`ingest-${$}-${Date.now()}`,source:$,resultsCount:U.length,status:"completed",ingestedAt:new Date}}),dj(j,zJ,async(J)=>{return{runId:`custom-${Date.now()}`,evalSuiteKey:J.evalSuiteKey,modelId:J.modelId,status:"started",startedAt:new Date}}),dj(j,EJ,async(J)=>{let Q=c(),$=[],Z=0,X=500;while(!0){let H=await Q.listBenchmarkResults({limit:X,offset:Z});if($.push(...H.results),$.length>=H.total||H.results.length<X)break;Z+=X}let U=new Map((await Q.listModelRankings({limit:1e4})).rankings.map((H)=>[H.modelId,H])),V=J.weightOverrides?Array.isArray(J.weightOverrides)?J.weightOverrides:[J.weightOverrides]:void 0,B=OJ($,V?{weightOverrides:V}:void 0,U);for(let H of B)await Q.upsertModelRanking(H);return{modelsRanked:B.length,updatedAt:new Date,status:"completed"}}),j}function fZ(j="/api/mcp/ranking"){return A({logger:D,path:j,serverName:"contractspec-ranking-mcp",ops:SJ(),resources:TJ(),prompts:fJ()})}function SZ(j){_j=j}export{SZ as setProviderRankingStore,fZ as createProviderRankingMcpHandler,AZ as createInternalMcpHandler,LZ as createDocsMcpHandler,hQ as createContractsMcpHandler,lJ as createContextStorageService,qQ as createCliMcpHandler};
|
|
@@ -13,5 +13,5 @@ ${X}`:""].filter(Boolean).join(`
|
|
|
13
13
|
`),...Z?{route:Z}:{},...J?{schema:J}:{},...Q?{policy:Q}:{},tags:j.meta.tags??[],owners:j.meta.owners??[],stability:j.meta.stability}}function p(j){let Y=j.includeSchema??!1,J=l0(j.type),Q=Sj(j.key,j.version);if(Q&&(!J||J==="operation"||J===Q.meta.kind))return{reference:UY(Q,Q.meta.kind,Y?JY(j.key,j.version):void 0,Q.policy)};let $=[{type:"data-view",spec:gj(j.key,j.version),schema:Y?$Y(j.key,j.version):void 0},{type:"form",spec:dj(j.key,j.version),schema:Y?XY(j.key,j.version):void 0},{type:"presentation",spec:mj(j.key,j.version),schema:Y?ZY(j.key,j.version):void 0},{type:"event",spec:yj(j.key,j.version),schema:Y?QY(j.key,j.version):void 0}];for(let Z of $)if(Z.spec&&(!J||J===Z.type))return{reference:UY(Z.spec,Z.type,Z.schema)};throw Error(`Contract reference not found: ${j.key}`)}import{definePrompt as VY,PromptRegistry as c0}from"@contractspec/lib.contracts-spec";import L from"zod";var HY=["@contractspec"],KY=["docs","mcp"];function wY(j){let Y=new c0;return Y.register(VY({meta:{key:"docs.navigator",version:"1.0.0",title:"Find relevant ContractSpec docs",description:"Guide agents to search, filter, and open the right ContractSpec docs.",tags:KY,stability:"beta",owners:HY},args:[{name:"topic",description:"Goal or subject to search for.",required:!1,schema:L.string().optional()},{name:"kind",description:"Optional doc kind filter.",required:!1,schema:L.string().optional()},{name:"tag",description:"Optional tag filter.",required:!1,schema:L.string().optional()}],input:L.object({topic:L.string().optional(),kind:L.string().optional(),tag:L.string().optional()}),render:async({topic:J,kind:Q,tag:$})=>{let Z=u(j,{query:J,kind:Q,tag:$,limit:3}),X=Z.docs.length?Z.docs.map((U)=>`- ${U.title} (${U.id}) -> ${U.route}`).join(`
|
|
14
14
|
`):"- No direct pre-match. Use docs_list_facets-v1_0_0 to browse tags and kinds.";return[{type:"text",text:["Use docs_search-v1_0_0 first, then read docs://doc/{id} for the strongest matches.","Use docs_resolve_route-v1_0_0 when the user already gives you a docs URL or route.","Use docs_list_facets-v1_0_0 or docs://facets to browse the docs taxonomy before guessing.",J?`Topic: ${J}`:"",Q?`Kind: ${Q}`:"",$?`Tag: ${$}`:"","Suggested starting docs:",X].filter(Boolean).join(`
|
|
15
15
|
`)},{type:"resource",uri:"docs://index",title:"DocBlocks index"},{type:"resource",uri:"docs://facets",title:"Docs facets"}]}})),Y.register(VY({meta:{key:"docs.reference.guide",version:"1.0.0",title:"Resolve a ContractSpec reference",description:"Guide agents to fetch the canonical reference payload for a ContractSpec surface.",tags:KY,stability:"beta",owners:HY},args:[{name:"key",description:"ContractSpec key to resolve.",required:!0,schema:L.string()},{name:"version",description:"Optional version override.",required:!1,schema:L.string().optional()},{name:"type",description:"Optional surface type: command, query, form, data-view, presentation, event.",required:!1,schema:L.string().optional()}],input:L.object({key:L.string(),version:L.string().optional(),type:L.string().optional()}),render:async({key:J,version:Q,type:$})=>{let Z=p({key:J,version:Q,type:$,includeSchema:!0}).reference;return[{type:"text",text:["Use docs_contract_reference-v1_0_0 when you need the canonical docs payload for a ContractSpec surface.","Use docs_get-v1_0_0 only when you already know the exact DocBlock id and need raw markdown.",`Resolved key: ${Z.key}`,`Resolved type: ${Z.type}`,Z.route?`Docs route: ${Z.route}`:"",`Resource URI: docs://contract-reference/${encodeURIComponent(J)}`].filter(Boolean).join(`
|
|
16
|
-
`)},{type:"resource",uri:`docs://contract-reference/${encodeURIComponent(J)}`,title:"Contract reference"}]}})),Y}import{defineResourceTemplate as k,ResourceRegistry as i0}from"@contractspec/lib.contracts-spec";import F from"zod";var v=["docs","mcp"];function FY(j){let Y=new i0,J=(Q)=>u(j,Q);return Y.register(k({meta:{uriTemplate:"docs://index",title:"DocBlocks index",description:"Default ContractSpec docs index resource.",mimeType:"application/json",tags:v},input:F.object({}),resolve:async()=>({uri:"docs://index",mimeType:"application/json",data:JSON.stringify(J({}),null,2)})})),Y.register(k({meta:{uriTemplate:"docs://index{?query,tag,kind,visibility,limit,offset}",title:"DocBlocks index",description:"Search and paginate ContractSpec docs by query, tag, kind, or visibility.",mimeType:"application/json",tags:v},input:F.object({query:F.string().optional(),tag:F.string().optional(),kind:F.string().optional(),visibility:F.string().optional(),limit:F.coerce.number().optional(),offset:F.coerce.number().optional()}),resolve:async(Q)=>({uri:"docs://index",mimeType:"application/json",data:JSON.stringify(J(Q),null,2)})})),Y.register(k({meta:{uriTemplate:"docs://list",title:"DocBlocks index (legacy alias)",description:"Compatibility alias for the docs index resource.",mimeType:"application/json",tags:v},input:F.object({}),resolve:async()=>({uri:"docs://list",mimeType:"application/json",data:JSON.stringify(J({}),null,2)})})),Y.register(k({meta:{uriTemplate:"docs://doc/{id}",title:"Doc markdown",description:"Fetch a single DocBlock body by id as markdown.",mimeType:"text/markdown",tags:v},input:F.object({id:F.string()}),resolve:async({id:Q})=>{let $=Hj(Q);if(!$)return{uri:`docs://doc/${encodeURIComponent(Q)}`,mimeType:"text/plain",data:`DocBlock not found: ${Q}`};return{uri:`docs://doc/${encodeURIComponent(Q)}`,mimeType:"text/markdown",data:$.content}}})),Y.register(k({meta:{uriTemplate:"docs://route/{routePath}",title:"Doc by route",description:"Resolve a docs route to the matching DocBlock summary and body.",mimeType:"application/json",tags:v},input:F.object({routePath:F.string()}),resolve:async({routePath:Q})=>({uri:`docs://route/${encodeURIComponent(Q)}`,mimeType:"application/json",data:JSON.stringify(Kj(j,Q)??{error:"not_found",route:Q},null,2)})})),Y.register(k({meta:{uriTemplate:"docs://facets",title:"Docs facets",description:"Counts of available tags, kinds, and visibilities across docs.",mimeType:"application/json",tags:v},input:F.object({}),resolve:async()=>({uri:"docs://facets",mimeType:"application/json",data:JSON.stringify(wj(j),null,2)})})),Y.register(k({meta:{uriTemplate:"docs://contract-reference/{key}{?version,type,includeSchema}",title:"Contract reference",description:"Resolve a ContractSpec surface into a docs-ready reference payload.",mimeType:"application/json",tags:v},input:F.object({key:F.string(),version:F.string().optional(),type:F.string().optional(),includeSchema:F.coerce.boolean().optional()}),resolve:async({key:Q,version:$,type:Z,includeSchema:X})=>({uri:`docs://contract-reference/${encodeURIComponent(Q)}`,mimeType:"application/json",data:JSON.stringify(p({key:Q,version:$,type:Z,includeSchema:X}),null,2)})})),Y}import{defineCommand as r,defineSchemaModel as l,installOp as e,OperationSpecRegistry as o0}from"@contractspec/lib.contracts-spec";import{ContractReferenceInput as a0,ContractReferenceOutput as t0,DocsIndexInput as s0,DocsIndexOutput as r0}from"@contractspec/lib.contracts-spec/docs";import{ScalarTypeEnum as O}from"@contractspec/lib.schema";var jj=["@contractspec"],Yj=["docs","mcp"],e0=l({name:"DocsGetInput",fields:{id:{type:O.String_unsecure(),isOptional:!1}}}),jJ=l({name:"DocsGetOutput",fields:{doc:{type:O.JSON(),isOptional:!1},content:{type:O.String_unsecure(),isOptional:!1}}}),YJ=l({name:"DocsResolveRouteInput",fields:{route:{type:O.String_unsecure(),isOptional:!1}}}),JJ=l({name:"DocsResolveRouteOutput",fields:{doc:{type:O.JSON(),isOptional:!1},content:{type:O.String_unsecure(),isOptional:!1}}}),QJ=l({name:"DocsFacetsInput",fields:{}}),ZJ=l({name:"DocsFacetsOutput",fields:{facets:{type:O.JSON(),isOptional:!1}}});function BY(j){let Y=new o0;return e(Y,r({meta:{key:"docs.search",version:"1.0.0",stability:"beta",owners:jj,tags:Yj,description:"Search ContractSpec docs by query, tag, kind, or visibility.",goal:"Find the most relevant DocBlocks without browsing the full corpus.",context:"Read-only docs MCP search surface."},io:{input:s0,output:r0},policy:{auth:"anonymous"},transport:{mcp:{toolName:"docs_search-v1_0_0"}}}),async(J)=>u(j,J)),e(Y,r({meta:{key:"docs.get",version:"1.0.0",stability:"beta",owners:jj,tags:Yj,description:"Read a single DocBlock by id.",goal:"Fetch the exact markdown content and metadata for a known doc id.",context:"Read-only docs MCP surface."},io:{input:e0,output:jJ},policy:{auth:"anonymous"},transport:{mcp:{toolName:"docs_get-v1_0_0"}}}),async({id:J})=>{let Q=Hj(J);if(!Q)throw Error(`DocBlock not found: ${J}`);return Q}),e(Y,r({meta:{key:"docs.resolveRoute",version:"1.0.0",stability:"beta",owners:jj,tags:Yj,description:"Resolve a docs route to the matching DocBlock.",goal:"Turn a route or URL path into a canonical doc id and markdown body.",context:"Read-only docs MCP surface."},io:{input:YJ,output:JJ},policy:{auth:"anonymous"},transport:{mcp:{toolName:"docs_resolve_route-v1_0_0"}}}),async({route:J})=>{let Q=Kj(j,J);if(!Q)throw Error(`Doc route not found: ${J}`);return Q}),e(Y,r({meta:{key:"docs.contract.lookup",version:"1.0.0",stability:"beta",owners:jj,tags:Yj,description:"Resolve a ContractSpec surface into a docs-ready reference payload.",goal:"Get canonical docs metadata, route, and optional schema for a spec key.",context:"Read-only docs MCP surface."},io:{input:a0,output:t0},policy:{auth:"anonymous"},transport:{mcp:{toolName:"docs_contract_reference-v1_0_0"}}}),async(J)=>p(J)),e(Y,r({meta:{key:"docs.list.facets",version:"1.0.0",stability:"beta",owners:jj,tags:Yj,description:"List docs taxonomy facets such as tags, kinds, and visibilities.",goal:"Help agents browse the docs corpus before making targeted reads.",context:"Read-only docs MCP surface."},io:{input:QJ,output:ZJ},policy:{auth:"anonymous"},transport:{mcp:{toolName:"docs_list_facets-v1_0_0"}}}),async()=>({facets:wj(j)})),Y}import{defaultDocRegistry as $J}from"@contractspec/lib.contracts-spec/docs";function VZ(j="/api/mcp/docs",Y={}){let J=$J.list();return A({logger:D,path:j,serverName:"contractspec-docs-mcp",ops:BY(J),resources:FY(J),prompts:wY(J),presentations:Y.includePresentations?J.map(({descriptor:Q})=>Q):void 0})}import{defineCommand as XJ,definePrompt as UJ,defineResourceTemplate as Lj,installOp as VJ,OperationSpecRegistry as HJ,PromptRegistry as KJ,ResourceRegistry as wJ}from"@contractspec/lib.contracts-spec";import{defineSchemaModel as WY,ScalarTypeEnum as xY}from"@contractspec/lib.schema";import{getExample as FJ,listExamples as BJ,searchExamples as WJ}from"@contractspec/module.examples";import R from"zod";var n=["internal","mcp"],PY=["@contractspec"],Jj={docs:"/api/mcp/docs",cli:"/api/mcp/cli",internal:"/api/mcp/internal",graphql:"/graphql",health:"/health"};function xJ(){let j=new wJ;return j.register(Lj({meta:{uriTemplate:"examples://list{?q}",title:"ContractSpec examples registry",description:"List available examples (templates, integrations, knowledge, scripts). Optional query `q` filters results.",mimeType:"application/json",tags:["examples",...n]},input:R.object({q:R.string().optional()}),resolve:async({q:Y})=>{let J=Y?WJ(Y):[...BJ()];return{uri:Y?`examples://list?q=${encodeURIComponent(Y)}`:"examples://list",mimeType:"application/json",data:JSON.stringify(J,null,2)}}})),j.register(Lj({meta:{uriTemplate:"examples://example/{id}",title:"ContractSpec example (by id)",description:"Fetch a single example manifest by id.",mimeType:"application/json",tags:["examples",...n]},input:R.object({id:R.string().min(1)}),resolve:async({id:Y})=>{let J=FJ(Y);if(!J)return{uri:`examples://example/${encodeURIComponent(Y)}`,mimeType:"application/json",data:JSON.stringify({error:"not_found",id:Y,message:`Unknown example id: ${Y}`},null,2)};return{uri:`examples://example/${encodeURIComponent(Y)}`,mimeType:"application/json",data:JSON.stringify(J,null,2)}}})),j.register(Lj({meta:{uriTemplate:"internal://endpoints",title:"ContractSpec MCP endpoints",description:"Endpoints for docs, CLI, internal MCP servers.",mimeType:"application/json",tags:n},input:R.object({}),resolve:async()=>({uri:"internal://endpoints",mimeType:"application/json",data:JSON.stringify(Jj,null,2)})})),j.register(Lj({meta:{uriTemplate:"internal://playbook",title:"Internal MCP usage playbook",description:"How internal agents should discover docs, CLI usage, and endpoints.",mimeType:"text/markdown",tags:n},input:R.object({}),resolve:async()=>({uri:"internal://playbook",mimeType:"text/markdown",data:["# Internal MCP playbook","- Connect to docs MCP first for canonical specs.","- Use CLI MCP to surface quickstart/reference before running commands.","- Keep calls read-only unless explicitly approved.",`- Endpoints: ${Jj.docs}, ${Jj.cli}, ${Jj.internal}.`,"- For API work, GraphQL at /graphql; health at /health."].join(`
|
|
16
|
+
`)},{type:"resource",uri:`docs://contract-reference/${encodeURIComponent(J)}`,title:"Contract reference"}]}})),Y}import{defineResourceTemplate as k,ResourceRegistry as i0}from"@contractspec/lib.contracts-spec";import F from"zod";var v=["docs","mcp"];function FY(j){let Y=new i0,J=(Q)=>u(j,Q);return Y.register(k({meta:{uriTemplate:"docs://index",title:"DocBlocks index",description:"Default ContractSpec docs index resource.",mimeType:"application/json",tags:v},input:F.object({}),resolve:async()=>({uri:"docs://index",mimeType:"application/json",data:JSON.stringify(J({}),null,2)})})),Y.register(k({meta:{uriTemplate:"docs://index{?query,tag,kind,visibility,limit,offset}",title:"DocBlocks index",description:"Search and paginate ContractSpec docs by query, tag, kind, or visibility.",mimeType:"application/json",tags:v},input:F.object({query:F.string().optional(),tag:F.string().optional(),kind:F.string().optional(),visibility:F.string().optional(),limit:F.coerce.number().optional(),offset:F.coerce.number().optional()}),resolve:async(Q)=>({uri:"docs://index",mimeType:"application/json",data:JSON.stringify(J(Q),null,2)})})),Y.register(k({meta:{uriTemplate:"docs://list",title:"DocBlocks index (legacy alias)",description:"Compatibility alias for the docs index resource.",mimeType:"application/json",tags:v},input:F.object({}),resolve:async()=>({uri:"docs://list",mimeType:"application/json",data:JSON.stringify(J({}),null,2)})})),Y.register(k({meta:{uriTemplate:"docs://doc/{id}",title:"Doc markdown",description:"Fetch a single DocBlock body by id as markdown.",mimeType:"text/markdown",tags:v},input:F.object({id:F.string()}),resolve:async({id:Q})=>{let $=Hj(Q);if(!$)return{uri:`docs://doc/${encodeURIComponent(Q)}`,mimeType:"text/plain",data:`DocBlock not found: ${Q}`};return{uri:`docs://doc/${encodeURIComponent(Q)}`,mimeType:"text/markdown",data:$.content}}})),Y.register(k({meta:{uriTemplate:"docs://route/{routePath}",title:"Doc by route",description:"Resolve a docs route to the matching DocBlock summary and body.",mimeType:"application/json",tags:v},input:F.object({routePath:F.string()}),resolve:async({routePath:Q})=>({uri:`docs://route/${encodeURIComponent(Q)}`,mimeType:"application/json",data:JSON.stringify(Kj(j,Q)??{error:"not_found",route:Q},null,2)})})),Y.register(k({meta:{uriTemplate:"docs://facets",title:"Docs facets",description:"Counts of available tags, kinds, and visibilities across docs.",mimeType:"application/json",tags:v},input:F.object({}),resolve:async()=>({uri:"docs://facets",mimeType:"application/json",data:JSON.stringify(wj(j),null,2)})})),Y.register(k({meta:{uriTemplate:"docs://contract-reference/{key}{?version,type,includeSchema}",title:"Contract reference",description:"Resolve a ContractSpec surface into a docs-ready reference payload.",mimeType:"application/json",tags:v},input:F.object({key:F.string(),version:F.string().optional(),type:F.string().optional(),includeSchema:F.coerce.boolean().optional()}),resolve:async({key:Q,version:$,type:Z,includeSchema:X})=>({uri:`docs://contract-reference/${encodeURIComponent(Q)}`,mimeType:"application/json",data:JSON.stringify(p({key:Q,version:$,type:Z,includeSchema:X}),null,2)})})),Y}import{defineCommand as r,defineSchemaModel as l,installOp as e,OperationSpecRegistry as o0}from"@contractspec/lib.contracts-spec";import{ContractReferenceInput as a0,ContractReferenceOutput as t0,DocsIndexInput as s0,DocsIndexOutput as r0}from"@contractspec/lib.contracts-spec/docs";import{ScalarTypeEnum as O}from"@contractspec/lib.schema";var jj=["@contractspec"],Yj=["docs","mcp"],e0=l({name:"DocsGetInput",fields:{id:{type:O.String_unsecure(),isOptional:!1}}}),jJ=l({name:"DocsGetOutput",fields:{doc:{type:O.JSON(),isOptional:!1},content:{type:O.String_unsecure(),isOptional:!1}}}),YJ=l({name:"DocsResolveRouteInput",fields:{route:{type:O.String_unsecure(),isOptional:!1}}}),JJ=l({name:"DocsResolveRouteOutput",fields:{doc:{type:O.JSON(),isOptional:!1},content:{type:O.String_unsecure(),isOptional:!1}}}),QJ=l({name:"DocsFacetsInput",fields:{}}),ZJ=l({name:"DocsFacetsOutput",fields:{facets:{type:O.JSON(),isOptional:!1}}});function BY(j){let Y=new o0;return e(Y,r({meta:{key:"docs.search",version:"1.0.0",stability:"beta",owners:jj,tags:Yj,description:"Search ContractSpec docs by query, tag, kind, or visibility.",goal:"Find the most relevant DocBlocks without browsing the full corpus.",context:"Read-only docs MCP search surface."},io:{input:s0,output:r0},policy:{auth:"anonymous"},transport:{mcp:{toolName:"docs_search-v1_0_0"}}}),async(J)=>u(j,J)),e(Y,r({meta:{key:"docs.get",version:"1.0.0",stability:"beta",owners:jj,tags:Yj,description:"Read a single DocBlock by id.",goal:"Fetch the exact markdown content and metadata for a known doc id.",context:"Read-only docs MCP surface."},io:{input:e0,output:jJ},policy:{auth:"anonymous"},transport:{mcp:{toolName:"docs_get-v1_0_0"}}}),async({id:J})=>{let Q=Hj(J);if(!Q)throw Error(`DocBlock not found: ${J}`);return Q}),e(Y,r({meta:{key:"docs.resolveRoute",version:"1.0.0",stability:"beta",owners:jj,tags:Yj,description:"Resolve a docs route to the matching DocBlock.",goal:"Turn a route or URL path into a canonical doc id and markdown body.",context:"Read-only docs MCP surface."},io:{input:YJ,output:JJ},policy:{auth:"anonymous"},transport:{mcp:{toolName:"docs_resolve_route-v1_0_0"}}}),async({route:J})=>{let Q=Kj(j,J);if(!Q)throw Error(`Doc route not found: ${J}`);return Q}),e(Y,r({meta:{key:"docs.contract.lookup",version:"1.0.0",stability:"beta",owners:jj,tags:Yj,description:"Resolve a ContractSpec surface into a docs-ready reference payload.",goal:"Get canonical docs metadata, route, and optional schema for a spec key.",context:"Read-only docs MCP surface."},io:{input:a0,output:t0},policy:{auth:"anonymous"},transport:{mcp:{toolName:"docs_contract_reference-v1_0_0"}}}),async(J)=>p(J)),e(Y,r({meta:{key:"docs.list.facets",version:"1.0.0",stability:"beta",owners:jj,tags:Yj,description:"List docs taxonomy facets such as tags, kinds, and visibilities.",goal:"Help agents browse the docs corpus before making targeted reads.",context:"Read-only docs MCP surface."},io:{input:QJ,output:ZJ},policy:{auth:"anonymous"},transport:{mcp:{toolName:"docs_list_facets-v1_0_0"}}}),async()=>({facets:wj(j)})),Y}import{defaultDocRegistry as $J}from"@contractspec/lib.contracts-spec/docs";function VZ(j="/api/mcp/docs",Y={}){let J=$J.list();return A({logger:D,path:j,serverName:"contractspec-docs-mcp",ops:BY(J),resources:FY(J),prompts:wY(J),presentations:Y.includePresentations?J.map(({descriptor:Q})=>Q):void 0})}import{defineCommand as XJ,definePrompt as UJ,defineResourceTemplate as Lj,installOp as VJ,OperationSpecRegistry as HJ,PromptRegistry as KJ,ResourceRegistry as wJ}from"@contractspec/lib.contracts-spec";import{defineSchemaModel as WY,ScalarTypeEnum as xY}from"@contractspec/lib.schema";import{getExample as FJ,listExamples as BJ,searchExamples as WJ}from"@contractspec/module.examples/catalog";import R from"zod";var n=["internal","mcp"],PY=["@contractspec"],Jj={docs:"/api/mcp/docs",cli:"/api/mcp/cli",internal:"/api/mcp/internal",graphql:"/graphql",health:"/health"};function xJ(){let j=new wJ;return j.register(Lj({meta:{uriTemplate:"examples://list{?q}",title:"ContractSpec examples registry",description:"List available examples (templates, integrations, knowledge, scripts). Optional query `q` filters results.",mimeType:"application/json",tags:["examples",...n]},input:R.object({q:R.string().optional()}),resolve:async({q:Y})=>{let J=Y?WJ(Y):[...BJ()];return{uri:Y?`examples://list?q=${encodeURIComponent(Y)}`:"examples://list",mimeType:"application/json",data:JSON.stringify(J,null,2)}}})),j.register(Lj({meta:{uriTemplate:"examples://example/{id}",title:"ContractSpec example (by id)",description:"Fetch a single example manifest by id.",mimeType:"application/json",tags:["examples",...n]},input:R.object({id:R.string().min(1)}),resolve:async({id:Y})=>{let J=FJ(Y);if(!J)return{uri:`examples://example/${encodeURIComponent(Y)}`,mimeType:"application/json",data:JSON.stringify({error:"not_found",id:Y,message:`Unknown example id: ${Y}`},null,2)};return{uri:`examples://example/${encodeURIComponent(Y)}`,mimeType:"application/json",data:JSON.stringify(J,null,2)}}})),j.register(Lj({meta:{uriTemplate:"internal://endpoints",title:"ContractSpec MCP endpoints",description:"Endpoints for docs, CLI, internal MCP servers.",mimeType:"application/json",tags:n},input:R.object({}),resolve:async()=>({uri:"internal://endpoints",mimeType:"application/json",data:JSON.stringify(Jj,null,2)})})),j.register(Lj({meta:{uriTemplate:"internal://playbook",title:"Internal MCP usage playbook",description:"How internal agents should discover docs, CLI usage, and endpoints.",mimeType:"text/markdown",tags:n},input:R.object({}),resolve:async()=>({uri:"internal://playbook",mimeType:"text/markdown",data:["# Internal MCP playbook","- Connect to docs MCP first for canonical specs.","- Use CLI MCP to surface quickstart/reference before running commands.","- Keep calls read-only unless explicitly approved.",`- Endpoints: ${Jj.docs}, ${Jj.cli}, ${Jj.internal}.`,"- For API work, GraphQL at /graphql; health at /health."].join(`
|
|
17
17
|
`)})})),j}function PJ(){let j=new KJ;return j.register(UJ({meta:{key:"internal_bootstrap",version:"1.0.0",title:"Bootstrap internal ContractSpec agent",description:"Points agents to the correct MCP endpoints and guardrails.",tags:n,owners:PY,stability:"beta"},args:[],input:R.object({}),render:async()=>[{type:"text",text:"Start with internal://endpoints to pick the right MCP. Use docs MCP for specifications and CLI MCP for commands. Keep actions read-only unless explicitly approved."},{type:"resource",uri:"internal://endpoints",title:"Endpoints"}]})),j}function LJ(){let j=new HJ,Y=WY({name:"InternalDescribeOutput",fields:{endpoints:{type:xY.JSONObject(),isOptional:!1},notes:{type:xY.String_unsecure(),isOptional:!1}}}),J=XJ({meta:{key:"internal_describe",version:"1.0.0",stability:"stable",owners:PY,tags:n,description:"Return MCP endpoints and guidance for internal ContractSpec agents.",goal:"Speed up internal development with the correct MCP entrypoints.",context:"Used by internal MCP surface; read-only."},io:{input:WY({name:"InternalDescribeInput",fields:{}}),output:Y},policy:{auth:"anonymous"}});return VJ(j,J,async()=>({endpoints:Jj,notes:"Use docs MCP for canonical specs, CLI MCP for contractspec commands, and keep side-effecting actions gated behind human review."})),j}function PZ(j="/api/mcp/internal"){return A({logger:D,path:j,serverName:"contractspec-internal-mcp",ops:LJ(),resources:xJ(),prompts:PJ()})}import{getModelInfo as qJ}from"@contractspec/lib.ai-providers/models";import{definePrompt as _J,defineResourceTemplate as qj,installOp as uj,OperationSpecRegistry as MJ,PromptRegistry as bJ,ResourceRegistry as GJ}from"@contractspec/lib.contracts-spec";import{BenchmarkIngestCommand as DJ,BenchmarkRunCustomCommand as CJ,RankingRefreshCommand as AJ}from"@contractspec/lib.contracts-spec/provider-ranking";import{InMemoryProviderRankingStore as IJ}from"@contractspec/lib.provider-ranking/in-memory-store";import{createDefaultIngesterRegistry as NJ}from"@contractspec/lib.provider-ranking/ingesters";import{computeModelRankings as zJ,normalizeBenchmarkResults as EJ}from"@contractspec/lib.provider-ranking/scoring";import M from"zod";var Mj=M.enum(["rest","mcp","webhook","sdk"]).optional(),bj=M.enum(["api-key","oauth2","bearer","header","basic","webhook-signing","service-account"]).optional(),Qj=["ranking","mcp","ai"],kJ=["platform.ai"],_j=null;function c(){if(!_j)_j=new IJ;return _j}function vJ(){let j=new GJ;return j.register(qj({meta:{uriTemplate:"ranking://leaderboard",title:"AI Model Leaderboard",description:"Current ranked list of AI models by composite score. Supports optional transport and authMethod query filters.",mimeType:"application/json",tags:Qj},input:M.object({transport:Mj,authMethod:bj}),resolve:async({transport:Y,authMethod:J})=>{let $=await c().listModelRankings({limit:100,requiredTransport:Y,requiredAuthMethod:J});return{uri:"ranking://leaderboard",mimeType:"application/json",data:JSON.stringify($,null,2)}}})),j.register(qj({meta:{uriTemplate:"ranking://leaderboard/{dimension}",title:"AI Model Leaderboard by Dimension",description:"Ranked list of AI models filtered by a specific dimension. Supports optional transport and authMethod query filters.",mimeType:"application/json",tags:Qj},input:M.object({dimension:M.string(),transport:Mj,authMethod:bj}),resolve:async({dimension:Y,transport:J,authMethod:Q})=>{let Z=await c().listModelRankings({dimension:Y,limit:100,requiredTransport:J,requiredAuthMethod:Q});return{uri:`ranking://leaderboard/${encodeURIComponent(Y)}`,mimeType:"application/json",data:JSON.stringify(Z,null,2)}}})),j.register(qj({meta:{uriTemplate:"ranking://model/{modelId}",title:"AI Model Profile",description:"Detailed profile for a specific AI model including scores and benchmarks.",mimeType:"application/json",tags:Qj},input:M.object({modelId:M.string()}),resolve:async({modelId:Y})=>{let Q=await c().getModelProfile(Y);if(!Q)return{uri:`ranking://model/${encodeURIComponent(Y)}`,mimeType:"application/json",data:JSON.stringify({error:"not_found",modelId:Y})};let $=Q.costPerMillion==null?(()=>{let Z=qJ(Q.modelId);return Z?.costPerMillion?{...Q,costPerMillion:Z.costPerMillion,displayName:Z.name,contextWindow:Z.contextWindow,capabilities:[...Z.capabilities.vision?["vision"]:[],...Z.capabilities.tools?["tools"]:[],...Z.capabilities.reasoning?["reasoning"]:[],...Z.capabilities.streaming?["streaming"]:[]]}:Q})():Q;return{uri:`ranking://model/${encodeURIComponent(Y)}`,mimeType:"application/json",data:JSON.stringify($,null,2)}}})),j.register(qj({meta:{uriTemplate:"ranking://results",title:"Benchmark Results",description:"List of raw benchmark results from all ingested sources.",mimeType:"application/json",tags:Qj},input:M.object({}),resolve:async()=>{let J=await c().listBenchmarkResults({limit:200});return{uri:"ranking://results",mimeType:"application/json",data:JSON.stringify(J,null,2)}}})),j}function OJ(){let j=new bJ;return j.register(_J({meta:{key:"ranking.advisor",version:"1.0.0",title:"AI Model Advisor",description:"Which AI model is best for a given task? Uses the leaderboard to recommend.",tags:Qj,stability:"beta",owners:kJ},args:[{name:"task",description:"The task or use case to recommend a model for.",required:!0,schema:M.string()},{name:"priority",description:"Priority dimension (coding, reasoning, cost, latency, etc.).",required:!1,schema:M.string().optional()},{name:"transport",description:"Required transport type (rest, mcp, webhook, sdk).",required:!1,schema:Mj},{name:"authMethod",description:"Required auth method (api-key, oauth2, bearer, etc.).",required:!1,schema:bj}],input:M.object({task:M.string(),priority:M.string().optional(),transport:Mj,authMethod:bj}),render:async({task:Y,priority:J,transport:Q,authMethod:$})=>{let Z=[];if(J)Z.push(`Prioritize: ${J}.`);if(Q)Z.push(`Required transport: ${Q}.`);if($)Z.push(`Required auth: ${$}.`);return[{type:"text",text:`Recommend the best AI model for: "${Y}".${Z.length?` ${Z.join(" ")}`:""} Use the leaderboard data to justify your recommendation.`},{type:"resource",uri:J?`ranking://leaderboard/${J}`:"ranking://leaderboard",title:"Leaderboard"}]}})),j}function RJ(){let j=new MJ,Y=NJ();return uj(j,DJ,async(J)=>{let Q=c(),$=J.source,Z=Y.get($);if(!Z)throw Error(`No ingester registered for source: ${$}`);let X=await Z.ingest({sourceUrl:J.sourceUrl,dimensions:J.dimensions}),U=EJ(X);for(let V of U)await Q.upsertBenchmarkResult(V);return{ingestionId:`ingest-${$}-${Date.now()}`,source:$,resultsCount:U.length,status:"completed",ingestedAt:new Date}}),uj(j,CJ,async(J)=>{return{runId:`custom-${Date.now()}`,evalSuiteKey:J.evalSuiteKey,modelId:J.modelId,status:"started",startedAt:new Date}}),uj(j,AJ,async(J)=>{let Q=c(),$=[],Z=0,X=500;while(!0){let H=await Q.listBenchmarkResults({limit:X,offset:Z});if($.push(...H.results),$.length>=H.total||H.results.length<X)break;Z+=X}let U=new Map((await Q.listModelRankings({limit:1e4})).rankings.map((H)=>[H.modelId,H])),V=J.weightOverrides?Array.isArray(J.weightOverrides)?J.weightOverrides:[J.weightOverrides]:void 0,B=zJ($,V?{weightOverrides:V}:void 0,U);for(let H of B)await Q.upsertModelRanking(H);return{modelsRanked:B.length,updatedAt:new Date,status:"completed"}}),j}function NZ(j="/api/mcp/ranking"){return A({logger:D,path:j,serverName:"contractspec-ranking-mcp",ops:RJ(),resources:vJ(),prompts:OJ()})}function zZ(j){_j=j}export{zZ as setProviderRankingStore,NZ as createProviderRankingMcpHandler,PZ as createInternalMcpHandler,VZ as createDocsMcpHandler,AQ as createContractsMcpHandler,HQ as createCliMcpHandler};
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
var v=Object.defineProperty;var S=(j)=>j;function m(j,w){this[j]=S.bind(null,w)}var Fj=(j,w)=>{for(var B in w)v(j,B,{get:w[B],enumerable:!0,configurable:!0,set:m.bind(w,B)})};var Jj=(j,w)=>()=>(j&&(w=j(j=0)),w);import{Logger as G,LogLevel as P}from"@contractspec/lib.logger";function _(){return"production"}var N=()=>new G({level:P.INFO,environment:_(),enableTracing:!0,enableTiming:!0,enableContext:!0,enableColors:!1}),y=N(),Xj=new G({level:P.WARN,environment:_(),enableTracing:!0,enableTiming:!0,enableContext:!0,enableColors:!1}),Zj=new G({level:P.INFO,environment:_(),enableTracing:!0,enableTiming:!0,enableContext:!0,enableColors:!1});var O=["application/json","text/event-stream"];function n(j){return!j||j.includes("*/*")||j.includes("application/*")||O.some((w)=>j.includes(w))}function f(j){if(j.method!=="POST")return j;let w=j.headers.get("accept");if(!n(w))return j;let B=O.filter((F)=>!w?.includes(F));if(B.length===0)return j;let Y=new Headers(j.headers);return Y.set("accept",[w,...B].filter(Boolean).join(", ")),new Request(j,{headers:Y})}import{createMcpServer as l}from"@contractspec/lib.contracts-runtime-server-mcp/provider-mcp";import{PresentationRegistry as g}from"@contractspec/lib.contracts-spec/presentations";import{McpServer as u}from"@modelcontextprotocol/sdk/server/mcp.js";import{WebStandardStreamableHTTPServerTransport as d}from"@modelcontextprotocol/sdk/server/webStandardStreamableHttp.js";import{randomUUID as p}from"crypto";import{Elysia as i}from"elysia";var o={actor:"anonymous",decide:async()=>({effect:"allow"})};function b(j,w,B,Y){return new Response(JSON.stringify({jsonrpc:"2.0",error:{code:w,message:B,...Y?{data:Y}:{}},id:null}),{status:j,headers:{"content-type":"application/json"}})}function R({logger:j,serverName:w,ops:B,resources:Y,prompts:F,presentations:H,stateful:W}){let J=new u({name:w,version:"1.0.0"},{capabilities:{tools:{},resources:{},prompts:{},logging:{}}});j.info("Setting up MCP server..."),l(J,B,Y,F,{logger:j,toolCtx:()=>o,promptCtx:()=>({locale:"en"}),resourceCtx:()=>({locale:"en"}),presentations:new g(H)});let z=new d({sessionIdGenerator:W?()=>p():void 0,enableJsonResponse:!0});return J.connect(z).then(()=>({server:J,transport:z}))}async function D(j){await Promise.allSettled([j.transport.close(),j.server.close()])}function a(j){return j instanceof Error?j.stack??j.message:String(j)}function A({logger:j,path:w,serverName:B,ops:Y,resources:F,prompts:H,presentations:W,validateAuth:J,requiredAuthMethods:z}){j.info("Setting up MCP handler...",{requiredAuthMethods:z??[]});let T=process.env.CONTRACTSPEC_MCP_STATEFUL==="1",Z=new Map;async function I(Q){let U=await R({logger:j,path:w,serverName:B,ops:Y,resources:F,prompts:H,presentations:W,stateful:!1});try{return await U.transport.handleRequest(f(Q))}finally{await D(U)}}async function c(Q){let U=Z.get(Q);if(!U)return;Z.delete(Q),await D(U)}async function q(Q){let U=Q.headers.get("mcp-session-id"),k,x=!1;if(U){let K=Z.get(U);if(!K)return b(404,-32001,"Session not found");k=K}else k=await R({logger:j,path:w,serverName:B,ops:Y,resources:F,prompts:H,presentations:W,stateful:!0}),x=!0;try{let K=await k.transport.handleRequest(f(Q)),V=k.transport.sessionId;if(V&&!Z.has(V))Z.set(V,k);if(Q.method==="DELETE"&&V)await c(V);else if(!V&&x)await D(k);return K}catch(K){if(x)await D(k);throw K}}return new i({name:`mcp-${B}`}).all(w,async({request:Q})=>{try{if(J){let U=await J(Q);if(!U.valid)return b(401,-32002,"Authentication failed",U.reason)}if(T)return await q(Q);return await I(Q)}catch(U){return j.error("Error handling MCP request",{path:w,method:Q.method,error:a(U)}),b(500,-32000,"Internal error")}})}import{defineCommand as t,definePrompt as r,defineResourceTemplate as M,installOp as s,OperationSpecRegistry as e,PromptRegistry as jj,ResourceRegistry as wj}from"@contractspec/lib.contracts-spec";import{defineSchemaModel as E,ScalarTypeEnum as h}from"@contractspec/lib.schema";import{getExample as Bj,listExamples as Qj,searchExamples as Uj}from"@contractspec/module.examples";import C from"zod";var X=["internal","mcp"],L=["@contractspec"],$={docs:"/api/mcp/docs",cli:"/api/mcp/cli",internal:"/api/mcp/internal",graphql:"/graphql",health:"/health"};function Yj(){let j=new wj;return j.register(M({meta:{uriTemplate:"examples://list{?q}",title:"ContractSpec examples registry",description:"List available examples (templates, integrations, knowledge, scripts). Optional query `q` filters results.",mimeType:"application/json",tags:["examples",...X]},input:C.object({q:C.string().optional()}),resolve:async({q:w})=>{let B=w?Uj(w):[...Qj()];return{uri:w?`examples://list?q=${encodeURIComponent(w)}`:"examples://list",mimeType:"application/json",data:JSON.stringify(B,null,2)}}})),j.register(M({meta:{uriTemplate:"examples://example/{id}",title:"ContractSpec example (by id)",description:"Fetch a single example manifest by id.",mimeType:"application/json",tags:["examples",...X]},input:C.object({id:C.string().min(1)}),resolve:async({id:w})=>{let B=Bj(w);if(!B)return{uri:`examples://example/${encodeURIComponent(w)}`,mimeType:"application/json",data:JSON.stringify({error:"not_found",id:w,message:`Unknown example id: ${w}`},null,2)};return{uri:`examples://example/${encodeURIComponent(w)}`,mimeType:"application/json",data:JSON.stringify(B,null,2)}}})),j.register(M({meta:{uriTemplate:"internal://endpoints",title:"ContractSpec MCP endpoints",description:"Endpoints for docs, CLI, internal MCP servers.",mimeType:"application/json",tags:X},input:C.object({}),resolve:async()=>({uri:"internal://endpoints",mimeType:"application/json",data:JSON.stringify($,null,2)})})),j.register(M({meta:{uriTemplate:"internal://playbook",title:"Internal MCP usage playbook",description:"How internal agents should discover docs, CLI usage, and endpoints.",mimeType:"text/markdown",tags:X},input:C.object({}),resolve:async()=>({uri:"internal://playbook",mimeType:"text/markdown",data:["# Internal MCP playbook","- Connect to docs MCP first for canonical specs.","- Use CLI MCP to surface quickstart/reference before running commands.","- Keep calls read-only unless explicitly approved.",`- Endpoints: ${$.docs}, ${$.cli}, ${$.internal}.`,"- For API work, GraphQL at /graphql; health at /health."].join(`
|
|
2
|
+
var v=Object.defineProperty;var S=(j)=>j;function m(j,w){this[j]=S.bind(null,w)}var Fj=(j,w)=>{for(var B in w)v(j,B,{get:w[B],enumerable:!0,configurable:!0,set:m.bind(w,B)})};var Jj=(j,w)=>()=>(j&&(w=j(j=0)),w);import{Logger as G,LogLevel as P}from"@contractspec/lib.logger";function _(){return"production"}var N=()=>new G({level:P.INFO,environment:_(),enableTracing:!0,enableTiming:!0,enableContext:!0,enableColors:!1}),y=N(),Xj=new G({level:P.WARN,environment:_(),enableTracing:!0,enableTiming:!0,enableContext:!0,enableColors:!1}),Zj=new G({level:P.INFO,environment:_(),enableTracing:!0,enableTiming:!0,enableContext:!0,enableColors:!1});var O=["application/json","text/event-stream"];function n(j){return!j||j.includes("*/*")||j.includes("application/*")||O.some((w)=>j.includes(w))}function f(j){if(j.method!=="POST")return j;let w=j.headers.get("accept");if(!n(w))return j;let B=O.filter((F)=>!w?.includes(F));if(B.length===0)return j;let Y=new Headers(j.headers);return Y.set("accept",[w,...B].filter(Boolean).join(", ")),new Request(j,{headers:Y})}import{createMcpServer as l}from"@contractspec/lib.contracts-runtime-server-mcp/provider-mcp";import{PresentationRegistry as g}from"@contractspec/lib.contracts-spec/presentations";import{McpServer as u}from"@modelcontextprotocol/sdk/server/mcp.js";import{WebStandardStreamableHTTPServerTransport as d}from"@modelcontextprotocol/sdk/server/webStandardStreamableHttp.js";import{randomUUID as p}from"crypto";import{Elysia as i}from"elysia";var o={actor:"anonymous",decide:async()=>({effect:"allow"})};function b(j,w,B,Y){return new Response(JSON.stringify({jsonrpc:"2.0",error:{code:w,message:B,...Y?{data:Y}:{}},id:null}),{status:j,headers:{"content-type":"application/json"}})}function R({logger:j,serverName:w,ops:B,resources:Y,prompts:F,presentations:H,stateful:W}){let J=new u({name:w,version:"1.0.0"},{capabilities:{tools:{},resources:{},prompts:{},logging:{}}});j.info("Setting up MCP server..."),l(J,B,Y,F,{logger:j,toolCtx:()=>o,promptCtx:()=>({locale:"en"}),resourceCtx:()=>({locale:"en"}),presentations:new g(H)});let z=new d({sessionIdGenerator:W?()=>p():void 0,enableJsonResponse:!0});return J.connect(z).then(()=>({server:J,transport:z}))}async function D(j){await Promise.allSettled([j.transport.close(),j.server.close()])}function a(j){return j instanceof Error?j.stack??j.message:String(j)}function A({logger:j,path:w,serverName:B,ops:Y,resources:F,prompts:H,presentations:W,validateAuth:J,requiredAuthMethods:z}){j.info("Setting up MCP handler...",{requiredAuthMethods:z??[]});let T=process.env.CONTRACTSPEC_MCP_STATEFUL==="1",Z=new Map;async function I(Q){let U=await R({logger:j,path:w,serverName:B,ops:Y,resources:F,prompts:H,presentations:W,stateful:!1});try{return await U.transport.handleRequest(f(Q))}finally{await D(U)}}async function c(Q){let U=Z.get(Q);if(!U)return;Z.delete(Q),await D(U)}async function q(Q){let U=Q.headers.get("mcp-session-id"),k,x=!1;if(U){let K=Z.get(U);if(!K)return b(404,-32001,"Session not found");k=K}else k=await R({logger:j,path:w,serverName:B,ops:Y,resources:F,prompts:H,presentations:W,stateful:!0}),x=!0;try{let K=await k.transport.handleRequest(f(Q)),V=k.transport.sessionId;if(V&&!Z.has(V))Z.set(V,k);if(Q.method==="DELETE"&&V)await c(V);else if(!V&&x)await D(k);return K}catch(K){if(x)await D(k);throw K}}return new i({name:`mcp-${B}`}).all(w,async({request:Q})=>{try{if(J){let U=await J(Q);if(!U.valid)return b(401,-32002,"Authentication failed",U.reason)}if(T)return await q(Q);return await I(Q)}catch(U){return j.error("Error handling MCP request",{path:w,method:Q.method,error:a(U)}),b(500,-32000,"Internal error")}})}import{defineCommand as t,definePrompt as r,defineResourceTemplate as M,installOp as s,OperationSpecRegistry as e,PromptRegistry as jj,ResourceRegistry as wj}from"@contractspec/lib.contracts-spec";import{defineSchemaModel as E,ScalarTypeEnum as h}from"@contractspec/lib.schema";import{getExample as Bj,listExamples as Qj,searchExamples as Uj}from"@contractspec/module.examples/catalog";import C from"zod";var X=["internal","mcp"],L=["@contractspec"],$={docs:"/api/mcp/docs",cli:"/api/mcp/cli",internal:"/api/mcp/internal",graphql:"/graphql",health:"/health"};function Yj(){let j=new wj;return j.register(M({meta:{uriTemplate:"examples://list{?q}",title:"ContractSpec examples registry",description:"List available examples (templates, integrations, knowledge, scripts). Optional query `q` filters results.",mimeType:"application/json",tags:["examples",...X]},input:C.object({q:C.string().optional()}),resolve:async({q:w})=>{let B=w?Uj(w):[...Qj()];return{uri:w?`examples://list?q=${encodeURIComponent(w)}`:"examples://list",mimeType:"application/json",data:JSON.stringify(B,null,2)}}})),j.register(M({meta:{uriTemplate:"examples://example/{id}",title:"ContractSpec example (by id)",description:"Fetch a single example manifest by id.",mimeType:"application/json",tags:["examples",...X]},input:C.object({id:C.string().min(1)}),resolve:async({id:w})=>{let B=Bj(w);if(!B)return{uri:`examples://example/${encodeURIComponent(w)}`,mimeType:"application/json",data:JSON.stringify({error:"not_found",id:w,message:`Unknown example id: ${w}`},null,2)};return{uri:`examples://example/${encodeURIComponent(w)}`,mimeType:"application/json",data:JSON.stringify(B,null,2)}}})),j.register(M({meta:{uriTemplate:"internal://endpoints",title:"ContractSpec MCP endpoints",description:"Endpoints for docs, CLI, internal MCP servers.",mimeType:"application/json",tags:X},input:C.object({}),resolve:async()=>({uri:"internal://endpoints",mimeType:"application/json",data:JSON.stringify($,null,2)})})),j.register(M({meta:{uriTemplate:"internal://playbook",title:"Internal MCP usage playbook",description:"How internal agents should discover docs, CLI usage, and endpoints.",mimeType:"text/markdown",tags:X},input:C.object({}),resolve:async()=>({uri:"internal://playbook",mimeType:"text/markdown",data:["# Internal MCP playbook","- Connect to docs MCP first for canonical specs.","- Use CLI MCP to surface quickstart/reference before running commands.","- Keep calls read-only unless explicitly approved.",`- Endpoints: ${$.docs}, ${$.cli}, ${$.internal}.`,"- For API work, GraphQL at /graphql; health at /health."].join(`
|
|
3
3
|
`)})})),j}function kj(){let j=new jj;return j.register(r({meta:{key:"internal_bootstrap",version:"1.0.0",title:"Bootstrap internal ContractSpec agent",description:"Points agents to the correct MCP endpoints and guardrails.",tags:X,owners:L,stability:"beta"},args:[],input:C.object({}),render:async()=>[{type:"text",text:"Start with internal://endpoints to pick the right MCP. Use docs MCP for specifications and CLI MCP for commands. Keep actions read-only unless explicitly approved."},{type:"resource",uri:"internal://endpoints",title:"Endpoints"}]})),j}function Cj(){let j=new e,w=E({name:"InternalDescribeOutput",fields:{endpoints:{type:h.JSONObject(),isOptional:!1},notes:{type:h.String_unsecure(),isOptional:!1}}}),B=t({meta:{key:"internal_describe",version:"1.0.0",stability:"stable",owners:L,tags:X,description:"Return MCP endpoints and guidance for internal ContractSpec agents.",goal:"Speed up internal development with the correct MCP entrypoints.",context:"Used by internal MCP surface; read-only."},io:{input:E({name:"InternalDescribeInput",fields:{}}),output:w},policy:{auth:"anonymous"}});return s(j,B,async()=>({endpoints:$,notes:"Use docs MCP for canonical specs, CLI MCP for contractspec commands, and keep side-effecting actions gated behind human review."})),j}function Ej(j="/api/mcp/internal"){return A({logger:y,path:j,serverName:"contractspec-internal-mcp",ops:Cj(),resources:Yj(),prompts:kj()})}export{Ej as createInternalMcpHandler};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
var
|
|
2
|
+
var O=Object.defineProperty;var P=(y)=>y;function Q(y,z){this[y]=P.bind(null,z)}var Z=(y,z)=>{for(var q in z)O(y,q,{get:z[q],enumerable:!0,configurable:!0,set:Q.bind(z,q)})};var _=(y,z)=>()=>(y&&(z=y(y=0)),z);import{ExampleCatalogDataView as I}from"@contractspec/lib.contracts-spec/docs";import{ButtonLink as J,DataViewList as R,StatusChip as T}from"@contractspec/lib.design-system";import{HStack as U,VStack as K}from"@contractspec/lib.ui-kit-web/ui/stack";import{H1 as W,Muted as N}from"@contractspec/lib.ui-kit-web/ui/typography";import{buildExampleDocsHref as X,listDiscoverableExamples as Y}from"@contractspec/module.examples/catalog";import{jsx as A,jsxs as G}from"react/jsx-runtime";function g(){let y=Y().map((q)=>{let F=q.meta.title??q.meta.key;return{id:q.meta.key,title:F,summary:q.meta.summary??q.meta.description,route:X(q.meta.key),tags:q.meta.tags,sandboxEnabled:q.surfaces.sandbox.enabled}}).sort((q,F)=>q.title.localeCompare(F.title)),z={...I,view:{...I.view,kind:"list"}};return G(K,{gap:"xl",children:[G(K,{gap:"sm",children:[A(W,{children:"Examples"}),A(N,{children:"Reference implementations for real ContractSpec surfaces. Use them to study adoption patterns, inspect generated artifacts, and validate the OSS workflow against runnable systems."})]}),A(R,{spec:z,items:y,emptyState:A(N,{children:"No examples available."}),renderActions:(q)=>{return G(U,{gap:"xs",justify:"end",children:[q.sandboxEnabled?A(J,{href:`/sandbox?template=${q.id}`,size:"sm",variant:"outline",children:"Sandbox"}):null,A(J,{href:q.route,size:"sm",children:"Reference"}),q.tags?.[0]?A(T,{size:"sm",label:q.tags[0]}):null]})}})]})}export{g as DocsExamplesPage};
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
var
|
|
3
|
-
`)}import{ButtonLink as
|
|
2
|
+
var $=Object.defineProperty;var q=(J)=>J;function A(J,z){this[J]=q.bind(null,z)}var B=(J,z)=>{for(var M in z)$(J,M,{get:z[M],enumerable:!0,configurable:!0,set:A.bind(z,M)})};var D=(J,z)=>()=>(J&&(z=J(J=0)),z);import{buildExampleDocsHref as T,buildExampleReferenceHref as v,getDiscoverableExample as I,getExamplePreviewHref as N}from"@contractspec/module.examples/catalog";var O={"agent-console":"Primary meetup path for autonomous agents: typed tools, agent configs, run history, and execution logs in one regenerable surface.","ai-chat-assistant":"Secondary meetup path for MCP-aware assistants: reasoning, sources, suggestions, and a minimal contract-backed search tool.","data-grid-showcase":"Canonical table example for the full ContractSpec stack: declarative DataView contract, shared controller, raw web primitive, native-first primitive, and the composed design-system wrapper.","messaging-agent-actions":"Live messaging lane for the meetup: inbound Slack, WhatsApp, or Telegram messages route through fixed intents, allowlisted actions, and deterministic confirmations."},P={"agent-console":"/docs/reference/agent-console/agent-console","ai-chat-assistant":"/docs/reference/ai-chat-assistant/assistant.search","data-grid-showcase":"/docs/reference/data-grid-showcase/data-grid-showcase","messaging-agent-actions":"/docs/reference/messaging-agent-actions/messaging.agentActions.process"};function Y(J){let z=I(J);if(!z)return;let M=z.entrypoints.packageName.replace("@contractspec/example.",""),U=T(J),X=N(J);return{key:J,lead:O[J]??z.meta.summary??z.meta.description??"Public ContractSpec reference example.",sandboxHref:X,referenceHref:P[J]??v(J),llmsHref:`/llms/${z.entrypoints.packageName.replace("@contractspec/","")}`,repoHref:`https://github.com/lssm-tech/contractspec/tree/main/packages/examples/${M}`,localCommands:V(M,U,X)}}function V(J,z,M){let U=[`bun run --cwd packages/examples/${J} build`,"bun run --cwd packages/apps/web-landing dev","","# Open in the browser",`# http://localhost:3000${z}`];if(M)U.push(`# http://localhost:3000${M}`);return U.join(`
|
|
3
|
+
`)}import{ButtonLink as W,CodeBlock as F}from"@contractspec/lib.design-system";import _ from"@contractspec/lib.ui-link";import{getExample as C}from"@contractspec/module.examples/catalog";import{FileCode2 as S,Play as K,TerminalSquare as g}from"lucide-react";import{jsx as G,jsxs as Q}from"react/jsx-runtime";function E({exampleKey:J}){let z=Y(J),M=C(J);if(!z||!M)return null;let U=M.meta.title??M.meta.key,X=M.meta.summary??M.meta.description??"",Z=M.entrypoints.packageName;return Q("div",{className:"space-y-10",children:[Q("section",{className:"space-y-5",children:[G("p",{className:"editorial-kicker",children:"Meetup-ready example"}),G("h1",{className:"editorial-title max-w-5xl",children:U}),G("p",{className:"editorial-subtitle",children:z.lead}),G("p",{className:"editorial-copy max-w-4xl",children:X}),Q("div",{className:"flex flex-wrap gap-3",children:[z.sandboxHref?G(W,{href:z.sandboxHref,children:"Open sandbox"}):null,G(W,{href:z.referenceHref,variant:"outline",children:"Generated reference"})]})]}),Q("section",{className:"grid gap-5 lg:grid-cols-3",children:[z.sandboxHref?Q("article",{className:"editorial-panel space-y-4",children:[Q("div",{className:"flex items-center gap-3",children:[G("div",{className:"rounded-full border border-border/80 bg-background/85 p-2",children:G(K,{size:18})}),G("h2",{className:"font-semibold text-xl",children:"Sandbox preview"})]}),G("p",{className:"editorial-copy text-sm",children:"Load the same public browser surface used for the prepared live demo."}),G(W,{href:z.sandboxHref,size:"sm",children:"Open preview"})]}):null,Q("article",{className:"editorial-panel space-y-4",children:[Q("div",{className:"flex items-center gap-3",children:[G("div",{className:"rounded-full border border-border/80 bg-background/85 p-2",children:G(S,{size:18})}),G("h2",{className:"font-semibold text-xl",children:"Reference docs"})]}),G("p",{className:"editorial-copy text-sm",children:"Inspect the generated contract-facing material instead of relying on marketing summaries."}),G(W,{href:z.referenceHref,size:"sm",variant:"outline",children:"Open reference"})]}),Q("article",{className:"editorial-panel space-y-4",children:[Q("div",{className:"flex items-center gap-3",children:[G("div",{className:"rounded-full border border-border/80 bg-background/85 p-2",children:G(g,{size:18})}),G("h2",{className:"font-semibold text-xl",children:"Package context"})]}),G("p",{className:"editorial-copy text-sm",children:"Use the agent-facing package page for fast repo orientation, then jump to the source directory."}),G("p",{className:"rounded-[18px] border border-border/70 bg-background/75 px-4 py-3 font-mono text-sm",children:Z}),Q("div",{className:"flex flex-wrap gap-2",children:[G(W,{href:z.llmsHref,size:"sm",variant:"outline",children:"LLMS page"}),G(W,{href:z.repoHref,size:"sm",variant:"outline",children:"GitHub source"})]})]})]}),Q("section",{className:"editorial-panel space-y-5",children:[Q("div",{className:"space-y-2",children:[G("p",{className:"editorial-kicker",children:"Talk commands"}),G("h2",{className:"editorial-panel-title",children:"Exact local commands for the meetup lane"}),G("p",{className:"editorial-copy text-sm",children:"Build the example package, then launch the web shell and open the prepared docs or sandbox route."})]}),G(F,{language:"bash",filename:`${J}-meetup-runbook`,code:z.localCommands}),Q("p",{className:"text-muted-foreground text-sm",children:["For the full fallback order and safe live-edit workflow, use"," ",G(_,{href:"https://github.com/lssm-tech/contractspec/blob/main/docs/meetup-agent-examples-runbook.md",children:"the meetup runbook"}),"."]})]})]})}export{E as ExampleShowcasePage};
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
var
|
|
3
|
-
`)}export{
|
|
2
|
+
var G=Object.defineProperty;var J=(h)=>h;function K(h,j){this[h]=J.bind(null,j)}var Z=(h,j)=>{for(var q in j)G(h,q,{get:j[q],enumerable:!0,configurable:!0,set:K.bind(j,q)})};var $=(h,j)=>()=>(h&&(j=h(h=0)),j);import{buildExampleDocsHref as M,buildExampleReferenceHref as Q,getDiscoverableExample as T,getExamplePreviewHref as U}from"@contractspec/module.examples/catalog";var W={"agent-console":"Primary meetup path for autonomous agents: typed tools, agent configs, run history, and execution logs in one regenerable surface.","ai-chat-assistant":"Secondary meetup path for MCP-aware assistants: reasoning, sources, suggestions, and a minimal contract-backed search tool.","data-grid-showcase":"Canonical table example for the full ContractSpec stack: declarative DataView contract, shared controller, raw web primitive, native-first primitive, and the composed design-system wrapper.","messaging-agent-actions":"Live messaging lane for the meetup: inbound Slack, WhatsApp, or Telegram messages route through fixed intents, allowlisted actions, and deterministic confirmations."},X={"agent-console":"/docs/reference/agent-console/agent-console","ai-chat-assistant":"/docs/reference/ai-chat-assistant/assistant.search","data-grid-showcase":"/docs/reference/data-grid-showcase/data-grid-showcase","messaging-agent-actions":"/docs/reference/messaging-agent-actions/messaging.agentActions.process"};function N(h){let j=T(h);if(!j)return;let q=j.entrypoints.packageName.replace("@contractspec/example.",""),z=M(h),B=U(h);return{key:h,lead:W[h]??j.meta.summary??j.meta.description??"Public ContractSpec reference example.",sandboxHref:B,referenceHref:X[h]??Q(h),llmsHref:`/llms/${j.entrypoints.packageName.replace("@contractspec/","")}`,repoHref:`https://github.com/lssm-tech/contractspec/tree/main/packages/examples/${q}`,localCommands:Y(q,z,B)}}function Y(h,j,q){let z=[`bun run --cwd packages/examples/${h} build`,"bun run --cwd packages/apps/web-landing dev","","# Open in the browser",`# http://localhost:3000${j}`];if(q)z.push(`# http://localhost:3000${q}`);return z.join(`
|
|
3
|
+
`)}export{N as getExampleShowcaseData};
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
var
|
|
3
|
-
`)}import{ButtonLink as
|
|
2
|
+
var N=Object.defineProperty;var O=(P)=>P;function v(P,G){this[P]=O.bind(null,G)}var r=(P,G)=>{for(var z in G)N(P,z,{get:G[z],enumerable:!0,configurable:!0,set:v.bind(G,z)})};var n=(P,G)=>()=>(P&&(G=P(P=0)),G);import{ExampleCatalogDataView as $}from"@contractspec/lib.contracts-spec/docs";import{ButtonLink as q,DataViewList as F,StatusChip as _}from"@contractspec/lib.design-system";import{HStack as K,VStack as A}from"@contractspec/lib.ui-kit-web/ui/stack";import{H1 as C,Muted as T}from"@contractspec/lib.ui-kit-web/ui/typography";import{buildExampleDocsHref as V,listDiscoverableExamples as g}from"@contractspec/module.examples/catalog";import{jsx as W,jsxs as Z}from"react/jsx-runtime";function R(){let P=g().map((z)=>{let U=z.meta.title??z.meta.key;return{id:z.meta.key,title:U,summary:z.meta.summary??z.meta.description,route:V(z.meta.key),tags:z.meta.tags,sandboxEnabled:z.surfaces.sandbox.enabled}}).sort((z,U)=>z.title.localeCompare(U.title)),G={...$,view:{...$.view,kind:"list"}};return Z(A,{gap:"xl",children:[Z(A,{gap:"sm",children:[W(C,{children:"Examples"}),W(T,{children:"Reference implementations for real ContractSpec surfaces. Use them to study adoption patterns, inspect generated artifacts, and validate the OSS workflow against runnable systems."})]}),W(F,{spec:G,items:P,emptyState:W(T,{children:"No examples available."}),renderActions:(z)=>{return Z(K,{gap:"xs",justify:"end",children:[z.sandboxEnabled?W(q,{href:`/sandbox?template=${z.id}`,size:"sm",variant:"outline",children:"Sandbox"}):null,W(q,{href:z.route,size:"sm",children:"Reference"}),z.tags?.[0]?W(_,{size:"sm",label:z.tags[0]}):null]})}})]})}import{buildExampleDocsHref as B,buildExampleReferenceHref as S,getDiscoverableExample as D,getExamplePreviewHref as f}from"@contractspec/module.examples/catalog";var L={"agent-console":"Primary meetup path for autonomous agents: typed tools, agent configs, run history, and execution logs in one regenerable surface.","ai-chat-assistant":"Secondary meetup path for MCP-aware assistants: reasoning, sources, suggestions, and a minimal contract-backed search tool.","data-grid-showcase":"Canonical table example for the full ContractSpec stack: declarative DataView contract, shared controller, raw web primitive, native-first primitive, and the composed design-system wrapper.","messaging-agent-actions":"Live messaging lane for the meetup: inbound Slack, WhatsApp, or Telegram messages route through fixed intents, allowlisted actions, and deterministic confirmations."},h={"agent-console":"/docs/reference/agent-console/agent-console","ai-chat-assistant":"/docs/reference/ai-chat-assistant/assistant.search","data-grid-showcase":"/docs/reference/data-grid-showcase/data-grid-showcase","messaging-agent-actions":"/docs/reference/messaging-agent-actions/messaging.agentActions.process"};function I(P){let G=D(P);if(!G)return;let z=G.entrypoints.packageName.replace("@contractspec/example.",""),U=B(P),Y=f(P);return{key:P,lead:L[P]??G.meta.summary??G.meta.description??"Public ContractSpec reference example.",sandboxHref:Y,referenceHref:h[P]??S(P),llmsHref:`/llms/${G.entrypoints.packageName.replace("@contractspec/","")}`,repoHref:`https://github.com/lssm-tech/contractspec/tree/main/packages/examples/${z}`,localCommands:b(z,U,Y)}}function b(P,G,z){let U=[`bun run --cwd packages/examples/${P} build`,"bun run --cwd packages/apps/web-landing dev","","# Open in the browser",`# http://localhost:3000${G}`];if(z)U.push(`# http://localhost:3000${z}`);return U.join(`
|
|
3
|
+
`)}import{ButtonLink as X,CodeBlock as w}from"@contractspec/lib.design-system";import H from"@contractspec/lib.ui-link";import{getExample as E}from"@contractspec/module.examples/catalog";import{FileCode2 as u,Play as d,TerminalSquare as y}from"lucide-react";import{jsx as J,jsxs as Q}from"react/jsx-runtime";function k({exampleKey:P}){let G=I(P),z=E(P);if(!G||!z)return null;let U=z.meta.title??z.meta.key,Y=z.meta.summary??z.meta.description??"",M=z.entrypoints.packageName;return Q("div",{className:"space-y-10",children:[Q("section",{className:"space-y-5",children:[J("p",{className:"editorial-kicker",children:"Meetup-ready example"}),J("h1",{className:"editorial-title max-w-5xl",children:U}),J("p",{className:"editorial-subtitle",children:G.lead}),J("p",{className:"editorial-copy max-w-4xl",children:Y}),Q("div",{className:"flex flex-wrap gap-3",children:[G.sandboxHref?J(X,{href:G.sandboxHref,children:"Open sandbox"}):null,J(X,{href:G.referenceHref,variant:"outline",children:"Generated reference"})]})]}),Q("section",{className:"grid gap-5 lg:grid-cols-3",children:[G.sandboxHref?Q("article",{className:"editorial-panel space-y-4",children:[Q("div",{className:"flex items-center gap-3",children:[J("div",{className:"rounded-full border border-border/80 bg-background/85 p-2",children:J(d,{size:18})}),J("h2",{className:"font-semibold text-xl",children:"Sandbox preview"})]}),J("p",{className:"editorial-copy text-sm",children:"Load the same public browser surface used for the prepared live demo."}),J(X,{href:G.sandboxHref,size:"sm",children:"Open preview"})]}):null,Q("article",{className:"editorial-panel space-y-4",children:[Q("div",{className:"flex items-center gap-3",children:[J("div",{className:"rounded-full border border-border/80 bg-background/85 p-2",children:J(u,{size:18})}),J("h2",{className:"font-semibold text-xl",children:"Reference docs"})]}),J("p",{className:"editorial-copy text-sm",children:"Inspect the generated contract-facing material instead of relying on marketing summaries."}),J(X,{href:G.referenceHref,size:"sm",variant:"outline",children:"Open reference"})]}),Q("article",{className:"editorial-panel space-y-4",children:[Q("div",{className:"flex items-center gap-3",children:[J("div",{className:"rounded-full border border-border/80 bg-background/85 p-2",children:J(y,{size:18})}),J("h2",{className:"font-semibold text-xl",children:"Package context"})]}),J("p",{className:"editorial-copy text-sm",children:"Use the agent-facing package page for fast repo orientation, then jump to the source directory."}),J("p",{className:"rounded-[18px] border border-border/70 bg-background/75 px-4 py-3 font-mono text-sm",children:M}),Q("div",{className:"flex flex-wrap gap-2",children:[J(X,{href:G.llmsHref,size:"sm",variant:"outline",children:"LLMS page"}),J(X,{href:G.repoHref,size:"sm",variant:"outline",children:"GitHub source"})]})]})]}),Q("section",{className:"editorial-panel space-y-5",children:[Q("div",{className:"space-y-2",children:[J("p",{className:"editorial-kicker",children:"Talk commands"}),J("h2",{className:"editorial-panel-title",children:"Exact local commands for the meetup lane"}),J("p",{className:"editorial-copy text-sm",children:"Build the example package, then launch the web shell and open the prepared docs or sandbox route."})]}),J(w,{language:"bash",filename:`${P}-meetup-runbook`,code:G.localCommands}),Q("p",{className:"text-muted-foreground text-sm",children:["For the full fallback order and safe live-edit workflow, use"," ",J(H,{href:"https://github.com/lssm-tech/contractspec/blob/main/docs/meetup-agent-examples-runbook.md",children:"the meetup runbook"}),"."]})]})]})}export{k as ExampleShowcasePage,R as DocsExamplesPage};
|