@tangle-network/traces 0.11.6 → 0.12.0

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.
@@ -1816,6 +1816,76 @@ function summarizeSpanExecution(spans, opts = {}) {
1816
1816
  });
1817
1817
  }
1818
1818
 
1819
+ // src/failure-followup.ts
1820
+ import { OPENINFERENCE_SPAN_KIND as OPENINFERENCE_SPAN_KIND2, TOOL_NAME as TOOL_NAME3 } from "@tangle-network/agent-eval/trace-attributes";
1821
+ function argKeyOf(span2) {
1822
+ const sha = span2.attributes["traces.input.sha256"];
1823
+ if (typeof sha === "string" && sha.length > 0) return `sha:${sha}`;
1824
+ const value = span2.attributes["input.value"];
1825
+ if (typeof value === "string" && value.length > 0) return `raw:${value}`;
1826
+ return null;
1827
+ }
1828
+ function schemeOf(key) {
1829
+ return key.slice(0, key.indexOf(":"));
1830
+ }
1831
+ function classifyFailureFollowUps(spans) {
1832
+ const calls = [];
1833
+ for (const s of spans) {
1834
+ if (s.attributes[OPENINFERENCE_SPAN_KIND2] !== "TOOL") continue;
1835
+ const toolName4 = s.attributes[TOOL_NAME3];
1836
+ if (typeof toolName4 !== "string" || toolName4.length === 0) continue;
1837
+ calls.push({ span: s, toolName: toolName4, argKey: argKeyOf(s) });
1838
+ }
1839
+ calls.sort(
1840
+ (a, b) => a.span.start_time.localeCompare(b.span.start_time) || (Number(a.span.attributes.step) || 0) - (Number(b.span.attributes.step) || 0)
1841
+ );
1842
+ const sequences = /* @__PURE__ */ new Map();
1843
+ for (const call of calls) {
1844
+ const key = `${call.span.trace_id}|${call.toolName}`;
1845
+ const seq = sequences.get(key);
1846
+ if (seq) seq.push(call);
1847
+ else sequences.set(key, [call]);
1848
+ }
1849
+ const items = [];
1850
+ const blindByTool = {};
1851
+ for (const seq of sequences.values()) {
1852
+ for (let i = 0; i < seq.length; i++) {
1853
+ const call = seq[i];
1854
+ if (call.span.status.code !== "ERROR") continue;
1855
+ if (call.span.attributes["traces.expected_blocking"] === true) continue;
1856
+ const followUp = seq[i + 1] ?? null;
1857
+ let kind;
1858
+ if (!followUp) {
1859
+ kind = "none";
1860
+ } else if (call.argKey !== null && followUp.argKey !== null && schemeOf(call.argKey) === schemeOf(followUp.argKey)) {
1861
+ kind = call.argKey === followUp.argKey ? "blind" : "adapted";
1862
+ } else {
1863
+ kind = "args-unknown";
1864
+ }
1865
+ if (kind === "blind") blindByTool[call.toolName] = (blindByTool[call.toolName] ?? 0) + 1;
1866
+ items.push({
1867
+ traceId: call.span.trace_id,
1868
+ toolName: call.toolName,
1869
+ failedSpanId: call.span.span_id,
1870
+ followUpSpanId: followUp?.span.span_id ?? null,
1871
+ kind,
1872
+ followUpSucceeded: followUp ? followUp.span.status.code !== "ERROR" : null
1873
+ });
1874
+ }
1875
+ }
1876
+ const followedItems = items.filter((item) => item.kind !== "none");
1877
+ return {
1878
+ failures: items.length,
1879
+ followed: followedItems.length,
1880
+ blind: items.filter((item) => item.kind === "blind").length,
1881
+ adapted: items.filter((item) => item.kind === "adapted").length,
1882
+ argsUnknown: items.filter((item) => item.kind === "args-unknown").length,
1883
+ followUpSucceeded: followedItems.filter((item) => item.followUpSucceeded === true).length,
1884
+ blindByTool,
1885
+ items
1886
+ };
1887
+ }
1888
+
1819
1889
  // src/runtime-store.ts
1820
1890
  import { InMemoryTraceStore } from "@tangle-network/agent-eval";
1821
1891
  var KIND = {
@@ -1904,7 +1974,7 @@ async function runPipelines(spans, opts = {}) {
1904
1974
  failureClusterView(store),
1905
1975
  Promise.all(runIds.map((runId) => computeToolUseMetrics(store, runId)))
1906
1976
  ]);
1907
- return { stuckLoops, failureClusters, toolUse };
1977
+ return { stuckLoops, failureClusters, toolUse, failureFollowUps: classifyFailureFollowUps(spans) };
1908
1978
  }
1909
1979
 
1910
1980
  // src/integrity.ts
@@ -6056,7 +6126,7 @@ function selectAdapters(opts) {
6056
6126
  }
6057
6127
 
6058
6128
  // src/repo.ts
6059
- import { stat as stat13 } from "fs/promises";
6129
+ import { realpath as realpath3, stat as stat13 } from "fs/promises";
6060
6130
  import { dirname as dirname6, isAbsolute as isAbsolute4, join as join17, normalize, parse as parsePath } from "path";
