agent-inspect 6.31.30 → 6.31.32

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 (48) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/README.md +1 -1
  3. package/docs/CLI.md +3 -1
  4. package/docs/TRACE-CONTRACTS.md +2 -0
  5. package/package.json +2 -2
  6. package/packages/cli/dist/{chunk-4GTOJ3G2.mjs → chunk-PEGM6T2X.mjs} +82 -9
  7. package/packages/cli/dist/chunk-PEGM6T2X.mjs.map +1 -0
  8. package/packages/cli/dist/index.cjs +185 -33
  9. package/packages/cli/dist/index.cjs.map +1 -1
  10. package/packages/cli/dist/index.mjs +109 -30
  11. package/packages/cli/dist/index.mjs.map +1 -1
  12. package/packages/cli/dist/{src-BF74ZVDF.mjs → src-CWUJTMRD.mjs} +3 -3
  13. package/packages/cli/dist/{src-BF74ZVDF.mjs.map → src-CWUJTMRD.mjs.map} +1 -1
  14. package/packages/core/dist/advanced.cjs +4 -0
  15. package/packages/core/dist/advanced.cjs.map +1 -1
  16. package/packages/core/dist/advanced.d.cts +2 -2
  17. package/packages/core/dist/advanced.d.ts +2 -2
  18. package/packages/core/dist/advanced.mjs +9 -9
  19. package/packages/core/dist/checks.cjs +76 -7
  20. package/packages/core/dist/checks.cjs.map +1 -1
  21. package/packages/core/dist/checks.d.cts +2 -2
  22. package/packages/core/dist/checks.d.ts +2 -2
  23. package/packages/core/dist/checks.mjs +3 -3
  24. package/packages/core/dist/{chunk-BYNAJPNH.mjs → chunk-6G67ZN72.mjs} +79 -10
  25. package/packages/core/dist/chunk-6G67ZN72.mjs.map +1 -0
  26. package/packages/core/dist/{chunk-76QIWWJ5.mjs → chunk-6S666BF4.mjs} +3 -3
  27. package/packages/core/dist/{chunk-76QIWWJ5.mjs.map → chunk-6S666BF4.mjs.map} +1 -1
  28. package/packages/core/dist/{chunk-QMO3ITYF.mjs → chunk-FBPDF7HO.mjs} +3 -3
  29. package/packages/core/dist/{chunk-QMO3ITYF.mjs.map → chunk-FBPDF7HO.mjs.map} +1 -1
  30. package/packages/core/dist/{chunk-XM27TZLD.mjs → chunk-RB6WANSW.mjs} +6 -2
  31. package/packages/core/dist/chunk-RB6WANSW.mjs.map +1 -0
  32. package/packages/core/dist/{chunk-JTJN4KBJ.mjs → chunk-VIEJJ5JB.mjs} +4 -4
  33. package/packages/core/dist/{chunk-JTJN4KBJ.mjs.map → chunk-VIEJJ5JB.mjs.map} +1 -1
  34. package/packages/core/dist/exporters.cjs +89 -22
  35. package/packages/core/dist/exporters.cjs.map +1 -1
  36. package/packages/core/dist/exporters.mjs +88 -25
  37. package/packages/core/dist/exporters.mjs.map +1 -1
  38. package/packages/core/dist/{index-DACU4Dy1.d.cts → index-Ceyw5x7b.d.cts} +4 -2
  39. package/packages/core/dist/{index-b4tIGrzq.d.ts → index-K5Cinf1r.d.ts} +4 -2
  40. package/packages/core/dist/index.cjs +4 -0
  41. package/packages/core/dist/index.cjs.map +1 -1
  42. package/packages/core/dist/index.mjs +4 -4
  43. package/packages/core/dist/writers.cjs +4 -0
  44. package/packages/core/dist/writers.cjs.map +1 -1
  45. package/packages/core/dist/writers.mjs +1 -1
  46. package/packages/cli/dist/chunk-4GTOJ3G2.mjs.map +0 -1
  47. package/packages/core/dist/chunk-BYNAJPNH.mjs.map +0 -1
  48. package/packages/core/dist/chunk-XM27TZLD.mjs.map +0 -1
