ai-props 2.1.3 → 2.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (105) hide show
  1. package/.dev.vars +2 -0
  2. package/.turbo/turbo-build.log +1 -1
  3. package/CHANGELOG.md +20 -0
  4. package/README.md +2 -0
  5. package/dist/ai.d.ts.map +1 -1
  6. package/dist/ai.js +4 -4
  7. package/dist/ai.js.map +1 -1
  8. package/dist/cascade.d.ts +329 -0
  9. package/dist/cascade.d.ts.map +1 -0
  10. package/dist/cascade.js +522 -0
  11. package/dist/cascade.js.map +1 -0
  12. package/dist/client.d.ts +233 -0
  13. package/dist/client.d.ts.map +1 -0
  14. package/dist/client.js +191 -0
  15. package/dist/client.js.map +1 -0
  16. package/dist/durable-cascade.d.ts +280 -0
  17. package/dist/durable-cascade.d.ts.map +1 -0
  18. package/dist/durable-cascade.js +469 -0
  19. package/dist/durable-cascade.js.map +1 -0
  20. package/dist/event-bridge.d.ts +257 -0
  21. package/dist/event-bridge.d.ts.map +1 -0
  22. package/dist/event-bridge.js +317 -0
  23. package/dist/event-bridge.js.map +1 -0
  24. package/dist/generate.d.ts.map +1 -1
  25. package/dist/generate.js +12 -6
  26. package/dist/generate.js.map +1 -1
  27. package/dist/hoc.d.ts.map +1 -1
  28. package/dist/hoc.js +13 -13
  29. package/dist/hoc.js.map +1 -1
  30. package/dist/hono-jsx.d.ts +208 -0
  31. package/dist/hono-jsx.d.ts.map +1 -0
  32. package/dist/hono-jsx.js +459 -0
  33. package/dist/hono-jsx.js.map +1 -0
  34. package/dist/index.d.ts +1 -0
  35. package/dist/index.d.ts.map +1 -1
  36. package/dist/index.js +2 -0
  37. package/dist/index.js.map +1 -1
  38. package/dist/mdx-types.d.ts +152 -0
  39. package/dist/mdx-types.d.ts.map +1 -0
  40. package/dist/mdx-types.js +9 -0
  41. package/dist/mdx-types.js.map +1 -0
  42. package/dist/mdx-utils.d.ts +106 -0
  43. package/dist/mdx-utils.d.ts.map +1 -0
  44. package/dist/mdx-utils.js +384 -0
  45. package/dist/mdx-utils.js.map +1 -0
  46. package/dist/mdx.d.ts +230 -0
  47. package/dist/mdx.d.ts.map +1 -0
  48. package/dist/mdx.js +820 -0
  49. package/dist/mdx.js.map +1 -0
  50. package/dist/rpc.d.ts +313 -0
  51. package/dist/rpc.d.ts.map +1 -0
  52. package/dist/rpc.js +359 -0
  53. package/dist/rpc.js.map +1 -0
  54. package/dist/streaming.d.ts +199 -0
  55. package/dist/streaming.d.ts.map +1 -0
  56. package/dist/streaming.js +402 -0
  57. package/dist/streaming.js.map +1 -0
  58. package/dist/validate.d.ts.map +1 -1
  59. package/dist/validate.js +11 -13
  60. package/dist/validate.js.map +1 -1
  61. package/dist/worker.d.ts +270 -0
  62. package/dist/worker.d.ts.map +1 -0
  63. package/dist/worker.js +405 -0
  64. package/dist/worker.js.map +1 -0
  65. package/package.json +39 -13
  66. package/src/ai.ts +12 -31
  67. package/src/cascade.ts +795 -0
  68. package/src/client.ts +440 -0
  69. package/src/durable-cascade.ts +743 -0
  70. package/src/event-bridge.ts +478 -0
  71. package/src/generate.ts +14 -12
  72. package/src/hoc.ts +15 -19
  73. package/src/hono-jsx.ts +675 -0
  74. package/src/index.ts +30 -0
  75. package/src/mdx-types.ts +169 -0
  76. package/src/mdx-utils.ts +437 -0
  77. package/src/mdx.ts +1008 -0
  78. package/src/rpc.ts +614 -0
  79. package/src/streaming.ts +618 -0
  80. package/src/validate.ts +15 -29
  81. package/src/worker.ts +547 -0
  82. package/test/cascade.test.ts +338 -0
  83. package/test/durable-cascade.test.ts +319 -0
  84. package/test/event-bridge.test.ts +351 -0
  85. package/test/generate.test.ts +6 -16
  86. package/test/mdx.test.ts +817 -0
  87. package/test/worker/capnweb-rpc.test.ts +1084 -0
  88. package/test/worker/full-flow.integration.test.ts +1463 -0
  89. package/test/worker/hono-jsx.test.ts +1258 -0
  90. package/test/worker/mdx-parsing.test.ts +1148 -0
  91. package/test/worker/setup.ts +56 -0
  92. package/test/worker.test.ts +595 -0
  93. package/tsconfig.json +2 -1
  94. package/vitest.config.js +6 -0
  95. package/vitest.config.ts +15 -1
  96. package/vitest.workers.config.ts +58 -0
  97. package/wrangler.jsonc +27 -0
  98. package/LICENSE +0 -21
  99. package/src/ai.js +0 -198
  100. package/src/cache.js +0 -182
  101. package/src/generate.js +0 -220
  102. package/src/hoc.js +0 -235
  103. package/src/index.js +0 -20
  104. package/src/types.js +0 -6
  105. package/src/validate.js +0 -252
