@vurb/core 3.12.7 → 3.12.8

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.
@@ -1,106 +1,106 @@
1
1
  /** Generate `openapi.yaml` — Sample OpenAPI spec */
2
2
  export function openapiYaml(config) {
3
- return `# OpenAPI 3.0 Specification — Sample
4
- #
5
- # Replace this with your actual API spec, then run:
6
- # npx @vurb/openapi-gen ./openapi.yaml --outDir ./src/generated
7
- #
8
- # The generator creates Presenters, Tools, Registry, and server
9
- # bootstrap — all configurable via YAML annotations.
10
-
11
- openapi: '3.0.3'
12
- info:
13
- title: '${config.name} API'
14
- version: '0.1.0'
15
- description: Sample API for Vurb OpenAPI generation
16
-
17
- servers:
18
- - url: http://localhost:3000/api
19
-
20
- paths:
21
- /health:
22
- get:
23
- operationId: getHealth
24
- summary: Health check endpoint
25
- responses:
26
- '200':
27
- description: Server health status
28
- content:
29
- application/json:
30
- schema:
31
- type: object
32
- properties:
33
- status:
34
- type: string
35
- example: healthy
36
- uptime:
37
- type: number
38
- example: 12345.67
39
-
40
- /users:
41
- get:
42
- operationId: listUsers
43
- summary: List all users
44
- parameters:
45
- - name: limit
46
- in: query
47
- schema:
48
- type: integer
49
- minimum: 1
50
- maximum: 100
51
- default: 10
52
- responses:
53
- '200':
54
- description: List of users
55
- content:
56
- application/json:
57
- schema:
58
- type: array
59
- items:
60
- $ref: '#/components/schemas/User'
61
-
62
- components:
63
- schemas:
64
- User:
65
- type: object
66
- properties:
67
- id:
68
- type: string
69
- name:
70
- type: string
71
- email:
72
- type: string
3
+ return `# OpenAPI 3.0 Specification — Sample
4
+ #
5
+ # Replace this with your actual API spec, then run:
6
+ # npx @vurb/openapi-gen ./openapi.yaml --outDir ./src/generated
7
+ #
8
+ # The generator creates Presenters, Tools, Registry, and server
9
+ # bootstrap — all configurable via YAML annotations.
10
+
11
+ openapi: '3.0.3'
12
+ info:
13
+ title: '${config.name} API'
14
+ version: '0.1.0'
15
+ description: Sample API for Vurb OpenAPI generation
16
+
17
+ servers:
18
+ - url: http://localhost:3000/api
19
+
20
+ paths:
21
+ /health:
22
+ get:
23
+ operationId: getHealth
24
+ summary: Health check endpoint
25
+ responses:
26
+ '200':
27
+ description: Server health status
28
+ content:
29
+ application/json:
30
+ schema:
31
+ type: object
32
+ properties:
33
+ status:
34
+ type: string
35
+ example: healthy
36
+ uptime:
37
+ type: number
38
+ example: 12345.67
39
+
40
+ /users:
41
+ get:
42
+ operationId: listUsers
43
+ summary: List all users
44
+ parameters:
45
+ - name: limit
46
+ in: query
47
+ schema:
48
+ type: integer
49
+ minimum: 1
50
+ maximum: 100
51
+ default: 10
52
+ responses:
53
+ '200':
54
+ description: List of users
55
+ content:
56
+ application/json:
57
+ schema:
58
+ type: array
59
+ items:
60
+ $ref: '#/components/schemas/User'
61
+
62
+ components:
63
+ schemas:
64
+ User:
65
+ type: object
66
+ properties:
67
+ id:
68
+ type: string
69
+ name:
70
+ type: string
71
+ email:
72
+ type: string
73
73
  `;
74
74
  }
75
75
  /** Generate `SETUP.md` — OpenAPI generation instructions */
76
76
  export function openapiSetupMd() {
77
- return `# OpenAPI Generator Setup
78
-
79
- This project is configured for the **Legacy API Proxy** ingestion vector.
80
-
81
- ## Steps
82
-
83
- 1. Replace \`openapi.yaml\` with your actual OpenAPI 3.x spec
84
-
85
- 2. Generate the MCP server from the spec:
86
- \`\`\`bash
87
- npx @vurb/openapi-gen ./openapi.yaml --outDir ./src/generated
88
- \`\`\`
89
-
90
- 3. The generator creates:
91
- - Presenters with Zod schemas (Egress Firewall)
92
- - Tool builders with typed handlers
93
- - Registry setup with all endpoints
94
-
95
- 4. Import and register in \`src/server.ts\`:
96
- \`\`\`typescript
97
- import { generatedTools } from './generated/registry.js';
98
- registry.registerAll(...generatedTools);
99
- \`\`\`
100
-
101
- ## Documentation
102
-
103
- See: [OpenAPI Generator](https://vurb.vinkius.com/openapi-gen)
77
+ return `# OpenAPI Generator Setup
78
+
79
+ This project is configured for the **Legacy API Proxy** ingestion vector.
80
+
81
+ ## Steps
82
+
83
+ 1. Replace \`openapi.yaml\` with your actual OpenAPI 3.x spec
84
+
85
+ 2. Generate the MCP server from the spec:
86
+ \`\`\`bash
87
+ npx @vurb/openapi-gen ./openapi.yaml --outDir ./src/generated
88
+ \`\`\`
89
+
90
+ 3. The generator creates:
91
+ - Presenters with Zod schemas (Egress Firewall)
92
+ - Tool builders with typed handlers
93
+ - Registry setup with all endpoints
94
+
95
+ 4. Import and register in \`src/server.ts\`:
96
+ \`\`\`typescript
97
+ import { generatedTools } from './generated/registry.js';
98
+ registry.registerAll(...generatedTools);
99
+ \`\`\`
100
+
101
+ ## Documentation
102
+
103
+ See: [OpenAPI Generator](https://vurb.vinkius.com/openapi-gen)
104
104
  `;
105
105
  }