@@ -1,8 +1,8 @@
1
- import { buildRunWhatSummary, renderRunWhat, renderTimeline, buildRunTimeline } from './chunk-76QIWWJ5.mjs';
2
- import { summarizeObservedOutcomes, extractOutcomesFromTraceEvents, renderObservedOutcomesMarkdown, renderObservedOutcomesHtml } from './chunk-QMO3ITYF.mjs';
1
+ import { buildRunWhatSummary, renderRunWhat, renderTimeline, buildRunTimeline } from './chunk-6S666BF4.mjs';
2
+ import { summarizeObservedOutcomes, extractOutcomesFromTraceEvents, renderObservedOutcomesMarkdown, renderObservedOutcomesHtml } from './chunk-FBPDF7HO.mjs';
3
3
  import { escapeHtml, flattenTree, safeString, compactAttributes, stableJson, escapeMarkdown, zeroKinds } from './chunk-CAWPF22J.mjs';
4
4
  export { compactAttributes, escapeHtml, escapeMarkdown, flattenTree, safeString, stableJson, summarizeTree } from './chunk-CAWPF22J.mjs';
5
- import { resolveRedactionProfile, applyProfileMetadataCaps, truncateStringForProfile, stringContainsHighConfidenceCredential } from './chunk-XM27TZLD.mjs';
5
+ import { resolveRedactionProfile, applyProfileMetadataCaps, truncateStringForProfile, stringContainsHighConfidenceCredential } from './chunk-RB6WANSW.mjs';
6
6
  import { Redactor, DEFAULT_REDACT_KEYS, isCredentialSensitiveKey } from './chunk-VLVCLAPB.mjs';
7
7
  import { IDENTITY_CONFLICT_ATTR, DELIVERY_CONFLICT_ATTR, DELIVERY_EVENT_BASE_ATTR } from './chunk-AN5MOADW.mjs';
8
8
  import './chunk-7DHSWDKB.mjs';
@@ -423,6 +423,16 @@ function stepIdOf(event) {
423
423
  const value = event.attributes?.stepId;
424
424
  return typeof value === "string" && value.trim() !== "" ? value : void 0;
425
425
  }
