@vinkius-core/mcp-fusion 2.14.0 → 2.14.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. package/dist/cli/fusion.js +35 -35
  2. package/dist/cli/templates/config.js +26 -26
  3. package/dist/cli/templates/core.d.ts.map +1 -1
  4. package/dist/cli/templates/core.js +108 -111
  5. package/dist/cli/templates/core.js.map +1 -1
  6. package/dist/cli/templates/middleware.js +25 -25
  7. package/dist/cli/templates/readme.js +142 -142
  8. package/dist/cli/templates/testing.js +83 -83
  9. package/dist/cli/templates/tools.js +46 -46
  10. package/dist/cli/templates/vectors/database.js +69 -69
  11. package/dist/cli/templates/vectors/oauth.js +63 -63
  12. package/dist/cli/templates/vectors/openapi.js +97 -97
  13. package/dist/core/builder/ActionGroupBuilder.d.ts +6 -2
  14. package/dist/core/builder/ActionGroupBuilder.d.ts.map +1 -1
  15. package/dist/core/builder/ActionGroupBuilder.js +6 -2
  16. package/dist/core/builder/ActionGroupBuilder.js.map +1 -1
  17. package/dist/core/builder/FluentRouter.d.ts +6 -2
  18. package/dist/core/builder/FluentRouter.d.ts.map +1 -1
  19. package/dist/core/builder/FluentRouter.js +6 -2
  20. package/dist/core/builder/FluentRouter.js.map +1 -1
  21. package/dist/core/builder/FluentToolBuilder.d.ts +45 -9
  22. package/dist/core/builder/FluentToolBuilder.d.ts.map +1 -1
  23. package/dist/core/builder/FluentToolBuilder.js +54 -27
  24. package/dist/core/builder/FluentToolBuilder.js.map +1 -1
  25. package/dist/core/builder/GroupedToolBuilder.d.ts +32 -2
  26. package/dist/core/builder/GroupedToolBuilder.d.ts.map +1 -1
  27. package/dist/core/builder/GroupedToolBuilder.js +47 -2
  28. package/dist/core/builder/GroupedToolBuilder.js.map +1 -1
  29. package/dist/core/builder/defineTool.d.ts +5 -4
  30. package/dist/core/builder/defineTool.d.ts.map +1 -1
  31. package/dist/core/builder/defineTool.js +3 -2
  32. package/dist/core/builder/defineTool.js.map +1 -1
  33. package/dist/core/initFusion.d.ts +26 -1
  34. package/dist/core/initFusion.d.ts.map +1 -1
  35. package/dist/core/initFusion.js +5 -0
  36. package/dist/core/initFusion.js.map +1 -1
  37. package/dist/fsm/StateMachineGate.d.ts +264 -0
  38. package/dist/fsm/StateMachineGate.d.ts.map +1 -0
  39. package/dist/fsm/StateMachineGate.js +343 -0
  40. package/dist/fsm/StateMachineGate.js.map +1 -0
  41. package/dist/index.d.ts +4 -0
  42. package/dist/index.d.ts.map +1 -1
  43. package/dist/index.js +3 -0
  44. package/dist/index.js.map +1 -1
  45. package/dist/introspection/SemanticProbe.js +49 -49
  46. package/dist/observability/TelemetryBus.d.ts +82 -0
  47. package/dist/observability/TelemetryBus.d.ts.map +1 -0
  48. package/dist/observability/TelemetryBus.js +335 -0
  49. package/dist/observability/TelemetryBus.js.map +1 -0
  50. package/dist/observability/TelemetryEvent.d.ts +171 -0
  51. package/dist/observability/TelemetryEvent.d.ts.map +1 -0
  52. package/dist/observability/TelemetryEvent.js +2 -0
  53. package/dist/observability/TelemetryEvent.js.map +1 -0
  54. package/dist/presenter/definePresenter.d.ts +2 -2
  55. package/dist/presenter/definePresenter.d.ts.map +1 -1
  56. package/dist/prompt/FluentPromptBuilder.d.ts.map +1 -1
  57. package/dist/server/ServerAttachment.d.ts +63 -0
  58. package/dist/server/ServerAttachment.d.ts.map +1 -1
  59. package/dist/server/ServerAttachment.js +149 -6
  60. package/dist/server/ServerAttachment.js.map +1 -1
  61. package/package.json +10 -3
