agent-nuvira 3.3.3 → 3.3.4
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 +13 -5
- package/dist/agent-sdk/src/agent.d.ts +2 -0
- package/dist/agent-sdk/src/agent.d.ts.map +1 -1
- package/dist/agent-sdk/src/define.d.ts +64 -0
- package/dist/agent-sdk/src/define.d.ts.map +1 -0
- package/dist/agent-sdk/src/define.js +76 -0
- package/dist/agent-sdk/src/define.js.map +1 -0
- package/dist/agent-sdk/src/index.d.ts +9 -0
- package/dist/agent-sdk/src/index.d.ts.map +1 -1
- package/dist/agent-sdk/src/index.js +9 -0
- package/dist/agent-sdk/src/index.js.map +1 -1
- package/dist/agent-sdk/src/scaffold.d.ts +11 -0
- package/dist/agent-sdk/src/scaffold.d.ts.map +1 -1
- package/dist/agent-sdk/src/scaffold.js +16 -6
- package/dist/agent-sdk/src/scaffold.js.map +1 -1
- package/dist/agents/long-form-plan.d.ts.map +1 -1
- package/dist/agents/long-form-plan.js +2 -1
- package/dist/agents/long-form-plan.js.map +1 -1
- package/dist/agents/orchestrator.d.ts.map +1 -1
- package/dist/agents/orchestrator.js +5 -4
- package/dist/agents/orchestrator.js.map +1 -1
- package/dist/cli/agent.d.ts +2 -2
- package/dist/cli/agent.js +10 -10
- package/dist/cli/chat.d.ts +94 -0
- package/dist/cli/chat.d.ts.map +1 -1
- package/dist/cli/chat.js +354 -20
- package/dist/cli/chat.js.map +1 -1
- package/dist/cli/cli-program.d.ts.map +1 -1
- package/dist/cli/cli-program.js +5 -0
- package/dist/cli/cli-program.js.map +1 -1
- package/dist/cli/config.d.ts.map +1 -1
- package/dist/cli/config.js +9 -1
- package/dist/cli/config.js.map +1 -1
- package/dist/cli/doctor.d.ts.map +1 -1
- package/dist/cli/doctor.js +3 -2
- package/dist/cli/doctor.js.map +1 -1
- package/dist/cli/edit.js +2 -2
- package/dist/cli/eval.d.ts +17 -0
- package/dist/cli/eval.d.ts.map +1 -1
- package/dist/cli/eval.js +105 -2
- package/dist/cli/eval.js.map +1 -1
- package/dist/cli/execute.d.ts +16 -1
- package/dist/cli/execute.d.ts.map +1 -1
- package/dist/cli/execute.js +192 -22
- package/dist/cli/execute.js.map +1 -1
- package/dist/cli/loop-executor.d.ts +55 -0
- package/dist/cli/loop-executor.d.ts.map +1 -1
- package/dist/cli/loop-executor.js +212 -13
- package/dist/cli/loop-executor.js.map +1 -1
- package/dist/cli/model.d.ts.map +1 -1
- package/dist/cli/model.js +9 -8
- package/dist/cli/model.js.map +1 -1
- package/dist/cli/models.d.ts +1 -1
- package/dist/cli/models.js +4 -4
- package/dist/cli/parity.d.ts +85 -0
- package/dist/cli/parity.d.ts.map +1 -0
- package/dist/cli/parity.js +506 -0
- package/dist/cli/parity.js.map +1 -0
- package/dist/cli/plan.d.ts.map +1 -1
- package/dist/cli/plan.js +2 -1
- package/dist/cli/plan.js.map +1 -1
- package/dist/cli/retrieval.d.ts.map +1 -1
- package/dist/cli/retrieval.js +5 -4
- package/dist/cli/retrieval.js.map +1 -1
- package/dist/cli/sdk.js +4 -4
- package/dist/cli/sdk.js.map +1 -1
- package/dist/cli/trace.d.ts.map +1 -1
- package/dist/cli/trace.js +2 -1
- package/dist/cli/trace.js.map +1 -1
- package/dist/cli/workflow.js +2 -2
- package/dist/cli/workflow.js.map +1 -1
- package/dist/config/types.d.ts +44 -0
- package/dist/config/types.d.ts.map +1 -1
- package/dist/findings/verdicts.d.ts +241 -0
- package/dist/findings/verdicts.d.ts.map +1 -0
- package/dist/findings/verdicts.js +284 -0
- package/dist/findings/verdicts.js.map +1 -0
- package/dist/gateway/adapters.d.ts +65 -0
- package/dist/gateway/adapters.d.ts.map +1 -1
- package/dist/gateway/adapters.js +216 -10
- package/dist/gateway/adapters.js.map +1 -1
- package/dist/gateway/channel-directory.d.ts +31 -0
- package/dist/gateway/channel-directory.d.ts.map +1 -1
- package/dist/gateway/channel-directory.js +40 -0
- package/dist/gateway/channel-directory.js.map +1 -1
- package/dist/gateway/gateway-log.d.ts +1 -1
- package/dist/gateway/gateway-log.d.ts.map +1 -1
- package/dist/gateway/gateway-log.js.map +1 -1
- package/dist/gateway/hooks.d.ts +87 -19
- package/dist/gateway/hooks.d.ts.map +1 -1
- package/dist/gateway/hooks.js +62 -23
- package/dist/gateway/hooks.js.map +1 -1
- package/dist/gateway/inbound-media.d.ts +147 -0
- package/dist/gateway/inbound-media.d.ts.map +1 -0
- package/dist/gateway/inbound-media.js +317 -0
- package/dist/gateway/inbound-media.js.map +1 -0
- package/dist/gateway/inbox.d.ts +8 -1
- package/dist/gateway/inbox.d.ts.map +1 -1
- package/dist/gateway/inbox.js.map +1 -1
- package/dist/gateway/platform-config.d.ts +14 -0
- package/dist/gateway/platform-config.d.ts.map +1 -1
- package/dist/gateway/platform-config.js +26 -8
- package/dist/gateway/platform-config.js.map +1 -1
- package/dist/gateway/realtime.d.ts +114 -0
- package/dist/gateway/realtime.d.ts.map +1 -0
- package/dist/gateway/realtime.js +402 -0
- package/dist/gateway/realtime.js.map +1 -0
- package/dist/gateway/registry.d.ts +31 -0
- package/dist/gateway/registry.d.ts.map +1 -1
- package/dist/gateway/registry.js +224 -4
- package/dist/gateway/registry.js.map +1 -1
- package/dist/gateway/whatsapp/baileys-bridge.d.ts +11 -1
- package/dist/gateway/whatsapp/baileys-bridge.d.ts.map +1 -1
- package/dist/gateway/whatsapp/baileys-bridge.js +123 -4
- package/dist/gateway/whatsapp/baileys-bridge.js.map +1 -1
- package/dist/gateway/whatsapp/bridge.d.ts +6 -2
- package/dist/gateway/whatsapp/bridge.d.ts.map +1 -1
- package/dist/gateway/whatsapp/bridge.js.map +1 -1
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -1
- package/dist/inference/factory.d.ts +14 -0
- package/dist/inference/factory.d.ts.map +1 -1
- package/dist/inference/factory.js +17 -0
- package/dist/inference/factory.js.map +1 -1
- package/dist/inference/groq-adapter.d.ts +2 -0
- package/dist/inference/groq-adapter.d.ts.map +1 -1
- package/dist/inference/groq-adapter.js +16 -6
- package/dist/inference/groq-adapter.js.map +1 -1
- package/dist/inference/tools.d.ts.map +1 -1
- package/dist/inference/tools.js +29 -0
- package/dist/inference/tools.js.map +1 -1
- package/dist/learning/benchmark.d.ts.map +1 -1
- package/dist/learning/benchmark.js +3 -2
- package/dist/learning/benchmark.js.map +1 -1
- package/dist/learning/continuation.d.ts.map +1 -1
- package/dist/learning/continuation.js +2 -1
- package/dist/learning/continuation.js.map +1 -1
- package/dist/learning/cost-tracker.d.ts.map +1 -1
- package/dist/learning/cost-tracker.js +2 -1
- package/dist/learning/cost-tracker.js.map +1 -1
- package/dist/learning/deferred-task.d.ts.map +1 -1
- package/dist/learning/deferred-task.js +13 -4
- package/dist/learning/deferred-task.js.map +1 -1
- package/dist/learning/eval-framework.d.ts.map +1 -1
- package/dist/learning/eval-framework.js +2 -1
- package/dist/learning/eval-framework.js.map +1 -1
- package/dist/learning/long-form.d.ts.map +1 -1
- package/dist/learning/long-form.js +2 -1
- package/dist/learning/long-form.js.map +1 -1
- package/dist/learning/model-registry.d.ts.map +1 -1
- package/dist/learning/model-registry.js +2 -1
- package/dist/learning/model-registry.js.map +1 -1
- package/dist/learning/reasoning-cache.d.ts.map +1 -1
- package/dist/learning/reasoning-cache.js +2 -1
- package/dist/learning/reasoning-cache.js.map +1 -1
- package/dist/learning/reasoning-trace.d.ts +37 -1
- package/dist/learning/reasoning-trace.d.ts.map +1 -1
- package/dist/learning/reasoning-trace.js +66 -0
- package/dist/learning/reasoning-trace.js.map +1 -1
- package/dist/learning/resilient-call.d.ts.map +1 -1
- package/dist/learning/resilient-call.js +2 -1
- package/dist/learning/resilient-call.js.map +1 -1
- package/dist/learning/retrieval.d.ts.map +1 -1
- package/dist/learning/retrieval.js +2 -1
- package/dist/learning/retrieval.js.map +1 -1
- package/dist/learning/seeded-benchmark.d.ts +160 -0
- package/dist/learning/seeded-benchmark.d.ts.map +1 -0
- package/dist/learning/seeded-benchmark.js +321 -0
- package/dist/learning/seeded-benchmark.js.map +1 -0
- package/dist/learning/seeded-bugs.d.ts +142 -0
- package/dist/learning/seeded-bugs.d.ts.map +1 -0
- package/dist/learning/seeded-bugs.js +535 -0
- package/dist/learning/seeded-bugs.js.map +1 -0
- package/dist/learning/step-checkpoint.d.ts +127 -0
- package/dist/learning/step-checkpoint.d.ts.map +1 -0
- package/dist/learning/step-checkpoint.js +244 -0
- package/dist/learning/step-checkpoint.js.map +1 -0
- package/dist/nlu/intent-confirm.d.ts +23 -1
- package/dist/nlu/intent-confirm.d.ts.map +1 -1
- package/dist/nlu/intent-confirm.js +85 -2
- package/dist/nlu/intent-confirm.js.map +1 -1
- package/dist/nlu/learnings.d.ts +7 -0
- package/dist/nlu/learnings.d.ts.map +1 -1
- package/dist/nlu/learnings.js +7 -0
- package/dist/nlu/learnings.js.map +1 -1
- package/dist/observability/debug-log.d.ts +250 -0
- package/dist/observability/debug-log.d.ts.map +1 -0
- package/dist/observability/debug-log.js +500 -0
- package/dist/observability/debug-log.js.map +1 -0
- package/dist/observability/event-bus.d.ts.map +1 -1
- package/dist/observability/event-bus.js +4 -1
- package/dist/observability/event-bus.js.map +1 -1
- package/dist/observability/otel.d.ts +278 -0
- package/dist/observability/otel.d.ts.map +1 -0
- package/dist/observability/otel.js +590 -0
- package/dist/observability/otel.js.map +1 -0
- package/dist/parity/drivers.d.ts +99 -0
- package/dist/parity/drivers.d.ts.map +1 -0
- package/dist/parity/drivers.js +1362 -0
- package/dist/parity/drivers.js.map +1 -0
- package/dist/parity/graph.d.ts +73 -0
- package/dist/parity/graph.d.ts.map +1 -0
- package/dist/parity/graph.js +162 -0
- package/dist/parity/graph.js.map +1 -0
- package/dist/parity/matrix.d.ts +105 -0
- package/dist/parity/matrix.d.ts.map +1 -0
- package/dist/parity/matrix.js +352 -0
- package/dist/parity/matrix.js.map +1 -0
- package/dist/parity/observation.d.ts +444 -0
- package/dist/parity/observation.d.ts.map +1 -0
- package/dist/parity/observation.js +333 -0
- package/dist/parity/observation.js.map +1 -0
- package/dist/parity/scenarios.d.ts +229 -0
- package/dist/parity/scenarios.d.ts.map +1 -0
- package/dist/parity/scenarios.js +175 -0
- package/dist/parity/scenarios.js.map +1 -0
- package/dist/parity/surfaces.d.ts +122 -0
- package/dist/parity/surfaces.d.ts.map +1 -0
- package/dist/parity/surfaces.js +190 -0
- package/dist/parity/surfaces.js.map +1 -0
- package/dist/runtime/fault-injection.d.ts +173 -0
- package/dist/runtime/fault-injection.d.ts.map +1 -0
- package/dist/runtime/fault-injection.js +281 -0
- package/dist/runtime/fault-injection.js.map +1 -0
- package/dist/tools/child-agent-entry.d.ts +23 -0
- package/dist/tools/child-agent-entry.d.ts.map +1 -0
- package/dist/tools/child-agent-entry.js +129 -0
- package/dist/tools/child-agent-entry.js.map +1 -0
- package/dist/tools/child-agent-runtime.d.ts +124 -0
- package/dist/tools/child-agent-runtime.d.ts.map +1 -0
- package/dist/tools/child-agent-runtime.js +704 -0
- package/dist/tools/child-agent-runtime.js.map +1 -0
- package/dist/tools/coding-tools.d.ts.map +1 -1
- package/dist/tools/coding-tools.js +82 -10
- package/dist/tools/coding-tools.js.map +1 -1
- package/dist/tools/delegation-system.d.ts +31 -0
- package/dist/tools/delegation-system.d.ts.map +1 -1
- package/dist/tools/delegation-system.js +70 -9
- package/dist/tools/delegation-system.js.map +1 -1
- package/dist/tools/extract/docx.d.ts +27 -0
- package/dist/tools/extract/docx.d.ts.map +1 -0
- package/dist/tools/extract/docx.js +48 -0
- package/dist/tools/extract/docx.js.map +1 -0
- package/dist/tools/extract/html-text.d.ts +27 -0
- package/dist/tools/extract/html-text.d.ts.map +1 -0
- package/dist/tools/extract/html-text.js +86 -0
- package/dist/tools/extract/html-text.js.map +1 -0
- package/dist/tools/extract/pdf-ocr.d.ts +58 -0
- package/dist/tools/extract/pdf-ocr.d.ts.map +1 -0
- package/dist/tools/extract/pdf-ocr.js +116 -0
- package/dist/tools/extract/pdf-ocr.js.map +1 -0
- package/dist/tools/extract/pdf.d.ts +65 -0
- package/dist/tools/extract/pdf.d.ts.map +1 -0
- package/dist/tools/extract/pdf.js +197 -0
- package/dist/tools/extract/pdf.js.map +1 -0
- package/dist/tools/extract/pptx.d.ts +32 -0
- package/dist/tools/extract/pptx.d.ts.map +1 -0
- package/dist/tools/extract/pptx.js +77 -0
- package/dist/tools/extract/pptx.js.map +1 -0
- package/dist/tools/extract/xlsx.d.ts +47 -0
- package/dist/tools/extract/xlsx.d.ts.map +1 -0
- package/dist/tools/extract/xlsx.js +111 -0
- package/dist/tools/extract/xlsx.js.map +1 -0
- package/dist/tools/finding-tool.d.ts +76 -0
- package/dist/tools/finding-tool.d.ts.map +1 -0
- package/dist/tools/finding-tool.js +125 -0
- package/dist/tools/finding-tool.js.map +1 -0
- package/dist/tools/messaging-tools.d.ts +41 -11
- package/dist/tools/messaging-tools.d.ts.map +1 -1
- package/dist/tools/messaging-tools.js +104 -55
- package/dist/tools/messaging-tools.js.map +1 -1
- package/dist/tools/neutts-synth.d.ts +27 -3
- package/dist/tools/neutts-synth.d.ts.map +1 -1
- package/dist/tools/neutts-synth.js +57 -13
- package/dist/tools/neutts-synth.js.map +1 -1
- package/dist/tools/pipeline-tool.d.ts +43 -1
- package/dist/tools/pipeline-tool.d.ts.map +1 -1
- package/dist/tools/pipeline-tool.js +13 -2
- package/dist/tools/pipeline-tool.js.map +1 -1
- package/dist/tools/read-extract.d.ts +116 -45
- package/dist/tools/read-extract.d.ts.map +1 -1
- package/dist/tools/read-extract.js +494 -158
- package/dist/tools/read-extract.js.map +1 -1
- package/dist/tools/registry.d.ts +2 -2
- package/dist/tools/registry.d.ts.map +1 -1
- package/dist/tools/registry.js +152 -23
- package/dist/tools/registry.js.map +1 -1
- package/dist/tools/subagent-refusal.d.ts +15 -0
- package/dist/tools/subagent-refusal.d.ts.map +1 -0
- package/dist/tools/subagent-refusal.js +18 -0
- package/dist/tools/subagent-refusal.js.map +1 -0
- package/dist/tools/subagent-spawner.d.ts +122 -0
- package/dist/tools/subagent-spawner.d.ts.map +1 -1
- package/dist/tools/subagent-spawner.js +249 -28
- package/dist/tools/subagent-spawner.js.map +1 -1
- package/dist/tools/tool-hooks.d.ts +177 -0
- package/dist/tools/tool-hooks.d.ts.map +1 -0
- package/dist/tools/tool-hooks.js +427 -0
- package/dist/tools/tool-hooks.js.map +1 -0
- package/dist/tools/tool-loop.d.ts +82 -0
- package/dist/tools/tool-loop.d.ts.map +1 -1
- package/dist/tools/tool-loop.js +167 -9
- package/dist/tools/tool-loop.js.map +1 -1
- package/dist/tools/tool-refusal.d.ts +68 -0
- package/dist/tools/tool-refusal.d.ts.map +1 -0
- package/dist/tools/tool-refusal.js +78 -0
- package/dist/tools/tool-refusal.js.map +1 -0
- package/dist/tools/toolsets.d.ts +8 -0
- package/dist/tools/toolsets.d.ts.map +1 -1
- package/dist/tools/toolsets.js +12 -2
- package/dist/tools/toolsets.js.map +1 -1
- package/dist/tools/vision-tools.d.ts +88 -83
- package/dist/tools/vision-tools.d.ts.map +1 -1
- package/dist/tools/vision-tools.js +134 -103
- package/dist/tools/vision-tools.js.map +1 -1
- package/dist/tools/worktree.d.ts +210 -0
- package/dist/tools/worktree.d.ts.map +1 -0
- package/dist/tools/worktree.js +374 -0
- package/dist/tools/worktree.js.map +1 -0
- package/dist/utils/format.d.ts +3 -0
- package/dist/utils/format.d.ts.map +1 -0
- package/dist/utils/format.js +32 -0
- package/dist/utils/format.js.map +1 -0
- package/dist/web-dashboard/attachment-extract.d.ts +64 -0
- package/dist/web-dashboard/attachment-extract.d.ts.map +1 -0
- package/dist/web-dashboard/attachment-extract.js +154 -0
- package/dist/web-dashboard/attachment-extract.js.map +1 -0
- package/dist/web-dashboard/chat-console.d.ts +108 -1
- package/dist/web-dashboard/chat-console.d.ts.map +1 -1
- package/dist/web-dashboard/chat-console.js +36 -0
- package/dist/web-dashboard/chat-console.js.map +1 -1
- package/dist/web-dashboard/hub-data.d.ts +37 -0
- package/dist/web-dashboard/hub-data.d.ts.map +1 -1
- package/dist/web-dashboard/hub-data.js +61 -1
- package/dist/web-dashboard/hub-data.js.map +1 -1
- package/dist/web-dashboard/server.d.ts +14 -0
- package/dist/web-dashboard/server.d.ts.map +1 -1
- package/dist/web-dashboard/server.js +247 -13
- package/dist/web-dashboard/server.js.map +1 -1
- package/dist/web-dashboard/src/types.d.ts +196 -48
- package/dist/web-dashboard/src/types.d.ts.map +1 -1
- package/package.json +18 -3
- package/src/web-dashboard/public/assets/{index-Cyd6tIew.css → index-XJjj2cBX.css} +1 -1
- package/src/web-dashboard/public/assets/index-YWF9FpwQ.js +207 -0
- package/src/web-dashboard/public/assets/index-YWF9FpwQ.js.map +1 -0
- package/src/web-dashboard/public/index.html +2 -2
- package/dist/tools/child-agent-worker.js +0 -212
- package/src/web-dashboard/public/assets/index-CxDj7p6i.js +0 -207
- package/src/web-dashboard/public/assets/index-CxDj7p6i.js.map +0 -1
|
@@ -0,0 +1,500 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WS2 (#24) — the session debug log you attach to a bug report.
|
|
3
|
+
*
|
|
4
|
+
* WHY THIS EXISTS, and what it is NOT. This repository's bug reports keep
|
|
5
|
+
* arriving as prose: "the dashboard did not answer", "the gateway sent the
|
|
6
|
+
* wrong thing", "it worked yesterday". Every one of them is then re-litigated
|
|
7
|
+
* by reading code, because the failing run left nothing behind that records
|
|
8
|
+
* WHICH BACKEND SERVED IT. The trace store (`learning/reasoning-trace.ts`) is
|
|
9
|
+
* the audit of what the MODEL was asked; the DAG bridge and the gateway log are
|
|
10
|
+
* per-surface records. None of them is the thing a user can attach to a bug
|
|
11
|
+
* report, and none of them is reachable the same way from all five surfaces.
|
|
12
|
+
*
|
|
13
|
+
* So a session debug log is deliberately boring: a plain-text file, ordered,
|
|
14
|
+
* with a header that names the surface and THE BACKEND — provider, model,
|
|
15
|
+
* transport, engine — before a single line of detail. If a bug report can only
|
|
16
|
+
* carry one thing, that header is the thing that makes it actionable.
|
|
17
|
+
*
|
|
18
|
+
* FOUR RULES, each closing a way a debug log becomes worse than none:
|
|
19
|
+
*
|
|
20
|
+
* 1. OPT-IN, AND CHEAP WHEN OFF. `NUVIRA_DEBUG_LOG=1` turns it on; with it off
|
|
21
|
+
* `sessionDebugLog()` returns `null` and every call site's `?.` makes the
|
|
22
|
+
* cost one boolean check. A logging path that is on by default is a disk
|
|
23
|
+
* leak and a privacy hazard wearing a helpful face.
|
|
24
|
+
*
|
|
25
|
+
* 2. REDACTED BY CONSTRUCTION. A log we ask a user to attach to a bug report
|
|
26
|
+
* is a log that will be pasted into an issue tracker. Every event line is
|
|
27
|
+
* scrubbed with the SAME `scrubSecrets` the gateway log uses (reused, not
|
|
28
|
+
* re-implemented: two regex lists drift, and the one that drifts is the one
|
|
29
|
+
* that leaks). The header carries the backend and versions — never a key.
|
|
30
|
+
*
|
|
31
|
+
* 3. BOUNDED. Events are capped, each line is truncated to a preview, and the
|
|
32
|
+
* file is capped by bytes. An instrument must never be the reason a run
|
|
33
|
+
* dies, and a nightly-failing turn must not fill a disk.
|
|
34
|
+
*
|
|
35
|
+
* 4. WRITTEN ONCE, AT CLOSE. The header has to name the backend that served
|
|
36
|
+
* the turn, and the backend is only known at the end (the loop may fail
|
|
37
|
+
* over between providers). So events buffer in memory and `write()`
|
|
38
|
+
* produces the whole file — header first — at the end of the turn. That
|
|
39
|
+
* also means a crashed process leaves NO half-written log, which is the
|
|
40
|
+
* honest outcome: a log whose header lies about the backend is worse than
|
|
41
|
+
* no log.
|
|
42
|
+
*
|
|
43
|
+
* The five surfaces each open one at their own turn seam (`cli/chat.ts`,
|
|
44
|
+
* `cli/loop-executor.ts`, `tools/child-agent-runtime.ts`, with the dashboard
|
|
45
|
+
* console and the gateway passing their identity down to the shared chat
|
|
46
|
+
* engine), and the parity harness reads the file back and asserts every
|
|
47
|
+
* surface's header names the SAME backend — the capability
|
|
48
|
+
* `debug-log@<surface>` is proved against.
|
|
49
|
+
*
|
|
50
|
+
* A log that a surface wrote into a directory the user has to find is only half
|
|
51
|
+
* the artifact. So a surface that HAS a conversation identity records it
|
|
52
|
+
* (`session`), which turns the file from readable into FINDABLE: the dashboard
|
|
53
|
+
* server can answer "the bundle for this chat" by looking up the logs whose
|
|
54
|
+
* header names that conversation, instead of guessing from timestamps and
|
|
55
|
+
* handing over someone else's. A surface with no such identity (the CLI's
|
|
56
|
+
* one-shot path) records nothing rather than inventing an id.
|
|
57
|
+
*/
|
|
58
|
+
import { existsSync, mkdirSync, readFileSync, readdirSync, statSync, writeFileSync } from 'node:fs';
|
|
59
|
+
import { join } from 'node:path';
|
|
60
|
+
import { resolveNuviraDataPath } from '../config/paths.js';
|
|
61
|
+
import { scrubSecrets } from '../gateway/gateway-log.js';
|
|
62
|
+
/** The env var that turns session debug logging on (`NUVIRA_DEBUG_LOG=1`). */
|
|
63
|
+
export const DEBUG_LOG_ENV = 'DEBUG_LOG';
|
|
64
|
+
/** Optional directory override for the log files (`NUVIRA_DEBUG_LOG_DIR`). */
|
|
65
|
+
export const DEBUG_LOG_DIR_ENV = 'DEBUG_LOG_DIR';
|
|
66
|
+
/** Hard cap on the written file. Bounded on purpose — see rule 3 above. */
|
|
67
|
+
export const DEBUG_LOG_MAX_BYTES = 512 * 1024;
|
|
68
|
+
/** Per-line detail preview cap. Never the whole payload. */
|
|
69
|
+
export const DEBUG_LOG_PREVIEW_CHARS = 300;
|
|
70
|
+
/** Event cap. Beyond it the OLDEST events are dropped, and the count is stated. */
|
|
71
|
+
export const DEBUG_LOG_MAX_EVENTS = 2_000;
|
|
72
|
+
/** Cap on a session id as a FILENAME component, so a long id cannot fail a write. */
|
|
73
|
+
export const DEBUG_LOG_SESSION_CHARS = 48;
|
|
74
|
+
/** Omit a value from the header rather than writing `undefined`/`null` as a lie. */
|
|
75
|
+
function orNull(value) {
|
|
76
|
+
return typeof value === 'string' && value.trim() ? value.trim() : null;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Read the running version from the repo's `package.json`.
|
|
80
|
+
*
|
|
81
|
+
* Best-effort and cached: a debug log must never break a turn over a missing
|
|
82
|
+
* file (the published `dist/` layout resolves `../../package.json` the same way
|
|
83
|
+
* `cli-program.ts` already does), and a wrong-but-absent version is honest
|
|
84
|
+
* where a thrown error is not.
|
|
85
|
+
*/
|
|
86
|
+
let cachedVersion;
|
|
87
|
+
function agentVersion() {
|
|
88
|
+
if (cachedVersion !== undefined)
|
|
89
|
+
return cachedVersion;
|
|
90
|
+
try {
|
|
91
|
+
const pkg = JSON.parse(readFileSync(new URL('../../package.json', import.meta.url), 'utf-8'));
|
|
92
|
+
cachedVersion = orNull(pkg.version);
|
|
93
|
+
}
|
|
94
|
+
catch {
|
|
95
|
+
cachedVersion = null;
|
|
96
|
+
}
|
|
97
|
+
return cachedVersion;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Is session debug logging on?
|
|
101
|
+
*
|
|
102
|
+
* `NUVIRA_DEBUG_LOG` (or legacy `BUFF_DEBUG_LOG`) set to anything other than
|
|
103
|
+
* `0` / `false` / `off` enables it. Deliberately not "truthy string" only: a
|
|
104
|
+
* user who writes `NUVIRA_DEBUG_LOG=false` in an `.env` means off.
|
|
105
|
+
*/
|
|
106
|
+
export function debugLoggingEnabled(env = process.env) {
|
|
107
|
+
const raw = env.NUVIRA_DEBUG_LOG ?? env.BUFF_DEBUG_LOG;
|
|
108
|
+
if (raw === undefined)
|
|
109
|
+
return false;
|
|
110
|
+
const value = raw.trim().toLowerCase();
|
|
111
|
+
return value !== '' && value !== '0' && value !== 'false' && value !== 'off' && value !== 'no';
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Where the log files live.
|
|
115
|
+
*
|
|
116
|
+
* `NUVIRA_DEBUG_LOG_DIR` wins when set; otherwise `<config dir>/debug-logs`
|
|
117
|
+
* through `resolveNuviraDataPath`, so an isolated profile (tests, CI, the
|
|
118
|
+
* parity harness) can never write into the developer's real `~/.nuvira`.
|
|
119
|
+
*/
|
|
120
|
+
export function debugLogDir(env = process.env) {
|
|
121
|
+
// Dual-read (NUVIRA_ then legacy BUFF_), matching every other path resolver.
|
|
122
|
+
// Dual-read (NUVIRA_ then legacy BUFF_), matching every other path resolver. A
|
|
123
|
+
// BLANK value counts as unset rather than as `''` — `||` not `??` — so an
|
|
124
|
+
// empty `NUVIRA_DEBUG_LOG_DIR` still lets a legacy override through.
|
|
125
|
+
const override = env[`NUVIRA_${DEBUG_LOG_DIR_ENV}`]?.trim() || env[`BUFF_${DEBUG_LOG_DIR_ENV}`]?.trim();
|
|
126
|
+
if (override)
|
|
127
|
+
return override;
|
|
128
|
+
// `<config dir>/debug-logs` — so an isolated profile never writes into the
|
|
129
|
+
// developer's real `~/.nuvira`.
|
|
130
|
+
return resolveNuviraDataPath('debug-logs');
|
|
131
|
+
}
|
|
132
|
+
/** A filename-safe surface label (`cli-chat` → `cli-chat`; odd input → dashes). */
|
|
133
|
+
function safeLabel(value) {
|
|
134
|
+
return value.trim().toLowerCase().replace(/[^a-z0-9._-]+/g, '-').replace(/^-+|-+$/g, '') || 'unknown';
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* One session's debug log, buffered and written once.
|
|
138
|
+
*
|
|
139
|
+
* Deliberately a class rather than a bag of functions: the buffered state IS
|
|
140
|
+
* the object, and a surface that opens one and forgets to write it produces no
|
|
141
|
+
* file at all — which the parity harness reads as `written: false` rather than
|
|
142
|
+
* as agreement.
|
|
143
|
+
*/
|
|
144
|
+
export class SessionDebugLog {
|
|
145
|
+
id;
|
|
146
|
+
startedAt;
|
|
147
|
+
surface;
|
|
148
|
+
goal;
|
|
149
|
+
backend;
|
|
150
|
+
extra = [];
|
|
151
|
+
entries = [];
|
|
152
|
+
dropped = 0;
|
|
153
|
+
truncatedLines = 0;
|
|
154
|
+
dir;
|
|
155
|
+
now;
|
|
156
|
+
/** The conversation this turn belongs to, or null (see `DebugLogHeader.session`). */
|
|
157
|
+
session;
|
|
158
|
+
writtenPath = null;
|
|
159
|
+
constructor(opts) {
|
|
160
|
+
this.surface = safeLabel(opts.surface);
|
|
161
|
+
this.goal = orNull(opts.goal) ? scrubSecrets(cap(String(opts.goal), DEBUG_LOG_PREVIEW_CHARS)) : null;
|
|
162
|
+
// A session id is a FILENAME component, so it is sanitised and length-capped
|
|
163
|
+
// here rather than trusted: an id long enough to exceed the filesystem's
|
|
164
|
+
// name limit would otherwise turn every turn into a failed write.
|
|
165
|
+
this.session = orNull(opts.session) ? cap(safeLabel(String(opts.session)), DEBUG_LOG_SESSION_CHARS) : null;
|
|
166
|
+
this.backend = { ...(opts.backend ?? {}) };
|
|
167
|
+
this.now = opts.now ?? (() => Date.now());
|
|
168
|
+
this.startedAt = this.now();
|
|
169
|
+
this.dir = opts.dir === undefined ? debugLogDir() : opts.dir;
|
|
170
|
+
this.id = `${this.surface}-${this.session ? `${this.session}-` : ''}${this.startedAt}`;
|
|
171
|
+
}
|
|
172
|
+
/** The backend that served the turn. Set as it is learned; last call wins. */
|
|
173
|
+
backendOf(backend) {
|
|
174
|
+
this.backend = { ...this.backend, ...backend };
|
|
175
|
+
return this;
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Preview one detail value: flattened, cut to the cap, then redacted.
|
|
179
|
+
*
|
|
180
|
+
* The cut is counted BEFORE the scrub (the scrub only shortens), so the
|
|
181
|
+
* "truncated" line in the file reports how much was actually lost.
|
|
182
|
+
*/
|
|
183
|
+
detailText(value) {
|
|
184
|
+
const flat = previewOf(value);
|
|
185
|
+
const capped = cap(flat, DEBUG_LOG_PREVIEW_CHARS);
|
|
186
|
+
if (capped.length < flat.length)
|
|
187
|
+
this.truncatedLines += 1;
|
|
188
|
+
return scrubSecrets(capped);
|
|
189
|
+
}
|
|
190
|
+
/** One ordered event. `detail` is previewed and redacted. */
|
|
191
|
+
event(name, detail) {
|
|
192
|
+
const rendered = detail === undefined ? undefined : this.detailText(detail);
|
|
193
|
+
this.entries.push({
|
|
194
|
+
at: this.now(),
|
|
195
|
+
name: scrubSecrets(name),
|
|
196
|
+
...(rendered ? { detail: rendered } : {}),
|
|
197
|
+
});
|
|
198
|
+
if (this.entries.length > DEBUG_LOG_MAX_EVENTS) {
|
|
199
|
+
// Drop the OLDEST: the most recent events are the ones a failure report
|
|
200
|
+
// reads, exactly like the trace store's tail-keeping caps.
|
|
201
|
+
this.entries.shift();
|
|
202
|
+
this.dropped += 1;
|
|
203
|
+
}
|
|
204
|
+
return this;
|
|
205
|
+
}
|
|
206
|
+
/** A non-secret header field (a version, a channel, a bound). */
|
|
207
|
+
detail(key, value) {
|
|
208
|
+
if (value === undefined || value === null || value === '')
|
|
209
|
+
return this;
|
|
210
|
+
this.extra.push([scrubSecrets(key), this.detailText(value)]);
|
|
211
|
+
return this;
|
|
212
|
+
}
|
|
213
|
+
/** The attachable text: header first, then the events in order. */
|
|
214
|
+
render() {
|
|
215
|
+
const b = this.backend;
|
|
216
|
+
const lines = [
|
|
217
|
+
'# nuvira session debug log — safe to attach to a bug report',
|
|
218
|
+
'# credentials are redacted; memory and prompts are previews, not payloads',
|
|
219
|
+
`# surface: ${this.surface}`,
|
|
220
|
+
// Written only when the surface HAS a conversation identity: an absent key
|
|
221
|
+
// reads as "not reported", where `unknown` would read as the id "unknown".
|
|
222
|
+
...(this.session ? [`# session: ${this.session}`] : []),
|
|
223
|
+
`# engine: ${orNull(b.engine) ?? 'unknown'}`,
|
|
224
|
+
`# backend.provider: ${orNull(b.provider) ?? 'unknown'}`,
|
|
225
|
+
`# backend.model: ${orNull(b.model) ?? 'unknown'}`,
|
|
226
|
+
`# backend.transport: ${orNull(b.transport) ?? 'unknown'}`,
|
|
227
|
+
`# version: ${agentVersion() ?? 'unknown'}`,
|
|
228
|
+
`# started: ${new Date(this.startedAt).toISOString()}`,
|
|
229
|
+
`# pid: ${process.pid}`,
|
|
230
|
+
`# platform: ${process.platform} ${process.arch} · node ${process.version}`,
|
|
231
|
+
`# events: ${this.entries.length}${this.dropped > 0 ? ` (+${this.dropped} older dropped)` : ''}`,
|
|
232
|
+
...(this.truncatedLines > 0 ? [`# truncated: ${this.truncatedLines} event(s) were longer than ${DEBUG_LOG_PREVIEW_CHARS} chars`] : []),
|
|
233
|
+
...(this.goal ? [`# goal: ${JSON.stringify(this.goal)}`] : []),
|
|
234
|
+
...this.extra.map(([key, value]) => `# ${key}: ${value}`),
|
|
235
|
+
'# ' + '-'.repeat(58),
|
|
236
|
+
];
|
|
237
|
+
for (const entry of this.entries) {
|
|
238
|
+
lines.push(`${new Date(entry.at).toISOString()} ${entry.name}${entry.detail ? ` ${entry.detail}` : ''}`);
|
|
239
|
+
}
|
|
240
|
+
return `${lines.join('\n')}\n`;
|
|
241
|
+
}
|
|
242
|
+
/**
|
|
243
|
+
* Write the file. Returns the path, or null when logging is disabled, no
|
|
244
|
+
* directory was resolved, or the write failed — every one of which is a
|
|
245
|
+
* normal outcome a caller must not have to handle.
|
|
246
|
+
*/
|
|
247
|
+
write() {
|
|
248
|
+
if (!this.dir)
|
|
249
|
+
return null;
|
|
250
|
+
try {
|
|
251
|
+
if (!existsSync(this.dir))
|
|
252
|
+
mkdirSync(this.dir, { recursive: true });
|
|
253
|
+
const path = join(this.dir, `${this.id}.log`);
|
|
254
|
+
writeFileSync(path, cap(this.render(), DEBUG_LOG_MAX_BYTES), 'utf-8');
|
|
255
|
+
this.writtenPath = path;
|
|
256
|
+
return path;
|
|
257
|
+
}
|
|
258
|
+
catch {
|
|
259
|
+
// Best-effort: a debug log must never break the run it observes.
|
|
260
|
+
return null;
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
/** The path after a successful `write()` (null before it / on failure). */
|
|
264
|
+
path() {
|
|
265
|
+
return this.writtenPath;
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
/**
|
|
269
|
+
* Open a session debug log, or `null` when logging is off (or in a unit test
|
|
270
|
+
* that passed no directory). Callers use `?.` throughout, so the off path costs
|
|
271
|
+
* one boolean.
|
|
272
|
+
*/
|
|
273
|
+
export function sessionDebugLog(opts) {
|
|
274
|
+
const env = opts.env ?? process.env;
|
|
275
|
+
if (!debugLoggingEnabled(env))
|
|
276
|
+
return null;
|
|
277
|
+
return new SessionDebugLog({
|
|
278
|
+
surface: opts.surface,
|
|
279
|
+
...(opts.goal !== undefined ? { goal: opts.goal } : {}),
|
|
280
|
+
...(opts.session !== undefined ? { session: opts.session } : {}),
|
|
281
|
+
...(opts.backend !== undefined ? { backend: opts.backend } : {}),
|
|
282
|
+
dir: opts.dir === undefined ? debugLogDir(env) : opts.dir,
|
|
283
|
+
...(opts.now ? { now: opts.now } : {}),
|
|
284
|
+
});
|
|
285
|
+
}
|
|
286
|
+
/** Cut a string to `max` chars, marking the cut so a reader knows it happened. */
|
|
287
|
+
function cap(value, max) {
|
|
288
|
+
return value.length <= max ? value : `${value.slice(0, Math.max(0, max - 1))}…`;
|
|
289
|
+
}
|
|
290
|
+
/** Render any detail value to one flat, bounded line. */
|
|
291
|
+
function previewOf(value) {
|
|
292
|
+
if (typeof value === 'string')
|
|
293
|
+
return value.replace(/\s+/g, ' ').trim();
|
|
294
|
+
if (typeof value === 'number' || typeof value === 'boolean' || value === null)
|
|
295
|
+
return String(value);
|
|
296
|
+
if (Array.isArray(value))
|
|
297
|
+
return value.map((v) => previewOf(v)).join(', ');
|
|
298
|
+
try {
|
|
299
|
+
return JSON.stringify(value, replacerForPreview) ?? String(value);
|
|
300
|
+
}
|
|
301
|
+
catch {
|
|
302
|
+
return String(value);
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
/** Bounded JSON: long strings are cut before serialising, so one huge arg cannot blow the line. */
|
|
306
|
+
function replacerForPreview(_key, value) {
|
|
307
|
+
if (typeof value === 'string')
|
|
308
|
+
return value.length > 120 ? `${value.slice(0, 119)}…` : value;
|
|
309
|
+
return value;
|
|
310
|
+
}
|
|
311
|
+
/**
|
|
312
|
+
* Parse a rendered log's header.
|
|
313
|
+
*
|
|
314
|
+
* Reads the leading `# key: value` comment block only, and returns null when
|
|
315
|
+
* `surface` is absent — the one field every header must have. Unknown keys are
|
|
316
|
+
* ignored rather than rejected, so an older reader can still open a newer log.
|
|
317
|
+
*/
|
|
318
|
+
export function parseDebugLogHeader(text) {
|
|
319
|
+
const header = {
|
|
320
|
+
surface: null,
|
|
321
|
+
session: null,
|
|
322
|
+
engine: null,
|
|
323
|
+
provider: null,
|
|
324
|
+
model: null,
|
|
325
|
+
transport: null,
|
|
326
|
+
version: null,
|
|
327
|
+
startedAt: null,
|
|
328
|
+
pid: null,
|
|
329
|
+
platform: null,
|
|
330
|
+
};
|
|
331
|
+
for (const line of text.split('\n')) {
|
|
332
|
+
if (!line.startsWith('#'))
|
|
333
|
+
break;
|
|
334
|
+
const match = /^#\s+(?:backend\.)?([a-z_]+):\s*(.*)$/i.exec(line);
|
|
335
|
+
if (!match)
|
|
336
|
+
continue;
|
|
337
|
+
const [, key, value] = match;
|
|
338
|
+
const trimmed = value.trim();
|
|
339
|
+
switch (key.toLowerCase()) {
|
|
340
|
+
case 'surface':
|
|
341
|
+
header.surface = trimmed || null;
|
|
342
|
+
break;
|
|
343
|
+
case 'session':
|
|
344
|
+
header.session = namedOrNull(trimmed);
|
|
345
|
+
break;
|
|
346
|
+
case 'engine':
|
|
347
|
+
header.engine = namedOrNull(trimmed);
|
|
348
|
+
break;
|
|
349
|
+
case 'provider':
|
|
350
|
+
header.provider = namedOrNull(trimmed);
|
|
351
|
+
break;
|
|
352
|
+
case 'model':
|
|
353
|
+
header.model = namedOrNull(trimmed);
|
|
354
|
+
break;
|
|
355
|
+
case 'transport':
|
|
356
|
+
header.transport = namedOrNull(trimmed);
|
|
357
|
+
break;
|
|
358
|
+
case 'version':
|
|
359
|
+
header.version = namedOrNull(trimmed);
|
|
360
|
+
break;
|
|
361
|
+
case 'pid':
|
|
362
|
+
header.pid = Number.isFinite(Number(trimmed)) ? Number(trimmed) : null;
|
|
363
|
+
break;
|
|
364
|
+
case 'platform':
|
|
365
|
+
header.platform = orNull(trimmed);
|
|
366
|
+
break;
|
|
367
|
+
case 'started': {
|
|
368
|
+
const at = Date.parse(trimmed);
|
|
369
|
+
header.startedAt = Number.isFinite(at) ? at : null;
|
|
370
|
+
break;
|
|
371
|
+
}
|
|
372
|
+
default: break;
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
return header.surface ? header : null;
|
|
376
|
+
}
|
|
377
|
+
/**
|
|
378
|
+
* A named header value, or null.
|
|
379
|
+
*
|
|
380
|
+
* `render()` writes the literal `unknown` when a surface never learned a field.
|
|
381
|
+
* That is the right thing to READ in the file and the wrong thing to COMPARE:
|
|
382
|
+
* "two surfaces both said unknown" must not read as agreement about a backend,
|
|
383
|
+
* so the parser maps the sentinel back to null and the comparison sees "not
|
|
384
|
+
* named" for what it is.
|
|
385
|
+
*/
|
|
386
|
+
function namedOrNull(value) {
|
|
387
|
+
const trimmed = value.trim();
|
|
388
|
+
if (!trimmed || trimmed.toLowerCase() === 'unknown')
|
|
389
|
+
return null;
|
|
390
|
+
return trimmed;
|
|
391
|
+
}
|
|
392
|
+
/** Every log file in `dir`, newest first. Missing directory = empty list. */
|
|
393
|
+
export function listDebugLogs(dir = debugLogDir()) {
|
|
394
|
+
try {
|
|
395
|
+
if (!existsSync(dir))
|
|
396
|
+
return [];
|
|
397
|
+
return readdirSync(dir)
|
|
398
|
+
.filter((name) => name.endsWith('.log'))
|
|
399
|
+
.map((name) => {
|
|
400
|
+
const path = join(dir, name);
|
|
401
|
+
return { path, header: parseDebugLogHeader(readFileSafe(path) ?? ''), at: statSafe(path) };
|
|
402
|
+
})
|
|
403
|
+
.sort((a, b) => b.at - a.at)
|
|
404
|
+
.map(({ path, header }) => ({ path, header }));
|
|
405
|
+
}
|
|
406
|
+
catch {
|
|
407
|
+
return [];
|
|
408
|
+
}
|
|
409
|
+
}
|
|
410
|
+
/**
|
|
411
|
+
* The newest log a given surface wrote, or null.
|
|
412
|
+
*
|
|
413
|
+
* This is how the parity harness reads a surface's OWN durable artifact — the
|
|
414
|
+
* same reasoning the gateway driver uses to read `inbound.chat` from the
|
|
415
|
+
* gateway log rather than trusting a return value.
|
|
416
|
+
*/
|
|
417
|
+
export function readLatestDebugLog(surface, dir = debugLogDir()) {
|
|
418
|
+
const want = safeLabel(surface);
|
|
419
|
+
for (const file of listDebugLogs(dir)) {
|
|
420
|
+
if (file.header?.surface !== want)
|
|
421
|
+
continue;
|
|
422
|
+
const text = readFileSafe(file.path);
|
|
423
|
+
if (text)
|
|
424
|
+
return { path: file.path, header: file.header, text };
|
|
425
|
+
}
|
|
426
|
+
return null;
|
|
427
|
+
}
|
|
428
|
+
/**
|
|
429
|
+
* Every log a given conversation wrote, OLDEST FIRST — the findable half.
|
|
430
|
+
*
|
|
431
|
+
* This is what lets the dashboard answer "the debug log for the chat I am
|
|
432
|
+
* looking at" without guessing. Two rules make it safe to expose:
|
|
433
|
+
*
|
|
434
|
+
* 1. SELECTED BY THE LOG'S OWN HEADER, never by recency. "The newest few logs"
|
|
435
|
+
* would hand a user somebody else's conversation — with a concurrent turn in
|
|
436
|
+
* another tab, that is the common case, not the edge case.
|
|
437
|
+
*
|
|
438
|
+
* 2. OLDEST FIRST, because a bundle is read top to bottom as the story of what
|
|
439
|
+
* happened, and a single turn's log already reads that way internally. The
|
|
440
|
+
* newest-first order `listDebugLogs` uses is right for "what just happened"
|
|
441
|
+
* and wrong for this.
|
|
442
|
+
*
|
|
443
|
+
* A file that cannot be read or parsed is skipped rather than failing the whole
|
|
444
|
+
* bundle: one unreadable turn must not cost the user the other four.
|
|
445
|
+
*/
|
|
446
|
+
export function debugLogsForSession(sessionId, dir = debugLogDir()) {
|
|
447
|
+
const want = cap(safeLabel(String(sessionId)), DEBUG_LOG_SESSION_CHARS);
|
|
448
|
+
if (!want)
|
|
449
|
+
return [];
|
|
450
|
+
const out = [];
|
|
451
|
+
try {
|
|
452
|
+
if (!existsSync(dir))
|
|
453
|
+
return [];
|
|
454
|
+
for (const name of readdirSync(dir)) {
|
|
455
|
+
if (!name.endsWith('.log'))
|
|
456
|
+
continue;
|
|
457
|
+
const path = join(dir, name);
|
|
458
|
+
const text = readFileSafe(path);
|
|
459
|
+
if (!text)
|
|
460
|
+
continue;
|
|
461
|
+
const header = parseDebugLogHeader(text);
|
|
462
|
+
if (!header || header.session !== want)
|
|
463
|
+
continue;
|
|
464
|
+
out.push({ path, header, text });
|
|
465
|
+
}
|
|
466
|
+
}
|
|
467
|
+
catch {
|
|
468
|
+
return out;
|
|
469
|
+
}
|
|
470
|
+
// The header's own `started`, not the file's mtime: a copy, a backup restore
|
|
471
|
+
// or a `touch` rewrites mtime and would silently reorder the story.
|
|
472
|
+
return out.sort((a, b) => (a.header.startedAt ?? Number.MAX_SAFE_INTEGER) -
|
|
473
|
+
(b.header.startedAt ?? Number.MAX_SAFE_INTEGER));
|
|
474
|
+
}
|
|
475
|
+
function readFileSafe(path) {
|
|
476
|
+
try {
|
|
477
|
+
return readFileSync(path, 'utf-8');
|
|
478
|
+
}
|
|
479
|
+
catch {
|
|
480
|
+
return null;
|
|
481
|
+
}
|
|
482
|
+
}
|
|
483
|
+
function statSafe(path) {
|
|
484
|
+
try {
|
|
485
|
+
return statSync(path).mtimeMs;
|
|
486
|
+
}
|
|
487
|
+
catch {
|
|
488
|
+
return 0;
|
|
489
|
+
}
|
|
490
|
+
}
|
|
491
|
+
/**
|
|
492
|
+
* A one-line notice a surface can print so the user knows a log exists to
|
|
493
|
+
* attach. Kept here so all five surfaces word it identically.
|
|
494
|
+
*/
|
|
495
|
+
export function debugLogNotice(surface, path) {
|
|
496
|
+
if (!path)
|
|
497
|
+
return null;
|
|
498
|
+
return `🐞 ${surface}: session debug log written to ${path} — attach it to a bug report.`;
|
|
499
|
+
}
|
|
500
|
+
//# sourceMappingURL=debug-log.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"debug-log.js","sourceRoot":"","sources":["../../src/observability/debug-log.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"event-bus.d.ts","sourceRoot":"","sources":["../../src/observability/event-bus.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAOH,4CAA4C;AAC5C,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAsDrB;;;;OAIG;;IAEH;;;OAGG;;IAEH;;;OAGG;;IAIH;;;;;;;OAOG;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"event-bus.d.ts","sourceRoot":"","sources":["../../src/observability/event-bus.ts"],"names":[],"mappings":"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"}
|
|
@@ -85,7 +85,10 @@ export const EventNames = {
|
|
|
85
85
|
// Shell execution events (E1 — every subprocess is a visible lane)
|
|
86
86
|
EXEC_SHELL_START: 'exec:shell-start',
|
|
87
87
|
EXEC_SHELL_END: 'exec:shell-end',
|
|
88
|
-
// I2 — tool-loop execution (
|
|
88
|
+
// I2 — tool-loop execution. WS4 (#26) — consumed by the dashboard's step cards
|
|
89
|
+
// and the gateway's durable turn record; the operator's tool hooks are NOT
|
|
90
|
+
// driven from here (the execution seam calls them directly, so a veto can stop
|
|
91
|
+
// a call and no surface can double-fire one).
|
|
89
92
|
TOOL_CALLED: 'tool:called',
|
|
90
93
|
// Delegation events (H2 — sub-agent spawning, `spawn_agents` /
|
|
91
94
|
// `delegate_tool.py` parity). Emitted by src/agents/tools/delegation.ts
|