@tangle-network/traces 0.8.19 → 0.8.20
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 +52 -25
- package/dist/cli.js +14 -14
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# traces
|
|
2
2
|
|
|
3
|
-
> Point `traces` at the session logs your coding agent already writes to disk
|
|
3
|
+
> Point `traces` at the session logs your coding agent already writes to disk: Claude Code, Codex, OpenCode, Gemini, and more. Get failure-mode and efficiency findings with zero instrumentation. A CLI *and* an SDK.
|
|
4
4
|
|
|
5
5
|

|
|
6
6
|
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
[](./LICENSE)
|
|
9
9
|
[](https://nodejs.org)
|
|
10
10
|
|
|
11
|
-
It reads the transcripts your harness leaves on disk, reconstructs the run as spans, and reports where the agent got stuck, burned tokens, or stopped checking its own work
|
|
11
|
+
It reads the transcripts your harness leaves on disk, reconstructs the run as spans, and reports where the agent got stuck, burned tokens, or stopped checking its own work. The deterministic pass runs locally, with no API key and no cost.
|
|
12
12
|
|
|
13
13
|
## Contents
|
|
14
14
|
|
|
@@ -46,16 +46,16 @@ Requires Node ≥ 22.
|
|
|
46
46
|
traces analyze --harness claude-code --last 1
|
|
47
47
|
traces improve --harness claude-code --last 5 --dir .traces/improvement
|
|
48
48
|
traces watch --all
|
|
49
|
-
traces stream --all --
|
|
49
|
+
traces stream --all --mode findings
|
|
50
50
|
```
|
|
51
51
|
|
|
52
|
-
That's the command in the demo above. The **deterministic pass**
|
|
52
|
+
That's the command in the demo above. The **deterministic pass** checks stuck loops, token growth, output decay, missing self-verification, and tool monoculture. It needs no API key and costs nothing.
|
|
53
53
|
|
|
54
54
|
Add `--llm` for the **agentic analysts** (failure-mode / knowledge-gap / knowledge-poisoning / improvement); they call OpenAI and respect `--budget <usd>`.
|
|
55
55
|
|
|
56
|
-
Every run also writes a **canonical OpenInference JSONL artifact**, so you can run external engines like [HALO](https://github.com/context-labs/halo) over it directly with `--analyzer halo
|
|
56
|
+
Every run also writes a **canonical OpenInference JSONL artifact**, so you can run external engines like [HALO](https://github.com/context-labs/halo) over it directly with `--analyzer halo`. See [External engines](#external-engines-bring-your-own). Analysis is never locked to one engine.
|
|
57
57
|
|
|
58
|
-
`traces improve` is the reviewable action path. It writes typed artifacts
|
|
58
|
+
`traces improve` is the reviewable action path. It writes typed artifacts: findings, recommendations, evidence rows, claims, report, and before/after replay metadata. Another agent, CI job, or hosted product can consume the result without scraping prose.
|
|
59
59
|
|
|
60
60
|
## What it finds
|
|
61
61
|
|
|
@@ -64,10 +64,10 @@ The deterministic pass (free, no key) surfaces:
|
|
|
64
64
|
| Finding | Meaning |
|
|
65
65
|
|---|---|
|
|
66
66
|
| **Stuck loops** | the same tool called N× with identical args and no state change |
|
|
67
|
-
| **Monotonic input growth** | full history re-sent every step
|
|
67
|
+
| **Monotonic input growth** | full history re-sent every step; context never compressed |
|
|
68
68
|
| **Output-length decay** | planning/reasoning per step shrinking as context grows |
|
|
69
69
|
| **No self-verification** | state-mutating actions never followed by an eval/inspect/check |
|
|
70
|
-
| **Tool
|
|
70
|
+
| **Tool mix / retry / error rates** | repeated, retried, and failed tool calls |
|
|
71
71
|
|
|
72
72
|
`--llm` adds agentic analysts that read the conversation and cluster higher-order failure and improvement signals.
|
|
73
73
|
|
|
@@ -88,7 +88,7 @@ The deterministic pass (free, no key) surfaces:
|
|
|
88
88
|
| `github-copilot` (`copilot`) | `~/.copilot/session-state/<id>/events.jsonl` | fixture |
|
|
89
89
|
| `forge` (`forgecode`) | `/dump` JSON exports | fixture |
|
|
90
90
|
|
|
91
|
-
Every adapter captures the full conversation
|
|
91
|
+
Every adapter captures the full conversation: the **user's prompt** and the **assistant's response** text, plus tool calls/results and token usage. (`github-copilot` is the one exception: its log format carries no user prompt.) Factory stores token totals in `.settings.json`, not per turn. Forge reads `/dump` JSON exports (live SQLite is a follow-up). ACP-only bridges may not persist a local transcript.
|
|
92
92
|
|
|
93
93
|
## CLI reference
|
|
94
94
|
|
|
@@ -118,7 +118,7 @@ traces upload --since 24h # upload last day to the Inte
|
|
|
118
118
|
| `--last <n>` | Most-recent N sessions |
|
|
119
119
|
| `--session <path>` | One explicit session file |
|
|
120
120
|
| `--cwd <dir>` | Filter by working directory |
|
|
121
|
-
| `--since <t>` | `upload`: window
|
|
121
|
+
| `--since <t>` | `upload`: window, `30m`/`2h`/`7d` or ISO (default 24h); `analyze`: ISO cutoff |
|
|
122
122
|
| `--out <path>` | Write the report to a file |
|
|
123
123
|
| `--dir <path>` | `improve`: write the full artifact pack to this directory |
|
|
124
124
|
| `--otlp <path>` | OTLP artifact path (also evidence provenance / dry-run upload preview) |
|
|
@@ -130,7 +130,7 @@ traces upload --since 24h # upload last day to the Inte
|
|
|
130
130
|
| `--mode <kind>` | `stream`: `visualizer` (spans + findings), `findings` (low-volume), or `agent` (findings + reports) |
|
|
131
131
|
| `--replay` / `--once` | `stream`: scan once, then exit |
|
|
132
132
|
| `--no-spans` / `--no-findings` | `stream`: suppress raw span rows / finding rows |
|
|
133
|
-
| `--no-content` | `upload`: send metadata only
|
|
133
|
+
| `--no-content` | `upload`: send metadata only; strip all prompt/response text |
|
|
134
134
|
| `--dry-run` / `--yes` | `upload`: preview without sending / skip the confirm prompt |
|
|
135
135
|
|
|
136
136
|
## Live stream
|
|
@@ -153,6 +153,33 @@ The semantic findings currently cover repeated failing commands, verification ch
|
|
|
153
153
|
Use `--mode findings` when you want the low-volume meaning layer; keep `visualizer` for real-time views that need motion, timing, and tool-call texture.
|
|
154
154
|
Use `--mode agent` when another agent needs deterministic loop/tool-use reports alongside the findings.
|
|
155
155
|
|
|
156
|
+
Custom online analysts use the same config file as `investigate` and `improve`:
|
|
157
|
+
|
|
158
|
+
```js
|
|
159
|
+
export default {
|
|
160
|
+
liveAnalysts: [{
|
|
161
|
+
id: 'my-live-rule',
|
|
162
|
+
analyze(context) {
|
|
163
|
+
return context.actions.some((action) => action.kind === 'claim') ? [{
|
|
164
|
+
schemaVersion: 1,
|
|
165
|
+
kind: 'traces.live_finding',
|
|
166
|
+
id: `live.my-live-rule.${context.session.sessionId}`,
|
|
167
|
+
ruleId: 'my-live-rule',
|
|
168
|
+
fingerprint: `my-live-rule.${context.session.sessionId}`,
|
|
169
|
+
severity: 'info',
|
|
170
|
+
title: 'Completion claim seen',
|
|
171
|
+
claim: 'A claim-like assistant message appeared in the live trace.',
|
|
172
|
+
action: 'Require the next stream batch to include a verification action.',
|
|
173
|
+
check: 'A later finding or batch should show a test/build/typecheck action.',
|
|
174
|
+
evidence: [{ kind: 'metric', label: 'actions', value: String(context.actions.length) }],
|
|
175
|
+
session: context.session,
|
|
176
|
+
observedAt: context.generatedAt,
|
|
177
|
+
}] : []
|
|
178
|
+
},
|
|
179
|
+
}],
|
|
180
|
+
}
|
|
181
|
+
```
|
|
182
|
+
|
|
156
183
|
## Improvement engine
|
|
157
184
|
|
|
158
185
|
`traces improve` turns observed sessions into a portable improvement packet:
|
|
@@ -229,7 +256,7 @@ That boundary matters. `agent-lab` campaign `cells.jsonl` says "arm X beat arm Y
|
|
|
229
256
|
|
|
230
257
|
### Export existing evidence/events to OpenInference
|
|
231
258
|
|
|
232
|
-
If you already have compact evidence or
|
|
259
|
+
If you already have compact evidence or event captures on disk, convert them to the same OpenInference JSONL shape that `traces analyze --analyzer halo` uses:
|
|
233
260
|
|
|
234
261
|
```bash
|
|
235
262
|
traces export policy-evidence.jsonl --out spans.openinference.jsonl
|
|
@@ -240,7 +267,7 @@ halo spans.openinference.jsonl --prompt "Analyze this trace slice" --max-turns 1
|
|
|
240
267
|
`traces export` accepts:
|
|
241
268
|
|
|
242
269
|
- compact `traces.policy_evidence.session` JSONL from `traces evidence`
|
|
243
|
-
-
|
|
270
|
+
- JSON arrays with `start`, `raw`, `result`, `done`, and `error` events
|
|
244
271
|
- existing OpenInference JSONL, rewritten through the local redaction path
|
|
245
272
|
|
|
246
273
|
Run `traces export --help` for the full command reference.
|
|
@@ -250,28 +277,28 @@ Run `traces export --help` for the full command reference.
|
|
|
250
277
|
`upload` **redacts locally before anything leaves the machine**, dedups against already-uploaded sessions, and tags each with metadata (harness, cwd, git branch, host).
|
|
251
278
|
|
|
252
279
|
```bash
|
|
253
|
-
traces upload --since 24h --dry-run # see exactly what would be sent
|
|
254
|
-
traces upload --since 24h --no-content # send metadata only
|
|
280
|
+
traces upload --since 24h --dry-run # see exactly what would be sent; no network
|
|
281
|
+
traces upload --since 24h --no-content # send metadata only; drop all prompt/response text
|
|
255
282
|
traces upload --since 24h # send it
|
|
256
283
|
```
|
|
257
284
|
|
|
258
285
|
It needs `TANGLE_INGEST_URL` (or `TANGLE_ORCHESTRATOR_URL`), `TANGLE_INGEST_API_KEY` (or `TANGLE_API_KEY`), and `TANGLE_TENANT_ID`. Without them, `--dry-run` still works fully.
|
|
259
286
|
|
|
260
|
-
### Redaction scope
|
|
287
|
+
### Redaction scope: read this before uploading prose
|
|
261
288
|
|
|
262
289
|
Redaction is **best-effort regex** for *structured* secrets and credentials: API keys, GitHub/cloud tokens, JWTs, bearer headers, private-key blocks, `KEY=secret` assignments, and credentials embedded in URLs. It runs over every span attribute, including the captured prompt/response text.
|
|
263
290
|
|
|
264
|
-
It does **not** catch free-form PII
|
|
291
|
+
It does **not** catch free-form PII such as names, postal addresses, or phone numbers in prose. Those need a context-aware model. Three postures, strongest first:
|
|
265
292
|
|
|
266
|
-
1. **`--no-content
|
|
293
|
+
1. **`--no-content`**: upload metadata only (tool calls, tokens, timing, loop signal); no prose leaves the machine.
|
|
267
294
|
2. Run an ML PII scrubber (e.g. [`openai/privacy-filter`](https://github.com/openai/privacy-filter)) on the platform ingest side as defense-in-depth.
|
|
268
|
-
3. Default
|
|
295
|
+
3. Default: regex redaction of structured secrets.
|
|
269
296
|
|
|
270
297
|
Always `--dry-run` first to see exactly what would be sent.
|
|
271
298
|
|
|
272
299
|
## External engines (bring your own)
|
|
273
300
|
|
|
274
|
-
`traces` hosts analysis engines and PII scrubbers it does **not** bundle
|
|
301
|
+
`traces` hosts analysis engines and PII scrubbers it does **not** bundle. You install the tool; `traces` drives it over a thin command adapter. Same pattern for any future engine or model.
|
|
275
302
|
|
|
276
303
|
**Analyzers** run over the emitted OTLP artifact as peers to the built-in analysts:
|
|
277
304
|
|
|
@@ -281,7 +308,7 @@ traces analyze --last 1 --analyzer halo --analyzer-prompt "find token waste"
|
|
|
281
308
|
traces analyze --last 1 --analyzer halo --analyzer my-engine # repeatable
|
|
282
309
|
```
|
|
283
310
|
|
|
284
|
-
Our OTLP artifact is **canonical OpenInference** (top-level `kind`, `resource`, `scope`), so HALO reads it directly
|
|
311
|
+
Our OTLP artifact is **canonical OpenInference** (top-level `kind`, `resource`, `scope`), so HALO reads it directly with no conversion. HALO runs its *own* LLM. Set `OPENAI_BASE_URL` / `OPENAI_API_KEY`, or use HALO's provider; `--model` is forwarded to it. `traces` supplies the trace and drives the CLI; it does not pay for or configure HALO's model.
|
|
285
312
|
|
|
286
313
|
**Redactors** scrub prompt/response prose with an external PII model (catching names/addresses the regex pass can't), running *after* the built-in redaction:
|
|
287
314
|
|
|
@@ -292,7 +319,7 @@ traces upload --since 24h --dry-run --redactor "my-pii-scrubber"
|
|
|
292
319
|
|
|
293
320
|
In the SDK these are the `ExternalAnalyzer` and `Redactor` interfaces (`haloAnalyzer`, `commandAnalyzer`, `commandRedactor`, `applyRedactor`, `runExternalAnalyzers`). See [`examples/external-engines.ts`](./examples/external-engines.ts).
|
|
294
321
|
|
|
295
|
-
> For the built-in agentic analysts (`--llm`), set `OPENAI_API_KEY
|
|
322
|
+
> For the built-in agentic analysts (`--llm`), set `OPENAI_API_KEY`, or point at any OpenAI-compatible gateway with `OPENAI_BASE_URL` (e.g. an internal router) to use a non-OpenAI key.
|
|
296
323
|
|
|
297
324
|
## Release automation
|
|
298
325
|
|
|
@@ -312,7 +339,7 @@ The CLI is a thin consumer of these exports.
|
|
|
312
339
|
|
|
313
340
|
| Export | Signature | Use |
|
|
314
341
|
|---|---|---|
|
|
315
|
-
| `analyzeSpans` | `(spans, { registry?, ai?, budgetUsd? }) → AnalyzeResult` | run
|
|
342
|
+
| `analyzeSpans` | `(spans, { registry?, ai?, budgetUsd? }) → AnalyzeResult` | run built-in analysts, or **your own** via `registry` |
|
|
316
343
|
| `runTraceInvestigation` | `(TraceInvestigationOptions) → TraceInvestigationResult` | typed findings, recommendations, claims, external analyzer output, and report |
|
|
317
344
|
| `runTraceImprovementLoop` | `(TraceImprovementOptions) → TraceImprovementResult` | writes the full improvement artifact pack and optional proposal output |
|
|
318
345
|
| `buildTraceFindingPacket` | `({ findings }) → TraceFindingPacket` | turn any `AnalystFinding[]` into recommendations, claims, and a report |
|
|
@@ -366,7 +393,7 @@ Runnable, in [`examples/`](./examples):
|
|
|
366
393
|
|---|---|
|
|
367
394
|
| [`observe-and-alert.ts`](./examples/observe-and-alert.ts) | tail live sessions and alert on stuck loops |
|
|
368
395
|
| [`custom-analyst.ts`](./examples/custom-analyst.ts) | register and run your own analyst |
|
|
369
|
-
| [`improvement-config.mjs`](./examples/improvement-config.mjs) | plug in BYO analysts
|
|
396
|
+
| [`improvement-config.mjs`](./examples/improvement-config.mjs) | plug in BYO analysts for `traces stream` / `traces improve` |
|
|
370
397
|
| [`custom-backend.ts`](./examples/custom-backend.ts) | redact + dedup + upload to your own sink |
|
|
371
398
|
| [`register-harness.ts`](./examples/register-harness.ts) | add a new harness by implementing `HarnessTraceAdapter` |
|
|
372
399
|
| [`external-engines.ts`](./examples/external-engines.ts) | drive HALO + an external PII scrubber you install yourself |
|
|
@@ -378,5 +405,5 @@ pnpm install
|
|
|
378
405
|
pnpm dev analyze --harness claude-code --last 1 # run from source via tsx
|
|
379
406
|
pnpm test
|
|
380
407
|
pnpm typecheck
|
|
381
|
-
pnpm build #
|
|
408
|
+
pnpm build # dist/index.js (SDK) + dist/cli.js (bin) + .d.ts
|
|
382
409
|
```
|
package/dist/cli.js
CHANGED
|
@@ -215,7 +215,7 @@ async function buildAxService() {
|
|
|
215
215
|
const apiKey = process.env.OPENAI_API_KEY;
|
|
216
216
|
if (!apiKey) {
|
|
217
217
|
throw new Error(
|
|
218
|
-
"--llm needs OPENAI_API_KEY
|
|
218
|
+
"--llm needs OPENAI_API_KEY: an OpenAI key, or a router/gateway key with OPENAI_BASE_URL set to an OpenAI-compatible endpoint (e.g. the Tangle router). Deterministic analysis needs no key."
|
|
219
219
|
);
|
|
220
220
|
}
|
|
221
221
|
const apiURL = process.env.OPENAI_BASE_URL || void 0;
|
|
@@ -226,7 +226,7 @@ async function cmdList(args) {
|
|
|
226
226
|
const groups = await discover({ ...args, last: args.last || 20 });
|
|
227
227
|
for (const { adapter, refs } of groups) {
|
|
228
228
|
console.log(`
|
|
229
|
-
${adapter.harness}
|
|
229
|
+
${adapter.harness}: ${refs.length} session(s)`);
|
|
230
230
|
for (const r of refs) {
|
|
231
231
|
console.log(` ${new Date(r.mtimeMs).toISOString()} ${r.sessionId} ${r.cwd ?? ""}`);
|
|
232
232
|
}
|
|
@@ -516,7 +516,7 @@ function formatLiveFinding(finding) {
|
|
|
516
516
|
const where = `[${finding.session.harness}] ${finding.session.sessionId.slice(0, 8)}`;
|
|
517
517
|
const cwd = finding.session.cwd ? ` \xB7 ${finding.session.cwd}` : "";
|
|
518
518
|
return [
|
|
519
|
-
`${ts} ${finding.severity.toUpperCase()} ${where}
|
|
519
|
+
`${ts} ${finding.severity.toUpperCase()} ${where}: ${finding.title}${cwd}`,
|
|
520
520
|
` evidence: ${summarizeFindingEvidence(finding)}`,
|
|
521
521
|
` action: ${finding.action}`,
|
|
522
522
|
` check: ${finding.check}`
|
|
@@ -591,7 +591,7 @@ async function cmdStream(args) {
|
|
|
591
591
|
process.once("SIGINT", () => controller.abort());
|
|
592
592
|
if (!args.replay) {
|
|
593
593
|
process.stderr.write(
|
|
594
|
-
`traces stream
|
|
594
|
+
`traces stream: ${preset.mode} JSONL feed for ${all ? "all harnesses" : args.harness}, last ${args.window}m, every ${args.interval}s. Ctrl-C to stop.
|
|
595
595
|
`
|
|
596
596
|
);
|
|
597
597
|
}
|
|
@@ -624,7 +624,7 @@ async function cmdWatch(args) {
|
|
|
624
624
|
const controller = new AbortController();
|
|
625
625
|
process.once("SIGINT", () => controller.abort());
|
|
626
626
|
process.stderr.write(
|
|
627
|
-
`traces watch
|
|
627
|
+
`traces watch: observing ${all ? "all harnesses" : args.harness}, sessions active in the last ${args.window}m, every ${args.interval}s. Loop + semantic live findings; read-only; Ctrl-C to stop.
|
|
628
628
|
`
|
|
629
629
|
);
|
|
630
630
|
await watchSessions({
|
|
@@ -638,7 +638,7 @@ async function cmdWatch(args) {
|
|
|
638
638
|
onLoop: (l) => {
|
|
639
639
|
const ts = (/* @__PURE__ */ new Date()).toISOString().slice(11, 19);
|
|
640
640
|
process.stdout.write(
|
|
641
|
-
`${ts} LOOP [${l.harness}] ${l.sessionId.slice(0, 8)}
|
|
641
|
+
`${ts} LOOP [${l.harness}] ${l.sessionId.slice(0, 8)}: \`${l.toolName}\` repeated \xD7${l.occurrences} with identical args (${(l.windowMs / 1e3).toFixed(0)}s)${l.cwd ? ` \xB7 ${l.cwd}` : ""}
|
|
642
642
|
`
|
|
643
643
|
);
|
|
644
644
|
},
|
|
@@ -686,7 +686,7 @@ Window: since ${new Date(sinceMs).toISOString()}
|
|
|
686
686
|
}
|
|
687
687
|
if (args.dryRun) {
|
|
688
688
|
const res2 = await executeUpload(plan, { dryRun: true, otlpOut: args.otlp, stripContent: args.noContent, redactor });
|
|
689
|
-
console.log(`dry run
|
|
689
|
+
console.log(`dry run: ${newItems.length} session(s), ${totalRedactions} redaction(s). Redacted OTLP -> ${res2.otlpPath}`);
|
|
690
690
|
console.log("No upload performed. Set TANGLE_INGEST_URL / TANGLE_INGEST_API_KEY / TANGLE_TENANT_ID and drop --dry-run to send.");
|
|
691
691
|
return;
|
|
692
692
|
}
|
|
@@ -704,7 +704,7 @@ Window: since ${new Date(sinceMs).toISOString()}
|
|
|
704
704
|
);
|
|
705
705
|
}
|
|
706
706
|
function usageExport() {
|
|
707
|
-
console.log(`traces export
|
|
707
|
+
console.log(`traces export: convert trace evidence files to OpenInference JSONL
|
|
708
708
|
|
|
709
709
|
Usage:
|
|
710
710
|
traces export <input.jsonl|input.json> --out <spans.jsonl> [--format auto]
|
|
@@ -714,7 +714,7 @@ Usage:
|
|
|
714
714
|
|
|
715
715
|
Input formats:
|
|
716
716
|
policy-evidence Compact JSONL rows from \`traces evidence --out policy-evidence.jsonl\`
|
|
717
|
-
sandbox-events
|
|
717
|
+
sandbox-events JSON arrays with start/raw/result/done/error events
|
|
718
718
|
openinference Existing OpenInference JSONL; rewrites through traces redaction
|
|
719
719
|
intelligence-spans JSONL rows exported from Tangle Intelligence trace spans
|
|
720
720
|
auto Detect the format from the file contents (default)
|
|
@@ -732,7 +732,7 @@ Safety:
|
|
|
732
732
|
--metadata must be a JSON object; --attr key=value is repeatable and overrides matching metadata keys.`);
|
|
733
733
|
}
|
|
734
734
|
function usage() {
|
|
735
|
-
console.log(`traces
|
|
735
|
+
console.log(`traces: analyze, observe & upload coding-agent sessions
|
|
736
736
|
|
|
737
737
|
Commands:
|
|
738
738
|
list List discovered sessions
|
|
@@ -754,7 +754,7 @@ Options:
|
|
|
754
754
|
--last <n> Most-recent N sessions
|
|
755
755
|
--session <path> Analyze/stream one explicit harness session file
|
|
756
756
|
--cwd <dir> Filter sessions by working directory
|
|
757
|
-
--since <t> upload: window
|
|
757
|
+
--since <t> upload: window, 30m / 2h / 7d or an ISO date (default 24h); analyze: ISO cutoff
|
|
758
758
|
--out <path> Write report to a file
|
|
759
759
|
--dir <path> improve: write artifacts to this directory
|
|
760
760
|
--otlp <path> OTLP artifact path (also evidence provenance / dry-run upload preview)
|
|
@@ -771,11 +771,11 @@ Options:
|
|
|
771
771
|
--budget <usd> USD cap for agentic analysts
|
|
772
772
|
--analyzer <cmd> analyze: also run an external engine over the OTLP (repeatable; "halo" or any command)
|
|
773
773
|
--analyzer-prompt <p> analyze: prompt passed to external analyzers (default: diagnose)
|
|
774
|
-
--interval <s> watch: poll interval seconds (default 5)
|
|
775
|
-
--window <m> watch: only sessions active in the last N minutes (default 30)
|
|
774
|
+
--interval <s> watch/stream: poll interval seconds (default 5)
|
|
775
|
+
--window <m> watch/stream: only sessions active in the last N minutes (default 30)
|
|
776
776
|
--min-loop <n> Min identical repeated calls to flag a loop (default 3)
|
|
777
777
|
--dry-run upload: redact + dedup + preview, write OTLP, but do NOT send
|
|
778
|
-
--no-content upload: strip prompt/response text
|
|
778
|
+
--no-content upload: strip prompt/response text; send metadata only
|
|
779
779
|
--redactor <cmd> upload: external PII scrubber (JSON array stdin\u2192stdout) after the regex pass
|
|
780
780
|
--yes, -y upload: skip the confirmation prompt
|
|
781
781
|
--version, -v Print the installed traces version
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tangle-network/traces",
|
|
3
|
-
"version": "0.8.
|
|
3
|
+
"version": "0.8.20",
|
|
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",
|