@agentick/ai-sdk 0.0.1

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.
@@ -0,0 +1,587 @@
1
+ /**
2
+ * AI SDK Compiler Adapter V2
3
+ *
4
+ * Design philosophy: Progressive adoption
5
+ * - Users keep their existing generateText/streamText code
6
+ * - We add JSX compilation on top
7
+ * - Use as little or as much as you want
8
+ *
9
+ * @example Minimal (user controls execution)
10
+ * ```typescript
11
+ * const result = await compiler.run(
12
+ * <MyAgent />,
13
+ * initialMessages, // ai-sdk format
14
+ * async (formatted) => {
15
+ * return await generateText({
16
+ * model: openai('gpt-4o'),
17
+ * messages: formatted.messages,
18
+ * tools: formatted.tools,
19
+ * });
20
+ * }
21
+ * );
22
+ * ```
23
+ *
24
+ * @example Fully managed (we handle model execution)
25
+ * ```typescript
26
+ * const compiler = new AiSdkCompiler({
27
+ * model: openai('gpt-4o'),
28
+ * manageExecution: true, // We call generateText/streamText
29
+ * });
30
+ *
31
+ * const result = await compiler.run(<MyAgent />, initialMessages);
32
+ * ```
33
+ */
34
+ import { CompileJSXService, } from 'aidk';
35
+ import { generateText, streamText } from 'ai';
36
+ import { EventEmitter } from 'node:events';
37
+ import { randomUUID } from 'node:crypto';
38
+ import { createAiSdkModel } from './adapter';
39
+ // ============================================================================
40
+ // Conversion Utilities
41
+ // ============================================================================
42
+ /**
43
+ * Convert ai-sdk messages to EngineInput.
44
+ */
45
+ function toEngineInput(messages) {
46
+ if (!messages || messages.length === 0) {
47
+ return { timeline: [], sections: {} };
48
+ }
49
+ const timeline = [];
50
+ for (const msg of messages) {
51
+ if (msg.role === 'system') {
52
+ // System messages become timeline entries
53
+ const content = typeof msg.content === 'string'
54
+ ? [{ type: 'text', text: msg.content }]
55
+ : [];
56
+ timeline.push({
57
+ kind: 'message',
58
+ message: {
59
+ role: 'system',
60
+ content,
61
+ },
62
+ });
63
+ }
64
+ else if (msg.role === 'user' || msg.role === 'assistant') {
65
+ // Regular messages
66
+ const content = typeof msg.content === 'string'
67
+ ? [{ type: 'text', text: msg.content }]
68
+ : Array.isArray(msg.content)
69
+ ? msg.content.map((part) => {
70
+ if (part.type === 'text') {
71
+ return { type: 'text', text: part.text };
72
+ }
73
+ // TODO: Handle other content types
74
+ return { type: 'text', text: JSON.stringify(part) };
75
+ })
76
+ : [];
77
+ timeline.push({
78
+ kind: 'message',
79
+ message: {
80
+ role: msg.role,
81
+ content,
82
+ },
83
+ });
84
+ }
85
+ // TODO: Handle tool messages
86
+ }
87
+ return { timeline, sections: {} };
88
+ }
89
+ /**
90
+ * Convert compiled output to ai-sdk formatted input.
91
+ */
92
+ function toAiSdkFormat(compiled, tick) {
93
+ const { formatted, tools } = compiled;
94
+ // Extract messages from formatted timeline
95
+ const messages = [];
96
+ let system;
97
+ for (const entry of formatted.timeline || []) {
98
+ if (entry.kind === 'message') {
99
+ const msg = entry.message;
100
+ if (msg.role === 'system') {
101
+ // Extract system prompt
102
+ system = msg.content
103
+ .filter((c) => c.type === 'text')
104
+ .map((c) => c.text)
105
+ .join('\n');
106
+ }
107
+ else {
108
+ // Convert to ai-sdk message
109
+ const content = msg.content.map((block) => {
110
+ if (block.type === 'text') {
111
+ return { type: 'text', text: block.text };
112
+ }
113
+ // TODO: Handle other block types
114
+ return { type: 'text', text: JSON.stringify(block) };
115
+ });
116
+ messages.push({
117
+ role: msg.role,
118
+ content: content,
119
+ });
120
+ }
121
+ }
122
+ }
123
+ // Convert tools to ToolSet
124
+ const toolSet = tools && tools.length > 0
125
+ ? tools.reduce((acc, tool) => {
126
+ if ('metadata' in tool) {
127
+ acc[tool.metadata.name] = {
128
+ description: tool.metadata.description,
129
+ parameters: tool.metadata.parameters,
130
+ };
131
+ }
132
+ return acc;
133
+ }, {})
134
+ : undefined;
135
+ return {
136
+ messages,
137
+ tools: toolSet,
138
+ system,
139
+ tick,
140
+ };
141
+ }
142
+ /**
143
+ * Convert ai-sdk result to TickResultInput.
144
+ */
145
+ function toTickResult(result) {
146
+ // Extract assistant message
147
+ const assistantMessage = result.response?.messages?.find((m) => m.role === 'assistant');
148
+ const content = assistantMessage?.content
149
+ ? (typeof assistantMessage.content === 'string'
150
+ ? [{ type: 'text', text: assistantMessage.content }]
151
+ : assistantMessage.content.map((part) => {
152
+ if (part.type === 'text') {
153
+ return { type: 'text', text: part.text };
154
+ }
155
+ return { type: 'text', text: JSON.stringify(part) };
156
+ }))
157
+ : [];
158
+ const response = {
159
+ shouldStop: !result.toolCalls || result.toolCalls.length === 0,
160
+ newTimelineEntries: [{
161
+ kind: 'message',
162
+ message: {
163
+ role: 'assistant',
164
+ content,
165
+ },
166
+ }],
167
+ toolCalls: result.toolCalls?.map((tc) => ({
168
+ id: tc.toolCallId,
169
+ name: tc.toolName,
170
+ input: tc.args || {},
171
+ })),
172
+ };
173
+ return { response };
174
+ }
175
+ // ============================================================================
176
+ // Process Handle Implementation
177
+ // ============================================================================
178
+ class AiSdkProcessHandleImpl {
179
+ pid;
180
+ rootPid;
181
+ type;
182
+ parentPid;
183
+ _status = 'pending';
184
+ _result;
185
+ _events = new EventEmitter();
186
+ _completionPromise;
187
+ _resolve;
188
+ _reject;
189
+ _abortController = new AbortController();
190
+ constructor(type, parentPid, rootPid) {
191
+ this.pid = `aisdk-${type}-${randomUUID().slice(0, 8)}`;
192
+ this.type = type;
193
+ this.parentPid = parentPid;
194
+ this.rootPid = rootPid || this.pid;
195
+ this._completionPromise = new Promise((resolve, reject) => {
196
+ this._resolve = resolve;
197
+ this._reject = reject;
198
+ });
199
+ }
200
+ get status() {
201
+ return this._status;
202
+ }
203
+ get result() {
204
+ return this._result;
205
+ }
206
+ start() {
207
+ this._status = 'running';
208
+ this._events.emit('start');
209
+ }
210
+ complete(result) {
211
+ this._status = 'completed';
212
+ this._result = result;
213
+ this._events.emit('complete', result);
214
+ this._resolve(result);
215
+ }
216
+ fail(error) {
217
+ this._status = 'failed';
218
+ this._events.emit('error', error);
219
+ this._reject(error);
220
+ }
221
+ cancel() {
222
+ if (this._status === 'running' || this._status === 'pending') {
223
+ this._status = 'cancelled';
224
+ this._abortController.abort();
225
+ this._events.emit('cancelled');
226
+ this._reject(new Error('Execution cancelled'));
227
+ }
228
+ }
229
+ getCancelSignal() {
230
+ return this._abortController.signal;
231
+ }
232
+ waitForCompletion() {
233
+ return this._completionPromise;
234
+ }
235
+ on(event, handler) {
236
+ this._events.on(event, handler);
237
+ }
238
+ off(event, handler) {
239
+ this._events.off(event, handler);
240
+ }
241
+ }
242
+ // ============================================================================
243
+ // Compiler Adapter
244
+ // ============================================================================
245
+ /**
246
+ * AI SDK Compiler Adapter.
247
+ *
248
+ * Progressive adoption philosophy:
249
+ * - Start with just JSX compilation
250
+ * - Add multi-tick execution
251
+ * - Optionally use fully managed execution
252
+ * - Eventually migrate to full Engine
253
+ */
254
+ export class AiSdkCompiler {
255
+ service;
256
+ model;
257
+ maxTicks;
258
+ manageExecution;
259
+ modelOptions;
260
+ // Track active executions for process methods
261
+ executions = new Map();
262
+ // Store the user's execution function for fork/spawn
263
+ userExecutor;
264
+ constructor(config = {}) {
265
+ this.model = config.model;
266
+ this.maxTicks = config.maxTicks ?? 10;
267
+ this.manageExecution = config.manageExecution ?? false;
268
+ this.modelOptions = config.modelOptions;
269
+ // Create process methods for fork/spawn
270
+ const processMethods = this.createProcessMethods();
271
+ // Initialize the compile service
272
+ // If managing execution, provide a model getter
273
+ const modelGetter = this.manageExecution && this.model
274
+ ? () => createAiSdkModel({ model: this.model })
275
+ : undefined;
276
+ this.service = new CompileJSXService({
277
+ ...config.serviceConfig,
278
+ modelGetter,
279
+ processMethods,
280
+ });
281
+ }
282
+ /**
283
+ * Create process methods for COMProcess.
284
+ * Fork/spawn will use the same executor function by default.
285
+ */
286
+ createProcessMethods() {
287
+ return {
288
+ fork: (input, agent, options) => {
289
+ const parentPid = options?.parentPid;
290
+ const parentHandle = parentPid ? this.executions.get(parentPid) : undefined;
291
+ const handle = new AiSdkProcessHandleImpl('fork', parentPid, parentHandle?.rootPid);
292
+ this.executions.set(handle.pid, handle);
293
+ // Start fork execution asynchronously using the same executor
294
+ if (agent && this.userExecutor) {
295
+ const element = typeof agent === 'function'
296
+ ? { type: agent, props: {}, key: null }
297
+ : agent;
298
+ // Convert EngineInput back to ai-sdk messages for consistency
299
+ const messages = this.engineInputToMessages(input);
300
+ this.runWithExecutor(element, messages, this.userExecutor).then(result => handle.complete(result))
301
+ .catch(error => handle.fail(error instanceof Error ? error : new Error(String(error))));
302
+ }
303
+ return handle;
304
+ },
305
+ spawn: (input, agent, options) => {
306
+ const handle = new AiSdkProcessHandleImpl('spawn');
307
+ this.executions.set(handle.pid, handle);
308
+ // Start spawn execution asynchronously using the same executor
309
+ if (agent && this.userExecutor) {
310
+ const element = typeof agent === 'function'
311
+ ? { type: agent, props: {}, key: null }
312
+ : agent;
313
+ const messages = this.engineInputToMessages(input);
314
+ this.runWithExecutor(element, messages, this.userExecutor).then(result => handle.complete(result))
315
+ .catch(error => handle.fail(error instanceof Error ? error : new Error(String(error))));
316
+ }
317
+ return handle;
318
+ },
319
+ signal: (pid, signal, reason) => {
320
+ const handle = this.executions.get(pid);
321
+ if (handle && signal === 'abort') {
322
+ handle.cancel();
323
+ }
324
+ },
325
+ kill: (pid, reason) => {
326
+ const handle = this.executions.get(pid);
327
+ if (handle) {
328
+ handle.cancel();
329
+ }
330
+ },
331
+ list: () => {
332
+ return Array.from(this.executions.values())
333
+ .filter(h => h.status === 'running');
334
+ },
335
+ get: (pid) => {
336
+ return this.executions.get(pid);
337
+ },
338
+ };
339
+ }
340
+ /**
341
+ * Convert EngineInput back to ai-sdk messages.
342
+ * Used for fork/spawn to maintain consistent interface.
343
+ */
344
+ engineInputToMessages(input) {
345
+ // Simple conversion - just extract messages from timeline
346
+ return (input.timeline || [])
347
+ .filter((entry) => entry.kind === 'message')
348
+ .map((entry) => {
349
+ const msg = entry.message;
350
+ return {
351
+ role: msg.role,
352
+ content: msg.content.map((c) => ({ type: 'text', text: c.text || JSON.stringify(c) })),
353
+ };
354
+ });
355
+ }
356
+ /**
357
+ * Execute with user-provided executor function.
358
+ */
359
+ async runWithExecutor(rootElement, initialMessages, executor) {
360
+ // Store executor for fork/spawn
361
+ this.userExecutor = executor;
362
+ const engineInput = toEngineInput(initialMessages);
363
+ const config = {
364
+ input: engineInput,
365
+ rootElement,
366
+ maxTicks: this.maxTicks,
367
+ };
368
+ // Track tick manually since CompileTickResult doesn't expose it
369
+ let currentTick = 1;
370
+ // Use the raw _run method (not procedure-wrapped)
371
+ return this.service._run(config, async (compiled) => {
372
+ const formatted = toAiSdkFormat(compiled, currentTick);
373
+ if (executor) {
374
+ // User provided executor
375
+ const result = await executor(formatted, currentTick);
376
+ currentTick++;
377
+ return toTickResult(result);
378
+ }
379
+ else if (this.manageExecution && this.model) {
380
+ // Fully managed execution
381
+ const result = await generateText({
382
+ model: this.model,
383
+ messages: formatted.messages,
384
+ tools: formatted.tools,
385
+ system: formatted.system || this.modelOptions?.system,
386
+ temperature: this.modelOptions?.temperature,
387
+ maxOutputTokens: this.modelOptions?.maxOutputTokens,
388
+ topP: this.modelOptions?.topP,
389
+ });
390
+ currentTick++;
391
+ return toTickResult(result);
392
+ }
393
+ else {
394
+ throw new Error('No executor provided and manageExecution is false');
395
+ }
396
+ });
397
+ }
398
+ /**
399
+ * Execute a JSX program with user-provided execution callback.
400
+ *
401
+ * @param rootElement The root JSX element to compile
402
+ * @param initialMessages Optional initial messages in ai-sdk format
403
+ * @param executor User's execution function (gets formatted, returns library result)
404
+ * @returns Final library-native result
405
+ *
406
+ * @example
407
+ * ```typescript
408
+ * const result = await compiler.run(
409
+ * <MyAgent />,
410
+ * initialMessages,
411
+ * async (formatted) => {
412
+ * return await generateText({
413
+ * model: openai('gpt-4o'),
414
+ * messages: formatted.messages,
415
+ * tools: formatted.tools,
416
+ * });
417
+ * }
418
+ * );
419
+ * ```
420
+ */
421
+ async run(rootElement, initialMessages, executor) {
422
+ return this.runWithExecutor(rootElement, initialMessages, executor);
423
+ }
424
+ /**
425
+ * Execute a JSX program with streaming.
426
+ *
427
+ * @param rootElement The root JSX element to compile
428
+ * @param initialMessages Optional initial messages in ai-sdk format
429
+ * @param executor User's streaming execution function
430
+ * @yields Execution events including library-native chunks
431
+ *
432
+ * @example
433
+ * ```typescript
434
+ * for await (const event of compiler.stream(
435
+ * <MyAgent />,
436
+ * initialMessages,
437
+ * async function* (formatted) {
438
+ * for await (const chunk of streamText({
439
+ * model: openai('gpt-4o'),
440
+ * messages: formatted.messages,
441
+ * }).fullStream) {
442
+ * yield chunk;
443
+ * }
444
+ * }
445
+ * )) {
446
+ * if (event.type === 'chunk') {
447
+ * process.stdout.write(event.chunk.textDelta || '');
448
+ * }
449
+ * }
450
+ * ```
451
+ */
452
+ async *stream(rootElement, initialMessages, executor) {
453
+ // Store executor for fork/spawn
454
+ this.userExecutor = executor;
455
+ const engineInput = toEngineInput(initialMessages);
456
+ const config = {
457
+ input: engineInput,
458
+ rootElement,
459
+ maxTicks: this.maxTicks,
460
+ };
461
+ const self = this;
462
+ // Use _runStream directly
463
+ for await (const event of this.service._runStream(config, {
464
+ onTick: async function* (compiled, tick) {
465
+ const formatted = toAiSdkFormat(compiled, tick);
466
+ // Yield formatted event so user can see what's being sent
467
+ yield { type: 'formatted', tick, formatted };
468
+ if (executor) {
469
+ // User provided executor
470
+ const streamResult = executor(formatted, tick);
471
+ // Could be AsyncGenerator or StreamTextResult
472
+ if (typeof streamResult.fullStream !== 'undefined') {
473
+ for await (const chunk of streamResult.fullStream) {
474
+ yield chunk;
475
+ }
476
+ }
477
+ else {
478
+ for await (const chunk of streamResult) {
479
+ yield chunk;
480
+ }
481
+ }
482
+ }
483
+ else if (self.manageExecution && self.model) {
484
+ // Fully managed streaming
485
+ for await (const chunk of streamText({
486
+ model: self.model,
487
+ messages: formatted.messages,
488
+ tools: formatted.tools,
489
+ system: formatted.system || self.modelOptions?.system,
490
+ temperature: self.modelOptions?.temperature,
491
+ maxOutputTokens: self.modelOptions?.maxOutputTokens,
492
+ }).fullStream) {
493
+ yield chunk;
494
+ }
495
+ }
496
+ else {
497
+ throw new Error('No executor provided and manageExecution is false');
498
+ }
499
+ },
500
+ finalizeChunks: (chunks) => {
501
+ // Check for direct result
502
+ const directResult = chunks.find((c) => c?.__result);
503
+ if (directResult) {
504
+ return directResult.__result;
505
+ }
506
+ // Aggregate chunks into result
507
+ // This is simplified - real implementation would use ai-sdk's response aggregation
508
+ let text = '';
509
+ const toolCalls = [];
510
+ for (const chunk of chunks) {
511
+ if (chunk?.type === 'text-delta') {
512
+ text += chunk.textDelta || chunk.text || '';
513
+ }
514
+ if (chunk?.type === 'tool-call') {
515
+ toolCalls.push({
516
+ toolCallId: chunk.toolCallId,
517
+ toolName: chunk.toolName,
518
+ args: chunk.args,
519
+ });
520
+ }
521
+ }
522
+ // Build minimal GenerateTextResult-like object
523
+ const result = {
524
+ text,
525
+ toolCalls,
526
+ response: {
527
+ messages: [{
528
+ role: 'assistant',
529
+ content: text ? [{ type: 'text', text }] : [],
530
+ }],
531
+ },
532
+ };
533
+ return toTickResult(result);
534
+ },
535
+ })) {
536
+ yield event;
537
+ }
538
+ }
539
+ /**
540
+ * Cleanup and destroy the compiler.
541
+ */
542
+ async destroy() {
543
+ // Cancel all running executions
544
+ for (const handle of this.executions.values()) {
545
+ if (handle.status === 'running') {
546
+ handle.cancel();
547
+ }
548
+ }
549
+ this.executions.clear();
550
+ }
551
+ }
552
+ // ============================================================================
553
+ // Factory Function
554
+ // ============================================================================
555
+ /**
556
+ * Create an AI SDK compiler adapter.
557
+ *
558
+ * @example User controls execution
559
+ * ```typescript
560
+ * const compiler = createAiSdkCompiler();
561
+ *
562
+ * const result = await compiler.run(
563
+ * <MyAgent />,
564
+ * initialMessages,
565
+ * async (formatted) => {
566
+ * return await generateText({
567
+ * model: openai('gpt-4o'),
568
+ * messages: formatted.messages,
569
+ * });
570
+ * }
571
+ * );
572
+ * ```
573
+ *
574
+ * @example Fully managed
575
+ * ```typescript
576
+ * const compiler = createAiSdkCompiler({
577
+ * model: openai('gpt-4o'),
578
+ * manageExecution: true,
579
+ * });
580
+ *
581
+ * const result = await compiler.run(<MyAgent />, initialMessages);
582
+ * ```
583
+ */
584
+ export function createAiSdkCompiler(config) {
585
+ return new AiSdkCompiler(config);
586
+ }
587
+ //# sourceMappingURL=compiler-v2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compiler-v2.js","sourceRoot":"","sources":["../src/compiler-v2.ts"],"names":[],"mappings":"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"}