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.
Files changed (73) hide show
  1. package/esm/cli/templates/manifest.js +37 -37
  2. package/esm/deno.d.ts +3 -0
  3. package/esm/deno.js +6 -3
  4. package/esm/src/agent/composition/composition.d.ts.map +1 -1
  5. package/esm/src/agent/composition/composition.js +13 -3
  6. package/esm/src/agent/factory.d.ts.map +1 -1
  7. package/esm/src/agent/factory.js +3 -3
  8. package/esm/src/agent/middleware/security/validator.d.ts +92 -0
  9. package/esm/src/agent/middleware/security/validator.d.ts.map +1 -0
  10. package/esm/src/agent/middleware/security/validator.js +187 -0
  11. package/esm/src/agent/runtime/index.d.ts +3 -2
  12. package/esm/src/agent/runtime/index.d.ts.map +1 -1
  13. package/esm/src/agent/runtime/index.js +16 -8
  14. package/esm/src/agent/types.d.ts +4 -0
  15. package/esm/src/agent/types.d.ts.map +1 -1
  16. package/esm/src/channels/invoke.d.ts +491 -0
  17. package/esm/src/channels/invoke.d.ts.map +1 -0
  18. package/esm/src/channels/invoke.js +417 -0
  19. package/esm/src/embedding/embedding.js +2 -2
  20. package/esm/src/integrations/endpoint-executor.d.ts +1 -0
  21. package/esm/src/integrations/endpoint-executor.d.ts.map +1 -1
  22. package/esm/src/integrations/endpoint-executor.js +44 -0
  23. package/esm/src/integrations/schema.d.ts +2 -2
  24. package/esm/src/oauth/handlers/init-handler.d.ts +6 -2
  25. package/esm/src/oauth/handlers/init-handler.d.ts.map +1 -1
  26. package/esm/src/oauth/handlers/init-handler.js +8 -2
  27. package/esm/src/platform/compat/opaque-deps.d.ts.map +1 -1
  28. package/esm/src/platform/compat/opaque-deps.js +10 -1
  29. package/esm/src/prompt/factory.d.ts.map +1 -1
  30. package/esm/src/prompt/factory.js +9 -1
  31. package/esm/src/react/components/ai/markdown.d.ts.map +1 -1
  32. package/esm/src/react/components/ai/markdown.js +4 -4
  33. package/esm/src/server/handlers/dev/framework-candidates.generated.d.ts.map +1 -1
  34. package/esm/src/server/handlers/dev/framework-candidates.generated.js +5 -4
  35. package/esm/src/server/handlers/preview/markdown-html-generator.js +1 -1
  36. package/esm/src/server/handlers/request/api/api-handler-wrapper.d.ts.map +1 -1
  37. package/esm/src/server/handlers/request/api/api-handler-wrapper.js +1 -74
  38. package/esm/src/server/handlers/request/api/project-discovery.d.ts +9 -0
  39. package/esm/src/server/handlers/request/api/project-discovery.d.ts.map +1 -0
  40. package/esm/src/server/handlers/request/api/project-discovery.js +74 -0
  41. package/esm/src/server/handlers/request/channel-assistants.handler.d.ts +11 -0
  42. package/esm/src/server/handlers/request/channel-assistants.handler.d.ts.map +1 -0
  43. package/esm/src/server/handlers/request/channel-assistants.handler.js +71 -0
  44. package/esm/src/server/handlers/request/channel-invoke.handler.d.ts +11 -0
  45. package/esm/src/server/handlers/request/channel-invoke.handler.d.ts.map +1 -0
  46. package/esm/src/server/handlers/request/channel-invoke.handler.js +72 -0
  47. package/esm/src/server/runtime-handler/index.d.ts.map +1 -1
  48. package/esm/src/server/runtime-handler/index.js +4 -0
  49. package/esm/src/transforms/md/compiler/md-compiler.d.ts.map +1 -1
  50. package/esm/src/transforms/md/compiler/md-compiler.js +25 -1
  51. package/package.json +3 -1
  52. package/src/cli/templates/manifest.js +37 -37
  53. package/src/deno.js +6 -3
  54. package/src/src/agent/composition/composition.ts +15 -3
  55. package/src/src/agent/factory.ts +19 -6
  56. package/src/src/agent/middleware/security/validator.ts +288 -0
  57. package/src/src/agent/runtime/index.ts +26 -3
  58. package/src/src/agent/types.ts +4 -0
  59. package/src/src/channels/invoke.ts +546 -0
  60. package/src/src/embedding/embedding.ts +2 -2
  61. package/src/src/integrations/endpoint-executor.ts +51 -0
  62. package/src/src/oauth/handlers/init-handler.ts +20 -5
  63. package/src/src/platform/compat/opaque-deps.ts +19 -4
  64. package/src/src/prompt/factory.ts +10 -1
  65. package/src/src/react/components/ai/markdown.tsx +5 -4
  66. package/src/src/server/handlers/dev/framework-candidates.generated.ts +5 -4
  67. package/src/src/server/handlers/preview/markdown-html-generator.ts +1 -1
  68. package/src/src/server/handlers/request/api/api-handler-wrapper.ts +1 -85
  69. package/src/src/server/handlers/request/api/project-discovery.ts +86 -0
  70. package/src/src/server/handlers/request/channel-assistants.handler.ts +94 -0
  71. package/src/src/server/handlers/request/channel-invoke.handler.ts +95 -0
  72. package/src/src/server/runtime-handler/index.ts +4 -0
  73. 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.62",
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 compile --allow-all --include src/platform/polyfills --include src/proxy/main.ts --include dist/framework-src --output ./bin/veryfront cli/main.ts",
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;AASD,wBAAgB,gBAAgB,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAQ5F"}
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
- dntShim.dntGlobalThis.__vfGetAgent = getAgent;
95
- dntShim.dntGlobalThis.__vfRegisterAgent = registerAgent;
96
- dntShim.dntGlobalThis.__vfGetAllAgentIds = getAllAgentIds;
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,CA4LhD"}
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"}
@@ -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,GACrB,OAAO,CAAC,aAAa,CAAC;IAgCzB;;;OAGG;IACG,MAAM,CACV,QAAQ,EAAE,OAAO,EAAE,EACnB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjC,SAAS,CAAC,EAAE;QACV,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,KAAK,IAAI,CAAC;QAC1C,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;KACnC,EACD,aAAa,CAAC,EAAE,MAAM,GACrB,OAAO,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;IAgFtC;;OAEG;YACW,gBAAgB;IAyN9B;;;;OAIG;YACW,yBAAyB;IAyNvC;;OAEG;YACW,eAAe;IAqC7B;;OAEG;YACW,mBAAmB;IAOjC;;OAEG;IACH,OAAO,CAAC,eAAe;IAKvB;;OAEG;IACH,SAAS,IAAI,MAAM,CAAC,OAAO,CAAC;IAI5B;;OAEG;IACG,cAAc,IAAI,OAAO,CAAC;QAC9B,aAAa,EAAE,MAAM,CAAC;QACtB,eAAe,EAAE,MAAM,CAAC;QACxB,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;IAIF;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;CAGnC"}
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.config.memory?.maxTokens ?? DEFAULT_MAX_TOKENS,
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.config.memory?.maxTokens ?? DEFAULT_MAX_TOKENS,
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
  */
@@ -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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"}