@agentick/shared 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.
- package/LICENSE +21 -0
- package/README.md +322 -0
- package/dist/.tsbuildinfo +1 -0
- package/dist/.tsbuildinfo.build +1 -0
- package/dist/block-types.d.ts +85 -0
- package/dist/block-types.d.ts.map +1 -0
- package/dist/block-types.js +98 -0
- package/dist/block-types.js.map +1 -0
- package/dist/blocks.d.ts +396 -0
- package/dist/blocks.d.ts.map +1 -0
- package/dist/blocks.js +209 -0
- package/dist/blocks.js.map +1 -0
- package/dist/devtools.d.ts +672 -0
- package/dist/devtools.d.ts.map +1 -0
- package/dist/devtools.js +445 -0
- package/dist/devtools.js.map +1 -0
- package/dist/errors.d.ts +335 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +529 -0
- package/dist/errors.js.map +1 -0
- package/dist/identity.d.ts +99 -0
- package/dist/identity.d.ts.map +1 -0
- package/dist/identity.js +116 -0
- package/dist/identity.js.map +1 -0
- package/dist/index.d.ts +56 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +56 -0
- package/dist/index.js.map +1 -0
- package/dist/input.d.ts +55 -0
- package/dist/input.d.ts.map +1 -0
- package/dist/input.js +83 -0
- package/dist/input.js.map +1 -0
- package/dist/messages.d.ts +98 -0
- package/dist/messages.d.ts.map +1 -0
- package/dist/messages.js +81 -0
- package/dist/messages.js.map +1 -0
- package/dist/model-catalog.d.ts +144 -0
- package/dist/model-catalog.d.ts.map +1 -0
- package/dist/model-catalog.js +861 -0
- package/dist/model-catalog.js.map +1 -0
- package/dist/models.d.ts +173 -0
- package/dist/models.d.ts.map +1 -0
- package/dist/models.js +10 -0
- package/dist/models.js.map +1 -0
- package/dist/protocol.d.ts +257 -0
- package/dist/protocol.d.ts.map +1 -0
- package/dist/protocol.js +41 -0
- package/dist/protocol.js.map +1 -0
- package/dist/streaming.d.ts +635 -0
- package/dist/streaming.d.ts.map +1 -0
- package/dist/streaming.js +134 -0
- package/dist/streaming.js.map +1 -0
- package/dist/testing/fixtures.d.ts +250 -0
- package/dist/testing/fixtures.d.ts.map +1 -0
- package/dist/testing/fixtures.js +827 -0
- package/dist/testing/fixtures.js.map +1 -0
- package/dist/testing/helpers.d.ts +95 -0
- package/dist/testing/helpers.d.ts.map +1 -0
- package/dist/testing/helpers.js +271 -0
- package/dist/testing/helpers.js.map +1 -0
- package/dist/testing/index.d.ts +42 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing/index.js +70 -0
- package/dist/testing/index.js.map +1 -0
- package/dist/timeline.d.ts +59 -0
- package/dist/timeline.d.ts.map +1 -0
- package/dist/timeline.js +11 -0
- package/dist/timeline.js.map +1 -0
- package/dist/tools.d.ts +220 -0
- package/dist/tools.d.ts.map +1 -0
- package/dist/tools.js +63 -0
- package/dist/tools.js.map +1 -0
- package/dist/utils/entity-ids.d.ts +26 -0
- package/dist/utils/entity-ids.d.ts.map +1 -0
- package/dist/utils/entity-ids.js +44 -0
- package/dist/utils/entity-ids.js.map +1 -0
- package/dist/utils/index.d.ts +3 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +3 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/merge-deep.d.ts +10 -0
- package/dist/utils/merge-deep.d.ts.map +1 -0
- package/dist/utils/merge-deep.js +33 -0
- package/dist/utils/merge-deep.js.map +1 -0
- package/package.json +84 -0
package/dist/devtools.js
ADDED
|
@@ -0,0 +1,445 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DevTools Event Types and Emitter
|
|
3
|
+
*
|
|
4
|
+
* This module provides the event types and singleton emitter for DevTools integration.
|
|
5
|
+
* The engine emits events to this emitter, and DevTools subscribes to receive them.
|
|
6
|
+
*
|
|
7
|
+
* @module @agentick/shared/devtools
|
|
8
|
+
*/
|
|
9
|
+
// ============================================================================
|
|
10
|
+
// Constants
|
|
11
|
+
// ============================================================================
|
|
12
|
+
/**
|
|
13
|
+
* DevTools channel name - used for engine to emit events
|
|
14
|
+
*/
|
|
15
|
+
export const DEVTOOLS_CHANNEL = "__devtools__";
|
|
16
|
+
/**
|
|
17
|
+
* DevTools event emitter singleton.
|
|
18
|
+
*
|
|
19
|
+
* Engines emit events to this emitter, and DevTools subscribes to receive them.
|
|
20
|
+
* This enables engine-agnostic instrumentation without tight coupling.
|
|
21
|
+
*
|
|
22
|
+
* This implementation is platform-agnostic (no Node.js dependencies) so it can
|
|
23
|
+
* be used in both server and browser environments.
|
|
24
|
+
*
|
|
25
|
+
* @example
|
|
26
|
+
* ```typescript
|
|
27
|
+
* // Engine emits events
|
|
28
|
+
* devToolsEmitter.emitEvent({
|
|
29
|
+
* type: 'execution_start',
|
|
30
|
+
* executionId: 'abc-123',
|
|
31
|
+
* rootComponent: 'MyAgent',
|
|
32
|
+
* timestamp: Date.now(),
|
|
33
|
+
* });
|
|
34
|
+
*
|
|
35
|
+
* // DevTools subscribes
|
|
36
|
+
* const unsubscribe = devToolsEmitter.subscribe((event) => {
|
|
37
|
+
* console.log('Event:', event.type);
|
|
38
|
+
* });
|
|
39
|
+
* ```
|
|
40
|
+
*/
|
|
41
|
+
class DevToolsEmitterImpl {
|
|
42
|
+
static instance;
|
|
43
|
+
debug = false;
|
|
44
|
+
// Subscribers
|
|
45
|
+
eventSubscribers = new Set();
|
|
46
|
+
batchSubscribers = new Set();
|
|
47
|
+
// Batching for high-frequency events
|
|
48
|
+
batchBuffer = [];
|
|
49
|
+
batchTimeout = null;
|
|
50
|
+
BATCH_WINDOW_MS = 10;
|
|
51
|
+
// History for late-joining subscribers
|
|
52
|
+
eventHistory = [];
|
|
53
|
+
MAX_HISTORY_SIZE = 1000;
|
|
54
|
+
constructor() { }
|
|
55
|
+
/**
|
|
56
|
+
* Get the singleton instance
|
|
57
|
+
*/
|
|
58
|
+
static getInstance() {
|
|
59
|
+
if (!DevToolsEmitterImpl.instance) {
|
|
60
|
+
DevToolsEmitterImpl.instance = new DevToolsEmitterImpl();
|
|
61
|
+
}
|
|
62
|
+
return DevToolsEmitterImpl.instance;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Enable or disable debug mode
|
|
66
|
+
*/
|
|
67
|
+
setDebug(enabled) {
|
|
68
|
+
this.debug = enabled;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Emit a DevTools event.
|
|
72
|
+
*
|
|
73
|
+
* High-frequency events (content_delta, reasoning_delta) are batched
|
|
74
|
+
* to reduce overhead. Other events are emitted immediately.
|
|
75
|
+
*/
|
|
76
|
+
emitEvent(event) {
|
|
77
|
+
try {
|
|
78
|
+
// Add to history
|
|
79
|
+
this.eventHistory.push(event);
|
|
80
|
+
if (this.eventHistory.length > this.MAX_HISTORY_SIZE) {
|
|
81
|
+
this.eventHistory.shift();
|
|
82
|
+
}
|
|
83
|
+
// High-frequency events get batched
|
|
84
|
+
if (event.type === "content_delta" || event.type === "reasoning_delta") {
|
|
85
|
+
this.batchBuffer.push(event);
|
|
86
|
+
this.scheduleBatchFlush();
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
// Low-frequency events emit immediately (flush any pending batch first)
|
|
90
|
+
this.flushBatch();
|
|
91
|
+
this.notifySubscribers(event);
|
|
92
|
+
}
|
|
93
|
+
if (this.debug) {
|
|
94
|
+
console.log("[DevTools] Emitted:", event.type, event.executionId);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
catch (error) {
|
|
98
|
+
// Never throw - devtools is optional infrastructure
|
|
99
|
+
if (this.debug) {
|
|
100
|
+
console.warn("[DevTools] Emission error:", error);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
notifySubscribers(event) {
|
|
105
|
+
for (const handler of this.eventSubscribers) {
|
|
106
|
+
try {
|
|
107
|
+
handler(event);
|
|
108
|
+
}
|
|
109
|
+
catch (error) {
|
|
110
|
+
if (this.debug) {
|
|
111
|
+
console.warn("[DevTools] Subscriber error:", error);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
notifyBatchSubscribers(events) {
|
|
117
|
+
for (const handler of this.batchSubscribers) {
|
|
118
|
+
try {
|
|
119
|
+
handler(events);
|
|
120
|
+
}
|
|
121
|
+
catch (error) {
|
|
122
|
+
if (this.debug) {
|
|
123
|
+
console.warn("[DevTools] Batch subscriber error:", error);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
scheduleBatchFlush() {
|
|
129
|
+
if (this.batchTimeout)
|
|
130
|
+
return;
|
|
131
|
+
this.batchTimeout = setTimeout(() => {
|
|
132
|
+
this.flushBatch();
|
|
133
|
+
}, this.BATCH_WINDOW_MS);
|
|
134
|
+
}
|
|
135
|
+
flushBatch() {
|
|
136
|
+
if (this.batchTimeout) {
|
|
137
|
+
clearTimeout(this.batchTimeout);
|
|
138
|
+
this.batchTimeout = null;
|
|
139
|
+
}
|
|
140
|
+
if (this.batchBuffer.length === 0)
|
|
141
|
+
return;
|
|
142
|
+
// Emit each event individually for simple subscribers
|
|
143
|
+
for (const event of this.batchBuffer) {
|
|
144
|
+
this.notifySubscribers(event);
|
|
145
|
+
}
|
|
146
|
+
// Also emit as batch for batch-aware subscribers
|
|
147
|
+
this.notifyBatchSubscribers(this.batchBuffer);
|
|
148
|
+
this.batchBuffer = [];
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Subscribe to DevTools events
|
|
152
|
+
*
|
|
153
|
+
* @returns Unsubscribe function
|
|
154
|
+
*/
|
|
155
|
+
subscribe(handler) {
|
|
156
|
+
this.eventSubscribers.add(handler);
|
|
157
|
+
return () => {
|
|
158
|
+
this.eventSubscribers.delete(handler);
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Subscribe to batched events (for high-frequency event handling)
|
|
163
|
+
*
|
|
164
|
+
* @returns Unsubscribe function
|
|
165
|
+
*/
|
|
166
|
+
subscribeBatch(handler) {
|
|
167
|
+
this.batchSubscribers.add(handler);
|
|
168
|
+
return () => {
|
|
169
|
+
this.batchSubscribers.delete(handler);
|
|
170
|
+
};
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Get event history (for late-joining subscribers)
|
|
174
|
+
*
|
|
175
|
+
* @param executionId - Optional filter by execution ID
|
|
176
|
+
*/
|
|
177
|
+
getHistory(executionId) {
|
|
178
|
+
if (!executionId)
|
|
179
|
+
return [...this.eventHistory];
|
|
180
|
+
return this.eventHistory.filter((e) => e.executionId === executionId);
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Clear all state (useful for testing)
|
|
184
|
+
*/
|
|
185
|
+
clear() {
|
|
186
|
+
this.eventHistory = [];
|
|
187
|
+
this.batchBuffer = [];
|
|
188
|
+
if (this.batchTimeout) {
|
|
189
|
+
clearTimeout(this.batchTimeout);
|
|
190
|
+
this.batchTimeout = null;
|
|
191
|
+
}
|
|
192
|
+
this.eventSubscribers.clear();
|
|
193
|
+
this.batchSubscribers.clear();
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Check if there are any subscribers
|
|
197
|
+
*/
|
|
198
|
+
hasSubscribers() {
|
|
199
|
+
return this.eventSubscribers.size > 0;
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Singleton DevTools emitter instance.
|
|
204
|
+
*
|
|
205
|
+
* Use this to emit events from engines or subscribe to events in DevTools.
|
|
206
|
+
*/
|
|
207
|
+
export const devToolsEmitter = DevToolsEmitterImpl.getInstance();
|
|
208
|
+
// ============================================================================
|
|
209
|
+
// Helper Functions
|
|
210
|
+
// ============================================================================
|
|
211
|
+
/**
|
|
212
|
+
* Normalize DevTools config from various input formats.
|
|
213
|
+
*
|
|
214
|
+
* @param config - true, false, undefined, or DevToolsConfig object
|
|
215
|
+
* @returns Normalized DevToolsConfig or false if disabled
|
|
216
|
+
*/
|
|
217
|
+
export function normalizeDevToolsConfig(config) {
|
|
218
|
+
if (config === false)
|
|
219
|
+
return false;
|
|
220
|
+
if (config === undefined)
|
|
221
|
+
return false;
|
|
222
|
+
if (config === true) {
|
|
223
|
+
return {
|
|
224
|
+
enabled: true,
|
|
225
|
+
inheritOnFork: true,
|
|
226
|
+
inheritOnSpawn: true,
|
|
227
|
+
};
|
|
228
|
+
}
|
|
229
|
+
return {
|
|
230
|
+
enabled: config.enabled !== false,
|
|
231
|
+
channel: config.channel || DEVTOOLS_CHANNEL,
|
|
232
|
+
remote: config.remote || false,
|
|
233
|
+
remoteUrl: config.remoteUrl,
|
|
234
|
+
secret: config.secret,
|
|
235
|
+
inheritOnFork: config.inheritOnFork !== false,
|
|
236
|
+
inheritOnSpawn: config.inheritOnSpawn !== false,
|
|
237
|
+
debug: config.debug || false,
|
|
238
|
+
};
|
|
239
|
+
}
|
|
240
|
+
/**
|
|
241
|
+
* Registry of forwarders that map app events to DevTools events.
|
|
242
|
+
* Each forwarder transforms an app-level event to DevTools format.
|
|
243
|
+
*
|
|
244
|
+
* This is platform-agnostic - no Node.js dependencies.
|
|
245
|
+
*/
|
|
246
|
+
const devToolsForwarders = {
|
|
247
|
+
execution_start: (e, ctx) => {
|
|
248
|
+
devToolsEmitter.emitEvent({
|
|
249
|
+
type: "execution_start",
|
|
250
|
+
executionId: e.executionId,
|
|
251
|
+
sequence: e.sequence ?? 0,
|
|
252
|
+
rootComponent: ctx.rootComponent,
|
|
253
|
+
sessionId: ctx.sessionId,
|
|
254
|
+
timestamp: ctx.timestamp,
|
|
255
|
+
});
|
|
256
|
+
},
|
|
257
|
+
tick_start: (e, ctx) => {
|
|
258
|
+
if (!e.executionId)
|
|
259
|
+
return;
|
|
260
|
+
devToolsEmitter.emitEvent({
|
|
261
|
+
type: "tick_start",
|
|
262
|
+
executionId: e.executionId,
|
|
263
|
+
sequence: e.sequence ?? 0,
|
|
264
|
+
tick: e.tick,
|
|
265
|
+
timestamp: ctx.timestamp,
|
|
266
|
+
});
|
|
267
|
+
},
|
|
268
|
+
tick_end: (e, ctx) => {
|
|
269
|
+
if (!e.executionId)
|
|
270
|
+
return;
|
|
271
|
+
devToolsEmitter.emitEvent({
|
|
272
|
+
type: "tick_end",
|
|
273
|
+
executionId: e.executionId,
|
|
274
|
+
sequence: e.sequence ?? 0,
|
|
275
|
+
tick: e.tick,
|
|
276
|
+
usage: e.usage,
|
|
277
|
+
stopReason: e.stopReason,
|
|
278
|
+
model: e.model,
|
|
279
|
+
timestamp: ctx.timestamp,
|
|
280
|
+
});
|
|
281
|
+
},
|
|
282
|
+
execution_end: (e, ctx) => {
|
|
283
|
+
devToolsEmitter.emitEvent({
|
|
284
|
+
type: "execution_end",
|
|
285
|
+
executionId: e.executionId,
|
|
286
|
+
sequence: e.sequence ?? 0,
|
|
287
|
+
totalUsage: e.usage ?? { inputTokens: 0, outputTokens: 0, totalTokens: 0 },
|
|
288
|
+
finalState: e.aborted ? "cancelled" : "completed",
|
|
289
|
+
timestamp: ctx.timestamp,
|
|
290
|
+
});
|
|
291
|
+
},
|
|
292
|
+
tool_call: (e, ctx) => {
|
|
293
|
+
const toolCall = e.toolCall ??
|
|
294
|
+
(e.callId || e.toolUseId || e.name || e.toolName
|
|
295
|
+
? {
|
|
296
|
+
id: (e.callId ?? e.toolUseId),
|
|
297
|
+
name: (e.name ?? e.toolName),
|
|
298
|
+
input: e.input,
|
|
299
|
+
}
|
|
300
|
+
: undefined);
|
|
301
|
+
if (!toolCall?.id || !toolCall?.name) {
|
|
302
|
+
console.warn("[DevTools] tool_call event missing toolCall data:", e);
|
|
303
|
+
return;
|
|
304
|
+
}
|
|
305
|
+
devToolsEmitter.emitEvent({
|
|
306
|
+
type: "tool_call",
|
|
307
|
+
executionId: e.executionId,
|
|
308
|
+
sequence: e.sequence ?? 0,
|
|
309
|
+
tick: e.tick,
|
|
310
|
+
toolUseId: toolCall.id,
|
|
311
|
+
toolName: toolCall.name,
|
|
312
|
+
input: toolCall.input,
|
|
313
|
+
timestamp: ctx.timestamp,
|
|
314
|
+
});
|
|
315
|
+
},
|
|
316
|
+
tool_result: (e, ctx) => {
|
|
317
|
+
devToolsEmitter.emitEvent({
|
|
318
|
+
type: "tool_result",
|
|
319
|
+
executionId: e.executionId,
|
|
320
|
+
sequence: e.sequence ?? 0,
|
|
321
|
+
tick: e.tick,
|
|
322
|
+
toolUseId: e.toolUseId,
|
|
323
|
+
result: e.content,
|
|
324
|
+
isError: !e.success,
|
|
325
|
+
timestamp: ctx.timestamp,
|
|
326
|
+
});
|
|
327
|
+
},
|
|
328
|
+
content_delta: (e, ctx) => {
|
|
329
|
+
if (!e.executionId)
|
|
330
|
+
return;
|
|
331
|
+
devToolsEmitter.emitEvent({
|
|
332
|
+
type: "content_delta",
|
|
333
|
+
executionId: e.executionId,
|
|
334
|
+
sequence: e.sequence ?? 0,
|
|
335
|
+
tick: e.tick ?? 1,
|
|
336
|
+
delta: e.delta,
|
|
337
|
+
timestamp: ctx.timestamp,
|
|
338
|
+
});
|
|
339
|
+
},
|
|
340
|
+
compiled: (e, ctx) => {
|
|
341
|
+
if (!e.executionId)
|
|
342
|
+
return;
|
|
343
|
+
devToolsEmitter.emitEvent({
|
|
344
|
+
type: "compiled",
|
|
345
|
+
executionId: e.executionId,
|
|
346
|
+
sequence: e.sequence ?? 0,
|
|
347
|
+
tick: e.tick,
|
|
348
|
+
system: e.system,
|
|
349
|
+
messages: (e.messages ?? []),
|
|
350
|
+
tools: (e.tools ?? []),
|
|
351
|
+
// Pipeline visibility: raw compiled structure (before rendering)
|
|
352
|
+
rawCompiled: e.rawCompiled,
|
|
353
|
+
// Pipeline visibility: formatted COMInput (after rendering)
|
|
354
|
+
formattedInput: e.formattedInput,
|
|
355
|
+
timestamp: ctx.timestamp,
|
|
356
|
+
});
|
|
357
|
+
},
|
|
358
|
+
model_request: (e, ctx) => {
|
|
359
|
+
if (!e.executionId)
|
|
360
|
+
return;
|
|
361
|
+
devToolsEmitter.emitEvent({
|
|
362
|
+
type: "model_request",
|
|
363
|
+
executionId: e.executionId,
|
|
364
|
+
sequence: e.sequence ?? 0,
|
|
365
|
+
tick: e.tick,
|
|
366
|
+
modelId: e.modelId,
|
|
367
|
+
input: e.input,
|
|
368
|
+
stage: e.stage,
|
|
369
|
+
timestamp: ctx.timestamp,
|
|
370
|
+
});
|
|
371
|
+
},
|
|
372
|
+
provider_request: (e, ctx) => {
|
|
373
|
+
if (!e.executionId)
|
|
374
|
+
return;
|
|
375
|
+
devToolsEmitter.emitEvent({
|
|
376
|
+
type: "provider_request",
|
|
377
|
+
executionId: e.executionId,
|
|
378
|
+
sequence: e.sequence ?? 0,
|
|
379
|
+
tick: e.tick,
|
|
380
|
+
modelId: e.modelId,
|
|
381
|
+
provider: e.provider,
|
|
382
|
+
providerInput: e.providerInput,
|
|
383
|
+
timestamp: ctx.timestamp,
|
|
384
|
+
});
|
|
385
|
+
},
|
|
386
|
+
model_response: (e, ctx) => {
|
|
387
|
+
if (!e.executionId)
|
|
388
|
+
return;
|
|
389
|
+
// Emit model_response with full pipeline visibility
|
|
390
|
+
devToolsEmitter.emitEvent({
|
|
391
|
+
type: "model_response",
|
|
392
|
+
executionId: e.executionId,
|
|
393
|
+
sequence: e.sequence ?? 0,
|
|
394
|
+
tick: e.tick,
|
|
395
|
+
// Pipeline visibility: provider output (raw SDK response)
|
|
396
|
+
providerOutput: e.providerOutput,
|
|
397
|
+
// Pipeline visibility: ModelOutput (normalized Agentick format)
|
|
398
|
+
modelOutput: e.modelOutput,
|
|
399
|
+
// Pipeline visibility: Engine state (timeline integration)
|
|
400
|
+
engineState: e.engineState,
|
|
401
|
+
timestamp: ctx.timestamp,
|
|
402
|
+
});
|
|
403
|
+
// Also emit provider_response with raw details
|
|
404
|
+
devToolsEmitter.emitEvent({
|
|
405
|
+
type: "provider_response",
|
|
406
|
+
executionId: e.executionId,
|
|
407
|
+
sequence: e.sequence ?? 0,
|
|
408
|
+
tick: e.tick,
|
|
409
|
+
providerOutput: e.providerOutput,
|
|
410
|
+
timestamp: ctx.timestamp,
|
|
411
|
+
});
|
|
412
|
+
},
|
|
413
|
+
};
|
|
414
|
+
/**
|
|
415
|
+
* Forward an app stream event to DevTools.
|
|
416
|
+
*
|
|
417
|
+
* Maps from app-level events (execution_start, tick_start, content_delta, etc.)
|
|
418
|
+
* to DevTools event format. Only forwards if DevTools is enabled and has subscribers.
|
|
419
|
+
*
|
|
420
|
+
* This function is platform-agnostic - no Node.js dependencies.
|
|
421
|
+
*
|
|
422
|
+
* @param event - The app stream event to forward
|
|
423
|
+
* @param context - Forwarding context with session info and devTools flag
|
|
424
|
+
*
|
|
425
|
+
* @example
|
|
426
|
+
* ```typescript
|
|
427
|
+
* forwardToDevTools(
|
|
428
|
+
* { type: 'tick_start', tick: 1, executionId: 'abc' },
|
|
429
|
+
* { sessionId: 'xyz', rootComponent: 'MyAgent', devToolsEnabled: true }
|
|
430
|
+
* );
|
|
431
|
+
* ```
|
|
432
|
+
*/
|
|
433
|
+
export function forwardToDevTools(event, context) {
|
|
434
|
+
if (!context.devToolsEnabled || !devToolsEmitter.hasSubscribers())
|
|
435
|
+
return;
|
|
436
|
+
const forwarder = devToolsForwarders[event.type];
|
|
437
|
+
if (!forwarder)
|
|
438
|
+
return;
|
|
439
|
+
forwarder(event, {
|
|
440
|
+
sessionId: context.sessionId,
|
|
441
|
+
rootComponent: context.rootComponent,
|
|
442
|
+
timestamp: Date.now(),
|
|
443
|
+
});
|
|
444
|
+
}
|
|
445
|
+
//# sourceMappingURL=devtools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"devtools.js","sourceRoot":"","sources":["../src/devtools.ts"],"names":[],"mappings":"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"}
|