@cloudbase/agent-adapter-langgraph 0.0.11 → 0.0.13

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/index.js CHANGED
@@ -34,7 +34,9 @@ __export(index_exports, {
34
34
  ClientStateAnnotation: () => ClientStateAnnotation,
35
35
  LanggraphAgent: () => LanggraphAgent,
36
36
  TDAISaver: () => TDAISaver,
37
- TDAIStore: () => TDAIStore
37
+ TDAIStore: () => TDAIStore,
38
+ createConsoleLogger: () => import_agent_shared2.createConsoleLogger,
39
+ noopLogger: () => import_agent_shared2.noopLogger
38
40
  });
39
41
  module.exports = __toCommonJS(index_exports);
40
42
 
@@ -91,6 +93,7 @@ function convertJsonSchemaToZodSchema(jsonSchema, required) {
91
93
  }
92
94
 
93
95
  // src/agent.ts
96
+ var import_agent_shared = require("@cloudbase/agent-shared");
94
97
  var ClientPropertiesAnnotation = import_langgraph.Annotation.Root({
95
98
  tools: import_langgraph.Annotation
96
99
  });
@@ -102,6 +105,8 @@ var LanggraphAgent = class extends import_client.AbstractAgent {
102
105
  constructor(agentConfig) {
103
106
  super(agentConfig);
104
107
  this.compiledWorkflow = agentConfig.compiledWorkflow;
108
+ const baseLogger = agentConfig.logger ?? import_agent_shared.noopLogger;
109
+ this.logger = baseLogger.child?.({ component: "langgraph-agent" }) ?? baseLogger;
105
110
  }
106
111
  run(input) {
107
112
  return new import_rxjs.Observable((subscriber) => {
@@ -110,12 +115,29 @@ var LanggraphAgent = class extends import_client.AbstractAgent {
110
115
  }
111
116
  async _run(subscriber, input) {
112
117
  const { messages, runId, threadId } = input;
113
- subscriber.next({
118
+ const logger = this.logger.child?.({ runId, threadId }) ?? this.logger;
119
+ logger.info?.("Run started");
120
+ const runStartedEvent = {
114
121
  type: import_client.EventType.RUN_STARTED,
115
122
  threadId,
116
123
  runId
117
- });
118
- const streamEventInput = input.forwardedProps?.resume ? new import_langgraph.Command({
124
+ };
125
+ logger.trace?.({ aguiEvent: runStartedEvent }, "Emitting AGUI event");
126
+ subscriber.next(runStartedEvent);
127
+ const isResume = !!input.forwardedProps?.resume;
128
+ const lastUserMessage = messages.filter((m) => m.role === "user").pop();
129
+ logger.debug?.(
130
+ {
131
+ isResume,
132
+ messageCount: messages.length,
133
+ toolCount: input.tools?.length ?? 0,
134
+ tools: input.tools?.map((t) => t.name),
135
+ lastUserMessage: typeof lastUserMessage?.content === "string" ? lastUserMessage.content.slice(0, 200) : void 0
136
+ },
137
+ "Preparing stream input"
138
+ );
139
+ logger.trace?.({ messages, tools: input.tools }, "Full input messages");
140
+ const streamEventInput = isResume ? new import_langgraph.Command({
119
141
  resume: JSON.stringify(input.forwardedProps?.resume?.payload)
120
142
  }) : {
121
143
  messages: aguiMessagesToLangChain(messages),
@@ -135,6 +157,7 @@ var LanggraphAgent = class extends import_client.AbstractAgent {
135
157
  thread_id: threadId
136
158
  }
137
159
  });
160
+ logger.debug?.("Stream created, starting event processing");
138
161
  const chatModelRuns = [];
139
162
  const handledToolCallIds = /* @__PURE__ */ new Set();
140
163
  for (const msg of messages) {
@@ -142,202 +165,375 @@ var LanggraphAgent = class extends import_client.AbstractAgent {
142
165
  handledToolCallIds.add(msg.toolCallId);
143
166
  }
144
167
  }
168
+ if (handledToolCallIds.size > 0) {
169
+ logger.debug?.(
170
+ { count: handledToolCallIds.size },
171
+ "Pre-populated handled tool call IDs from input messages"
172
+ );
173
+ }
145
174
  let interrupt;
146
175
  let currentToolCall = null;
147
- for await (const event of stream) {
148
- if (event.event.startsWith("ChannelWrite<")) {
149
- continue;
150
- }
151
- if (event.event === "on_chat_model_start") {
152
- chatModelRuns.push({ runId: event.run_id });
153
- continue;
154
- }
155
- if (event.event === "on_chat_model_stream") {
156
- let chatModelRun = chatModelRuns.find(
157
- (run) => run.runId === event.run_id
176
+ let eventCount = 0;
177
+ let toolCallCount = 0;
178
+ let textChunkCount = 0;
179
+ try {
180
+ for await (const event of stream) {
181
+ eventCount++;
182
+ logger.trace?.(
183
+ { eventType: event.event, eventCount, langGraphEvent: event },
184
+ "Processing stream event"
158
185
  );
159
- if (!chatModelRun) {
160
- subscriber.next({
161
- type: import_client.EventType.RUN_ERROR,
162
- message: `Received a message from an unknown chat model run. Run Id: ${event.run_id}`
163
- });
186
+ if (event.event.startsWith("ChannelWrite<")) {
164
187
  continue;
165
188
  }
166
- const chunkId = event.data.chunk.id;
167
- if (!chatModelRun.messageId) {
168
- chatModelRun.messageId = chunkId;
169
- subscriber.next({
170
- messageId: chunkId,
171
- type: import_client.EventType.TEXT_MESSAGE_START,
172
- role: "assistant"
173
- });
174
- } else if (chatModelRun.messageId !== chunkId) {
175
- subscriber.next({
176
- type: import_client.EventType.RUN_ERROR,
177
- message: `Received a message of unknown message id from current run. Run Id: ${event.run_id} Message Id from current run: ${chatModelRun.messageId} Message Id from received message: ${chunkId}`
178
- });
189
+ if (event.event === "on_chat_model_start") {
190
+ logger.debug?.(
191
+ { chatModelRunId: event.run_id },
192
+ "Chat model started"
193
+ );
194
+ chatModelRuns.push({ runId: event.run_id });
179
195
  continue;
180
196
  }
181
- if (Array.isArray(event.data.chunk?.tool_call_chunks) && event.data.chunk?.tool_call_chunks?.length > 0) {
182
- const parentMessageId = chatModelRun.messageId;
183
- event.data.chunk.tool_call_chunks.map((x) => ({
184
- ...x,
185
- args: typeof x.args === "string" ? x.args : x.args ? JSON.stringify(x.args) : ""
186
- })).forEach((toolCall) => {
187
- if (currentToolCall) {
188
- if (toolCall.id && currentToolCall.id !== toolCall.id) {
189
- subscriber.next({
190
- toolCallId: currentToolCall.id,
191
- type: import_client.EventType.TOOL_CALL_END
192
- });
193
- if (toolCall.name && toolCall.id) {
194
- currentToolCall = toolCall;
195
- subscriber.next({
197
+ if (event.event === "on_chat_model_stream") {
198
+ const chatModelRun = chatModelRuns.find(
199
+ (run) => run.runId === event.run_id
200
+ );
201
+ if (!chatModelRun) {
202
+ logger.warn?.(
203
+ { chatModelRunId: event.run_id },
204
+ "Received message from unknown chat model run"
205
+ );
206
+ subscriber.next({
207
+ type: import_client.EventType.RUN_ERROR,
208
+ message: `Received a message from an unknown chat model run. Run Id: ${event.run_id}`
209
+ });
210
+ continue;
211
+ }
212
+ const chunkId = event.data.chunk.id;
213
+ if (!chatModelRun.messageId) {
214
+ chatModelRun.messageId = chunkId;
215
+ const textStartEvent = {
216
+ messageId: chunkId,
217
+ type: import_client.EventType.TEXT_MESSAGE_START,
218
+ role: "assistant"
219
+ };
220
+ logger.debug?.({ messageId: chunkId }, "Text message started");
221
+ logger.trace?.(
222
+ { aguiEvent: textStartEvent },
223
+ "Emitting AGUI event"
224
+ );
225
+ subscriber.next(textStartEvent);
226
+ } else if (chatModelRun.messageId !== chunkId) {
227
+ logger.warn?.(
228
+ {
229
+ expectedMessageId: chatModelRun.messageId,
230
+ receivedMessageId: chunkId,
231
+ chatModelRunId: event.run_id
232
+ },
233
+ "Received message with unexpected ID"
234
+ );
235
+ subscriber.next({
236
+ type: import_client.EventType.RUN_ERROR,
237
+ message: `Received a message of unknown message id from current run. Run Id: ${event.run_id} Message Id from current run: ${chatModelRun.messageId} Message Id from received message: ${chunkId}`
238
+ });
239
+ continue;
240
+ }
241
+ if (Array.isArray(event.data.chunk?.tool_call_chunks) && event.data.chunk?.tool_call_chunks?.length > 0) {
242
+ const parentMessageId = chatModelRun.messageId;
243
+ event.data.chunk.tool_call_chunks.map((x) => ({
244
+ ...x,
245
+ args: typeof x.args === "string" ? x.args : x.args ? JSON.stringify(x.args) : ""
246
+ })).forEach((toolCall) => {
247
+ if (currentToolCall) {
248
+ if (toolCall.id && currentToolCall.id !== toolCall.id) {
249
+ const toolEndEvent = {
196
250
  toolCallId: currentToolCall.id,
197
- toolCallName: currentToolCall.name,
198
- parentMessageId,
199
- type: import_client.EventType.TOOL_CALL_START
200
- });
201
- if (currentToolCall.args) {
202
- subscriber.next({
251
+ type: import_client.EventType.TOOL_CALL_END
252
+ };
253
+ logger.debug?.(
254
+ {
255
+ toolCallId: currentToolCall.id,
256
+ toolCallName: currentToolCall.name
257
+ },
258
+ "Tool call ended"
259
+ );
260
+ logger.trace?.(
261
+ { aguiEvent: toolEndEvent },
262
+ "Emitting AGUI event"
263
+ );
264
+ subscriber.next(toolEndEvent);
265
+ if (toolCall.name && toolCall.id) {
266
+ currentToolCall = toolCall;
267
+ toolCallCount++;
268
+ const toolStartEvent = {
269
+ toolCallId: currentToolCall.id,
270
+ toolCallName: currentToolCall.name,
271
+ parentMessageId,
272
+ type: import_client.EventType.TOOL_CALL_START
273
+ };
274
+ logger.debug?.(
275
+ {
276
+ toolCallId: toolCall.id,
277
+ toolCallName: toolCall.name
278
+ },
279
+ "Tool call started"
280
+ );
281
+ logger.trace?.(
282
+ { aguiEvent: toolStartEvent },
283
+ "Emitting AGUI event"
284
+ );
285
+ subscriber.next(toolStartEvent);
286
+ if (currentToolCall.args) {
287
+ const toolArgsEvent = {
288
+ toolCallId: currentToolCall.id,
289
+ delta: currentToolCall.args,
290
+ type: import_client.EventType.TOOL_CALL_ARGS
291
+ };
292
+ logger.trace?.(
293
+ { aguiEvent: toolArgsEvent },
294
+ "Emitting AGUI event"
295
+ );
296
+ subscriber.next(toolArgsEvent);
297
+ if (isValidJson(currentToolCall.args)) {
298
+ const toolEndEvent2 = {
299
+ toolCallId: currentToolCall.id,
300
+ type: import_client.EventType.TOOL_CALL_END
301
+ };
302
+ logger.debug?.(
303
+ { toolCallId: currentToolCall.id },
304
+ "Tool call ended (args complete)"
305
+ );
306
+ logger.trace?.(
307
+ { aguiEvent: toolEndEvent2 },
308
+ "Emitting AGUI event"
309
+ );
310
+ subscriber.next(toolEndEvent2);
311
+ currentToolCall = null;
312
+ }
313
+ }
314
+ }
315
+ } else {
316
+ if (toolCall.args) {
317
+ currentToolCall.args += toolCall.args;
318
+ const toolArgsEvent = {
203
319
  toolCallId: currentToolCall.id,
204
- delta: currentToolCall.args,
320
+ delta: toolCall.args,
205
321
  type: import_client.EventType.TOOL_CALL_ARGS
206
- });
322
+ };
323
+ logger.trace?.(
324
+ { aguiEvent: toolArgsEvent },
325
+ "Emitting AGUI event"
326
+ );
327
+ subscriber.next(toolArgsEvent);
207
328
  if (isValidJson(currentToolCall.args)) {
208
- subscriber.next({
329
+ const toolEndEvent = {
209
330
  toolCallId: currentToolCall.id,
210
331
  type: import_client.EventType.TOOL_CALL_END
211
- });
332
+ };
333
+ logger.debug?.(
334
+ { toolCallId: currentToolCall.id },
335
+ "Tool call ended (args complete)"
336
+ );
337
+ logger.trace?.(
338
+ { aguiEvent: toolEndEvent },
339
+ "Emitting AGUI event"
340
+ );
341
+ subscriber.next(toolEndEvent);
212
342
  currentToolCall = null;
213
343
  }
214
344
  }
215
345
  }
216
346
  } else {
217
- if (toolCall.args) {
218
- currentToolCall.args += toolCall.args;
219
- subscriber.next({
220
- toolCallId: currentToolCall.id,
221
- delta: toolCall.args,
222
- type: import_client.EventType.TOOL_CALL_ARGS
223
- });
224
- if (isValidJson(currentToolCall.args)) {
225
- subscriber.next({
226
- toolCallId: currentToolCall.id,
227
- type: import_client.EventType.TOOL_CALL_END
228
- });
229
- currentToolCall = null;
230
- }
231
- }
232
- }
233
- } else {
234
- if (toolCall.name && toolCall.id) {
235
- currentToolCall = toolCall;
236
- subscriber.next({
237
- toolCallId: toolCall.id,
238
- toolCallName: toolCall.name,
239
- parentMessageId,
240
- type: import_client.EventType.TOOL_CALL_START
241
- });
242
- if (toolCall.args) {
243
- subscriber.next({
347
+ if (toolCall.name && toolCall.id) {
348
+ currentToolCall = toolCall;
349
+ toolCallCount++;
350
+ const toolStartEvent = {
244
351
  toolCallId: toolCall.id,
245
- delta: toolCall.args,
246
- type: import_client.EventType.TOOL_CALL_ARGS
247
- });
248
- if (isValidJson(toolCall.args)) {
249
- subscriber.next({
352
+ toolCallName: toolCall.name,
353
+ parentMessageId,
354
+ type: import_client.EventType.TOOL_CALL_START
355
+ };
356
+ logger.debug?.(
357
+ { toolCallId: toolCall.id, toolCallName: toolCall.name },
358
+ "Tool call started"
359
+ );
360
+ logger.trace?.(
361
+ { aguiEvent: toolStartEvent },
362
+ "Emitting AGUI event"
363
+ );
364
+ subscriber.next(toolStartEvent);
365
+ if (toolCall.args) {
366
+ const toolArgsEvent = {
250
367
  toolCallId: toolCall.id,
251
- type: import_client.EventType.TOOL_CALL_END
252
- });
253
- currentToolCall = null;
368
+ delta: toolCall.args,
369
+ type: import_client.EventType.TOOL_CALL_ARGS
370
+ };
371
+ logger.trace?.(
372
+ { aguiEvent: toolArgsEvent },
373
+ "Emitting AGUI event"
374
+ );
375
+ subscriber.next(toolArgsEvent);
376
+ if (isValidJson(toolCall.args)) {
377
+ const toolEndEvent = {
378
+ toolCallId: toolCall.id,
379
+ type: import_client.EventType.TOOL_CALL_END
380
+ };
381
+ logger.debug?.(
382
+ { toolCallId: toolCall.id },
383
+ "Tool call ended (args complete)"
384
+ );
385
+ logger.trace?.(
386
+ { aguiEvent: toolEndEvent },
387
+ "Emitting AGUI event"
388
+ );
389
+ subscriber.next(toolEndEvent);
390
+ currentToolCall = null;
391
+ }
254
392
  }
255
393
  }
256
394
  }
257
- }
258
- });
259
- }
260
- const delta = event.data.chunk.content;
261
- if (typeof delta === "string" && delta) {
262
- subscriber.next({
263
- messageId: chatModelRun.messageId,
264
- type: import_client.EventType.TEXT_MESSAGE_CONTENT,
265
- delta
266
- });
395
+ });
396
+ }
397
+ const delta = event.data.chunk.content;
398
+ if (typeof delta === "string" && delta) {
399
+ textChunkCount++;
400
+ const textContentEvent = {
401
+ messageId: chatModelRun.messageId,
402
+ type: import_client.EventType.TEXT_MESSAGE_CONTENT,
403
+ delta
404
+ };
405
+ logger.trace?.(
406
+ { aguiEvent: textContentEvent },
407
+ "Emitting AGUI event"
408
+ );
409
+ subscriber.next(textContentEvent);
410
+ }
411
+ continue;
267
412
  }
268
- continue;
269
- }
270
- if (event.event === "on_chat_model_end") {
271
- const chatModelRun = chatModelRuns.find(
272
- (run) => run.runId === event.run_id
273
- );
274
- if (!chatModelRun) {
275
- subscriber.next({
276
- type: import_client.EventType.RUN_ERROR,
277
- message: `Received a on_chat_model_end event from an unknown chat model run. Run Id: ${event.run_id}`
278
- });
413
+ if (event.event === "on_chat_model_end") {
414
+ const chatModelRun = chatModelRuns.find(
415
+ (run) => run.runId === event.run_id
416
+ );
417
+ if (!chatModelRun) {
418
+ logger.warn?.(
419
+ { chatModelRunId: event.run_id },
420
+ "Received on_chat_model_end from unknown run"
421
+ );
422
+ subscriber.next({
423
+ type: import_client.EventType.RUN_ERROR,
424
+ message: `Received a on_chat_model_end event from an unknown chat model run. Run Id: ${event.run_id}`
425
+ });
426
+ continue;
427
+ }
428
+ const textEndEvent = {
429
+ type: import_client.EventType.TEXT_MESSAGE_END,
430
+ messageId: chatModelRun.messageId
431
+ };
432
+ logger.debug?.(
433
+ { messageId: chatModelRun.messageId },
434
+ "Text message ended"
435
+ );
436
+ logger.trace?.({ aguiEvent: textEndEvent }, "Emitting AGUI event");
437
+ subscriber.next(textEndEvent);
279
438
  continue;
280
439
  }
281
- subscriber.next({
282
- type: import_client.EventType.TEXT_MESSAGE_END,
283
- messageId: chatModelRun.messageId
284
- });
285
- continue;
286
- }
287
- if (event.event === "on_tool_end") {
288
- const toolMessage = event.data.output;
289
- if (toolMessage && toolMessage.tool_call_id) {
290
- if (!handledToolCallIds.has(toolMessage.tool_call_id)) {
291
- if (!toolMessage.id) {
292
- toolMessage.id = crypto.randomUUID();
293
- if (toolMessage.lc_kwargs) {
294
- toolMessage.lc_kwargs.id = toolMessage.id;
440
+ if (event.event === "on_tool_end") {
441
+ const toolMessage = event.data.output;
442
+ if (toolMessage && toolMessage.tool_call_id) {
443
+ if (!handledToolCallIds.has(toolMessage.tool_call_id)) {
444
+ if (!toolMessage.id) {
445
+ toolMessage.id = crypto.randomUUID();
446
+ if (toolMessage.lc_kwargs) {
447
+ toolMessage.lc_kwargs.id = toolMessage.id;
448
+ }
295
449
  }
450
+ const toolResultEvent = {
451
+ toolCallId: toolMessage.tool_call_id,
452
+ type: import_client.EventType.TOOL_CALL_RESULT,
453
+ content: typeof toolMessage.content === "string" ? toolMessage.content : JSON.stringify(toolMessage.content),
454
+ messageId: toolMessage.id
455
+ };
456
+ logger.debug?.(
457
+ {
458
+ toolCallId: toolMessage.tool_call_id,
459
+ messageId: toolMessage.id
460
+ },
461
+ "Tool call result received"
462
+ );
463
+ logger.trace?.(
464
+ { aguiEvent: toolResultEvent },
465
+ "Emitting AGUI event"
466
+ );
467
+ subscriber.next(toolResultEvent);
468
+ handledToolCallIds.add(toolMessage.tool_call_id);
469
+ } else {
470
+ logger.trace?.(
471
+ { toolCallId: toolMessage.tool_call_id },
472
+ "Skipping duplicate tool call result"
473
+ );
296
474
  }
297
- subscriber.next({
298
- toolCallId: toolMessage.tool_call_id,
299
- type: import_client.EventType.TOOL_CALL_RESULT,
300
- content: typeof toolMessage.content === "string" ? toolMessage.content : JSON.stringify(toolMessage.content),
301
- messageId: toolMessage.id
302
- });
303
- handledToolCallIds.add(toolMessage.tool_call_id);
304
475
  }
476
+ continue;
477
+ }
478
+ if (event.event === "on_chain_stream" && event.data.chunk?.__interrupt__ && Array.isArray(event.data.chunk.__interrupt__) && event.data.chunk.__interrupt__.length > 0) {
479
+ const rawInterrupt = event.data.chunk.__interrupt__[0];
480
+ logger.debug?.(
481
+ { interruptId: rawInterrupt.id },
482
+ "Interrupt received"
483
+ );
484
+ interrupt = {
485
+ id: rawInterrupt.id,
486
+ // TODO: replace with actual reason
487
+ reason: "agent requested interrupt",
488
+ payload: rawInterrupt.value
489
+ };
305
490
  }
306
- continue;
307
491
  }
308
- if (event.event === "on_chain_stream" && event.data.chunk?.__interrupt__ && Array.isArray(event.data.chunk.__interrupt__) && event.data.chunk.__interrupt__.length > 0) {
309
- const rawInterrupt = event.data.chunk.__interrupt__[0];
310
- interrupt = {
311
- id: rawInterrupt.id,
312
- // TODO: replace with actual reason
313
- reason: "agent requested interrupt",
314
- payload: rawInterrupt.value
492
+ const stats = { eventCount, toolCallCount, textChunkCount };
493
+ if (interrupt) {
494
+ const runFinishedEvent = {
495
+ type: import_client.EventType.RUN_FINISHED,
496
+ threadId,
497
+ runId,
498
+ outcome: "interrupt",
499
+ interrupt
500
+ };
501
+ logger.info?.(
502
+ { outcome: "interrupt", interruptId: interrupt.id, ...stats },
503
+ "Run finished with interrupt"
504
+ );
505
+ logger.trace?.({ aguiEvent: runFinishedEvent }, "Emitting AGUI event");
506
+ subscriber.next(runFinishedEvent);
507
+ } else {
508
+ const runFinishedEvent = {
509
+ type: import_client.EventType.RUN_FINISHED,
510
+ threadId,
511
+ runId
315
512
  };
513
+ logger.info?.({ outcome: "complete", ...stats }, "Run finished");
514
+ logger.trace?.({ aguiEvent: runFinishedEvent }, "Emitting AGUI event");
515
+ subscriber.next(runFinishedEvent);
316
516
  }
317
- }
318
- if (interrupt) {
319
- subscriber.next({
320
- type: import_client.EventType.RUN_FINISHED,
321
- threadId,
322
- runId,
323
- outcome: "interrupt",
324
- interrupt
325
- });
326
- } else {
517
+ } catch (error) {
518
+ logger.error?.(
519
+ { err: error, eventCount, toolCallCount, textChunkCount },
520
+ "Error during stream processing"
521
+ );
327
522
  subscriber.next({
328
- type: import_client.EventType.RUN_FINISHED,
329
- threadId,
330
- runId
523
+ type: import_client.EventType.RUN_ERROR,
524
+ message: error instanceof Error ? error.message : String(error)
331
525
  });
332
526
  }
333
527
  subscriber.complete();
334
528
  }
335
529
  clone() {
336
530
  const workflow = this.compiledWorkflow;
531
+ const logger = this.logger;
337
532
  this.compiledWorkflow = void 0;
338
533
  const cloned = super.clone();
339
534
  this.compiledWorkflow = workflow;
340
535
  cloned.compiledWorkflow = workflow;
536
+ cloned.logger = logger;
341
537
  return cloned;
342
538
  }
343
539
  };
@@ -389,8 +585,7 @@ function aguiMessagesToLangChain(messages) {
389
585
  id: message.id
390
586
  };
391
587
  default:
392
- console.error(`Message role ${message.role} is not implemented`);
393
- throw new Error("message role is not supported.");
588
+ throw new Error(`Message role ${message.role} is not supported.`);
394
589
  }
395
590
  });
396
591
  }
@@ -1078,12 +1273,17 @@ var TDAIStore = class extends import_langgraph3.BaseStore {
1078
1273
  }
1079
1274
  }
1080
1275
  };
1276
+
1277
+ // src/index.ts
1278
+ var import_agent_shared2 = require("@cloudbase/agent-shared");
1081
1279
  // Annotate the CommonJS export names for ESM import in node:
1082
1280
  0 && (module.exports = {
1083
1281
  ClientPropertiesAnnotation,
1084
1282
  ClientStateAnnotation,
1085
1283
  LanggraphAgent,
1086
1284
  TDAISaver,
1087
- TDAIStore
1285
+ TDAIStore,
1286
+ createConsoleLogger,
1287
+ noopLogger
1088
1288
  });
1089
1289
  //# sourceMappingURL=index.js.map