@vurb/core 3.3.4 → 3.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +726 -677
- package/dist/cli/constants.js +59 -59
- package/dist/cli/scaffold.js +2 -0
- package/dist/cli/scaffold.js.map +1 -1
- package/dist/cli/templates/config.js +27 -27
- package/dist/cli/templates/config.js.map +1 -1
- package/dist/cli/templates/core.js +95 -95
- package/dist/cli/templates/index.d.ts +1 -0
- package/dist/cli/templates/index.d.ts.map +1 -1
- package/dist/cli/templates/index.js +2 -0
- package/dist/cli/templates/index.js.map +1 -1
- package/dist/cli/templates/middleware.js +25 -25
- package/dist/cli/templates/model.d.ts +7 -0
- package/dist/cli/templates/model.d.ts.map +1 -0
- package/dist/cli/templates/model.js +31 -0
- package/dist/cli/templates/model.js.map +1 -0
- package/dist/cli/templates/presenter.d.ts.map +1 -1
- package/dist/cli/templates/presenter.js +4 -9
- package/dist/cli/templates/presenter.js.map +1 -1
- package/dist/cli/templates/readme.d.ts.map +1 -1
- package/dist/cli/templates/readme.js +144 -142
- package/dist/cli/templates/readme.js.map +1 -1
- package/dist/cli/templates/testing.js +84 -84
- package/dist/cli/templates/tools.js +46 -46
- package/dist/cli/templates/vectors/database.js +69 -69
- package/dist/cli/templates/vectors/oauth.js +63 -63
- package/dist/cli/templates/vectors/openapi.js +97 -97
- package/dist/core/builder/BuildPipeline.d.ts +56 -0
- package/dist/core/builder/BuildPipeline.d.ts.map +1 -0
- package/dist/core/builder/BuildPipeline.js +139 -0
- package/dist/core/builder/BuildPipeline.js.map +1 -0
- package/dist/core/builder/FluentToolBuilder.d.ts +253 -19
- package/dist/core/builder/FluentToolBuilder.d.ts.map +1 -1
- package/dist/core/builder/FluentToolBuilder.js +354 -114
- package/dist/core/builder/FluentToolBuilder.js.map +1 -1
- package/dist/core/builder/ProxyHandler.d.ts +26 -0
- package/dist/core/builder/ProxyHandler.d.ts.map +1 -0
- package/dist/core/builder/ProxyHandler.js +65 -0
- package/dist/core/builder/ProxyHandler.js.map +1 -0
- package/dist/core/builder/SemanticDefaults.d.ts +25 -0
- package/dist/core/builder/SemanticDefaults.d.ts.map +1 -0
- package/dist/core/builder/SemanticDefaults.js +16 -0
- package/dist/core/builder/SemanticDefaults.js.map +1 -0
- package/dist/core/builder/index.d.ts +2 -1
- package/dist/core/builder/index.d.ts.map +1 -1
- package/dist/core/builder/index.js +1 -0
- package/dist/core/builder/index.js.map +1 -1
- package/dist/core/middleware/AuditTrail.d.ts.map +1 -1
- package/dist/core/middleware/AuditTrail.js +6 -2
- package/dist/core/middleware/AuditTrail.js.map +1 -1
- package/dist/core/middleware/RateLimiter.d.ts.map +1 -1
- package/dist/core/middleware/RateLimiter.js +3 -1
- package/dist/core/middleware/RateLimiter.js.map +1 -1
- package/dist/fsm/StateMachineGate.d.ts +3 -0
- package/dist/fsm/StateMachineGate.d.ts.map +1 -1
- package/dist/fsm/StateMachineGate.js +12 -0
- package/dist/fsm/StateMachineGate.js.map +1 -1
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/introspection/SemanticProbe.js +49 -49
- package/dist/model/defineModel.d.ts +167 -0
- package/dist/model/defineModel.d.ts.map +1 -0
- package/dist/model/defineModel.js +345 -0
- package/dist/model/defineModel.js.map +1 -0
- package/dist/model/index.d.ts +8 -0
- package/dist/model/index.d.ts.map +1 -0
- package/dist/model/index.js +7 -0
- package/dist/model/index.js.map +1 -0
- package/dist/observability/TelemetryBus.d.ts.map +1 -1
- package/dist/observability/TelemetryBus.js +14 -13
- package/dist/observability/TelemetryBus.js.map +1 -1
- package/dist/presenter/Presenter.d.ts +21 -0
- package/dist/presenter/Presenter.d.ts.map +1 -1
- package/dist/presenter/Presenter.js +17 -8
- package/dist/presenter/Presenter.js.map +1 -1
- package/dist/presenter/PresenterPipeline.d.ts +2 -0
- package/dist/presenter/PresenterPipeline.d.ts.map +1 -1
- package/dist/presenter/PresenterPipeline.js +4 -0
- package/dist/presenter/PresenterPipeline.js.map +1 -1
- package/dist/presenter/definePresenter.d.ts.map +1 -1
- package/dist/presenter/definePresenter.js +13 -3
- package/dist/presenter/definePresenter.js.map +1 -1
- package/dist/prompt/FluentPromptBuilder.d.ts.map +1 -1
- package/dist/resource/ResourceRegistry.d.ts +3 -0
- package/dist/resource/ResourceRegistry.d.ts.map +1 -1
- package/dist/resource/ResourceRegistry.js +8 -2
- package/dist/resource/ResourceRegistry.js.map +1 -1
- package/dist/sandbox/SandboxGuard.js +7 -4
- package/dist/sandbox/SandboxGuard.js.map +1 -1
- package/dist/server/ServerAttachment.d.ts.map +1 -1
- package/dist/server/ServerAttachment.js +48 -9
- package/dist/server/ServerAttachment.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* BuildPipeline — Compiles FluentToolBuilder state into a GroupedToolBuilder.
|
|
3
|
+
*
|
|
4
|
+
* Extracts the `_build()` pipeline from FluentToolBuilder into a
|
|
5
|
+
* standalone function for SRP compliance. Handles:
|
|
6
|
+
* - Name parsing (`domain.action`)
|
|
7
|
+
* - Description compilation (instructions + sandbox prompting)
|
|
8
|
+
* - Semantic defaults resolution
|
|
9
|
+
* - Handler wrapping (implicit `success()`)
|
|
10
|
+
* - GroupedToolBuilder assembly + middleware propagation
|
|
11
|
+
*
|
|
12
|
+
* @module
|
|
13
|
+
*/
|
|
14
|
+
import {} from 'zod';
|
|
15
|
+
import { z } from 'zod';
|
|
16
|
+
import { GroupedToolBuilder } from './GroupedToolBuilder.js';
|
|
17
|
+
import {} from '../types.js';
|
|
18
|
+
import { success, TOOL_RESPONSE_BRAND } from '../response.js';
|
|
19
|
+
import {} from '../../presenter/Presenter.js';
|
|
20
|
+
import {} from '../execution/ConcurrencyGuard.js';
|
|
21
|
+
import {} from '../../sandbox/SandboxEngine.js';
|
|
22
|
+
import { SANDBOX_SYSTEM_INSTRUCTION } from '../../sandbox/index.js';
|
|
23
|
+
import {} from './SemanticDefaults.js';
|
|
24
|
+
/**
|
|
25
|
+
* Compile FluentToolBuilder state into a GroupedToolBuilder.
|
|
26
|
+
*
|
|
27
|
+
* @param config - Assembled configuration from builder state
|
|
28
|
+
* @returns A `GroupedToolBuilder` ready for registration
|
|
29
|
+
*/
|
|
30
|
+
export function buildToolFromFluent(config) {
|
|
31
|
+
// Build accumulated with* params into ZodObject
|
|
32
|
+
let inputSchema;
|
|
33
|
+
if (Object.keys(config.withParams).length > 0) {
|
|
34
|
+
inputSchema = z.object(config.withParams);
|
|
35
|
+
}
|
|
36
|
+
// Parse name: 'domain.action' → tool='domain', action='action'
|
|
37
|
+
const dotIndex = config.name.indexOf('.');
|
|
38
|
+
// Bug #109 fix: reject multi-dot names early with a clear error.
|
|
39
|
+
if (dotIndex > 0 && config.name.indexOf('.', dotIndex + 1) !== -1) {
|
|
40
|
+
throw new Error(`Tool name '${config.name}' has too many dot-separated segments. ` +
|
|
41
|
+
`Only one dot is allowed (e.g. 'group.action'). Use f.router() for nested prefixes.`);
|
|
42
|
+
}
|
|
43
|
+
const toolName = dotIndex > 0 ? config.name.slice(0, dotIndex) : config.name;
|
|
44
|
+
const actionName = dotIndex > 0 ? config.name.slice(dotIndex + 1) : 'default';
|
|
45
|
+
// Compile description: instructions + description
|
|
46
|
+
const descParts = [];
|
|
47
|
+
if (config.instructions) {
|
|
48
|
+
descParts.push(`[INSTRUCTIONS] ${config.instructions}`);
|
|
49
|
+
}
|
|
50
|
+
if (config.description) {
|
|
51
|
+
descParts.push(config.description);
|
|
52
|
+
}
|
|
53
|
+
// HATEOAS Auto-Prompting: teach the LLM about sandbox capability
|
|
54
|
+
if (config.sandboxConfig) {
|
|
55
|
+
descParts.push(SANDBOX_SYSTEM_INSTRUCTION.trim());
|
|
56
|
+
}
|
|
57
|
+
const compiledDescription = descParts.length > 0 ? descParts.join('\n\n') : undefined;
|
|
58
|
+
// Resolve semantic defaults + overrides
|
|
59
|
+
const readOnly = config.readOnly ?? config.semanticDefaults.readOnly;
|
|
60
|
+
const destructive = config.destructive ?? config.semanticDefaults.destructive;
|
|
61
|
+
const idempotent = config.idempotent ?? config.semanticDefaults.idempotent;
|
|
62
|
+
// Wrap handler: (input, ctx) → (ctx, args)
|
|
63
|
+
const resolvedHandler = config.handler;
|
|
64
|
+
const wrappedHandler = async (ctx, args) => {
|
|
65
|
+
const result = await resolvedHandler(args, ctx);
|
|
66
|
+
// Guard: void/null handlers → safe fallback (Bug #41)
|
|
67
|
+
if (result === undefined || result === null) {
|
|
68
|
+
return success('OK');
|
|
69
|
+
}
|
|
70
|
+
// Auto-wrap non-ToolResponse results (implicit success)
|
|
71
|
+
// Primary: check brand symbol stamped by success()/error()/toolError() helpers.
|
|
72
|
+
// Fallback: shape-based heuristic for manually constructed ToolResponse objects.
|
|
73
|
+
if (typeof result === 'object' && result !== null) {
|
|
74
|
+
// Brand check — reliable, no false positives (Bug #127)
|
|
75
|
+
if (TOOL_RESPONSE_BRAND in result) {
|
|
76
|
+
return result;
|
|
77
|
+
}
|
|
78
|
+
// Shape heuristic — backward compat for manually constructed ToolResponse
|
|
79
|
+
if ('content' in result &&
|
|
80
|
+
Array.isArray(result.content) &&
|
|
81
|
+
result.content.length > 0 &&
|
|
82
|
+
result.content[0]?.type === 'text' &&
|
|
83
|
+
typeof result.content[0]?.text === 'string' &&
|
|
84
|
+
Object.keys(result).every(k => k === 'content' || k === 'isError')) {
|
|
85
|
+
return result;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
// Implicit success() — the dev just returns raw data!
|
|
89
|
+
return success(result);
|
|
90
|
+
};
|
|
91
|
+
// Build via GroupedToolBuilder for consistency with existing pipeline
|
|
92
|
+
const builder = new GroupedToolBuilder(toolName);
|
|
93
|
+
if (compiledDescription)
|
|
94
|
+
builder.description(compiledDescription);
|
|
95
|
+
if (config.tags.length > 0)
|
|
96
|
+
builder.tags(...config.tags);
|
|
97
|
+
if (config.toonMode)
|
|
98
|
+
builder.toonDescription();
|
|
99
|
+
if (config.annotations)
|
|
100
|
+
builder.annotations(config.annotations);
|
|
101
|
+
// Propagate state sync hints
|
|
102
|
+
if (config.invalidatesPatterns.length > 0) {
|
|
103
|
+
builder.invalidates(...config.invalidatesPatterns);
|
|
104
|
+
}
|
|
105
|
+
if (config.cacheControl) {
|
|
106
|
+
config.cacheControl === 'immutable' ? builder.cached() : builder.stale();
|
|
107
|
+
}
|
|
108
|
+
// Propagate runtime guards
|
|
109
|
+
if (config.concurrency) {
|
|
110
|
+
builder.concurrency(config.concurrency);
|
|
111
|
+
}
|
|
112
|
+
if (config.egressMaxBytes !== undefined) {
|
|
113
|
+
builder.maxPayloadBytes(config.egressMaxBytes);
|
|
114
|
+
}
|
|
115
|
+
// Propagate sandbox config
|
|
116
|
+
if (config.sandboxConfig) {
|
|
117
|
+
builder.sandbox(config.sandboxConfig);
|
|
118
|
+
}
|
|
119
|
+
// Propagate FSM state gate
|
|
120
|
+
if (config.fsmStates) {
|
|
121
|
+
builder.bindState(config.fsmStates, config.fsmTransition);
|
|
122
|
+
}
|
|
123
|
+
// Apply middleware
|
|
124
|
+
for (const mw of config.middlewares) {
|
|
125
|
+
builder.use(mw);
|
|
126
|
+
}
|
|
127
|
+
// Register the single action
|
|
128
|
+
builder.action({
|
|
129
|
+
name: actionName,
|
|
130
|
+
handler: wrappedHandler,
|
|
131
|
+
...(inputSchema ? { schema: inputSchema } : {}),
|
|
132
|
+
...(readOnly !== undefined ? { readOnly } : {}),
|
|
133
|
+
...(destructive !== undefined ? { destructive } : {}),
|
|
134
|
+
...(idempotent !== undefined ? { idempotent } : {}),
|
|
135
|
+
...(config.returns ? { returns: config.returns } : {}),
|
|
136
|
+
});
|
|
137
|
+
return builder;
|
|
138
|
+
}
|
|
139
|
+
//# sourceMappingURL=BuildPipeline.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BuildPipeline.js","sourceRoot":"","sources":["../../../src/core/builder/BuildPipeline.ts"],"names":[],"mappings":"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"}
|
|
@@ -26,27 +26,15 @@
|
|
|
26
26
|
* @module
|
|
27
27
|
*/
|
|
28
28
|
import { type ZodType, type ZodObject, type ZodRawShape } from 'zod';
|
|
29
|
+
import { type Model } from '../../model/defineModel.js';
|
|
29
30
|
import { GroupedToolBuilder } from './GroupedToolBuilder.js';
|
|
30
31
|
import { type ToolResponse, type MiddlewareFn } from '../types.js';
|
|
31
32
|
import { type Presenter } from '../../presenter/Presenter.js';
|
|
32
33
|
import { type ConcurrencyConfig } from '../execution/ConcurrencyGuard.js';
|
|
33
34
|
import { type SandboxConfig } from '../../sandbox/SandboxEngine.js';
|
|
34
35
|
import { type MiddlewareDefinition } from '../middleware/ContextDerivation.js';
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
* @internal
|
|
38
|
-
*/
|
|
39
|
-
export interface SemanticDefaults {
|
|
40
|
-
readonly readOnly?: boolean;
|
|
41
|
-
readonly destructive?: boolean;
|
|
42
|
-
readonly idempotent?: boolean;
|
|
43
|
-
}
|
|
44
|
-
/** Defaults for `f.query()` — read-only, no side effects */
|
|
45
|
-
export declare const QUERY_DEFAULTS: SemanticDefaults;
|
|
46
|
-
/** Defaults for `f.mutation()` — destructive, irreversible */
|
|
47
|
-
export declare const MUTATION_DEFAULTS: SemanticDefaults;
|
|
48
|
-
/** Defaults for `f.action()` — neutral, no assumptions */
|
|
49
|
-
export declare const ACTION_DEFAULTS: SemanticDefaults;
|
|
36
|
+
import { type SemanticDefaults } from './SemanticDefaults.js';
|
|
37
|
+
export { type SemanticDefaults, QUERY_DEFAULTS, MUTATION_DEFAULTS, ACTION_DEFAULTS } from './SemanticDefaults.js';
|
|
50
38
|
/**
|
|
51
39
|
* Fluent builder that accumulates types at each step.
|
|
52
40
|
*
|
|
@@ -54,13 +42,14 @@ export declare const ACTION_DEFAULTS: SemanticDefaults;
|
|
|
54
42
|
* @typeParam TInput - Accumulated input type (built by `with*()` methods)
|
|
55
43
|
* @typeParam TCtx - Accumulated context type (enriched by `.use()`)
|
|
56
44
|
*/
|
|
57
|
-
export declare class FluentToolBuilder<TContext, TInput =
|
|
45
|
+
export declare class FluentToolBuilder<TContext, TInput = Record<string, never>, TCtx = TContext> {
|
|
58
46
|
/** @internal */ readonly _name: string;
|
|
59
47
|
/** @internal */ _description?: string;
|
|
60
48
|
/** @internal */ _instructions?: string;
|
|
61
49
|
/** @internal */ _inputSchema?: ZodObject<ZodRawShape>;
|
|
62
50
|
/** @internal */ _withParams: Record<string, ZodType>;
|
|
63
51
|
/** @internal */ _tags: string[];
|
|
52
|
+
/** @internal */ _modelRef?: Model;
|
|
64
53
|
/**
|
|
65
54
|
* @internal Bug #118 fix: reject duplicate parameter names.
|
|
66
55
|
* All `withXxx()` methods delegate to this instead of assigning directly.
|
|
@@ -169,6 +158,108 @@ export declare class FluentToolBuilder<TContext, TInput = void, TCtx = TContext>
|
|
|
169
158
|
* @returns Builder with narrowed `TInput` type
|
|
170
159
|
*/
|
|
171
160
|
withOptionalBoolean<K extends string>(name: K, description?: string): FluentToolBuilder<TContext, TInput & Partial<Record<K, boolean>>, TCtx>;
|
|
161
|
+
/**
|
|
162
|
+
* Add multiple required string parameters in bulk.
|
|
163
|
+
*
|
|
164
|
+
* @param fields - Record of `{ paramName: 'description' }`
|
|
165
|
+
* @returns Builder with narrowed `TInput` type
|
|
166
|
+
*
|
|
167
|
+
* @example
|
|
168
|
+
* ```typescript
|
|
169
|
+
* f.query('tasks.get')
|
|
170
|
+
* .withStrings({
|
|
171
|
+
* company_slug: 'Workspace identifier',
|
|
172
|
+
* project_slug: 'Project identifier',
|
|
173
|
+
* })
|
|
174
|
+
* .handle(async (input) => { ... });
|
|
175
|
+
* // input.company_slug: string ✅
|
|
176
|
+
* // input.project_slug: string ✅
|
|
177
|
+
* ```
|
|
178
|
+
*/
|
|
179
|
+
withStrings<R extends Record<string, string>>(fields: R): FluentToolBuilder<TContext, TInput & {
|
|
180
|
+
[K in keyof R & string]: string;
|
|
181
|
+
}, TCtx>;
|
|
182
|
+
/**
|
|
183
|
+
* Add multiple optional string parameters in bulk.
|
|
184
|
+
*
|
|
185
|
+
* @param fields - Record of `{ paramName: 'description' }`
|
|
186
|
+
* @returns Builder with narrowed `TInput` type
|
|
187
|
+
*
|
|
188
|
+
* @example
|
|
189
|
+
* ```typescript
|
|
190
|
+
* f.query('tasks.filter')
|
|
191
|
+
* .withOptionalStrings({
|
|
192
|
+
* title: 'Filter by title (partial match)',
|
|
193
|
+
* workflow: 'Column name (e.g. "In Progress")',
|
|
194
|
+
* labels: 'Comma-separated label names',
|
|
195
|
+
* })
|
|
196
|
+
* .handle(async (input) => { ... });
|
|
197
|
+
* // input.title?: string | undefined ✅
|
|
198
|
+
* ```
|
|
199
|
+
*/
|
|
200
|
+
withOptionalStrings<R extends Record<string, string>>(fields: R): FluentToolBuilder<TContext, TInput & {
|
|
201
|
+
[K in keyof R & string]?: string | undefined;
|
|
202
|
+
}, TCtx>;
|
|
203
|
+
/**
|
|
204
|
+
* Add multiple required number parameters in bulk.
|
|
205
|
+
*
|
|
206
|
+
* @param fields - Record of `{ paramName: 'description' }`
|
|
207
|
+
* @returns Builder with narrowed `TInput` type
|
|
208
|
+
*/
|
|
209
|
+
withNumbers<R extends Record<string, string>>(fields: R): FluentToolBuilder<TContext, TInput & {
|
|
210
|
+
[K in keyof R & string]: number;
|
|
211
|
+
}, TCtx>;
|
|
212
|
+
/**
|
|
213
|
+
* Add multiple optional number parameters in bulk.
|
|
214
|
+
*
|
|
215
|
+
* @param fields - Record of `{ paramName: 'description' }`
|
|
216
|
+
* @returns Builder with narrowed `TInput` type
|
|
217
|
+
*
|
|
218
|
+
* @example
|
|
219
|
+
* ```typescript
|
|
220
|
+
* f.query('tasks.filter')
|
|
221
|
+
* .withOptionalNumbers({
|
|
222
|
+
* per_page: 'Results per page (default: 50)',
|
|
223
|
+
* offset: 'Pagination offset',
|
|
224
|
+
* })
|
|
225
|
+
* .handle(async (input) => { ... });
|
|
226
|
+
* // input.per_page?: number | undefined ✅
|
|
227
|
+
* ```
|
|
228
|
+
*/
|
|
229
|
+
withOptionalNumbers<R extends Record<string, string>>(fields: R): FluentToolBuilder<TContext, TInput & {
|
|
230
|
+
[K in keyof R & string]?: number | undefined;
|
|
231
|
+
}, TCtx>;
|
|
232
|
+
/**
|
|
233
|
+
* Add multiple required boolean parameters in bulk.
|
|
234
|
+
*
|
|
235
|
+
* @param fields - Record of `{ paramName: 'description' }`
|
|
236
|
+
* @returns Builder with narrowed `TInput` type
|
|
237
|
+
*/
|
|
238
|
+
withBooleans<R extends Record<string, string>>(fields: R): FluentToolBuilder<TContext, TInput & {
|
|
239
|
+
[K in keyof R & string]: boolean;
|
|
240
|
+
}, TCtx>;
|
|
241
|
+
/**
|
|
242
|
+
* Add multiple optional boolean parameters in bulk.
|
|
243
|
+
*
|
|
244
|
+
* @param fields - Record of `{ paramName: 'description' }`
|
|
245
|
+
* @returns Builder with narrowed `TInput` type
|
|
246
|
+
*
|
|
247
|
+
* @example
|
|
248
|
+
* ```typescript
|
|
249
|
+
* f.query('tasks.filter')
|
|
250
|
+
* .withOptionalBooleans({
|
|
251
|
+
* is_blocker: 'Only blockers',
|
|
252
|
+
* is_bug: 'Only bugs',
|
|
253
|
+
* unassigned: 'Only unassigned tasks',
|
|
254
|
+
* is_archived: 'Include archived tasks',
|
|
255
|
+
* })
|
|
256
|
+
* .handle(async (input) => { ... });
|
|
257
|
+
* // input.is_blocker?: boolean | undefined ✅
|
|
258
|
+
* ```
|
|
259
|
+
*/
|
|
260
|
+
withOptionalBooleans<R extends Record<string, string>>(fields: R): FluentToolBuilder<TContext, TInput & {
|
|
261
|
+
[K in keyof R & string]?: boolean | undefined;
|
|
262
|
+
}, TCtx>;
|
|
172
263
|
/**
|
|
173
264
|
* Add a required enum parameter.
|
|
174
265
|
*
|
|
@@ -222,6 +313,114 @@ export declare class FluentToolBuilder<TContext, TInput = void, TCtx = TContext>
|
|
|
222
313
|
* @returns Builder with narrowed `TInput` type
|
|
223
314
|
*/
|
|
224
315
|
withOptionalArray<K extends string, I extends 'string' | 'number' | 'boolean'>(name: K, itemType: I, description?: string): FluentToolBuilder<TContext, TInput & Partial<Record<K, (I extends 'string' ? string : I extends 'number' ? number : boolean)[]>>, TCtx>;
|
|
316
|
+
/**
|
|
317
|
+
* Add multiple required enum parameters in bulk.
|
|
318
|
+
*
|
|
319
|
+
* Each entry is `paramName: [allowedValues, description?]`.
|
|
320
|
+
*
|
|
321
|
+
* @param fields - Record of `{ paramName: [values, description?] }`
|
|
322
|
+
* @returns Builder with narrowed `TInput` type
|
|
323
|
+
*
|
|
324
|
+
* @example
|
|
325
|
+
* ```typescript
|
|
326
|
+
* f.query('tasks.filter')
|
|
327
|
+
* .withEnums({
|
|
328
|
+
* status: [['open', 'closed', 'archived'], 'Task status'],
|
|
329
|
+
* priority: [['low', 'medium', 'high'], 'Priority level'],
|
|
330
|
+
* })
|
|
331
|
+
* .handle(async (input) => { ... });
|
|
332
|
+
* // input.status: 'open' | 'closed' | 'archived' ✅
|
|
333
|
+
* ```
|
|
334
|
+
*/
|
|
335
|
+
withEnums<R extends Record<string, readonly [readonly [string, ...string[]], string?]>>(fields: R): FluentToolBuilder<TContext, TInput & {
|
|
336
|
+
[K in keyof R & string]: R[K][0][number];
|
|
337
|
+
}, TCtx>;
|
|
338
|
+
/**
|
|
339
|
+
* Add multiple optional enum parameters in bulk.
|
|
340
|
+
*
|
|
341
|
+
* Each entry is `paramName: [allowedValues, description?]`.
|
|
342
|
+
*
|
|
343
|
+
* @param fields - Record of `{ paramName: [values, description?] }`
|
|
344
|
+
* @returns Builder with narrowed `TInput` type
|
|
345
|
+
*
|
|
346
|
+
* @example
|
|
347
|
+
* ```typescript
|
|
348
|
+
* f.query('tasks.filter')
|
|
349
|
+
* .withOptionalEnums({
|
|
350
|
+
* status: [['open', 'closed'], 'Filter by status'],
|
|
351
|
+
* priority: [['low', 'medium', 'high'], 'Filter by priority'],
|
|
352
|
+
* })
|
|
353
|
+
* .handle(async (input) => { ... });
|
|
354
|
+
* // input.status?: 'open' | 'closed' | undefined ✅
|
|
355
|
+
* ```
|
|
356
|
+
*/
|
|
357
|
+
withOptionalEnums<R extends Record<string, readonly [readonly [string, ...string[]], string?]>>(fields: R): FluentToolBuilder<TContext, TInput & {
|
|
358
|
+
[K in keyof R & string]?: R[K][0][number] | undefined;
|
|
359
|
+
}, TCtx>;
|
|
360
|
+
/**
|
|
361
|
+
* Add multiple required array parameters in bulk, sharing the same item type.
|
|
362
|
+
*
|
|
363
|
+
* @param itemType - Type of array items (`'string'`, `'number'`, `'boolean'`)
|
|
364
|
+
* @param fields - Record of `{ paramName: 'description' }`
|
|
365
|
+
* @returns Builder with narrowed `TInput` type
|
|
366
|
+
*
|
|
367
|
+
* @example
|
|
368
|
+
* ```typescript
|
|
369
|
+
* f.mutation('tasks.update')
|
|
370
|
+
* .withArrays('string', {
|
|
371
|
+
* tags: 'Tags to apply',
|
|
372
|
+
* labels: 'Category labels',
|
|
373
|
+
* })
|
|
374
|
+
* .handle(async (input) => { ... });
|
|
375
|
+
* // input.tags: string[] ✅
|
|
376
|
+
* // input.labels: string[] ✅
|
|
377
|
+
* ```
|
|
378
|
+
*/
|
|
379
|
+
withArrays<I extends 'string' | 'number' | 'boolean', R extends Record<string, string>>(itemType: I, fields: R): FluentToolBuilder<TContext, TInput & {
|
|
380
|
+
[K in keyof R & string]: (I extends 'string' ? string : I extends 'number' ? number : boolean)[];
|
|
381
|
+
}, TCtx>;
|
|
382
|
+
/**
|
|
383
|
+
* Add multiple optional array parameters in bulk, sharing the same item type.
|
|
384
|
+
*
|
|
385
|
+
* @param itemType - Type of array items (`'string'`, `'number'`, `'boolean'`)
|
|
386
|
+
* @param fields - Record of `{ paramName: 'description' }`
|
|
387
|
+
* @returns Builder with narrowed `TInput` type
|
|
388
|
+
*
|
|
389
|
+
* @example
|
|
390
|
+
* ```typescript
|
|
391
|
+
* f.query('tasks.filter')
|
|
392
|
+
* .withOptionalArrays('string', {
|
|
393
|
+
* tags: 'Filter by tags',
|
|
394
|
+
* labels: 'Filter by labels',
|
|
395
|
+
* })
|
|
396
|
+
* .handle(async (input) => { ... });
|
|
397
|
+
* // input.tags?: string[] | undefined ✅
|
|
398
|
+
* ```
|
|
399
|
+
*/
|
|
400
|
+
withOptionalArrays<I extends 'string' | 'number' | 'boolean', R extends Record<string, string>>(itemType: I, fields: R): FluentToolBuilder<TContext, TInput & {
|
|
401
|
+
[K in keyof R & string]?: (I extends 'string' ? string : I extends 'number' ? number : boolean)[] | undefined;
|
|
402
|
+
}, TCtx>;
|
|
403
|
+
/**
|
|
404
|
+
* Derive tool input parameters from a Model's fillable profile.
|
|
405
|
+
*
|
|
406
|
+
* Reads the specified operation from `model.input` (fillable profiles),
|
|
407
|
+
* then adds each field as a parameter using the type and description from
|
|
408
|
+
* the Model's casts. For `create`, fields respect their schema optionality.
|
|
409
|
+
* For `update` and `filter`, all fields become optional.
|
|
410
|
+
*
|
|
411
|
+
* @param model - A `Model` from `defineModel()`
|
|
412
|
+
* @param operation - The fillable profile name (e.g. `'create'`, `'update'`, `'filter'`)
|
|
413
|
+
* @returns Builder with additional parameters from the Model
|
|
414
|
+
*
|
|
415
|
+
* @example
|
|
416
|
+
* ```typescript
|
|
417
|
+
* f.mutation('task.create')
|
|
418
|
+
* .fromModel(TaskModel, 'create')
|
|
419
|
+
* .withStrings({ company_slug: '...', project_slug: '...' })
|
|
420
|
+
* .handle(async (input, ctx) => { ... });
|
|
421
|
+
* ```
|
|
422
|
+
*/
|
|
423
|
+
fromModel<M extends Model>(model: M, operation: string): FluentToolBuilder<TContext, TInput & Record<string, any>, TCtx>;
|
|
225
424
|
/**
|
|
226
425
|
* Add context-derivation middleware (tRPC-style).
|
|
227
426
|
*
|
|
@@ -267,7 +466,7 @@ export declare class FluentToolBuilder<TContext, TInput = void, TCtx = TContext>
|
|
|
267
466
|
* @param presenter - A Presenter instance
|
|
268
467
|
* @returns `this` for chaining
|
|
269
468
|
*/
|
|
270
|
-
returns(presenter: Presenter<
|
|
469
|
+
returns(presenter: Presenter<any>): FluentToolBuilder<TContext, TInput, TCtx>;
|
|
271
470
|
/**
|
|
272
471
|
* Add capability tags for selective tool exposure.
|
|
273
472
|
*
|
|
@@ -404,13 +603,48 @@ export declare class FluentToolBuilder<TContext, TInput = void, TCtx = TContext>
|
|
|
404
603
|
* });
|
|
405
604
|
* ```
|
|
406
605
|
*/
|
|
407
|
-
handle(handler: (input: TInput extends
|
|
606
|
+
handle(handler: (input: [TInput] extends [Record<string, never>] ? Record<string, any> : TInput, ctx: TCtx) => Promise<ToolResponse | unknown>): GroupedToolBuilder<TContext>;
|
|
607
|
+
/**
|
|
608
|
+
* Auto-generate a handler that proxies to `ctx.client` HTTP methods.
|
|
609
|
+
*
|
|
610
|
+
* Eliminates boilerplate by deriving the HTTP method from the semantic
|
|
611
|
+
* verb (`query` → GET, `mutation` → POST) and passing model input
|
|
612
|
+
* directly as query params or request body.
|
|
613
|
+
*
|
|
614
|
+
* For tools with non-trivial logic (data transformation, multi-step
|
|
615
|
+
* calls, conditional behavior), use `.handle()` instead.
|
|
616
|
+
*
|
|
617
|
+
* @param endpoint - API path (e.g. `'companies/standup/summary'`)
|
|
618
|
+
* @param options - Optional overrides
|
|
619
|
+
* @param options.method - Force HTTP method (`'GET'`, `'POST'`, `'PUT'`, `'DELETE'`)
|
|
620
|
+
* @param options.unwrap - Auto-unwrap `response.data` (default: `true`)
|
|
621
|
+
* @returns A `GroupedToolBuilder` ready for registration
|
|
622
|
+
*
|
|
623
|
+
* @example
|
|
624
|
+
* ```typescript
|
|
625
|
+
* const pulse = analytics.query('pulse')
|
|
626
|
+
* .fromModel(AnalyticsModel, 'query')
|
|
627
|
+
* .proxy('companies/manager-dashboard/pulse');
|
|
628
|
+
*
|
|
629
|
+
* const create = note.mutation('create')
|
|
630
|
+
* .fromModel(NoteModel, 'create')
|
|
631
|
+
* .proxy('notes');
|
|
632
|
+
*
|
|
633
|
+
* const update = note.mutation('update')
|
|
634
|
+
* .fromModel(NoteModel, 'update')
|
|
635
|
+
* .proxy('notes/:uuid', { method: 'PUT' });
|
|
636
|
+
* ```
|
|
637
|
+
*/
|
|
638
|
+
proxy(endpoint: string, options?: {
|
|
639
|
+
method?: 'GET' | 'POST' | 'PUT' | 'DELETE';
|
|
640
|
+
unwrap?: boolean;
|
|
641
|
+
}): GroupedToolBuilder<TContext>;
|
|
408
642
|
/**
|
|
409
643
|
* Alias for `.handle()` — for backward compatibility.
|
|
410
644
|
* @internal
|
|
411
645
|
*/
|
|
412
646
|
resolve(handler: (args: {
|
|
413
|
-
input: TInput extends
|
|
647
|
+
input: [TInput] extends [Record<string, never>] ? Record<string, any> : TInput;
|
|
414
648
|
ctx: TCtx;
|
|
415
649
|
}) => Promise<ToolResponse | unknown>): GroupedToolBuilder<TContext>;
|
|
416
650
|
/** @internal */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FluentToolBuilder.d.ts","sourceRoot":"","sources":["../../../src/core/builder/FluentToolBuilder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,OAAO,EAAK,KAAK,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,WAAW,EAAE,MAAM,KAAK,CAAC;AACxE,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"FluentToolBuilder.d.ts","sourceRoot":"","sources":["../../../src/core/builder/FluentToolBuilder.ts"],"names":[],"mappings":"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"}
|