@@ -4,79 +4,79 @@
4
4
  */
5
5
  /** Generate `prisma/schema.prisma` */
6
6
  export function prismaSchema() {
7
- return `// Prisma Schema — Database-Driven MCP Server
8
- //
9
- // The @vinkius-core/mcp-fusion-prisma-gen generator reads annotations
10
- // and auto-generates Presenters + ToolBuilders with:
11
- // - Field-level security (/// @fusion.hide)
12
- // - Tenant isolation
13
- // - OOM protection
14
-
15
- generator client {
16
- provider = "prisma-client-js"
17
- }
18
-
19
- generator fusion {
20
- provider = "@vinkius-core/mcp-fusion-prisma-gen"
21
- }
22
-
23
- datasource db {
24
- provider = "postgresql"
25
- url = env("DATABASE_URL")
26
- }
27
-
28
- model User {
29
- id String @id @default(cuid())
30
- email String @unique
31
- name String
32
-
33
- /// @fusion.hide — Stripped by the Egress Firewall before reaching the LLM
34
- password String
35
-
36
- role String @default("USER")
37
- createdAt DateTime @default(now())
38
- updatedAt DateTime @updatedAt
39
-
40
- posts Post[]
41
- }
42
-
43
- model Post {
44
- id String @id @default(cuid())
45
- title String
46
- content String?
47
- published Boolean @default(false)
48
- createdAt DateTime @default(now())
49
-
50
- author User @relation(fields: [authorId], references: [id])
51
- authorId String
52
- }
7
+ return `// Prisma Schema — Database-Driven MCP Server
8
+ //
9
+ // The @vinkius-core/mcp-fusion-prisma-gen generator reads annotations
10
+ // and auto-generates Presenters + ToolBuilders with:
11
+ // - Field-level security (/// @fusion.hide)
12
+ // - Tenant isolation
13
+ // - OOM protection
14
+
15
+ generator client {
16
+ provider = "prisma-client-js"
17
+ }
18
+
19
+ generator fusion {
20
+ provider = "@vinkius-core/mcp-fusion-prisma-gen"
21
+ }
22
+
23
+ datasource db {
24
+ provider = "postgresql"
25
+ url = env("DATABASE_URL")
26
+ }
27
+
28
+ model User {
29
+ id String @id @default(cuid())
30
+ email String @unique
31
+ name String
32
+
33
+ /// @fusion.hide — Stripped by the Egress Firewall before reaching the LLM
34
+ password String
35
+
36
+ role String @default("USER")
37
+ createdAt DateTime @default(now())
38
+ updatedAt DateTime @updatedAt
39
+
40
+ posts Post[]
41
+ }
42
+
43
+ model Post {
44
+ id String @id @default(cuid())
45
+ title String
46
+ content String?
47
+ published Boolean @default(false)
48
+ createdAt DateTime @default(now())
49
+
50
+ author User @relation(fields: [authorId], references: [id])
51
+ authorId String
52
+ }
53
53
  `;
54
54
  }
55
55
  /** Generate `src/tools/db/users.ts` */
56
56
  export function dbUsersToolTs() {
57
- return `/**
58
- * Database Users Tool — Prisma-Driven CRUD (Fluent API)
59
- *
60
- * Demonstrates:
61
- * - f.query() with .withOptionalNumber() typed parameter
62
- * - .handle(input, ctx) — input.take is typed as number | undefined
63
- * - Implicit success() wrapping
64
- */
65
- import { f } from '../../fusion.js';
66
-
67
- export default f.query('db.list_users')
68
- .describe('List users from the database')
69
- .withOptionalNumber('take', 'Max results (1-50)')
70
- .handle(async (input, ctx) => {
71
- // TODO: Replace with your Prisma client
72
- // const users = await ctx.db.user.findMany({ take: input.take ?? 10 });
73
- // return users;
74
-
75
- return {
76
- hint: 'Connect your Prisma client in src/context.ts to enable database queries.',
77
- example: 'const users = await ctx.db.user.findMany({ take: 10 })',
78
- };
79
- });
57
+ return `/**
58
+ * Database Users Tool — Prisma-Driven CRUD (Fluent API)
59
+ *
60
+ * Demonstrates:
61
+ * - f.query() with .withOptionalNumber() typed parameter
62
+ * - .handle(input, ctx) — input.take is typed as number | undefined
63
+ * - Implicit success() wrapping
64
+ */
65
+ import { f } from '../../fusion.js';
66
+
67
+ export default f.query('db.list_users')
68
+ .describe('List users from the database')
69
+ .withOptionalNumber('take', 'Max results (1-50)')
70
+ .handle(async (input, ctx) => {
71
+ // TODO: Replace with your Prisma client
72
+ // const users = await ctx.db.user.findMany({ take: input.take ?? 10 });
73
+ // return users;
74
+
75
+ return {
76
+ hint: 'Connect your Prisma client in src/context.ts to enable database queries.',
77
+ example: 'const users = await ctx.db.user.findMany({ take: 10 })',
78
+ };
79
+ });
80
80
  `;
81
81
  }