106
106
  //# sourceMappingURL=openapi.js.map
@@ -81,231 +81,231 @@ export function vercelTsconfig() {
81
81
  }
82
82
  /** Generate `next.config.ts` */
83
83
  export function vercelNextConfig() {
84
- return `import type { NextConfig } from 'next';
85
-
86
- const nextConfig: NextConfig = {};
87
-
88
- export default nextConfig;
84
+ return `import type { NextConfig } from 'next';
85
+
86
+ const nextConfig: NextConfig = {};
87
+
88
+ export default nextConfig;
89
89
  `;
90
90
  }
91
91
  /** Generate `app/api/mcp/route.ts` — The MCP endpoint */
92
92
  export function vercelRouteTs(config) {
93
- return `/**
94
- * MCP Endpoint — Vercel Adapter
95
- *
96
- * This route exposes your Vurb tools as a stateless MCP server.
97
- * Connect any MCP client to: POST /api/mcp
98
- */
99
- import { vercelAdapter } from '@vurb/vercel';
100
- import { registry } from '@/mcp/registry.js';
101
- import { createContext } from '@/mcp/context.js';
102
-
103
- export const POST = vercelAdapter({
104
- registry,
105
- serverName: '${config.name}',
106
- contextFactory: async (req) => createContext(),
107
- });
93
+ return `/**
94
+ * MCP Endpoint — Vercel Adapter
95
+ *
96
+ * This route exposes your Vurb tools as a stateless MCP server.
97
+ * Connect any MCP client to: POST /api/mcp
98
+ */
99
+ import { vercelAdapter } from '@vurb/vercel';
100
+ import { registry } from '@/mcp/registry.js';
101
+ import { createContext } from '@/mcp/context.js';
102
+
103
+ export const POST = vercelAdapter({
104
+ registry,
105
+ serverName: '${config.name}',
106
+ contextFactory: async (req) => createContext(),
107
+ });
108
108
  `;
109
109
  }
110
110
  /** Generate `src/mcp/registry.ts` — Tool registry (cold-start) */
