llmist 12.3.2 → 12.3.3

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.cjs CHANGED
@@ -10362,6 +10362,18 @@ function findParentGadgetInvocationId(tree, nodeId) {
10362
10362
  }
10363
10363
  return void 0;
10364
10364
  }
10365
+ function getIterationFromTree(tree, nodeId) {
10366
+ let currentId = nodeId;
10367
+ while (currentId) {
10368
+ const node = tree.getNode(currentId);
10369
+ if (!node) break;
10370
+ if (node.type === "llm_call") {
10371
+ return node.iteration;
10372
+ }
10373
+ currentId = node.parentId;
10374
+ }
10375
+ return 0;
10376
+ }
10365
10377
  function buildSubagentContext(tree, event) {
10366
10378
  const parentGadgetInvocationId = findParentGadgetInvocationId(tree, event.nodeId);
10367
10379
  if (!parentGadgetInvocationId) {
@@ -10395,12 +10407,101 @@ function bridgeTreeToHooks(tree, hooks, logger) {
10395
10407
  return tree.onAll((event) => {
10396
10408
  const subagentContext = buildSubagentContext(tree, event);
10397
10409
  switch (event.type) {
10398
- // NOTE: gadget_start, gadget_complete, gadget_error, gadget_skipped are NOT
10399
- // handled here. They are called directly in stream-processor.ts with await
10400
- // to ensure proper ordering of observer commands.
10401
- // LLM events - bridged for subagent visibility
10402
- // When a subagent makes LLM calls, these events propagate through the shared tree
10403
- // to the parent's hooks, enabling unified monitoring of all LLM activity
10410
+ // =================================================================
10411
+ // GADGET EVENTS - Bridged for subagent visibility
10412
+ // =================================================================
10413
+ // When a subagent executes gadgets, these events propagate through
10414
+ // the shared tree to the parent's hooks.
10415
+ // Only bridged for subagent events (depth > 0) to avoid double-calling
10416
+ // root agent events which are handled directly in stream-processor.ts
10417
+ case "gadget_start": {
10418
+ if (subagentContext && hooks.observers?.onGadgetExecutionStart) {
10419
+ const gadgetEvent = event;
10420
+ const gadgetNode = tree.getNode(event.nodeId);
10421
+ const context = {
10422
+ iteration: getIterationFromTree(tree, event.nodeId),
10423
+ gadgetName: gadgetEvent.name,
10424
+ invocationId: gadgetEvent.invocationId,
10425
+ parameters: gadgetNode?.parameters ?? {},
10426
+ logger,
10427
+ subagentContext
10428
+ };
10429
+ safeObserve(
10430
+ () => hooks.observers?.onGadgetExecutionStart?.(context),
10431
+ logger,
10432
+ "onGadgetExecutionStart"
10433
+ );
10434
+ }
10435
+ break;
10436
+ }
10437
+ case "gadget_complete": {
10438
+ if (subagentContext && hooks.observers?.onGadgetExecutionComplete) {
10439
+ const gadgetEvent = event;
10440
+ const gadgetNode = tree.getNode(event.nodeId);
10441
+ const context = {
10442
+ iteration: getIterationFromTree(tree, event.nodeId),
10443
+ gadgetName: gadgetEvent.name,
10444
+ invocationId: gadgetEvent.invocationId,
10445
+ parameters: gadgetNode?.parameters ?? {},
10446
+ finalResult: gadgetEvent.result,
10447
+ executionTimeMs: gadgetEvent.executionTimeMs,
10448
+ cost: gadgetEvent.cost,
10449
+ logger,
10450
+ subagentContext
10451
+ };
10452
+ safeObserve(
10453
+ () => hooks.observers?.onGadgetExecutionComplete?.(context),
10454
+ logger,
10455
+ "onGadgetExecutionComplete"
10456
+ );
10457
+ }
10458
+ break;
10459
+ }
10460
+ case "gadget_error": {
10461
+ if (subagentContext && hooks.observers?.onGadgetExecutionComplete) {
10462
+ const gadgetEvent = event;
10463
+ const gadgetNode = tree.getNode(event.nodeId);
10464
+ const context = {
10465
+ iteration: getIterationFromTree(tree, event.nodeId),
10466
+ gadgetName: gadgetEvent.name,
10467
+ invocationId: gadgetEvent.invocationId,
10468
+ parameters: gadgetNode?.parameters ?? {},
10469
+ error: gadgetEvent.error,
10470
+ executionTimeMs: gadgetEvent.executionTimeMs,
10471
+ logger,
10472
+ subagentContext
10473
+ };
10474
+ safeObserve(
10475
+ () => hooks.observers?.onGadgetExecutionComplete?.(context),
10476
+ logger,
10477
+ "onGadgetExecutionComplete"
10478
+ );
10479
+ }
10480
+ break;
10481
+ }
10482
+ case "gadget_skipped": {
10483
+ if (subagentContext && hooks.observers?.onGadgetSkipped) {
10484
+ const gadgetEvent = event;
10485
+ const gadgetNode = tree.getNode(event.nodeId);
10486
+ const context = {
10487
+ iteration: getIterationFromTree(tree, event.nodeId),
10488
+ gadgetName: gadgetEvent.name,
10489
+ invocationId: gadgetEvent.invocationId,
10490
+ parameters: gadgetNode?.parameters ?? {},
10491
+ failedDependency: gadgetEvent.failedDependency ?? "",
10492
+ failedDependencyError: gadgetEvent.failedDependencyError ?? gadgetEvent.error,
10493
+ logger,
10494
+ subagentContext
10495
+ };
10496
+ safeObserve(() => hooks.observers?.onGadgetSkipped?.(context), logger, "onGadgetSkipped");
10497
+ }
10498
+ break;
10499
+ }
10500
+ // =================================================================
10501
+ // LLM EVENTS - Bridged for subagent visibility
10502
+ // =================================================================
10503
+ // When a subagent makes LLM calls, these events propagate through
10504
+ // the shared tree to the parent's hooks.
10404
10505
  case "llm_call_start": {
10405
10506
  if (subagentContext && hooks.observers?.onLLMCallStart) {
10406
10507
  const llmEvent = event;
@@ -10416,7 +10517,7 @@ function bridgeTreeToHooks(tree, hooks, logger) {
10416
10517
  logger,
10417
10518
  subagentContext
10418
10519
  };
10419
- safeObserve(() => hooks.observers.onLLMCallStart(context), logger, "onLLMCallStart");
10520
+ safeObserve(() => hooks.observers?.onLLMCallStart?.(context), logger, "onLLMCallStart");
10420
10521
  }
10421
10522
  break;
10422
10523
  }
@@ -10441,7 +10542,7 @@ function bridgeTreeToHooks(tree, hooks, logger) {
10441
10542
  subagentContext
10442
10543
  };
10443
10544
  safeObserve(
10444
- () => hooks.observers.onLLMCallComplete(context),
10545
+ () => hooks.observers?.onLLMCallComplete?.(context),
10445
10546
  logger,
10446
10547
  "onLLMCallComplete"
10447
10548
  );
@@ -10465,7 +10566,7 @@ function bridgeTreeToHooks(tree, hooks, logger) {
10465
10566
  logger,
10466
10567
  subagentContext
10467
10568
  };
10468
- safeObserve(() => hooks.observers.onLLMCallError(context), logger, "onLLMCallError");
10569
+ safeObserve(() => hooks.observers?.onLLMCallError?.(context), logger, "onLLMCallError");
10469
10570
  }
10470
10571
  break;
10471
10572
  }