veryfront 0.0.72 → 0.0.73
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/dist/ai/components.js +596 -55
- package/dist/ai/components.js.map +3 -3
- package/dist/ai/dev.js +3 -9
- package/dist/ai/dev.js.map +1 -1
- package/dist/ai/index.js +94 -75
- package/dist/ai/index.js.map +2 -2
- package/dist/ai/production.js +20 -14
- package/dist/ai/production.js.map +1 -1
- package/dist/ai/react.js +50 -31
- package/dist/ai/react.js.map +2 -2
- package/dist/ai/workflow.js +50 -36
- package/dist/ai/workflow.js.map +2 -2
- package/dist/cli.js +603 -1014
- package/dist/components.js +265 -4132
- package/dist/components.js.map +4 -4
- package/dist/config.js +2 -3
- package/dist/config.js.map +2 -2
- package/dist/data.js +28 -23
- package/dist/data.js.map +2 -2
- package/dist/index.js +296 -4165
- package/dist/index.js.map +4 -4
- package/dist/oauth/handlers.js +8 -7
- package/dist/oauth/handlers.js.map +2 -2
- package/dist/oauth/index.js +8 -7
- package/dist/oauth/index.js.map +2 -2
- package/dist/oauth/providers.js +4 -1
- package/dist/oauth/providers.js.map +2 -2
- package/dist/oauth/token-store.js +4 -6
- package/dist/oauth/token-store.js.map +1 -1
- package/dist/templates/ai/app/api/chat/route.ts +106 -3
- package/package.json +1 -1
package/dist/ai/production.js
CHANGED
|
@@ -36,8 +36,9 @@ function toError(veryfrontError) {
|
|
|
36
36
|
|
|
37
37
|
// src/ai/production/rate-limit/limiter.ts
|
|
38
38
|
var FixedWindowLimiter = class {
|
|
39
|
+
requests = /* @__PURE__ */ new Map();
|
|
40
|
+
config;
|
|
39
41
|
constructor(config) {
|
|
40
|
-
this.requests = /* @__PURE__ */ new Map();
|
|
41
42
|
this.config = config;
|
|
42
43
|
}
|
|
43
44
|
check(identifier) {
|
|
@@ -78,8 +79,10 @@ var FixedWindowLimiter = class {
|
|
|
78
79
|
}
|
|
79
80
|
};
|
|
80
81
|
var TokenBucketLimiter = class {
|
|
82
|
+
buckets = /* @__PURE__ */ new Map();
|
|
83
|
+
config;
|
|
84
|
+
refillRate;
|
|
81
85
|
constructor(config) {
|
|
82
|
-
this.buckets = /* @__PURE__ */ new Map();
|
|
83
86
|
this.config = config;
|
|
84
87
|
this.refillRate = config.maxRequests / config.windowMs;
|
|
85
88
|
}
|
|
@@ -182,9 +185,7 @@ function rateLimitMiddleware(config) {
|
|
|
182
185
|
|
|
183
186
|
// src/ai/production/cache/cache.ts
|
|
184
187
|
var MemoryCache = class {
|
|
185
|
-
|
|
186
|
-
this.cache = /* @__PURE__ */ new Map();
|
|
187
|
-
}
|
|
188
|
+
cache = /* @__PURE__ */ new Map();
|
|
188
189
|
set(key, response) {
|
|
189
190
|
this.cache.set(key, {
|
|
190
191
|
response,
|
|
@@ -215,8 +216,9 @@ var MemoryCache = class {
|
|
|
215
216
|
}
|
|
216
217
|
};
|
|
217
218
|
var LRUCache = class {
|
|
219
|
+
cache = /* @__PURE__ */ new Map();
|
|
220
|
+
maxSize;
|
|
218
221
|
constructor(maxSize = 100) {
|
|
219
|
-
this.cache = /* @__PURE__ */ new Map();
|
|
220
222
|
this.maxSize = maxSize;
|
|
221
223
|
}
|
|
222
224
|
set(key, response) {
|
|
@@ -260,9 +262,10 @@ var LRUCache = class {
|
|
|
260
262
|
}
|
|
261
263
|
};
|
|
262
264
|
var TTLCache = class {
|
|
265
|
+
cache = /* @__PURE__ */ new Map();
|
|
266
|
+
ttl;
|
|
267
|
+
cleanupInterval = null;
|
|
263
268
|
constructor(ttl = 3e5) {
|
|
264
|
-
this.cache = /* @__PURE__ */ new Map();
|
|
265
|
-
this.cleanupInterval = null;
|
|
266
269
|
this.ttl = ttl;
|
|
267
270
|
this.startCleanup();
|
|
268
271
|
}
|
|
@@ -534,13 +537,14 @@ var logger = createLogger("VERYFRONT");
|
|
|
534
537
|
|
|
535
538
|
// src/ai/production/cost-tracking/tracker.ts
|
|
536
539
|
var CostTracker = class {
|
|
540
|
+
records = [];
|
|
541
|
+
config;
|
|
542
|
+
dailyTotal = 0;
|
|
543
|
+
monthlyTotal = 0;
|
|
544
|
+
lastDayReset = Date.now();
|
|
545
|
+
lastMonthReset = Date.now();
|
|
546
|
+
resetInterval = null;
|
|
537
547
|
constructor(config) {
|
|
538
|
-
this.records = [];
|
|
539
|
-
this.dailyTotal = 0;
|
|
540
|
-
this.monthlyTotal = 0;
|
|
541
|
-
this.lastDayReset = Date.now();
|
|
542
|
-
this.lastMonthReset = Date.now();
|
|
543
|
-
this.resetInterval = null;
|
|
544
548
|
this.config = config;
|
|
545
549
|
this.startPeriodicReset();
|
|
546
550
|
}
|
|
@@ -803,6 +807,7 @@ var PII_PATTERNS = {
|
|
|
803
807
|
creditCard: /\b\d{4}[-\s]?\d{4}[-\s]?\d{4}[-\s]?\d{4}\b/g
|
|
804
808
|
};
|
|
805
809
|
var InputValidator = class {
|
|
810
|
+
config;
|
|
806
811
|
constructor(config) {
|
|
807
812
|
this.config = config || {};
|
|
808
813
|
}
|
|
@@ -862,6 +867,7 @@ var InputValidator = class {
|
|
|
862
867
|
}
|
|
863
868
|
};
|
|
864
869
|
var OutputFilter = class {
|
|
870
|
+
config;
|
|
865
871
|
constructor(config) {
|
|
866
872
|
this.config = config || {};
|
|
867
873
|
}
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/_shims/deno-env.ts", "../../../src/core/errors/veryfront-error.ts", "../../../src/ai/production/rate-limit/limiter.ts", "../../../src/ai/production/cache/cache.ts", "../../../src/core/utils/runtime-guards.ts", "../../../src/core/utils/logger/env.ts", "../../../src/core/utils/logger/logger.ts", "../../../src/ai/production/cost-tracking/tracker.ts", "../../../src/ai/production/security/validator.ts"],
|
|
4
4
|
"sourcesContent": ["/**\n * Shim for Deno.env in Node.js environment\n * This file is injected by esbuild to provide Deno.env compatibility\n */\n\n// @ts-ignore - Global Deno shim for Node.js\nglobalThis.Deno = globalThis.Deno || {\n env: {\n get(key: string): string | undefined {\n return process.env[key];\n },\n set(key: string, value: string): void {\n process.env[key] = value;\n },\n delete(key: string): void {\n delete process.env[key];\n },\n has(key: string): boolean {\n return key in process.env;\n },\n toObject(): Record<string, string> {\n return { ...process.env } as Record<string, string>;\n },\n },\n};\n", "export interface BuildContext {\n file?: string;\n line?: number;\n column?: number;\n moduleId?: string;\n phase?: \"parse\" | \"transform\" | \"bundle\" | \"optimize\";\n}\n\nexport interface APIContext {\n endpoint?: string;\n method?: string;\n statusCode?: number;\n headers?: Record<string, string>;\n}\n\nexport interface RenderContext {\n component?: string;\n route?: string;\n phase?: \"server\" | \"client\" | \"hydration\";\n props?: unknown;\n}\n\nexport interface ConfigContext {\n configFile?: string;\n field?: string;\n value?: unknown;\n expected?: string;\n}\n\nexport interface AgentContext {\n agentId?: string;\n intent?: string;\n timeout?: number;\n}\n\nexport interface FileContext {\n path?: string;\n operation?: \"read\" | \"write\" | \"delete\" | \"mkdir\";\n permissions?: string;\n}\n\nexport interface NetworkContext {\n url?: string;\n timeout?: number;\n retryCount?: number;\n}\n\nexport type VeryfrontError =\n | { type: \"build\"; message: string; context?: BuildContext }\n | { type: \"api\"; message: string; context?: APIContext }\n | { type: \"render\"; message: string; context?: RenderContext }\n | { type: \"config\"; message: string; context?: ConfigContext }\n | { type: \"agent\"; message: string; context?: AgentContext }\n | { type: \"file\"; message: string; context?: FileContext }\n | { type: \"network\"; message: string; context?: NetworkContext }\n | { type: \"permission\"; message: string; context?: FileContext }\n | { type: \"not_supported\"; message: string; feature?: string };\n\nexport function createError(error: VeryfrontError): VeryfrontError {\n return error;\n}\n\nexport function isBuildError(\n error: VeryfrontError,\n): error is Extract<VeryfrontError, { type: \"build\" }> {\n return error.type === \"build\";\n}\n\nexport function isAPIError(\n error: VeryfrontError,\n): error is Extract<VeryfrontError, { type: \"api\" }> {\n return error.type === \"api\";\n}\n\nexport function isRenderError(\n error: VeryfrontError,\n): error is Extract<VeryfrontError, { type: \"render\" }> {\n return error.type === \"render\";\n}\n\nexport function isConfigError(\n error: VeryfrontError,\n): error is Extract<VeryfrontError, { type: \"config\" }> {\n return error.type === \"config\";\n}\n\nexport function isAgentError(\n error: VeryfrontError,\n): error is Extract<VeryfrontError, { type: \"agent\" }> {\n return error.type === \"agent\";\n}\n\nexport function isFileError(\n error: VeryfrontError,\n): error is Extract<VeryfrontError, { type: \"file\" }> {\n return error.type === \"file\";\n}\n\nexport function isNetworkError(\n error: VeryfrontError,\n): error is Extract<VeryfrontError, { type: \"network\" }> {\n return error.type === \"network\";\n}\n\nexport function toError(veryfrontError: VeryfrontError): Error {\n const error = new Error(veryfrontError.message);\n error.name = `VeryfrontError[${veryfrontError.type}]`;\n Object.defineProperty(error, \"context\", {\n value: veryfrontError,\n enumerable: false,\n configurable: true,\n });\n return error;\n}\n\nexport function fromError(error: unknown): VeryfrontError | null {\n if (error && typeof error === \"object\" && \"context\" in error) {\n // Safe access after 'in' check\n const context = (error as Record<string, unknown>).context;\n if (\n context &&\n typeof context === \"object\" &&\n \"type\" in context &&\n \"message\" in context\n ) {\n return context as VeryfrontError;\n }\n }\n return null;\n}\n\nexport function logError(\n error: VeryfrontError,\n logger?: { error: (msg: string, ...args: unknown[]) => void },\n): void {\n const log = logger || console;\n const context = \"context\" in error ? error.context || {} : {};\n log.error(`[${error.type}] ${error.message}`, context);\n}\n", "import { createError, toError } from \"../../../core/errors/veryfront-error.ts\";\n/**\n * Rate Limiting System\n *\n * Prevents abuse and ensures fair usage of AI resources.\n * Supports multiple strategies: fixed window, sliding window, token bucket.\n */\n\nexport interface RateLimitConfig {\n /** Strategy type */\n strategy: \"fixed-window\" | \"sliding-window\" | \"token-bucket\";\n\n /** Maximum requests */\n maxRequests: number;\n\n /** Time window in milliseconds */\n windowMs: number;\n\n /** Identifier function (e.g., user ID, IP address) */\n identify?: (context: Record<string, unknown>) => string;\n\n /** Custom error message */\n errorMessage?: string;\n}\n\nexport interface RateLimitResult {\n /** Allowed or not */\n allowed: boolean;\n\n /** Requests remaining */\n remaining: number;\n\n /** Reset time (timestamp) */\n resetAt: number;\n\n /** Retry after (seconds) */\n retryAfter?: number;\n}\n\n/**\n * Fixed Window Rate Limiter\n */\nclass FixedWindowLimiter {\n private requests = new Map<string, { count: number; resetAt: number }>();\n private config: RateLimitConfig;\n\n constructor(config: RateLimitConfig) {\n this.config = config;\n }\n\n check(identifier: string): RateLimitResult {\n const now = Date.now();\n const entry = this.requests.get(identifier);\n\n // No previous requests or window expired\n if (!entry || now >= entry.resetAt) {\n const resetAt = now + this.config.windowMs;\n\n this.requests.set(identifier, {\n count: 1,\n resetAt,\n });\n\n return {\n allowed: true,\n remaining: this.config.maxRequests - 1,\n resetAt,\n };\n }\n\n // Within window\n if (entry.count < this.config.maxRequests) {\n entry.count++;\n\n return {\n allowed: true,\n remaining: this.config.maxRequests - entry.count,\n resetAt: entry.resetAt,\n };\n }\n\n // Limit exceeded\n return {\n allowed: false,\n remaining: 0,\n resetAt: entry.resetAt,\n retryAfter: Math.ceil((entry.resetAt - now) / 1000),\n };\n }\n\n reset(identifier: string): void {\n this.requests.delete(identifier);\n }\n\n clear(): void {\n this.requests.clear();\n }\n}\n\n/**\n * Token Bucket Rate Limiter (more flexible)\n */\nclass TokenBucketLimiter {\n private buckets = new Map<\n string,\n { tokens: number; lastRefill: number }\n >();\n private config: RateLimitConfig;\n private refillRate: number;\n\n constructor(config: RateLimitConfig) {\n this.config = config;\n // Refill rate: tokens per millisecond\n this.refillRate = config.maxRequests / config.windowMs;\n }\n\n check(identifier: string): RateLimitResult {\n const now = Date.now();\n let bucket = this.buckets.get(identifier);\n\n // Initialize bucket if not exists\n if (!bucket) {\n bucket = {\n tokens: this.config.maxRequests - 1,\n lastRefill: now,\n };\n this.buckets.set(identifier, bucket);\n\n return {\n allowed: true,\n remaining: bucket.tokens,\n resetAt: now + this.config.windowMs,\n };\n }\n\n // Refill tokens based on time passed\n const timePassed = now - bucket.lastRefill;\n const tokensToAdd = timePassed * this.refillRate;\n\n bucket.tokens = Math.min(\n this.config.maxRequests,\n bucket.tokens + tokensToAdd,\n );\n bucket.lastRefill = now;\n\n // Check if we have tokens\n if (bucket.tokens >= 1) {\n bucket.tokens--;\n\n return {\n allowed: true,\n remaining: Math.floor(bucket.tokens),\n resetAt: now + this.config.windowMs,\n };\n }\n\n // No tokens available\n const timeUntilToken = (1 - bucket.tokens) / this.refillRate;\n\n return {\n allowed: false,\n remaining: 0,\n resetAt: now + this.config.windowMs,\n retryAfter: Math.ceil(timeUntilToken / 1000),\n };\n }\n\n reset(identifier: string): void {\n this.buckets.delete(identifier);\n }\n\n clear(): void {\n this.buckets.clear();\n }\n}\n\n/**\n * Create a rate limiter\n */\nexport function createRateLimiter(config: RateLimitConfig) {\n let limiter: FixedWindowLimiter | TokenBucketLimiter;\n\n switch (config.strategy) {\n case \"fixed-window\":\n limiter = new FixedWindowLimiter(config);\n break;\n case \"token-bucket\":\n limiter = new TokenBucketLimiter(config);\n break;\n case \"sliding-window\":\n // Use token bucket as approximation for sliding window\n limiter = new TokenBucketLimiter(config);\n break;\n default:\n limiter = new FixedWindowLimiter(config);\n }\n\n return {\n /**\n * Check if request is allowed\n */\n check(context?: Record<string, unknown>): RateLimitResult {\n const identifier = config.identify ? config.identify(context!) : \"default\";\n\n return limiter.check(identifier);\n },\n\n /**\n * Reset rate limit for identifier\n */\n reset(context?: Record<string, unknown>): void {\n const identifier = config.identify ? config.identify(context!) : \"default\";\n\n limiter.reset(identifier);\n },\n\n /**\n * Clear all rate limits\n */\n clear(): void {\n limiter.clear();\n },\n };\n}\n\n/**\n * Create rate limit middleware for agents\n */\nexport function rateLimitMiddleware(config: RateLimitConfig) {\n const limiter = createRateLimiter(config);\n\n return <T>(context: Record<string, unknown>, next: () => Promise<T>): Promise<T> => {\n const result = limiter.check(context);\n\n if (!result.allowed) {\n throw toError(createError({\n type: \"agent\",\n message: config.errorMessage ||\n `Rate limit exceeded. Try again in ${result.retryAfter} seconds.`,\n }));\n }\n\n return next();\n };\n}\n", "/**\n * Response Caching System\n *\n * Cache agent responses to reduce API calls and improve performance.\n */\n\nimport type { AgentResponse } from \"../../types/agent.ts\";\n\nexport interface CacheConfig {\n /** Cache strategy */\n strategy: \"memory\" | \"lru\" | \"ttl\";\n\n /** Maximum cache size (for LRU) */\n maxSize?: number;\n\n /** Time to live in milliseconds (for TTL) */\n ttl?: number;\n\n /** Generate cache key */\n keyGenerator?: (input: string, context?: Record<string, unknown>) => string;\n}\n\nexport interface CacheEntry {\n /** Cached response */\n response: AgentResponse;\n\n /** Timestamp when cached */\n cachedAt: number;\n\n /** Expiration timestamp (for TTL) */\n expiresAt?: number;\n\n /** Access count */\n accessCount: number;\n\n /** Last accessed timestamp */\n lastAccessedAt: number;\n}\n\n/**\n * Memory Cache (simple in-memory storage)\n */\nclass MemoryCache {\n private cache = new Map<string, CacheEntry>();\n\n set(key: string, response: AgentResponse): void {\n this.cache.set(key, {\n response,\n cachedAt: Date.now(),\n accessCount: 0,\n lastAccessedAt: Date.now(),\n });\n }\n\n get(key: string): AgentResponse | null {\n const entry = this.cache.get(key);\n\n if (!entry) return null;\n\n entry.accessCount++;\n entry.lastAccessedAt = Date.now();\n\n return entry.response;\n }\n\n has(key: string): boolean {\n return this.cache.has(key);\n }\n\n delete(key: string): void {\n this.cache.delete(key);\n }\n\n clear(): void {\n this.cache.clear();\n }\n\n size(): number {\n return this.cache.size;\n }\n}\n\n/**\n * LRU Cache (Least Recently Used eviction)\n */\nclass LRUCache {\n private cache = new Map<string, CacheEntry>();\n private maxSize: number;\n\n constructor(maxSize: number = 100) {\n this.maxSize = maxSize;\n }\n\n set(key: string, response: AgentResponse): void {\n // If key exists, delete it first (will re-add to end)\n if (this.cache.has(key)) {\n this.cache.delete(key);\n }\n\n // If at max size, remove least recently used (first entry)\n if (this.cache.size >= this.maxSize) {\n const firstKey = this.cache.keys().next().value;\n if (firstKey !== undefined) {\n this.cache.delete(firstKey);\n }\n }\n\n this.cache.set(key, {\n response,\n cachedAt: Date.now(),\n accessCount: 0,\n lastAccessedAt: Date.now(),\n });\n }\n\n get(key: string): AgentResponse | null {\n const entry = this.cache.get(key);\n\n if (!entry) return null;\n\n // Move to end (mark as recently used)\n this.cache.delete(key);\n entry.accessCount++;\n entry.lastAccessedAt = Date.now();\n this.cache.set(key, entry);\n\n return entry.response;\n }\n\n has(key: string): boolean {\n return this.cache.has(key);\n }\n\n delete(key: string): void {\n this.cache.delete(key);\n }\n\n clear(): void {\n this.cache.clear();\n }\n\n size(): number {\n return this.cache.size;\n }\n}\n\n/**\n * TTL Cache (Time To Live eviction)\n */\nclass TTLCache {\n private cache = new Map<string, CacheEntry>();\n private ttl: number;\n private cleanupInterval: ReturnType<typeof setInterval> | null = null;\n\n constructor(ttl: number = 300000) {\n this.ttl = ttl;\n this.startCleanup();\n }\n\n set(key: string, response: AgentResponse): void {\n const now = Date.now();\n\n this.cache.set(key, {\n response,\n cachedAt: now,\n expiresAt: now + this.ttl,\n accessCount: 0,\n lastAccessedAt: now,\n });\n }\n\n get(key: string): AgentResponse | null {\n const entry = this.cache.get(key);\n\n if (!entry) return null;\n\n // Check if expired\n if (entry.expiresAt && Date.now() >= entry.expiresAt) {\n this.cache.delete(key);\n return null;\n }\n\n entry.accessCount++;\n entry.lastAccessedAt = Date.now();\n\n return entry.response;\n }\n\n has(key: string): boolean {\n const entry = this.cache.get(key);\n\n if (!entry) return false;\n\n // Check if expired\n if (entry.expiresAt && Date.now() >= entry.expiresAt) {\n this.cache.delete(key);\n return false;\n }\n\n return true;\n }\n\n delete(key: string): void {\n this.cache.delete(key);\n }\n\n clear(): void {\n this.cache.clear();\n }\n\n size(): number {\n return this.cache.size;\n }\n\n destroy(): void {\n if (this.cleanupInterval) {\n clearInterval(this.cleanupInterval);\n this.cleanupInterval = null;\n }\n this.cache.clear();\n }\n\n private startCleanup(): void {\n this.cleanupInterval = setInterval(() => {\n const now = Date.now();\n\n for (const [key, entry] of this.cache.entries()) {\n if (entry.expiresAt && now >= entry.expiresAt) {\n this.cache.delete(key);\n }\n }\n }, 60000);\n }\n}\n\n/**\n * Create a cache instance\n */\nexport function createCache(config: CacheConfig) {\n let cache: MemoryCache | LRUCache | TTLCache;\n\n switch (config.strategy) {\n case \"memory\":\n cache = new MemoryCache();\n break;\n case \"lru\":\n cache = new LRUCache(config.maxSize || 100);\n break;\n case \"ttl\":\n cache = new TTLCache(config.ttl || 300000);\n break;\n default:\n cache = new MemoryCache();\n }\n\n const keyGenerator = config.keyGenerator || ((input: string) => `cache_${hashString(input)}`);\n\n return {\n /**\n * Get cached response\n */\n get(input: string, context?: Record<string, unknown>): AgentResponse | null {\n const key = keyGenerator(input, context);\n return cache.get(key);\n },\n\n /**\n * Set cached response\n */\n set(input: string, response: AgentResponse, context?: Record<string, unknown>): void {\n const key = keyGenerator(input, context);\n cache.set(key, response);\n },\n\n /**\n * Check if cached\n */\n has(input: string, context?: Record<string, unknown>): boolean {\n const key = keyGenerator(input, context);\n return cache.has(key);\n },\n\n /**\n * Delete cached entry\n */\n delete(input: string, context?: Record<string, unknown>): void {\n const key = keyGenerator(input, context);\n cache.delete(key);\n },\n\n /**\n * Clear all cache\n */\n clear(): void {\n cache.clear();\n },\n\n /**\n * Get cache size\n */\n size(): number {\n return cache.size();\n },\n };\n}\n\n/**\n * Simple string hash function\n */\nfunction hashString(str: string): string {\n let hash = 0;\n\n for (let i = 0; i < str.length; i++) {\n const char = str.charCodeAt(i);\n hash = (hash << 5) - hash + char;\n hash = hash & hash; // Convert to 32-bit integer\n }\n\n return Math.abs(hash).toString(36);\n}\n\n/**\n * Cache middleware for agents\n */\nexport function cacheMiddleware(config: CacheConfig) {\n const cache = createCache(config);\n\n return async (\n context: Record<string, unknown>,\n next: () => Promise<AgentResponse>,\n ): Promise<AgentResponse> => {\n const inputString = typeof context.input === \"string\"\n ? context.input\n : JSON.stringify(context.input);\n\n // Check cache\n const cached = cache.get(inputString, context);\n\n if (cached) {\n return {\n ...cached,\n metadata: {\n ...cached.metadata,\n fromCache: true,\n cachedAt: Date.now(),\n },\n };\n }\n\n // Execute and cache\n const result = await next();\n cache.set(inputString, result, context);\n\n return result;\n };\n}\n", "export interface GlobalWithDeno {\n Deno?: {\n env: {\n get(key: string): string | undefined;\n };\n };\n}\n\nexport interface GlobalWithProcess {\n process?: {\n env: Record<string, string | undefined>;\n version?: string;\n versions?: Record<string, string>;\n };\n}\n\nexport interface GlobalWithBun {\n Bun?: {\n version: string;\n };\n}\n\nexport function hasDenoRuntime(global: unknown): global is GlobalWithDeno {\n return (\n typeof global === \"object\" &&\n global !== null &&\n \"Deno\" in global &&\n typeof (global as GlobalWithDeno).Deno?.env?.get === \"function\"\n );\n}\n\nexport function hasNodeProcess(global: unknown): global is GlobalWithProcess {\n return (\n typeof global === \"object\" &&\n global !== null &&\n \"process\" in global &&\n typeof (global as GlobalWithProcess).process?.env === \"object\"\n );\n}\n\nexport function hasBunRuntime(global: unknown): global is GlobalWithBun {\n return (\n typeof global === \"object\" &&\n global !== null &&\n \"Bun\" in global &&\n typeof (global as GlobalWithBun).Bun !== \"undefined\"\n );\n}\n", "import type { GlobalWithDeno, GlobalWithProcess } from \"../runtime-guards.ts\";\nimport { hasDenoRuntime, hasNodeProcess } from \"../runtime-guards.ts\";\n\nexport function getEnvironmentVariable(name: string): string | undefined {\n try {\n if (typeof Deno !== \"undefined\" && hasDenoRuntime(globalThis)) {\n const value = (globalThis as GlobalWithDeno).Deno?.env.get(name);\n return value === \"\" ? undefined : value;\n }\n if (hasNodeProcess(globalThis)) {\n const value = (globalThis as GlobalWithProcess).process?.env[name];\n return value === \"\" ? undefined : value;\n }\n } catch {\n return undefined;\n }\n return undefined;\n}\n\nexport function isTestEnvironment(): boolean {\n return getEnvironmentVariable(\"NODE_ENV\") === \"test\";\n}\n\nexport function isProductionEnvironment(): boolean {\n return getEnvironmentVariable(\"NODE_ENV\") === \"production\";\n}\n\nexport function isDevelopmentEnvironment(): boolean {\n const env = getEnvironmentVariable(\"NODE_ENV\");\n return env === \"development\" || env === undefined;\n}\n", "import { getEnvironmentVariable } from \"./env.ts\";\n\nexport enum LogLevel {\n DEBUG = 0,\n INFO = 1,\n WARN = 2,\n ERROR = 3,\n}\n\nexport interface Logger {\n debug(message: string, ...args: unknown[]): void;\n info(message: string, ...args: unknown[]): void;\n warn(message: string, ...args: unknown[]): void;\n error(message: string, ...args: unknown[]): void;\n time<T>(label: string, fn: () => Promise<T>): Promise<T>;\n}\n\nconst originalConsole = {\n debug: console.debug,\n log: console.log,\n warn: console.warn,\n error: console.error,\n};\n\nlet cachedLogLevel: LogLevel | undefined;\n\nfunction resolveLogLevel(force = false): LogLevel {\n if (force || cachedLogLevel === undefined) {\n cachedLogLevel = getDefaultLevel();\n }\n return cachedLogLevel;\n}\n\nclass ConsoleLogger implements Logger {\n constructor(\n private prefix: string,\n private level: LogLevel = resolveLogLevel(),\n ) {}\n\n setLevel(level: LogLevel): void {\n this.level = level;\n }\n\n getLevel(): LogLevel {\n return this.level;\n }\n\n debug(message: string, ...args: unknown[]): void {\n if (this.level <= LogLevel.DEBUG) {\n console.debug(`[${this.prefix}] DEBUG: ${message}`, ...args);\n }\n }\n\n info(message: string, ...args: unknown[]): void {\n if (this.level <= LogLevel.INFO) {\n console.log(`[${this.prefix}] ${message}`, ...args);\n }\n }\n\n warn(message: string, ...args: unknown[]): void {\n if (this.level <= LogLevel.WARN) {\n console.warn(`[${this.prefix}] WARN: ${message}`, ...args);\n }\n }\n\n error(message: string, ...args: unknown[]): void {\n if (this.level <= LogLevel.ERROR) {\n console.error(`[${this.prefix}] ERROR: ${message}`, ...args);\n }\n }\n\n async time<T>(label: string, fn: () => Promise<T>): Promise<T> {\n const start = performance.now();\n try {\n const result = await fn();\n const end = performance.now();\n this.debug(`${label} completed in ${(end - start).toFixed(2)}ms`);\n return result;\n } catch (error) {\n const end = performance.now();\n this.error(`${label} failed after ${(end - start).toFixed(2)}ms`, error);\n throw error;\n }\n }\n}\n\nfunction parseLogLevel(levelString: string | undefined): LogLevel | undefined {\n if (!levelString) return undefined;\n const upper = levelString.toUpperCase();\n switch (upper) {\n case \"DEBUG\":\n return LogLevel.DEBUG;\n case \"WARN\":\n return LogLevel.WARN;\n case \"ERROR\":\n return LogLevel.ERROR;\n case \"INFO\":\n return LogLevel.INFO;\n default:\n return undefined;\n }\n}\n\nconst getDefaultLevel = (): LogLevel => {\n const envLevel = getEnvironmentVariable(\"LOG_LEVEL\");\n const parsedLevel = parseLogLevel(envLevel);\n if (parsedLevel !== undefined) return parsedLevel;\n\n const debugFlag = getEnvironmentVariable(\"VERYFRONT_DEBUG\");\n if (debugFlag === \"1\" || debugFlag === \"true\") return LogLevel.DEBUG;\n\n return LogLevel.INFO;\n};\n\nconst trackedLoggers = new Set<ConsoleLogger>();\n\nfunction createLogger(prefix: string): ConsoleLogger {\n const logger = new ConsoleLogger(prefix);\n trackedLoggers.add(logger);\n return logger;\n}\n\nexport const cliLogger = createLogger(\"CLI\");\nexport const serverLogger = createLogger(\"SERVER\");\nexport const rendererLogger = createLogger(\"RENDERER\");\nexport const bundlerLogger = createLogger(\"BUNDLER\");\nexport const agentLogger = createLogger(\"AGENT\");\n\nexport const logger = createLogger(\"VERYFRONT\");\n\ntype LoggerResetOptions = {\n restoreConsole?: boolean;\n};\n\nexport function __loggerResetForTests(options: LoggerResetOptions = {}): void {\n const updatedLevel = resolveLogLevel(true);\n for (const instance of trackedLoggers) {\n instance.setLevel(updatedLevel);\n }\n\n if (options.restoreConsole) {\n console.debug = originalConsole.debug;\n console.log = originalConsole.log;\n console.warn = originalConsole.warn;\n console.error = originalConsole.error;\n }\n}\n", "/**\n * Cost Tracking System\n *\n * Track API usage and costs for monitoring and billing.\n */\n\nimport type { AgentContext, AgentResponse } from \"../../types/agent.ts\";\nimport { agentLogger } from \"@veryfront/utils/logger/logger.ts\";\n\nexport interface CostConfig {\n /** Provider pricing (per 1M tokens) */\n pricing: {\n [provider: string]: {\n input: number; // Cost per 1M input tokens\n output: number; // Cost per 1M output tokens\n };\n };\n\n /** Budget limits */\n limits?: {\n daily?: number;\n monthly?: number;\n };\n\n /** Callback when limit exceeded */\n onLimitExceeded?: (usage: UsageSummary) => void;\n}\n\nexport interface UsageRecord {\n /** Timestamp */\n timestamp: number;\n\n /** Agent ID */\n agentId: string;\n\n /** Model used */\n model: string;\n\n /** Provider */\n provider: string;\n\n /** Token usage */\n tokens: {\n prompt: number;\n completion: number;\n total: number;\n };\n\n /** Estimated cost */\n cost: number;\n\n /** User/session identifier */\n userId?: string;\n}\n\nexport interface UsageSummary {\n /** Total requests */\n requests: number;\n\n /** Total tokens */\n tokens: {\n prompt: number;\n completion: number;\n total: number;\n };\n\n /** Total cost */\n cost: number;\n\n /** Cost by provider */\n byProvider: Record<\n string,\n {\n requests: number;\n tokens: number;\n cost: number;\n }\n >;\n\n /** Period */\n period: {\n start: number;\n end: number;\n };\n}\n\n/**\n * Cost Tracker\n */\nclass CostTracker {\n private records: UsageRecord[] = [];\n private config: CostConfig;\n private dailyTotal = 0;\n private monthlyTotal = 0;\n private lastDayReset = Date.now();\n private lastMonthReset = Date.now();\n private resetInterval: ReturnType<typeof setInterval> | null = null;\n\n constructor(config: CostConfig) {\n this.config = config;\n this.startPeriodicReset();\n }\n\n /**\n * Track an agent response\n */\n track(\n agentId: string,\n model: string,\n response: AgentResponse,\n userId?: string,\n ): UsageRecord {\n if (!response.usage) {\n agentLogger.warn(\"No usage data in response, cannot track costs\");\n return this.createEmptyRecord(agentId, model);\n }\n\n // Parse provider from model string\n const provider = model.split(\"/\")[0] || \"unknown\";\n\n // Calculate cost\n const cost = this.calculateCost(\n provider,\n response.usage.promptTokens,\n response.usage.completionTokens,\n );\n\n // Create record\n const record: UsageRecord = {\n timestamp: Date.now(),\n agentId,\n model,\n provider,\n tokens: {\n prompt: response.usage.promptTokens,\n completion: response.usage.completionTokens,\n total: response.usage.totalTokens,\n },\n cost,\n userId,\n };\n\n // Add to records\n this.records.push(record);\n\n // Update totals\n this.dailyTotal += cost;\n this.monthlyTotal += cost;\n\n // Check limits\n this.checkLimits();\n\n return record;\n }\n\n /**\n * Calculate cost based on token usage\n */\n private calculateCost(\n provider: string,\n inputTokens: number,\n outputTokens: number,\n ): number {\n const pricing = this.config.pricing[provider];\n\n if (!pricing) {\n agentLogger.warn(`No pricing configured for provider: ${provider}`);\n return 0;\n }\n\n const inputCost = (inputTokens / 1_000_000) * pricing.input;\n const outputCost = (outputTokens / 1_000_000) * pricing.output;\n\n return inputCost + outputCost;\n }\n\n /**\n * Get usage summary for a period\n */\n getSummary(startTime?: number, endTime?: number): UsageSummary {\n const start = startTime || 0;\n const end = endTime || Date.now();\n\n const relevantRecords = this.records.filter(\n (r) => r.timestamp >= start && r.timestamp <= end,\n );\n\n const summary: UsageSummary = {\n requests: relevantRecords.length,\n tokens: {\n prompt: 0,\n completion: 0,\n total: 0,\n },\n cost: 0,\n byProvider: {},\n period: { start, end },\n };\n\n for (const record of relevantRecords) {\n summary.tokens.prompt += record.tokens.prompt;\n summary.tokens.completion += record.tokens.completion;\n summary.tokens.total += record.tokens.total;\n summary.cost += record.cost;\n\n if (!summary.byProvider[record.provider]) {\n summary.byProvider[record.provider] = {\n requests: 0,\n tokens: 0,\n cost: 0,\n };\n }\n\n const providerStats = summary.byProvider[record.provider]!;\n providerStats.requests++;\n providerStats.tokens += record.tokens.total;\n providerStats.cost += record.cost;\n }\n\n return summary;\n }\n\n /**\n * Get daily summary\n */\n getDailySummary(): UsageSummary {\n const now = Date.now();\n const dayStart = now - 24 * 60 * 60 * 1000;\n return this.getSummary(dayStart, now);\n }\n\n /**\n * Get monthly summary\n */\n getMonthlySummary(): UsageSummary {\n const now = Date.now();\n const monthStart = now - 30 * 24 * 60 * 60 * 1000;\n return this.getSummary(monthStart, now);\n }\n\n /**\n * Check if limits are exceeded\n */\n private checkLimits(): void {\n if (this.config.limits?.daily && this.dailyTotal > this.config.limits.daily) {\n if (this.config.onLimitExceeded) {\n this.config.onLimitExceeded(this.getDailySummary());\n }\n }\n\n if (\n this.config.limits?.monthly &&\n this.monthlyTotal > this.config.limits.monthly\n ) {\n if (this.config.onLimitExceeded) {\n this.config.onLimitExceeded(this.getMonthlySummary());\n }\n }\n }\n\n private startPeriodicReset(): void {\n this.resetInterval = setInterval(() => {\n const now = Date.now();\n\n if (now - this.lastDayReset >= 24 * 60 * 60 * 1000) {\n this.dailyTotal = 0;\n this.lastDayReset = now;\n }\n\n if (now - this.lastMonthReset >= 30 * 24 * 60 * 60 * 1000) {\n this.monthlyTotal = 0;\n this.lastMonthReset = now;\n }\n }, 60000);\n }\n\n destroy(): void {\n if (this.resetInterval) {\n clearInterval(this.resetInterval);\n this.resetInterval = null;\n }\n this.records = [];\n }\n\n /**\n * Create empty record\n */\n private createEmptyRecord(agentId: string, model: string): UsageRecord {\n return {\n timestamp: Date.now(),\n agentId,\n model,\n provider: model.split(\"/\")[0] || \"unknown\",\n tokens: { prompt: 0, completion: 0, total: 0 },\n cost: 0,\n };\n }\n\n /**\n * Get all records\n */\n getAllRecords(): UsageRecord[] {\n return [...this.records];\n }\n\n /**\n * Clear all records\n */\n clear(): void {\n this.records = [];\n this.dailyTotal = 0;\n this.monthlyTotal = 0;\n }\n}\n\n/**\n * Create a cost tracker\n */\nexport function createCostTracker(config: CostConfig) {\n const tracker = new CostTracker(config);\n\n return {\n /**\n * Track agent response\n */\n track(\n agentId: string,\n model: string,\n response: AgentResponse,\n userId?: string,\n ): UsageRecord {\n return tracker.track(agentId, model, response, userId);\n },\n\n /**\n * Get usage summary\n */\n getSummary(startTime?: number, endTime?: number): UsageSummary {\n return tracker.getSummary(startTime, endTime);\n },\n\n /**\n * Get daily summary\n */\n getDailySummary(): UsageSummary {\n return tracker.getDailySummary();\n },\n\n /**\n * Get monthly summary\n */\n getMonthlySummary(): UsageSummary {\n return tracker.getMonthlySummary();\n },\n\n /**\n * Get all records\n */\n getAllRecords(): UsageRecord[] {\n return tracker.getAllRecords();\n },\n\n /**\n * Clear all data\n */\n clear(): void {\n tracker.clear();\n },\n };\n}\n\n/**\n * Cost tracking middleware for agents\n */\nexport function costTrackingMiddleware(config: CostConfig) {\n const tracker = createCostTracker(config);\n\n return async (\n context: AgentContext,\n next: () => Promise<AgentResponse>,\n ): Promise<AgentResponse> => {\n const result = await next();\n\n // Track cost\n tracker.track(\n context.agentId,\n context.model || \"unknown\",\n result,\n (context.data as Record<string, unknown>)?.userId as string | undefined,\n );\n\n return result;\n };\n}\n", "import type { AgentContext, AgentResponse } from \"../../types/agent.ts\";\nimport { createError, toError } from \"../../../core/errors/veryfront-error.ts\";\n/**\n * Input Validation and Output Filtering\n *\n * Security features to prevent prompt injection, data leakage, and harmful content.\n */\n\nexport interface SecurityConfig {\n /** Input validation rules */\n input?: {\n /** Maximum input length */\n maxLength?: number;\n\n /** Blocked patterns (regex) */\n blockedPatterns?: RegExp[];\n\n /** Sanitize input */\n sanitize?: boolean;\n\n /** Custom validator */\n validate?: (input: string) => boolean | Promise<boolean>;\n };\n\n /** Output filtering rules */\n output?: {\n /** Blocked patterns in output */\n blockedPatterns?: RegExp[];\n\n /** Filter PII (Personal Identifiable Information) */\n filterPII?: boolean;\n\n /** Custom filter */\n filter?: (output: string) => string | Promise<string>;\n };\n\n /** Action when violation detected */\n onViolation?: (violation: SecurityViolation) => void;\n}\n\nexport interface SecurityViolation {\n /** Violation type */\n type: \"input\" | \"output\";\n\n /** Violation reason */\n reason: string;\n\n /** Original content */\n content: string;\n\n /** Matched pattern (if any) */\n pattern?: RegExp;\n}\n\n/**\n * Common blocked patterns\n */\nexport const COMMON_BLOCKED_PATTERNS = {\n /** Prompt injection attempts */\n promptInjection: [\n /ignore\\s+previous\\s+instructions/i,\n /ignore\\s+all\\s+previous\\s+prompts/i,\n /you\\s+are\\s+now\\s+a/i,\n /pretend\\s+you\\s+are/i,\n /system:\\s*/i,\n /<\\|im_start\\|>/i,\n /<\\|im_end\\|>/i,\n ],\n\n /** Potential data exfiltration */\n dataExfiltration: [\n /password/i,\n /api[_\\s-]?key/i,\n /secret/i,\n /token/i,\n /credit\\s+card/i,\n ],\n\n /** SQL injection patterns */\n sqlInjection: [\n /(\\bUNION\\b|\\bSELECT\\b).*\\bFROM\\b/i,\n /;\\s*(DROP|DELETE|UPDATE|INSERT)/i,\n ],\n\n /** XSS patterns */\n xss: [\n /<script[^>]*>.*?<\\/script>/gi,\n /javascript:/i,\n /on\\w+\\s*=/i, // Event handlers\n ],\n};\n\n/**\n * PII patterns (email, phone, SSN, etc.)\n */\nconst PII_PATTERNS = {\n email: /\\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,}\\b/gi,\n phone: /\\b(\\+\\d{1,3}[-.\\s]?)?\\(?\\d{3}\\)?[-.\\s]?\\d{3}[-.\\s]?\\d{4}\\b/g,\n ssn: /\\b\\d{3}-\\d{2}-\\d{4}\\b/g,\n creditCard: /\\b\\d{4}[-\\s]?\\d{4}[-\\s]?\\d{4}[-\\s]?\\d{4}\\b/g,\n};\n\n/**\n * Input Validator\n */\nexport class InputValidator {\n private config: SecurityConfig[\"input\"];\n\n constructor(config?: SecurityConfig[\"input\"]) {\n this.config = config || {};\n }\n\n /**\n * Validate input\n */\n async validate(input: string): Promise<{\n valid: boolean;\n sanitized?: string;\n violations: SecurityViolation[];\n }> {\n const violations: SecurityViolation[] = [];\n\n // Check length\n if (this.config?.maxLength && input.length > this.config.maxLength) {\n violations.push({\n type: \"input\",\n reason: `Input exceeds maximum length of ${this.config.maxLength}`,\n content: input.substring(0, 100) + \"...\",\n });\n }\n\n // Check blocked patterns\n if (this.config?.blockedPatterns) {\n for (const pattern of this.config.blockedPatterns) {\n if (pattern.test(input)) {\n violations.push({\n type: \"input\",\n reason: \"Input matches blocked pattern\",\n content: input,\n pattern,\n });\n }\n }\n }\n\n // Custom validation\n if (this.config?.validate) {\n const customValid = await this.config.validate(input);\n if (!customValid) {\n violations.push({\n type: \"input\",\n reason: \"Custom validation failed\",\n content: input,\n });\n }\n }\n\n // Sanitize if requested\n let sanitized = input;\n if (this.config?.sanitize) {\n sanitized = this.sanitizeInput(input);\n }\n\n return {\n valid: violations.length === 0,\n sanitized: this.config?.sanitize ? sanitized : undefined,\n violations,\n };\n }\n\n /**\n * Sanitize input (remove potentially harmful content)\n */\n private sanitizeInput(input: string): string {\n let sanitized = input;\n\n // Remove script tags\n sanitized = sanitized.replace(/<script[^>]*>.*?<\\/script>/gi, \"\");\n\n // Remove event handlers\n sanitized = sanitized.replace(/on\\w+\\s*=\\s*[\"'][^\"']*[\"']/gi, \"\");\n\n // Remove javascript: protocol\n sanitized = sanitized.replace(/javascript:/gi, \"\");\n\n return sanitized;\n }\n}\n\n/**\n * Output Filter\n */\nexport class OutputFilter {\n private config: SecurityConfig[\"output\"];\n\n constructor(config?: SecurityConfig[\"output\"]) {\n this.config = config || {};\n }\n\n /**\n * Filter output\n */\n async filter(output: string): Promise<{\n filtered: string;\n violations: SecurityViolation[];\n }> {\n const violations: SecurityViolation[] = [];\n let filtered = output;\n\n // Check blocked patterns\n if (this.config?.blockedPatterns) {\n for (const pattern of this.config.blockedPatterns) {\n if (pattern.test(filtered)) {\n violations.push({\n type: \"output\",\n reason: \"Output contains blocked pattern\",\n content: filtered,\n pattern,\n });\n\n // Redact matched content\n filtered = filtered.replace(pattern, \"[REDACTED]\");\n }\n }\n }\n\n // Filter PII\n if (this.config?.filterPII) {\n filtered = this.filterPII(filtered);\n }\n\n // Custom filter\n if (this.config?.filter) {\n filtered = await this.config.filter(filtered);\n }\n\n return { filtered, violations };\n }\n\n /**\n * Filter PII from output\n */\n private filterPII(output: string): string {\n let filtered = output;\n\n // Replace email addresses\n filtered = filtered.replace(PII_PATTERNS.email, \"[EMAIL]\");\n\n // Replace phone numbers\n filtered = filtered.replace(PII_PATTERNS.phone, \"[PHONE]\");\n\n // Replace SSN\n filtered = filtered.replace(PII_PATTERNS.ssn, \"[SSN]\");\n\n // Replace credit card numbers\n filtered = filtered.replace(PII_PATTERNS.creditCard, \"[CREDIT_CARD]\");\n\n return filtered;\n }\n}\n\n/**\n * Create security middleware for agents\n */\nexport function securityMiddleware(config: SecurityConfig) {\n const inputValidator = new InputValidator(config.input);\n const outputFilter = new OutputFilter(config.output);\n\n return async (\n context: AgentContext,\n next: () => Promise<AgentResponse>,\n ): Promise<AgentResponse> => {\n // Validate input\n const inputString = typeof context.input === \"string\"\n ? context.input\n : JSON.stringify(context.input);\n\n const inputValidation = await inputValidator.validate(inputString);\n\n if (!inputValidation.valid) {\n // Report violations\n inputValidation.violations.forEach((v) => {\n if (config.onViolation) {\n config.onViolation(v);\n }\n });\n\n const firstViolation = inputValidation.violations[0];\n throw toError(createError({\n type: \"agent\",\n message: `Input validation failed: ${firstViolation?.reason || \"Unknown reason\"}`,\n }));\n }\n\n // Execute with sanitized input if applicable\n if (inputValidation.sanitized) {\n context.input = inputValidation.sanitized;\n }\n\n // Execute\n const result = await next();\n\n // Filter output\n const outputFiltering = await outputFilter.filter(result.text);\n\n if (outputFiltering.violations.length > 0) {\n // Report violations\n outputFiltering.violations.forEach((v) => {\n if (config.onViolation) {\n config.onViolation(v);\n }\n });\n }\n\n // Return filtered result\n return {\n ...result,\n text: outputFiltering.filtered,\n };\n };\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["logger"]
|
|
7
7
|
}
|
package/dist/ai/react.js
CHANGED
|
@@ -220,44 +220,57 @@ async function handleStreamingResponse(body, callbacks) {
|
|
|
220
220
|
const toolCalls = /* @__PURE__ */ new Map();
|
|
221
221
|
const reasoningBlocks = /* @__PURE__ */ new Map();
|
|
222
222
|
const messageParts = [];
|
|
223
|
+
let partOrderCounter = 0;
|
|
223
224
|
const buildCurrentParts = () => {
|
|
224
|
-
const
|
|
225
|
+
const orderedParts = [];
|
|
225
226
|
for (const [, block] of textBlocks) {
|
|
226
|
-
if (block.text) {
|
|
227
|
-
|
|
227
|
+
if (block.text && block.order !== null) {
|
|
228
|
+
orderedParts.push({
|
|
229
|
+
order: block.order,
|
|
230
|
+
part: { type: "text", text: block.text, state: block.state }
|
|
231
|
+
});
|
|
228
232
|
}
|
|
229
233
|
}
|
|
230
234
|
for (const [, reasoning] of reasoningBlocks) {
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
+
orderedParts.push({
|
|
236
|
+
order: reasoning.order,
|
|
237
|
+
part: {
|
|
238
|
+
type: "reasoning",
|
|
239
|
+
text: reasoning.text,
|
|
240
|
+
state: reasoning.isComplete ? "done" : "streaming"
|
|
241
|
+
}
|
|
235
242
|
});
|
|
236
243
|
}
|
|
237
244
|
for (const [, tool] of toolCalls) {
|
|
238
245
|
if (tool.dynamic) {
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
246
|
+
orderedParts.push({
|
|
247
|
+
order: tool.order,
|
|
248
|
+
part: {
|
|
249
|
+
type: "dynamic-tool",
|
|
250
|
+
toolCallId: tool.toolCallId,
|
|
251
|
+
toolName: tool.toolName,
|
|
252
|
+
state: tool.state,
|
|
253
|
+
input: tool.input,
|
|
254
|
+
output: tool.output,
|
|
255
|
+
errorText: tool.error
|
|
256
|
+
}
|
|
247
257
|
});
|
|
248
258
|
} else {
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
259
|
+
orderedParts.push({
|
|
260
|
+
order: tool.order,
|
|
261
|
+
part: {
|
|
262
|
+
type: `tool-${tool.toolName}`,
|
|
263
|
+
toolCallId: tool.toolCallId,
|
|
264
|
+
toolName: tool.toolName,
|
|
265
|
+
state: tool.state,
|
|
266
|
+
input: tool.input,
|
|
267
|
+
output: tool.output,
|
|
268
|
+
errorText: tool.error
|
|
269
|
+
}
|
|
257
270
|
});
|
|
258
271
|
}
|
|
259
272
|
}
|
|
260
|
-
return
|
|
273
|
+
return orderedParts.sort((a, b) => a.order - b.order).map((p) => p.part);
|
|
261
274
|
};
|
|
262
275
|
while (true) {
|
|
263
276
|
const { done, value } = await reader.read();
|
|
@@ -285,17 +298,20 @@ async function handleStreamingResponse(body, callbacks) {
|
|
|
285
298
|
break;
|
|
286
299
|
case "text-start":
|
|
287
300
|
currentTextId = parsed.id || generateClientId("text");
|
|
288
|
-
textBlocks.set(currentTextId, { text: "", state: "streaming" });
|
|
301
|
+
textBlocks.set(currentTextId, { text: "", state: "streaming", order: null });
|
|
289
302
|
break;
|
|
290
303
|
case "text-delta": {
|
|
291
304
|
const textId = parsed.id || currentTextId || "default";
|
|
292
|
-
const delta = parsed.delta || "";
|
|
305
|
+
const delta = parsed.textDelta || parsed.delta || "";
|
|
293
306
|
if (!textBlocks.has(textId)) {
|
|
294
|
-
textBlocks.set(textId, { text: "", state: "streaming" });
|
|
307
|
+
textBlocks.set(textId, { text: "", state: "streaming", order: null });
|
|
295
308
|
currentTextId = textId;
|
|
296
309
|
}
|
|
297
310
|
const block = textBlocks.get(textId);
|
|
298
311
|
block.text += delta;
|
|
312
|
+
if (block.order === null) {
|
|
313
|
+
block.order = partOrderCounter++;
|
|
314
|
+
}
|
|
299
315
|
onUpdate?.(buildCurrentParts(), messageId);
|
|
300
316
|
break;
|
|
301
317
|
}
|
|
@@ -317,7 +333,8 @@ async function handleStreamingResponse(body, callbacks) {
|
|
|
317
333
|
toolName: parsed.toolName || "unknown",
|
|
318
334
|
inputText: "",
|
|
319
335
|
state: "input-streaming",
|
|
320
|
-
dynamic: parsed.dynamic === true
|
|
336
|
+
dynamic: parsed.dynamic === true,
|
|
337
|
+
order: partOrderCounter++
|
|
321
338
|
};
|
|
322
339
|
toolCalls.set(toolCallId, toolCall);
|
|
323
340
|
onUpdate?.(buildCurrentParts(), messageId);
|
|
@@ -416,7 +433,8 @@ async function handleStreamingResponse(body, callbacks) {
|
|
|
416
433
|
const reasoning = {
|
|
417
434
|
id: reasoningId,
|
|
418
435
|
text: "",
|
|
419
|
-
isComplete: false
|
|
436
|
+
isComplete: false,
|
|
437
|
+
order: partOrderCounter++
|
|
420
438
|
};
|
|
421
439
|
reasoningBlocks.set(reasoningId, reasoning);
|
|
422
440
|
onUpdate?.(buildCurrentParts(), messageId);
|
|
@@ -446,8 +464,9 @@ async function handleStreamingResponse(body, callbacks) {
|
|
|
446
464
|
break;
|
|
447
465
|
}
|
|
448
466
|
case "finish": {
|
|
449
|
-
|
|
450
|
-
|
|
467
|
+
const finalParts = buildCurrentParts();
|
|
468
|
+
if (finalParts.length > 0) {
|
|
469
|
+
onMessage(createAssistantMessage(messageId, finalParts));
|
|
451
470
|
}
|
|
452
471
|
break;
|
|
453
472
|
}
|