111
111
  export function vercelRegistryTs() {
112
- return `/**
113
- * Tool Registry — Cold Start Initialization
114
- *
115
- * Registered tools are compiled once during cold start.
116
- * Warm requests only instantiate McpServer + Transport.
117
- */
118
- import { f } from './vurb.js';
119
- import healthTool from './tools/system/health.js';
120
- import echoTool from './tools/system/echo.js';
121
-
122
- export const registry = f.registry();
123
- registry.register(healthTool);
124
- registry.register(echoTool);
112
+ return `/**
113
+ * Tool Registry — Cold Start Initialization
114
+ *
115
+ * Registered tools are compiled once during cold start.
116
+ * Warm requests only instantiate McpServer + Transport.
117
+ */
118
+ import { f } from './vurb.js';
119
+ import healthTool from './tools/system/health.js';
120
+ import echoTool from './tools/system/echo.js';
121
+
122
+ export const registry = f.registry();
123
+ registry.register(healthTool);
124
+ registry.register(echoTool);
125
125
  `;
126
126
  }
127
127
  /** Generate `src/mcp/vurb.ts` — initVurb instance */
128
128
  export function vercelVurbTs() {
129
- return `/**
130
- * Vurb Instance — Context Initialization
131
- *
132
- * Define your context type ONCE. Every f.query(), f.mutation(),
133
- * and f.presenter() call inherits AppContext.
134
- */
135
- import { initVurb } from '@vurb/core';
136
- import type { AppContext } from './context.js';
137
-
138
- export const f = initVurb<AppContext>();
129
+ return `/**
130
+ * Vurb Instance — Context Initialization
131
+ *
132
+ * Define your context type ONCE. Every f.query(), f.mutation(),
133
+ * and f.presenter() call inherits AppContext.
134
+ */
135
+ import { initVurb } from '@vurb/core';
136
+ import type { AppContext } from './context.js';
137
+
138
+ export const f = initVurb<AppContext>();
139
139
  `;
140
140
  }
141
141
  /** Generate `src/mcp/context.ts` — Application context */
142
142
  export function vercelContextTs() {
143
- return `/**
144
- * Application Context — Shared State for Every Tool Handler
145
- *
146
- * Every f.query() / f.mutation() handler receives (input, ctx)
147
- * where ctx is this AppContext.
148
- */
149
-
150
- export interface AppContext {
151
- /** Current user role for RBAC checks */
152
- role: 'ADMIN' | 'USER' | 'GUEST';
153
-
154
- /** Tenant identifier (multi-tenancy) */
155
- tenantId: string;
156
- }
157
-
158
- /**
159
- * Create the application context for each tool invocation.
160
- *
161
- * In production, hydrate from request headers, JWT tokens,
162
- * or environment variables.
163
- */
164
- export function createContext(): AppContext {
165
- return {
166
- role: 'ADMIN',
167
- tenantId: 'default',
168
- };
169
- }
143
+ return `/**
144
+ * Application Context — Shared State for Every Tool Handler
145
+ *
146
+ * Every f.query() / f.mutation() handler receives (input, ctx)
147
+ * where ctx is this AppContext.
148
+ */
149
+
150
+ export interface AppContext {
151
+ /** Current user role for RBAC checks */
152
+ role: 'ADMIN' | 'USER' | 'GUEST';
153
+
154
+ /** Tenant identifier (multi-tenancy) */
155
+ tenantId: string;
156
+ }
157
+
158
+ /**
159
+ * Create the application context for each tool invocation.
160
+ *
161
+ * In production, hydrate from request headers, JWT tokens,
162
+ * or environment variables.
163
+ */
164
+ export function createContext(): AppContext {
165
+ return {
166
+ role: 'ADMIN',
167
+ tenantId: 'default',
168
+ };
169
+ }
170
170
  `;
171
171
  }
172
172
  /** Generate `.env.example` for Vercel */
173
173
  export function vercelEnvExample(config) {
174
- let env = `# ── Vurb + Vercel Environment ──────────────────
175
- # Copy this to .env.local and fill in your values.
176
-
177
- NODE_ENV=development
174
+ let env = `# ── Vurb + Vercel Environment ──────────────────
175
+ # Copy this to .env.local and fill in your values.
176
+
177
+ NODE_ENV=development
178
178
  `;
179
179
  if (config.vector === 'prisma') {
180
- env += `
181
- # Database (Prisma)
182
- DATABASE_URL="postgresql://user:password@localhost:5432/mydb?schema=public"
180
+ env += `
181
+ # Database (Prisma)
182
+ DATABASE_URL="postgresql://user:password@localhost:5432/mydb?schema=public"
183
183
  `;
184
184
  }
185
185
  if (config.vector === 'oauth') {
186
- env += `
187
- # OAuth Device Flow (RFC 8628)
188
- OAUTH_CLIENT_ID=your-client-id
189
- OAUTH_AUTH_ENDPOINT=https://api.example.com/oauth/device/code
190
- OAUTH_TOKEN_ENDPOINT=https://api.example.com/oauth/device/token
186
+ env += `
187
+ # OAuth Device Flow (RFC 8628)
188
+ OAUTH_CLIENT_ID=your-client-id
189
+ OAUTH_AUTH_ENDPOINT=https://api.example.com/oauth/device/code
190
+ OAUTH_TOKEN_ENDPOINT=https://api.example.com/oauth/device/token
191
191
  `;
192
192
  }
193
193
  return env;
194
194
  }