@@ -0,0 +1,522 @@
1
+ /**
2
+ * Cascade Executor - Code -> Generative -> Agentic -> Human escalation pattern for AI Props
3
+ *
4
+ * Implements a tiered execution strategy that tries deterministic code first,
5
+ * then escalates to AI-powered prop generation, and finally to human-in-the-loop
6
+ * if all automated approaches fail.
7
+ *
8
+ * ## Features
9
+ *
10
+ * - **Tier Escalation**: Code -> Generative -> Agentic -> Human pattern
11
+ * - **Per-tier Timeouts**: Configurable timeouts for each tier
12
+ * - **5W+H Audit Events**: Who, What, When, Where, Why, How event emission
13
+ * - **Context Propagation**: Share context across tiers
14
+ * - **Retry Support**: Configurable retries per tier with backoff
15
+ * - **AI Gateway Support**: Configuration helpers for Cloudflare AI Gateway
16
+ *
17
+ * ## Basic Usage
18
+ *
19
+ * @example
20
+ * ```typescript
21
+ * import { CascadeExecutor, createCascadeStep } from 'ai-props/worker'
22
+ *
23
+ * const generateTitleCascade = new CascadeExecutor({
24
+ * tiers: {
25
+ * code: {
26
+ * name: 'template-title',
27
+ * execute: async (input) => {
28
+ * if (input.template) return { title: input.template }
29
+ * throw new Error('No template')
30
+ * }
31
+ * },
32
+ * generative: {
33
+ * name: 'ai-title',
34
+ * execute: async (input) => {
35
+ * const result = await generateProps({
36
+ * schema: { title: 'A compelling title' },
37
+ * context: input
38
+ * })
39
+ * return result.props
40
+ * }
41
+ * }
42
+ * }
43
+ * })
44
+ *
45
+ * const result = await generateTitleCascade.execute({ topic: 'AI' })
46
+ * console.log(result.value) // { title: '...' }
47
+ * console.log(result.tier) // 'code' or 'generative'
48
+ * ```
49
+ *
50
+ * @packageDocumentation
51
+ */
52
+ // ============================================================================
53
+ // Constants
54
+ // ============================================================================
55
+ /**
56
+ * Ordered list of capability tiers
57
+ */
58
+ export const TIER_ORDER = ['code', 'generative', 'agentic', 'human'];
59
+ /**
60
+ * Default timeouts per tier (in milliseconds)
61
+ */
62
+ export const DEFAULT_TIER_TIMEOUTS = {
63
+ code: 5000, // 5 seconds
64
+ generative: 30000, // 30 seconds
65
+ agentic: 300000, // 5 minutes
66
+ human: 86400000, // 24 hours
67
+ };
68
+ // ============================================================================
69
+ // Errors
70
+ // ============================================================================
71
+ /**
72
+ * Error thrown when cascade times out
73
+ */
74
+ export class CascadeTimeoutError extends Error {
75
+ timeout;
76
+ elapsed;
77
+ constructor(timeout, elapsed) {
78
+ super(`Cascade timed out after ${elapsed}ms (limit: ${timeout}ms)`);
79
+ this.name = 'CascadeTimeoutError';
80
+ this.timeout = timeout;
81
+ this.elapsed = elapsed;
82
+ }
83
+ }
84
+ /**
85
+ * Error thrown when a tier is skipped
86
+ */
87
+ export class TierSkippedError extends Error {
88
+ tier;
89
+ reason;
90
+ constructor(tier, reason) {
91
+ super(`Tier '${tier}' was skipped: ${reason}`);
92
+ this.name = 'TierSkippedError';
93
+ this.tier = tier;
94
+ this.reason = reason;
95
+ }
96
+ }
97
+ /**
98
+ * Error thrown when all tiers fail
99
+ */
100
+ export class AllTiersFailedError extends Error {
101
+ history;
102
+ constructor(history) {
103
+ super('All cascade tiers failed');
104
+ this.name = 'AllTiersFailedError';
105
+ this.history = history;
106
+ }
107
+ }
108
+ // ============================================================================
109
+ // Helper Functions
110
+ // ============================================================================
111
+ /**
112
+ * Create a cascade context for tracing
113
+ */
114
+ export function createCascadeContext(options) {
115
+ return {
116
+ correlationId: `cascade-${Date.now()}-${Math.random().toString(36).slice(2)}`,
117
+ name: options.name,
118
+ steps: [],
119
+ };
120
+ }
121
+ /**
122
+ * Record a step in the cascade context
123
+ */
124
+ export function recordStep(context, tier, meta) {
125
+ const step = {
126
+ id: `${tier}-${Date.now()}`,
127
+ tier,
128
+ status: 'running',
129
+ startTime: Date.now(),
130
+ };
131
+ context.steps.push(step);
132
+ return {
133
+ complete: () => {
134
+ step.status = 'completed';
135
+ step.endTime = Date.now();
136
+ },
137
+ fail: (error) => {
138
+ step.status = 'failed';
139
+ step.endTime = Date.now();
140
+ step.error = error.message;
141
+ },
142
+ };
143
+ }
144
+ // ============================================================================
145
+ // CascadeExecutor
146
+ // ============================================================================
147
+ /**
148
+ * CascadeExecutor implements the code -> generative -> agentic -> human pattern
149
+ *
150
+ * This is the base executor for cascade patterns, suitable for both
151
+ * synchronous and worker contexts.
152
+ */
153
+ export class CascadeExecutor {
154
+ config;
155
+ actor;
156
+ cascadeName;
157
+ constructor(config) {
158
+ this.config = config;
159
+ this.actor = config.actor || 'system';
160
+ this.cascadeName = config.cascadeName || 'cascade';
161
+ }
162
+ /**
163
+ * Execute the cascade
164
+ */
165
+ async execute(input) {
166
+ const startTime = Date.now();
167
+ const context = createCascadeContext({ name: this.cascadeName });
168
+ const history = [];
169
+ const skippedTiers = [];
170
+ const tierDurations = {};
171
+ const previousErrors = [];
172
+ // Emit cascade start event
173
+ this.emitEvent({
174
+ who: this.actor,
175
+ what: 'cascade-start',
176
+ when: startTime,
177
+ where: this.cascadeName,
178
+ how: {
179
+ status: 'running',
180
+ metadata: { input },
181
+ },
182
+ });
183
+ // Set up total timeout if configured
184
+ let totalTimeoutId;
185
+ let totalTimedOut = false;
186
+ const totalTimeoutPromise = new Promise((_, reject) => {
187
+ if (this.config.totalTimeout) {
188
+ totalTimeoutId = setTimeout(() => {
189
+ totalTimedOut = true;
190
+ reject(new CascadeTimeoutError(this.config.totalTimeout, Date.now() - startTime));
191
+ }, this.config.totalTimeout);
192
+ }
193
+ });
194
+ try {
195
+ // Execute tiers in order
196
+ for (const tier of TIER_ORDER) {
197
+ if (totalTimedOut)
198
+ break;
199
+ const handler = this.config.tiers[tier];
200
+ // Check if tier should be skipped
201
+ if (!handler) {
202
+ skippedTiers.push(tier);
203
+ continue;
204
+ }
205
+ // Check skip condition
206
+ const skipCondition = this.config.skipConditions?.[tier];
207
+ if (skipCondition && skipCondition(input)) {
208
+ skippedTiers.push(tier);
209
+ continue;
210
+ }
211
+ // Execute tier
212
+ const tierResult = await this.executeTier(tier, handler, input, context, previousErrors, startTime, totalTimeoutPromise);
213
+ history.push(tierResult);
214
+ tierDurations[tier] = tierResult.duration;
215
+ // If tier succeeded, we're done
216
+ if (tierResult.success && tierResult.value !== undefined) {
217
+ if (totalTimeoutId)
218
+ clearTimeout(totalTimeoutId);
219
+ const endTime = Date.now();
220
+ this.emitEvent({
221
+ who: this.actor,
222
+ what: 'cascade-complete',
223
+ when: endTime,
224
+ where: this.cascadeName,
225
+ how: {
226
+ status: 'completed',
227
+ duration: endTime - startTime,
228
+ metadata: { tier, value: tierResult.value },
229
+ },
230
+ });
231
+ return {
232
+ value: tierResult.value,
233
+ tier,
234
+ history,
235
+ skippedTiers,
236
+ context,
237
+ metrics: {
238
+ totalDuration: endTime - startTime,
239
+ tierDurations,
240
+ },
241
+ };
242
+ }
243
+ // Record error for next tier
244
+ if (tierResult.error) {
245
+ previousErrors.push({
246
+ tier,
247
+ error: tierResult.error.message,
248
+ });
249
+ }
250
+ }
251
+ // Check if we timed out
252
+ if (totalTimedOut) {
253
+ if (totalTimeoutId)
254
+ clearTimeout(totalTimeoutId);
255
+ throw new CascadeTimeoutError(this.config.totalTimeout, Date.now() - startTime);
256
+ }
257
+ // All tiers failed
258
+ if (totalTimeoutId)
259
+ clearTimeout(totalTimeoutId);
260
+ throw new AllTiersFailedError(history);
261
+ }
262
+ catch (error) {
263
+ if (totalTimeoutId)
264
+ clearTimeout(totalTimeoutId);
265
+ const endTime = Date.now();
266
+ this.emitEvent({
267
+ who: this.actor,
268
+ what: 'cascade-failed',
269
+ when: endTime,
270
+ where: this.cascadeName,
271
+ why: error instanceof Error ? error.message : String(error),
272
+ how: {
273
+ status: 'failed',
274
+ duration: endTime - startTime,
275
+ },
276
+ });
277
+ throw error;
278
+ }
279
+ }
280
+ /**
281
+ * Execute a single tier with timeout and retry support
282
+ */
283
+ async executeTier(tier, handler, input, cascadeContext, previousErrors, cascadeStartTime, totalTimeoutPromise) {
284
+ const tierStartTime = Date.now();
285
+ // Record step start
286
+ const step = recordStep(cascadeContext, tier, {
287
+ actor: this.actor,
288
+ action: `execute-${tier}`,
289
+ });
290
+ // Emit tier start event
291
+ this.emitEvent({
292
+ who: this.actor,
293
+ what: `tier-${tier}-execute`,
294
+ when: tierStartTime,
295
+ where: this.cascadeName,
296
+ how: {
297
+ status: 'running',
298
+ metadata: { tier },
299
+ },
300
+ });
301
+ // Determine timeout
302
+ const timeout = this.getTierTimeout(tier);
303
+ // Create tier context
304
+ const tierContext = {
305
+ correlationId: cascadeContext.correlationId,
306
+ tier,
307
+ input,
308
+ cascadeContext,
309
+ previousErrors: [...previousErrors],
310
+ };
311
+ // Get retry config
312
+ const retryConfig = this.config.retryConfig?.[tier];
313
+ const maxRetries = retryConfig?.maxRetries ?? 0;
314
+ let lastError;
315
+ let attempts = 0;
316
+ while (attempts <= maxRetries) {
317
+ attempts++;
318
+ try {
319
+ // Execute with timeout
320
+ const result = await this.executeWithTimeout(() => handler.execute(input, tierContext), timeout, totalTimeoutPromise);
321
+ const duration = Date.now() - tierStartTime;
322
+ // Mark step complete
323
+ step.complete();
324
+ // Emit tier success event
325
+ this.emitEvent({
326
+ who: this.actor,
327
+ what: `tier-${tier}-execute`,
328
+ when: Date.now(),
329
+ where: this.cascadeName,
330
+ how: {
331
+ status: 'completed',
332
+ duration,
333
+ metadata: { tier, result, attempts },
334
+ },
335
+ });
336
+ return {
337
+ tier,
338
+ success: true,
339
+ value: result,
340
+ duration,
341
+ attempts,
342
+ };
343
+ }
344
+ catch (error) {
345
+ lastError = error instanceof Error ? error : new Error(String(error));
346
+ // Check if it's a timeout error
347
+ const isTimeout = lastError.message.includes('timed out') || lastError.name === 'TimeoutError';
348
+ // If we've exhausted retries or it's a total timeout, stop
349
+ if (attempts > maxRetries || lastError instanceof CascadeTimeoutError) {
350
+ const duration = Date.now() - tierStartTime;
351
+ // Mark step failed
352
+ step.fail(lastError);
353
+ // Emit tier failure event
354
+ this.emitEvent({
355
+ who: this.actor,
356
+ what: `tier-${tier}-execute`,
357
+ when: Date.now(),
358
+ where: this.cascadeName,
359
+ why: lastError.message,
360
+ how: {
361
+ status: 'failed',
362
+ duration,
363
+ metadata: { tier, error: lastError.message, attempts },
364
+ },
365
+ });
366
+ // Emit escalation event if not last tier
367
+ const nextTier = this.getNextConfiguredTier(tier);
368
+ if (nextTier) {
369
+ this.emitEvent({
370
+ who: this.actor,
371
+ what: `escalate-to-${nextTier}`,
372
+ when: Date.now(),
373
+ where: this.cascadeName,
374
+ why: lastError.message,
375
+ how: {
376
+ status: 'running',
377
+ metadata: { fromTier: tier, toTier: nextTier },
378
+ },
379
+ });
380
+ }
381
+ return {
382
+ tier,
383
+ success: false,
384
+ error: lastError,
385
+ timedOut: isTimeout,
386
+ duration,
387
+ attempts,
388
+ };
389
+ }
390
+ // Wait before retry with exponential backoff
391
+ if (retryConfig) {
392
+ const delay = retryConfig.baseDelay * Math.pow(retryConfig.multiplier ?? 2, attempts - 1);
393
+ await this.sleep(delay);
394
+ }
395
+ }
396
+ }
397
+ // Should not reach here, but handle edge case
398
+ const duration = Date.now() - tierStartTime;
399
+ return {
400
+ tier,
401
+ success: false,
402
+ ...(lastError !== undefined && { error: lastError }),
403
+ duration,
404
+ attempts,
405
+ };
406
+ }
407
+ /**
408
+ * Execute a function with a timeout
409
+ */
410
+ async executeWithTimeout(fn, timeout, totalTimeoutPromise) {
411
+ const promises = [fn()];
412
+ // Add total timeout race
413
+ if (this.config.totalTimeout) {
414
+ promises.push(totalTimeoutPromise);
415
+ }
416
+ // Add tier timeout
417
+ if (timeout) {
418
+ promises.push(new Promise((_, reject) => {
419
+ setTimeout(() => {
420
+ const error = new Error(`Tier timed out after ${timeout}ms`);
421
+ error.name = 'TimeoutError';
422
+ reject(error);
423
+ }, timeout);
424
+ }));
425
+ }
426
+ return Promise.race(promises);
427
+ }
428
+ /**
429
+ * Get timeout for a tier
430
+ */
431
+ getTierTimeout(tier) {
432
+ if (this.config.timeouts?.[tier]) {
433
+ return this.config.timeouts[tier];
434
+ }
435
+ if (this.config.useDefaultTimeouts) {
436
+ return DEFAULT_TIER_TIMEOUTS[tier];
437
+ }
438
+ return undefined;
439
+ }
440
+ /**
441
+ * Get the next configured tier after the given tier
442
+ */
443
+ getNextConfiguredTier(currentTier) {
444
+ const currentIndex = TIER_ORDER.indexOf(currentTier);
445
+ for (let i = currentIndex + 1; i < TIER_ORDER.length; i++) {
446
+ const tier = TIER_ORDER[i];
447
+ if (tier && this.config.tiers[tier]) {
448
+ return tier;
449
+ }
450
+ }
451
+ return undefined;
452
+ }
453
+ /**
454
+ * Emit a 5W+H event
455
+ */
456
+ emitEvent(event) {
457
+ if (this.config.onEvent) {
458
+ this.config.onEvent(event);
459
+ }
460
+ }
461
+ /**
462
+ * Sleep for a given duration
463
+ */
464
+ sleep(ms) {
465
+ return new Promise((resolve) => setTimeout(resolve, ms));
466
+ }
467
+ }
468
+ // ============================================================================
469
+ // Helper Functions
470
+ // ============================================================================
471
+ /**
472
+ * Create a cascade step configuration for common patterns
473
+ *
474
+ * @example
475
+ * ```typescript
476
+ * const titleCascade = createCascadeStep({
477
+ * name: 'generate-title',
478
+ * code: async (input) => {
479
+ * if (input.template) return { title: input.template }
480
+ * throw new Error('No template')
481
+ * },
482
+ * generative: async (input, ctx) => {
483
+ * const result = await generateProps({
484
+ * schema: { title: 'A compelling title' },
485
+ * context: input
486
+ * })
487
+ * return result.props
488
+ * }
489
+ * })
490
+ * ```
491
+ */
492
+ export function createCascadeStep(config) {
493
+ const tiers = {};
494
+ if (config.code) {
495
+ tiers.code = { name: `${config.name}-code`, execute: config.code };
496
+ }
497
+ if (config.generative) {
498
+ tiers.generative = { name: `${config.name}-generative`, execute: config.generative };
499
+ }
500
+ if (config.agentic) {
501
+ tiers.agentic = { name: `${config.name}-agentic`, execute: config.agentic };
502
+ }
503
+ if (config.human) {
504
+ tiers.human = { name: `${config.name}-human`, execute: config.human };
505
+ }
506
+ const cascadeConfig = {
507
+ tiers,
508
+ cascadeName: config.name,
509
+ useDefaultTimeouts: true,
510
+ };
511
+ if (config.timeouts) {
512
+ cascadeConfig.timeouts = config.timeouts;
513
+ }
514
+ if (config.retryConfig) {
515
+ cascadeConfig.retryConfig = config.retryConfig;
516
+ }
517
+ if (config.onEvent) {
518
+ cascadeConfig.onEvent = config.onEvent;
519
+ }
520
+ return new CascadeExecutor(cascadeConfig);
521
+ }
522
+ //# sourceMappingURL=cascade.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cascade.js","sourceRoot":"","sources":["../src/cascade.ts"],"names":[],"mappings":"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"}