mixdog 0.9.2 → 0.9.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/package.json +8 -3
- package/scripts/anthropic-maxtokens-test.mjs +119 -0
- package/scripts/bench/lead-review-tasks-r3.json +20 -0
- package/scripts/bench/lead-review-tasks.json +20 -0
- package/scripts/bench/r4-mixed-tasks.json +20 -0
- package/scripts/bench/review-tasks.json +20 -0
- package/scripts/bench/round-codex.json +114 -0
- package/scripts/bench/round-mixdog-lead-r3.json +269 -0
- package/scripts/bench/round-mixdog-lead.json +269 -0
- package/scripts/bench/round-mixdog.json +126 -0
- package/scripts/bench/round-r10-bigsample.json +679 -0
- package/scripts/bench/round-r11-codexalign.json +257 -0
- package/scripts/bench/round-r4-codex.json +114 -0
- package/scripts/bench/round-r4-mixed.json +225 -0
- package/scripts/bench/round-r5-gpt-lead.json +259 -0
- package/scripts/bench/round-r6-codex.json +114 -0
- package/scripts/bench/round-r6-solo.json +257 -0
- package/scripts/bench/round-r7-full.json +254 -0
- package/scripts/bench/round-r8-fulldefault.json +255 -0
- package/scripts/bench-run.mjs +215 -29
- package/scripts/build-tui.mjs +13 -1
- package/scripts/explore-bench.mjs +124 -0
- package/scripts/freevar-smoke.mjs +95 -0
- package/scripts/hook-bus-test.mjs +191 -0
- package/scripts/internal-comms-bench.mjs +1 -0
- package/scripts/internal-comms-smoke.mjs +10 -9
- package/scripts/mouse-probe.mjs +45 -0
- package/scripts/output-style-bench.mjs +13 -6
- package/scripts/output-style-smoke.mjs +4 -4
- package/scripts/path-suffix-test.mjs +57 -0
- package/scripts/provider-toolcall-test.mjs +7 -3
- package/scripts/recall-bench.mjs +207 -0
- package/scripts/recall-usecase-cases.json +18 -0
- package/scripts/recall-usecase-probe.json +6 -0
- package/scripts/session-bench.mjs +152 -6
- package/scripts/tool-smoke.mjs +30 -67
- package/scripts/tui-render-smoke.mjs +90 -0
- package/scripts/webhook-smoke.mjs +208 -0
- package/src/agents/debugger/AGENT.md +5 -2
- package/src/agents/heavy-worker/AGENT.md +21 -11
- package/src/agents/maintainer/AGENT.md +4 -0
- package/src/agents/reviewer/AGENT.md +3 -2
- package/src/agents/worker/AGENT.md +21 -11
- package/src/lib/rules-builder.cjs +4 -0
- package/src/mixdog-session-runtime.mjs +933 -3731
- package/src/output-styles/default.md +34 -9
- package/src/output-styles/{oneline.md → extreme-minimal.md} +5 -4
- package/src/output-styles/minimal.md +4 -1
- package/src/output-styles/simple.md +22 -7
- package/src/repl.mjs +5 -5
- package/src/rules/agent/00-common.md +2 -0
- package/src/rules/agent/30-explorer.md +8 -11
- package/src/rules/lead/lead-brief.md +12 -0
- package/src/rules/lead/lead-tool.md +2 -9
- package/src/rules/shared/01-tool.md +11 -5
- package/src/runtime/agent/orchestrator/agent-runtime/agent-loop-policy.mjs +25 -0
- package/src/runtime/agent/orchestrator/agent-runtime/cache-strategy.mjs +100 -23
- package/src/runtime/agent/orchestrator/agent-runtime/session-builder.mjs +6 -15
- package/src/runtime/agent/orchestrator/agent-trace-format.mjs +362 -0
- package/src/runtime/agent/orchestrator/agent-trace-io.mjs +410 -0
- package/src/runtime/agent/orchestrator/agent-trace.mjs +16 -735
- package/src/runtime/agent/orchestrator/config.mjs +69 -2
- package/src/runtime/agent/orchestrator/context/collect.mjs +51 -0
- package/src/runtime/agent/orchestrator/mcp/client.mjs +6 -2
- package/src/runtime/agent/orchestrator/providers/anthropic-effort.mjs +63 -21
- package/src/runtime/agent/orchestrator/providers/anthropic-max-tokens.mjs +93 -0
- package/src/runtime/agent/orchestrator/providers/anthropic-model-resolve.mjs +209 -0
- package/src/runtime/agent/orchestrator/providers/anthropic-oauth-credentials.mjs +489 -0
- package/src/runtime/agent/orchestrator/providers/anthropic-oauth.mjs +97 -1343
- package/src/runtime/agent/orchestrator/providers/anthropic-sse.mjs +607 -0
- package/src/runtime/agent/orchestrator/providers/anthropic.mjs +78 -10
- package/src/runtime/agent/orchestrator/providers/api-usage.mjs +1 -13
- package/src/runtime/agent/orchestrator/providers/codex-client-meta.mjs +81 -0
- package/src/runtime/agent/orchestrator/providers/gemini-cache.mjs +248 -0
- package/src/runtime/agent/orchestrator/providers/gemini-schema.mjs +303 -0
- package/src/runtime/agent/orchestrator/providers/gemini-stream.mjs +505 -0
- package/src/runtime/agent/orchestrator/providers/gemini.mjs +44 -1014
- package/src/runtime/agent/orchestrator/providers/grok-oauth.mjs +18 -4
- package/src/runtime/agent/orchestrator/providers/lib/usage-primitives.mjs +32 -0
- package/src/runtime/agent/orchestrator/providers/model-catalog.mjs +86 -11
- package/src/runtime/agent/orchestrator/providers/model-list-sanitize.mjs +348 -0
- package/src/runtime/agent/orchestrator/providers/oauth-usage.mjs +54 -20
- package/src/runtime/agent/orchestrator/providers/openai-codex-model.mjs +108 -0
- package/src/runtime/agent/orchestrator/providers/openai-compat-stream.mjs +19 -12
- package/src/runtime/agent/orchestrator/providers/openai-compat-trace.mjs +58 -0
- package/src/runtime/agent/orchestrator/providers/openai-compat-wire.mjs +368 -0
- package/src/runtime/agent/orchestrator/providers/openai-compat-xai.mjs +760 -0
- package/src/runtime/agent/orchestrator/providers/openai-compat.mjs +41 -1142
- package/src/runtime/agent/orchestrator/providers/openai-oauth-http-sse.mjs +732 -0
- package/src/runtime/agent/orchestrator/providers/openai-oauth-login.mjs +193 -0
- package/src/runtime/agent/orchestrator/providers/openai-oauth-ws.mjs +303 -2119
- package/src/runtime/agent/orchestrator/providers/openai-oauth.mjs +140 -995
- package/src/runtime/agent/orchestrator/providers/openai-ws-delta.mjs +227 -0
- package/src/runtime/agent/orchestrator/providers/openai-ws-events.mjs +67 -0
- package/src/runtime/agent/orchestrator/providers/openai-ws-pool.mjs +436 -0
- package/src/runtime/agent/orchestrator/providers/openai-ws-stream.mjs +1105 -0
- package/src/runtime/agent/orchestrator/providers/openai-ws.mjs +2 -1
- package/src/runtime/agent/orchestrator/providers/opencode-go-usage.mjs +38 -12
- package/src/runtime/agent/orchestrator/providers/retry-classifier.mjs +7 -8
- package/src/runtime/agent/orchestrator/session/compact/budget.mjs +288 -0
- package/src/runtime/agent/orchestrator/session/compact/constants.mjs +85 -0
- package/src/runtime/agent/orchestrator/session/compact/engine.mjs +749 -0
- package/src/runtime/agent/orchestrator/session/compact/messages.mjs +82 -0
- package/src/runtime/agent/orchestrator/session/compact/summary-schema.mjs +315 -0
- package/src/runtime/agent/orchestrator/session/compact/summary.mjs +643 -0
- package/src/runtime/agent/orchestrator/session/compact/text-utils.mjs +326 -0
- package/src/runtime/agent/orchestrator/session/compact.mjs +40 -2282
- package/src/runtime/agent/orchestrator/session/loop/compact-debug.mjs +28 -0
- package/src/runtime/agent/orchestrator/session/loop/compact-policy.mjs +274 -0
- package/src/runtime/agent/orchestrator/session/loop/completion-guards.mjs +61 -0
- package/src/runtime/agent/orchestrator/session/loop/context-overflow.mjs +38 -0
- package/src/runtime/agent/orchestrator/session/loop/env.mjs +14 -0
- package/src/runtime/agent/orchestrator/session/loop/hidden-agents.mjs +21 -0
- package/src/runtime/agent/orchestrator/session/loop/pre-dispatch-deny.mjs +47 -0
- package/src/runtime/agent/orchestrator/session/loop/recall-fasttrack.mjs +182 -0
- package/src/runtime/agent/orchestrator/session/loop/steering-ladder.mjs +173 -0
- package/src/runtime/agent/orchestrator/session/loop/steering.mjs +63 -0
- package/src/runtime/agent/orchestrator/session/loop/stored-tool-args.mjs +100 -0
- package/src/runtime/agent/orchestrator/session/loop/termination.mjs +58 -0
- package/src/runtime/agent/orchestrator/session/loop/tool-classify.mjs +52 -0
- package/src/runtime/agent/orchestrator/session/loop/tool-exec.mjs +239 -0
- package/src/runtime/agent/orchestrator/session/loop/tool-helpers.mjs +218 -0
- package/src/runtime/agent/orchestrator/session/loop/transcript-repair.mjs +101 -0
- package/src/runtime/agent/orchestrator/session/loop/usage.mjs +35 -0
- package/src/runtime/agent/orchestrator/session/loop.mjs +409 -1304
- package/src/runtime/agent/orchestrator/session/manager/compaction-runner.mjs +471 -0
- package/src/runtime/agent/orchestrator/session/manager/context-meta.mjs +230 -0
- package/src/runtime/agent/orchestrator/session/manager/pending-messages.mjs +235 -0
- package/src/runtime/agent/orchestrator/session/manager/prompt-utils.mjs +149 -0
- package/src/runtime/agent/orchestrator/session/manager/rules-cache.mjs +155 -0
- package/src/runtime/agent/orchestrator/session/manager/runtime-liveness.mjs +406 -0
- package/src/runtime/agent/orchestrator/session/manager/status-telemetry.mjs +80 -0
- package/src/runtime/agent/orchestrator/session/manager/tool-resolution.mjs +303 -0
- package/src/runtime/agent/orchestrator/session/manager/usage-metrics.mjs +210 -0
- package/src/runtime/agent/orchestrator/session/manager.mjs +226 -2114
- package/src/runtime/agent/orchestrator/session/store-summary-index.mjs +189 -0
- package/src/runtime/agent/orchestrator/session/store.mjs +74 -179
- package/src/runtime/agent/orchestrator/stall-policy.mjs +3 -3
- package/src/runtime/agent/orchestrator/tools/builtin/arg-guard.mjs +70 -20
- package/src/runtime/agent/orchestrator/tools/builtin/bash-tool.mjs +22 -2
- package/src/runtime/agent/orchestrator/tools/builtin/builtin-tools.mjs +33 -42
- package/src/runtime/agent/orchestrator/tools/builtin/external-tool-adapters.mjs +241 -0
- package/src/runtime/agent/orchestrator/tools/builtin/fuzzy-match.mjs +1 -1
- package/src/runtime/agent/orchestrator/tools/builtin/list-tool.mjs +40 -0
- package/src/runtime/agent/orchestrator/tools/builtin/path-diagnostics.mjs +42 -2
- package/src/runtime/agent/orchestrator/tools/builtin/read-formatting.mjs +1 -1
- package/src/runtime/agent/orchestrator/tools/builtin/read-single-tool.mjs +11 -4
- package/src/runtime/agent/orchestrator/tools/builtin/rg-runner.mjs +29 -0
- package/src/runtime/agent/orchestrator/tools/builtin/search-builders.mjs +8 -0
- package/src/runtime/agent/orchestrator/tools/builtin/search-path-diagnostics.mjs +126 -0
- package/src/runtime/agent/orchestrator/tools/builtin/search-tool.mjs +81 -87
- package/src/runtime/agent/orchestrator/tools/builtin/shell-job-paths.mjs +161 -0
- package/src/runtime/agent/orchestrator/tools/builtin/shell-job-process.mjs +108 -0
- package/src/runtime/agent/orchestrator/tools/builtin/shell-jobs.mjs +78 -304
- package/src/runtime/agent/orchestrator/tools/builtin.mjs +11 -6
- package/src/runtime/agent/orchestrator/tools/code-graph/build.mjs +303 -0
- package/src/runtime/agent/orchestrator/tools/code-graph/constants.mjs +43 -0
- package/src/runtime/agent/orchestrator/tools/code-graph/disk-cache.mjs +382 -0
- package/src/runtime/agent/orchestrator/tools/code-graph/dispatch.mjs +551 -0
- package/src/runtime/agent/orchestrator/tools/code-graph/graph-binary.mjs +295 -0
- package/src/runtime/agent/orchestrator/tools/code-graph/graph-model.mjs +158 -0
- package/src/runtime/agent/orchestrator/tools/code-graph/keyword-match.mjs +82 -0
- package/src/runtime/agent/orchestrator/tools/code-graph/lang-predicates.mjs +128 -0
- package/src/runtime/agent/orchestrator/tools/code-graph/memory-cache.mjs +66 -0
- package/src/runtime/agent/orchestrator/tools/code-graph/project-root.mjs +44 -0
- package/src/runtime/agent/orchestrator/tools/code-graph/search.mjs +1080 -0
- package/src/runtime/agent/orchestrator/tools/code-graph/source-access.mjs +81 -0
- package/src/runtime/agent/orchestrator/tools/code-graph/span.mjs +19 -0
- package/src/runtime/agent/orchestrator/tools/code-graph/symbol-index.mjs +280 -0
- package/src/runtime/agent/orchestrator/tools/code-graph/text-columns.mjs +45 -0
- package/src/runtime/agent/orchestrator/tools/code-graph/text-mask.mjs +347 -0
- package/src/runtime/agent/orchestrator/tools/code-graph-tool-defs.mjs +6 -6
- package/src/runtime/agent/orchestrator/tools/code-graph.mjs +36 -4277
- package/src/runtime/agent/orchestrator/tools/graph-binary-fetcher.mjs +6 -3
- package/src/runtime/agent/orchestrator/tools/patch/constants.mjs +9 -0
- package/src/runtime/agent/orchestrator/tools/patch/dispatch.mjs +171 -0
- package/src/runtime/agent/orchestrator/tools/patch/matcher.mjs +471 -0
- package/src/runtime/agent/orchestrator/tools/patch/native-server.mjs +436 -0
- package/src/runtime/agent/orchestrator/tools/patch/orchestrator.mjs +342 -0
- package/src/runtime/agent/orchestrator/tools/patch/parsing.mjs +359 -0
- package/src/runtime/agent/orchestrator/tools/patch/paths.mjs +340 -0
- package/src/runtime/agent/orchestrator/tools/patch/v4a-convert.mjs +643 -0
- package/src/runtime/agent/orchestrator/tools/patch.mjs +36 -2959
- package/src/runtime/agent/orchestrator/tools/progress-message.mjs +1 -23
- package/src/runtime/agent/orchestrator/tools/shell-command.mjs +10 -74
- package/src/runtime/agent/orchestrator/tools/shell-powershell.mjs +77 -0
- package/src/runtime/agent/orchestrator/tools/shell-snapshot.mjs +2 -4
- package/src/runtime/agent/orchestrator/tools/shell-state.mjs +154 -0
- package/src/runtime/channels/backends/discord-access.mjs +32 -0
- package/src/runtime/channels/backends/discord-attachments.mjs +65 -0
- package/src/runtime/channels/backends/discord-gateway.mjs +233 -0
- package/src/runtime/channels/backends/discord.mjs +12 -292
- package/src/runtime/channels/index.mjs +241 -894
- package/src/runtime/channels/lib/backend-dispatch.mjs +44 -0
- package/src/runtime/channels/lib/boot-profile.mjs +23 -0
- package/src/runtime/channels/lib/crash-log.mjs +106 -0
- package/src/runtime/channels/lib/event-pipeline.mjs +18 -1
- package/src/runtime/channels/lib/event-queue.mjs +63 -4
- package/src/runtime/channels/lib/inbound-routing.mjs +111 -0
- package/src/runtime/channels/lib/index-drop-trace.mjs +72 -0
- package/src/runtime/channels/lib/output-forwarder.mjs +9 -1
- package/src/runtime/channels/lib/owner-heartbeat.mjs +75 -0
- package/src/runtime/channels/lib/parent-bridge.mjs +88 -0
- package/src/runtime/channels/lib/runtime-paths.mjs +14 -4
- package/src/runtime/channels/lib/session-discovery.mjs +56 -4
- package/src/runtime/channels/lib/telegram-format.mjs +19 -22
- package/src/runtime/channels/lib/tool-dispatch.mjs +158 -0
- package/src/runtime/channels/lib/tool-format.mjs +1 -1
- package/src/runtime/channels/lib/transcript-discovery.mjs +4 -4
- package/src/runtime/channels/lib/voice-runtime-fetcher.mjs +6 -3
- package/src/runtime/channels/lib/voice-transcription.mjs +179 -0
- package/src/runtime/channels/lib/webhook/deliveries.mjs +312 -0
- package/src/runtime/channels/lib/webhook/log.mjs +42 -0
- package/src/runtime/channels/lib/webhook/ngrok.mjs +181 -0
- package/src/runtime/channels/lib/webhook/signature.mjs +60 -0
- package/src/runtime/channels/lib/webhook.mjs +36 -570
- package/src/runtime/channels/lib/whisper-language.mjs +42 -0
- package/src/runtime/channels/tool-defs.mjs +11 -130
- package/src/runtime/memory/index.mjs +258 -2050
- package/src/runtime/memory/lib/core-memory-store.mjs +351 -1
- package/src/runtime/memory/lib/cycle-llm-adapters.mjs +58 -0
- package/src/runtime/memory/lib/cycle-scheduler.mjs +497 -0
- package/src/runtime/memory/lib/cycle-signatures.mjs +34 -0
- package/src/runtime/memory/lib/embedding-warmup.mjs +58 -0
- package/src/runtime/memory/lib/http-wire.mjs +57 -0
- package/src/runtime/memory/lib/memory-config-flags.mjs +91 -0
- package/src/runtime/memory/lib/memory-cycle.mjs +1 -1
- package/src/runtime/memory/lib/memory-cycle2-gate.mjs +515 -0
- package/src/runtime/memory/lib/memory-cycle2-mutations.mjs +324 -0
- package/src/runtime/memory/lib/memory-cycle2-shared.mjs +18 -0
- package/src/runtime/memory/lib/memory-cycle2.mjs +72 -837
- package/src/runtime/memory/lib/memory-embed.mjs +149 -0
- package/src/runtime/memory/lib/memory-process-lock.mjs +162 -0
- package/src/runtime/memory/lib/memory-recall-scope-filter.mjs +24 -0
- package/src/runtime/memory/lib/memory-recall-store.mjs +22 -2
- package/src/runtime/memory/lib/memory-retrievers.mjs +8 -0
- package/src/runtime/memory/lib/memory.mjs +20 -0
- package/src/runtime/memory/lib/pg/supervisor.mjs +1 -1
- package/src/runtime/memory/lib/promotion-fingerprint.mjs +50 -0
- package/src/runtime/memory/lib/query-handlers.mjs +780 -0
- package/src/runtime/memory/lib/recall-format.mjs +238 -0
- package/src/runtime/memory/lib/runtime-fetcher.mjs +8 -3
- package/src/runtime/memory/lib/transcript-ingest.mjs +425 -0
- package/src/runtime/memory/tool-defs.mjs +6 -14
- package/src/runtime/search/lib/http-fetch.mjs +274 -0
- package/src/runtime/search/lib/ssrf-guard.mjs +333 -0
- package/src/runtime/search/lib/web-tools.mjs +24 -602
- package/src/runtime/shared/abort-controller.mjs +1 -1
- package/src/runtime/shared/atomic-file.mjs +26 -1
- package/src/runtime/shared/background-tasks.mjs +2 -3
- package/src/runtime/shared/buffered-appender.mjs +149 -0
- package/src/runtime/shared/launcher-control.mjs +2 -2
- package/src/runtime/shared/task-notification-envelope.mjs +98 -0
- package/src/runtime/shared/tool-execution-contract.mjs +2 -2
- package/src/runtime/shared/tool-primitives.mjs +308 -0
- package/src/runtime/shared/tool-result-summary.mjs +515 -0
- package/src/runtime/shared/tool-surface.mjs +80 -898
- package/src/runtime/shared/transcript-writer.mjs +52 -2
- package/src/runtime/shared/update-checker.mjs +7 -4
- package/src/session-runtime/config-helpers.mjs +291 -0
- package/src/session-runtime/config-lifecycle.mjs +232 -0
- package/src/session-runtime/cwd-plugins.mjs +226 -0
- package/src/session-runtime/effort.mjs +128 -0
- package/src/session-runtime/fs-utils.mjs +10 -0
- package/src/session-runtime/mcp-glue.mjs +177 -0
- package/src/session-runtime/model-capabilities.mjs +130 -0
- package/src/session-runtime/model-recency.mjs +111 -0
- package/src/session-runtime/native-search.mjs +247 -0
- package/src/session-runtime/output-styles.mjs +126 -0
- package/src/session-runtime/plugin-mcp.mjs +114 -0
- package/src/session-runtime/prewarm.mjs +142 -0
- package/src/session-runtime/provider-models.mjs +278 -0
- package/src/session-runtime/provider-usage.mjs +120 -0
- package/src/session-runtime/quick-model-rows.mjs +170 -0
- package/src/session-runtime/quick-search-models.mjs +46 -0
- package/src/session-runtime/session-hooks.mjs +93 -0
- package/src/session-runtime/session-text.mjs +100 -0
- package/src/session-runtime/settings-api.mjs +319 -0
- package/src/session-runtime/statusline-route.mjs +35 -0
- package/src/session-runtime/tool-catalog.mjs +720 -0
- package/src/session-runtime/tool-defs.mjs +84 -0
- package/src/session-runtime/warmup-schedulers.mjs +201 -0
- package/src/session-runtime/workflow.mjs +358 -0
- package/src/standalone/agent-tool/helpers.mjs +237 -0
- package/src/standalone/agent-tool/notify.mjs +107 -0
- package/src/standalone/agent-tool/provider-init.mjs +143 -0
- package/src/standalone/agent-tool/render.mjs +152 -0
- package/src/standalone/agent-tool/tool-def.mjs +55 -0
- package/src/standalone/agent-tool.mjs +155 -677
- package/src/standalone/channel-worker.mjs +7 -9
- package/src/standalone/explore-tool.mjs +40 -12
- package/src/standalone/hook-bus/config.mjs +207 -0
- package/src/standalone/hook-bus/constants.mjs +90 -0
- package/src/standalone/hook-bus/handlers.mjs +481 -0
- package/src/standalone/hook-bus/payload.mjs +31 -0
- package/src/standalone/hook-bus/rules.mjs +77 -0
- package/src/standalone/hook-bus.mjs +110 -746
- package/src/standalone/memory-runtime-proxy.mjs +7 -0
- package/src/standalone/opencode-go-login.mjs +125 -0
- package/src/standalone/provider-admin.mjs +15 -19
- package/src/standalone/usage-dashboard.mjs +3 -1
- package/src/tui/App.jsx +1163 -7571
- package/src/tui/app/app-format.mjs +206 -0
- package/src/tui/app/channel-pickers.mjs +510 -0
- package/src/tui/app/clipboard.mjs +67 -0
- package/src/tui/app/core-memory-picker.mjs +210 -0
- package/src/tui/app/extension-pickers.mjs +506 -0
- package/src/tui/app/input-parsers.mjs +193 -0
- package/src/tui/app/maintenance-pickers.mjs +324 -0
- package/src/tui/app/model-options.mjs +330 -0
- package/src/tui/app/model-picker.mjs +365 -0
- package/src/tui/app/onboarding-steps.mjs +400 -0
- package/src/tui/app/project-picker.mjs +247 -0
- package/src/tui/app/provider-setup-picker.mjs +580 -0
- package/src/tui/app/resume-picker.mjs +55 -0
- package/src/tui/app/route-pickers.mjs +419 -0
- package/src/tui/app/settings-picker.mjs +490 -0
- package/src/tui/app/slash-commands.mjs +101 -0
- package/src/tui/app/slash-dispatch.mjs +427 -0
- package/src/tui/app/text-layout.mjs +46 -0
- package/src/tui/app/theme-effort-pickers.mjs +154 -0
- package/src/tui/app/transcript-window.mjs +671 -0
- package/src/tui/app/use-mouse-input.mjs +460 -0
- package/src/tui/app/use-prompt-handlers.mjs +310 -0
- package/src/tui/app/use-transcript-scroll.mjs +510 -0
- package/src/tui/app/use-transcript-window.mjs +589 -0
- package/src/tui/components/ConfirmBar.jsx +1 -1
- package/src/tui/components/Picker.jsx +32 -4
- package/src/tui/components/PromptInput.jsx +259 -80
- package/src/tui/components/SlashCommandPalette.jsx +8 -1
- package/src/tui/components/StatusLine.jsx +63 -12
- package/src/tui/components/TextEntryPanel.jsx +11 -0
- package/src/tui/components/ToolExecution.jsx +56 -588
- package/src/tui/components/TranscriptItem.jsx +105 -0
- package/src/tui/components/UsagePanel.jsx +18 -4
- package/src/tui/components/prompt-input/edit-helpers.mjs +72 -0
- package/src/tui/components/prompt-input/voice-indicator.mjs +39 -0
- package/src/tui/components/tool-execution/ResultBody.jsx +56 -0
- package/src/tui/components/tool-execution/surface-detail.mjs +405 -0
- package/src/tui/components/tool-execution/text-format.mjs +161 -0
- package/src/tui/components/tool-output-format.mjs +2 -2
- package/src/tui/display-width.mjs +20 -3
- package/src/tui/dist/index.mjs +18034 -17188
- package/src/tui/engine/agent-envelope.mjs +296 -0
- package/src/tui/engine/agent-job-feed.mjs +133 -0
- package/src/tui/engine/boot-profile.mjs +21 -0
- package/src/tui/engine/labels.mjs +67 -0
- package/src/tui/engine/notice-text.mjs +112 -0
- package/src/tui/engine/notification-plan.mjs +76 -0
- package/src/tui/engine/queue-helpers.mjs +161 -0
- package/src/tui/engine/render-timing.mjs +17 -0
- package/src/tui/engine/session-stats.mjs +46 -0
- package/src/tui/engine/tool-approval.mjs +94 -0
- package/src/tui/engine/tool-call-fields.mjs +23 -0
- package/src/tui/engine/tool-card-results.mjs +234 -0
- package/src/tui/engine/tool-result-status.mjs +135 -0
- package/src/tui/engine/tool-result-text.mjs +126 -0
- package/src/tui/engine.mjs +405 -1385
- package/src/tui/figures.mjs +5 -0
- package/src/tui/index.jsx +105 -0
- package/src/tui/input-editing.mjs +60 -10
- package/src/tui/keyboard-protocol.mjs +2 -2
- package/src/tui/lib/voice-recorder.mjs +35 -19
- package/src/tui/markdown/format-token.mjs +11 -9
- package/src/tui/paste-attachments.mjs +38 -0
- package/src/tui/statusline-ansi-bridge.mjs +11 -3
- package/src/tui/theme.mjs +6 -0
- package/src/tui/themes/base.mjs +2 -2
- package/src/tui/themes/kanagawa.mjs +4 -4
- package/src/tui/themes/teal.mjs +4 -5
- package/src/tui/themes/utils.mjs +1 -1
- package/src/ui/statusline-agents.mjs +213 -0
- package/src/ui/statusline-format.mjs +146 -0
- package/src/ui/statusline-segments.mjs +148 -0
- package/src/ui/statusline.mjs +77 -462
- package/src/ui/tool-card.mjs +0 -1
- package/src/vendor/statusline/bin/statusline-route.mjs +15 -2
- package/src/workflows/default/WORKFLOW.md +16 -9
- package/src/workflows/sequential/WORKFLOW.md +16 -11
- package/src/workflows/solo/WORKFLOW.md +5 -1
- package/vendor/ink/build/display-width.js +19 -3
- package/vendor/ink/build/ink.js +103 -6
- package/vendor/ink/build/log-update.js +17 -3
- package/vendor/ink/build/wrap-text.js +125 -0
- package/scripts/_test-folder-dialog.mjs +0 -30
- package/scripts/fix-brief-fn.mjs +0 -35
- package/scripts/fix-format-tool-surface.mjs +0 -24
- package/scripts/fix-tool-exec-visible.mjs +0 -42
- package/scripts/patch-agent-brief.mjs +0 -48
- package/scripts/patch-app.mjs +0 -21
- package/scripts/patch-app2.mjs +0 -18
- package/scripts/patch-dist-brief.mjs +0 -96
- package/scripts/patch-tool-exec.mjs +0 -70
- package/src/examples/schedules/SCHEDULE.example.md +0 -32
- package/src/examples/webhooks/WEBHOOK.example.md +0 -40
- package/src/runtime/agent/orchestrator/session/manager.reactive-persist.test.mjs +0 -107
- package/src/runtime/agent/orchestrator/tools/builtin/arg-guard.test.mjs +0 -143
- package/src/runtime/agent/orchestrator/tools/builtin/diagnostics-tool.mjs +0 -285
- package/src/runtime/agent/orchestrator/tools/builtin/open-config-tool.mjs +0 -26
- package/src/runtime/shared/channel-notification-routing.test.mjs +0 -45
- package/src/runtime/shared/tool-execution-contract.test.mjs +0 -183
- package/src/standalone/agent-task-status.test.mjs +0 -76
- package/src/tui/components/tool-output-format.test.mjs +0 -399
- package/src/tui/display-width.test.mjs +0 -35
- package/src/tui/engine-runtime-notification.test.mjs +0 -115
- package/src/tui/engine-tool-result-text.test.mjs +0 -75
- package/src/tui/markdown/format-token.test.mjs +0 -354
- package/src/tui/markdown/render-ansi.test.mjs +0 -108
- package/src/tui/markdown/stream-fence.test.mjs +0 -26
- package/src/tui/markdown/streaming-markdown.test.mjs +0 -70
- package/src/tui/prompt-history-store.test.mjs +0 -52
- package/src/tui/statusline-ansi-bridge.test.mjs +0 -159
- package/src/tui/transcript-tool-failures.test.mjs +0 -111
- package/src/ui/markdown.test.mjs +0 -70
- package/src/ui/statusline-context-label.test.mjs +0 -15
- package/src/vendor/statusline/bin/statusline-lib.mjs +0 -186
- package/src/vendor/statusline/bin/statusline-route.test.mjs +0 -80
|
@@ -0,0 +1,679 @@
|
|
|
1
|
+
{
|
|
2
|
+
"round": "10",
|
|
3
|
+
"runner": "lead",
|
|
4
|
+
"opts": {
|
|
5
|
+
"provider": null,
|
|
6
|
+
"model": null,
|
|
7
|
+
"effort": null,
|
|
8
|
+
"fast": false,
|
|
9
|
+
"env": {
|
|
10
|
+
"MIXDOG_DATA_DIR": "C:\\Users\\tempe\\.mixdog\\bench-data"
|
|
11
|
+
}
|
|
12
|
+
},
|
|
13
|
+
"tasks": 9,
|
|
14
|
+
"completed": 9,
|
|
15
|
+
"completion_rate": 100,
|
|
16
|
+
"sessions": [
|
|
17
|
+
"sess_23136_1783040931470_1783040931720_7d363c6e12d9a04c716bcbd966743b50",
|
|
18
|
+
"sess_47452_1783040931481_1783040931729_9ff8bd3a14e033382782889926203837",
|
|
19
|
+
"sess_29564_1783040931496_1783040931743_d0a04cd7e55e9cccf5271d2315a2b2e9",
|
|
20
|
+
"sess_43096_1783040996270_1783040996507_9f3169891fe62b67f6f8e76b9b17a9af",
|
|
21
|
+
"sess_34252_1783040998311_1783040998555_4239e25b6ce06b31759623c29219fa89",
|
|
22
|
+
"sess_47892_1783041016626_1783041016852_becf83de2ea689e9c275231762292b57",
|
|
23
|
+
"sess_60424_1783041088316_1783041088539_9dd11664b2a5044bc48546dfa5edab66",
|
|
24
|
+
"sess_12676_1783041093473_1783041093707_779e3caee3f5f6c650870d1c9cb29e47",
|
|
25
|
+
"sess_41124_1783041095028_1783041095274_e8bb99510c7c89e52275e67736e3d529"
|
|
26
|
+
],
|
|
27
|
+
"results": [
|
|
28
|
+
{
|
|
29
|
+
"id": "r4-debug-forwarding-gap#1",
|
|
30
|
+
"agent": "reviewer",
|
|
31
|
+
"ok": true,
|
|
32
|
+
"ms": 156849,
|
|
33
|
+
"sessionId": "sess_23136_1783040931470_1783040931720_7d363c6e12d9a04c716bcbd966743b50",
|
|
34
|
+
"output": "sessionId: sess_23136_1783040931470_1783040931720_7d363c6e12d9a04c716bcbd966743b50\n재영님, 조사 결과 활성화 직후 출력은 대부분 지연 후 회수되지만, 이미 존재하는 transcript를 EOF로 바인딩하는 경로는 실제 유실 가능성이 있습니다.\n\n**전체 경로**: 활성화는 `channelBridgeActive=true`와 `bridge-state.json` 기록으로 시작하고(`src/runtime/channels/index.mjs:1734`, `src/runtime/channels/index.mjs:218`), 소유권 확보 후 runtime/connect/bind가 진행됩니다(`src/runtime/channels/index.mjs:881`, `src/runtime/channels/index.mjs:710`). 바인딩은 `setContext()`→`startWatch()`→`forwardNewText()`→`cb.send()`로 이어집니다(`src/runtime/channels/index.mjs:317`, `src/runtime/channels/lib/output-forwarder.mjs:93`, `src/runtime/channels/lib/output-forwarder.mjs:647`, `src/runtime/channels/lib/output-forwarder.mjs:351`, `src/runtime/channels/lib/output-forwarder.mjs:316`).\n\n**1. 이미 존재하는 transcript를 처음 바인딩하면 이전 출력이 EOF 처리될 수 있음**: `catchUpFromPersisted`라도 persisted path가 같지 않으면 cursor가 `currentSize`로 잡힙니다(`src/runtime/channels/lib/output-forwarder.mjs:117`, `src/runtime/channels/lib/output-forwarder.mjs:122`, `src/runtime/channels/lib/output-forwarder.mjs:128`). 이후 `forwardNewText()`는 새 cursor 이후만 읽으므로, 바인딩 전에 이미 기록된 assistant 출력은 catch-up으로 복구되지 않습니다(`src/runtime/channels/index.mjs:441`, `src/runtime/channels/index.mjs:447`, `src/runtime/channels/lib/output-forwarder.mjs:354`).\n\n**2. 활성화 시 channelId를 못 정하면 forwarding 자체가 시작되지 않음**: persisted status나 main channel fallback이 없으면 bind가 반환됩니다(`src/runtime/channels/index.mjs:610`, `src/runtime/channels/index.mjs:624`). 이후 늦게 inbound가 와서 기존 transcript에 기본 바인딩하면 EOF로 잡힐 수 있어, 그 전 backlog는 보통 복구되지 않습니다(`src/runtime/channels/index.mjs:1597`, `src/runtime/channels/lib/output-forwarder.mjs:125`).\n\n**3. stale/wrong transcript에 붙어 있으면 실제 session 출력은 감시되지 않음**: 이전 path fallback과 later steal 경로가 있으며(`src/runtime/channels/index.mjs:278`, `src/runtime/channels/index.mjs:503`, `src/runtime/channels/index.mjs:1506`), self transcript가 이미 존재하는 상태로 steal되면 기본 `applyTranscriptBinding()`이라 기존 bytes는 EOF 처리됩니다(`src/runtime/channels/index.mjs:1597`). 단, self transcript가 아직 없던 경우는 `catchUpFromPersisted`/pending rebind로 첫 출력 복구가 됩니다(`src/runtime/channels/index.mjs:1602`).\n\n**4. not-yet-created transcript의 `fs.watch` 실패는 지연으로 처리됨**: `startWatch()`는 없는 파일에서 catch 후 watcher를 닫고(`src/runtime/channels/lib/output-forwarder.mjs:647`, `src/runtime/channels/lib/output-forwarder.mjs:667`), re-arm poll이 파일 생성 시 watch 설치와 `forwardNewText()`를 호출합니다(`src/runtime/channels/index.mjs:357`, `src/runtime/channels/index.mjs:376`). 60초 안에 생성되면 backlog가 복구되지만, timeout/supersede 후에는 자동 복구가 없습니다(`src/runtime/channels/index.mjs:384`).\n\n**5. backend connect 전 ownership gate는 출력 지연만 유발함**: owner probe는 `bridgeRuntimeConnected && currentOwnerState().owned`라 connect 전 `forwardNewText()`가 no-op입니다(`src/runtime/channels/index.mjs:316`, `src/runtime/channels/lib/output-forwarder.mjs:351`). cursor를 전진시키지 않으므로 post-connect `forwardNewText()` 또는 re-arm으로 backlog가 복구됩니다(`src/runtime/channels/index.mjs:776`, `src/runtime/channels/index.mjs:801`).\n\n**6. stat 이후 watch 설치 전 write는 보강되어 있음**: `startWatch()`가 watch 설치 직후 flush를 예약해 stat과 watcher 사이에 쓰인 bytes를 읽습니다(`src/runtime/channels/lib/output-forwarder.mjs:665`, `src/runtime/channels/lib/output-forwarder.mjs:703`). 이 구간은 지연은 가능하지만 backlog catch-up으로 복구됩니다.\n\nVerdict: pending-file/pre-connect window는 대체로 복구되지만, 기존 transcript를 EOF로 바인딩하는 활성화/재바인딩 경로는 이미 기록된 assistant 출력을 유실할 수 있어 현재 경로는 완전히 lossless하지 않습니다.",
|
|
35
|
+
"card": {
|
|
36
|
+
"session": "sess_23136_1783040931470_1783040931720_7d363c6e12d9a04c716bcbd966743b50",
|
|
37
|
+
"provider": "openai-oauth",
|
|
38
|
+
"model": "gpt-5.5",
|
|
39
|
+
"wall_ms": 146312,
|
|
40
|
+
"turns": 8,
|
|
41
|
+
"tool_calls": 12,
|
|
42
|
+
"tools_per_turn": 1.5,
|
|
43
|
+
"total_tool_ms": 1050,
|
|
44
|
+
"llm_stream_ms": 145445,
|
|
45
|
+
"cache_ratio": 0.7823874601236659,
|
|
46
|
+
"cached_tokens": 198656,
|
|
47
|
+
"prompt_tokens": 253910,
|
|
48
|
+
"uncached_tokens": 55254,
|
|
49
|
+
"output_tokens": 16037,
|
|
50
|
+
"cache_weighted_input_10": 75119.6,
|
|
51
|
+
"cache_weighted_input_25": 104918,
|
|
52
|
+
"prompt_growth": 52206,
|
|
53
|
+
"antipatterns": 1,
|
|
54
|
+
"issues": 11,
|
|
55
|
+
"issue_types": [
|
|
56
|
+
"cache",
|
|
57
|
+
"cache_break",
|
|
58
|
+
"service_tier",
|
|
59
|
+
"tool_churn_cluster"
|
|
60
|
+
],
|
|
61
|
+
"read_fragmentation_paths": [],
|
|
62
|
+
"grep_sweep_count": 0
|
|
63
|
+
}
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
"id": "r4-impl-usage-summary#1",
|
|
67
|
+
"agent": "worker",
|
|
68
|
+
"ok": true,
|
|
69
|
+
"ms": 66832,
|
|
70
|
+
"sessionId": "sess_47452_1783040931481_1783040931729_9ff8bd3a14e033382782889926203837",
|
|
71
|
+
"output": "sessionId: sess_47452_1783040931481_1783040931729_9ff8bd3a14e033382782889926203837\n요청 범위가 명확해서 바로 구현·검증까지 진행하겠습니다.이미 대상 파일과 npm script가 있어 현재 구현 상태를 검증하고 필요한 보정만 하겠습니다.구현물이 이미 있어 변경 여부를 확인한 뒤 검증을 실행하겠습니다.문법 확인과 실제 실행을 한 번 수행하겠습니다.재영님, 완료했습니다: `usage:today` npm script와 `scripts/usage-today.mjs`를 추가했고 검증까지 통과했습니다.\n\n- **Diff 요약**: `package.json`에 `\"usage:today\": \"node scripts/usage-today.mjs\"` 추가, 새 스크립트는 `MIXDOG_DATA_DIR`/기본 data dir의 `history/agent-trace.jsonl`을 읽어 local midnight 이후 usage를 모델별 집계합니다.\n\n- **출력 내용**: 모델별 `calls`, `input`, `cached`, `output`, `costUsd`와 `GRAND TOTAL`을 출력하며 `--trace`, `--json` 파싱 스타일은 `scripts/session-bench.mjs`와 맞췄습니다.\n\n- **검증**: `node --check scripts/usage-today.mjs` 통과, `npm run usage:today` 실행 완료; 이번 실행의 `GRAND TOTAL`은 `106 calls`, `16.20M input`, `18.77M cached`, `614.0k output`, `$67.1069`였습니다.\n\n- **참고**: 기존 working tree의 `src/runtime/channels/lib/event-queue.mjs`, `src/runtime/channels/lib/output-forwarder.mjs` 변경은 건드리지 않았습니다.",
|
|
72
|
+
"card": {
|
|
73
|
+
"session": "sess_47452_1783040931481_1783040931729_9ff8bd3a14e033382782889926203837",
|
|
74
|
+
"provider": "openai-oauth",
|
|
75
|
+
"model": "gpt-5.5",
|
|
76
|
+
"wall_ms": 56300,
|
|
77
|
+
"turns": 8,
|
|
78
|
+
"tool_calls": 11,
|
|
79
|
+
"tools_per_turn": 1.4,
|
|
80
|
+
"total_tool_ms": 2145,
|
|
81
|
+
"llm_stream_ms": 54088,
|
|
82
|
+
"cache_ratio": 0.8022199988673475,
|
|
83
|
+
"cached_tokens": 84992,
|
|
84
|
+
"prompt_tokens": 105946,
|
|
85
|
+
"uncached_tokens": 20954,
|
|
86
|
+
"output_tokens": 4243,
|
|
87
|
+
"cache_weighted_input_10": 29453.2,
|
|
88
|
+
"cache_weighted_input_25": 42202,
|
|
89
|
+
"prompt_growth": 14222,
|
|
90
|
+
"antipatterns": 1,
|
|
91
|
+
"issues": 12,
|
|
92
|
+
"issue_types": [
|
|
93
|
+
"cache",
|
|
94
|
+
"cache_break",
|
|
95
|
+
"service_tier",
|
|
96
|
+
"missed_parallelism",
|
|
97
|
+
"tool_churn_cluster"
|
|
98
|
+
],
|
|
99
|
+
"read_fragmentation_paths": [],
|
|
100
|
+
"grep_sweep_count": 0
|
|
101
|
+
}
|
|
102
|
+
},
|
|
103
|
+
{
|
|
104
|
+
"id": "r4-explain-compact-engine#1",
|
|
105
|
+
"agent": "explore",
|
|
106
|
+
"ok": true,
|
|
107
|
+
"ms": 64777,
|
|
108
|
+
"sessionId": "sess_29564_1783040931496_1783040931743_d0a04cd7e55e9cccf5271d2315a2b2e9",
|
|
109
|
+
"output": "sessionId: sess_29564_1783040931496_1783040931743_d0a04cd7e55e9cccf5271d2315a2b2e9\n- **Entry points:** `compact.mjs` re-exports `semanticCompactMessages` and `recallFastTrackCompactMessages`; `engine.mjs` implements both. `src/runtime/agent/orchestrator/session/compact.mjs:52`, `src/runtime/agent/orchestrator/session/compact/engine.mjs:278`, `src/runtime/agent/orchestrator/session/compact/engine.mjs:445`\n\n- **Callers:** pre-send auto compaction calls recall-fasttrack or semantic from `agentLoop`; manual/clear compaction goes through `runSessionCompaction`, called by `clearSessionMessages` and `compactSessionMessages`. `src/runtime/agent/orchestrator/session/loop.mjs:414`, `src/runtime/agent/orchestrator/session/loop.mjs:441`, `src/runtime/agent/orchestrator/session/manager/compaction-runner.mjs:143`, `src/runtime/agent/orchestrator/session/manager.mjs:1849`, `src/runtime/agent/orchestrator/session/manager.mjs:1950`\n\n- **Fire decision:** auto compaction runs after steering is drained and before `provider.send`; it fires when reactive overflow is pending, token estimate is unknown, or `messages + reserve >= triggerTokens`. `src/runtime/agent/orchestrator/session/loop.mjs:324`, `src/runtime/agent/orchestrator/session/loop.mjs:351`, `src/runtime/agent/orchestrator/session/loop.mjs:353`, `src/runtime/agent/orchestrator/session/loop/compact-policy.mjs:170`\n\n- **Policy shape:** boundary comes from explicit boundary/context/auto limit; trigger is explicit sub-boundary limit or boundary minus buffer; reserve is request tool schema reserve plus configured reserve; agent-owned sessions force semantic. `src/runtime/agent/orchestrator/session/loop/compact-policy.mjs:94`, `src/runtime/agent/orchestrator/session/loop/compact-policy.mjs:117`, `src/runtime/agent/orchestrator/session/loop/compact-policy.mjs:121`, `src/runtime/agent/orchestrator/session/loop/compact-policy.mjs:145`, `src/runtime/agent/orchestrator/session/loop/compact-policy.mjs:39`\n\n- **Semantic flow:** sanitize first, no-op if already under budget and not forced, otherwise redact, select window, summarize head with compact provider call, then emit `system + summary + tail`. `src/runtime/agent/orchestrator/session/compact/engine.mjs:284`, `src/runtime/agent/orchestrator/session/compact/engine.mjs:289`, `src/runtime/agent/orchestrator/session/compact/engine.mjs:312`, `src/runtime/agent/orchestrator/session/compact/engine.mjs:314`, `src/runtime/agent/orchestrator/session/compact/engine.mjs:367`, `src/runtime/agent/orchestrator/session/compact/engine.mjs:392`\n\n- **Semantic tail:** protected/system context is split from live history, prior summary is detected, and tail is selected by recent user turns when present or by non-tool cut points when no user turn exists. `src/runtime/agent/orchestrator/session/compact/engine.mjs:100`, `src/runtime/agent/orchestrator/session/compact/engine.mjs:103`, `src/runtime/agent/orchestrator/session/compact/engine.mjs:110`, `src/runtime/agent/orchestrator/session/compact/engine.mjs:240`\n\n- **Tail budget:** user-turn tail keeps up to `tailTurns` recent turns within `preserveRecentBudget`, splitting the newest turn suffix if needed; cut-point tail never starts on a `tool` message. `src/runtime/agent/orchestrator/session/compact/engine.mjs:134`, `src/runtime/agent/orchestrator/session/compact/engine.mjs:141`, `src/runtime/agent/orchestrator/session/compact/engine.mjs:151`, `src/runtime/agent/orchestrator/session/compact/engine.mjs:121`, `src/runtime/agent/orchestrator/session/compact/engine.mjs:124`\n\n- **Recall-fasttrack flow:** recall path ingests/dumps session memory, optionally drains raw rows, caps recall injection to 5% context floor, then calls `recallFastTrackCompactMessages` with combined recall text. `src/runtime/agent/orchestrator/session/loop/recall-fasttrack.mjs:61`, `src/runtime/agent/orchestrator/session/loop/recall-fasttrack.mjs:84`, `src/runtime/agent/orchestrator/session/loop/recall-fasttrack.mjs:103`, `src/runtime/agent/orchestrator/session/loop/recall-fasttrack.mjs:157`, `src/runtime/agent/orchestrator/session/loop/recall-fasttrack.mjs:161`\n\n- **Recall tail:** recall preserves the newest structured turns, drops oldest kept turns until under cap, then truncates surviving content if necessary while repairing tool pairs. `src/runtime/agent/orchestrator/session/compact/engine.mjs:593`, `src/runtime/agent/orchestrator/session/compact/engine.mjs:601`, `src/runtime/agent/orchestrator/session/compact/engine.mjs:602`, `src/runtime/agent/orchestrator/session/compact/engine.mjs:610`, `src/runtime/agent/orchestrator/session/compact/engine.mjs:522`\n\n- **Redaction hook:** redaction is skipped on no-op; once compaction proceeds, `redactToolCallSecretsInMessages` runs before window/tail selection so preserved system and tail are measured and emitted redacted. `src/runtime/agent/orchestrator/session/compact/engine.mjs:286`, `src/runtime/agent/orchestrator/session/compact/engine.mjs:306`, `src/runtime/agent/orchestrator/session/compact/engine.mjs:312`, `src/runtime/agent/orchestrator/session/compact/engine.mjs:389`\n\n- **Budget fallback:** if mandatory `system + tail` plus minimum summary room exceeds target budget, both semantic and recall raise the budget instead of failing. `src/runtime/agent/orchestrator/session/compact/engine.mjs:319`, `src/runtime/agent/orchestrator/session/compact/engine.mjs:328`, `src/runtime/agent/orchestrator/session/compact/engine.mjs:658`, `src/runtime/agent/orchestrator/session/compact/engine.mjs:661`\n\n- **Failure paths:** semantic throws on empty live/no prior head, prompt fit failure, empty provider summary, summary fit failure, or final budget overflow; recall throws on no compactable prior history, empty recall text, summary fit failure, or final overflow. `src/runtime/agent/orchestrator/session/compact/engine.mjs:254`, `src/runtime/agent/orchestrator/session/compact/engine.mjs:315`, `src/runtime/agent/orchestrator/session/compact/engine.mjs:335`, `src/runtime/agent/orchestrator/session/compact/engine.mjs:372`, `src/runtime/agent/orchestrator/session/compact/engine.mjs:385`, `src/runtime/agent/orchestrator/session/compact/engine.mjs:653`, `src/runtime/agent/orchestrator/session/compact/engine.mjs:666`, `src/runtime/agent/orchestrator/session/compact/engine.mjs:691`\n\n- **Fallback handling:** pre-send semantic failure can fall back to unanchored tool-output prune, but recall-fasttrack failure skips that prune and escalates overflow; manual recall failure may try semantic fallback before recording failure. `src/runtime/agent/orchestrator/session/loop.mjs:501`, `src/runtime/agent/orchestrator/session/loop.mjs:517`, `src/runtime/agent/orchestrator/session/loop.mjs:618`, `src/runtime/agent/orchestrator/session/manager/compaction-runner.mjs:237`, `src/runtime/agent/orchestrator/session/manager/compaction-runner.mjs:245`",
|
|
110
|
+
"card": {
|
|
111
|
+
"session": "sess_29564_1783040931496_1783040931743_d0a04cd7e55e9cccf5271d2315a2b2e9",
|
|
112
|
+
"provider": "openai-oauth",
|
|
113
|
+
"model": "gpt-5.5",
|
|
114
|
+
"wall_ms": 54238,
|
|
115
|
+
"turns": 6,
|
|
116
|
+
"tool_calls": 6,
|
|
117
|
+
"tools_per_turn": 1,
|
|
118
|
+
"total_tool_ms": 830,
|
|
119
|
+
"llm_stream_ms": 53425,
|
|
120
|
+
"cache_ratio": 0.5636379032940977,
|
|
121
|
+
"cached_tokens": 59904,
|
|
122
|
+
"prompt_tokens": 106281,
|
|
123
|
+
"uncached_tokens": 46377,
|
|
124
|
+
"output_tokens": 4260,
|
|
125
|
+
"cache_weighted_input_10": 52367.4,
|
|
126
|
+
"cache_weighted_input_25": 61353,
|
|
127
|
+
"prompt_growth": 33594,
|
|
128
|
+
"antipatterns": 1,
|
|
129
|
+
"issues": 11,
|
|
130
|
+
"issue_types": [
|
|
131
|
+
"cache",
|
|
132
|
+
"cache_break",
|
|
133
|
+
"broad_tool_result",
|
|
134
|
+
"service_tier",
|
|
135
|
+
"missed_parallelism",
|
|
136
|
+
"tool_churn_cluster"
|
|
137
|
+
],
|
|
138
|
+
"read_fragmentation_paths": [],
|
|
139
|
+
"grep_sweep_count": 0
|
|
140
|
+
}
|
|
141
|
+
},
|
|
142
|
+
{
|
|
143
|
+
"id": "r4-debug-forwarding-gap#2",
|
|
144
|
+
"agent": "reviewer",
|
|
145
|
+
"ok": true,
|
|
146
|
+
"ms": 97200,
|
|
147
|
+
"sessionId": "sess_43096_1783040996270_1783040996507_9f3169891fe62b67f6f8e76b9b17a9af",
|
|
148
|
+
"output": "sessionId: sess_43096_1783040996270_1783040996507_9f3169891fe62b67f6f8e76b9b17a9af\nTraced activation → first forward path; main reliability risk is cursor initialization, not `fs.watch` itself.\n\n1. **Highest impact: existing transcript can be skipped.** On activation restore, `bindPersistedTranscriptIfAny()` calls rebind with `catchUpFromPersisted` (`src/runtime/channels/index.mjs:625-629`); if the discovered transcript already exists but no matching persisted cursor exists, `setContext()` initializes `lastFileSize/readFileSize` to current EOF (`src/runtime/channels/lib/output-forwarder.mjs:117-127`). Backlog catch-up: **No**; bytes already present are treated as baseline and will not be forwarded.\n\n2. **Missing transcript file is mostly recovered, but only within the re-arm window.** A pending path is bound even before the `.jsonl` exists (`src/runtime/channels/index.mjs:469-498`); `fs.watch()` fails/ closes on missing files (`src/runtime/channels/lib/output-forwarder.mjs:647-670`), so a 250ms poll installs the watch and calls `forwardNewText()` when the file appears (`src/runtime/channels/index.mjs:357-389`). Backlog catch-up: **Yes within 60s**; after `PENDING_REARM_MAX_MS`, it is delayed indefinitely until another rebind/forward attempt.\n\n3. **Pre-connect ownership gate delays, not drops.** `forwardNewText()` fails closed while `bridgeRuntimeConnected && currentOwnerState().owned` is false (`src/runtime/channels/index.mjs:316`, `src/runtime/channels/lib/output-forwarder.mjs:36-41`, `src/runtime/channels/lib/output-forwarder.mjs:351-354`); after backend connect, the owner path explicitly calls `forwardNewText()` or re-arms the missing transcript (`src/runtime/channels/index.mjs:776-813`). Backlog catch-up: **Yes**, assuming the cursor was not already advanced to EOF by gap #1.\n\n4. **No channel binding means no forwarding target.** Restore can only bind after it finds/restores a channel, falling back to main only when configured (`src/runtime/channels/index.mjs:577-625`); otherwise `forwardNewText()` exits on empty `channelId` (`src/runtime/channels/lib/output-forwarder.mjs:351-354`). Backlog catch-up: **Conditional**; later inbound binding may recover pending files, but an already-existing transcript can still be skipped by gap #1.\n\n5. **First inbound during partial ownership is silently ignored.** `backend.onMessage` returns if runtime is not connected/owned and only kicks ownership refresh (`src/runtime/channels/index.mjs:1466-1472`), so no bind or parent notification occurs. Backlog catch-up: **No for that inbound event**; any assistant output depends on a later inbound or existing transcript recovery.\n\nVerdict: the not-yet-created transcript case is actively covered, but an already-created transcript with no matching persisted cursor can still permanently skip early assistant output.",
|
|
149
|
+
"card": {
|
|
150
|
+
"session": "sess_43096_1783040996270_1783040996507_9f3169891fe62b67f6f8e76b9b17a9af",
|
|
151
|
+
"provider": "openai-oauth",
|
|
152
|
+
"model": "gpt-5.5",
|
|
153
|
+
"wall_ms": 86682,
|
|
154
|
+
"turns": 6,
|
|
155
|
+
"tool_calls": 7,
|
|
156
|
+
"tools_per_turn": 1.2,
|
|
157
|
+
"total_tool_ms": 622,
|
|
158
|
+
"llm_stream_ms": 86118,
|
|
159
|
+
"cache_ratio": 0.2864668514469675,
|
|
160
|
+
"cached_tokens": 33280,
|
|
161
|
+
"prompt_tokens": 116174,
|
|
162
|
+
"uncached_tokens": 82894,
|
|
163
|
+
"output_tokens": 8288,
|
|
164
|
+
"cache_weighted_input_10": 86222,
|
|
165
|
+
"cache_weighted_input_25": 91214,
|
|
166
|
+
"prompt_growth": 35643,
|
|
167
|
+
"antipatterns": 1,
|
|
168
|
+
"issues": 9,
|
|
169
|
+
"issue_types": [
|
|
170
|
+
"cache",
|
|
171
|
+
"cache_break",
|
|
172
|
+
"service_tier",
|
|
173
|
+
"tool_churn_cluster"
|
|
174
|
+
],
|
|
175
|
+
"read_fragmentation_paths": [],
|
|
176
|
+
"grep_sweep_count": 0
|
|
177
|
+
}
|
|
178
|
+
},
|
|
179
|
+
{
|
|
180
|
+
"id": "r4-impl-usage-summary#2",
|
|
181
|
+
"agent": "worker",
|
|
182
|
+
"ok": true,
|
|
183
|
+
"ms": 18309,
|
|
184
|
+
"sessionId": "sess_34252_1783040998311_1783040998555_4239e25b6ce06b31759623c29219fa89",
|
|
185
|
+
"output": "sessionId: sess_34252_1783040998311_1783040998555_4239e25b6ce06b31759623c29219fa89\n재영님, 구현 전 계획입니다. 이대로 진행할까요?\n\n- **스크립트 추가**: `scripts/usage-today.mjs`를 만들고 `scripts/session-bench.mjs`의 arg parsing 스타일을 맞춰 `MIXDOG_DATA_DIR`와 기본 `~/.mixdog/data`를 처리하겠습니다.\n- **집계 기준**: `agent-trace.jsonl`에서 로컬 자정 이후 usage row만 골라 모델별 calls, input/cached/output tokens, costUsd와 grand total을 출력하겠습니다.\n- **검증**: `node --check scripts/usage-today.mjs` 실행 후 `npm run usage:today`를 한 번 실행해 결과를 확인하겠습니다.",
|
|
186
|
+
"card": {
|
|
187
|
+
"session": "sess_34252_1783040998311_1783040998555_4239e25b6ce06b31759623c29219fa89",
|
|
188
|
+
"provider": "openai-oauth",
|
|
189
|
+
"model": "gpt-5.5",
|
|
190
|
+
"wall_ms": 7786,
|
|
191
|
+
"turns": 1,
|
|
192
|
+
"tool_calls": 0,
|
|
193
|
+
"tools_per_turn": 0,
|
|
194
|
+
"total_tool_ms": 0,
|
|
195
|
+
"llm_stream_ms": 7525,
|
|
196
|
+
"cache_ratio": 0.8839015968925334,
|
|
197
|
+
"cached_tokens": 4096,
|
|
198
|
+
"prompt_tokens": 4634,
|
|
199
|
+
"uncached_tokens": 538,
|
|
200
|
+
"output_tokens": 582,
|
|
201
|
+
"cache_weighted_input_10": 947.6,
|
|
202
|
+
"cache_weighted_input_25": 1562,
|
|
203
|
+
"prompt_growth": 0,
|
|
204
|
+
"antipatterns": 0,
|
|
205
|
+
"issues": 3,
|
|
206
|
+
"issue_types": [
|
|
207
|
+
"cache",
|
|
208
|
+
"cache_break",
|
|
209
|
+
"service_tier"
|
|
210
|
+
],
|
|
211
|
+
"read_fragmentation_paths": [],
|
|
212
|
+
"grep_sweep_count": 0
|
|
213
|
+
}
|
|
214
|
+
},
|
|
215
|
+
{
|
|
216
|
+
"id": "r4-explain-compact-engine#2",
|
|
217
|
+
"agent": "explore",
|
|
218
|
+
"ok": true,
|
|
219
|
+
"ms": 78404,
|
|
220
|
+
"sessionId": "sess_47892_1783041016626_1783041016852_becf83de2ea689e9c275231762292b57",
|
|
221
|
+
"output": "sessionId: sess_47892_1783041016626_1783041016852_becf83de2ea689e9c275231762292b57\nDone — concise compaction architecture map, anchored to source lines.\n\n- **Public entry points:** `semanticCompactMessages` and `recallFastTrackCompactMessages` live in `engine.mjs` and are re-exported by `compact.mjs`; loop auto-compaction calls semantic at `loop.mjs:441` and recall via `runRecallFastTrackCompact` at `loop.mjs:416`, while manual/session compaction calls recall/semantic at `compaction-runner.mjs:210` and `compaction-runner.mjs:288`. (`engine.mjs:278`, `engine.mjs:445`, `compact.mjs:52`)\n\n- **Manual callers:** `compactSessionMessages` forces `runSessionCompaction(... mode:'manual', force:true ...)`, and clear-before-clear can also force compaction before retaining summaries. (`manager.mjs:1841`, `manager.mjs:1849`, `manager.mjs:1943`, `manager.mjs:1950`)\n\n- **Auto trigger setup:** the loop resolves per-session compaction policy before each send; policy requires auto enabled, derives boundary/trigger/reserve/type, and selects semantic vs recall-fasttrack. (`loop.mjs:329`, `loop/compact-policy.mjs:89`, `loop/compact-policy.mjs:92`, `loop/compact-policy.mjs:117`, `loop/compact-policy.mjs:123`, `loop/compact-policy.mjs:139`)\n\n- **When it fires:** pre-send compaction fires when `shouldCompactForSession` sees auto+boundary and either reactive overflow, unknown token estimate, or `messageTokens + reserve >= trigger`. (`loop.mjs:351`, `loop.mjs:353`, `loop/compact-policy.mjs:170`, `loop/compact-policy.mjs:172`, `loop/compact-policy.mjs:173`, `loop/compact-policy.mjs:174`)\n\n- **Reactive path:** if provider send fails with context overflow and auto compact is available, the loop marks a one-shot reactive retry and reruns the pre-send compact path; after one retry it surfaces `agentContextOverflowError`. (`loop.mjs:990`, `loop.mjs:996`, `loop.mjs:1002`, `loop.mjs:1010`, `loop.mjs:1018`)\n\n- **Semantic no-op gate:** semantic compaction first sanitizes and estimates; if transcript already fits and not forced, it returns unchanged with `semantic:false`. (`engine.mjs:284`, `engine.mjs:289`, `engine.mjs:290`, `engine.mjs:293`)\n\n- **Semantic window split:** semantic compaction redacts first, then `selectCompactionWindow` splits protected/system context, live messages, previous summary, compactable head, and preserved tail. (`engine.mjs:312`, `engine.mjs:314`, `engine.mjs:100`, `engine.mjs:110`, `engine.mjs:235`, `engine.mjs:244`)\n\n- **Semantic tail policy:** with user turns, it keeps up to `tailTurns` recent turns within `preserveRecentBudget`, splitting the newest turn suffix if needed; with no user turns, it cuts only at non-`tool` boundaries so tool results do not become orphaned. (`engine.mjs:237`, `engine.mjs:238`, `engine.mjs:240`, `engine.mjs:134`, `engine.mjs:151`, `engine.mjs:121`, `engine.mjs:193`)\n\n- **Semantic output assembly:** mandatory preserved context is `system + tail`; budget is raised if mandatory context plus summary room cannot fit, then a schema-enforced summary replaces the head and final result is `system + summary + tail`. (`engine.mjs:319`, `engine.mjs:328`, `engine.mjs:367`, `engine.mjs:376`, `engine.mjs:384`, `engine.mjs:392`)\n\n- **Recall-fasttrack no-op and tail:** recall-fasttrack has the same fits-budget no-op, then redacts and preserves the newest structured turns, capped by max users/token cap, dropping oldest turns or truncating oldest surviving content if needed. (`engine.mjs:625`, `engine.mjs:627`, `engine.mjs:644`, `engine.mjs:593`, `engine.mjs:601`, `engine.mjs:602`, `engine.mjs:610`)\n\n- **Recall summary source:** loop/session recall pipelines ingest/dump memory chunks, combine `session_id`, cycle1 status, and recall text, then call `recallFastTrackCompactMessages` with forced compaction and recall caps. (`loop/recall-fasttrack.mjs:148`, `loop/recall-fasttrack.mjs:161`, `compaction-runner.mjs:59`, `compaction-runner.mjs:74`, `compaction-runner.mjs:91`, `compaction-runner.mjs:129`)\n\n- **Redaction hook:** compaction redacts sensitive tool-call argument values before window selection so preserved `system/tail` are measured and emitted redacted; the redactor preserves structure/order and only changes sensitive values/raw secret substrings. (`engine.mjs:306`, `engine.mjs:312`, `engine.mjs:389`, `text-utils.mjs:217`, `text-utils.mjs:230`, `text-utils.mjs:323`)\n\n- **Hard engine failures:** semantic throws for missing provider, empty live window, no compactable head without prior summary, prompt fit failure, empty provider summary, summary fit failure, or final budget overflow. (`engine.mjs:279`, `engine.mjs:254`, `engine.mjs:315`, `engine.mjs:335`, `engine.mjs:372`, `engine.mjs:385`, `engine.mjs:395`)\n\n- **Recall engine failures:** recall-fasttrack throws when there is no compactable prior history and no recall/prior allowance, when recall text is empty, when summary cannot fit, or when final output exceeds budget. (`engine.mjs:653`, `engine.mjs:666`, `engine.mjs:691`, `engine.mjs:698`)\n\n- **Fallbacks:** loop semantic failures can recover via unanchored tool-output prune, but recall-fasttrack failures skip that prune; session/manual recall failures try semantic fallback first, then non-recall failures may use the same prune safety net. (`loop.mjs:501`, `loop.mjs:517`, `compaction-runner.mjs:237`, `compaction-runner.mjs:245`, `compaction-runner.mjs:322`, `compaction-runner.mjs:327`)\n\n- **Failure persistence:** if no fallback produces messages, session compaction records `manual_failed`/`post_turn_failed` with semantic/recall errors and returns `changed:false`; stale in-flight `compacting` state is normalized to `interrupted` on resume. (`compaction-runner.mjs:348`, `compaction-runner.mjs:358`, `compaction-runner.mjs:370`, `compaction-runner.mjs:375`, `compaction-runner.mjs:36`, `manager.mjs:1774`)",
|
|
222
|
+
"card": {
|
|
223
|
+
"session": "sess_47892_1783041016626_1783041016852_becf83de2ea689e9c275231762292b57",
|
|
224
|
+
"provider": "openai-oauth",
|
|
225
|
+
"model": "gpt-5.5",
|
|
226
|
+
"wall_ms": 67881,
|
|
227
|
+
"turns": 8,
|
|
228
|
+
"tool_calls": 25,
|
|
229
|
+
"tools_per_turn": 3.1,
|
|
230
|
+
"total_tool_ms": 1291,
|
|
231
|
+
"llm_stream_ms": 66922,
|
|
232
|
+
"cache_ratio": 0.7669665872282476,
|
|
233
|
+
"cached_tokens": 157696,
|
|
234
|
+
"prompt_tokens": 205610,
|
|
235
|
+
"uncached_tokens": 47914,
|
|
236
|
+
"output_tokens": 4409,
|
|
237
|
+
"cache_weighted_input_10": 63683.6,
|
|
238
|
+
"cache_weighted_input_25": 87338,
|
|
239
|
+
"prompt_growth": 40862,
|
|
240
|
+
"antipatterns": 2,
|
|
241
|
+
"issues": 13,
|
|
242
|
+
"issue_types": [
|
|
243
|
+
"cache",
|
|
244
|
+
"cache_break",
|
|
245
|
+
"tool_error",
|
|
246
|
+
"service_tier",
|
|
247
|
+
"read_fragmentation"
|
|
248
|
+
],
|
|
249
|
+
"read_fragmentation_paths": [
|
|
250
|
+
"src/runtime/agent/orchestrator/session/manager/compaction-runner.mjs",
|
|
251
|
+
"src/runtime/agent/orchestrator/session/loop.mjs"
|
|
252
|
+
],
|
|
253
|
+
"grep_sweep_count": 0
|
|
254
|
+
}
|
|
255
|
+
},
|
|
256
|
+
{
|
|
257
|
+
"id": "r4-debug-forwarding-gap#3",
|
|
258
|
+
"agent": "reviewer",
|
|
259
|
+
"ok": true,
|
|
260
|
+
"ms": 110443,
|
|
261
|
+
"sessionId": "sess_60424_1783041088316_1783041088539_9dd11664b2a5044bc48546dfa5edab66",
|
|
262
|
+
"output": "sessionId: sess_60424_1783041088316_1783041088539_9dd11664b2a5044bc48546dfa5edab66\nTrace: `start()` marks the bridge active and writes `bridge-state.json` before Discord connect/binding completes (`src/runtime/channels/index.mjs:1734-1747`), then `startOwnedRuntime()` restores transcript binding, connects, flips ownership, and finally calls `forwardNewText()` or re-arms pending transcripts (`src/runtime/channels/index.mjs:758-812`).\n\nFindings, ordered by impact:\n\n1. **Existing transcript + no matching persisted cursor can silently skip early output** — `setContext()` sets the read cursor to current EOF unless `replayFromStart` or same-transcript `catchUpFromPersisted` applies (`src/runtime/channels/lib/output-forwarder.mjs:111-129`); if activation discovers an already-written transcript without a matching persisted path, post-connect catch-up sees no backlog. **Backlog recovery: No.**\n\n2. **Pending transcript file creation is delayed but usually recovered** — `fs.watch()` cannot attach to a missing transcript and `startWatch()` just closes on failure (`src/runtime/channels/lib/output-forwarder.mjs:646-670`), but `schedulePendingTranscriptRearm()` polls and forwards backlog when the file appears (`src/runtime/channels/index.mjs:357-382`, `486-498`). **Backlog recovery: Yes, unless creation misses the 60s re-arm window.**\n\n3. **Pre-connect ownership probe suppresses forwarding, but does not consume bytes** — `_isOwner()` fails closed until `bridgeRuntimeConnected && currentOwnerState().owned` (`src/runtime/channels/lib/output-forwarder.mjs:36-42`, `src/runtime/channels/index.mjs:316`), so early watch flushes return before reading (`src/runtime/channels/lib/output-forwarder.mjs:351-354`, `490-497`). **Backlog recovery: Yes via post-connect `forwardNewText()`/re-arm (`src/runtime/channels/index.mjs:801-812`).**\n\n4. **A pre-connect re-arm tick can self-cancel before ownership is live** — pending re-arm exits when `!bridgeRuntimeConnected` (`src/runtime/channels/index.mjs:369-375`), but start-up explicitly re-arms after connect if the transcript still does not exist (`src/runtime/channels/index.mjs:803-807`). **Backlog recovery: Yes in normal start-up; delayed until after connect.**\n\n5. **Binding can temporarily point at a stale/latest transcript** — fallback discovery may choose latest mtime when no confident current transcript exists (`src/runtime/channels/index.mjs:1542-1546`, `src/runtime/channels/lib/transcript-discovery.mjs:188-194`); inbound has a 500ms steal poll and rebind path to recover the self transcript (`src/runtime/channels/index.mjs:1571-1616`). **Backlog recovery: Partial; recovered if self binding appears during poll/rebind, otherwise wrong-session tailing can miss real output.**\n\n6. **Bytes written between stat and watch install are covered** — after `fs.watch()` succeeds, `startWatch()` immediately schedules a flush to read bytes written after the initial cursor stat (`src/runtime/channels/lib/output-forwarder.mjs:653-667`). **Backlog recovery: Yes.**\n\n7. **Incomplete JSONL lines are delayed, not dropped** — `readNewLines()` only advances to the last newline and re-reads trailing partial data (`src/runtime/channels/lib/output-forwarder.mjs:172-180`). **Backlog recovery: Yes once the writer completes the line and another flush occurs.**\n\nVerdict: the bridge mostly delays first forwarding safely, but an already-existing transcript without a matching persisted cursor is a real silent-drop gap.",
|
|
263
|
+
"card": {
|
|
264
|
+
"session": "sess_60424_1783041088316_1783041088539_9dd11664b2a5044bc48546dfa5edab66",
|
|
265
|
+
"provider": "openai-oauth",
|
|
266
|
+
"model": "gpt-5.5",
|
|
267
|
+
"wall_ms": 99925,
|
|
268
|
+
"turns": 9,
|
|
269
|
+
"tool_calls": 14,
|
|
270
|
+
"tools_per_turn": 1.6,
|
|
271
|
+
"total_tool_ms": 703,
|
|
272
|
+
"llm_stream_ms": 98926,
|
|
273
|
+
"cache_ratio": 0.6735326528355557,
|
|
274
|
+
"cached_tokens": 176640,
|
|
275
|
+
"prompt_tokens": 262259,
|
|
276
|
+
"uncached_tokens": 85619,
|
|
277
|
+
"output_tokens": 7808,
|
|
278
|
+
"cache_weighted_input_10": 103283,
|
|
279
|
+
"cache_weighted_input_25": 129779,
|
|
280
|
+
"prompt_growth": 51020,
|
|
281
|
+
"antipatterns": 2,
|
|
282
|
+
"issues": 14,
|
|
283
|
+
"issue_types": [
|
|
284
|
+
"cache",
|
|
285
|
+
"cache_break",
|
|
286
|
+
"readonly_stall",
|
|
287
|
+
"service_tier",
|
|
288
|
+
"read_fragmentation",
|
|
289
|
+
"tool_churn_cluster"
|
|
290
|
+
],
|
|
291
|
+
"read_fragmentation_paths": [
|
|
292
|
+
"src/runtime/channels/index.mjs"
|
|
293
|
+
],
|
|
294
|
+
"grep_sweep_count": 0
|
|
295
|
+
}
|
|
296
|
+
},
|
|
297
|
+
{
|
|
298
|
+
"id": "r4-impl-usage-summary#3",
|
|
299
|
+
"agent": "worker",
|
|
300
|
+
"ok": true,
|
|
301
|
+
"ms": 98408,
|
|
302
|
+
"sessionId": "sess_12676_1783041093473_1783041093707_779e3caee3f5f6c650870d1c9cb29e47",
|
|
303
|
+
"output": "sessionId: sess_12676_1783041093473_1783041093707_779e3caee3f5f6c650870d1c9cb29e47\n요청하신 기능을 바로 적용하고 검증까지 진행하겠습니다.기능 파일과 npm script가 이미 존재해 현재 차이를 확인한 뒤 필요한 보정만 하겠습니다.현재 작업트리 기준 diff와 동작 검증을 확인하겠습니다.검증 명령을 실행해 현재 구현이 깨끗한지 확인하겠습니다.기본 경로가 요청 범위보다 넓게 잡혀 있어 `MIXDOG_DATA_DIR` 또는 `~/.mixdog/data`만 보도록 보정하겠습니다.패치 도구가 환경 오류로 실패해 동일 변경을 PowerShell로 적용하겠습니다.문자열 이스케이프 문제만 발생해 파일은 아직 변경되지 않았습니다. 안전하게 다시 적용하겠습니다.이번에는 줄 단위로 필요한 부분만 치환합니다.보정 후 구문 검사와 실행을 다시 확인하겠습니다.요청한 기본 경로로 맞춘 뒤 최종 검증을 실행합니다.완료했습니다. `usage:today` npm script와 `scripts/usage-today.mjs` 구현이 준비됐고 검증도 통과했습니다.\n\n- **Diff 요약**: `package.json`에 `\"usage:today\": \"node scripts/usage-today.mjs\"` 추가, `scripts/usage-today.mjs` 신규 추가.\n\n- **동작**: `MIXDOG_DATA_DIR`가 있으면 그 아래 `history/agent-trace.jsonl`, 없으면 `~/.mixdog/data/history/agent-trace.jsonl`을 읽고 local midnight 이후 `kind: \"usage\"` 행을 모델별로 집계합니다.\n\n- **출력**: 모델별 `calls`, `input`, `cached`, `output`, `costUsd`와 `GRAND TOTAL` 라인을 표로 출력합니다.\n\n- **검증**: `node --check scripts/usage-today.mjs` 통과, `npm run usage:today` 실행 완료. 현재 환경에서는 `MIXDOG_DATA_DIR` 때문에 `C:\\Users\\tempe\\.mixdog\\bench-data\\history\\agent-trace.jsonl`을 사용했습니다.",
|
|
304
|
+
"card": {
|
|
305
|
+
"session": "sess_12676_1783041093473_1783041093707_779e3caee3f5f6c650870d1c9cb29e47",
|
|
306
|
+
"provider": "openai-oauth",
|
|
307
|
+
"model": "gpt-5.5",
|
|
308
|
+
"wall_ms": 87889,
|
|
309
|
+
"turns": 12,
|
|
310
|
+
"tool_calls": 18,
|
|
311
|
+
"tools_per_turn": 1.5,
|
|
312
|
+
"total_tool_ms": 3924,
|
|
313
|
+
"llm_stream_ms": 83770,
|
|
314
|
+
"cache_ratio": 0.8757537605195149,
|
|
315
|
+
"cached_tokens": 211456,
|
|
316
|
+
"prompt_tokens": 241456,
|
|
317
|
+
"uncached_tokens": 30000,
|
|
318
|
+
"output_tokens": 7233,
|
|
319
|
+
"cache_weighted_input_10": 51145.600000000006,
|
|
320
|
+
"cache_weighted_input_25": 82864,
|
|
321
|
+
"prompt_growth": 24441,
|
|
322
|
+
"antipatterns": 1,
|
|
323
|
+
"issues": 15,
|
|
324
|
+
"issue_types": [
|
|
325
|
+
"cache",
|
|
326
|
+
"cache_break",
|
|
327
|
+
"tool_error",
|
|
328
|
+
"service_tier",
|
|
329
|
+
"missed_parallelism",
|
|
330
|
+
"tool_churn_cluster"
|
|
331
|
+
],
|
|
332
|
+
"read_fragmentation_paths": [],
|
|
333
|
+
"grep_sweep_count": 0
|
|
334
|
+
}
|
|
335
|
+
},
|
|
336
|
+
{
|
|
337
|
+
"id": "r4-explain-compact-engine#3",
|
|
338
|
+
"agent": "explore",
|
|
339
|
+
"ok": true,
|
|
340
|
+
"ms": 106835,
|
|
341
|
+
"sessionId": "sess_41124_1783041095028_1783041095274_e8bb99510c7c89e52275e67736e3d529",
|
|
342
|
+
"output": "sessionId: sess_41124_1783041095028_1783041095274_e8bb99510c7c89e52275e67736e3d529\n필요한 호출부와 구현부를 한 번에 확인해 핵심 흐름만 추리겠습니다.Compaction subsystem brief:\n\n- **Public entry points:** `semanticCompactMessages` and `recallFastTrackCompactMessages` live in `src/runtime/agent/orchestrator/session/compact/engine.mjs:278` and `:445`, and are re-exported through `src/runtime/agent/orchestrator/session/compact.mjs:52-55`.\n\n- **Loop caller:** the agent loop imports semantic compaction via the facade and recall-fasttrack runner separately at `src/runtime/agent/orchestrator/session/loop.mjs:10-16` and `:32`.\n\n- **Manual/auto-clear caller:** `manager.mjs` calls `runSessionCompaction` for manual compaction at `src/runtime/agent/orchestrator/session/manager.mjs:1943-1957`, and before auto-clear at `:1841-1849`.\n\n- **Session runner caller:** `runSessionCompaction` dispatches to recall-fasttrack or semantic based on compact type at `src/runtime/agent/orchestrator/session/manager/compaction-runner.mjs:207-318`.\n\n- **Policy resolution:** loop compaction policy resolves auto flag, boundary, trigger, reserve, type, keep/tail budgets at `src/runtime/agent/orchestrator/session/loop/compact-policy.mjs:89-148`.\n\n- **When auto fires:** loop estimates transcript tokens, honors one-shot reactive overflow, and calls `shouldCompactForSession` before send at `src/runtime/agent/orchestrator/session/loop.mjs:351-364`.\n\n- **Fire condition:** `shouldCompactForSession` skips disabled/no-boundary policies, fires on reactive, fires when estimate is unknown, or when transcript+reserve reaches trigger at `src/runtime/agent/orchestrator/session/loop/compact-policy.mjs:170-174`.\n\n- **Target budget:** loop compacts toward a bounded target plus reserve, capped by boundary at `src/runtime/agent/orchestrator/session/loop/compact-policy.mjs:163-169`.\n\n- **Manual runner threshold:** `runSessionCompaction` skips auto-disabled, tiny non-forced histories, missing boundary, or below-trigger pressure before compacting at `src/runtime/agent/orchestrator/session/manager/compaction-runner.mjs:143-199`.\n\n- **Semantic no-op:** semantic compaction returns sanitized messages unchanged when already within effective budget and not forced at `src/runtime/agent/orchestrator/session/compact/engine.mjs:278-305`.\n\n- **Recall no-op:** recall-fasttrack has the same fit-budget no-op path at `src/runtime/agent/orchestrator/session/compact/engine.mjs:622-643`.\n\n- **Semantic window prep:** semantic compaction sanitizes tool pairs, splits protected system/reminder prefix from conversation, finds the latest prior summary, and removes summaries from live history at `src/runtime/agent/orchestrator/session/compact/engine.mjs:100-111`.\n\n- **Semantic tail budget:** preserved recent context uses `preserveRecentBudget`, bounded by explicit keep/preserve settings or defaults, at `src/runtime/agent/orchestrator/session/compact/budget.mjs:274-288`.\n\n- **Semantic tail choice:** if live history has user turns, it keeps up to recent `tailTurns` from newest backward and may split an oversized newest turn at `src/runtime/agent/orchestrator/session/compact/engine.mjs:134-185`.\n\n- **No-user semantic tail:** if there are no user turns, it chooses valid non-tool cut points so assistant/tool-only sessions still compact without orphaning tool results at `src/runtime/agent/orchestrator/session/compact/engine.mjs:193-232`.\n\n- **Tool-pair boundary safety:** selected semantic tail is re-sanitized and valid cuts never start on `tool`, keeping assistant tool calls and tool results on the same side at `src/runtime/agent/orchestrator/session/compact/engine.mjs:244-250`.\n\n- **Recall preserved tail:** recall-fasttrack keeps the newest user-anchored turns, drops oldest kept turns if over cap, or truncates the newest turn to fit at `src/runtime/agent/orchestrator/session/compact/engine.mjs:593-619`.\n\n- **Recall no-user tail:** recall explicitly allows no-user recent assistant/tool structure and computes head before that tail at `src/runtime/agent/orchestrator/session/compact/engine.mjs:613-619`.\n\n- **Redaction hook point:** both semantic and recall redact tool-call argument values after base sanitization and before window/tail selection at `src/runtime/agent/orchestrator/session/compact/engine.mjs:306-314` and `:644-651`.\n\n- **Redaction behavior:** verbatim-tail redaction preserves message/tool-call shape while replacing sensitive keys and raw secret pairs at `src/runtime/agent/orchestrator/session/compact/text-utils.mjs:217-326`.\n\n- **Prompt-side redaction:** summarized head metadata also redacts tool-call args through `normalizeToolArgValue` / `stableToolArgJson` at `src/runtime/agent/orchestrator/session/compact/text-utils.mjs:121-159`.\n\n- **Preserved facts redaction:** extracted preserved facts redact raw secret strings before being included in the semantic summary message at `src/runtime/agent/orchestrator/session/compact/budget.mjs:119-163`.\n\n- **Semantic generation path:** semantic builds a fitted prompt, calls `provider.send`, repairs malformed summary schema, fits the summary message, then emits `system + summary + tail` at `src/runtime/agent/orchestrator/session/compact/engine.mjs:333-397`.\n\n- **Recall generation-free path:** recall builds a synthetic recall summary from memory dump/prior summary, caps recall room separately, and emits `system + summary + tail` at `src/runtime/agent/orchestrator/session/compact/engine.mjs:666-700`.\n\n- **Recall pipeline:** loop recall-fasttrack ingests current session into memory, dumps roots, drains raw rows through cycle1 unless recap is disabled/already hydrated, then injects capped recall text at `src/runtime/agent/orchestrator/session/loop/recall-fasttrack.mjs:25-182`.\n\n- **Semantic failures:** semantic throws on missing provider, empty live window/no compactable prior, unfit prompt, empty provider summary, unfit summary, or final budget overflow at `src/runtime/agent/orchestrator/session/compact/engine.mjs:279-280`, `:254-255`, `:315-317`, `:333-337`, `:371-397`.\n\n- **Recall failures:** recall throws on no compactable prior without recall/prior, empty recall when disallowed, unfit summary, or final budget overflow at `src/runtime/agent/orchestrator/session/compact/engine.mjs:653-668` and `:691-700`.\n\n- **Loop fallback:** non-recall compact failures try `pruneToolOutputsUnanchored` once and accept only if changed and within effective budget at `src/runtime/agent/orchestrator/session/loop.mjs:500-537`.\n\n- **Loop hard failure:** if fallback cannot recover, loop records `overflow_failed`, emits trace/event, and throws `agentContextOverflowError` at `src/runtime/agent/orchestrator/session/loop.mjs:546-626`.\n\n- **Runner fallback:** manual/auto-clear recall-fasttrack failure may fall back to semantic when enabled and provider is available at `src/runtime/agent/orchestrator/session/manager/compaction-runner.mjs:231-278`.\n\n- **Runner prune safety net:** failed non-recall compaction can fall back to unanchored prune; unrecovered failures persist `manual_failed` or `post_turn_failed` metadata at `src/runtime/agent/orchestrator/session/manager/compaction-runner.mjs:322-380`.\n\n- **Successful persistence:** successful runner compaction replaces `session.messages`, clears `providerState`, records stage `manual` or `post_turn`, and updates type/error/usage telemetry at `src/runtime/agent/orchestrator/session/manager/compaction-runner.mjs:399-470`.",
|
|
343
|
+
"card": {
|
|
344
|
+
"session": "sess_41124_1783041095028_1783041095274_e8bb99510c7c89e52275e67736e3d529",
|
|
345
|
+
"provider": "openai-oauth",
|
|
346
|
+
"model": "gpt-5.5",
|
|
347
|
+
"wall_ms": 96306,
|
|
348
|
+
"turns": 11,
|
|
349
|
+
"tool_calls": 16,
|
|
350
|
+
"tools_per_turn": 1.5,
|
|
351
|
+
"total_tool_ms": 1330,
|
|
352
|
+
"llm_stream_ms": 94689,
|
|
353
|
+
"cache_ratio": 0.7696438588942688,
|
|
354
|
+
"cached_tokens": 282624,
|
|
355
|
+
"prompt_tokens": 367214,
|
|
356
|
+
"uncached_tokens": 84590,
|
|
357
|
+
"output_tokens": 7011,
|
|
358
|
+
"cache_weighted_input_10": 112852.4,
|
|
359
|
+
"cache_weighted_input_25": 155246,
|
|
360
|
+
"prompt_growth": 70437,
|
|
361
|
+
"antipatterns": 1,
|
|
362
|
+
"issues": 18,
|
|
363
|
+
"issue_types": [
|
|
364
|
+
"cache",
|
|
365
|
+
"cache_break",
|
|
366
|
+
"readonly_stall",
|
|
367
|
+
"broad_tool_result",
|
|
368
|
+
"service_tier",
|
|
369
|
+
"missed_parallelism",
|
|
370
|
+
"tool_churn_cluster"
|
|
371
|
+
],
|
|
372
|
+
"read_fragmentation_paths": [],
|
|
373
|
+
"grep_sweep_count": 0
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
],
|
|
377
|
+
"task_complete": true,
|
|
378
|
+
"task_errors": [],
|
|
379
|
+
"score_complete": true,
|
|
380
|
+
"score_errors": [],
|
|
381
|
+
"group": {
|
|
382
|
+
"n": 9,
|
|
383
|
+
"wall_ms": 78146.6,
|
|
384
|
+
"turns": 7.7,
|
|
385
|
+
"tool_calls": 12.1,
|
|
386
|
+
"tools_per_turn": 1.4,
|
|
387
|
+
"total_tool_ms": 1321.7,
|
|
388
|
+
"llm_stream_ms": 76767.6,
|
|
389
|
+
"cache_ratio": 0.7,
|
|
390
|
+
"cached_tokens": 134371.6,
|
|
391
|
+
"prompt_tokens": 184831.6,
|
|
392
|
+
"uncached_tokens": 50460,
|
|
393
|
+
"output_tokens": 6652.3,
|
|
394
|
+
"cache_weighted_input_10": 63897.2,
|
|
395
|
+
"cache_weighted_input_25": 84052.9,
|
|
396
|
+
"prompt_growth": 35825,
|
|
397
|
+
"antipatterns": 1.1,
|
|
398
|
+
"issues": 11.8,
|
|
399
|
+
"grep_sweep_count": 0
|
|
400
|
+
},
|
|
401
|
+
"cards": [
|
|
402
|
+
{
|
|
403
|
+
"session": "sess_23136_1783040931470_1783040931720_7d363c6e12d9a04c716bcbd966743b50",
|
|
404
|
+
"provider": "openai-oauth",
|
|
405
|
+
"model": "gpt-5.5",
|
|
406
|
+
"wall_ms": 146312,
|
|
407
|
+
"turns": 8,
|
|
408
|
+
"tool_calls": 12,
|
|
409
|
+
"tools_per_turn": 1.5,
|
|
410
|
+
"total_tool_ms": 1050,
|
|
411
|
+
"llm_stream_ms": 145445,
|
|
412
|
+
"cache_ratio": 0.7823874601236659,
|
|
413
|
+
"cached_tokens": 198656,
|
|
414
|
+
"prompt_tokens": 253910,
|
|
415
|
+
"uncached_tokens": 55254,
|
|
416
|
+
"output_tokens": 16037,
|
|
417
|
+
"cache_weighted_input_10": 75119.6,
|
|
418
|
+
"cache_weighted_input_25": 104918,
|
|
419
|
+
"prompt_growth": 52206,
|
|
420
|
+
"antipatterns": 1,
|
|
421
|
+
"issues": 11,
|
|
422
|
+
"issue_types": [
|
|
423
|
+
"cache",
|
|
424
|
+
"cache_break",
|
|
425
|
+
"service_tier",
|
|
426
|
+
"tool_churn_cluster"
|
|
427
|
+
],
|
|
428
|
+
"read_fragmentation_paths": [],
|
|
429
|
+
"grep_sweep_count": 0
|
|
430
|
+
},
|
|
431
|
+
{
|
|
432
|
+
"session": "sess_47452_1783040931481_1783040931729_9ff8bd3a14e033382782889926203837",
|
|
433
|
+
"provider": "openai-oauth",
|
|
434
|
+
"model": "gpt-5.5",
|
|
435
|
+
"wall_ms": 56300,
|
|
436
|
+
"turns": 8,
|
|
437
|
+
"tool_calls": 11,
|
|
438
|
+
"tools_per_turn": 1.4,
|
|
439
|
+
"total_tool_ms": 2145,
|
|
440
|
+
"llm_stream_ms": 54088,
|
|
441
|
+
"cache_ratio": 0.8022199988673475,
|
|
442
|
+
"cached_tokens": 84992,
|
|
443
|
+
"prompt_tokens": 105946,
|
|
444
|
+
"uncached_tokens": 20954,
|
|
445
|
+
"output_tokens": 4243,
|
|
446
|
+
"cache_weighted_input_10": 29453.2,
|
|
447
|
+
"cache_weighted_input_25": 42202,
|
|
448
|
+
"prompt_growth": 14222,
|
|
449
|
+
"antipatterns": 1,
|
|
450
|
+
"issues": 12,
|
|
451
|
+
"issue_types": [
|
|
452
|
+
"cache",
|
|
453
|
+
"cache_break",
|
|
454
|
+
"service_tier",
|
|
455
|
+
"missed_parallelism",
|
|
456
|
+
"tool_churn_cluster"
|
|
457
|
+
],
|
|
458
|
+
"read_fragmentation_paths": [],
|
|
459
|
+
"grep_sweep_count": 0
|
|
460
|
+
},
|
|
461
|
+
{
|
|
462
|
+
"session": "sess_29564_1783040931496_1783040931743_d0a04cd7e55e9cccf5271d2315a2b2e9",
|
|
463
|
+
"provider": "openai-oauth",
|
|
464
|
+
"model": "gpt-5.5",
|
|
465
|
+
"wall_ms": 54238,
|
|
466
|
+
"turns": 6,
|
|
467
|
+
"tool_calls": 6,
|
|
468
|
+
"tools_per_turn": 1,
|
|
469
|
+
"total_tool_ms": 830,
|
|
470
|
+
"llm_stream_ms": 53425,
|
|
471
|
+
"cache_ratio": 0.5636379032940977,
|
|
472
|
+
"cached_tokens": 59904,
|
|
473
|
+
"prompt_tokens": 106281,
|
|
474
|
+
"uncached_tokens": 46377,
|
|
475
|
+
"output_tokens": 4260,
|
|
476
|
+
"cache_weighted_input_10": 52367.4,
|
|
477
|
+
"cache_weighted_input_25": 61353,
|
|
478
|
+
"prompt_growth": 33594,
|
|
479
|
+
"antipatterns": 1,
|
|
480
|
+
"issues": 11,
|
|
481
|
+
"issue_types": [
|
|
482
|
+
"cache",
|
|
483
|
+
"cache_break",
|
|
484
|
+
"broad_tool_result",
|
|
485
|
+
"service_tier",
|
|
486
|
+
"missed_parallelism",
|
|
487
|
+
"tool_churn_cluster"
|
|
488
|
+
],
|
|
489
|
+
"read_fragmentation_paths": [],
|
|
490
|
+
"grep_sweep_count": 0
|
|
491
|
+
},
|
|
492
|
+
{
|
|
493
|
+
"session": "sess_43096_1783040996270_1783040996507_9f3169891fe62b67f6f8e76b9b17a9af",
|
|
494
|
+
"provider": "openai-oauth",
|
|
495
|
+
"model": "gpt-5.5",
|
|
496
|
+
"wall_ms": 86682,
|
|
497
|
+
"turns": 6,
|
|
498
|
+
"tool_calls": 7,
|
|
499
|
+
"tools_per_turn": 1.2,
|
|
500
|
+
"total_tool_ms": 622,
|
|
501
|
+
"llm_stream_ms": 86118,
|
|
502
|
+
"cache_ratio": 0.2864668514469675,
|
|
503
|
+
"cached_tokens": 33280,
|
|
504
|
+
"prompt_tokens": 116174,
|
|
505
|
+
"uncached_tokens": 82894,
|
|
506
|
+
"output_tokens": 8288,
|
|
507
|
+
"cache_weighted_input_10": 86222,
|
|
508
|
+
"cache_weighted_input_25": 91214,
|
|
509
|
+
"prompt_growth": 35643,
|
|
510
|
+
"antipatterns": 1,
|
|
511
|
+
"issues": 9,
|
|
512
|
+
"issue_types": [
|
|
513
|
+
"cache",
|
|
514
|
+
"cache_break",
|
|
515
|
+
"service_tier",
|
|
516
|
+
"tool_churn_cluster"
|
|
517
|
+
],
|
|
518
|
+
"read_fragmentation_paths": [],
|
|
519
|
+
"grep_sweep_count": 0
|
|
520
|
+
},
|
|
521
|
+
{
|
|
522
|
+
"session": "sess_34252_1783040998311_1783040998555_4239e25b6ce06b31759623c29219fa89",
|
|
523
|
+
"provider": "openai-oauth",
|
|
524
|
+
"model": "gpt-5.5",
|
|
525
|
+
"wall_ms": 7786,
|
|
526
|
+
"turns": 1,
|
|
527
|
+
"tool_calls": 0,
|
|
528
|
+
"tools_per_turn": 0,
|
|
529
|
+
"total_tool_ms": 0,
|
|
530
|
+
"llm_stream_ms": 7525,
|
|
531
|
+
"cache_ratio": 0.8839015968925334,
|
|
532
|
+
"cached_tokens": 4096,
|
|
533
|
+
"prompt_tokens": 4634,
|
|
534
|
+
"uncached_tokens": 538,
|
|
535
|
+
"output_tokens": 582,
|
|
536
|
+
"cache_weighted_input_10": 947.6,
|
|
537
|
+
"cache_weighted_input_25": 1562,
|
|
538
|
+
"prompt_growth": 0,
|
|
539
|
+
"antipatterns": 0,
|
|
540
|
+
"issues": 3,
|
|
541
|
+
"issue_types": [
|
|
542
|
+
"cache",
|
|
543
|
+
"cache_break",
|
|
544
|
+
"service_tier"
|
|
545
|
+
],
|
|
546
|
+
"read_fragmentation_paths": [],
|
|
547
|
+
"grep_sweep_count": 0
|
|
548
|
+
},
|
|
549
|
+
{
|
|
550
|
+
"session": "sess_47892_1783041016626_1783041016852_becf83de2ea689e9c275231762292b57",
|
|
551
|
+
"provider": "openai-oauth",
|
|
552
|
+
"model": "gpt-5.5",
|
|
553
|
+
"wall_ms": 67881,
|
|
554
|
+
"turns": 8,
|
|
555
|
+
"tool_calls": 25,
|
|
556
|
+
"tools_per_turn": 3.1,
|
|
557
|
+
"total_tool_ms": 1291,
|
|
558
|
+
"llm_stream_ms": 66922,
|
|
559
|
+
"cache_ratio": 0.7669665872282476,
|
|
560
|
+
"cached_tokens": 157696,
|
|
561
|
+
"prompt_tokens": 205610,
|
|
562
|
+
"uncached_tokens": 47914,
|
|
563
|
+
"output_tokens": 4409,
|
|
564
|
+
"cache_weighted_input_10": 63683.6,
|
|
565
|
+
"cache_weighted_input_25": 87338,
|
|
566
|
+
"prompt_growth": 40862,
|
|
567
|
+
"antipatterns": 2,
|
|
568
|
+
"issues": 13,
|
|
569
|
+
"issue_types": [
|
|
570
|
+
"cache",
|
|
571
|
+
"cache_break",
|
|
572
|
+
"tool_error",
|
|
573
|
+
"service_tier",
|
|
574
|
+
"read_fragmentation"
|
|
575
|
+
],
|
|
576
|
+
"read_fragmentation_paths": [
|
|
577
|
+
"src/runtime/agent/orchestrator/session/manager/compaction-runner.mjs",
|
|
578
|
+
"src/runtime/agent/orchestrator/session/loop.mjs"
|
|
579
|
+
],
|
|
580
|
+
"grep_sweep_count": 0
|
|
581
|
+
},
|
|
582
|
+
{
|
|
583
|
+
"session": "sess_60424_1783041088316_1783041088539_9dd11664b2a5044bc48546dfa5edab66",
|
|
584
|
+
"provider": "openai-oauth",
|
|
585
|
+
"model": "gpt-5.5",
|
|
586
|
+
"wall_ms": 99925,
|
|
587
|
+
"turns": 9,
|
|
588
|
+
"tool_calls": 14,
|
|
589
|
+
"tools_per_turn": 1.6,
|
|
590
|
+
"total_tool_ms": 703,
|
|
591
|
+
"llm_stream_ms": 98926,
|
|
592
|
+
"cache_ratio": 0.6735326528355557,
|
|
593
|
+
"cached_tokens": 176640,
|
|
594
|
+
"prompt_tokens": 262259,
|
|
595
|
+
"uncached_tokens": 85619,
|
|
596
|
+
"output_tokens": 7808,
|
|
597
|
+
"cache_weighted_input_10": 103283,
|
|
598
|
+
"cache_weighted_input_25": 129779,
|
|
599
|
+
"prompt_growth": 51020,
|
|
600
|
+
"antipatterns": 2,
|
|
601
|
+
"issues": 14,
|
|
602
|
+
"issue_types": [
|
|
603
|
+
"cache",
|
|
604
|
+
"cache_break",
|
|
605
|
+
"readonly_stall",
|
|
606
|
+
"service_tier",
|
|
607
|
+
"read_fragmentation",
|
|
608
|
+
"tool_churn_cluster"
|
|
609
|
+
],
|
|
610
|
+
"read_fragmentation_paths": [
|
|
611
|
+
"src/runtime/channels/index.mjs"
|
|
612
|
+
],
|
|
613
|
+
"grep_sweep_count": 0
|
|
614
|
+
},
|
|
615
|
+
{
|
|
616
|
+
"session": "sess_12676_1783041093473_1783041093707_779e3caee3f5f6c650870d1c9cb29e47",
|
|
617
|
+
"provider": "openai-oauth",
|
|
618
|
+
"model": "gpt-5.5",
|
|
619
|
+
"wall_ms": 87889,
|
|
620
|
+
"turns": 12,
|
|
621
|
+
"tool_calls": 18,
|
|
622
|
+
"tools_per_turn": 1.5,
|
|
623
|
+
"total_tool_ms": 3924,
|
|
624
|
+
"llm_stream_ms": 83770,
|
|
625
|
+
"cache_ratio": 0.8757537605195149,
|
|
626
|
+
"cached_tokens": 211456,
|
|
627
|
+
"prompt_tokens": 241456,
|
|
628
|
+
"uncached_tokens": 30000,
|
|
629
|
+
"output_tokens": 7233,
|
|
630
|
+
"cache_weighted_input_10": 51145.600000000006,
|
|
631
|
+
"cache_weighted_input_25": 82864,
|
|
632
|
+
"prompt_growth": 24441,
|
|
633
|
+
"antipatterns": 1,
|
|
634
|
+
"issues": 15,
|
|
635
|
+
"issue_types": [
|
|
636
|
+
"cache",
|
|
637
|
+
"cache_break",
|
|
638
|
+
"tool_error",
|
|
639
|
+
"service_tier",
|
|
640
|
+
"missed_parallelism",
|
|
641
|
+
"tool_churn_cluster"
|
|
642
|
+
],
|
|
643
|
+
"read_fragmentation_paths": [],
|
|
644
|
+
"grep_sweep_count": 0
|
|
645
|
+
},
|
|
646
|
+
{
|
|
647
|
+
"session": "sess_41124_1783041095028_1783041095274_e8bb99510c7c89e52275e67736e3d529",
|
|
648
|
+
"provider": "openai-oauth",
|
|
649
|
+
"model": "gpt-5.5",
|
|
650
|
+
"wall_ms": 96306,
|
|
651
|
+
"turns": 11,
|
|
652
|
+
"tool_calls": 16,
|
|
653
|
+
"tools_per_turn": 1.5,
|
|
654
|
+
"total_tool_ms": 1330,
|
|
655
|
+
"llm_stream_ms": 94689,
|
|
656
|
+
"cache_ratio": 0.7696438588942688,
|
|
657
|
+
"cached_tokens": 282624,
|
|
658
|
+
"prompt_tokens": 367214,
|
|
659
|
+
"uncached_tokens": 84590,
|
|
660
|
+
"output_tokens": 7011,
|
|
661
|
+
"cache_weighted_input_10": 112852.4,
|
|
662
|
+
"cache_weighted_input_25": 155246,
|
|
663
|
+
"prompt_growth": 70437,
|
|
664
|
+
"antipatterns": 1,
|
|
665
|
+
"issues": 18,
|
|
666
|
+
"issue_types": [
|
|
667
|
+
"cache",
|
|
668
|
+
"cache_break",
|
|
669
|
+
"readonly_stall",
|
|
670
|
+
"broad_tool_result",
|
|
671
|
+
"service_tier",
|
|
672
|
+
"missed_parallelism",
|
|
673
|
+
"tool_churn_cluster"
|
|
674
|
+
],
|
|
675
|
+
"read_fragmentation_paths": [],
|
|
676
|
+
"grep_sweep_count": 0
|
|
677
|
+
}
|
|
678
|
+
]
|
|
679
|
+
}
|