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
@@ -192,6 +192,10 @@ var HIGH_CONFIDENCE_CREDENTIAL_PATTERNS = [
192
192
  /\b[a-z0-9_.-]+=[^;\s]+(?:;\s*[a-z0-9_.-]+=[^;\s]+)+/i,
193
193
  /\beyJ[a-zA-Z0-9_-]{8,}\.[a-zA-Z0-9_-]{8,}\.[a-zA-Z0-9_-]{8,}\b/,
194
194
  /\b(?:sk-(?:proj-)?[a-zA-Z0-9_-]{16,}|sk-ant-[a-zA-Z0-9_-]{16,}|AIza[0-9A-Za-z_-]{20,})\b/,
195
+ // Stripe secret / restricted keys use underscores (not sk-). Keep in sync with
196
+ // packages/redact/src/index.ts + packages/core/src/checks DEFAULT_SECRET_PATTERNS (#520).
197
+ /\b(?:sk|rk)_(?:live|test)_[A-Za-z0-9]{16,}\b/,
198
+ /\bxox[abposr]-[A-Za-z0-9-]{10,}\b/,
195
199
  /\b(?:ghp|gho|ghu|ghs|ghr)_[A-Za-z0-9_]{20,}\b/,
196
200
  /\b(?:AKIA|ASIA)[A-Z0-9]{16}\b/,
197
201
  /-----BEGIN [A-Z ]*PRIVATE KEY-----[\s\S]*-----END [A-Z ]*PRIVATE KEY-----/,
@@ -831,6 +835,16 @@ function stepIdOf(event) {
831
835
  const value = event.attributes?.stepId;
832
836
  return typeof value === "string" && value.trim() !== "" ? value : void 0;
833
837
  }
838
+ function attemptIdOf(event) {
839
+ const direct = event.attributes?.attemptId;
840
+ if (typeof direct === "string" && direct.trim() !== "") return direct;
841
+ const meta = event.attributes?.metadata;
842
+ if (meta && typeof meta === "object" && !Array.isArray(meta)) {
843
+ const nested = meta.attemptId;
844
+ if (typeof nested === "string" && nested.trim() !== "") return nested;
845
+ }
846
+ return void 0;
847
+ }
834
848
  function lifecycleKey(event) {
835
849
  if (event.kind === "RUN") return `run:${event.runId}`;
836
850
  const stepId = stepIdOf(event);
@@ -840,6 +854,9 @@ function lifecycleKey(event) {
840
854
  function isTerminal(status) {
841
855
  return status === "ok" || status === "error";
842
856
  }
857
+ function eventTime(event) {
858
+ return typeof event.timestamp === "number" ? event.timestamp : 0;
859
+ }
843
860
  function cloneNode(node) {
844
861
  return {
845
862
  event: {
@@ -850,37 +867,87 @@ function cloneNode(node) {
850
867
  depth: node.depth
851
868
  };
852
869
  }
870
+ function joinOnePair(start, terminal) {
871
+ const childMap = /* @__PURE__ */ new Map();
872
+ if (start) {
873
+ for (const child of start.children) {
874
+ childMap.set(child.event.eventId, child);
875
+ }
876
+ }
877
+ for (const child of terminal.children) {
878
+ childMap.set(child.event.eventId, child);
879
+ }
880
+ return {
881
+ event: {
882
+ ...terminal.event,
883
+ name: start?.event.name ?? terminal.event.name,
884
+ kind: start?.event.kind ?? terminal.event.kind,
885
+ ...start && attemptIdOf(terminal.event) === void 0 && attemptIdOf(start.event) ? {
886
+ attributes: {
887
+ ...terminal.event.attributes,
888
+ attemptId: attemptIdOf(start.event)
889
+ }
890
+ } : {}
891
+ },
892
+ children: presentSiblingNodes([...childMap.values()]),
893
+ depth: terminal.depth
894
+ };
895
+ }
853
896
  function joinSiblingGroup(group) {
854
897
  if (group.length <= 1) return group;
855
- const terminals = group.filter((n) => isTerminal(n.event.status));
856
- const runnings = group.filter((n) => n.event.status === "running");
898
+ const terminals = group.filter((n) => isTerminal(n.event.status)).sort((a, b) => eventTime(a.event) - eventTime(b.event));
899
+ const runnings = group.filter((n) => n.event.status === "running").sort((a, b) => eventTime(a.event) - eventTime(b.event));
900
+ const others = group.filter(
901
+ (n) => !isTerminal(n.event.status) && n.event.status !== "running"
902
+ );
857
903
  const terminalStatuses = new Set(terminals.map((n) => n.event.status));
858
904
  if (terminalStatuses.size > 1) {
859
905
  return group;
860
906
  }
861
- if (terminals.length >= 1) {
862
- const terminal = terminals[terminals.length - 1];
863
- const start = runnings[0];
864
- const childMap = /* @__PURE__ */ new Map();
865
- for (const n of group) {
866
- for (const child of n.children) {
867
- childMap.set(child.event.eventId, child);
907
+ if (terminals.length > 1 && terminals.every((t) => attemptIdOf(t.event) === void 0) && runnings.every((r) => attemptIdOf(r.event) === void 0)) {
908
+ return group;
909
+ }
910
+ const usedRunning = /* @__PURE__ */ new Set();
911
+ const out = [];
912
+ for (const terminal of terminals) {
913
+ const terminalAttempt = attemptIdOf(terminal.event);
914
+ const terminalTs = eventTime(terminal.event);
915
+ const candidate = runnings.find((r) => {
916
+ if (usedRunning.has(r.event.eventId)) return false;
917
+ if (eventTime(r.event) > terminalTs) return false;
918
+ const runningAttempt = attemptIdOf(r.event);
919
+ if (terminalAttempt !== void 0) {
920
+ return runningAttempt === terminalAttempt;
868
921
  }
869
- }
870
- return [
871
- {
872
- event: {
873
- ...terminal.event,
874
- name: start?.event.name ?? terminal.event.name,
875
- kind: start?.event.kind ?? terminal.event.kind,
876
- ...start?.event.timestamp !== void 0 && terminal.event.durationMs === void 0 ? {} : {}
877
- },
878
- children: presentSiblingNodes([...childMap.values()]),
879
- depth: terminal.depth
922
+ if (runningAttempt !== void 0) {
923
+ return true;
880
924
  }
881
- ];
925
+ return true;
926
+ });
927
+ if (candidate) {
928
+ usedRunning.add(candidate.event.eventId);
929
+ out.push(joinOnePair(candidate, terminal));
930
+ } else {
931
+ out.push({
932
+ ...terminal,
933
+ children: presentSiblingNodes(terminal.children)
934
+ });
935
+ }
936
+ }
937
+ for (const running of runnings) {
938
+ if (usedRunning.has(running.event.eventId)) continue;
939
+ out.push({
940
+ ...running,
941
+ children: presentSiblingNodes(running.children)
942
+ });
943
+ }
944
+ for (const other of others) {
945
+ out.push({
946
+ ...other,
947
+ children: presentSiblingNodes(other.children)
948
+ });
882
949
  }
883
- return group;
950
+ return out;
884
951
  }
885
952
  function presentSiblingNodes(nodes) {
886
953
  const prepared = nodes.map((n) => ({