6061
6131
  function normalizeRemote(url) {
6062
6132
  const raw = url.trim();
@@ -6135,6 +6205,13 @@ function uniqNormalized(paths) {
6135
6205
  function parseWorktreePorcelain(output) {
6136
6206
  return output.split("\n").filter((line) => line.startsWith("worktree ")).map((line) => line.slice("worktree ".length).trim()).filter(Boolean);
6137
6207
  }
6208
+ async function realpathOrNull(path) {
6209
+ try {
6210
+ return await realpath3(path);
6211
+ } catch {
6212
+ return null;
6213
+ }
6214
+ }
6138
6215
  async function equivalentGitCwds(cwd) {
6139
6216
  if (!cwd) return [];
6140
6217
  const selected = normalize(cwd);
@@ -6142,7 +6219,20 @@ async function equivalentGitCwds(cwd) {
6142
6219
  const top = await gitOutput(selected, ["rev-parse", "--show-toplevel"]);
6143
6220
  if (!top) return [selected];
6144
6221
  const worktrees = await gitOutput(top, ["worktree", "list", "--porcelain"]);
6145
- return uniqNormalized([selected, top, ...worktrees ? parseWorktreePorcelain(worktrees) : []]);
6222
+ const candidates = [selected, top, ...worktrees ? parseWorktreePorcelain(worktrees) : []];
6223
+ const expanded = [];
6224
+ for (const candidate of candidates) {
6225
+ expanded.push(candidate);
6226
+ const resolved = await realpathOrNull(candidate);
6227
+ if (resolved) expanded.push(resolved);
6228
+ }
6229
+ return uniqNormalized(expanded);
6230
+ }
6231
+ async function cwdMatchesSelectionResolved(cwd, selections) {
6232
+ if (cwdMatchesSelection(cwd, selections)) return true;
6233
+ if (!cwd || !isAbsolute4(cwd)) return false;
6234
+ const resolved = await realpathOrNull(normalize(cwd));
6235
+ return resolved !== null && resolved !== normalize(cwd) && cwdMatchesSelection(resolved, selections);
6146
6236
  }
6147
6237
  function cwdMatchesSelection(cwd, selections) {
6148
6238
  if (!cwd) return false;
@@ -6469,8 +6559,15 @@ async function locateSessions(adapter, opts = {}) {
6469
6559
  const cwdSelections = await equivalentGitCwds(opts.cwd);
6470
6560
  const refs = await adapter.locate({ sinceMs: opts.sinceMs });
6471
6561
  const byKey = /* @__PURE__ */ new Map();
6562
+ const resolvedMatch = /* @__PURE__ */ new Map();
6472
6563
  for (const ref of refs) {
6473
- if (!cwdMatchesSelection(ref.cwd, cwdSelections) && !(ref.cwd === null && ref.integrity)) continue;
6564
+ let matched = cwdMatchesSelection(ref.cwd, cwdSelections);
6565
+ if (!matched && ref.cwd !== null) {
6566
+ const cached = resolvedMatch.get(ref.cwd);
6567
+ matched = cached ?? await cwdMatchesSelectionResolved(ref.cwd, cwdSelections);
6568
+ if (cached === void 0) resolvedMatch.set(ref.cwd, matched);
6569
+ }
6570
+ if (!matched && !(ref.cwd === null && ref.integrity)) continue;
6474
6571
  byKey.set(refKey(ref), ref);
6475
6572
  }
6476
6573
  return [...byKey.values()].sort((a, b) => b.mtimeMs - a.mtimeMs);
@@ -6605,8 +6702,8 @@ import { mkdtemp as mkdtemp2, writeFile as writeFile3 } from "fs/promises";
6605
6702
  import { tmpdir as tmpdir2 } from "os";
6606
6703
  import { join as join18 } from "path";
6607
6704
  import {
6608
- OPENINFERENCE_SPAN_KIND as OPENINFERENCE_SPAN_KIND2,
6609
- TOOL_NAME as TOOL_NAME3
6705
+ OPENINFERENCE_SPAN_KIND as OPENINFERENCE_SPAN_KIND3,
6706
+ TOOL_NAME as TOOL_NAME4
6610
6707
  } from "@tangle-network/agent-eval/trace-attributes";
6611
6708
  var POLICY_EVIDENCE_NOTE = "This is normalized coding-agent session evidence for downstream policy mining; it is not an eval campaign cell.";
6612
6709
  function stringAttr(span2, key) {
@@ -6614,7 +6711,7 @@ function stringAttr(span2, key) {
6614
6711
  return typeof value === "string" && value.length > 0 ? value : void 0;
6615
6712
  }
6616
6713
  function spanKind(span2) {
6617
- return stringAttr(span2, OPENINFERENCE_SPAN_KIND2);
6714
+ return stringAttr(span2, OPENINFERENCE_SPAN_KIND3);
6618
6715
  }
6619
6716
  function repoFromSpans(spans) {
6620
6717
  const attrs = {};
@@ -6640,7 +6737,7 @@ function summarizeTools(spans) {
6640
6737
  const byTool = /* @__PURE__ */ new Map();
6641
6738
  for (const span2 of spans) {
6642
6739
  if (spanKind(span2) !== "TOOL") continue;
6643
- const name = stringAttr(span2, TOOL_NAME3) ?? span2.name.replace(/^tool\./, "");
6740
+ const name = stringAttr(span2, TOOL_NAME4) ?? span2.name.replace(/^tool\./, "");
6644
6741
  const current = byTool.get(name) ?? { calls: 0, errors: 0 };
6645
6742
  current.calls += 1;
6646
6743
  if (span2.status.code === "ERROR") current.errors += 1;
@@ -13478,11 +13575,27 @@ function renderPipelines(pr, unavailable) {
13478
13575
  byTool.set(name, aggregate);
13479
13576
  }
13480
13577
  }
13481
- const failureFollowUp = errorCalls > 0 ? `; ${followedFailures}/${errorCalls} failed calls followed by another same-tool call (${(followedFailures / errorCalls * 100).toFixed(0)}%)` : "";
13578
+ const followUps = pr.failureFollowUps;
13579
+ let failureFollowUp = "";
13580
+ if (followUps && followUps.failures > 0) {
13581
+ const split = [
13582
+ `${followUps.blind} blind (identical args)`,
13583
+ `${followUps.adapted} adapted (changed args)`
13584
+ ];
13585
+ if (followUps.argsUnknown > 0) split.push(`${followUps.argsUnknown} not comparable`);
13586
+ const succeeded = followUps.followed > 0 ? `; ${followUps.followUpSucceeded}/${followUps.followed} follow-ups succeeded` : "";
13587
+ failureFollowUp = `; ${followUps.followed}/${followUps.failures} failed calls followed by another same-tool call (${(followUps.followed / followUps.failures * 100).toFixed(0)}%) \u2014 ${split.join(", ")}${succeeded}`;
13588
+ } else if (errorCalls > 0) {
13589
+ failureFollowUp = `; ${followedFailures}/${errorCalls} failed calls followed by another same-tool call (${(followedFailures / errorCalls * 100).toFixed(0)}%)`;
13590
+ }
13482
13591
  const duplicateSummary = callsWithCapturedArgs > 0 ? `${duplicateCalls}/${callsWithCapturedArgs} captured calls repeated exactly` : "exact repeats unavailable";
13483
13592
  lines.push(
13484
13593
  `- **Tool use:** ${totalCalls} calls across ${runsWithTools.length}/${pr.toolUse.length} traces; ${callsWithCapturedArgs}/${totalCalls} arguments captured; ${duplicateSummary}; ${errorCalls}/${totalCalls} failed${failureFollowUp}`
13485
13594
  );
13595
+ if (followUps && followUps.blind > 0) {
13596
+ const byTool2 = Object.entries(followUps.blindByTool).sort((left, right) => right[1] - left[1] || left[0].localeCompare(right[0])).map(([name, count2]) => `\`${tableCell2(name)}\` \xD7${count2}`);
13597
+ lines.push(` - \u{1F501} Blind retries (same args re-sent after a failure): ${byTool2.join(", ")}`);
13598
+ }
13486
13599
  if (byTool.size > 0) {
13487
13600
  lines.push("");
13488
13601
  lines.push("| Tool | Calls | Args captured | Exact repeats | Errors | Mean latency |");
@@ -17339,6 +17452,7 @@ export {
17339
17452
  importCodeTraceBench,
17340
17453
  summarizeOtlpExecution,
17341
17454
  summarizeSpanExecution,
17455
+ classifyFailureFollowUps,
17342
17456
  toRuntimeStore,
17343
17457
  runPipelines,
17344
17458
  recordSessionCorruption,
@@ -17374,6 +17488,7 @@ export {
17374
17488
  selectAdapters,
17375
17489
  normalizeRemote,
17376
17490
  equivalentGitCwds,
17491
+ cwdMatchesSelectionResolved,
17377
17492
  cwdMatchesSelection,
17378
17493
  resolveRepoAttrs,
17379
17494
  resolveSessionRepoAttrs,
package/dist/cli.js CHANGED
@@ -58,7 +58,7 @@ import {
58
58
  writePolicyEvidenceFile,
59
59
  writeSessionIndexFile,
60
60
  writeTraceEvidenceExportFile
61
- } from "./chunk-MEAEXKUV.js";
61
+ } from "./chunk-CV22VGCK.js";
62
62
 
63
63
  // src/cli.ts
64
64
  import { readFileSync } from "fs";
package/dist/index.d.ts CHANGED
@@ -1121,8 +1121,19 @@ interface RepoResolution {
1121
1121
  * `git@host:owner/repo.git` SCP-style forms. Returns null when unparseable.
1122
1122
  */
1123
1123
  declare function normalizeRemote(url: string): string | null;
1124
- /** Expand a selected cwd to every checked-out worktree for the same git repo. */
1124
+ /**
1125
+ * Expand a selected cwd to every checked-out worktree for the same git repo.
1126
+ * Each candidate is emitted in both its selected and its resolved form: git
1127
+ * prints symlink-resolved paths (macOS `/var` → `/private/var`), while a
1128
+ * recorded session cwd usually keeps the unresolved spelling, and a match
1129
+ * must not depend on which spelling either side used.
1130
+ */
1125
1131
  declare function equivalentGitCwds(cwd: string | null | undefined): Promise<string[]>;
1132
+ /**
1133
+ * `cwdMatchesSelection`, then a second attempt with the cwd's resolved
1134
+ * (symlink-free) form. A deleted cwd cannot resolve and keeps the raw verdict.
1135
+ */
1136
+ declare function cwdMatchesSelectionResolved(cwd: string | null | undefined, selections: readonly string[]): Promise<boolean>;
1126
1137
  /** Boundary-aware cwd matching; `/repo` matches `/repo/src`, not `/repo-old`. */
1127
1138
  declare function cwdMatchesSelection(cwd: string | null | undefined, selections: readonly string[]): boolean;
1128
1139
  /**
@@ -1516,6 +1527,55 @@ declare function classifyReaction(text: string): Reaction[];
1516
1527
  * corrective-to-positive ratio). `praise` is the positive denominator. */
1517
1528
  declare const CORRECTIVE_REACTIONS: readonly Reaction[];
1518
1529
 
1530
+ /**
1531
+ * Failure follow-up classification — the retry-with-state marker.
1532
+ *
1533
+ * The tool-use line has long counted "failed calls followed by another
1534
+ * same-tool call", but that count cannot separate a blind retry (the same
1535
+ * arguments re-sent after a failure, so the failure produced no new state)
1536
+ * from an adapted one (the arguments changed, so the failure taught the agent
1537
+ * something). Without the split the number reads as pure waste even in a run
1538
+ * where every retry adapted — or as healthy adaptation in a run that re-sent
1539
+ * the same command 300 times.
1540
+ *
1541
+ * Arguments are compared by the full-input hash (`traces.input.sha256`) when
1542
+ * both sides carry it, because it survives `input.value` truncation, and by
1543
+ * the verbatim `input.value` otherwise. A pair whose arguments cannot be
1544
+ * compared is counted as unknown, never guessed. Calls marked
1545
+ * `traces.expected_blocking` are excluded: re-sending an identical poll after
1546
+ * a not-ready failure is the protocol working, not thrash.
1547
+ */
1548
+
1549
+ type FollowUpKind = 'blind' | 'adapted' | 'args-unknown' | 'none';
1550
+ interface FailureFollowUp {
1551
+ traceId: string;
1552
+ toolName: string;
1553
+ failedSpanId: string;
1554
+ /** Null when the tool was never called again after the failure. */
1555
+ followUpSpanId: string | null;
1556
+ kind: FollowUpKind;
1557
+ /** Whether the follow-up call ended without an error; null when kind is 'none'. */
1558
+ followUpSucceeded: boolean | null;
1559
+ }
1560
+ interface FailureFollowUpReport {
1561
+ /** Failed TOOL calls classified; expected-blocking failures are excluded. */
1562
+ failures: number;
1563
+ /** Failures with a later call of the same tool in the same trace. */
1564
+ followed: number;
1565
+ /** Follow-up re-sent identical arguments. */
1566
+ blind: number;
1567
+ /** Follow-up changed the arguments. */
1568
+ adapted: number;
1569
+ /** Arguments were not captured or not comparable on one side of the pair. */
1570
+ argsUnknown: number;
1571
+ /** Follow-ups that ended without an error, out of `followed`. */
1572
+ followUpSucceeded: number;
1573
+ /** Blind-retry count per tool, largest offender first when rendered. */
1574
+ blindByTool: Record<string, number>;
1575
+ items: FailureFollowUp[];
1576
+ }
1577
+ declare function classifyFailureFollowUps(spans: readonly OtlpSpan[]): FailureFollowUpReport;
1578
+
1519
1579
  /**
1520
1580
  * Run agent-eval's shipped trace pipelines over normalized harness spans.
1521
1581
  *
@@ -1524,6 +1584,10 @@ declare const CORRECTIVE_REACTIONS: readonly Reaction[];
1524
1584
  * - stuckLoopView — same tool + same args ≥ N times in a short interval
1525
1585
  * - computeToolUseMetrics — duplicate-call / retry / error rates per run
1526
1586
  *
1587
+ * One local view runs beside them: `classifyFailureFollowUps` splits each
1588
+ * failed call's same-tool follow-up into blind (identical args) vs adapted
1589
+ * (changed args), which the aggregate retry rate cannot express.
1590
+ *
1527
1591
  * `toolWasteView` is intentionally NOT used: its default heuristic needs
1528
1592
  * verbatim tool *results* + per-turn LLM `messages`, which traces
1529
1593
  * doesn't capture from harness logs (we store tool args + error status). Its
@@ -1540,6 +1604,8 @@ interface PipelineReport {
1540
1604
  stuckLoops: StuckLoopReport;
1541
1605
  failureClusters: FailureClusterReport;
1542
1606
  toolUse: ToolUseMetrics[];
1607
+ /** Absent only on hand-built reports; runPipelines always computes it. */
1608
+ failureFollowUps?: FailureFollowUpReport;
1543
1609
  }
1544
1610
  interface PipelineOptions {
1545
1611
  /** Minimum repeated identical calls to flag a loop (default 3). */
@@ -4589,4 +4655,4 @@ interface ExecuteOptions {
4589
4655
  /** Send the final, new outbound items (or write their dry-run OTLP). */
4590
4656
  declare function executeUpload(plan: UploadPlan, opts?: ExecuteOptions): Promise<UploadResult>;
4591
4657
 
4592
- export { ACTOR_ATTR, ATTR, type Actor, type AdoptionOptions, type AdoptionReport, AmpAdapter, type AnalystReplayFinding, type AnalyzeOptions, type AnalyzeResult, type ArmExecutionResult, type AssembleSessionBundleOptions, BLOBS_DIR, type BuildPolicyEvidenceOptions, type BuildSessionIndexOptions, type BuildTraceFindingPacketOptions, CODING_REDACTION_RULES, CONTENT_CAP, COORDINATION_LOG_FILE, CORRECTIVE_REACTIONS, type CaseResources, type ChatCompletionCaller, type ChatOutcome, type ChatTrajectory, type ChatTrajectoryMessage, type ChatTrajectoryOptions, type ChatUsage, ClaudeAdapter, type CodeTraceBenchFileRef, type CodeTraceBenchImportOptions, type CodeTraceBenchImportReceipt, type CodeTraceBenchImportResult, type CodeTraceBenchImportedTrace, type CodeTraceBenchStep, CodexAdapter, CodexExecAdapter, CodexExecStreamError, CodexTaskScopeError, type CollectOptions, type CollectPolicyEvidenceOptions, type CollectSessionIndexOptions, type CollectSessionSelectionOptions, type CollectSessionWorkflowOptions, type ConformanceRenderOptions, type CoordinationLog, type CoordinationQuestion, type CoordinationSteer, CopilotAdapter, type CorpusSpec, type CorruptionMode, type CwdSource, DEFAULT_HARNESS, DEFAULT_SANDBOX_BASE_URL, type DockerImagePreparerOptions, EMPTY_SPAN_RUN_SNAPSHOT, EXPORT_RULE, EmptySessionError, type EnumerationResult, type EvidenceOnlyVerdict, type ExcludedCase, type ExecuteOptions, type ExportRule, type ExternalAnalysisKind, type ExternalAnalysisPayload, type ExternalAnalysisResult, type ExternalAnalyzer, type ExternalAnalyzerOptions, type ExternalDiscoveryCandidate, FactoryAdapter, type FailedFixAttempt, type FileRunContextReaderOptions, type FindSessionTextLeaksOptions, type FindingReplaySource, type FindingReplayability, type FindingVerification, type FindingVerificationStatus, type FixArmExecution, type FixArmExecutor, type FixGenerationOutcome, type FixLoopAttemptRecord, type FixLoopOptions, type FixLoopResult, type FixPromptInput, ForgeAdapter, GeminiAdapter, type HaloAnalyzerOptions, type HaloReasoningEffort, type HarnessTraceAdapter, type HodoscopeAnalyzerOptions, type HodoscopeInput, type HodoscopeMessage, type HodoscopeSourceMapEntry, type HodoscopeTrajectory, INGEST_SOURCE_CLI, type ImagePreparation, type ImagePreparer, type IncorrectStepsSubject, type IngestedTrajectory, type InspectSessionIndexOptions, JsonSourceError, type JsonlCorruptionReceipt, JsonlParseError, type JsonlReadOptions, type LiveBatchOptions, type LocateOptions, type LoopConvergence, type LoopConvergenceReport, type LoopIteration, type LoopTrend, type LoopTrendBasis, type ObservedLoop, type ObserverOptions, OpencodeAdapter, type OtlpIngestIssue, type OtlpIngestIssueKind, type OtlpInput, type OtlpInputFile, type OtlpRowConversion, type OtlpSpan, type OtlpSpanKind, type OtlpSpanLink, type OtlpStatusCode, POLICY_EVIDENCE_NOTE, type ParentTaskResolution, type ParseOptions, PartialUploadError, PiAdapter, type PiAdapterOptions, type PipelineOptions, type PipelineReport, type PlanOptions, type PolicyEvidenceLoopSummary, type PolicyEvidenceRecord, type PolicyEvidenceToolSummary, type PrefixDivergence, type PrefixReplayResult, type PrimeAnalyzerOptions, type PrimeTransport, type PrimeTransportRequest, type PrimeTransportResponse, type ProjectSessionBundleOptions, type ProjectSessionBundleResult, QwenAdapter, REACTIONS, RESULT_FILE, RULE, type Reaction, type ReactionReport, type ReactionSessionReport, type Redactor, type ReplayArmVerdict, type ReplayBatchCaseRow, type ReplayBatchCliArgs, type ReplayBatchFixResult, type ReplayBatchOptions, type ReplayBatchReport, type ReplayExclusionReason, type ReplayExecBackend, type ReplayExecResult, type ReplayExecSession, type ReplayFindingOptions, type ReplayFindingResult, type ReplayVerdict, type ReplayVerifyCliArgs, type ReplayVerifyOptions, type ReplayableCase, type RepoAttrs, type RepoResolution, type RepoResolutionSource, type ResolvedFindingReplay, type ResolvedOtlpInput, type ResolvedReplayInvocation, type ResourceResolution, type RunContextJournal, type RunContextNode, type RunContextResult, type RunContextSnapshot, type RunResult, type RunWatchSnapshot, type RunWatchTarget, type RuntimeTrace, SPAWN_JOURNAL_FILE, STATUS_MARK, SUBMIT_ACTION_SIGNATURE, SandboxCounterfactualRunner, type SandboxCounterfactualRunnerOptions, type SandboxReplayBackendOptions, type ScanOptions, type ScannedSession, type SessionBatch, type SessionBundleAbsence, type SessionBundleCarriedSignatures, type SessionBundleExclusion, type SessionBundleExclusionRule, type SessionBundleFile, type SessionBundleLeakCheck, type SessionBundleLedgerSlice, type SessionBundleManifest, type SessionBundleProjection, type SessionBundleResult, type SessionBundleSliceRule, type SessionBundleView, type SessionCorruptionReceipt, type SessionEnvironment, type SessionIdentityConflict, type SessionIdentityIndex, type SessionIntegrity, type SessionRef, type SessionRelationship, type SessionRole, type SessionSeedGroup, type SessionSelection, type SessionSelectionRow, type SessionSourceFile, type SessionTextLeak, type SessionTextLeakReport, type SessionWorkflow, SessionWorkflowError, type SessionWorkflowErrorCode, type SessionWorkflowIssue, type SessionWorkflowSession, type SessionWorkflowSummary, type SkippedAnalysis, type SkippedInputFile, type SpanInput, type SpanNodeStatus, type SpanRedaction, type SpanRunNode, type SpanRunSnapshot, type SpanStructure, type SpendRoll, type SteeringChainReport, type SteeringEdge, TRACES_REDACTION_RULES, type TraceAgenticRoute, type TraceAgenticRouteReason, type TraceAgenticRouteReasonCode, type TraceContextIndex, type TraceContextRoot, type TraceEvidenceExportOptions, type TraceEvidenceExportResult, type TraceEvidenceFormatOption, type TraceEvidenceInputFormat, type TraceEvidenceRow, type TraceExecutionOptions, type TraceFindingPacket, type TraceImprovementArtifacts, type TraceImprovementOptions, type TraceImprovementResult, type TraceIndexedFile, type TraceInspectionArea, type TraceInspectionFinding, type TraceInspectionReport, type TraceInspectionSeverity, type TraceInvestigationOptions, type TraceInvestigationResult, type TraceLiveAction, type TraceLiveActionKind, type TraceLiveAnalysisContext, type TraceLiveAnalyst, type TraceLiveBatch, type TraceLiveEvidence, type TraceLiveFinding, type TraceLiveLoop, type TraceLiveSeverity, type TraceSessionIndex, type TraceSessionIndexRow, type TraceStoreInvestigationOptions, type TraceStoreInvestigationResult, type TraceStreamEvent, type TraceStreamOptions, type TraceStreamReplayOptions, type TraceStreamSession, type TracesConfig, type TriggerPair, type UnavailableCapabilities, type UploadBackend, type UploadIdentity, type UploadItem, type UploadPlan, type UploadRecord, type UploadResult, type UploadState, type UserPromptInput, type VerifiableFinding, type VerifyFindingsCliArgs, type VerifyFindingsOptions, type VerifyFindingsRun, type WatchRunTargetOptions, ZERO_ROLL, type ZaiChatCallerOptions, addSpend, alreadyUploaded, analyzeAdoption, analyzeLiveBatch, analyzeLoopConvergence, analyzeReactions, analyzeSpans, analyzeSteeringChain, applyRedactor, assembleSessionBundle, assertSandboxReachable, buildFixPrompt, buildPolicyEvidenceRecord, buildRetryFixPrompt, buildSessionIndex, buildSessionIndexFromRows, buildSpanRunTree, buildTraceFindingPacket, capText, chatTrajectoryToSpans, classifyEvidenceOnlyPath, classifyLiveActions, classifyReaction, classifyVerdict, claudeActor, clipText, cmdReplayVerify, cmdReplayVerifyBatch, cmdVerifyFindings, codexActor, collectPolicyEvidence, collectSessionIndex, collectSessionSelection, collectSessionWorkflow, collectSessions, commandAnalyzer, commandRedactor, conformanceOfSpans, connectors, countScriptCommands, countSkillRunsJsonl, cwdMatchesSelection, defaultTraceLiveAnalysts, deriveFailureSignature, derivedImageTag, describeSessionRelationship, dockerImagePreparer, enumerateReplayableCases, environmentAttributes, environmentFromSpanAttributes, equivalentGitCwds, executeUpload, exportTraceEvidenceFile, exportTraceEvidenceRows, exportTraceEvidenceText, extractFixCommand, fileRunContextSupervisorRunReader, findContextRoot, findSessionTextLeaks, findSpanSourceFiles, findingReplayStep, findingTrajectoryId, forEachTreeNode, generateFixCommand, goldIncorrectSteps, haloAnalyzer, hashSessionBundleFiles, hodoscopeAnalyzer, httpJsonTransport, importCodeTraceBench, incompleteInputsNote, indexSessionIdsByTrace, inferRole, inferSpanKind, ingestCodeTraceBenchSteps, inspectSessionIndex, int, isChatTrajectory, isChatTrajectoryMessage, isFileRunContextDir, isSubmitAction, knownHarnesses, listAdapters, listSessionBundleFiles, loadState, loadTracesConfig, locateSessions, looksLikeAgentPrompt, mergeRolls, mergeTracesConfig, ms, normalizeRemote, otlpRowToSpan, outboundHash, parseCorpusFlag, parseIncorrectStepsSubject, parseIsoToEpochMs, parseObservationOutput, parseRecordedReturncode, parseReplayBatchArgs, parseReplayVerifyArgs, parseSession, parseSince, parseVerifyFindingsArgs, planTraceAgenticRoute, planUpload, primeAnalyzer, projectSessionBundle, readCoordinationLog, readFileRunContext, readFindingsFile, readJsonFile, readJsonl, readLabelEntries, readOtlpInput, readRunContextJournal, readRunContextSnapshot, readRunWatchSnapshot, readSessionBundleManifest, readSessionIndexFile, readSpanRunSnapshot, recordSessionCorruption, redactSpans, renderBatchReport, renderConformance, renderInspectionReport, renderRunContextSnapshot, renderRunWatchSnapshot, renderSpanRunSnapshot, renderValidation, renderVerifiedFindingsSection, replayBatchUsage, replayVerify, replayVerifyFinding, replayVerifyUsage, resolveAdapter, resolveCaseResources, resolveFindingInvocation, resolveFindingReplayability, resolveOtlpInputFiles, resolveRepoAttrs, resolveRunContextDir, resolveRunWatchTarget, resolveSessionRepoAttrs, runCommand, runExternalAnalyzers, runFixLoop, runPipelines, runReplayBatch, runTotals, runTraceImprovement, runTraceInvestigation, runTraceStoreInvestigation, sandboxReplayBackend, saveReport, saveState, scanSessions, seededSample, selectAdapters, serializeInspectionReport, serializePolicyEvidence, serializeSessionIndex, serializeSpans, serializeTraceStreamEvent, sessionHash, sessionIdFromAttributes, sessionIntegrityAttributes, sessionTextSignatures, skippedAnalyses, span, spanRunTotals, stampEnvironmentAttrs, stampRepoAttrs, stampSessionIdentity, stampSessionIntegrity, stampSpanWorkdirRepoAttrs, streamSessions, summarizeOtlpExecution, summarizeSpanExecution, summarizeSpanStructure, takeJsonl, textIsSynthetic, toOpenInferenceSpan, toRuntimeStore, toTraceSpanEvents, tokens, totalAgenticFailureMessage, traceAgenticKinds, traceStreamEventsFromSpans, unavailableCapabilities, uploadKey, usd, userPromptSpan, validateOtlpSpans, validationExitCode, verifyFindings, verifyFindingsUsage, watchRunTarget, watchSessions, wrap, wrapActionForExec, writeHodoscopeInput, writeInspectionReportFile, writeOtlpFile, writePolicyEvidenceFile, writeSessionBundleManifest, writeSessionIndexFile, writeTraceEvidenceExportFile, writeTraceImprovementArtifacts, zaiChatCaller, zeroPricedCost };
4658
+ export { ACTOR_ATTR, ATTR, type Actor, type AdoptionOptions, type AdoptionReport, AmpAdapter, type AnalystReplayFinding, type AnalyzeOptions, type AnalyzeResult, type ArmExecutionResult, type AssembleSessionBundleOptions, BLOBS_DIR, type BuildPolicyEvidenceOptions, type BuildSessionIndexOptions, type BuildTraceFindingPacketOptions, CODING_REDACTION_RULES, CONTENT_CAP, COORDINATION_LOG_FILE, CORRECTIVE_REACTIONS, type CaseResources, type ChatCompletionCaller, type ChatOutcome, type ChatTrajectory, type ChatTrajectoryMessage, type ChatTrajectoryOptions, type ChatUsage, ClaudeAdapter, type CodeTraceBenchFileRef, type CodeTraceBenchImportOptions, type CodeTraceBenchImportReceipt, type CodeTraceBenchImportResult, type CodeTraceBenchImportedTrace, type CodeTraceBenchStep, CodexAdapter, CodexExecAdapter, CodexExecStreamError, CodexTaskScopeError, type CollectOptions, type CollectPolicyEvidenceOptions, type CollectSessionIndexOptions, type CollectSessionSelectionOptions, type CollectSessionWorkflowOptions, type ConformanceRenderOptions, type CoordinationLog, type CoordinationQuestion, type CoordinationSteer, CopilotAdapter, type CorpusSpec, type CorruptionMode, type CwdSource, DEFAULT_HARNESS, DEFAULT_SANDBOX_BASE_URL, type DockerImagePreparerOptions, EMPTY_SPAN_RUN_SNAPSHOT, EXPORT_RULE, EmptySessionError, type EnumerationResult, type EvidenceOnlyVerdict, type ExcludedCase, type ExecuteOptions, type ExportRule, type ExternalAnalysisKind, type ExternalAnalysisPayload, type ExternalAnalysisResult, type ExternalAnalyzer, type ExternalAnalyzerOptions, type ExternalDiscoveryCandidate, FactoryAdapter, type FailedFixAttempt, type FailureFollowUp, type FailureFollowUpReport, type FileRunContextReaderOptions, type FindSessionTextLeaksOptions, type FindingReplaySource, type FindingReplayability, type FindingVerification, type FindingVerificationStatus, type FixArmExecution, type FixArmExecutor, type FixGenerationOutcome, type FixLoopAttemptRecord, type FixLoopOptions, type FixLoopResult, type FixPromptInput, type FollowUpKind, ForgeAdapter, GeminiAdapter, type HaloAnalyzerOptions, type HaloReasoningEffort, type HarnessTraceAdapter, type HodoscopeAnalyzerOptions, type HodoscopeInput, type HodoscopeMessage, type HodoscopeSourceMapEntry, type HodoscopeTrajectory, INGEST_SOURCE_CLI, type ImagePreparation, type ImagePreparer, type IncorrectStepsSubject, type IngestedTrajectory, type InspectSessionIndexOptions, JsonSourceError, type JsonlCorruptionReceipt, JsonlParseError, type JsonlReadOptions, type LiveBatchOptions, type LocateOptions, type LoopConvergence, type LoopConvergenceReport, type LoopIteration, type LoopTrend, type LoopTrendBasis, type ObservedLoop, type ObserverOptions, OpencodeAdapter, type OtlpIngestIssue, type OtlpIngestIssueKind, type OtlpInput, type OtlpInputFile, type OtlpRowConversion, type OtlpSpan, type OtlpSpanKind, type OtlpSpanLink, type OtlpStatusCode, POLICY_EVIDENCE_NOTE, type ParentTaskResolution, type ParseOptions, PartialUploadError, PiAdapter, type PiAdapterOptions, type PipelineOptions, type PipelineReport, type PlanOptions, type PolicyEvidenceLoopSummary, type PolicyEvidenceRecord, type PolicyEvidenceToolSummary, type PrefixDivergence, type PrefixReplayResult, type PrimeAnalyzerOptions, type PrimeTransport, type PrimeTransportRequest, type PrimeTransportResponse, type ProjectSessionBundleOptions, type ProjectSessionBundleResult, QwenAdapter, REACTIONS, RESULT_FILE, RULE, type Reaction, type ReactionReport, type ReactionSessionReport, type Redactor, type ReplayArmVerdict, type ReplayBatchCaseRow, type ReplayBatchCliArgs, type ReplayBatchFixResult, type ReplayBatchOptions, type ReplayBatchReport, type ReplayExclusionReason, type ReplayExecBackend, type ReplayExecResult, type ReplayExecSession, type ReplayFindingOptions, type ReplayFindingResult, type ReplayVerdict, type ReplayVerifyCliArgs, type ReplayVerifyOptions, type ReplayableCase, type RepoAttrs, type RepoResolution, type RepoResolutionSource, type ResolvedFindingReplay, type ResolvedOtlpInput, type ResolvedReplayInvocation, type ResourceResolution, type RunContextJournal, type RunContextNode, type RunContextResult, type RunContextSnapshot, type RunResult, type RunWatchSnapshot, type RunWatchTarget, type RuntimeTrace, SPAWN_JOURNAL_FILE, STATUS_MARK, SUBMIT_ACTION_SIGNATURE, SandboxCounterfactualRunner, type SandboxCounterfactualRunnerOptions, type SandboxReplayBackendOptions, type ScanOptions, type ScannedSession, type SessionBatch, type SessionBundleAbsence, type SessionBundleCarriedSignatures, type SessionBundleExclusion, type SessionBundleExclusionRule, type SessionBundleFile, type SessionBundleLeakCheck, type SessionBundleLedgerSlice, type SessionBundleManifest, type SessionBundleProjection, type SessionBundleResult, type SessionBundleSliceRule, type SessionBundleView, type SessionCorruptionReceipt, type SessionEnvironment, type SessionIdentityConflict, type SessionIdentityIndex, type SessionIntegrity, type SessionRef, type SessionRelationship, type SessionRole, type SessionSeedGroup, type SessionSelection, type SessionSelectionRow, type SessionSourceFile, type SessionTextLeak, type SessionTextLeakReport, type SessionWorkflow, SessionWorkflowError, type SessionWorkflowErrorCode, type SessionWorkflowIssue, type SessionWorkflowSession, type SessionWorkflowSummary, type SkippedAnalysis, type SkippedInputFile, type SpanInput, type SpanNodeStatus, type SpanRedaction, type SpanRunNode, type SpanRunSnapshot, type SpanStructure, type SpendRoll, type SteeringChainReport, type SteeringEdge, TRACES_REDACTION_RULES, type TraceAgenticRoute, type TraceAgenticRouteReason, type TraceAgenticRouteReasonCode, type TraceContextIndex, type TraceContextRoot, type TraceEvidenceExportOptions, type TraceEvidenceExportResult, type TraceEvidenceFormatOption, type TraceEvidenceInputFormat, type TraceEvidenceRow, type TraceExecutionOptions, type TraceFindingPacket, type TraceImprovementArtifacts, type TraceImprovementOptions, type TraceImprovementResult, type TraceIndexedFile, type TraceInspectionArea, type TraceInspectionFinding, type TraceInspectionReport, type TraceInspectionSeverity, type TraceInvestigationOptions, type TraceInvestigationResult, type TraceLiveAction, type TraceLiveActionKind, type TraceLiveAnalysisContext, type TraceLiveAnalyst, type TraceLiveBatch, type TraceLiveEvidence, type TraceLiveFinding, type TraceLiveLoop, type TraceLiveSeverity, type TraceSessionIndex, type TraceSessionIndexRow, type TraceStoreInvestigationOptions, type TraceStoreInvestigationResult, type TraceStreamEvent, type TraceStreamOptions, type TraceStreamReplayOptions, type TraceStreamSession, type TracesConfig, type TriggerPair, type UnavailableCapabilities, type UploadBackend, type UploadIdentity, type UploadItem, type UploadPlan, type UploadRecord, type UploadResult, type UploadState, type UserPromptInput, type VerifiableFinding, type VerifyFindingsCliArgs, type VerifyFindingsOptions, type VerifyFindingsRun, type WatchRunTargetOptions, ZERO_ROLL, type ZaiChatCallerOptions, addSpend, alreadyUploaded, analyzeAdoption, analyzeLiveBatch, analyzeLoopConvergence, analyzeReactions, analyzeSpans, analyzeSteeringChain, applyRedactor, assembleSessionBundle, assertSandboxReachable, buildFixPrompt, buildPolicyEvidenceRecord, buildRetryFixPrompt, buildSessionIndex, buildSessionIndexFromRows, buildSpanRunTree, buildTraceFindingPacket, capText, chatTrajectoryToSpans, classifyEvidenceOnlyPath, classifyFailureFollowUps, classifyLiveActions, classifyReaction, classifyVerdict, claudeActor, clipText, cmdReplayVerify, cmdReplayVerifyBatch, cmdVerifyFindings, codexActor, collectPolicyEvidence, collectSessionIndex, collectSessionSelection, collectSessionWorkflow, collectSessions, commandAnalyzer, commandRedactor, conformanceOfSpans, connectors, countScriptCommands, countSkillRunsJsonl, cwdMatchesSelection, cwdMatchesSelectionResolved, defaultTraceLiveAnalysts, deriveFailureSignature, derivedImageTag, describeSessionRelationship, dockerImagePreparer, enumerateReplayableCases, environmentAttributes, environmentFromSpanAttributes, equivalentGitCwds, executeUpload, exportTraceEvidenceFile, exportTraceEvidenceRows, exportTraceEvidenceText, extractFixCommand, fileRunContextSupervisorRunReader, findContextRoot, findSessionTextLeaks, findSpanSourceFiles, findingReplayStep, findingTrajectoryId, forEachTreeNode, generateFixCommand, goldIncorrectSteps, haloAnalyzer, hashSessionBundleFiles, hodoscopeAnalyzer, httpJsonTransport, importCodeTraceBench, incompleteInputsNote, indexSessionIdsByTrace, inferRole, inferSpanKind, ingestCodeTraceBenchSteps, inspectSessionIndex, int, isChatTrajectory, isChatTrajectoryMessage, isFileRunContextDir, isSubmitAction, knownHarnesses, listAdapters, listSessionBundleFiles, loadState, loadTracesConfig, locateSessions, looksLikeAgentPrompt, mergeRolls, mergeTracesConfig, ms, normalizeRemote, otlpRowToSpan, outboundHash, parseCorpusFlag, parseIncorrectStepsSubject, parseIsoToEpochMs, parseObservationOutput, parseRecordedReturncode, parseReplayBatchArgs, parseReplayVerifyArgs, parseSession, parseSince, parseVerifyFindingsArgs, planTraceAgenticRoute, planUpload, primeAnalyzer, projectSessionBundle, readCoordinationLog, readFileRunContext, readFindingsFile, readJsonFile, readJsonl, readLabelEntries, readOtlpInput, readRunContextJournal, readRunContextSnapshot, readRunWatchSnapshot, readSessionBundleManifest, readSessionIndexFile, readSpanRunSnapshot, recordSessionCorruption, redactSpans, renderBatchReport, renderConformance, renderInspectionReport, renderRunContextSnapshot, renderRunWatchSnapshot, renderSpanRunSnapshot, renderValidation, renderVerifiedFindingsSection, replayBatchUsage, replayVerify, replayVerifyFinding, replayVerifyUsage, resolveAdapter, resolveCaseResources, resolveFindingInvocation, resolveFindingReplayability, resolveOtlpInputFiles, resolveRepoAttrs, resolveRunContextDir, resolveRunWatchTarget, resolveSessionRepoAttrs, runCommand, runExternalAnalyzers, runFixLoop, runPipelines, runReplayBatch, runTotals, runTraceImprovement, runTraceInvestigation, runTraceStoreInvestigation, sandboxReplayBackend, saveReport, saveState, scanSessions, seededSample, selectAdapters, serializeInspectionReport, serializePolicyEvidence, serializeSessionIndex, serializeSpans, serializeTraceStreamEvent, sessionHash, sessionIdFromAttributes, sessionIntegrityAttributes, sessionTextSignatures, skippedAnalyses, span, spanRunTotals, stampEnvironmentAttrs, stampRepoAttrs, stampSessionIdentity, stampSessionIntegrity, stampSpanWorkdirRepoAttrs, streamSessions, summarizeOtlpExecution, summarizeSpanExecution, summarizeSpanStructure, takeJsonl, textIsSynthetic, toOpenInferenceSpan, toRuntimeStore, toTraceSpanEvents, tokens, totalAgenticFailureMessage, traceAgenticKinds, traceStreamEventsFromSpans, unavailableCapabilities, uploadKey, usd, userPromptSpan, validateOtlpSpans, validationExitCode, verifyFindings, verifyFindingsUsage, watchRunTarget, watchSessions, wrap, wrapActionForExec, writeHodoscopeInput, writeInspectionReportFile, writeOtlpFile, writePolicyEvidenceFile, writeSessionBundleManifest, writeSessionIndexFile, writeTraceEvidenceExportFile, writeTraceImprovementArtifacts, zaiChatCaller, zeroPricedCost };
package/dist/index.js CHANGED
@@ -60,6 +60,7 @@ import {
60
60
  capText,
61
61
  chatTrajectoryToSpans,
62
62
  classifyEvidenceOnlyPath,
63
+ classifyFailureFollowUps,
63
64
  classifyLiveActions,
64
65
  classifyReaction,
65
66
  classifyVerdict,
@@ -80,6 +81,7 @@ import {
80
81
  countScriptCommands,
81
82
  countSkillRunsJsonl,
82
83
  cwdMatchesSelection,
84
+ cwdMatchesSelectionResolved,
83
85
  defaultTraceLiveAnalysts,
84
86
  deriveFailureSignature,
85
87
  derivedImageTag,
@@ -249,7 +251,7 @@ import {
249
251
  writeTraceImprovementArtifacts,
250
252
  zaiChatCaller,
251
253
  zeroPricedCost
252
- } from "./chunk-MEAEXKUV.js";
254
+ } from "./chunk-CV22VGCK.js";
253
255
 
254
256
  // src/collect.ts
255
257
  async function collectSessions(opts = {}) {
@@ -338,6 +340,7 @@ export {
338
340
  capText,
339
341
  chatTrajectoryToSpans,
340
342
  classifyEvidenceOnlyPath,
343
+ classifyFailureFollowUps,
341
344
  classifyLiveActions,
342
345
  classifyReaction,
343
346
  classifyVerdict,
@@ -360,6 +363,7 @@ export {
360
363
  countSkillRunsJsonl,
361
364
  createHostedClient,
362
365
  cwdMatchesSelection,
366
+ cwdMatchesSelectionResolved,
363
367
  defaultTraceLiveAnalysts,
364
368
  deriveFailureSignature,
365
369
  derivedImageTag,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tangle-network/traces",
3
- "version": "0.11.6",
3
+ "version": "0.12.0",
4
4
  "description": "Point it at your coding-agent session traces (Claude Code, Codex, OpenCode, Gemini, Pi, …) and get failure-mode + efficiency findings. CLI + SDK over the @tangle-network/agent-eval analyst suite — observe live sessions, run your own analysts, redact, and upload to the Tangle Intelligence Platform.",
5
5
  "type": "module",
6
6
  "license": "MIT",