ai-props 2.3.0 → 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 (75) hide show
  1. package/.turbo/turbo-build.log +4 -0
  2. package/CHANGELOG.md +9 -0
  3. package/dist/ai.d.ts +125 -0
  4. package/dist/ai.d.ts.map +1 -0
  5. package/dist/ai.js +199 -0
  6. package/dist/ai.js.map +1 -0
  7. package/dist/cache.d.ts +66 -0
  8. package/dist/cache.d.ts.map +1 -0
  9. package/dist/cache.js +183 -0
  10. package/dist/cache.js.map +1 -0
  11. package/dist/cascade.d.ts +329 -0
  12. package/dist/cascade.d.ts.map +1 -0
  13. package/dist/cascade.js +522 -0
  14. package/dist/cascade.js.map +1 -0
  15. package/dist/client.d.ts +233 -0
  16. package/dist/client.d.ts.map +1 -0
  17. package/dist/client.js +191 -0
  18. package/dist/client.js.map +1 -0
  19. package/dist/durable-cascade.d.ts +280 -0
  20. package/dist/durable-cascade.d.ts.map +1 -0
  21. package/dist/durable-cascade.js +469 -0
  22. package/dist/durable-cascade.js.map +1 -0
  23. package/dist/event-bridge.d.ts +257 -0
  24. package/dist/event-bridge.d.ts.map +1 -0
  25. package/dist/event-bridge.js +317 -0
  26. package/dist/event-bridge.js.map +1 -0
  27. package/dist/generate.d.ts +69 -0
  28. package/dist/generate.d.ts.map +1 -0
  29. package/dist/generate.js +227 -0
  30. package/dist/generate.js.map +1 -0
  31. package/dist/hoc.d.ts +164 -0
  32. package/dist/hoc.d.ts.map +1 -0
  33. package/dist/hoc.js +236 -0
  34. package/dist/hoc.js.map +1 -0
  35. package/dist/hono-jsx.d.ts +208 -0
  36. package/dist/hono-jsx.d.ts.map +1 -0
  37. package/dist/hono-jsx.js +459 -0
  38. package/dist/hono-jsx.js.map +1 -0
  39. package/dist/index.d.ts +16 -0
  40. package/dist/index.d.ts.map +1 -0
  41. package/dist/index.js +23 -0
  42. package/dist/index.js.map +1 -0
  43. package/dist/mdx-types.d.ts +152 -0
  44. package/dist/mdx-types.d.ts.map +1 -0
  45. package/dist/mdx-types.js +9 -0
  46. package/dist/mdx-types.js.map +1 -0
  47. package/dist/mdx-utils.d.ts +106 -0
  48. package/dist/mdx-utils.d.ts.map +1 -0
  49. package/dist/mdx-utils.js +384 -0
  50. package/dist/mdx-utils.js.map +1 -0
  51. package/dist/mdx.d.ts +230 -0
  52. package/dist/mdx.d.ts.map +1 -0
  53. package/dist/mdx.js +820 -0
  54. package/dist/mdx.js.map +1 -0
  55. package/dist/rpc.d.ts +313 -0
  56. package/dist/rpc.d.ts.map +1 -0
  57. package/dist/rpc.js +359 -0
  58. package/dist/rpc.js.map +1 -0
  59. package/dist/streaming.d.ts +199 -0
  60. package/dist/streaming.d.ts.map +1 -0
  61. package/dist/streaming.js +402 -0
  62. package/dist/streaming.js.map +1 -0
  63. package/dist/types.d.ts +152 -0
  64. package/dist/types.d.ts.map +1 -0
  65. package/dist/types.js +7 -0
  66. package/dist/types.js.map +1 -0
  67. package/dist/validate.d.ts +58 -0
  68. package/dist/validate.d.ts.map +1 -0
  69. package/dist/validate.js +251 -0
  70. package/dist/validate.js.map +1 -0
  71. package/dist/worker.d.ts +270 -0
  72. package/dist/worker.d.ts.map +1 -0
  73. package/dist/worker.js +405 -0
  74. package/dist/worker.js.map +1 -0
  75. package/package.json +4 -4