195
195
  /** Generate `.gitignore` for Next.js */
196
196
  export function vercelGitignore() {
197
- return `node_modules/
198
- .next/
199
- out/
200
- *.tsbuildinfo
201
- .env
202
- .env.local
203
- .vercel
204
- coverage/
197
+ return `node_modules/
198
+ .next/
199
+ out/
200
+ *.tsbuildinfo
201
+ .env
202
+ .env.local
203
+ .vercel
204
+ coverage/
205
205
  `;
206
206
  }
207
207
  /** Generate `README.md` for Vercel project */
208
208
  export function vercelReadme(config) {
209
- return `# ${config.name}
210
-
211
- MCP Server built with [Vurb](https://vurb.vinkius.com/) — deployed to Vercel.
212
-
213
- ## Quick Start
214
-
215
- \`\`\`bash
216
- npm install
217
- npm run dev
218
- \`\`\`
219
-
220
- The MCP endpoint is available at \`POST http://localhost:3000/api/mcp\`.
221
-
222
- ## Deploy to Vercel
223
-
224
- \`\`\`bash
225
- npx vercel deploy
226
- \`\`\`
227
-
228
- ## Client Configuration
229
-
230
- ### Cursor / VS Code
231
-
232
- \`\`\`json
233
- {
234
- "mcpServers": {
235
- "${config.name}": {
236
- "url": "https://your-app.vercel.app/api/mcp"
237
- }
238
- }
239
- }
240
- \`\`\`
241
-
242
- ### Claude Desktop
243
-
244
- Add to your \`claude_desktop_config.json\`:
245
-
246
- \`\`\`json
247
- {
248
- "mcpServers": {
249
- "${config.name}": {
250
- "url": "https://your-app.vercel.app/api/mcp"
251
- }
252
- }
253
- }
254
- \`\`\`
255
-
256
- ## Project Structure
257
-
258
- \`\`\`
259
- src/
260
- └── mcp/
261
- ├── vurb.ts # initVurb<AppContext>()
262
- ├── context.ts # AppContext type + factory
263
- ├── registry.ts # Tool registry (cold-start)
264
- └── tools/
265
- └── system/
266
- ├── health.ts # Health check
267
- └── echo.ts # Echo tool
268
- app/
269
- └── api/
270
- └── mcp/
271
- └── route.ts # POST /api/mcp → vercelAdapter()
272
- \`\`\`
273
-
274
- ## Adding New Tools
275
-
276
- 1. Create a tool in \`src/mcp/tools/\`:
277
-
278
- \`\`\`typescript
279
- import { f } from '../../vurb.js';
280
-
281
- export default f.query('my_tool')
282
- .describe('What this tool does')
283
- .withString('query', 'Search query')
284
- .handle(async (input, ctx) => {
285
- return { result: input.query };
286
- });
287
- \`\`\`
288
-
289
- 2. Register it in \`src/mcp/registry.ts\`:
290
-
291
- \`\`\`typescript
292
- import myTool from './tools/my-domain/my-tool.js';
293
- registry.register(myTool);
294
- \`\`\`
295
-
296
- ## Edge Runtime (Optional)
297
-
298
- For lower latency, add to \`app/api/mcp/route.ts\`:
299
-
300
- \`\`\`typescript
301
- export const runtime = 'edge';
302
- \`\`\`
303
-
304
- ## Documentation
305
-
306
- - [Vurb Docs](https://vurb.vinkius.com/)
307
- - [Vercel Adapter](https://vurb.vinkius.com/vercel-adapter)
308
- - [Presenter — Egress Firewall](https://vurb.vinkius.com/presenter)
209
+ return `# ${config.name}
210
+
211
+ MCP Server built with [Vurb](https://vurb.vinkius.com/) — deployed to Vercel.
212
+
213
+ ## Quick Start
214
+
215
+ \`\`\`bash
216
+ npm install
217
+ npm run dev
218
+ \`\`\`
219
+
220
+ The MCP endpoint is available at \`POST http://localhost:3000/api/mcp\`.
221
+
222
+ ## Deploy to Vercel
223
+
224
+ \`\`\`bash
225
+ npx vercel deploy
226
+ \`\`\`
227
+
228
+ ## Client Configuration
229
+
230
+ ### Cursor / VS Code
231
+
232
+ \`\`\`json
233
+ {
234
+ "mcpServers": {
235
+ "${config.name}": {
236
+ "url": "https://your-app.vercel.app/api/mcp"
237
+ }
238
+ }
239
+ }
240
+ \`\`\`
241
+
242
+ ### Claude Desktop
243
+
244
+ Add to your \`claude_desktop_config.json\`:
245
+
246
+ \`\`\`json
247
+ {
248
+ "mcpServers": {
249
+ "${config.name}": {
250
+ "url": "https://your-app.vercel.app/api/mcp"
251
+ }
252
+ }
253
+ }
254
+ \`\`\`
255
+
256
+ ## Project Structure
257
+
258
+ \`\`\`
259
+ src/
260
+ └── mcp/
261
+ ├── vurb.ts # initVurb<AppContext>()
262
+ ├── context.ts # AppContext type + factory
263
+ ├── registry.ts # Tool registry (cold-start)
264
+ └── tools/
265
+ └── system/
266
+ ├── health.ts # Health check
267
+ └── echo.ts # Echo tool
268
+ app/
269
+ └── api/
270
+ └── mcp/
271
+ └── route.ts # POST /api/mcp → vercelAdapter()
272
+ \`\`\`
273
+
274
+ ## Adding New Tools
275
+
276
+ 1. Create a tool in \`src/mcp/tools/\`:
277
+
278
+ \`\`\`typescript
279
+ import { f } from '../../vurb.js';
280
+
281
+ export default f.query('my_tool')
282
+ .describe('What this tool does')
283
+ .withString('query', 'Search query')
284
+ .handle(async (input, ctx) => {
285
+ return { result: input.query };
286
+ });
287
+ \`\`\`
288
+
289
+ 2. Register it in \`src/mcp/registry.ts\`:
290
+
291
+ \`\`\`typescript
292
+ import myTool from './tools/my-domain/my-tool.js';
293
+ registry.register(myTool);
294
+ \`\`\`
295
+
296
+ ## Edge Runtime (Optional)
297
+
298
+ For lower latency, add to \`app/api/mcp/route.ts\`:
299
+
300
+ \`\`\`typescript
301
+ export const runtime = 'edge';
302
+ \`\`\`
303
+
304
+ ## Documentation
305
+
306
+ - [Vurb Docs](https://vurb.vinkius.com/)
307
+ - [Vercel Adapter](https://vurb.vinkius.com/vercel-adapter)
308
+ - [Presenter — Egress Firewall](https://vurb.vinkius.com/presenter)
309
309
  `;
310
310
  }
311
311
  //# sourceMappingURL=vercel.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"BuildPipeline.d.ts","sourceRoot":"","sources":["../../../src/core/builder/BuildPipeline.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,WAAW,EAAE,KAAK,OAAO,EAAE,MAAM,KAAK,CAAC;AAErE,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AAEnE,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAC1E,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAEpE,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAE9D;;;GAGG;AACH,MAAM,WAAW,iBAAiB,CAAC,QAAQ,EAAE,IAAI;IAC7C,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC,WAAW,CAAC,EAAE,SAAS,CAAC,WAAW,CAAC,CAAC;IACrC,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,WAAW,EAAE,YAAY,CAAC,QAAQ,CAAC,EAAE,CAAC;IACtC,OAAO,EAAE,SAAS,CAAC,OAAO,CAAC,GAAG,SAAS,CAAC;IACxC,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,QAAQ,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B,WAAW,EAAE,OAAO,GAAG,SAAS,CAAC;IACjC,UAAU,EAAE,OAAO,GAAG,SAAS,CAAC;IAChC,QAAQ,EAAE,OAAO,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC;IACjD,mBAAmB,EAAE,MAAM,EAAE,CAAC;IAC9B,YAAY,EAAE,UAAU,GAAG,WAAW,GAAG,SAAS,CAAC;IACnD,WAAW,EAAE,iBAAiB,GAAG,SAAS,CAAC;IAC3C,cAAc,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,aAAa,EAAE,aAAa,GAAG,SAAS,CAAC;IACzC,SAAS,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IAChC,aAAa,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,OAAO,EAAE,CACL,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,GAAG,EAAE,IAAI,KACR,OAAO,CAAC,YAAY,GAAG,OAAO,CAAC,CAAC;CACxC;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,IAAI,EAC9C,MAAM,EAAE,iBAAiB,CAAC,QAAQ,EAAE,IAAI,CAAC,GAC1C,kBAAkB,CAAC,QAAQ,CAAC,CAsH9B"}
1
+ {"version":3,"file":"BuildPipeline.d.ts","sourceRoot":"","sources":["../../../src/core/builder/BuildPipeline.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,WAAW,EAAE,KAAK,OAAO,EAAE,MAAM,KAAK,CAAC;AAErE,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AAEnE,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAC1E,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAEpE,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAE9D;;;GAGG;AACH,MAAM,WAAW,iBAAiB,CAAC,QAAQ,EAAE,IAAI;IAC7C,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC,WAAW,CAAC,EAAE,SAAS,CAAC,WAAW,CAAC,CAAC;IACrC,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,WAAW,EAAE,YAAY,CAAC,QAAQ,CAAC,EAAE,CAAC;IACtC,OAAO,EAAE,SAAS,CAAC,OAAO,CAAC,GAAG,SAAS,CAAC;IACxC,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,QAAQ,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B,WAAW,EAAE,OAAO,GAAG,SAAS,CAAC;IACjC,UAAU,EAAE,OAAO,GAAG,SAAS,CAAC;IAChC,QAAQ,EAAE,OAAO,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC;IACjD,mBAAmB,EAAE,MAAM,EAAE,CAAC;IAC9B,YAAY,EAAE,UAAU,GAAG,WAAW,GAAG,SAAS,CAAC;IACnD,WAAW,EAAE,iBAAiB,GAAG,SAAS,CAAC;IAC3C,cAAc,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,aAAa,EAAE,aAAa,GAAG,SAAS,CAAC;IACzC,SAAS,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IAChC,aAAa,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,OAAO,EAAE,CACL,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,GAAG,EAAE,IAAI,KACR,OAAO,CAAC,YAAY,GAAG,OAAO,CAAC,CAAC;CACxC;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,IAAI,EAC9C,MAAM,EAAE,iBAAiB,CAAC,QAAQ,EAAE,IAAI,CAAC,GAC1C,kBAAkB,CAAC,QAAQ,CAAC,CA0H9B"}
@@ -125,9 +125,13 @@ export function buildToolFromFluent(config) {
125
125
  for (const mw of config.middlewares) {
126
126
  builder.use(mw);
127
127
  }
128
- // Register the single action
128
+ // Register the single action — pass description at the action level
129
+ // so that when multiple dotted-name tools (e.g. 'cy.get_user', 'cy.list_events')
130
+ // are merged into the same namespace builder, each action retains its
131
+ // own unique description instead of falling back to the builder's (first tool's).
129
132
  builder.action({
130
133
  name: actionName,
134
+ ...(compiledDescription ? { description: compiledDescription } : {}),
131
135
  handler: wrappedHandler,
132
136
  ...(inputSchema ? { schema: inputSchema } : {}),
133
137
  ...(readOnly !== undefined ? { readOnly } : {}),
@@ -1 +1 @@
1
- {"version":3,"file":"BuildPipeline.js","sourceRoot":"","sources":["../../../src/core/builder/BuildPipeline.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"BuildPipeline.js","sourceRoot":"","sources":["../../../src/core/builder/BuildPipeline.ts"],"names":[],"mappings":"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"}