82
82
  //# sourceMappingURL=database.js.map
@@ -4,73 +4,73 @@
4
4
  */
5
5
  /** Generate `src/auth.ts` — OAuth Device Flow setup */
6
6
  export function oauthSetupTs(config) {
7
- return `/**
8
- * OAuth Setup — Device Flow Authentication (RFC 8628)
9
- *
10
- * Pre-configured \`createAuthTool()\` with login, complete, status, logout actions.
11
- * The \`requireAuth()\` middleware protects any tool with one line.
12
- *
13
- * 1. Set CLIENT_ID and AUTH endpoints in .env
14
- * 2. Register the auth tool in server.ts
15
- * 3. Use \`requireAuth()\` on protected tools
16
- */
17
- import { createAuthTool, TokenManager } from '@vinkius-core/mcp-fusion-oauth';
18
- import type { ToolRegistry } from '@vinkius-core/mcp-fusion';
19
-
20
- export function registerAuth<TContext>(registry: ToolRegistry<TContext>): void {
21
- const clientId = process.env['OAUTH_CLIENT_ID'];
22
- const authEndpoint = process.env['OAUTH_AUTH_ENDPOINT'];
23
- const tokenEndpoint = process.env['OAUTH_TOKEN_ENDPOINT'];
24
-
25
- if (!clientId || !authEndpoint || !tokenEndpoint) {
26
- console.error('⚠️ OAUTH_CLIENT_ID, OAUTH_AUTH_ENDPOINT, OAUTH_TOKEN_ENDPOINT are required in .env');
27
- return;
28
- }
29
-
30
- const auth = createAuthTool({
31
- clientId,
32
- authorizationEndpoint: authEndpoint,
33
- tokenEndpoint,
34
- tokenManager: {
35
- configDir: '.${config.name}',
36
- envVar: '${config.name.toUpperCase().replace(/-/g, '_')}_TOKEN',
37
- },
38
- });
39
-
40
- registry.register(auth);
41
- console.error('🔐 OAuth Device Flow registered (auth.login → auth.complete → auth.status)');
42
- }
7
+ return `/**
8
+ * OAuth Setup — Device Flow Authentication (RFC 8628)
9
+ *
10
+ * Pre-configured \`createAuthTool()\` with login, complete, status, logout actions.
11
+ * The \`requireAuth()\` middleware protects any tool with one line.
12
+ *
13
+ * 1. Set CLIENT_ID and AUTH endpoints in .env
14
+ * 2. Register the auth tool in server.ts
15
+ * 3. Use \`requireAuth()\` on protected tools
16
+ */
17
+ import { createAuthTool, TokenManager } from '@vinkius-core/mcp-fusion-oauth';
18
+ import type { ToolRegistry } from '@vinkius-core/mcp-fusion';
19
+
20
+ export function registerAuth<TContext>(registry: ToolRegistry<TContext>): void {
21
+ const clientId = process.env['OAUTH_CLIENT_ID'];
22
+ const authEndpoint = process.env['OAUTH_AUTH_ENDPOINT'];
23
+ const tokenEndpoint = process.env['OAUTH_TOKEN_ENDPOINT'];
24
+
25
+ if (!clientId || !authEndpoint || !tokenEndpoint) {
26
+ console.error('⚠️ OAUTH_CLIENT_ID, OAUTH_AUTH_ENDPOINT, OAUTH_TOKEN_ENDPOINT are required in .env');
27
+ return;
28
+ }
29
+
30
+ const auth = createAuthTool({
31
+ clientId,
32
+ authorizationEndpoint: authEndpoint,
33
+ tokenEndpoint,
34
+ tokenManager: {
35
+ configDir: '.${config.name}',
36
+ envVar: '${config.name.toUpperCase().replace(/-/g, '_')}_TOKEN',
37
+ },
38
+ });
39
+
40
+ registry.register(auth);
41
+ console.error('🔐 OAuth Device Flow registered (auth.login → auth.complete → auth.status)');
42
+ }
43
43
  `;
44
44
  }
45
45
  /** Generate `src/middleware/auth.ts` — requireAuth middleware */
46
46
  export function oauthMiddlewareTs() {
47
- return `/**
48
- * Auth Middleware — Protect tools with requireAuth()
49
- *
50
- * @example
51
- * \`\`\`ts
52
- * import { withAuth } from '../middleware/auth.js';
53
- *
54
- * export default f.query('projects.list')
55
- * .describe('List all projects')
56
- * .use(withAuth)
57
- * .handle(async (input, ctx) => { /* authenticated */ });
58
- * \`\`\`
59
- */
60
- import { requireAuth } from '@vinkius-core/mcp-fusion-oauth';
61
-
62
- /**
63
- * Pre-configured auth middleware.
64
- * Rejects unauthenticated requests with \`AUTH_REQUIRED\` + self-healing hints.
65
- */
66
- export const withAuth = requireAuth({
67
- extractToken: (ctx: unknown) => {
68
- const obj = ctx as Record<string, unknown>;
69
- return typeof obj['token'] === 'string' ? obj['token'] : null;
70
- },
71
- recoveryHint: 'Call auth action=login to authenticate via browser',
72
- recoveryAction: 'auth',
73
- });
47
+ return `/**
48
+ * Auth Middleware — Protect tools with requireAuth()
49
+ *
50
+ * @example
51
+ * \`\`\`ts
52
+ * import { withAuth } from '../middleware/auth.js';
53
+ *
54
+ * export default f.query('projects.list')
55
+ * .describe('List all projects')
56
+ * .use(withAuth)
57
+ * .handle(async (input, ctx) => { /* authenticated */ });
58
+ * \`\`\`
59
+ */
60
+ import { requireAuth } from '@vinkius-core/mcp-fusion-oauth';
61
+
62
+ /**
63
+ * Pre-configured auth middleware.
64
+ * Rejects unauthenticated requests with \`AUTH_REQUIRED\` + self-healing hints.
65
+ */
66
+ export const withAuth = requireAuth({
67
+ extractToken: (ctx: unknown) => {
68
+ const obj = ctx as Record<string, unknown>;
69
+ return typeof obj['token'] === 'string' ? obj['token'] : null;
70
+ },
71
+ recoveryHint: 'Call auth action=login to authenticate via browser',
72
+ recoveryAction: 'auth',
73
+ });
74
74
  `;