@@ -0,0 +1,251 @@
1
+ /**
2
+ * Validation utilities for ai-props
3
+ *
4
+ * Provides prop validation against schemas.
5
+ *
6
+ * @packageDocumentation
7
+ */
8
+ /**
9
+ * Validate props against a schema
10
+ *
11
+ * @example
12
+ * ```ts
13
+ * const result = validateProps(
14
+ * { name: 'John', age: '25' }, // props
15
+ * { name: 'Name', age: 'Age (number)' } // schema
16
+ * )
17
+ *
18
+ * if (!result.valid) {
19
+ * console.log(result.errors)
20
+ * // [{ path: 'age', message: 'Expected number, got string' }]
21
+ * }
22
+ * ```
23
+ */
24
+ export function validateProps(props, schema) {
25
+ const errors = [];
26
+ if (typeof schema === 'string') {
27
+ // Simple string schema - just check if value exists
28
+ if (!props['value']) {
29
+ errors.push({
30
+ path: 'value',
31
+ message: 'Value is required',
32
+ expected: 'string',
33
+ received: props['value'],
34
+ });
35
+ }
36
+ return { valid: errors.length === 0, errors };
37
+ }
38
+ // Object schema - validate each key
39
+ for (const [key, schemaDef] of Object.entries(schema)) {
40
+ const value = props[key];
41
+ const keyErrors = validateValue(key, value, schemaDef);
42
+ errors.push(...keyErrors);
43
+ }
44
+ return { valid: errors.length === 0, errors };
45
+ }
46
+ /**
47
+ * Validate a single value against a schema definition
48
+ */
49
+ function validateValue(path, value, schema) {
50
+ const errors = [];
51
+ // String schema with type hint
52
+ if (typeof schema === 'string') {
53
+ const expectedType = extractTypeFromSchema(schema);
54
+ if (value === undefined || value === null) {
55
+ // Optional unless marked required
56
+ return errors;
57
+ }
58
+ if (expectedType && !checkType(value, expectedType)) {
59
+ errors.push({
60
+ path,
61
+ message: `Expected ${expectedType}, got ${typeof value}`,
62
+ expected: expectedType,
63
+ received: value,
64
+ });
65
+ }
66
+ return errors;
67
+ }
68
+ // Array schema
69
+ if (Array.isArray(schema)) {
70
+ if (!Array.isArray(value)) {
71
+ if (value !== undefined && value !== null) {
72
+ errors.push({
73
+ path,
74
+ message: `Expected array, got ${typeof value}`,
75
+ expected: 'array',
76
+ received: value,
77
+ });
78
+ }
79
+ return errors;
80
+ }
81
+ // Validate array items if schema has item definition
82
+ if (schema.length > 0) {
83
+ const itemSchema = schema[0];
84
+ for (let i = 0; i < value.length; i++) {
85
+ const itemErrors = validateValue(`${path}[${i}]`, value[i], itemSchema);
86
+ errors.push(...itemErrors);
87
+ }
88
+ }
89
+ return errors;
90
+ }
91
+ // Object schema
92
+ if (typeof schema === 'object' && schema !== null) {
93
+ if (typeof value !== 'object' || value === null || Array.isArray(value)) {
94
+ if (value !== undefined && value !== null) {
95
+ errors.push({
96
+ path,
97
+ message: `Expected object, got ${Array.isArray(value) ? 'array' : typeof value}`,
98
+ expected: 'object',
99
+ received: value,
100
+ });
101
+ }
102
+ return errors;
103
+ }
104
+ // Recursively validate nested object
105
+ for (const [key, nestedSchema] of Object.entries(schema)) {
106
+ const nestedValue = value[key];
107
+ const nestedErrors = validateValue(`${path}.${key}`, nestedValue, nestedSchema);
108
+ errors.push(...nestedErrors);
109
+ }
110
+ }
111
+ return errors;
112
+ }
113
+ /**
114
+ * Extract type hint from schema string
115
+ * e.g., "Age (number)" -> "number"
116
+ */
117
+ function extractTypeFromSchema(schema) {
118
+ const match = schema.match(/\((\w+)\)\s*$/);
119
+ if (match) {
120
+ return match[1].toLowerCase();
121
+ }
122
+ // Check for enum syntax
123
+ if (schema.includes(' | ')) {
124
+ return 'enum';
125
+ }
126
+ return null;
127
+ }
128
+ /**
129
+ * Check if a value matches an expected type
130
+ */
131
+ function checkType(value, expectedType) {
132
+ switch (expectedType) {
133
+ case 'string':
134
+ return typeof value === 'string';
135
+ case 'number':
136
+ case 'integer':
137
+ return typeof value === 'number';
138
+ case 'boolean':
139
+ return typeof value === 'boolean';
140
+ case 'array':
141
+ return Array.isArray(value);
142
+ case 'object':
143
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
144
+ case 'date':
145
+ return typeof value === 'string' || value instanceof Date;
146
+ case 'enum':
147
+ return typeof value === 'string';
148
+ default:
149
+ return true;
150
+ }
151
+ }
152
+ /**
153
+ * Check if all required props are present
154
+ */
155
+ export function hasRequiredProps(props, required) {
156
+ return required.every((key) => props[key] !== undefined);
157
+ }
158
+ /**
159
+ * Get list of missing required props
160
+ */
161
+ export function getMissingProps(props, required) {
162
+ return required.filter((key) => props[key] === undefined);
163
+ }
164
+ /**
165
+ * Check if props are complete according to schema
166
+ */
167
+ export function isComplete(props, schema) {
168
+ if (typeof schema === 'string') {
169
+ return props['value'] !== undefined;
170
+ }
171
+ return Object.keys(schema).every((key) => props[key] !== undefined);
172
+ }
173
+ /**
174
+ * Get list of missing props according to schema
175
+ */
176
+ export function getMissingFromSchema(props, schema) {
177
+ if (typeof schema === 'string') {
178
+ return props['value'] === undefined ? ['value'] : [];
179
+ }
180
+ return Object.keys(schema).filter((key) => props[key] === undefined);
181
+ }
182
+ /**
183
+ * Sanitize props by removing extra keys not in schema
184
+ */
185
+ export function sanitizeProps(props, schema) {
186
+ if (typeof schema === 'string') {
187
+ return { value: props['value'] };
188
+ }
189
+ const schemaKeys = new Set(Object.keys(schema));
190
+ const sanitized = {};
191
+ for (const [key, value] of Object.entries(props)) {
192
+ if (schemaKeys.has(key)) {
193
+ sanitized[key] = value;
194
+ }
195
+ }
196
+ return sanitized;
197
+ }
198
+ /**
199
+ * Merge props with defaults, respecting schema types
200
+ */
201
+ export function mergeWithDefaults(props, defaults, schema) {
202
+ const result = { ...defaults, ...props };
203
+ // Ensure types match schema
204
+ if (typeof schema !== 'string') {
205
+ for (const [key, schemaDef] of Object.entries(schema)) {
206
+ if (result[key] === undefined)
207
+ continue;
208
+ const expectedType = typeof schemaDef === 'string' ? extractTypeFromSchema(schemaDef) : null;
209
+ if (expectedType) {
210
+ result[key] = coerceType(result[key], expectedType);
211
+ }
212
+ }
213
+ }
214
+ return result;
215
+ }
216
+ /**
217
+ * Attempt to coerce a value to an expected type
218
+ */
219
+ function coerceType(value, expectedType) {
220
+ if (value === undefined || value === null)
221
+ return value;
222
+ switch (expectedType) {
223
+ case 'string':
224
+ return String(value);
225
+ case 'number':
226
+ return typeof value === 'number' ? value : Number(value);
227
+ case 'integer':
228
+ return typeof value === 'number' ? Math.floor(value) : parseInt(String(value), 10);
229
+ case 'boolean':
230
+ return Boolean(value);
231
+ default:
232
+ return value;
233
+ }
234
+ }
235
+ /**
236
+ * Create a props validator function
237
+ */
238
+ export function createValidator(schema) {
239
+ return (props) => validateProps(props, schema);
240
+ }
241
+ /**
242
+ * Assert props are valid, throwing on error
243
+ */
244
+ export function assertValidProps(props, schema) {
245
+ const result = validateProps(props, schema);
246
+ if (!result.valid) {
247
+ const messages = result.errors.map((e) => `${e.path}: ${e.message}`).join(', ');
248
+ throw new Error(`Invalid props: ${messages}`);
249
+ }
250
+ }
251
+ //# sourceMappingURL=validate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.js","sourceRoot":"","sources":["../src/validate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,270 @@
1
+ /**
2
+ * Worker Export - WorkerEntrypoint for RPC access to AI Props
3
+ *
4
+ * Exposes AI props generation methods via Cloudflare RPC.
5
+ * Provides schema-based prop generation, caching, validation,
6
+ * and cascade execution patterns.
7
+ *
8
+ * ## Features
9
+ *
10
+ * - **RPC Service**: WorkerEntrypoint for service binding access
11
+ * - **Cascade Execution**: Code -> Generative -> Agentic -> Human escalation
12
+ * - **Durable Cascades**: Cloudflare Workflows integration for durability
13
+ * - **AI Gateway**: Configuration helpers for Cloudflare AI Gateway
14
+ *
15
+ * @example
16
+ * ```typescript
17
+ * // wrangler.jsonc
18
+ * {
19
+ * "services": [
20
+ * { "binding": "AI_PROPS", "service": "ai-props" }
21
+ * ]
22
+ * }
23
+ *
24
+ * // worker.ts - consuming service
25
+ * export default {
26
+ * async fetch(request: Request, env: Env) {
27
+ * const service = env.AI_PROPS.connect()
28
+ * const result = await service.generate({
29
+ * schema: { title: 'Page title', description: 'Page description' },
30
+ * context: { topic: 'AI' }
31
+ * })
32
+ * return Response.json(result.props)
33
+ * }
34
+ * }
35
+ * ```
36
+ *
37
+ * ## Cascade Pattern
38
+ *
39
+ * @example
40
+ * ```typescript
41
+ * import {
42
+ * DurableCascadeExecutor,
43
+ * createDurableCascadeStep,
44
+ * createAIGatewayConfig
45
+ * } from 'ai-props/worker'
46
+ *
47
+ * // Create a durable cascade for content generation
48
+ * const contentCascade = createDurableCascadeStep({
49
+ * name: 'generate-content',
50
+ * code: async (input) => {
51
+ * if (input.template) return { content: input.template }
52
+ * throw new Error('No template available')
53
+ * },
54
+ * generative: async (input, ctx) => {
55
+ * const result = await ctx.ai.run('@cf/meta/llama-3-8b-instruct', {
56
+ * messages: [{ role: 'user', content: `Generate content about: ${input.topic}` }]
57
+ * })
58
+ * return { content: result.response }
59
+ * }
60
+ * })
61
+ *
62
+ * // In a Cloudflare Workflow
63
+ * const result = await contentCascade.run(step, { topic: 'AI' })
64
+ * console.log(result.tier) // 'code' or 'generative'
65
+ * ```
66
+ *
67
+ * @packageDocumentation
68
+ */
69
+ import { WorkerEntrypoint, RpcTarget } from 'cloudflare:workers';
70
+ import type { PropSchema, GeneratePropsOptions, GeneratePropsResult, AIPropsConfig, PropsCacheEntry, ValidationResult } from './types.js';
71
+ /**
72
+ * Environment bindings for the worker
73
+ */
74
+ export interface Env {
75
+ AI?: unknown;
76
+ }
77
+ /**
78
+ * PropsServiceCore - RpcTarget wrapper for AI props functionality
79
+ *
80
+ * Exposes all required methods as RPC-callable methods.
81
+ * This is the core service class that can be instantiated directly.
82
+ */
83
+ export declare class PropsServiceCore extends RpcTarget {
84
+ private cache;
85
+ constructor();
86
+ /**
87
+ * Generate props using AI
88
+ *
89
+ * @example
90
+ * ```ts
91
+ * const result = await service.generate({
92
+ * schema: {
93
+ * title: 'A compelling page title',
94
+ * description: 'A brief description',
95
+ * },
96
+ * context: { topic: 'AI-powered applications' },
97
+ * })
98
+ * ```
99
+ */
100
+ generate<T = Record<string, unknown>>(options: GeneratePropsOptions): Promise<GeneratePropsResult<T>>;
101
+ /**
102
+ * Generate props synchronously from cache
103
+ *
104
+ * @throws {Error} If props are not in cache
105
+ */
106
+ getSync<T = Record<string, unknown>>(schema: PropSchema, context?: Record<string, unknown>): T;
107
+ /**
108
+ * Pre-generate props for warming the cache
109
+ */
110
+ prefetch(requests: GeneratePropsOptions[]): Promise<void>;
111
+ /**
112
+ * Generate multiple prop sets in parallel
113
+ */
114
+ generateMany<T = Record<string, unknown>>(requests: GeneratePropsOptions[]): Promise<GeneratePropsResult<T>[]>;
115
+ /**
116
+ * Merge partial props with generated props
117
+ *
118
+ * Generates only the missing props, keeping provided ones.
119
+ */
120
+ mergeWithGenerated<T extends Record<string, unknown>>(schema: PropSchema, partialProps: Partial<T>, options?: Omit<GeneratePropsOptions, 'schema' | 'context'>): Promise<T>;
121
+ /**
122
+ * Configure global AI props settings
123
+ */
124
+ configure(config: Partial<AIPropsConfig>): void;
125
+ /**
126
+ * Get current configuration
127
+ */
128
+ getConfig(): AIPropsConfig;
129
+ /**
130
+ * Reset configuration to defaults
131
+ */
132
+ resetConfig(): void;
133
+ /**
134
+ * Get cached props by key
135
+ */
136
+ getCached<T>(key: string): PropsCacheEntry<T> | undefined;
137
+ /**
138
+ * Set props in cache
139
+ */
140
+ setCached<T>(key: string, props: T): void;
141
+ /**
142
+ * Delete cached entry by key
143
+ */
144
+ deleteCached(key: string): boolean;
145
+ /**
146
+ * Clear all cached props
147
+ */
148
+ clearCache(): void;
149
+ /**
150
+ * Get cache size
151
+ */
152
+ getCacheSize(): number;
153
+ /**
154
+ * Create a cache key from schema and context
155
+ */
156
+ createCacheKey(schema: PropSchema, context?: Record<string, unknown>): string;
157
+ /**
158
+ * Configure cache TTL
159
+ */
160
+ configureCache(ttl: number): void;
161
+ /**
162
+ * Validate props against a schema
163
+ */
164
+ validate(props: Record<string, unknown>, schema: PropSchema): ValidationResult;
165
+ /**
166
+ * Check if all required props are present
167
+ */
168
+ hasRequired(props: Record<string, unknown>, required: string[]): boolean;
169
+ /**
170
+ * Get list of missing props according to schema
171
+ */
172
+ getMissing(props: Record<string, unknown>, schema: PropSchema): string[];
173
+ /**
174
+ * Check if props are complete according to schema
175
+ */
176
+ isComplete(props: Record<string, unknown>, schema: PropSchema): boolean;
177
+ /**
178
+ * Sanitize props by removing unknown keys
179
+ */
180
+ sanitize<T extends Record<string, unknown>>(props: T, schema: PropSchema): Partial<T>;
181
+ /**
182
+ * Merge props with default values
183
+ */
184
+ mergeDefaults<T extends Record<string, unknown>>(props: Partial<T>, defaults: Partial<T>, schema: PropSchema): Partial<T>;
185
+ }
186
+ /**
187
+ * PropsService - WorkerEntrypoint for RPC access
188
+ *
189
+ * Provides `connect()` method that returns an RpcTarget service
190
+ * with all AI props methods. Also handles HTTP endpoints for
191
+ * direct JSON-RPC access.
192
+ *
193
+ * @example
194
+ * ```typescript
195
+ * // In consuming worker
196
+ * const service = env.AI_PROPS.connect()
197
+ * const result = await service.generate({
198
+ * schema: { title: 'Page title' }
199
+ * })
200
+ * ```
201
+ */
202
+ export declare class PropsService extends WorkerEntrypoint<Env> {
203
+ private serviceCore;
204
+ /**
205
+ * Get or create the service core instance
206
+ */
207
+ private getServiceCore;
208
+ /**
209
+ * Get a connected service instance for RPC calls
210
+ *
211
+ * Note: Named 'getService' instead of 'connect' because 'connect'
212
+ * is a reserved method name in Cloudflare Workers RPC (used for sockets).
213
+ *
214
+ * @returns PropsServiceCore instance for RPC calls
215
+ */
216
+ getService(): PropsServiceCore;
217
+ /**
218
+ * Alias for getService() - provides the connect() interface
219
+ * Note: This may conflict with the Fetcher's connect() for sockets
220
+ * when accessed via service bindings. Use getService() instead.
221
+ *
222
+ * @deprecated Use getService() instead
223
+ * @returns PropsServiceCore instance for RPC calls
224
+ */
225
+ connect(): PropsServiceCore;
226
+ /**
227
+ * HTTP request handler for JSON-RPC and service info endpoints
228
+ *
229
+ * Routes:
230
+ * - GET / - Returns service info
231
+ * - POST /rpc - JSON-RPC endpoint for calling service methods
232
+ */
233
+ fetch(request: Request): Promise<Response>;
234
+ }
235
+ /**
236
+ * Default export for Cloudflare Workers
237
+ */
238
+ export default PropsService;
239
+ /**
240
+ * Export aliases
241
+ */
242
+ export { PropsService as PropsWorker };
243
+ export { CascadeExecutor, createCascadeStep, type CascadeConfig, type CascadeResult, type CascadeContext, type TierContext, type TierHandler, type TierResult, type CapabilityTier, type FiveWHEvent, type TierRetryConfig, type SkipCondition, type CascadeMetrics, type CascadeStep, TIER_ORDER, DEFAULT_TIER_TIMEOUTS, CascadeTimeoutError, TierSkippedError, AllTiersFailedError, createCascadeContext, recordStep, } from './cascade.js';
244
+ export { DurableCascadeExecutor, createDurableCascadeStep, createAIGatewayConfig, type DurableCascadeConfig, type DurableCascadeTierContext, type DurableStepConfig, type DurableRetryConfig, type WorkflowStep, type AiBinding, type HumanReviewRequest, type AIGatewayConfig, type CodeTierHandler, type AiTierHandler, type HumanTierHandler, } from './durable-cascade.js';
245
+ /**
246
+ * Event System exports for Queue-based event handling
247
+ *
248
+ * @example
249
+ * ```typescript
250
+ * import { EventBridge, createQueueHandler } from 'ai-props/worker'
251
+ *
252
+ * const bridge = new EventBridge(env.MY_QUEUE)
253
+ * bridge.on('user.created', async (data) => {
254
+ * console.log('User created:', data.id)
255
+ * })
256
+ *
257
+ * export default {
258
+ * async fetch(request, env) {
259
+ * await bridge.emit('user.created', { id: '123' })
260
+ * return new Response('OK')
261
+ * },
262
+ * async queue(batch, env) {
263
+ * const handler = createQueueHandler(bridge)
264
+ * await handler.queue(batch, env)
265
+ * }
266
+ * }
267
+ * ```
268
+ */
269
+ export { EventBridge, createQueueHandler, createEventBridge, type QueuedEvent, type EventBridgeConfig, type EventHandler, type EmitOptions, type Queue, type QueueMessage, type MessageBatch, type TypedEventBridge, } from './event-bridge.js';
270
+ //# sourceMappingURL=worker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../src/worker.ts"],"names":[],"mappings":"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"}