@tangle-network/traces 0.16.3 → 0.17.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.
package/README.md CHANGED
@@ -372,7 +372,7 @@ See [Replay verification](./docs/replay-verify.md) for setup, semantics, and hon
372
372
  | `--replay` | `stream`: scan once, then exit |
373
373
  | `--once` | `stream`: scan once; `watch <target>`: print ONE snapshot and exit |
374
374
  | `--no-spans` / `--no-findings` | `stream`: suppress raw span rows / finding rows |
375
- | `--no-content` | `upload`: send metadata only; strip all prompt/response text |
375
+ | `--no-content` | `facts`: omit conversation, commands, paths and assignment text; `upload`: send metadata only |
376
376
  | `--dry-run` / `--yes` | `upload`: preview without sending / skip the confirm prompt |
377
377
 
378
378
  ## Live stream
@@ -566,6 +566,21 @@ Do not pass `--llm`; the command is model-backed by definition.
566
566
 
567
567
  ## Session facts
568
568
 
569
+ The same facts sheet includes observed tool outcomes, captured input/output byte
570
+ volumes, call-to-result intervals, compaction boundaries and available context
571
+ sizes, spawn intervals, and existing skill invocation/document-read evidence.
572
+ Each measurement carries coverage; absent telemetry remains unknown.
573
+ `facts --no-content` withholds conversation, command, changed-file and assignment
574
+ text while retaining measurement metadata. This is a local metadata view, not a
575
+ share-safety certificate.
576
+
577
+ SDK consumers use `buildSessionFactsReport(spans, { includeContent: false })`.
578
+ Cache by `measurementVersion` and `sourceDigest`; `evidenceThrough` is the latest
579
+ recorded endpoint, not current liveness. Computing the sheet parses the supplied
580
+ spans; returning a stored sheet needs no model call or trace scan. Semantic
581
+ judgments remain attributed analyst results.
582
+
583
+
569
584
  `traces facts` prints the deterministic session-facts sheet: the answers a session audit needs first, computed straight from the spans.
570
585
  No model call, no engine, no budget — it costs $0 and always returns the same sheet for the same spans.
571
586
 
@@ -739,6 +754,12 @@ Claude Workflow subagents are selected by the run ID and transcript directory re
739
754
  Each Workflow child attaches to the latest matching call that started before the child.
740
755
  Task selection then keeps only children attached to calls in that task.
741
756
  Returned directories from another resumed Claude session are included in parsing and source hashes.
757
+ For a copied Claude session, preserve `<session UUID>/subagents/workflows/<run ID>` beside the parent JSONL file.
758
+ Recorded native `.claude/projects/<project>/<session UUID>/subagents/workflows/<run ID>` paths resolve to that copied subtree when outside the selected store.
759
+ Copy every referenced Workflow directory, including runs stored under another resumed session UUID.
760
+ The original transcript stays unchanged, and child attribution uses its recorded Workflow identity.
761
+ Missing copied directories, conflicting source bindings, and symlinks that change the copied session or run identity stop parsing.
762
+ Copied Workflow directories contain regular transcript and metadata files; symlink entries stop parsing.
742
763
  Missing or conflicting Workflow identities stop the parse instead of widening the selected history.
743
764
  Cross-harness parent/child trees are not inferred.
744
765
  For a reproducible report, run `traces list` first and pass its session ID with `--session`.
@@ -964,7 +985,7 @@ if (input.validation.ok) await analyzeSpans(input.spans)
964
985
 
965
986
  // Observe live sessions, feed findings anywhere (read-only, cancellable):
966
987
  const c = new AbortController()
967
- await watchSessions({ all: true, signal: c.signal, onLoop: (l) => alert(l.toolName, l.occurrences) })
988
+ await watchSessions({ all: true, signal: c.signal, onLoop: (l) => alert(`${l.toolName} x${l.occurrences}`) })
968
989
 
969
990
  // Feed a visualizer or dashboard:
970
991
  await streamSessions({ all: true, signal: c.signal, includeSpans: false, onEvent: (event) => console.log(event) })
@@ -977,7 +998,7 @@ registry.register({
977
998
  return [makeFinding({ analyst_id: 'mine', area: 'custom', claim: '…', severity: 'info', evidence_refs: [], confidence: 0.9 })]
978
999
  },
979
1000
  })
980
- await analyzeSpans(spans, { registry })
1001
+ await analyzeSpans(input.spans, { registry })
981
1002
  ```
982
1003
 
983
1004
  ## Examples