veryfront 0.1.62 → 0.1.64
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/esm/cli/templates/manifest.js +37 -37
- package/esm/deno.d.ts +3 -0
- package/esm/deno.js +6 -3
- package/esm/src/agent/composition/composition.d.ts.map +1 -1
- package/esm/src/agent/composition/composition.js +13 -3
- package/esm/src/agent/factory.d.ts.map +1 -1
- package/esm/src/agent/factory.js +3 -3
- package/esm/src/agent/middleware/security/validator.d.ts +92 -0
- package/esm/src/agent/middleware/security/validator.d.ts.map +1 -0
- package/esm/src/agent/middleware/security/validator.js +187 -0
- package/esm/src/agent/runtime/index.d.ts +3 -2
- package/esm/src/agent/runtime/index.d.ts.map +1 -1
- package/esm/src/agent/runtime/index.js +16 -8
- package/esm/src/agent/types.d.ts +4 -0
- package/esm/src/agent/types.d.ts.map +1 -1
- package/esm/src/channels/invoke.d.ts +491 -0
- package/esm/src/channels/invoke.d.ts.map +1 -0
- package/esm/src/channels/invoke.js +417 -0
- package/esm/src/embedding/embedding.js +2 -2
- package/esm/src/integrations/endpoint-executor.d.ts +1 -0
- package/esm/src/integrations/endpoint-executor.d.ts.map +1 -1
- package/esm/src/integrations/endpoint-executor.js +44 -0
- package/esm/src/integrations/schema.d.ts +2 -2
- package/esm/src/oauth/handlers/init-handler.d.ts +6 -2
- package/esm/src/oauth/handlers/init-handler.d.ts.map +1 -1
- package/esm/src/oauth/handlers/init-handler.js +8 -2
- package/esm/src/platform/compat/opaque-deps.d.ts.map +1 -1
- package/esm/src/platform/compat/opaque-deps.js +10 -1
- package/esm/src/prompt/factory.d.ts.map +1 -1
- package/esm/src/prompt/factory.js +9 -1
- package/esm/src/react/components/ai/markdown.d.ts.map +1 -1
- package/esm/src/react/components/ai/markdown.js +4 -4
- package/esm/src/server/handlers/dev/framework-candidates.generated.d.ts.map +1 -1
- package/esm/src/server/handlers/dev/framework-candidates.generated.js +5 -4
- package/esm/src/server/handlers/preview/markdown-html-generator.js +1 -1
- package/esm/src/server/handlers/request/api/api-handler-wrapper.d.ts.map +1 -1
- package/esm/src/server/handlers/request/api/api-handler-wrapper.js +1 -74
- package/esm/src/server/handlers/request/api/project-discovery.d.ts +9 -0
- package/esm/src/server/handlers/request/api/project-discovery.d.ts.map +1 -0
- package/esm/src/server/handlers/request/api/project-discovery.js +74 -0
- package/esm/src/server/handlers/request/channel-assistants.handler.d.ts +11 -0
- package/esm/src/server/handlers/request/channel-assistants.handler.d.ts.map +1 -0
- package/esm/src/server/handlers/request/channel-assistants.handler.js +71 -0
- package/esm/src/server/handlers/request/channel-invoke.handler.d.ts +11 -0
- package/esm/src/server/handlers/request/channel-invoke.handler.d.ts.map +1 -0
- package/esm/src/server/handlers/request/channel-invoke.handler.js +72 -0
- package/esm/src/server/runtime-handler/index.d.ts.map +1 -1
- package/esm/src/server/runtime-handler/index.js +4 -0
- package/esm/src/transforms/md/compiler/md-compiler.d.ts.map +1 -1
- package/esm/src/transforms/md/compiler/md-compiler.js +25 -1
- package/package.json +3 -1
- package/src/cli/templates/manifest.js +37 -37
- package/src/deno.js +6 -3
- package/src/src/agent/composition/composition.ts +15 -3
- package/src/src/agent/factory.ts +19 -6
- package/src/src/agent/middleware/security/validator.ts +288 -0
- package/src/src/agent/runtime/index.ts +26 -3
- package/src/src/agent/types.ts +4 -0
- package/src/src/channels/invoke.ts +546 -0
- package/src/src/embedding/embedding.ts +2 -2
- package/src/src/integrations/endpoint-executor.ts +51 -0
- package/src/src/oauth/handlers/init-handler.ts +20 -5
- package/src/src/platform/compat/opaque-deps.ts +19 -4
- package/src/src/prompt/factory.ts +10 -1
- package/src/src/react/components/ai/markdown.tsx +5 -4
- package/src/src/server/handlers/dev/framework-candidates.generated.ts +5 -4
- package/src/src/server/handlers/preview/markdown-html-generator.ts +1 -1
- package/src/src/server/handlers/request/api/api-handler-wrapper.ts +1 -85
- package/src/src/server/handlers/request/api/project-discovery.ts +86 -0
- package/src/src/server/handlers/request/channel-assistants.handler.ts +94 -0
- package/src/src/server/handlers/request/channel-invoke.handler.ts +95 -0
- package/src/src/server/runtime-handler/index.ts +4 -0
- package/src/src/transforms/md/compiler/md-compiler.ts +27 -1
package/esm/deno.d.ts
CHANGED
|
@@ -215,6 +215,8 @@ declare namespace _default {
|
|
|
215
215
|
"rehype-highlight": string;
|
|
216
216
|
"rehype-starry-night": string;
|
|
217
217
|
"rehype-slug": string;
|
|
218
|
+
"rehype-raw": string;
|
|
219
|
+
"rehype-sanitize": string;
|
|
218
220
|
"rehype-stringify": string;
|
|
219
221
|
esbuild: string;
|
|
220
222
|
"esbuild/mod.js": string;
|
|
@@ -254,6 +256,7 @@ declare namespace _default {
|
|
|
254
256
|
clsx: string;
|
|
255
257
|
"tailwind-merge": string;
|
|
256
258
|
"@kreuzberg/wasm": string;
|
|
259
|
+
"#kreuzberg-wasm-glue": string;
|
|
257
260
|
};
|
|
258
261
|
namespace compilerOptions {
|
|
259
262
|
let jsx: string;
|
package/esm/deno.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export default {
|
|
2
2
|
"name": "veryfront",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.64",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"nodeModulesDir": "auto",
|
|
6
6
|
"exclude": [
|
|
@@ -225,6 +225,8 @@ export default {
|
|
|
225
225
|
"rehype-highlight": "npm:rehype-highlight@7.0.2",
|
|
226
226
|
"rehype-starry-night": "npm:rehype-starry-night@2.2.0",
|
|
227
227
|
"rehype-slug": "npm:rehype-slug@6.0.0",
|
|
228
|
+
"rehype-raw": "npm:rehype-raw@7.0.0",
|
|
229
|
+
"rehype-sanitize": "npm:rehype-sanitize@6.0.0",
|
|
228
230
|
"rehype-stringify": "npm:rehype-stringify@10.0.1",
|
|
229
231
|
"esbuild": "npm:esbuild@0.20.2",
|
|
230
232
|
"esbuild/mod.js": "npm:esbuild@0.20.2",
|
|
@@ -263,7 +265,8 @@ export default {
|
|
|
263
265
|
"class-variance-authority": "npm:class-variance-authority@0.7.1",
|
|
264
266
|
"clsx": "npm:clsx@2.1.1",
|
|
265
267
|
"tailwind-merge": "npm:tailwind-merge@2.6.0",
|
|
266
|
-
"@kreuzberg/wasm": "npm:@kreuzberg/wasm@4.4.2"
|
|
268
|
+
"@kreuzberg/wasm": "npm:@kreuzberg/wasm@4.4.2",
|
|
269
|
+
"#kreuzberg-wasm-glue": "npm:@kreuzberg/wasm@4.4.2/dist/pkg/kreuzberg_wasm.js"
|
|
267
270
|
},
|
|
268
271
|
"compilerOptions": {
|
|
269
272
|
"jsx": "react-jsx",
|
|
@@ -291,7 +294,7 @@ export default {
|
|
|
291
294
|
"dev": "deno task generate && deno run --allow-all cli/main.ts dev",
|
|
292
295
|
"production": "deno task generate && deno run --allow-all cli/main.ts serve --mode=production",
|
|
293
296
|
"build:prepare": "deno run -A scripts/build/generate-integrations-module.ts && deno task generate && deno run -A scripts/build/prepare-framework-sources.ts",
|
|
294
|
-
"build": "deno task build:prepare && deno
|
|
297
|
+
"build": "deno task build:prepare && deno run -A scripts/build/compile-binary.ts --output ./bin/veryfront",
|
|
295
298
|
"build:npm": "deno run -A scripts/build/generate-integrations-module.ts && deno task generate && deno run -A scripts/build/build-npm-dnt.ts",
|
|
296
299
|
"release": "deno run -A scripts/release.ts",
|
|
297
300
|
"test": "deno task generate && VF_DISABLE_LRU_INTERVAL=1 SSR_TRANSFORM_PER_PROJECT_LIMIT=0 REVALIDATION_PER_PROJECT_LIMIT=0 NODE_ENV=production LOG_FORMAT=text deno test --no-check --parallel --allow-all '--ignore=tests/e2e,tests/integration/compiled-binary-e2e.test.ts' --unstable-worker-options --unstable-net",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"composition.d.ts","sourceRoot":"","sources":["../../../../src/src/agent/composition/composition.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAGhD,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAGnE,wBAAgB,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,CA2BnE;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,KAAK,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACzD,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACzE;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC1C;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,KAAK,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,OAAO,CAAC;KAClB,CAAC,CAAC;IACH,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAED,wBAAgB,cAAc,CAC5B,MAAM,EAAE,cAAc,GACrB;IAAE,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAAA;CAAE,CAsDrD;AAID,cAAM,kBAAmB,SAAQ,oBAAoB,CAAC,KAAK,CAAC;CAAG;AAG/D,eAAO,MAAM,aAAa,oBAAuC,CAAC;AAElE,OAAO,EAAE,kBAAkB,EAAE,CAAC;AAE9B,wBAAgB,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI,CAE5D;AAED,wBAAgB,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,KAAK,GAAG,SAAS,CAEtD;AAED,wBAAgB,cAAc,IAAI,MAAM,EAAE,CAEzC;
|
|
1
|
+
{"version":3,"file":"composition.d.ts","sourceRoot":"","sources":["../../../../src/src/agent/composition/composition.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAGhD,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAGnE,wBAAgB,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,CA2BnE;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,KAAK,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACzD,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACzE;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC1C;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,KAAK,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,OAAO,CAAC;KAClB,CAAC,CAAC;IACH,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAED,wBAAgB,cAAc,CAC5B,MAAM,EAAE,cAAc,GACrB;IAAE,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAAA;CAAE,CAsDrD;AAID,cAAM,kBAAmB,SAAQ,oBAAoB,CAAC,KAAK,CAAC;CAAG;AAG/D,eAAO,MAAM,aAAa,oBAAuC,CAAC;AAElE,OAAO,EAAE,kBAAkB,EAAE,CAAC;AAE9B,wBAAgB,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI,CAE5D;AAED,wBAAgB,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,KAAK,GAAG,SAAS,CAEtD;AAED,wBAAgB,cAAc,IAAI,MAAM,EAAE,CAEzC;AAqBD,wBAAgB,gBAAgB,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAQ5F"}
|
|
@@ -91,9 +91,19 @@ export function getAllAgentIds() {
|
|
|
91
91
|
// Register on globalThis so compiled-binary runtime shim can delegate to the
|
|
92
92
|
// real registry. External temp-file modules can't import from the embedded
|
|
93
93
|
// binary FS, so they use globalThis bridges instead.
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
94
|
+
// Use Object.defineProperty to prevent accidental overwriting or enumeration.
|
|
95
|
+
for (const [key, value] of Object.entries({
|
|
96
|
+
__vfGetAgent: getAgent,
|
|
97
|
+
__vfRegisterAgent: registerAgent,
|
|
98
|
+
__vfGetAllAgentIds: getAllAgentIds,
|
|
99
|
+
})) {
|
|
100
|
+
Object.defineProperty(dntShim.dntGlobalThis, key, {
|
|
101
|
+
value,
|
|
102
|
+
writable: false,
|
|
103
|
+
enumerable: false,
|
|
104
|
+
configurable: false,
|
|
105
|
+
});
|
|
106
|
+
}
|
|
97
107
|
export function getAgentsAsTools(descriptions) {
|
|
98
108
|
const tools = {};
|
|
99
109
|
for (const [id, agent] of agentRegistry.getAll()) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../../src/src/agent/factory.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,KAAK,EACL,WAAW,EAKZ,MAAM,YAAY,CAAC;AA8CpB,wBAAgB,KAAK,CAAC,MAAM,EAAE,WAAW,GAAG,KAAK,
|
|
1
|
+
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../../src/src/agent/factory.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,KAAK,EACL,WAAW,EAKZ,MAAM,YAAY,CAAC;AA8CpB,wBAAgB,KAAK,CAAC,MAAM,EAAE,WAAW,GAAG,KAAK,CAyMhD"}
|
package/esm/src/agent/factory.js
CHANGED
|
@@ -118,7 +118,7 @@ export function agent(config) {
|
|
|
118
118
|
tools: mergedToolsConfig,
|
|
119
119
|
},
|
|
120
120
|
generate(input) {
|
|
121
|
-
return withSpan("agent.factory.generate", () => runtime.generate(input.input, input.context, input.model), { "agent.id": id });
|
|
121
|
+
return withSpan("agent.factory.generate", () => runtime.generate(input.input, input.context, input.model, input.maxOutputTokens), { "agent.id": id });
|
|
122
122
|
},
|
|
123
123
|
stream(input) {
|
|
124
124
|
return withSpan("agent.factory.stream", async () => {
|
|
@@ -134,7 +134,7 @@ export function agent(config) {
|
|
|
134
134
|
const stream = await runtime.stream(inputMessages, input.context, {
|
|
135
135
|
onToolCall: input.onToolCall,
|
|
136
136
|
onChunk: input.onChunk,
|
|
137
|
-
}, input.model);
|
|
137
|
+
}, input.model, input.maxOutputTokens);
|
|
138
138
|
return createAgentStreamResult(stream);
|
|
139
139
|
}, { "agent.id": id, "agent.input_type": input.input ? "string" : "messages" });
|
|
140
140
|
},
|
|
@@ -151,7 +151,7 @@ export function agent(config) {
|
|
|
151
151
|
}
|
|
152
152
|
}
|
|
153
153
|
const messages = body.messages ?? [];
|
|
154
|
-
const stream = await runtime.stream(messages, body.context, undefined, modelOverride);
|
|
154
|
+
const stream = await runtime.stream(messages, body.context, undefined, modelOverride, body.maxOutputTokens);
|
|
155
155
|
return new dntShim.Response(stream, { headers: STREAMING_HEADERS });
|
|
156
156
|
}, { "agent.id": id });
|
|
157
157
|
},
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import type { AgentContext, AgentResponse } from "../../types.js";
|
|
2
|
+
export interface SecurityConfig {
|
|
3
|
+
/** Input validation rules */
|
|
4
|
+
input?: {
|
|
5
|
+
/** Maximum input length */
|
|
6
|
+
maxLength?: number;
|
|
7
|
+
/** Blocked patterns (regex) */
|
|
8
|
+
blockedPatterns?: RegExp[];
|
|
9
|
+
/** Sanitize input */
|
|
10
|
+
sanitize?: boolean;
|
|
11
|
+
/** Custom validator */
|
|
12
|
+
validate?: (input: string) => boolean | Promise<boolean>;
|
|
13
|
+
};
|
|
14
|
+
/** Output filtering rules */
|
|
15
|
+
output?: {
|
|
16
|
+
/** Blocked patterns in output */
|
|
17
|
+
blockedPatterns?: RegExp[];
|
|
18
|
+
/** Filter PII (Personal Identifiable Information) */
|
|
19
|
+
filterPII?: boolean;
|
|
20
|
+
/** Custom filter */
|
|
21
|
+
filter?: (output: string) => string | Promise<string>;
|
|
22
|
+
};
|
|
23
|
+
/** Action when violation detected */
|
|
24
|
+
onViolation?: (violation: SecurityViolation) => void;
|
|
25
|
+
}
|
|
26
|
+
export interface SecurityViolation {
|
|
27
|
+
/** Violation type */
|
|
28
|
+
type: "input" | "output";
|
|
29
|
+
/** Violation reason */
|
|
30
|
+
reason: string;
|
|
31
|
+
/** Original content */
|
|
32
|
+
content: string;
|
|
33
|
+
/** Matched pattern (if any) */
|
|
34
|
+
pattern?: RegExp;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Common blocked patterns
|
|
38
|
+
*/
|
|
39
|
+
export declare const COMMON_BLOCKED_PATTERNS: {
|
|
40
|
+
/** Prompt injection attempts */
|
|
41
|
+
promptInjection: RegExp[];
|
|
42
|
+
/** Potential data exfiltration */
|
|
43
|
+
dataExfiltration: RegExp[];
|
|
44
|
+
/** SQL injection patterns */
|
|
45
|
+
sqlInjection: RegExp[];
|
|
46
|
+
/** XSS patterns */
|
|
47
|
+
xss: RegExp[];
|
|
48
|
+
};
|
|
49
|
+
/**
|
|
50
|
+
* Input Validator
|
|
51
|
+
*/
|
|
52
|
+
export declare class InputValidator {
|
|
53
|
+
private config;
|
|
54
|
+
constructor(config?: SecurityConfig["input"]);
|
|
55
|
+
/**
|
|
56
|
+
* Validate input
|
|
57
|
+
*/
|
|
58
|
+
validate(input: string): Promise<{
|
|
59
|
+
valid: boolean;
|
|
60
|
+
sanitized?: string;
|
|
61
|
+
violations: SecurityViolation[];
|
|
62
|
+
}>;
|
|
63
|
+
/** Sanitization patterns to remove harmful content */
|
|
64
|
+
private static readonly SANITIZE_PATTERNS;
|
|
65
|
+
/**
|
|
66
|
+
* Sanitize input (remove potentially harmful content)
|
|
67
|
+
*/
|
|
68
|
+
private sanitizeInput;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Output Filter
|
|
72
|
+
*/
|
|
73
|
+
export declare class OutputFilter {
|
|
74
|
+
private config;
|
|
75
|
+
constructor(config?: SecurityConfig["output"]);
|
|
76
|
+
/**
|
|
77
|
+
* Filter output
|
|
78
|
+
*/
|
|
79
|
+
filter(output: string): Promise<{
|
|
80
|
+
filtered: string;
|
|
81
|
+
violations: SecurityViolation[];
|
|
82
|
+
}>;
|
|
83
|
+
/**
|
|
84
|
+
* Filter PII from output
|
|
85
|
+
*/
|
|
86
|
+
private filterPII;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Create security middleware for agents
|
|
90
|
+
*/
|
|
91
|
+
export declare function securityMiddleware(config: SecurityConfig): (context: AgentContext, next: () => Promise<AgentResponse>) => Promise<AgentResponse>;
|
|
92
|
+
//# sourceMappingURL=validator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validator.d.ts","sourceRoot":"","sources":["../../../../../src/src/agent/middleware/security/validator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAGlE,MAAM,WAAW,cAAc;IAC7B,6BAA6B;IAC7B,KAAK,CAAC,EAAE;QACN,2BAA2B;QAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;QAEnB,+BAA+B;QAC/B,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;QAE3B,qBAAqB;QACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;QAEnB,uBAAuB;QACvB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;KAC1D,CAAC;IAEF,6BAA6B;IAC7B,MAAM,CAAC,EAAE;QACP,iCAAiC;QACjC,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;QAE3B,qDAAqD;QACrD,SAAS,CAAC,EAAE,OAAO,CAAC;QAEpB,oBAAoB;QACpB,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;KACvD,CAAC;IAEF,qCAAqC;IACrC,WAAW,CAAC,EAAE,CAAC,SAAS,EAAE,iBAAiB,KAAK,IAAI,CAAC;CACtD;AAED,MAAM,WAAW,iBAAiB;IAChC,qBAAqB;IACrB,IAAI,EAAE,OAAO,GAAG,QAAQ,CAAC;IAEzB,uBAAuB;IACvB,MAAM,EAAE,MAAM,CAAC;IAEf,uBAAuB;IACvB,OAAO,EAAE,MAAM,CAAC;IAEhB,+BAA+B;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,eAAO,MAAM,uBAAuB;IAClC,gCAAgC;;IAWhC,kCAAkC;;IASlC,6BAA6B;;IAM7B,mBAAmB;;CAMpB,CAAC;AAeF;;GAEG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAAuC;gBAEzC,MAAM,CAAC,EAAE,cAAc,CAAC,OAAO,CAAC;IAI5C;;OAEG;IACG,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;QACrC,KAAK,EAAE,OAAO,CAAC;QACf,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,UAAU,EAAE,iBAAiB,EAAE,CAAC;KACjC,CAAC;IA4CF,sDAAsD;IACtD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAIvC;IAEF;;OAEG;IACH,OAAO,CAAC,aAAa;CAMtB;AAED;;GAEG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAAwC;gBAE1C,MAAM,CAAC,EAAE,cAAc,CAAC,QAAQ,CAAC;IAI7C;;OAEG;IACG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;QACpC,QAAQ,EAAE,MAAM,CAAC;QACjB,UAAU,EAAE,iBAAiB,EAAE,CAAC;KACjC,CAAC;IA6BF;;OAEG;IACH,OAAO,CAAC,SAAS;CAMlB;AAaD;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,cAAc,GACrB,CAAC,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC,aAAa,CAAC,KAAK,OAAO,CAAC,aAAa,CAAC,CAoCvF"}
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
import { createError, toError } from "../../../errors/veryfront-error.js";
|
|
2
|
+
/**
|
|
3
|
+
* Common blocked patterns
|
|
4
|
+
*/
|
|
5
|
+
export const COMMON_BLOCKED_PATTERNS = {
|
|
6
|
+
/** Prompt injection attempts */
|
|
7
|
+
promptInjection: [
|
|
8
|
+
/ignore\s+previous\s+instructions/i,
|
|
9
|
+
/ignore\s+all\s+previous\s+prompts/i,
|
|
10
|
+
/you\s+are\s+now\s+a/i,
|
|
11
|
+
/pretend\s+you\s+are/i,
|
|
12
|
+
/system:\s*/i,
|
|
13
|
+
/<\|im_start\|>/i,
|
|
14
|
+
/<\|im_end\|>/i,
|
|
15
|
+
],
|
|
16
|
+
/** Potential data exfiltration */
|
|
17
|
+
dataExfiltration: [
|
|
18
|
+
/password/i,
|
|
19
|
+
/api[_\s-]?key/i,
|
|
20
|
+
/secret/i,
|
|
21
|
+
/token/i,
|
|
22
|
+
/credit\s+card/i,
|
|
23
|
+
],
|
|
24
|
+
/** SQL injection patterns */
|
|
25
|
+
sqlInjection: [
|
|
26
|
+
/(\bUNION\b|\bSELECT\b).*\bFROM\b/i,
|
|
27
|
+
/;\s*(DROP|DELETE|UPDATE|INSERT)/i,
|
|
28
|
+
],
|
|
29
|
+
/** XSS patterns */
|
|
30
|
+
xss: [
|
|
31
|
+
/<script[^>]*>.*?<\/script>/gi,
|
|
32
|
+
/javascript:/i,
|
|
33
|
+
/on\w+\s*=/i, // Event handlers
|
|
34
|
+
],
|
|
35
|
+
};
|
|
36
|
+
/**
|
|
37
|
+
* PII patterns with replacement labels
|
|
38
|
+
*/
|
|
39
|
+
const PII_REPLACEMENTS = [
|
|
40
|
+
{ pattern: /\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}\b/gi, label: "[EMAIL]" },
|
|
41
|
+
{
|
|
42
|
+
pattern: /\b(\+\d{1,3}[-.\s]?)?\(?\d{3}\)?[-.\s]?\d{3}[-.\s]?\d{4}\b/g,
|
|
43
|
+
label: "[PHONE]",
|
|
44
|
+
},
|
|
45
|
+
{ pattern: /\b\d{3}-\d{2}-\d{4}\b/g, label: "[SSN]" },
|
|
46
|
+
{ pattern: /\b\d{4}[-\s]?\d{4}[-\s]?\d{4}[-\s]?\d{4}\b/g, label: "[CREDIT_CARD]" },
|
|
47
|
+
];
|
|
48
|
+
/**
|
|
49
|
+
* Input Validator
|
|
50
|
+
*/
|
|
51
|
+
export class InputValidator {
|
|
52
|
+
config;
|
|
53
|
+
constructor(config) {
|
|
54
|
+
this.config = config ?? {};
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Validate input
|
|
58
|
+
*/
|
|
59
|
+
async validate(input) {
|
|
60
|
+
const violations = [];
|
|
61
|
+
const maxLength = this.config.maxLength;
|
|
62
|
+
if (maxLength != null && input.length > maxLength) {
|
|
63
|
+
violations.push({
|
|
64
|
+
type: "input",
|
|
65
|
+
reason: `Input exceeds maximum length of ${maxLength}`,
|
|
66
|
+
content: `${input.substring(0, 100)}...`,
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
for (const pattern of this.config.blockedPatterns ?? []) {
|
|
70
|
+
if (!pattern.test(input))
|
|
71
|
+
continue;
|
|
72
|
+
violations.push({
|
|
73
|
+
type: "input",
|
|
74
|
+
reason: "Input matches blocked pattern",
|
|
75
|
+
content: input,
|
|
76
|
+
pattern,
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
const customValidate = this.config.validate;
|
|
80
|
+
if (customValidate) {
|
|
81
|
+
const customValid = await customValidate(input);
|
|
82
|
+
if (!customValid) {
|
|
83
|
+
violations.push({
|
|
84
|
+
type: "input",
|
|
85
|
+
reason: "Custom validation failed",
|
|
86
|
+
content: input,
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
const sanitized = this.config.sanitize ? this.sanitizeInput(input) : undefined;
|
|
91
|
+
return {
|
|
92
|
+
valid: violations.length === 0,
|
|
93
|
+
sanitized,
|
|
94
|
+
violations,
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
/** Sanitization patterns to remove harmful content */
|
|
98
|
+
static SANITIZE_PATTERNS = [
|
|
99
|
+
/<script[^>]*>.*?<\/script>/gi, // Script tags
|
|
100
|
+
/on\w+\s*=\s*["'][^"']*["']/gi, // Event handlers
|
|
101
|
+
/javascript:/gi, // JavaScript protocol
|
|
102
|
+
];
|
|
103
|
+
/**
|
|
104
|
+
* Sanitize input (remove potentially harmful content)
|
|
105
|
+
*/
|
|
106
|
+
sanitizeInput(input) {
|
|
107
|
+
return InputValidator.SANITIZE_PATTERNS.reduce((text, pattern) => text.replace(pattern, ""), input);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Output Filter
|
|
112
|
+
*/
|
|
113
|
+
export class OutputFilter {
|
|
114
|
+
config;
|
|
115
|
+
constructor(config) {
|
|
116
|
+
this.config = config ?? {};
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Filter output
|
|
120
|
+
*/
|
|
121
|
+
async filter(output) {
|
|
122
|
+
const violations = [];
|
|
123
|
+
let filtered = output;
|
|
124
|
+
for (const pattern of this.config.blockedPatterns ?? []) {
|
|
125
|
+
if (!pattern.test(filtered))
|
|
126
|
+
continue;
|
|
127
|
+
violations.push({
|
|
128
|
+
type: "output",
|
|
129
|
+
reason: "Output contains blocked pattern",
|
|
130
|
+
content: filtered,
|
|
131
|
+
pattern,
|
|
132
|
+
});
|
|
133
|
+
filtered = filtered.replace(pattern, "[REDACTED]");
|
|
134
|
+
}
|
|
135
|
+
if (this.config.filterPII) {
|
|
136
|
+
filtered = this.filterPII(filtered);
|
|
137
|
+
}
|
|
138
|
+
const customFilter = this.config.filter;
|
|
139
|
+
if (customFilter) {
|
|
140
|
+
filtered = await customFilter(filtered);
|
|
141
|
+
}
|
|
142
|
+
return { filtered, violations };
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Filter PII from output
|
|
146
|
+
*/
|
|
147
|
+
filterPII(output) {
|
|
148
|
+
return PII_REPLACEMENTS.reduce((text, { pattern, label }) => text.replace(pattern, label), output);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Report violations to the configured handler
|
|
153
|
+
*/
|
|
154
|
+
function reportViolations(violations, onViolation) {
|
|
155
|
+
if (!onViolation)
|
|
156
|
+
return;
|
|
157
|
+
for (const violation of violations)
|
|
158
|
+
onViolation(violation);
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Create security middleware for agents
|
|
162
|
+
*/
|
|
163
|
+
export function securityMiddleware(config) {
|
|
164
|
+
const inputValidator = new InputValidator(config.input);
|
|
165
|
+
const outputFilter = new OutputFilter(config.output);
|
|
166
|
+
return async (context, next) => {
|
|
167
|
+
const inputString = typeof context.input === "string"
|
|
168
|
+
? context.input
|
|
169
|
+
: JSON.stringify(context.input);
|
|
170
|
+
const inputValidation = await inputValidator.validate(inputString);
|
|
171
|
+
if (!inputValidation.valid) {
|
|
172
|
+
reportViolations(inputValidation.violations, config.onViolation);
|
|
173
|
+
const firstViolation = inputValidation.violations[0];
|
|
174
|
+
throw toError(createError({
|
|
175
|
+
type: "agent",
|
|
176
|
+
message: `Input validation failed: ${firstViolation?.reason ?? "Unknown reason"}`,
|
|
177
|
+
}));
|
|
178
|
+
}
|
|
179
|
+
if (inputValidation.sanitized != null) {
|
|
180
|
+
context.input = inputValidation.sanitized;
|
|
181
|
+
}
|
|
182
|
+
const result = await next();
|
|
183
|
+
const outputFiltering = await outputFilter.filter(result.text);
|
|
184
|
+
reportViolations(outputFiltering.violations, config.onViolation);
|
|
185
|
+
return { ...result, text: outputFiltering.filtered };
|
|
186
|
+
};
|
|
187
|
+
}
|
|
@@ -46,7 +46,7 @@ export declare class AgentRuntime {
|
|
|
46
46
|
/**
|
|
47
47
|
* Generate a response (non-streaming)
|
|
48
48
|
*/
|
|
49
|
-
generate(input: string | Message[], context?: Record<string, unknown>, modelOverride?: string): Promise<AgentResponse>;
|
|
49
|
+
generate(input: string | Message[], context?: Record<string, unknown>, modelOverride?: string, maxOutputTokensOverride?: number): Promise<AgentResponse>;
|
|
50
50
|
/**
|
|
51
51
|
* Stream a response
|
|
52
52
|
* Returns a ReadableStream in the veryfront stream event format.
|
|
@@ -54,7 +54,7 @@ export declare class AgentRuntime {
|
|
|
54
54
|
stream(messages: Message[], context?: Record<string, unknown>, callbacks?: {
|
|
55
55
|
onToolCall?: (toolCall: ToolCall) => void;
|
|
56
56
|
onChunk?: (chunk: string) => void;
|
|
57
|
-
}, modelOverride?: string): Promise<ReadableStream<Uint8Array>>;
|
|
57
|
+
}, modelOverride?: string, maxOutputTokensOverride?: number): Promise<ReadableStream<Uint8Array>>;
|
|
58
58
|
/**
|
|
59
59
|
* Execute agent loop (with tool calling)
|
|
60
60
|
*/
|
|
@@ -77,6 +77,7 @@ export declare class AgentRuntime {
|
|
|
77
77
|
* Compute max steps considering edge config and platform limits.
|
|
78
78
|
*/
|
|
79
79
|
private computeMaxSteps;
|
|
80
|
+
private resolveMaxOutputTokens;
|
|
80
81
|
/**
|
|
81
82
|
* Get memory instance (for advanced use cases)
|
|
82
83
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/src/agent/runtime/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EACL,KAAK,WAAW,EAEhB,KAAK,aAAa,EAGlB,KAAK,OAAO,EAEZ,KAAK,QAAQ,EACd,MAAM,aAAa,CAAC;AAKrB,OAAO,EAAgB,KAAK,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAe/D,OAAO,EAAE,iBAAiB,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACpF,YAAY,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACzE,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAChF,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAC1E,YAAY,EAAE,iBAAiB,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAClG,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,EACnB,sBAAsB,GACvB,MAAM,gBAAgB,CAAC;AAqBxB;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,EAAE,GAAG,SAAS,CA6BxE;AAED,gEAAgE;AAChE,KAAK,iBAAiB,GAClB;IAAE,OAAO,EAAE,IAAI,CAAA;CAAE,GACjB;IAAE,OAAO,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAEtC;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,MAAM,EAChB,iBAAiB,EAAE,MAAM,EAAE,GAAG,SAAS,EACvC,kBAAkB,EAAE,OAAO,GAC1B,iBAAiB,CAiBnB;AAkCD,qBAAa,YAAY;IACvB,OAAO,CAAC,EAAE,CAAS;IACnB,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,MAAM,CAAuB;gBAEzB,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW;IAS3C;;OAEG;IACG,QAAQ,CACZ,KAAK,EAAE,MAAM,GAAG,OAAO,EAAE,EACzB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjC,aAAa,CAAC,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/src/agent/runtime/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -132,7 +132,7 @@ export class AgentRuntime {
|
|
|
132
132
|
/**
|
|
133
133
|
* Generate a response (non-streaming)
|
|
134
134
|
*/
|
|
135
|
-
async generate(input, context, modelOverride) {
|
|
135
|
+
async generate(input, context, modelOverride, maxOutputTokensOverride) {
|
|
136
136
|
const requestedModel = resolveConfiguredAgentModel(modelOverride || this.config.model);
|
|
137
137
|
const resolvedModelString = maybeUpgradeLocalModel(requestedModel);
|
|
138
138
|
return withSpan("agent.generate", async (span) => {
|
|
@@ -153,14 +153,14 @@ export class AgentRuntime {
|
|
|
153
153
|
platform: detectPlatform(),
|
|
154
154
|
};
|
|
155
155
|
const chain = new MiddlewareChain(this.config.middleware);
|
|
156
|
-
return chain.execute(agentContext, () => this.executeAgentLoop(systemPrompt, messages, resolvedModelString));
|
|
156
|
+
return chain.execute(agentContext, () => this.executeAgentLoop(systemPrompt, messages, resolvedModelString, maxOutputTokensOverride));
|
|
157
157
|
});
|
|
158
158
|
}
|
|
159
159
|
/**
|
|
160
160
|
* Stream a response
|
|
161
161
|
* Returns a ReadableStream in the veryfront stream event format.
|
|
162
162
|
*/
|
|
163
|
-
async stream(messages, context, callbacks, modelOverride) {
|
|
163
|
+
async stream(messages, context, callbacks, modelOverride, maxOutputTokensOverride) {
|
|
164
164
|
const requestedModel = resolveConfiguredAgentModel(modelOverride || this.config.model);
|
|
165
165
|
// Auto-upgrade local/* to a cloud provider when API keys are available.
|
|
166
166
|
const resolvedModelString = maybeUpgradeLocalModel(requestedModel);
|
|
@@ -204,7 +204,7 @@ export class AgentRuntime {
|
|
|
204
204
|
},
|
|
205
205
|
});
|
|
206
206
|
sendSSE(controller, encoder, { type: "text-start", id: textPartId });
|
|
207
|
-
await this.executeAgentLoopStreaming(systemPrompt, memoryMessages, controller, encoder, callbacks, textPartId, toolContext, resolvedModelString, languageModel);
|
|
207
|
+
await this.executeAgentLoopStreaming(systemPrompt, memoryMessages, controller, encoder, callbacks, textPartId, toolContext, resolvedModelString, languageModel, maxOutputTokensOverride);
|
|
208
208
|
sendSSE(controller, encoder, { type: "text-end", id: textPartId });
|
|
209
209
|
sendSSE(controller, encoder, { type: "message-finish" });
|
|
210
210
|
controller.close();
|
|
@@ -224,7 +224,7 @@ export class AgentRuntime {
|
|
|
224
224
|
/**
|
|
225
225
|
* Execute agent loop (with tool calling)
|
|
226
226
|
*/
|
|
227
|
-
async executeAgentLoop(systemPrompt, messages, modelString) {
|
|
227
|
+
async executeAgentLoop(systemPrompt, messages, modelString, maxOutputTokensOverride) {
|
|
228
228
|
return withSpan("agent.execution_loop", async (loopSpan) => {
|
|
229
229
|
const { maxAgentSteps } = getPlatformCapabilities();
|
|
230
230
|
const maxSteps = this.computeMaxSteps(maxAgentSteps);
|
|
@@ -263,7 +263,7 @@ export class AgentRuntime {
|
|
|
263
263
|
system: systemPrompt,
|
|
264
264
|
messages: convertToModelMessages(currentMessages),
|
|
265
265
|
tools: convertToolsToAISDK(tools),
|
|
266
|
-
maxOutputTokens: this.
|
|
266
|
+
maxOutputTokens: this.resolveMaxOutputTokens(maxOutputTokensOverride),
|
|
267
267
|
temperature: DEFAULT_TEMPERATURE,
|
|
268
268
|
});
|
|
269
269
|
});
|
|
@@ -411,7 +411,7 @@ export class AgentRuntime {
|
|
|
411
411
|
* Emits veryfront stream events (message-start/message-finish + step-start/step-end)
|
|
412
412
|
* while consuming AI SDK `streamText()` parts internally.
|
|
413
413
|
*/
|
|
414
|
-
async executeAgentLoopStreaming(systemPrompt, messages, controller, encoder, callbacks, textPartId, toolContext, modelString, resolvedModel) {
|
|
414
|
+
async executeAgentLoopStreaming(systemPrompt, messages, controller, encoder, callbacks, textPartId, toolContext, modelString, resolvedModel, maxOutputTokensOverride) {
|
|
415
415
|
const { maxAgentSteps } = getPlatformCapabilities();
|
|
416
416
|
const maxSteps = this.computeMaxSteps(maxAgentSteps);
|
|
417
417
|
const effectiveModel = resolveConfiguredAgentModel(modelString || this.config.model);
|
|
@@ -443,7 +443,7 @@ export class AgentRuntime {
|
|
|
443
443
|
system: systemPrompt,
|
|
444
444
|
messages: convertToModelMessages(currentMessages),
|
|
445
445
|
tools: convertToolsToAISDK(tools),
|
|
446
|
-
maxOutputTokens: this.
|
|
446
|
+
maxOutputTokens: this.resolveMaxOutputTokens(maxOutputTokensOverride),
|
|
447
447
|
temperature: DEFAULT_TEMPERATURE,
|
|
448
448
|
});
|
|
449
449
|
const state = createStreamState();
|
|
@@ -614,6 +614,14 @@ export class AgentRuntime {
|
|
|
614
614
|
const edgeMaxSteps = this.config.edge?.enabled ? this.config.edge.maxSteps : undefined;
|
|
615
615
|
return getMaxSteps(this.config.maxSteps, edgeMaxSteps, platformLimit);
|
|
616
616
|
}
|
|
617
|
+
resolveMaxOutputTokens(maxOutputTokensOverride) {
|
|
618
|
+
if (typeof maxOutputTokensOverride === "number" &&
|
|
619
|
+
Number.isFinite(maxOutputTokensOverride) &&
|
|
620
|
+
maxOutputTokensOverride > 0) {
|
|
621
|
+
return Math.floor(maxOutputTokensOverride);
|
|
622
|
+
}
|
|
623
|
+
return this.config.memory?.maxTokens ?? DEFAULT_MAX_TOKENS;
|
|
624
|
+
}
|
|
617
625
|
/**
|
|
618
626
|
* Get memory instance (for advanced use cases)
|
|
619
627
|
*/
|
package/esm/src/agent/types.d.ts
CHANGED
|
@@ -70,6 +70,8 @@ export interface Agent {
|
|
|
70
70
|
context?: Record<string, unknown>;
|
|
71
71
|
/** Override the agent's default model for this request. Must be in `allowedModels` if configured. */
|
|
72
72
|
model?: ModelString;
|
|
73
|
+
/** Override the maximum model output tokens for this request. */
|
|
74
|
+
maxOutputTokens?: number;
|
|
73
75
|
}): Promise<AgentResponse>;
|
|
74
76
|
stream(input: {
|
|
75
77
|
input?: string;
|
|
@@ -77,6 +79,8 @@ export interface Agent {
|
|
|
77
79
|
context?: Record<string, unknown>;
|
|
78
80
|
/** Override the agent's default model for this request. Must be in `allowedModels` if configured. */
|
|
79
81
|
model?: ModelString;
|
|
82
|
+
/** Override the maximum model output tokens for this request. */
|
|
83
|
+
maxOutputTokens?: number;
|
|
80
84
|
onToolCall?: (toolCall: ToolCall) => void;
|
|
81
85
|
onChunk?: (chunk: string) => void;
|
|
82
86
|
}): Promise<AgentStreamResult>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/src/agent/types.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/src/agent/types.ts"],"names":[],"mappings":"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"}
|