426
+ function attemptIdOf(event) {
427
+ const direct = event.attributes?.attemptId;
428
+ if (typeof direct === "string" && direct.trim() !== "") return direct;
429
+ const meta = event.attributes?.metadata;
430
+ if (meta && typeof meta === "object" && !Array.isArray(meta)) {
431
+ const nested = meta.attemptId;
432
+ if (typeof nested === "string" && nested.trim() !== "") return nested;
433
+ }
434
+ return void 0;
435
+ }
426
436
  function lifecycleKey(event) {
427
437
  if (event.kind === "RUN") return `run:${event.runId}`;
428
438
  const stepId = stepIdOf(event);
@@ -432,6 +442,9 @@ function lifecycleKey(event) {
432
442
  function isTerminal(status) {
433
443
  return status === "ok" || status === "error";
434
444
  }
445
+ function eventTime(event) {
446
+ return typeof event.timestamp === "number" ? event.timestamp : 0;
447
+ }
435
448
  function cloneNode(node) {
436
449
  return {
437
450
  event: {
@@ -442,37 +455,87 @@ function cloneNode(node) {
442
455
  depth: node.depth
443
456
  };
444
457
  }
458
+ function joinOnePair(start, terminal) {
459
+ const childMap = /* @__PURE__ */ new Map();
460
+ if (start) {
461
+ for (const child of start.children) {
462
+ childMap.set(child.event.eventId, child);
463
+ }
464
+ }
465
+ for (const child of terminal.children) {
466
+ childMap.set(child.event.eventId, child);
467
+ }
468
+ return {
469
+ event: {
470
+ ...terminal.event,
471
+ name: start?.event.name ?? terminal.event.name,
472
+ kind: start?.event.kind ?? terminal.event.kind,
473
+ ...start && attemptIdOf(terminal.event) === void 0 && attemptIdOf(start.event) ? {
474
+ attributes: {
475
+ ...terminal.event.attributes,
476
+ attemptId: attemptIdOf(start.event)
477
+ }
478
+ } : {}
479
+ },
480
+ children: presentSiblingNodes([...childMap.values()]),
481
+ depth: terminal.depth
482
+ };
483
+ }
445
484
  function joinSiblingGroup(group) {
446
485
  if (group.length <= 1) return group;
447
- const terminals = group.filter((n) => isTerminal(n.event.status));
448
- const runnings = group.filter((n) => n.event.status === "running");
486
+ const terminals = group.filter((n) => isTerminal(n.event.status)).sort((a, b) => eventTime(a.event) - eventTime(b.event));
487
+ const runnings = group.filter((n) => n.event.status === "running").sort((a, b) => eventTime(a.event) - eventTime(b.event));
488
+ const others = group.filter(
489
+ (n) => !isTerminal(n.event.status) && n.event.status !== "running"
490
+ );
449
491
  const terminalStatuses = new Set(terminals.map((n) => n.event.status));
450
492
  if (terminalStatuses.size > 1) {
451
493
  return group;
452
494
  }
453
- if (terminals.length >= 1) {
454
- const terminal = terminals[terminals.length - 1];
455
- const start = runnings[0];
456
- const childMap = /* @__PURE__ */ new Map();
457
- for (const n of group) {
458
- for (const child of n.children) {
459
- childMap.set(child.event.eventId, child);
495
+ if (terminals.length > 1 && terminals.every((t) => attemptIdOf(t.event) === void 0) && runnings.every((r) => attemptIdOf(r.event) === void 0)) {
496
+ return group;
497
+ }
498
+ const usedRunning = /* @__PURE__ */ new Set();
499
+ const out = [];
500
+ for (const terminal of terminals) {
501
+ const terminalAttempt = attemptIdOf(terminal.event);
502
+ const terminalTs = eventTime(terminal.event);
503
+ const candidate = runnings.find((r) => {
504
+ if (usedRunning.has(r.event.eventId)) return false;
505
+ if (eventTime(r.event) > terminalTs) return false;
506
+ const runningAttempt = attemptIdOf(r.event);
507
+ if (terminalAttempt !== void 0) {
508
+ return runningAttempt === terminalAttempt;
460
509
  }
461
- }
462
- return [
463
- {
464
- event: {
465
- ...terminal.event,
466
- name: start?.event.name ?? terminal.event.name,
467
- kind: start?.event.kind ?? terminal.event.kind,
468
- ...start?.event.timestamp !== void 0 && terminal.event.durationMs === void 0 ? {} : {}
469
- },
470
- children: presentSiblingNodes([...childMap.values()]),
471
- depth: terminal.depth
510
+ if (runningAttempt !== void 0) {
511
+ return true;
472
512
  }
473
- ];
513
+ return true;
514
+ });
515
+ if (candidate) {
516
+ usedRunning.add(candidate.event.eventId);
517
+ out.push(joinOnePair(candidate, terminal));
518
+ } else {
519
+ out.push({
520
+ ...terminal,
521
+ children: presentSiblingNodes(terminal.children)
522
+ });
523
+ }
524
+ }
525
+ for (const running of runnings) {
526
+ if (usedRunning.has(running.event.eventId)) continue;
527
+ out.push({
528
+ ...running,
529
+ children: presentSiblingNodes(running.children)
530
+ });
474
531
  }
475
- return group;
532
+ for (const other of others) {
533
+ out.push({
534
+ ...other,
535
+ children: presentSiblingNodes(other.children)
536
+ });
537
+ }
538
+ return out;
476
539
  }
477
540
  function presentSiblingNodes(nodes) {
478
541
  const prepared = nodes.map((n) => ({