75
75
  }
76
76
  //# sourceMappingURL=oauth.js.map
@@ -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 @vinkius-core/mcp-fusion-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 MCP Fusion 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 @vinkius-core/mcp-fusion-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 MCP Fusion 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 @vinkius-core/mcp-fusion-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://mcp-fusion.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 @vinkius-core/mcp-fusion-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://mcp-fusion.vinkius.com/openapi-gen)
104
104
  `;
105
105
  }
106
106
  //# sourceMappingURL=openapi.js.map
@@ -28,6 +28,7 @@
28
28
  */
29
29
  import { type ZodObject, type ZodRawShape } from 'zod';
30
30
  import { type ToolResponse, type InternalAction, type MiddlewareFn, type ActionConfig } from '../types.js';
31
+ import { type MiddlewareDefinition } from '../middleware/ContextDerivation.js';
31
32
  /**
32
33
  * Callback for configuring actions within a group.
33
34
  *
@@ -79,7 +80,10 @@ export declare class ActionGroupBuilder<TContext, TCommon extends Record<string,
79
80
  * Unlike {@link GroupedToolBuilder.use}, this middleware runs
80
81
  * only for actions within this group — not globally.
81
82
  *
82
- * @param mw - Middleware function
83
+ * Accepts both `MiddlewareDefinition` from `f.middleware()` and
84
+ * raw `MiddlewareFn` functions.
85
+ *
86
+ * @param mw - Middleware function or MiddlewareDefinition
83
87
  * @returns `this` for chaining
84
88
  *
85
89
  * @example
@@ -93,7 +97,7 @@ export declare class ActionGroupBuilder<TContext, TCommon extends Record<string,
93
97
  *
94
98
  * @see {@link MiddlewareFn} for the middleware signature
95
99
  */
96
- use(mw: MiddlewareFn<TContext>): this;
100
+ use(mw: MiddlewareFn<TContext> | MiddlewareDefinition<TContext, Record<string, unknown>>): this;
97
101
  /**
98
102
  * Omit common schema fields for all actions in this group.
99
103
  *
@@ -1 +1 @@
1
- {"version":3,"file":"ActionGroupBuilder.d.ts","sourceRoot":"","sources":["../../../src/core/builder/ActionGroupBuilder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ActionGroupBuilder.d.ts","sourceRoot":"","sources":["../../../src/core/builder/ActionGroupBuilder.ts"],"names":[],"mappings":"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"}
@@ -28,6 +28,7 @@
28
28
  */
29
29
  import {} from 'zod';
30
30
  import {} from '../types.js';
31
+ import { resolveMiddleware } from '../middleware/ContextDerivation.js';
31
32
  // ── Shared Config → InternalAction Mapper ────────────────
32
33
  /**
33
34
  * Map `ActionConfig` properties to `InternalAction` base fields.
@@ -73,7 +74,10 @@ export class ActionGroupBuilder {
73
74
  * Unlike {@link GroupedToolBuilder.use}, this middleware runs
74
75
  * only for actions within this group — not globally.
75
76
  *
76
- * @param mw - Middleware function
77
+ * Accepts both `MiddlewareDefinition` from `f.middleware()` and
78
+ * raw `MiddlewareFn` functions.
79
+ *
80
+ * @param mw - Middleware function or MiddlewareDefinition
77
81
  * @returns `this` for chaining
78
82
  *
79
83
  * @example
@@ -88,7 +92,7 @@ export class ActionGroupBuilder {
88
92
  * @see {@link MiddlewareFn} for the middleware signature
89
93
  */
90
94
  use(mw) {
91
- this._groupMiddlewares.push(mw);
95
+ this._groupMiddlewares.push(resolveMiddleware(mw));
92
96
  return this;
93
97
  }
94
98
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"ActionGroupBuilder.js","sourceRoot":"","sources":["../../../src/core/builder/ActionGroupBuilder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ActionGroupBuilder.js","sourceRoot":"","sources":["../../../src/core/builder/ActionGroupBuilder.ts"],"names":[],"mappings":"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"}
@@ -27,6 +27,7 @@
27
27
  * @module
28
28
  */
29
29
  import { type MiddlewareFn } from '../types.js';
30
+ import { type MiddlewareDefinition } from '../middleware/ContextDerivation.js';
30
31
  import { FluentToolBuilder } from './FluentToolBuilder.js';
31
32
  /**
32
33
  * Fluent router that shares prefix, description, and middleware
@@ -50,10 +51,13 @@ export declare class FluentRouter<TContext> {
50
51
  /**
51
52
  * Add middleware shared by all tools in this router.
52
53
  *
53
- * @param mw - Middleware function
54
+ * Accepts both `MiddlewareDefinition` from `f.middleware()` and
55
+ * raw `MiddlewareFn` functions.
56
+ *
57
+ * @param mw - Middleware function or MiddlewareDefinition
54
58
  * @returns `this` for chaining
55
59
  */
56
- use(mw: MiddlewareFn<TContext>): this;
60
+ use(mw: MiddlewareFn<TContext> | MiddlewareDefinition<TContext, Record<string, unknown>>): this;
57
61
  /**
58
62
  * Set capability tags shared by all tools in this router.
59
63
  *
@@ -1 +1 @@
1
- {"version":3,"file":"FluentRouter.d.ts","sourceRoot":"","sources":["../../../src/core/builder/FluentRouter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EACH,iBAAiB,EAIpB,MAAM,wBAAwB,CAAC;AAEhC;;;;;GAKG;AACH,qBAAa,YAAY,CAAC,QAAQ;IAC9B,gBAAgB,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAC1C,gBAAgB,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IACvC,gBAAgB,CAAC,YAAY,EAAE,YAAY,CAAC,QAAQ,CAAC,EAAE,CAAM;IAC7D,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,CAAM;gBAE1B,MAAM,EAAE,MAAM;IAI1B;;;;;OAKG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAK5B;;;;;OAKG;IACH,GAAG,CAAC,EAAE,EAAE,YAAY,CAAC,QAAQ,CAAC,GAAG,IAAI;IAKrC;;;;;OAKG;IACH,IAAI,CAAC,GAAG,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI;IAK7B;;;;;OAKG;IACH,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,iBAAiB,CAAC,QAAQ,CAAC;IAIlD;;;;;OAKG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,iBAAiB,CAAC,QAAQ,CAAC;IAIrD;;;;;OAKG;IACH,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,iBAAiB,CAAC,QAAQ,CAAC;IAInD;;;OAGG;IACH,OAAO,CAAC,cAAc;CAwBzB"}
1
+ {"version":3,"file":"FluentRouter.d.ts","sourceRoot":"","sources":["../../../src/core/builder/FluentRouter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,KAAK,oBAAoB,EAAqB,MAAM,oCAAoC,CAAC;AAClG,OAAO,EACH,iBAAiB,EAIpB,MAAM,wBAAwB,CAAC;AAEhC;;;;;GAKG;AACH,qBAAa,YAAY,CAAC,QAAQ;IAC9B,gBAAgB,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAC1C,gBAAgB,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IACvC,gBAAgB,CAAC,YAAY,EAAE,YAAY,CAAC,QAAQ,CAAC,EAAE,CAAM;IAC7D,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,CAAM;gBAE1B,MAAM,EAAE,MAAM;IAI1B;;;;;OAKG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAK5B;;;;;;;;OAQG;IACH,GAAG,CAAC,EAAE,EAAE,YAAY,CAAC,QAAQ,CAAC,GAAG,oBAAoB,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,IAAI;IAK/F;;;;;OAKG;IACH,IAAI,CAAC,GAAG,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI;IAK7B;;;;;OAKG;IACH,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,iBAAiB,CAAC,QAAQ,CAAC;IAIlD;;;;;OAKG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,iBAAiB,CAAC,QAAQ,CAAC;IAIrD;;;;;OAKG;IACH,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,iBAAiB,CAAC,QAAQ,CAAC;IAInD;;;OAGG;IACH,OAAO,CAAC,cAAc;CAwBzB"}
@@ -27,6 +27,7 @@
27
27
  * @module
28
28
  */
29
29
  import {} from '../types.js';
30
+ import { resolveMiddleware } from '../middleware/ContextDerivation.js';
30
31
  import { FluentToolBuilder, QUERY_DEFAULTS, MUTATION_DEFAULTS, ACTION_DEFAULTS, } from './FluentToolBuilder.js';
31
32
  /**
32
33
  * Fluent router that shares prefix, description, and middleware
@@ -55,11 +56,14 @@ export class FluentRouter {
55
56
  /**
56
57
  * Add middleware shared by all tools in this router.
57
58
  *
58
- * @param mw - Middleware function
59
+ * Accepts both `MiddlewareDefinition` from `f.middleware()` and
60
+ * raw `MiddlewareFn` functions.
61
+ *
62
+ * @param mw - Middleware function or MiddlewareDefinition
59
63
  * @returns `this` for chaining
60
64
  */
61
65
  use(mw) {
62
- this._middlewares.push(mw);
66
+ this._middlewares.push(resolveMiddleware(mw));
63
67
  return this;
64
68
  }
65
69
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"FluentRouter.js","sourceRoot":"","sources":["../../../src/core/builder/FluentRouter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,OAAO,EAAqB,MAAM,aAAa,CAAC;AAChD,OAAO,EACH,iBAAiB,EACjB,cAAc,EACd,iBAAiB,EACjB,eAAe,GAClB,MAAM,wBAAwB,CAAC;AAEhC;;;;;GAKG;AACH,MAAM,OAAO,YAAY;IACrB,gBAAgB,CAAU,OAAO,CAAS;IAC1C,gBAAgB,CAAC,YAAY,CAAU;IACvC,gBAAgB,CAAC,YAAY,GAA6B,EAAE,CAAC;IAC7D,gBAAgB,CAAC,KAAK,GAAa,EAAE,CAAC;IAEtC,YAAY,MAAc;QACtB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;IAC1B,CAAC;IAED;;;;;OAKG;IACH,QAAQ,CAAC,IAAY;QACjB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QACzB,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;;;;OAKG;IACH,GAAG,CAAC,EAA0B;QAC1B,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC3B,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;;;;OAKG;IACH,IAAI,CAAC,GAAG,IAAc;QAClB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,MAAc;QAChB,OAAO,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IACvD,CAAC;IAED;;;;;OAKG;IACH,QAAQ,CAAC,MAAc;QACnB,OAAO,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;IAC1D,CAAC;IAED;;;;;OAKG;IACH,MAAM,CAAC,MAAc;QACjB,OAAO,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IACxD,CAAC;IAED;;;OAGG;IACK,cAAc,CAClB,MAAc,EACd,QAA6E;QAE7E,MAAM,OAAO,GAAG,IAAI,iBAAiB,CACjC,GAAG,IAAI,CAAC,OAAO,IAAI,MAAM,EAAE,EAC3B,QAAQ,CACX,CAAC;QAEF,4BAA4B;QAC5B,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC;QAEhD,sBAAsB;QACtB,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QACtC,CAAC;QAED,yCAAyC;QACzC,IAAI,IAAI,CAAC,YAAY,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC;YAC7C,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;QAC7C,CAAC;QAED,OAAO,OAAO,CAAC;IACnB,CAAC;CACJ"}
1
+ {"version":3,"file":"FluentRouter.js","sourceRoot":"","sources":["../../../src/core/builder/FluentRouter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,OAAO,EAAqB,MAAM,aAAa,CAAC;AAChD,OAAO,EAA6B,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AAClG,OAAO,EACH,iBAAiB,EACjB,cAAc,EACd,iBAAiB,EACjB,eAAe,GAClB,MAAM,wBAAwB,CAAC;AAEhC;;;;;GAKG;AACH,MAAM,OAAO,YAAY;IACrB,gBAAgB,CAAU,OAAO,CAAS;IAC1C,gBAAgB,CAAC,YAAY,CAAU;IACvC,gBAAgB,CAAC,YAAY,GAA6B,EAAE,CAAC;IAC7D,gBAAgB,CAAC,KAAK,GAAa,EAAE,CAAC;IAEtC,YAAY,MAAc;QACtB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;IAC1B,CAAC;IAED;;;;;OAKG;IACH,QAAQ,CAAC,IAAY;QACjB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QACzB,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;;;;;;;OAQG;IACH,GAAG,CAAC,EAAoF;QACpF,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC,CAAC;QAC9C,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;;;;OAKG;IACH,IAAI,CAAC,GAAG,IAAc;QAClB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,MAAc;QAChB,OAAO,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IACvD,CAAC;IAED;;;;;OAKG;IACH,QAAQ,CAAC,MAAc;QACnB,OAAO,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;IAC1D,CAAC;IAED;;;;;OAKG;IACH,MAAM,CAAC,MAAc;QACjB,OAAO,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IACxD,CAAC;IAED;;;OAGG;IACK,cAAc,CAClB,MAAc,EACd,QAA6E;QAE7E,MAAM,OAAO,GAAG,IAAI,iBAAiB,CACjC,GAAG,IAAI,CAAC,OAAO,IAAI,MAAM,EAAE,EAC3B,QAAQ,CACX,CAAC;QAEF,4BAA4B;QAC5B,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC;QAEhD,sBAAsB;QACtB,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QACtC,CAAC;QAED,yCAAyC;QACzC,IAAI,IAAI,CAAC,YAAY,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC;YAC7C,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;QAC7C,CAAC;QAED,OAAO,OAAO,CAAC;IACnB,CAAC;CACJ"}